diff --git a/chart.jpg b/chart.jpg new file mode 100644 index 0000000..8d86322 Binary files /dev/null and b/chart.jpg differ diff --git a/chart.png b/chart.png new file mode 100644 index 0000000..ba3db33 Binary files /dev/null and b/chart.png differ diff --git a/images/Chart.png b/images/Chart.png new file mode 100644 index 0000000..9a50088 Binary files /dev/null and b/images/Chart.png differ diff --git a/images/Chartlatest.png b/images/Chartlatest.png new file mode 100644 index 0000000..6760d68 Binary files /dev/null and b/images/Chartlatest.png differ diff --git a/images/Chartlatest2.png b/images/Chartlatest2.png new file mode 100644 index 0000000..4a1a003 Binary files /dev/null and b/images/Chartlatest2.png differ diff --git a/images/chart.jpg b/images/chart.jpg new file mode 100644 index 0000000..8d86322 Binary files /dev/null and b/images/chart.jpg differ diff --git a/images/drawtoolbar.png b/images/drawtoolbar.png new file mode 100644 index 0000000..16826fa Binary files /dev/null and b/images/drawtoolbar.png differ diff --git a/images/swiper.png b/images/swiper.png new file mode 100644 index 0000000..1db08d9 Binary files /dev/null and b/images/swiper.png differ diff --git a/images/swiperlatest.png b/images/swiperlatest.png new file mode 100644 index 0000000..dd130cc Binary files /dev/null and b/images/swiperlatest.png differ diff --git a/images/thematicslider.png b/images/thematicslider.png new file mode 100644 index 0000000..0bc933c Binary files /dev/null and b/images/thematicslider.png differ diff --git a/images/thematicsliderlatest.png b/images/thematicsliderlatest.png new file mode 100644 index 0000000..bb2f209 Binary files /dev/null and b/images/thematicsliderlatest.png differ diff --git a/images/timeslider.png b/images/timeslider.png new file mode 100644 index 0000000..9cadb88 Binary files /dev/null and b/images/timeslider.png differ diff --git a/package - feb7.json b/package - feb7.json new file mode 100644 index 0000000..b249486 --- /dev/null +++ b/package - feb7.json @@ -0,0 +1,67 @@ +{ + "name": "geoview-pluginform", + "version": "0.1.0", + "homepage": "https://pewillia.github.io/GeoView-Plugins-Config", + "private": true, + "dependencies": { + "@material-ui/core": "^4.12.3", + "@material-ui/icons": "^4.11.2", + "@rjsf/core": "^5.13.0", + "@rjsf/material-ui": "^5.13.0", + "@rjsf/mui": "^5.13.0", + "@rjsf/utils": "^5.13.0", + "@rjsf/validator-ajv8": "^5.13.0", + "@testing-library/jest-dom": "^5.16.1", + "@testing-library/react": "^12.1.2", + "@testing-library/user-event": "^13.5.0", + "axios": "^0.24.0", + "formik": "^2.2.9", + "react": "^17.0.2", + "react-dom": "^17.0.2", + "react-router-dom": "^6.2.1", + "react-scripts": "5.0.0", + "web-vitals": "^2.1.2", + "yup": "^0.32.11", + "file-saver": "2.0.5", + "reactjs-popup": "2.0.5", + "react-jsonschema-form-pagination": "0.4.0", + "rjsf-tabs": "0.0.1" + }, + "scripts": { + "start": "react-scripts start", + "build": "react-scripts build", + "test": "react-scripts test", + "eject": "react-scripts eject", + "lint": "eslint src", + "postlint": "echo ✅ lint valid", + "deploy": "gh-pages -d build" + }, + "eslintConfig": { + "extends": [ + "react-app", + "react-app/jest" + ] + }, + "browserslist": { + "production": [ + ">0.2%", + "not dead", + "not op_mini all" + ], + "development": [ + "last 1 chrome version", + "last 1 firefox version", + "last 1 safari version" + ] + }, + "devDependencies": { + "geoview-core-types": "github:Canadian-Geospatial-Platform/GeoView#types", + "eslint": "^8.6.0", + "eslint-config-prettier": "^8.3.0", + "eslint-plugin-prettier": "^4.0.0", + "eslint-plugin-react": "^7.28.0", + "gh-pages": "^5.0.0", + "json-server": "^0.17.0", + "prettier": "^2.5.1" + } +} diff --git a/package-lock.json b/package-lock.json index 192d675..69d601c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,17 +10,27 @@ "dependencies": { "@material-ui/core": "^4.12.3", "@material-ui/icons": "^4.11.2", - "@rjsf/core": "^3.2.1", - "@rjsf/material-ui": "^3.2.1", + "@rjsf/core": "^5.17.0", + "@rjsf/material-ui": "^5.17.0", + "@rjsf/mui": "^5.17.0", + "@rjsf/utils": "^5.17.0", + "@rjsf/validator-ajv8": "^5.17.0", "@testing-library/jest-dom": "^5.16.1", "@testing-library/react": "^12.1.2", "@testing-library/user-event": "^13.5.0", "axios": "^0.24.0", + "file-saver": "2.0.5", "formik": "^2.2.9", "react": "^17.0.2", + "react-collapsible": "2.10.0", "react-dom": "^17.0.2", + "react-jsonschema-form-pagination": "0.4.0", "react-router-dom": "^6.2.1", "react-scripts": "5.0.0", + "react-virtualized-checkbox": "3.0.1", + "reactjs-popup": "2.0.5", + "rjsf-tabs": "0.0.1", + "util": "^0.12.5", "web-vitals": "^2.1.2", "yup": "^0.32.11" }, @@ -29,6 +39,8 @@ "eslint-config-prettier": "^8.3.0", "eslint-plugin-prettier": "^4.0.0", "eslint-plugin-react": "^7.28.0", + "geoview-core-types": "github:Canadian-Geospatial-Platform/GeoView#types", + "gh-pages": "^5.0.0", "json-server": "^0.17.0", "prettier": "^2.5.1" } @@ -333,11 +345,11 @@ } }, "node_modules/@babel/helper-module-imports": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.0.tgz", - "integrity": "sha512-kkH7sWzKPq0xt3H1n+ghb4xEMP8k0U7XV3kkB+ZGy69kDk2ySFW1qPi06sjKzFY3t1j6XbJSqr4mF9L7CYVyhg==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz", + "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==", "dependencies": { - "@babel/types": "^7.16.0" + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -441,10 +453,18 @@ "node": ">=6.9.0" } }, + "node_modules/@babel/helper-string-parser": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", + "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.15.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz", - "integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz", + "integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==", "engines": { "node": ">=6.9.0" } @@ -1780,11 +1800,11 @@ } }, "node_modules/@babel/runtime": { - "version": "7.16.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.16.5.tgz", - "integrity": "sha512-TXWihFIS3Pyv5hzR7j6ihmeLkZfrXGxAr5UfSl8CHf+6q/wpiYDkUau0czckpYG8QmnCIuPpdLtuA9VmuGGyMA==", + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.10.tgz", + "integrity": "sha512-21t/fkKLMZI4pqP2wlmsQAWnYW1PDyKyyUV4vCi+B25ydmdaYTKXPwCj0BzSUnZf4seIiYvSA3jcZ3gdsMFkLQ==", "dependencies": { - "regenerator-runtime": "^0.13.4" + "regenerator-runtime": "^0.14.0" }, "engines": { "node": ">=6.9.0" @@ -1802,6 +1822,11 @@ "node": ">=6.9.0" } }, + "node_modules/@babel/runtime/node_modules/regenerator-runtime": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", + "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==" + }, "node_modules/@babel/template": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.0.tgz", @@ -1836,11 +1861,12 @@ } }, "node_modules/@babel/types": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.0.tgz", - "integrity": "sha512-PJgg/k3SdLsGb3hhisFvtLOw5ts113klrpLuIPtCJIU+BB24fqq6lf8RWqKJEjzqXR9AEH1rIb5XTqwBHB+kQg==", + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.10.tgz", + "integrity": "sha512-obaoigiLrlDZ7TUQln/8m4mSqIW2QFeOrCQc9r+xsaHGNoplVNYlRVpsfE8Vj35GEm2ZH4ZhrNYogs/3fj85kg==", "dependencies": { - "@babel/helper-validator-identifier": "^7.15.7", + "@babel/helper-string-parser": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.5", "to-fast-properties": "^2.0.0" }, "engines": { @@ -1857,11 +1883,181 @@ "resolved": "https://registry.npmjs.org/@csstools/normalize.css/-/normalize.css-12.0.0.tgz", "integrity": "sha512-M0qqxAcwCsIVfpFQSlGN5XjXWu8l5JDZN+fPt1LeW5SZexQTgnaEvgXAY+CeygRw0EeppWHi12JxESWiWrB0Sg==" }, + "node_modules/@emotion/babel-plugin": { + "version": "11.11.0", + "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.11.0.tgz", + "integrity": "sha512-m4HEDZleaaCH+XgDDsPF15Ht6wTLsgDTeR3WYj9Q/k76JtWhrJjcP4+/XlG8LGT/Rol9qUfOIztXeA84ATpqPQ==", + "peer": true, + "dependencies": { + "@babel/helper-module-imports": "^7.16.7", + "@babel/runtime": "^7.18.3", + "@emotion/hash": "^0.9.1", + "@emotion/memoize": "^0.8.1", + "@emotion/serialize": "^1.1.2", + "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/@emotion/hash": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.1.tgz", + "integrity": "sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ==", + "peer": true + }, + "node_modules/@emotion/babel-plugin/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@emotion/cache": { + "version": "11.11.0", + "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.11.0.tgz", + "integrity": "sha512-P34z9ssTCBi3e9EI1ZsWpNHcfY1r09ZO0rZbRO2ob3ZQMnFI35jB536qoXbkdesr5EUhYi22anuEJuyxifaqAQ==", + "peer": true, + "dependencies": { + "@emotion/memoize": "^0.8.1", + "@emotion/sheet": "^1.2.2", + "@emotion/utils": "^1.2.1", + "@emotion/weak-memoize": "^0.3.1", + "stylis": "4.2.0" + } + }, "node_modules/@emotion/hash": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.8.0.tgz", "integrity": "sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==" }, + "node_modules/@emotion/is-prop-valid": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.1.tgz", + "integrity": "sha512-61Mf7Ufx4aDxx1xlDeOm8aFFigGHE4z+0sKCa+IHCeZKiyP9RLD0Mmx7m8b9/Cf37f7NAvQOOJAbQQGVr5uERw==", + "peer": true, + "dependencies": { + "@emotion/memoize": "^0.8.1" + } + }, + "node_modules/@emotion/memoize": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.1.tgz", + "integrity": "sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==", + "peer": true + }, + "node_modules/@emotion/react": { + "version": "11.11.1", + "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.11.1.tgz", + "integrity": "sha512-5mlW1DquU5HaxjLkfkGN1GA/fvVGdyHURRiX/0FHl2cfIfRxSOfmxEH5YS43edp0OldZrZ+dkBKbngxcNCdZvA==", + "peer": true, + "dependencies": { + "@babel/runtime": "^7.18.3", + "@emotion/babel-plugin": "^11.11.0", + "@emotion/cache": "^11.11.0", + "@emotion/serialize": "^1.1.2", + "@emotion/use-insertion-effect-with-fallbacks": "^1.0.1", + "@emotion/utils": "^1.2.1", + "@emotion/weak-memoize": "^0.3.1", + "hoist-non-react-statics": "^3.3.1" + }, + "peerDependencies": { + "react": ">=16.8.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@emotion/serialize": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.1.2.tgz", + "integrity": "sha512-zR6a/fkFP4EAcCMQtLOhIgpprZOwNmCldtpaISpvz348+DP4Mz8ZoKaGGCQpbzepNIUWbq4w6hNZkwDyKoS+HA==", + "peer": true, + "dependencies": { + "@emotion/hash": "^0.9.1", + "@emotion/memoize": "^0.8.1", + "@emotion/unitless": "^0.8.1", + "@emotion/utils": "^1.2.1", + "csstype": "^3.0.2" + } + }, + "node_modules/@emotion/serialize/node_modules/@emotion/hash": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.1.tgz", + "integrity": "sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ==", + "peer": true + }, + "node_modules/@emotion/serialize/node_modules/csstype": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", + "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==", + "peer": true + }, + "node_modules/@emotion/sheet": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.2.2.tgz", + "integrity": "sha512-0QBtGvaqtWi+nx6doRwDdBIzhNdZrXUppvTM4dtZZWEGTXL/XE/yJxLMGlDT1Gt+UHH5IX1n+jkXyytE/av7OA==", + "peer": true + }, + "node_modules/@emotion/styled": { + "version": "11.11.0", + "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.11.0.tgz", + "integrity": "sha512-hM5Nnvu9P3midq5aaXj4I+lnSfNi7Pmd4EWk1fOZ3pxookaQTNew6bp4JaCBYM4HVFZF9g7UjJmsUmC2JlxOng==", + "peer": true, + "dependencies": { + "@babel/runtime": "^7.18.3", + "@emotion/babel-plugin": "^11.11.0", + "@emotion/is-prop-valid": "^1.2.1", + "@emotion/serialize": "^1.1.2", + "@emotion/use-insertion-effect-with-fallbacks": "^1.0.1", + "@emotion/utils": "^1.2.1" + }, + "peerDependencies": { + "@emotion/react": "^11.0.0-rc.0", + "react": ">=16.8.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@emotion/unitless": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.1.tgz", + "integrity": "sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ==", + "peer": true + }, + "node_modules/@emotion/use-insertion-effect-with-fallbacks": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.0.1.tgz", + "integrity": "sha512-jT/qyKZ9rzLErtrjGgdkMBn2OP8wl0G3sQlBb3YPryvKHsjvINUhVaPFfP+fpBcOkmrVOVEEHQFJ7nbj2TH2gw==", + "peer": true, + "peerDependencies": { + "react": ">=16.8.0" + } + }, + "node_modules/@emotion/utils": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.2.1.tgz", + "integrity": "sha512-Y2tGf3I+XVnajdItskUCn6LX+VUDmP6lTL4fcqsXAv43dnlbZiuW4MWQW38rW/BVWSE7Q/7+XQocmpnRYILUmg==", + "peer": true + }, + "node_modules/@emotion/weak-memoize": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.3.1.tgz", + "integrity": "sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww==", + "peer": true + }, "node_modules/@eslint/eslintrc": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.0.5.tgz", @@ -1922,6 +2118,44 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/@floating-ui/core": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.4.1.tgz", + "integrity": "sha512-jk3WqquEJRlcyu7997NtR5PibI+y5bi+LS3hPmguVClypenMsCY3CBa3LAQnozRCtCrYWSEtAdiskpamuJRFOQ==", + "peer": true, + "dependencies": { + "@floating-ui/utils": "^0.1.1" + } + }, + "node_modules/@floating-ui/dom": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.5.1.tgz", + "integrity": "sha512-KwvVcPSXg6mQygvA1TjbN/gh///36kKtllIF8SUm0qpFj8+rvYrpvlYdL1JoA71SHpDqgSSdGOSoQ0Mp3uY5aw==", + "peer": true, + "dependencies": { + "@floating-ui/core": "^1.4.1", + "@floating-ui/utils": "^0.1.1" + } + }, + "node_modules/@floating-ui/react-dom": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.0.2.tgz", + "integrity": "sha512-5qhlDvjaLmAst/rKb3VdlCinwTF4EYMiVxuuc/HVUjs46W0zgtbMmAZ1UTsDrRTxRmUEzl92mOtWbeeXL26lSQ==", + "peer": true, + "dependencies": { + "@floating-ui/dom": "^1.5.1" + }, + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + } + }, + "node_modules/@floating-ui/utils": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.1.1.tgz", + "integrity": "sha512-m0G6wlnhm/AX0H12IOWtK8gASEMffnX08RtKkCgTdHb9JpHKGloI7icFfLg9ZmQeavcvR0PKmzxClyuFPSjKWw==", + "peer": true + }, "node_modules/@humanwhocodes/config-array": { "version": "0.9.2", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.2.tgz", @@ -2667,15 +2901,16 @@ } }, "node_modules/@material-ui/core": { - "version": "4.12.3", - "resolved": "https://registry.npmjs.org/@material-ui/core/-/core-4.12.3.tgz", - "integrity": "sha512-sdpgI/PL56QVsEJldwEe4FFaFTLUqN+rd7sSZiRCdx2E/C7z5yK0y/khAWVBH24tXwto7I1hCzNWfJGZIYJKnw==", + "version": "4.12.4", + "resolved": "https://registry.npmjs.org/@material-ui/core/-/core-4.12.4.tgz", + "integrity": "sha512-tr7xekNlM9LjA6pagJmL8QCgZXaubWUwkJnoYcMKd4gw/t4XiyvnTkjdGrUVicyB2BsdaAv1tvow45bPM4sSwQ==", + "deprecated": "Material UI v4 doesn't receive active development since September 2021. See the guide https://mui.com/material-ui/migration/migration-v4/ to upgrade to v5.", "dependencies": { "@babel/runtime": "^7.4.4", - "@material-ui/styles": "^4.11.4", - "@material-ui/system": "^4.12.1", + "@material-ui/styles": "^4.11.5", + "@material-ui/system": "^4.12.2", "@material-ui/types": "5.1.0", - "@material-ui/utils": "^4.11.2", + "@material-ui/utils": "^4.11.3", "@types/react-transition-group": "^4.2.0", "clsx": "^1.0.4", "hoist-non-react-statics": "^3.3.2", @@ -2703,9 +2938,9 @@ } }, "node_modules/@material-ui/icons": { - "version": "4.11.2", - "resolved": "https://registry.npmjs.org/@material-ui/icons/-/icons-4.11.2.tgz", - "integrity": "sha512-fQNsKX2TxBmqIGJCSi3tGTO/gZ+eJgWmMJkgDiOfyNaunNaxcklJQFaFogYcFl0qFuaEz1qaXYXboa/bUXVSOQ==", + "version": "4.11.3", + "resolved": "https://registry.npmjs.org/@material-ui/icons/-/icons-4.11.3.tgz", + "integrity": "sha512-IKHlyx6LDh8n19vzwH5RtHIOHl9Tu90aAAxcbWME6kp4dmvODM3UvOHJeMIDzUbd4muuJKHmlNoBN+mDY4XkBA==", "dependencies": { "@babel/runtime": "^7.4.4" }, @@ -2725,14 +2960,15 @@ } }, "node_modules/@material-ui/styles": { - "version": "4.11.4", - "resolved": "https://registry.npmjs.org/@material-ui/styles/-/styles-4.11.4.tgz", - "integrity": "sha512-KNTIZcnj/zprG5LW0Sao7zw+yG3O35pviHzejMdcSGCdWbiO8qzRgOYL8JAxAsWBKOKYwVZxXtHWaB5T2Kvxew==", + "version": "4.11.5", + "resolved": "https://registry.npmjs.org/@material-ui/styles/-/styles-4.11.5.tgz", + "integrity": "sha512-o/41ot5JJiUsIETME9wVLAJrmIWL3j0R0Bj2kCOLbSfqEkKf0fmaPt+5vtblUh5eXr2S+J/8J3DaCb10+CzPGA==", + "deprecated": "Material UI v4 doesn't receive active development since September 2021. See the guide https://mui.com/material-ui/migration/migration-v4/ to upgrade to v5.", "dependencies": { "@babel/runtime": "^7.4.4", "@emotion/hash": "^0.8.0", "@material-ui/types": "5.1.0", - "@material-ui/utils": "^4.11.2", + "@material-ui/utils": "^4.11.3", "clsx": "^1.0.4", "csstype": "^2.5.2", "hoist-non-react-statics": "^3.3.2", @@ -2765,12 +3001,12 @@ } }, "node_modules/@material-ui/system": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/@material-ui/system/-/system-4.12.1.tgz", - "integrity": "sha512-lUdzs4q9kEXZGhbN7BptyiS1rLNHe6kG9o8Y307HCvF4sQxbCgpL2qi+gUk+yI8a2DNk48gISEQxoxpgph0xIw==", + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/@material-ui/system/-/system-4.12.2.tgz", + "integrity": "sha512-6CSKu2MtmiJgcCGf6nBQpM8fLkuB9F55EKfbdTC80NND5wpTmKzwdhLYLH3zL4cLlK0gVaaltW7/wMuyTnN0Lw==", "dependencies": { "@babel/runtime": "^7.4.4", - "@material-ui/utils": "^4.11.2", + "@material-ui/utils": "^4.11.3", "csstype": "^2.5.2", "prop-types": "^15.7.2" }, @@ -2806,9 +3042,9 @@ } }, "node_modules/@material-ui/utils": { - "version": "4.11.2", - "resolved": "https://registry.npmjs.org/@material-ui/utils/-/utils-4.11.2.tgz", - "integrity": "sha512-Uul8w38u+PICe2Fg2pDKCaIG7kOyhowZ9vjiC1FsVwPABTW8vPPKfF6OvxRq3IiBaI1faOJmgdvMG7rMJARBhA==", + "version": "4.11.3", + "resolved": "https://registry.npmjs.org/@material-ui/utils/-/utils-4.11.3.tgz", + "integrity": "sha512-ZuQPV4rBK/V1j2dIkSSEcH5uT6AaHuKWFfotADHsC0wVL1NLd2WkFCm4ZZbX33iO4ydl6V0GPngKm8HZQ2oujg==", "dependencies": { "@babel/runtime": "^7.4.4", "prop-types": "^15.7.2", @@ -2822,6 +3058,320 @@ "react-dom": "^16.8.0 || ^17.0.0" } }, + "node_modules/@mui/base": { + "version": "5.0.0-beta.14", + "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-beta.14.tgz", + "integrity": "sha512-Je/9JzzYObsuLCIClgE8XvXNFb55IEz8n2NtStUfASfNiVrwiR8t6VVFFuhofehkyTIN34tq1qbBaOjCnOovBw==", + "peer": true, + "dependencies": { + "@babel/runtime": "^7.22.10", + "@emotion/is-prop-valid": "^1.2.1", + "@floating-ui/react-dom": "^2.0.1", + "@mui/types": "^7.2.4", + "@mui/utils": "^5.14.8", + "@popperjs/core": "^2.11.8", + "clsx": "^2.0.0", + "prop-types": "^15.8.1", + "react-is": "^18.2.0" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui" + }, + "peerDependencies": { + "@types/react": "^17.0.0 || ^18.0.0", + "react": "^17.0.0 || ^18.0.0", + "react-dom": "^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/base/node_modules/clsx": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.0.0.tgz", + "integrity": "sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q==", + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/@mui/base/node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "peer": true + }, + "node_modules/@mui/core-downloads-tracker": { + "version": "5.14.8", + "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.14.8.tgz", + "integrity": "sha512-8V7ZOC/lKkM03TRHqaThQFIq6bWPnj7L/ZWPh0ymldYFFyh8XdF0ywTgafsofDNYT4StlNknbaTjVHBma3SNjQ==", + "peer": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui" + } + }, + "node_modules/@mui/icons-material": { + "version": "5.14.8", + "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-5.14.8.tgz", + "integrity": "sha512-YXcReLydTuNWb1/PxduAH5LgnHNH6spSQBaA0JOz9HD4J+vwst0IanAQgsXy9KKCJSjCsHywE3DB8X+w/b4eeQ==", + "peer": true, + "dependencies": { + "@babel/runtime": "^7.22.10" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui" + }, + "peerDependencies": { + "@mui/material": "^5.0.0", + "@types/react": "^17.0.0 || ^18.0.0", + "react": "^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/material": { + "version": "5.14.8", + "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.14.8.tgz", + "integrity": "sha512-fqvDGGF1pXwOOL/f0Gw+KHo/67hasRpf2ApTIJkbuONOk9AUb2jnYMEqCWmL2sUcbbE3ShMbHl8N7HPSsRv1/A==", + "peer": true, + "dependencies": { + "@babel/runtime": "^7.22.10", + "@mui/base": "5.0.0-beta.14", + "@mui/core-downloads-tracker": "^5.14.8", + "@mui/system": "^5.14.8", + "@mui/types": "^7.2.4", + "@mui/utils": "^5.14.8", + "@types/react-transition-group": "^4.4.6", + "clsx": "^2.0.0", + "csstype": "^3.1.2", + "prop-types": "^15.8.1", + "react-is": "^18.2.0", + "react-transition-group": "^4.4.5" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui" + }, + "peerDependencies": { + "@emotion/react": "^11.5.0", + "@emotion/styled": "^11.3.0", + "@types/react": "^17.0.0 || ^18.0.0", + "react": "^17.0.0 || ^18.0.0", + "react-dom": "^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@emotion/react": { + "optional": true + }, + "@emotion/styled": { + "optional": true + }, + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/material/node_modules/clsx": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.0.0.tgz", + "integrity": "sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q==", + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/@mui/material/node_modules/csstype": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", + "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==", + "peer": true + }, + "node_modules/@mui/material/node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "peer": true + }, + "node_modules/@mui/private-theming": { + "version": "5.14.8", + "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.14.8.tgz", + "integrity": "sha512-iBzpcl3Mh92XaYpYPdgzzRxNGkjpoDz8rf8/q5m+EBPowFEHV+CCS9hC0Q2pOKLW3VFFikA7w/GHt7n++40JGQ==", + "peer": true, + "dependencies": { + "@babel/runtime": "^7.22.10", + "@mui/utils": "^5.14.8", + "prop-types": "^15.8.1" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui" + }, + "peerDependencies": { + "@types/react": "^17.0.0 || ^18.0.0", + "react": "^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/styled-engine": { + "version": "5.14.8", + "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.14.8.tgz", + "integrity": "sha512-LGwOav/Y40PZWZ2yDk4beUoRlc57Vg+Vpxi9V9BBtT2ESAucCgFobkt+T8eVLMWF9huUou5pwKgLSU5pF90hBg==", + "peer": true, + "dependencies": { + "@babel/runtime": "^7.22.10", + "@emotion/cache": "^11.11.0", + "csstype": "^3.1.2", + "prop-types": "^15.8.1" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui" + }, + "peerDependencies": { + "@emotion/react": "^11.4.1", + "@emotion/styled": "^11.3.0", + "react": "^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@emotion/react": { + "optional": true + }, + "@emotion/styled": { + "optional": true + } + } + }, + "node_modules/@mui/styled-engine/node_modules/csstype": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", + "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==", + "peer": true + }, + "node_modules/@mui/system": { + "version": "5.14.8", + "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.14.8.tgz", + "integrity": "sha512-Dxnasv7Pj5hYe4ZZFKJZu4ufKm6cxpitWt3A+qMPps22YhqyeEqgDBq/HsAB3GOjqDP40fTAvQvS/Hguf4SJuw==", + "peer": true, + "dependencies": { + "@babel/runtime": "^7.22.10", + "@mui/private-theming": "^5.14.8", + "@mui/styled-engine": "^5.14.8", + "@mui/types": "^7.2.4", + "@mui/utils": "^5.14.8", + "clsx": "^2.0.0", + "csstype": "^3.1.2", + "prop-types": "^15.8.1" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui" + }, + "peerDependencies": { + "@emotion/react": "^11.5.0", + "@emotion/styled": "^11.3.0", + "@types/react": "^17.0.0 || ^18.0.0", + "react": "^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@emotion/react": { + "optional": true + }, + "@emotion/styled": { + "optional": true + }, + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/system/node_modules/clsx": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.0.0.tgz", + "integrity": "sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q==", + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/@mui/system/node_modules/csstype": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", + "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==", + "peer": true + }, + "node_modules/@mui/types": { + "version": "7.2.4", + "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.2.4.tgz", + "integrity": "sha512-LBcwa8rN84bKF+f5sDyku42w1NTxaPgPyYKODsh01U1fVstTClbUoSA96oyRBnSNyEiAVjKm6Gwx9vjR+xyqHA==", + "peer": true, + "peerDependencies": { + "@types/react": "*" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/utils": { + "version": "5.14.8", + "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.14.8.tgz", + "integrity": "sha512-1Ls2FfyY2yVSz9NEqedh3J8JAbbZAnUWkOWLE2f4/Hc4T5UWHMfzBLLrCqExfqyfyU+uXYJPGeNIsky6f8Gh5Q==", + "peer": true, + "dependencies": { + "@babel/runtime": "^7.22.10", + "@types/prop-types": "^15.7.5", + "@types/react-is": "^18.2.1", + "prop-types": "^15.8.1", + "react-is": "^18.2.0" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui" + }, + "peerDependencies": { + "react": "^17.0.0 || ^18.0.0" + } + }, + "node_modules/@mui/utils/node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "peer": true + }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -2903,52 +3453,143 @@ } } }, - "node_modules/@pmmmwh/react-refresh-webpack-plugin/node_modules/source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "node_modules/@pmmmwh/react-refresh-webpack-plugin/node_modules/source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "engines": { + "node": ">= 8" + } + }, + "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==", + "peer": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/popperjs" + } + }, + "node_modules/@rjsf/core": { + "version": "5.17.0", + "resolved": "https://registry.npmjs.org/@rjsf/core/-/core-5.17.0.tgz", + "integrity": "sha512-0woSU+VU+t2kbDNSyMQhjxJOXJbk3F6lSHxf8XmS4yV3sXP/yr/vo7J3qcvXbSvCLPYMQHvskBFhCIaQqyHWBg==", + "dependencies": { + "lodash": "^4.17.21", + "lodash-es": "^4.17.21", + "markdown-to-jsx": "^7.4.1", + "nanoid": "^3.3.7", + "prop-types": "^15.8.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@rjsf/utils": "^5.16.x", + "react": "^16.14.0 || >=17" + } + }, + "node_modules/@rjsf/material-ui": { + "version": "5.17.0", + "resolved": "https://registry.npmjs.org/@rjsf/material-ui/-/material-ui-5.17.0.tgz", + "integrity": "sha512-EBUC2Pmx4sYslrRjnepa0XXtTsVLSfj7DOQZRrLdYMEL3xSfuMWIc33OOIqGXUGWeMNP8Frc3Z+4RZl+URyguw==", + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@material-ui/core": "^4.12.3", + "@material-ui/icons": "^4.11.2", + "@rjsf/core": "^5.16.x", + "@rjsf/utils": "^5.16.x", + "react": "^16.14.0 || >=17" + } + }, + "node_modules/@rjsf/mui": { + "version": "5.17.0", + "resolved": "https://registry.npmjs.org/@rjsf/mui/-/mui-5.17.0.tgz", + "integrity": "sha512-K1t10I9LdNjzBgllqWqGB4FJZ15ekc7l1Uqr2IWJUq7ICPw54jey7LdPGZOq8Su0sULW0Q779GbIwUM3+4g+DQ==", "engines": { - "node": ">= 8" + "node": ">=14" + }, + "peerDependencies": { + "@emotion/react": "^11.7.0", + "@emotion/styled": "^11.6.0", + "@mui/icons-material": "^5.2.0", + "@mui/material": "^5.2.2", + "@rjsf/core": "^5.16.x", + "@rjsf/utils": "^5.16.x", + "react": ">=17" + } + }, + "node_modules/@rjsf/utils": { + "version": "5.17.0", + "resolved": "https://registry.npmjs.org/@rjsf/utils/-/utils-5.17.0.tgz", + "integrity": "sha512-Hy2uAxMKWZIZSMzc2AiHrdACYvHj9GDynrdApMgUTxfjpzj5DT7Rghl/FGj7gg8Zy8VtdVNTCbkIzfS8xt4x7g==", + "dependencies": { + "json-schema-merge-allof": "^0.8.1", + "jsonpointer": "^5.0.1", + "lodash": "^4.17.21", + "lodash-es": "^4.17.21", + "react-is": "^18.2.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "react": "^16.14.0 || >=17" } }, - "node_modules/@rjsf/core": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/@rjsf/core/-/core-3.2.1.tgz", - "integrity": "sha512-dk8ihvxFbcuIwU7G+HiJbFgwyIvaumPt5g5zfnuC26mwTUPlaDGFXKK2yITp8tJ3+hcwS5zEXtAN9wUkfuM4jA==", + "node_modules/@rjsf/utils/node_modules/jsonpointer": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.1.tgz", + "integrity": "sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@rjsf/utils/node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" + }, + "node_modules/@rjsf/validator-ajv8": { + "version": "5.17.0", + "resolved": "https://registry.npmjs.org/@rjsf/validator-ajv8/-/validator-ajv8-5.17.0.tgz", + "integrity": "sha512-ZLTpvZDzBt1+Wftao2AkpRaSvxaVRrutvFX3/oy640/KsWUfl0ofV33ai9O4aptKSnOPjfRiLqPJgbPHgQAhmw==", "dependencies": { - "@types/json-schema": "^7.0.7", - "ajv": "^6.7.0", - "core-js-pure": "^3.6.5", - "json-schema-merge-allof": "^0.6.0", - "jsonpointer": "^5.0.0", - "lodash": "^4.17.15", - "nanoid": "^3.1.23", - "prop-types": "^15.7.2", - "react-is": "^16.9.0" + "ajv": "^8.12.0", + "ajv-formats": "^2.1.1", + "lodash": "^4.17.21", + "lodash-es": "^4.17.21" }, "engines": { - "node": ">=12" + "node": ">=14" }, "peerDependencies": { - "react": ">=16" + "@rjsf/utils": "^5.16.x" } }, - "node_modules/@rjsf/core/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==" - }, - "node_modules/@rjsf/material-ui": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/@rjsf/material-ui/-/material-ui-3.2.1.tgz", - "integrity": "sha512-8UiDeDbjCImFSfOegGu13otQ7OdP9FOYpcLjeouppnhs+MPeIEAtYS+jCcBKmi3reyTagC15/KVSRhde1wS1vg==", - "peerDependencies": { - "@material-ui/core": "^4.2.0", - "@material-ui/icons": "^4.2.1", - "@rjsf/core": "^3.0.0", - "react": ">=16" + "node_modules/@rjsf/validator-ajv8/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, + "node_modules/@rjsf/validator-ajv8/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, "node_modules/@rollup/plugin-babel": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.0.tgz", @@ -3717,9 +4358,9 @@ "integrity": "sha512-ekoj4qOQYp7CvjX8ZDBgN86w3MqQhLE1hczEJbEIjgFEumDy+na/4AJAbLXfgEWFNB2pKadM5rPFtuSGMWK7xA==" }, "node_modules/@types/prop-types": { - "version": "15.7.4", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.4.tgz", - "integrity": "sha512-rZ5drC/jWjrArrS8BR6SIr4cWpW09RNTYt9AMZo3Jwwif+iacXAqgVjm0B0Bv/S1jhDXKHqRVNCbACkJ89RAnQ==" + "version": "15.7.5", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", + "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" }, "node_modules/@types/q": { "version": "1.5.5", @@ -3737,27 +4378,36 @@ "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==" }, "node_modules/@types/react": { - "version": "17.0.37", - "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.37.tgz", - "integrity": "sha512-2FS1oTqBGcH/s0E+CjrCCR9+JMpsu9b69RTFO+40ua43ZqP5MmQ4iUde/dMjWR909KxZwmOQIFq6AV6NjEG5xg==", + "version": "17.0.64", + "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.64.tgz", + "integrity": "sha512-IlgbX/vglDTwrCRgad6fTCzOT+D/5C0xwuvrzfuqfhg9gJrkFqAGADpUFlEtqbrP1IEo9QLSbo41MaFfoIu9Aw==", "dependencies": { "@types/prop-types": "*", "@types/scheduler": "*", "csstype": "^3.0.2" } }, + "node_modules/@types/react-is": { + "version": "18.2.1", + "resolved": "https://registry.npmjs.org/@types/react-is/-/react-is-18.2.1.tgz", + "integrity": "sha512-wyUkmaaSZEzFZivD8F2ftSyAfk6L+DfFliVj/mYdOXbVjRcS87fQJLTnhk6dRZPuJjI+9g6RZJO4PNCngUrmyw==", + "peer": true, + "dependencies": { + "@types/react": "*" + } + }, "node_modules/@types/react-transition-group": { - "version": "4.4.4", - "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.4.tgz", - "integrity": "sha512-7gAPz7anVK5xzbeQW9wFBDg7G++aPLAFY0QaSMOou9rJZpbuI58WAuJrgu+qR92l61grlnCUe7AFX8KGahAgug==", + "version": "4.4.6", + "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.6.tgz", + "integrity": "sha512-VnCdSxfcm08KjsJVQcfBmhEQAPnLB8G08hAxn39azX1qYBQ/5RVQuoHuKIcfKOdncuaUvEpFKFzEvbtIMsfVew==", "dependencies": { "@types/react": "*" } }, "node_modules/@types/react/node_modules/csstype": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.10.tgz", - "integrity": "sha512-2u44ZG2OcNUO9HDp/Jl8C07x6pU/eTR3ncV91SiK3dhG9TWvRVsCoJw14Ckx5DgWkzGA3waZWO3d7pgqpUI/XA==" + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", + "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==" }, "node_modules/@types/resolve": { "version": "1.17.1", @@ -3773,9 +4423,9 @@ "integrity": "sha512-xoDlM2S4ortawSWORYqsdU+2rxdh4LRW9ytc3zmT37RIKQh6IHyKwwtKhKis9ah8ol07DCkZxPt8BBvPjC6v4g==" }, "node_modules/@types/scheduler": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", - "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==" + "version": "0.16.3", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.3.tgz", + "integrity": "sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==" }, "node_modules/@types/serve-index": { "version": "1.9.1", @@ -4489,6 +5139,15 @@ "node": ">=8" } }, + "node_modules/array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/array.prototype.flat": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.5.tgz", @@ -4589,6 +5248,17 @@ "postcss": "^8.1.0" } }, + "node_modules/available-typed-arrays": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.6.tgz", + "integrity": "sha512-j1QzY8iPNPG4o4xmO3ptzpRxTciqD3MgEHtifP/YnJpIo58Xu+ne4BejlbkuaLfXn/nz6HFiw29bLpj2PNMdGg==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/axe-core": { "version": "4.3.5", "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.3.5.tgz", @@ -5289,12 +5959,17 @@ } }, "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.6.tgz", + "integrity": "sha512-Mj50FLHtlsoVfRfnHaZvyrooHcrlceNZdL/QBvJJVd9Ta55qCQK0gs4ss2oZDeV9zFCs6ewzYgVE5yfVmfFpVg==", "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.3", + "set-function-length": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -5498,9 +6173,9 @@ } }, "node_modules/clsx": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.1.1.tgz", - "integrity": "sha512-6/bPho624p3S2pMyvP5kKBPXnI3ufHLObBFCfgx+LkeR5lg2XYy2hqZqUf45ypD8COn2bhgGJSUE+l5dhNBieA==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz", + "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==", "engines": { "node": ">=6" } @@ -5761,6 +6436,7 @@ "version": "3.20.0", "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.20.0.tgz", "integrity": "sha512-KjbKU7UEfg4YPpskMtMXPhUKn7m/1OdTHTVjy09ScR2LVaoUXe8Jh0UdvN2EKUR6iKTJph52SJP95mAB0MnVLQ==", + "deprecated": "core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js.", "hasInstallScript": true, "funding": { "type": "opencollective", @@ -5792,6 +6468,7 @@ "version": "3.20.0", "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.20.0.tgz", "integrity": "sha512-qsrbIwWSEEYOM7z616jAVgwhuDDtPLwZSpUsU3vyUkHYqKTf/uwOJBZg2V7lMurYWkpVlaVOxBrfX0Q3ppvjfg==", + "deprecated": "core-js-pure@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js-pure.", "hasInstallScript": true, "funding": { "type": "opencollective", @@ -6260,9 +6937,9 @@ "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==" }, "node_modules/csstype": { - "version": "2.6.19", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.19.tgz", - "integrity": "sha512-ZVxXaNy28/k3kJg0Fou5MiYpp88j7H9hLZp8PDC3jV0WFjfH5E9xHb56L0W59cPbKbcHXeP4qyT8PrHp8t6LcQ==" + "version": "2.6.21", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.21.tgz", + "integrity": "sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w==" }, "node_modules/damerau-levenshtein": { "version": "1.0.7", @@ -6383,6 +7060,20 @@ "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==", "dev": true }, + "node_modules/define-data-property": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.2.tgz", + "integrity": "sha512-SRtsSqsDbgpJBbW3pABMCOt6rQyeM8s8RiyeSN8jYG8sYmt/kGJejbydttUsnDs1tadr19tvhT4ShwMyoqAm4g==", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.2", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/define-lazy-prop": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", @@ -6592,9 +7283,9 @@ } }, "node_modules/dom-helpers/node_modules/csstype": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.10.tgz", - "integrity": "sha512-2u44ZG2OcNUO9HDp/Jl8C07x6pU/eTR3ncV91SiK3dhG9TWvRVsCoJw14Ckx5DgWkzGA3waZWO3d7pgqpUI/XA==" + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", + "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==" }, "node_modules/dom-serializer": { "version": "1.3.2", @@ -6744,6 +7435,12 @@ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.27.tgz", "integrity": "sha512-uZ95szi3zUbzRDx1zx/xnsCG+2xgZyy57pDOeaeO4r8zx5Dqe8Jv1ti8cunvBwJHVI5LzPuw8umKwZb3WKYxSQ==" }, + "node_modules/email-addresses": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/email-addresses/-/email-addresses-5.0.0.tgz", + "integrity": "sha512-4OIPYlA6JXqtVn8zpHpGiI7vE6EQOAg16aGnDMIAlZVinnoZ8208tW1hAbjWydgN/4PLTT9q+O1K6AH/vALJGw==", + "dev": true + }, "node_modules/emittery": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz", @@ -6878,6 +7575,14 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/es-module-lexer": { "version": "0.9.3", "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", @@ -7954,6 +8659,11 @@ "webpack": "^4.0.0 || ^5.0.0" } }, + "node_modules/file-saver": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/file-saver/-/file-saver-2.0.5.tgz", + "integrity": "sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==" + }, "node_modules/filelist": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", @@ -7981,6 +8691,32 @@ "node": ">=10" } }, + "node_modules/filename-reserved-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz", + "integrity": "sha512-lc1bnsSr4L4Bdif8Xb/qrtokGbq5zlsms/CYH8PP+WtCkGNF65DPiQY8vG3SakEdRn8Dlnm+gW/qWKKjS5sZzQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/filenamify": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-4.3.0.tgz", + "integrity": "sha512-hcFKyUG57yWGAzu1CMt/dPzYZuv+jAJUT85bL8mrXvNe6hWj6yEHEc4EdcgiA6Z3oi1/9wXJdZPXF2dZNgwgOg==", + "dev": true, + "dependencies": { + "filename-reserved-regex": "^2.0.0", + "strip-outer": "^1.0.1", + "trim-repeated": "^1.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/filesize": { "version": "8.0.6", "resolved": "https://registry.npmjs.org/filesize/-/filesize-8.0.6.tgz", @@ -8105,6 +8841,12 @@ "node": ">=8" } }, + "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==", + "peer": true + }, "node_modules/find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", @@ -8156,6 +8898,14 @@ } } }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dependencies": { + "is-callable": "^1.1.3" + } + }, "node_modules/fork-ts-checker-webpack-plugin": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.0.tgz", @@ -8426,9 +9176,12 @@ } }, "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/functional-red-black-tree": { "version": "1.0.1", @@ -8443,6 +9196,12 @@ "node": ">=6.9.0" } }, + "node_modules/geoview-core-types": { + "version": "1.0.0", + "resolved": "git+ssh://git@github.com/Canadian-Geospatial-Platform/GeoView.git#3ef2b32ac249812f21918d2cfd6414aeef91d70d", + "dev": true, + "license": "MIT" + }, "node_modules/get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", @@ -8452,13 +9211,18 @@ } }, "node_modules/get-intrinsic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -8503,6 +9267,109 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/gh-pages": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/gh-pages/-/gh-pages-5.0.0.tgz", + "integrity": "sha512-Nqp1SjkPIB94Xw/3yYNTUL+G2dxlhjvv1zeN/4kMC1jfViTEqhtVz/Ba1zSXHuvXCN9ADNS1dN4r5/J/nZWEQQ==", + "dev": true, + "dependencies": { + "async": "^3.2.4", + "commander": "^2.18.0", + "email-addresses": "^5.0.0", + "filenamify": "^4.3.0", + "find-cache-dir": "^3.3.1", + "fs-extra": "^8.1.0", + "globby": "^6.1.0" + }, + "bin": { + "gh-pages": "bin/gh-pages.js", + "gh-pages-clean": "bin/gh-pages-clean.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/gh-pages/node_modules/array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==", + "dev": true, + "dependencies": { + "array-uniq": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gh-pages/node_modules/async": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", + "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", + "dev": true + }, + "node_modules/gh-pages/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "node_modules/gh-pages/node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/gh-pages/node_modules/globby": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", + "integrity": "sha512-KVbFv2TQtbzCoxAnfD6JcHZTYCzyliEaaeM/gH8qQdkKr5s0OP9scEgvdcngyk7AVdY6YVW/TJHd+lQ/Df3Daw==", + "dev": true, + "dependencies": { + "array-union": "^1.0.1", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gh-pages/node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/gh-pages/node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gh-pages/node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, "node_modules/glob": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", @@ -8632,6 +9499,17 @@ "node": ">= 4" } }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/got": { "version": "9.6.0", "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", @@ -8722,10 +9600,32 @@ "node": ">=4" } }, + "node_modules/has-property-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", + "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", + "dependencies": { + "get-intrinsic": "^1.2.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", "engines": { "node": ">= 0.4" }, @@ -8734,11 +9634,11 @@ } }, "node_modules/has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", "dependencies": { - "has-symbols": "^1.0.2" + "has-symbols": "^1.0.3" }, "engines": { "node": ">= 0.4" @@ -8756,6 +9656,17 @@ "node": ">=8" } }, + "node_modules/hasown": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", + "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/he": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", @@ -9397,6 +10308,20 @@ "node": ">=6" } }, + "node_modules/is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", @@ -9411,7 +10336,7 @@ "node_modules/is-in-browser": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/is-in-browser/-/is-in-browser-1.1.3.tgz", - "integrity": "sha1-Vv9NtoOgeMYILrldrX3GLh0E+DU=" + "integrity": "sha512-FeXIBgG/CPGd/WUxuEyvgGTEfwiG9Z4EKGxjNMRqviiIIfsmgrpnHLffEDdwUHqNva1VEW91o3xBT/m8Elgl9g==" }, "node_modules/is-installed-globally": { "version": "0.4.0", @@ -9594,7 +10519,21 @@ "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", "dependencies": { - "has-symbols": "^1.0.2" + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", + "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", + "dependencies": { + "which-typed-array": "^1.1.14" }, "engines": { "node": ">= 0.4" @@ -11634,13 +12573,16 @@ } }, "node_modules/json-schema-merge-allof": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/json-schema-merge-allof/-/json-schema-merge-allof-0.6.0.tgz", - "integrity": "sha512-LEw4VMQVRceOPLuGRWcxW5orTTiR9ZAtqTAe4rQUjNADTeR81bezBVFa0MqIwp0YmHIM1KkhSjZM7o+IQhaPbQ==", + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/json-schema-merge-allof/-/json-schema-merge-allof-0.8.1.tgz", + "integrity": "sha512-CTUKmIlPJbsWfzRRnOXz+0MjIqvnleIXwFTzz+t9T86HnYX/Rozria6ZVGLktAU9e+NygNljveP+yxqtQp/Q4w==", "dependencies": { - "compute-lcm": "^1.1.0", + "compute-lcm": "^1.1.2", "json-schema-compare": "^0.2.2", - "lodash": "^4.17.4" + "lodash": "^4.17.20" + }, + "engines": { + "node": ">=12.0.0" } }, "node_modules/json-schema-traverse": { @@ -11818,9 +12760,9 @@ } }, "node_modules/jss": { - "version": "10.9.0", - "resolved": "https://registry.npmjs.org/jss/-/jss-10.9.0.tgz", - "integrity": "sha512-YpzpreB6kUunQBbrlArlsMpXYyndt9JATbt95tajx0t4MTJJcCJdd4hdNpHmOIDiUJrF/oX5wtVFrS3uofWfGw==", + "version": "10.10.0", + "resolved": "https://registry.npmjs.org/jss/-/jss-10.10.0.tgz", + "integrity": "sha512-cqsOTS7jqPsPMjtKYDUpdFC0AbhYFLTcuGRqymgmdJIeQ8cH7+AgX7YSgQy79wXloZq2VvATYxUOUQEvS1V/Zw==", "dependencies": { "@babel/runtime": "^7.3.1", "csstype": "^3.0.2", @@ -11833,76 +12775,76 @@ } }, "node_modules/jss-plugin-camel-case": { - "version": "10.9.0", - "resolved": "https://registry.npmjs.org/jss-plugin-camel-case/-/jss-plugin-camel-case-10.9.0.tgz", - "integrity": "sha512-UH6uPpnDk413/r/2Olmw4+y54yEF2lRIV8XIZyuYpgPYTITLlPOsq6XB9qeqv+75SQSg3KLocq5jUBXW8qWWww==", + "version": "10.10.0", + "resolved": "https://registry.npmjs.org/jss-plugin-camel-case/-/jss-plugin-camel-case-10.10.0.tgz", + "integrity": "sha512-z+HETfj5IYgFxh1wJnUAU8jByI48ED+v0fuTuhKrPR+pRBYS2EDwbusU8aFOpCdYhtRc9zhN+PJ7iNE8pAWyPw==", "dependencies": { "@babel/runtime": "^7.3.1", "hyphenate-style-name": "^1.0.3", - "jss": "10.9.0" + "jss": "10.10.0" } }, "node_modules/jss-plugin-default-unit": { - "version": "10.9.0", - "resolved": "https://registry.npmjs.org/jss-plugin-default-unit/-/jss-plugin-default-unit-10.9.0.tgz", - "integrity": "sha512-7Ju4Q9wJ/MZPsxfu4T84mzdn7pLHWeqoGd/D8O3eDNNJ93Xc8PxnLmV8s8ZPNRYkLdxZqKtm1nPQ0BM4JRlq2w==", + "version": "10.10.0", + "resolved": "https://registry.npmjs.org/jss-plugin-default-unit/-/jss-plugin-default-unit-10.10.0.tgz", + "integrity": "sha512-SvpajxIECi4JDUbGLefvNckmI+c2VWmP43qnEy/0eiwzRUsafg5DVSIWSzZe4d2vFX1u9nRDP46WCFV/PXVBGQ==", "dependencies": { "@babel/runtime": "^7.3.1", - "jss": "10.9.0" + "jss": "10.10.0" } }, "node_modules/jss-plugin-global": { - "version": "10.9.0", - "resolved": "https://registry.npmjs.org/jss-plugin-global/-/jss-plugin-global-10.9.0.tgz", - "integrity": "sha512-4G8PHNJ0x6nwAFsEzcuVDiBlyMsj2y3VjmFAx/uHk/R/gzJV+yRHICjT4MKGGu1cJq2hfowFWCyrr/Gg37FbgQ==", + "version": "10.10.0", + "resolved": "https://registry.npmjs.org/jss-plugin-global/-/jss-plugin-global-10.10.0.tgz", + "integrity": "sha512-icXEYbMufiNuWfuazLeN+BNJO16Ge88OcXU5ZDC2vLqElmMybA31Wi7lZ3lf+vgufRocvPj8443irhYRgWxP+A==", "dependencies": { "@babel/runtime": "^7.3.1", - "jss": "10.9.0" + "jss": "10.10.0" } }, "node_modules/jss-plugin-nested": { - "version": "10.9.0", - "resolved": "https://registry.npmjs.org/jss-plugin-nested/-/jss-plugin-nested-10.9.0.tgz", - "integrity": "sha512-2UJnDrfCZpMYcpPYR16oZB7VAC6b/1QLsRiAutOt7wJaaqwCBvNsosLEu/fUyKNQNGdvg2PPJFDO5AX7dwxtoA==", + "version": "10.10.0", + "resolved": "https://registry.npmjs.org/jss-plugin-nested/-/jss-plugin-nested-10.10.0.tgz", + "integrity": "sha512-9R4JHxxGgiZhurDo3q7LdIiDEgtA1bTGzAbhSPyIOWb7ZubrjQe8acwhEQ6OEKydzpl8XHMtTnEwHXCARLYqYA==", "dependencies": { "@babel/runtime": "^7.3.1", - "jss": "10.9.0", + "jss": "10.10.0", "tiny-warning": "^1.0.2" } }, "node_modules/jss-plugin-props-sort": { - "version": "10.9.0", - "resolved": "https://registry.npmjs.org/jss-plugin-props-sort/-/jss-plugin-props-sort-10.9.0.tgz", - "integrity": "sha512-7A76HI8bzwqrsMOJTWKx/uD5v+U8piLnp5bvru7g/3ZEQOu1+PjHvv7bFdNO3DwNPC9oM0a//KwIJsIcDCjDzw==", + "version": "10.10.0", + "resolved": "https://registry.npmjs.org/jss-plugin-props-sort/-/jss-plugin-props-sort-10.10.0.tgz", + "integrity": "sha512-5VNJvQJbnq/vRfje6uZLe/FyaOpzP/IH1LP+0fr88QamVrGJa0hpRRyAa0ea4U/3LcorJfBFVyC4yN2QC73lJg==", "dependencies": { "@babel/runtime": "^7.3.1", - "jss": "10.9.0" + "jss": "10.10.0" } }, "node_modules/jss-plugin-rule-value-function": { - "version": "10.9.0", - "resolved": "https://registry.npmjs.org/jss-plugin-rule-value-function/-/jss-plugin-rule-value-function-10.9.0.tgz", - "integrity": "sha512-IHJv6YrEf8pRzkY207cPmdbBstBaE+z8pazhPShfz0tZSDtRdQua5jjg6NMz3IbTasVx9FdnmptxPqSWL5tyJg==", + "version": "10.10.0", + "resolved": "https://registry.npmjs.org/jss-plugin-rule-value-function/-/jss-plugin-rule-value-function-10.10.0.tgz", + "integrity": "sha512-uEFJFgaCtkXeIPgki8ICw3Y7VMkL9GEan6SqmT9tqpwM+/t+hxfMUdU4wQ0MtOiMNWhwnckBV0IebrKcZM9C0g==", "dependencies": { "@babel/runtime": "^7.3.1", - "jss": "10.9.0", + "jss": "10.10.0", "tiny-warning": "^1.0.2" } }, "node_modules/jss-plugin-vendor-prefixer": { - "version": "10.9.0", - "resolved": "https://registry.npmjs.org/jss-plugin-vendor-prefixer/-/jss-plugin-vendor-prefixer-10.9.0.tgz", - "integrity": "sha512-MbvsaXP7iiVdYVSEoi+blrW+AYnTDvHTW6I6zqi7JcwXdc6I9Kbm234nEblayhF38EftoenbM+5218pidmC5gA==", + "version": "10.10.0", + "resolved": "https://registry.npmjs.org/jss-plugin-vendor-prefixer/-/jss-plugin-vendor-prefixer-10.10.0.tgz", + "integrity": "sha512-UY/41WumgjW8r1qMCO8l1ARg7NHnfRVWRhZ2E2m0DMYsr2DD91qIXLyNhiX83hHswR7Wm4D+oDYNC1zWCJWtqg==", "dependencies": { "@babel/runtime": "^7.3.1", "css-vendor": "^2.0.8", - "jss": "10.9.0" + "jss": "10.10.0" } }, "node_modules/jss/node_modules/csstype": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.10.tgz", - "integrity": "sha512-2u44ZG2OcNUO9HDp/Jl8C07x6pU/eTR3ncV91SiK3dhG9TWvRVsCoJw14Ckx5DgWkzGA3waZWO3d7pgqpUI/XA==" + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", + "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==" }, "node_modules/jsx-ast-utils": { "version": "3.2.1", @@ -12064,7 +13006,7 @@ "node_modules/lodash.debounce": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=" + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" }, "node_modules/lodash.memoize": { "version": "4.1.2", @@ -12187,6 +13129,17 @@ "tmpl": "1.0.5" } }, + "node_modules/markdown-to-jsx": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/markdown-to-jsx/-/markdown-to-jsx-7.4.1.tgz", + "integrity": "sha512-GbrbkTnHp9u6+HqbPRFJbObi369AgJNXi/sGqq5HRsoZW063xR1XDCaConqq+whfEIAlzB1YPnOgsPc7B7bc/A==", + "engines": { + "node": ">= 10" + }, + "peerDependencies": { + "react": ">= 0.14.0" + } + }, "node_modules/mdn-data": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", @@ -12501,9 +13454,15 @@ "integrity": "sha512-wynEP02LmIbLpcYw8uBKpcfF6dmg2vcpKqxeH5UcoKEYdExslsdUA4ugFauuaeYdTB76ez6gJW8XAZ6CgkXYxA==" }, "node_modules/nanoid": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", - "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "bin": { "nanoid": "bin/nanoid.cjs" }, @@ -13051,6 +14010,27 @@ "node": ">=4" } }, + "node_modules/pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", + "dev": true, + "dependencies": { + "pinkie": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/pirates": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.4.tgz", @@ -14424,13 +15404,13 @@ } }, "node_modules/prop-types": { - "version": "15.7.2", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", - "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", "dependencies": { "loose-envify": "^1.4.0", "object-assign": "^4.1.1", - "react-is": "^16.8.1" + "react-is": "^16.13.1" } }, "node_modules/prop-types/node_modules/react-is": { @@ -14657,6 +15637,15 @@ "node": ">=14" } }, + "node_modules/react-collapsible": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/react-collapsible/-/react-collapsible-2.10.0.tgz", + "integrity": "sha512-kEVsmlFfXBMTCnU5gwIv19MdmPAhbIPzz5Er37TiJSzRKS0IHrqAKQyQeHEmtoGIQMTcVI46FzE4z3NlVTx77A==", + "peerDependencies": { + "react": "~15 || ~16 || ~17 || ~18", + "react-dom": "~15 || ~16 || ~17 || ~18" + } + }, "node_modules/react-dev-utils": { "version": "12.0.0", "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-12.0.0.tgz", @@ -14802,6 +15791,19 @@ "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" }, + "node_modules/react-jsonschema-form-pagination": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/react-jsonschema-form-pagination/-/react-jsonschema-form-pagination-0.4.0.tgz", + "integrity": "sha512-Vuk/5CgxPV1sukCBAND+IVA6GbFjP/1dQhdyX97NYL2RGGwUh7epGq7TtrzSwq+U2N3o2QD9bAzi7BsSGcGdIw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/react-lifecycles-compat": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", + "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==" + }, "node_modules/react-refresh": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.11.0.tgz", @@ -14907,9 +15909,9 @@ } }, "node_modules/react-transition-group": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.2.tgz", - "integrity": "sha512-/RNYfRAMlZwDSr6z4zNKV6xu53/e2BuaBbGhbyYIXTrmgu/bGHzmqOs7mJSJBHy9Ud+ApHx3QjrkKSp1pxvlFg==", + "version": "4.4.5", + "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", + "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==", "dependencies": { "@babel/runtime": "^7.5.5", "dom-helpers": "^5.0.1", @@ -14921,6 +15923,44 @@ "react-dom": ">=16.6.0" } }, + "node_modules/react-virtualized": { + "version": "9.22.5", + "resolved": "https://registry.npmjs.org/react-virtualized/-/react-virtualized-9.22.5.tgz", + "integrity": "sha512-YqQMRzlVANBv1L/7r63OHa2b0ZsAaDp1UhVNEdUaXI8A5u6hTpA5NYtUueLH2rFuY/27mTGIBl7ZhqFKzw18YQ==", + "dependencies": { + "@babel/runtime": "^7.7.2", + "clsx": "^1.0.4", + "dom-helpers": "^5.1.3", + "loose-envify": "^1.4.0", + "prop-types": "^15.7.2", + "react-lifecycles-compat": "^3.0.4" + }, + "peerDependencies": { + "react": "^15.3.0 || ^16.0.0-alpha || ^17.0.0 || ^18.0.0", + "react-dom": "^15.3.0 || ^16.0.0-alpha || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/react-virtualized-checkbox": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/react-virtualized-checkbox/-/react-virtualized-checkbox-3.0.1.tgz", + "integrity": "sha512-O7H2DupzArWxrBoa7w7cZXedelzkxMbH7Daq7gjErZQd9OkHe6kHLVojfKcNikfozQMlv5A5Dg5kt728j5x1VQ==", + "dependencies": { + "prop-types": "^15.5.10", + "react-virtualized": "^9.9.0" + } + }, + "node_modules/reactjs-popup": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/reactjs-popup/-/reactjs-popup-2.0.5.tgz", + "integrity": "sha512-b5hv9a6aGsHEHXFAgPO5s1Jw1eSkopueyUVxQewGdLgqk2eW0IVXZrPRpHR629YcgIpC2oxtX8OOZ8a7bQJbxA==", + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "react": ">=16", + "react-dom": ">=16" + } + }, "node_modules/readable-stream": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", @@ -15268,6 +16308,14 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/rjsf-tabs": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/rjsf-tabs/-/rjsf-tabs-0.0.1.tgz", + "integrity": "sha512-GEfCLfKyKGlMBGDOskeFt9LEA/5PzZPwJLGn+2p30hf0W4hwVvXhMz8CDzb09v/ntJwRbNdhhJNdt7hZkNeGVw==", + "engines": { + "node": ">=8" + } + }, "node_modules/rollup": { "version": "2.61.1", "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.61.1.tgz", @@ -15286,6 +16334,7 @@ "version": "7.0.2", "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz", "integrity": "sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==", + "deprecated": "This package has been deprecated and is no longer maintained. Please use @rollup/plugin-terser", "dependencies": { "@babel/code-frame": "^7.10.4", "jest-worker": "^26.2.1", @@ -15625,6 +16674,22 @@ "integrity": "sha1-8Tv5KOQrnD55OD5hzDmYtdFObN0=", "dev": true }, + "node_modules/set-function-length": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.1.tgz", + "integrity": "sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g==", + "dependencies": { + "define-data-property": "^1.1.2", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.3", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/setprototypeof": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", @@ -15748,6 +16813,7 @@ "version": "0.6.0", "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.6.0.tgz", "integrity": "sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w==", + "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated", "dependencies": { "atob": "^2.1.2", "decode-uri-component": "^0.2.0" @@ -15773,12 +16839,14 @@ "node_modules/source-map-url": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", - "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==" + "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", + "deprecated": "See https://github.com/lydell/source-map-url#deprecated" }, "node_modules/sourcemap-codec": { "version": "1.4.8", "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", - "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==" + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "deprecated": "Please use @jridgewell/sourcemap-codec instead" }, "node_modules/spdy": { "version": "4.0.2", @@ -15816,7 +16884,8 @@ "node_modules/stable": { "version": "0.1.8", "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", - "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==" + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", + "deprecated": "Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility" }, "node_modules/stack-utils": { "version": "2.0.5", @@ -16033,6 +17102,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/strip-outer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.1.tgz", + "integrity": "sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^1.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/style-loader": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-3.3.1.tgz", @@ -16063,6 +17144,12 @@ "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==", + "peer": true + }, "node_modules/supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -16547,6 +17634,18 @@ "node": ">=8" } }, + "node_modules/trim-repeated": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz", + "integrity": "sha512-pkonvlKk8/ZuR0D5tLW8ljt5I8kmxp2XKymhepUeOdCEfKpZaktSArkLHZt76OB1ZvO9bssUsDty4SWhLvZpLg==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^1.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/tryer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/tryer/-/tryer-1.0.1.tgz", @@ -16657,9 +17756,9 @@ } }, "node_modules/typescript": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.4.tgz", - "integrity": "sha512-VgYs2A2QIRuGphtzFV7aQJduJ2gyfTljngLzjpfW9FoYZF6xuw1W0vW9ghCKLfcWrCFxK81CSGRAvS1pn4fIUg==", + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", "peer": true, "bin": { "tsc": "bin/tsc", @@ -16878,6 +17977,18 @@ "node": ">=4" } }, + "node_modules/util": { + "version": "0.12.5", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", + "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", + "dependencies": { + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "which-typed-array": "^1.1.2" + } + }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -16947,17 +18058,17 @@ "node_modules/validate.io-array": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/validate.io-array/-/validate.io-array-1.0.6.tgz", - "integrity": "sha1-W1osr9j4uFq7L4hroVPy2Tond00=" + "integrity": "sha512-DeOy7CnPEziggrOO5CZhVKJw6S3Yi7e9e65R1Nl/RTN1vTQKnzjfvks0/8kQ40FP/dsjRAOd4hxmJ7uLa6vxkg==" }, "node_modules/validate.io-function": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/validate.io-function/-/validate.io-function-1.0.2.tgz", - "integrity": "sha1-NDoZgC7TsZaCaceA5VjpNBHAutc=" + "integrity": "sha512-LlFybRJEriSuBnUhQyG5bwglhh50EpTL2ul23MPIuR1odjO7XaMLFV8vHGwp7AZciFxtYOeiSCT5st+XSPONiQ==" }, "node_modules/validate.io-integer": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/validate.io-integer/-/validate.io-integer-1.0.5.tgz", - "integrity": "sha1-FoSWSAuVviJH7EQ/IjPeT4mHgGg=", + "integrity": "sha512-22izsYSLojN/P6bppBqhgUDjCkr5RY2jd+N2a3DCAUey8ydvrZ/OkGvFPR7qfOpwR2LC5p4Ngzxz36g5Vgr/hQ==", "dependencies": { "validate.io-number": "^1.0.3" } @@ -16965,7 +18076,7 @@ "node_modules/validate.io-integer-array": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/validate.io-integer-array/-/validate.io-integer-array-1.0.0.tgz", - "integrity": "sha1-LKveAzKTpry+Bj/q/pHq9GsToIk=", + "integrity": "sha512-mTrMk/1ytQHtCY0oNO3dztafHYyGU88KL+jRxWuzfOmQb+4qqnWmI+gykvGp8usKZOM0H7keJHEbRaFiYA0VrA==", "dependencies": { "validate.io-array": "^1.0.3", "validate.io-integer": "^1.0.4" @@ -16974,7 +18085,7 @@ "node_modules/validate.io-number": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/validate.io-number/-/validate.io-number-1.0.3.tgz", - "integrity": "sha1-9j/+2iSL8opnqNSODjtGGhZluvg=" + "integrity": "sha512-kRAyotcbNaSYoDnXvb4MHg/0a1egJdLwS6oJ38TJY7aw9n93Fl/3blIXdyYvPOp55CNxywooG/3BcrwNrBpcSg==" }, "node_modules/vary": { "version": "1.1.2", @@ -16988,6 +18099,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", + "deprecated": "Use your platform's native performance.now() and performance.timeOrigin.", "dependencies": { "browser-process-hrtime": "^1.0.0" } @@ -17460,6 +18572,24 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/which-typed-array": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.14.tgz", + "integrity": "sha512-VnXFiIW8yNn9kIHN88xvZ4yOWchftKDsRJ8fEPacX/wl1lOvBrhsJ/OeJCXq7B0AaijRuqgzSKalJoPk+D8MPg==", + "dependencies": { + "available-typed-arrays": "^1.0.6", + "call-bind": "^1.0.5", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/widest-line": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", @@ -18180,11 +19310,11 @@ } }, "@babel/helper-module-imports": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.0.tgz", - "integrity": "sha512-kkH7sWzKPq0xt3H1n+ghb4xEMP8k0U7XV3kkB+ZGy69kDk2ySFW1qPi06sjKzFY3t1j6XbJSqr4mF9L7CYVyhg==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz", + "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==", "requires": { - "@babel/types": "^7.16.0" + "@babel/types": "^7.22.5" } }, "@babel/helper-module-transforms": { @@ -18261,10 +19391,15 @@ "@babel/types": "^7.16.0" } }, + "@babel/helper-string-parser": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", + "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==" + }, "@babel/helper-validator-identifier": { - "version": "7.15.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz", - "integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==" + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz", + "integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==" }, "@babel/helper-validator-option": { "version": "7.14.5", @@ -19127,11 +20262,18 @@ } }, "@babel/runtime": { - "version": "7.16.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.16.5.tgz", - "integrity": "sha512-TXWihFIS3Pyv5hzR7j6ihmeLkZfrXGxAr5UfSl8CHf+6q/wpiYDkUau0czckpYG8QmnCIuPpdLtuA9VmuGGyMA==", + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.10.tgz", + "integrity": "sha512-21t/fkKLMZI4pqP2wlmsQAWnYW1PDyKyyUV4vCi+B25ydmdaYTKXPwCj0BzSUnZf4seIiYvSA3jcZ3gdsMFkLQ==", "requires": { - "regenerator-runtime": "^0.13.4" + "regenerator-runtime": "^0.14.0" + }, + "dependencies": { + "regenerator-runtime": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", + "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==" + } } }, "@babel/runtime-corejs3": { @@ -19171,11 +20313,12 @@ } }, "@babel/types": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.0.tgz", - "integrity": "sha512-PJgg/k3SdLsGb3hhisFvtLOw5ts113klrpLuIPtCJIU+BB24fqq6lf8RWqKJEjzqXR9AEH1rIb5XTqwBHB+kQg==", + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.10.tgz", + "integrity": "sha512-obaoigiLrlDZ7TUQln/8m4mSqIW2QFeOrCQc9r+xsaHGNoplVNYlRVpsfE8Vj35GEm2ZH4ZhrNYogs/3fj85kg==", "requires": { - "@babel/helper-validator-identifier": "^7.15.7", + "@babel/helper-string-parser": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.5", "to-fast-properties": "^2.0.0" } }, @@ -19189,11 +20332,160 @@ "resolved": "https://registry.npmjs.org/@csstools/normalize.css/-/normalize.css-12.0.0.tgz", "integrity": "sha512-M0qqxAcwCsIVfpFQSlGN5XjXWu8l5JDZN+fPt1LeW5SZexQTgnaEvgXAY+CeygRw0EeppWHi12JxESWiWrB0Sg==" }, + "@emotion/babel-plugin": { + "version": "11.11.0", + "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.11.0.tgz", + "integrity": "sha512-m4HEDZleaaCH+XgDDsPF15Ht6wTLsgDTeR3WYj9Q/k76JtWhrJjcP4+/XlG8LGT/Rol9qUfOIztXeA84ATpqPQ==", + "peer": true, + "requires": { + "@babel/helper-module-imports": "^7.16.7", + "@babel/runtime": "^7.18.3", + "@emotion/hash": "^0.9.1", + "@emotion/memoize": "^0.8.1", + "@emotion/serialize": "^1.1.2", + "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" + }, + "dependencies": { + "@emotion/hash": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.1.tgz", + "integrity": "sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ==", + "peer": true + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "peer": true + } + } + }, + "@emotion/cache": { + "version": "11.11.0", + "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.11.0.tgz", + "integrity": "sha512-P34z9ssTCBi3e9EI1ZsWpNHcfY1r09ZO0rZbRO2ob3ZQMnFI35jB536qoXbkdesr5EUhYi22anuEJuyxifaqAQ==", + "peer": true, + "requires": { + "@emotion/memoize": "^0.8.1", + "@emotion/sheet": "^1.2.2", + "@emotion/utils": "^1.2.1", + "@emotion/weak-memoize": "^0.3.1", + "stylis": "4.2.0" + } + }, "@emotion/hash": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.8.0.tgz", "integrity": "sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==" }, + "@emotion/is-prop-valid": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.1.tgz", + "integrity": "sha512-61Mf7Ufx4aDxx1xlDeOm8aFFigGHE4z+0sKCa+IHCeZKiyP9RLD0Mmx7m8b9/Cf37f7NAvQOOJAbQQGVr5uERw==", + "peer": true, + "requires": { + "@emotion/memoize": "^0.8.1" + } + }, + "@emotion/memoize": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.1.tgz", + "integrity": "sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==", + "peer": true + }, + "@emotion/react": { + "version": "11.11.1", + "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.11.1.tgz", + "integrity": "sha512-5mlW1DquU5HaxjLkfkGN1GA/fvVGdyHURRiX/0FHl2cfIfRxSOfmxEH5YS43edp0OldZrZ+dkBKbngxcNCdZvA==", + "peer": true, + "requires": { + "@babel/runtime": "^7.18.3", + "@emotion/babel-plugin": "^11.11.0", + "@emotion/cache": "^11.11.0", + "@emotion/serialize": "^1.1.2", + "@emotion/use-insertion-effect-with-fallbacks": "^1.0.1", + "@emotion/utils": "^1.2.1", + "@emotion/weak-memoize": "^0.3.1", + "hoist-non-react-statics": "^3.3.1" + } + }, + "@emotion/serialize": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.1.2.tgz", + "integrity": "sha512-zR6a/fkFP4EAcCMQtLOhIgpprZOwNmCldtpaISpvz348+DP4Mz8ZoKaGGCQpbzepNIUWbq4w6hNZkwDyKoS+HA==", + "peer": true, + "requires": { + "@emotion/hash": "^0.9.1", + "@emotion/memoize": "^0.8.1", + "@emotion/unitless": "^0.8.1", + "@emotion/utils": "^1.2.1", + "csstype": "^3.0.2" + }, + "dependencies": { + "@emotion/hash": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.1.tgz", + "integrity": "sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ==", + "peer": true + }, + "csstype": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", + "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==", + "peer": true + } + } + }, + "@emotion/sheet": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.2.2.tgz", + "integrity": "sha512-0QBtGvaqtWi+nx6doRwDdBIzhNdZrXUppvTM4dtZZWEGTXL/XE/yJxLMGlDT1Gt+UHH5IX1n+jkXyytE/av7OA==", + "peer": true + }, + "@emotion/styled": { + "version": "11.11.0", + "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.11.0.tgz", + "integrity": "sha512-hM5Nnvu9P3midq5aaXj4I+lnSfNi7Pmd4EWk1fOZ3pxookaQTNew6bp4JaCBYM4HVFZF9g7UjJmsUmC2JlxOng==", + "peer": true, + "requires": { + "@babel/runtime": "^7.18.3", + "@emotion/babel-plugin": "^11.11.0", + "@emotion/is-prop-valid": "^1.2.1", + "@emotion/serialize": "^1.1.2", + "@emotion/use-insertion-effect-with-fallbacks": "^1.0.1", + "@emotion/utils": "^1.2.1" + } + }, + "@emotion/unitless": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.1.tgz", + "integrity": "sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ==", + "peer": true + }, + "@emotion/use-insertion-effect-with-fallbacks": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.0.1.tgz", + "integrity": "sha512-jT/qyKZ9rzLErtrjGgdkMBn2OP8wl0G3sQlBb3YPryvKHsjvINUhVaPFfP+fpBcOkmrVOVEEHQFJ7nbj2TH2gw==", + "peer": true, + "requires": {} + }, + "@emotion/utils": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.2.1.tgz", + "integrity": "sha512-Y2tGf3I+XVnajdItskUCn6LX+VUDmP6lTL4fcqsXAv43dnlbZiuW4MWQW38rW/BVWSE7Q/7+XQocmpnRYILUmg==", + "peer": true + }, + "@emotion/weak-memoize": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.3.1.tgz", + "integrity": "sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww==", + "peer": true + }, "@eslint/eslintrc": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.0.5.tgz", @@ -19238,6 +20530,40 @@ } } }, + "@floating-ui/core": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.4.1.tgz", + "integrity": "sha512-jk3WqquEJRlcyu7997NtR5PibI+y5bi+LS3hPmguVClypenMsCY3CBa3LAQnozRCtCrYWSEtAdiskpamuJRFOQ==", + "peer": true, + "requires": { + "@floating-ui/utils": "^0.1.1" + } + }, + "@floating-ui/dom": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.5.1.tgz", + "integrity": "sha512-KwvVcPSXg6mQygvA1TjbN/gh///36kKtllIF8SUm0qpFj8+rvYrpvlYdL1JoA71SHpDqgSSdGOSoQ0Mp3uY5aw==", + "peer": true, + "requires": { + "@floating-ui/core": "^1.4.1", + "@floating-ui/utils": "^0.1.1" + } + }, + "@floating-ui/react-dom": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.0.2.tgz", + "integrity": "sha512-5qhlDvjaLmAst/rKb3VdlCinwTF4EYMiVxuuc/HVUjs46W0zgtbMmAZ1UTsDrRTxRmUEzl92mOtWbeeXL26lSQ==", + "peer": true, + "requires": { + "@floating-ui/dom": "^1.5.1" + } + }, + "@floating-ui/utils": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.1.1.tgz", + "integrity": "sha512-m0G6wlnhm/AX0H12IOWtK8gASEMffnX08RtKkCgTdHb9JpHKGloI7icFfLg9ZmQeavcvR0PKmzxClyuFPSjKWw==", + "peer": true + }, "@humanwhocodes/config-array": { "version": "0.9.2", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.2.tgz", @@ -19792,15 +21118,15 @@ } }, "@material-ui/core": { - "version": "4.12.3", - "resolved": "https://registry.npmjs.org/@material-ui/core/-/core-4.12.3.tgz", - "integrity": "sha512-sdpgI/PL56QVsEJldwEe4FFaFTLUqN+rd7sSZiRCdx2E/C7z5yK0y/khAWVBH24tXwto7I1hCzNWfJGZIYJKnw==", + "version": "4.12.4", + "resolved": "https://registry.npmjs.org/@material-ui/core/-/core-4.12.4.tgz", + "integrity": "sha512-tr7xekNlM9LjA6pagJmL8QCgZXaubWUwkJnoYcMKd4gw/t4XiyvnTkjdGrUVicyB2BsdaAv1tvow45bPM4sSwQ==", "requires": { "@babel/runtime": "^7.4.4", - "@material-ui/styles": "^4.11.4", - "@material-ui/system": "^4.12.1", + "@material-ui/styles": "^4.11.5", + "@material-ui/system": "^4.12.2", "@material-ui/types": "5.1.0", - "@material-ui/utils": "^4.11.2", + "@material-ui/utils": "^4.11.3", "@types/react-transition-group": "^4.2.0", "clsx": "^1.0.4", "hoist-non-react-statics": "^3.3.2", @@ -19811,22 +21137,22 @@ } }, "@material-ui/icons": { - "version": "4.11.2", - "resolved": "https://registry.npmjs.org/@material-ui/icons/-/icons-4.11.2.tgz", - "integrity": "sha512-fQNsKX2TxBmqIGJCSi3tGTO/gZ+eJgWmMJkgDiOfyNaunNaxcklJQFaFogYcFl0qFuaEz1qaXYXboa/bUXVSOQ==", + "version": "4.11.3", + "resolved": "https://registry.npmjs.org/@material-ui/icons/-/icons-4.11.3.tgz", + "integrity": "sha512-IKHlyx6LDh8n19vzwH5RtHIOHl9Tu90aAAxcbWME6kp4dmvODM3UvOHJeMIDzUbd4muuJKHmlNoBN+mDY4XkBA==", "requires": { "@babel/runtime": "^7.4.4" } }, "@material-ui/styles": { - "version": "4.11.4", - "resolved": "https://registry.npmjs.org/@material-ui/styles/-/styles-4.11.4.tgz", - "integrity": "sha512-KNTIZcnj/zprG5LW0Sao7zw+yG3O35pviHzejMdcSGCdWbiO8qzRgOYL8JAxAsWBKOKYwVZxXtHWaB5T2Kvxew==", + "version": "4.11.5", + "resolved": "https://registry.npmjs.org/@material-ui/styles/-/styles-4.11.5.tgz", + "integrity": "sha512-o/41ot5JJiUsIETME9wVLAJrmIWL3j0R0Bj2kCOLbSfqEkKf0fmaPt+5vtblUh5eXr2S+J/8J3DaCb10+CzPGA==", "requires": { "@babel/runtime": "^7.4.4", "@emotion/hash": "^0.8.0", "@material-ui/types": "5.1.0", - "@material-ui/utils": "^4.11.2", + "@material-ui/utils": "^4.11.3", "clsx": "^1.0.4", "csstype": "^2.5.2", "hoist-non-react-statics": "^3.3.2", @@ -19841,31 +21167,206 @@ "prop-types": "^15.7.2" } }, - "@material-ui/system": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/@material-ui/system/-/system-4.12.1.tgz", - "integrity": "sha512-lUdzs4q9kEXZGhbN7BptyiS1rLNHe6kG9o8Y307HCvF4sQxbCgpL2qi+gUk+yI8a2DNk48gISEQxoxpgph0xIw==", + "@material-ui/system": { + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/@material-ui/system/-/system-4.12.2.tgz", + "integrity": "sha512-6CSKu2MtmiJgcCGf6nBQpM8fLkuB9F55EKfbdTC80NND5wpTmKzwdhLYLH3zL4cLlK0gVaaltW7/wMuyTnN0Lw==", + "requires": { + "@babel/runtime": "^7.4.4", + "@material-ui/utils": "^4.11.3", + "csstype": "^2.5.2", + "prop-types": "^15.7.2" + } + }, + "@material-ui/types": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@material-ui/types/-/types-5.1.0.tgz", + "integrity": "sha512-7cqRjrY50b8QzRSYyhSpx4WRw2YuO0KKIGQEVk5J8uoz2BanawykgZGoWEqKm7pVIbzFDN0SpPcVV4IhOFkl8A==", + "requires": {} + }, + "@material-ui/utils": { + "version": "4.11.3", + "resolved": "https://registry.npmjs.org/@material-ui/utils/-/utils-4.11.3.tgz", + "integrity": "sha512-ZuQPV4rBK/V1j2dIkSSEcH5uT6AaHuKWFfotADHsC0wVL1NLd2WkFCm4ZZbX33iO4ydl6V0GPngKm8HZQ2oujg==", + "requires": { + "@babel/runtime": "^7.4.4", + "prop-types": "^15.7.2", + "react-is": "^16.8.0 || ^17.0.0" + } + }, + "@mui/base": { + "version": "5.0.0-beta.14", + "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-beta.14.tgz", + "integrity": "sha512-Je/9JzzYObsuLCIClgE8XvXNFb55IEz8n2NtStUfASfNiVrwiR8t6VVFFuhofehkyTIN34tq1qbBaOjCnOovBw==", + "peer": true, + "requires": { + "@babel/runtime": "^7.22.10", + "@emotion/is-prop-valid": "^1.2.1", + "@floating-ui/react-dom": "^2.0.1", + "@mui/types": "^7.2.4", + "@mui/utils": "^5.14.8", + "@popperjs/core": "^2.11.8", + "clsx": "^2.0.0", + "prop-types": "^15.8.1", + "react-is": "^18.2.0" + }, + "dependencies": { + "clsx": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.0.0.tgz", + "integrity": "sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q==", + "peer": true + }, + "react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "peer": true + } + } + }, + "@mui/core-downloads-tracker": { + "version": "5.14.8", + "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.14.8.tgz", + "integrity": "sha512-8V7ZOC/lKkM03TRHqaThQFIq6bWPnj7L/ZWPh0ymldYFFyh8XdF0ywTgafsofDNYT4StlNknbaTjVHBma3SNjQ==", + "peer": true + }, + "@mui/icons-material": { + "version": "5.14.8", + "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-5.14.8.tgz", + "integrity": "sha512-YXcReLydTuNWb1/PxduAH5LgnHNH6spSQBaA0JOz9HD4J+vwst0IanAQgsXy9KKCJSjCsHywE3DB8X+w/b4eeQ==", + "peer": true, + "requires": { + "@babel/runtime": "^7.22.10" + } + }, + "@mui/material": { + "version": "5.14.8", + "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.14.8.tgz", + "integrity": "sha512-fqvDGGF1pXwOOL/f0Gw+KHo/67hasRpf2ApTIJkbuONOk9AUb2jnYMEqCWmL2sUcbbE3ShMbHl8N7HPSsRv1/A==", + "peer": true, + "requires": { + "@babel/runtime": "^7.22.10", + "@mui/base": "5.0.0-beta.14", + "@mui/core-downloads-tracker": "^5.14.8", + "@mui/system": "^5.14.8", + "@mui/types": "^7.2.4", + "@mui/utils": "^5.14.8", + "@types/react-transition-group": "^4.4.6", + "clsx": "^2.0.0", + "csstype": "^3.1.2", + "prop-types": "^15.8.1", + "react-is": "^18.2.0", + "react-transition-group": "^4.4.5" + }, + "dependencies": { + "clsx": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.0.0.tgz", + "integrity": "sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q==", + "peer": true + }, + "csstype": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", + "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==", + "peer": true + }, + "react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "peer": true + } + } + }, + "@mui/private-theming": { + "version": "5.14.8", + "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.14.8.tgz", + "integrity": "sha512-iBzpcl3Mh92XaYpYPdgzzRxNGkjpoDz8rf8/q5m+EBPowFEHV+CCS9hC0Q2pOKLW3VFFikA7w/GHt7n++40JGQ==", + "peer": true, + "requires": { + "@babel/runtime": "^7.22.10", + "@mui/utils": "^5.14.8", + "prop-types": "^15.8.1" + } + }, + "@mui/styled-engine": { + "version": "5.14.8", + "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.14.8.tgz", + "integrity": "sha512-LGwOav/Y40PZWZ2yDk4beUoRlc57Vg+Vpxi9V9BBtT2ESAucCgFobkt+T8eVLMWF9huUou5pwKgLSU5pF90hBg==", + "peer": true, + "requires": { + "@babel/runtime": "^7.22.10", + "@emotion/cache": "^11.11.0", + "csstype": "^3.1.2", + "prop-types": "^15.8.1" + }, + "dependencies": { + "csstype": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", + "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==", + "peer": true + } + } + }, + "@mui/system": { + "version": "5.14.8", + "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.14.8.tgz", + "integrity": "sha512-Dxnasv7Pj5hYe4ZZFKJZu4ufKm6cxpitWt3A+qMPps22YhqyeEqgDBq/HsAB3GOjqDP40fTAvQvS/Hguf4SJuw==", + "peer": true, "requires": { - "@babel/runtime": "^7.4.4", - "@material-ui/utils": "^4.11.2", - "csstype": "^2.5.2", - "prop-types": "^15.7.2" + "@babel/runtime": "^7.22.10", + "@mui/private-theming": "^5.14.8", + "@mui/styled-engine": "^5.14.8", + "@mui/types": "^7.2.4", + "@mui/utils": "^5.14.8", + "clsx": "^2.0.0", + "csstype": "^3.1.2", + "prop-types": "^15.8.1" + }, + "dependencies": { + "clsx": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.0.0.tgz", + "integrity": "sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q==", + "peer": true + }, + "csstype": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", + "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==", + "peer": true + } } }, - "@material-ui/types": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@material-ui/types/-/types-5.1.0.tgz", - "integrity": "sha512-7cqRjrY50b8QzRSYyhSpx4WRw2YuO0KKIGQEVk5J8uoz2BanawykgZGoWEqKm7pVIbzFDN0SpPcVV4IhOFkl8A==", + "@mui/types": { + "version": "7.2.4", + "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.2.4.tgz", + "integrity": "sha512-LBcwa8rN84bKF+f5sDyku42w1NTxaPgPyYKODsh01U1fVstTClbUoSA96oyRBnSNyEiAVjKm6Gwx9vjR+xyqHA==", + "peer": true, "requires": {} }, - "@material-ui/utils": { - "version": "4.11.2", - "resolved": "https://registry.npmjs.org/@material-ui/utils/-/utils-4.11.2.tgz", - "integrity": "sha512-Uul8w38u+PICe2Fg2pDKCaIG7kOyhowZ9vjiC1FsVwPABTW8vPPKfF6OvxRq3IiBaI1faOJmgdvMG7rMJARBhA==", + "@mui/utils": { + "version": "5.14.8", + "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.14.8.tgz", + "integrity": "sha512-1Ls2FfyY2yVSz9NEqedh3J8JAbbZAnUWkOWLE2f4/Hc4T5UWHMfzBLLrCqExfqyfyU+uXYJPGeNIsky6f8Gh5Q==", + "peer": true, "requires": { - "@babel/runtime": "^7.4.4", - "prop-types": "^15.7.2", - "react-is": "^16.8.0 || ^17.0.0" + "@babel/runtime": "^7.22.10", + "@types/prop-types": "^15.7.5", + "@types/react-is": "^18.2.1", + "prop-types": "^15.8.1", + "react-is": "^18.2.0" + }, + "dependencies": { + "react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "peer": true + } } }, "@nodelib/fs.scandir": { @@ -19914,34 +21415,88 @@ } } }, + "@popperjs/core": { + "version": "2.11.8", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", + "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", + "peer": true + }, "@rjsf/core": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/@rjsf/core/-/core-3.2.1.tgz", - "integrity": "sha512-dk8ihvxFbcuIwU7G+HiJbFgwyIvaumPt5g5zfnuC26mwTUPlaDGFXKK2yITp8tJ3+hcwS5zEXtAN9wUkfuM4jA==", + "version": "5.17.0", + "resolved": "https://registry.npmjs.org/@rjsf/core/-/core-5.17.0.tgz", + "integrity": "sha512-0woSU+VU+t2kbDNSyMQhjxJOXJbk3F6lSHxf8XmS4yV3sXP/yr/vo7J3qcvXbSvCLPYMQHvskBFhCIaQqyHWBg==", "requires": { - "@types/json-schema": "^7.0.7", - "ajv": "^6.7.0", - "core-js-pure": "^3.6.5", - "json-schema-merge-allof": "^0.6.0", - "jsonpointer": "^5.0.0", - "lodash": "^4.17.15", - "nanoid": "^3.1.23", - "prop-types": "^15.7.2", - "react-is": "^16.9.0" + "lodash": "^4.17.21", + "lodash-es": "^4.17.21", + "markdown-to-jsx": "^7.4.1", + "nanoid": "^3.3.7", + "prop-types": "^15.8.1" + } + }, + "@rjsf/material-ui": { + "version": "5.17.0", + "resolved": "https://registry.npmjs.org/@rjsf/material-ui/-/material-ui-5.17.0.tgz", + "integrity": "sha512-EBUC2Pmx4sYslrRjnepa0XXtTsVLSfj7DOQZRrLdYMEL3xSfuMWIc33OOIqGXUGWeMNP8Frc3Z+4RZl+URyguw==", + "requires": {} + }, + "@rjsf/mui": { + "version": "5.17.0", + "resolved": "https://registry.npmjs.org/@rjsf/mui/-/mui-5.17.0.tgz", + "integrity": "sha512-K1t10I9LdNjzBgllqWqGB4FJZ15ekc7l1Uqr2IWJUq7ICPw54jey7LdPGZOq8Su0sULW0Q779GbIwUM3+4g+DQ==", + "requires": {} + }, + "@rjsf/utils": { + "version": "5.17.0", + "resolved": "https://registry.npmjs.org/@rjsf/utils/-/utils-5.17.0.tgz", + "integrity": "sha512-Hy2uAxMKWZIZSMzc2AiHrdACYvHj9GDynrdApMgUTxfjpzj5DT7Rghl/FGj7gg8Zy8VtdVNTCbkIzfS8xt4x7g==", + "requires": { + "json-schema-merge-allof": "^0.8.1", + "jsonpointer": "^5.0.1", + "lodash": "^4.17.21", + "lodash-es": "^4.17.21", + "react-is": "^18.2.0" }, "dependencies": { + "jsonpointer": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.1.tgz", + "integrity": "sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==" + }, "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==" + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" } } }, - "@rjsf/material-ui": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/@rjsf/material-ui/-/material-ui-3.2.1.tgz", - "integrity": "sha512-8UiDeDbjCImFSfOegGu13otQ7OdP9FOYpcLjeouppnhs+MPeIEAtYS+jCcBKmi3reyTagC15/KVSRhde1wS1vg==", - "requires": {} + "@rjsf/validator-ajv8": { + "version": "5.17.0", + "resolved": "https://registry.npmjs.org/@rjsf/validator-ajv8/-/validator-ajv8-5.17.0.tgz", + "integrity": "sha512-ZLTpvZDzBt1+Wftao2AkpRaSvxaVRrutvFX3/oy640/KsWUfl0ofV33ai9O4aptKSnOPjfRiLqPJgbPHgQAhmw==", + "requires": { + "ajv": "^8.12.0", + "ajv-formats": "^2.1.1", + "lodash": "^4.17.21", + "lodash-es": "^4.17.21" + }, + "dependencies": { + "ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + } + } }, "@rollup/plugin-babel": { "version": "5.3.0", @@ -20512,9 +22067,9 @@ "integrity": "sha512-ekoj4qOQYp7CvjX8ZDBgN86w3MqQhLE1hczEJbEIjgFEumDy+na/4AJAbLXfgEWFNB2pKadM5rPFtuSGMWK7xA==" }, "@types/prop-types": { - "version": "15.7.4", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.4.tgz", - "integrity": "sha512-rZ5drC/jWjrArrS8BR6SIr4cWpW09RNTYt9AMZo3Jwwif+iacXAqgVjm0B0Bv/S1jhDXKHqRVNCbACkJ89RAnQ==" + "version": "15.7.5", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", + "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" }, "@types/q": { "version": "1.5.5", @@ -20532,9 +22087,9 @@ "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==" }, "@types/react": { - "version": "17.0.37", - "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.37.tgz", - "integrity": "sha512-2FS1oTqBGcH/s0E+CjrCCR9+JMpsu9b69RTFO+40ua43ZqP5MmQ4iUde/dMjWR909KxZwmOQIFq6AV6NjEG5xg==", + "version": "17.0.64", + "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.64.tgz", + "integrity": "sha512-IlgbX/vglDTwrCRgad6fTCzOT+D/5C0xwuvrzfuqfhg9gJrkFqAGADpUFlEtqbrP1IEo9QLSbo41MaFfoIu9Aw==", "requires": { "@types/prop-types": "*", "@types/scheduler": "*", @@ -20542,16 +22097,25 @@ }, "dependencies": { "csstype": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.10.tgz", - "integrity": "sha512-2u44ZG2OcNUO9HDp/Jl8C07x6pU/eTR3ncV91SiK3dhG9TWvRVsCoJw14Ckx5DgWkzGA3waZWO3d7pgqpUI/XA==" + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", + "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==" } } }, + "@types/react-is": { + "version": "18.2.1", + "resolved": "https://registry.npmjs.org/@types/react-is/-/react-is-18.2.1.tgz", + "integrity": "sha512-wyUkmaaSZEzFZivD8F2ftSyAfk6L+DfFliVj/mYdOXbVjRcS87fQJLTnhk6dRZPuJjI+9g6RZJO4PNCngUrmyw==", + "peer": true, + "requires": { + "@types/react": "*" + } + }, "@types/react-transition-group": { - "version": "4.4.4", - "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.4.tgz", - "integrity": "sha512-7gAPz7anVK5xzbeQW9wFBDg7G++aPLAFY0QaSMOou9rJZpbuI58WAuJrgu+qR92l61grlnCUe7AFX8KGahAgug==", + "version": "4.4.6", + "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.6.tgz", + "integrity": "sha512-VnCdSxfcm08KjsJVQcfBmhEQAPnLB8G08hAxn39azX1qYBQ/5RVQuoHuKIcfKOdncuaUvEpFKFzEvbtIMsfVew==", "requires": { "@types/react": "*" } @@ -20570,9 +22134,9 @@ "integrity": "sha512-xoDlM2S4ortawSWORYqsdU+2rxdh4LRW9ytc3zmT37RIKQh6IHyKwwtKhKis9ah8ol07DCkZxPt8BBvPjC6v4g==" }, "@types/scheduler": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", - "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==" + "version": "0.16.3", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.3.tgz", + "integrity": "sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==" }, "@types/serve-index": { "version": "1.9.1", @@ -21119,6 +22683,12 @@ "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==" }, + "array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==", + "dev": true + }, "array.prototype.flat": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.5.tgz", @@ -21185,6 +22755,11 @@ "postcss-value-parser": "^4.1.0" } }, + "available-typed-arrays": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.6.tgz", + "integrity": "sha512-j1QzY8iPNPG4o4xmO3ptzpRxTciqD3MgEHtifP/YnJpIo58Xu+ne4BejlbkuaLfXn/nz6HFiw29bLpj2PNMdGg==" + }, "axe-core": { "version": "4.3.5", "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.3.5.tgz", @@ -21723,12 +23298,14 @@ } }, "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.6.tgz", + "integrity": "sha512-Mj50FLHtlsoVfRfnHaZvyrooHcrlceNZdL/QBvJJVd9Ta55qCQK0gs4ss2oZDeV9zFCs6ewzYgVE5yfVmfFpVg==", "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.3", + "set-function-length": "^1.2.0" } }, "callsites": { @@ -21882,9 +23459,9 @@ } }, "clsx": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.1.1.tgz", - "integrity": "sha512-6/bPho624p3S2pMyvP5kKBPXnI3ufHLObBFCfgx+LkeR5lg2XYy2hqZqUf45ypD8COn2bhgGJSUE+l5dhNBieA==" + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz", + "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==" }, "co": { "version": "4.6.0", @@ -22437,9 +24014,9 @@ } }, "csstype": { - "version": "2.6.19", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.19.tgz", - "integrity": "sha512-ZVxXaNy28/k3kJg0Fou5MiYpp88j7H9hLZp8PDC3jV0WFjfH5E9xHb56L0W59cPbKbcHXeP4qyT8PrHp8t6LcQ==" + "version": "2.6.21", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.21.tgz", + "integrity": "sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w==" }, "damerau-levenshtein": { "version": "1.0.7", @@ -22531,6 +24108,17 @@ "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==", "dev": true }, + "define-data-property": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.2.tgz", + "integrity": "sha512-SRtsSqsDbgpJBbW3pABMCOt6rQyeM8s8RiyeSN8jYG8sYmt/kGJejbydttUsnDs1tadr19tvhT4ShwMyoqAm4g==", + "requires": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.2", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.1" + } + }, "define-lazy-prop": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", @@ -22699,9 +24287,9 @@ }, "dependencies": { "csstype": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.10.tgz", - "integrity": "sha512-2u44ZG2OcNUO9HDp/Jl8C07x6pU/eTR3ncV91SiK3dhG9TWvRVsCoJw14Ckx5DgWkzGA3waZWO3d7pgqpUI/XA==" + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", + "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==" } } }, @@ -22818,6 +24406,12 @@ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.27.tgz", "integrity": "sha512-uZ95szi3zUbzRDx1zx/xnsCG+2xgZyy57pDOeaeO4r8zx5Dqe8Jv1ti8cunvBwJHVI5LzPuw8umKwZb3WKYxSQ==" }, + "email-addresses": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/email-addresses/-/email-addresses-5.0.0.tgz", + "integrity": "sha512-4OIPYlA6JXqtVn8zpHpGiI7vE6EQOAg16aGnDMIAlZVinnoZ8208tW1hAbjWydgN/4PLTT9q+O1K6AH/vALJGw==", + "dev": true + }, "emittery": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz", @@ -22922,6 +24516,11 @@ "unbox-primitive": "^1.0.1" } }, + "es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==" + }, "es-module-lexer": { "version": "0.9.3", "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", @@ -23707,6 +25306,11 @@ "schema-utils": "^3.0.0" } }, + "file-saver": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/file-saver/-/file-saver-2.0.5.tgz", + "integrity": "sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==" + }, "filelist": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", @@ -23733,6 +25337,23 @@ } } }, + "filename-reserved-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz", + "integrity": "sha512-lc1bnsSr4L4Bdif8Xb/qrtokGbq5zlsms/CYH8PP+WtCkGNF65DPiQY8vG3SakEdRn8Dlnm+gW/qWKKjS5sZzQ==", + "dev": true + }, + "filenamify": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-4.3.0.tgz", + "integrity": "sha512-hcFKyUG57yWGAzu1CMt/dPzYZuv+jAJUT85bL8mrXvNe6hWj6yEHEc4EdcgiA6Z3oi1/9wXJdZPXF2dZNgwgOg==", + "dev": true, + "requires": { + "filename-reserved-regex": "^2.0.0", + "strip-outer": "^1.0.1", + "trim-repeated": "^1.0.0" + } + }, "filesize": { "version": "8.0.6", "resolved": "https://registry.npmjs.org/filesize/-/filesize-8.0.6.tgz", @@ -23828,6 +25449,12 @@ } } }, + "find-root": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", + "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==", + "peer": true + }, "find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", @@ -23856,6 +25483,14 @@ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz", "integrity": "sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==" }, + "for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "requires": { + "is-callable": "^1.1.3" + } + }, "fork-ts-checker-webpack-plugin": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.0.tgz", @@ -24037,9 +25672,9 @@ "optional": true }, "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==" }, "functional-red-black-tree": { "version": "1.0.1", @@ -24051,19 +25686,26 @@ "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==" }, + "geoview-core-types": { + "version": "git+ssh://git@github.com/Canadian-Geospatial-Platform/GeoView.git#3ef2b32ac249812f21918d2cfd6414aeef91d70d", + "dev": true, + "from": "geoview-core-types@github:Canadian-Geospatial-Platform/GeoView#types" + }, "get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" }, "get-intrinsic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" } }, "get-own-enumerable-property-symbols": { @@ -24090,6 +25732,89 @@ "get-intrinsic": "^1.1.1" } }, + "gh-pages": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/gh-pages/-/gh-pages-5.0.0.tgz", + "integrity": "sha512-Nqp1SjkPIB94Xw/3yYNTUL+G2dxlhjvv1zeN/4kMC1jfViTEqhtVz/Ba1zSXHuvXCN9ADNS1dN4r5/J/nZWEQQ==", + "dev": true, + "requires": { + "async": "^3.2.4", + "commander": "^2.18.0", + "email-addresses": "^5.0.0", + "filenamify": "^4.3.0", + "find-cache-dir": "^3.3.1", + "fs-extra": "^8.1.0", + "globby": "^6.1.0" + }, + "dependencies": { + "array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==", + "dev": true, + "requires": { + "array-uniq": "^1.0.1" + } + }, + "async": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", + "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", + "dev": true + }, + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "globby": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", + "integrity": "sha512-KVbFv2TQtbzCoxAnfD6JcHZTYCzyliEaaeM/gH8qQdkKr5s0OP9scEgvdcngyk7AVdY6YVW/TJHd+lQ/Df3Daw==", + "dev": true, + "requires": { + "array-union": "^1.0.1", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true + } + } + }, "glob": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", @@ -24186,6 +25911,14 @@ } } }, + "gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "requires": { + "get-intrinsic": "^1.1.3" + } + }, "got": { "version": "9.6.0", "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", @@ -24257,17 +25990,30 @@ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" }, + "has-property-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", + "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", + "requires": { + "get-intrinsic": "^1.2.2" + } + }, + "has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==" + }, "has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==" + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" }, "has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", "requires": { - "has-symbols": "^1.0.2" + "has-symbols": "^1.0.3" } }, "has-yarn": { @@ -24276,6 +26022,14 @@ "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", "dev": true }, + "hasown": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", + "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "requires": { + "function-bind": "^1.1.2" + } + }, "he": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", @@ -24751,6 +26505,14 @@ "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==" }, + "is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "requires": { + "has-tostringtag": "^1.0.0" + } + }, "is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", @@ -24762,7 +26524,7 @@ "is-in-browser": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/is-in-browser/-/is-in-browser-1.1.3.tgz", - "integrity": "sha1-Vv9NtoOgeMYILrldrX3GLh0E+DU=" + "integrity": "sha512-FeXIBgG/CPGd/WUxuEyvgGTEfwiG9Z4EKGxjNMRqviiIIfsmgrpnHLffEDdwUHqNva1VEW91o3xBT/m8Elgl9g==" }, "is-installed-globally": { "version": "0.4.0", @@ -24879,6 +26641,14 @@ "has-symbols": "^1.0.2" } }, + "is-typed-array": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", + "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", + "requires": { + "which-typed-array": "^1.1.14" + } + }, "is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", @@ -26368,13 +28138,13 @@ } }, "json-schema-merge-allof": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/json-schema-merge-allof/-/json-schema-merge-allof-0.6.0.tgz", - "integrity": "sha512-LEw4VMQVRceOPLuGRWcxW5orTTiR9ZAtqTAe4rQUjNADTeR81bezBVFa0MqIwp0YmHIM1KkhSjZM7o+IQhaPbQ==", + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/json-schema-merge-allof/-/json-schema-merge-allof-0.8.1.tgz", + "integrity": "sha512-CTUKmIlPJbsWfzRRnOXz+0MjIqvnleIXwFTzz+t9T86HnYX/Rozria6ZVGLktAU9e+NygNljveP+yxqtQp/Q4w==", "requires": { - "compute-lcm": "^1.1.0", + "compute-lcm": "^1.1.2", "json-schema-compare": "^0.2.2", - "lodash": "^4.17.4" + "lodash": "^4.17.20" } }, "json-schema-traverse": { @@ -26510,9 +28280,9 @@ "integrity": "sha512-PNYZIdMjVIvVgDSYKTT63Y+KZ6IZvGRNNWcxwD+GNnUz1MKPfv30J8ueCjdwcN0nDx2SlshgyB7Oy0epAzVRRg==" }, "jss": { - "version": "10.9.0", - "resolved": "https://registry.npmjs.org/jss/-/jss-10.9.0.tgz", - "integrity": "sha512-YpzpreB6kUunQBbrlArlsMpXYyndt9JATbt95tajx0t4MTJJcCJdd4hdNpHmOIDiUJrF/oX5wtVFrS3uofWfGw==", + "version": "10.10.0", + "resolved": "https://registry.npmjs.org/jss/-/jss-10.10.0.tgz", + "integrity": "sha512-cqsOTS7jqPsPMjtKYDUpdFC0AbhYFLTcuGRqymgmdJIeQ8cH7+AgX7YSgQy79wXloZq2VvATYxUOUQEvS1V/Zw==", "requires": { "@babel/runtime": "^7.3.1", "csstype": "^3.0.2", @@ -26521,77 +28291,77 @@ }, "dependencies": { "csstype": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.10.tgz", - "integrity": "sha512-2u44ZG2OcNUO9HDp/Jl8C07x6pU/eTR3ncV91SiK3dhG9TWvRVsCoJw14Ckx5DgWkzGA3waZWO3d7pgqpUI/XA==" + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", + "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==" } } }, "jss-plugin-camel-case": { - "version": "10.9.0", - "resolved": "https://registry.npmjs.org/jss-plugin-camel-case/-/jss-plugin-camel-case-10.9.0.tgz", - "integrity": "sha512-UH6uPpnDk413/r/2Olmw4+y54yEF2lRIV8XIZyuYpgPYTITLlPOsq6XB9qeqv+75SQSg3KLocq5jUBXW8qWWww==", + "version": "10.10.0", + "resolved": "https://registry.npmjs.org/jss-plugin-camel-case/-/jss-plugin-camel-case-10.10.0.tgz", + "integrity": "sha512-z+HETfj5IYgFxh1wJnUAU8jByI48ED+v0fuTuhKrPR+pRBYS2EDwbusU8aFOpCdYhtRc9zhN+PJ7iNE8pAWyPw==", "requires": { "@babel/runtime": "^7.3.1", "hyphenate-style-name": "^1.0.3", - "jss": "10.9.0" + "jss": "10.10.0" } }, "jss-plugin-default-unit": { - "version": "10.9.0", - "resolved": "https://registry.npmjs.org/jss-plugin-default-unit/-/jss-plugin-default-unit-10.9.0.tgz", - "integrity": "sha512-7Ju4Q9wJ/MZPsxfu4T84mzdn7pLHWeqoGd/D8O3eDNNJ93Xc8PxnLmV8s8ZPNRYkLdxZqKtm1nPQ0BM4JRlq2w==", + "version": "10.10.0", + "resolved": "https://registry.npmjs.org/jss-plugin-default-unit/-/jss-plugin-default-unit-10.10.0.tgz", + "integrity": "sha512-SvpajxIECi4JDUbGLefvNckmI+c2VWmP43qnEy/0eiwzRUsafg5DVSIWSzZe4d2vFX1u9nRDP46WCFV/PXVBGQ==", "requires": { "@babel/runtime": "^7.3.1", - "jss": "10.9.0" + "jss": "10.10.0" } }, "jss-plugin-global": { - "version": "10.9.0", - "resolved": "https://registry.npmjs.org/jss-plugin-global/-/jss-plugin-global-10.9.0.tgz", - "integrity": "sha512-4G8PHNJ0x6nwAFsEzcuVDiBlyMsj2y3VjmFAx/uHk/R/gzJV+yRHICjT4MKGGu1cJq2hfowFWCyrr/Gg37FbgQ==", + "version": "10.10.0", + "resolved": "https://registry.npmjs.org/jss-plugin-global/-/jss-plugin-global-10.10.0.tgz", + "integrity": "sha512-icXEYbMufiNuWfuazLeN+BNJO16Ge88OcXU5ZDC2vLqElmMybA31Wi7lZ3lf+vgufRocvPj8443irhYRgWxP+A==", "requires": { "@babel/runtime": "^7.3.1", - "jss": "10.9.0" + "jss": "10.10.0" } }, "jss-plugin-nested": { - "version": "10.9.0", - "resolved": "https://registry.npmjs.org/jss-plugin-nested/-/jss-plugin-nested-10.9.0.tgz", - "integrity": "sha512-2UJnDrfCZpMYcpPYR16oZB7VAC6b/1QLsRiAutOt7wJaaqwCBvNsosLEu/fUyKNQNGdvg2PPJFDO5AX7dwxtoA==", + "version": "10.10.0", + "resolved": "https://registry.npmjs.org/jss-plugin-nested/-/jss-plugin-nested-10.10.0.tgz", + "integrity": "sha512-9R4JHxxGgiZhurDo3q7LdIiDEgtA1bTGzAbhSPyIOWb7ZubrjQe8acwhEQ6OEKydzpl8XHMtTnEwHXCARLYqYA==", "requires": { "@babel/runtime": "^7.3.1", - "jss": "10.9.0", + "jss": "10.10.0", "tiny-warning": "^1.0.2" } }, "jss-plugin-props-sort": { - "version": "10.9.0", - "resolved": "https://registry.npmjs.org/jss-plugin-props-sort/-/jss-plugin-props-sort-10.9.0.tgz", - "integrity": "sha512-7A76HI8bzwqrsMOJTWKx/uD5v+U8piLnp5bvru7g/3ZEQOu1+PjHvv7bFdNO3DwNPC9oM0a//KwIJsIcDCjDzw==", + "version": "10.10.0", + "resolved": "https://registry.npmjs.org/jss-plugin-props-sort/-/jss-plugin-props-sort-10.10.0.tgz", + "integrity": "sha512-5VNJvQJbnq/vRfje6uZLe/FyaOpzP/IH1LP+0fr88QamVrGJa0hpRRyAa0ea4U/3LcorJfBFVyC4yN2QC73lJg==", "requires": { "@babel/runtime": "^7.3.1", - "jss": "10.9.0" + "jss": "10.10.0" } }, "jss-plugin-rule-value-function": { - "version": "10.9.0", - "resolved": "https://registry.npmjs.org/jss-plugin-rule-value-function/-/jss-plugin-rule-value-function-10.9.0.tgz", - "integrity": "sha512-IHJv6YrEf8pRzkY207cPmdbBstBaE+z8pazhPShfz0tZSDtRdQua5jjg6NMz3IbTasVx9FdnmptxPqSWL5tyJg==", + "version": "10.10.0", + "resolved": "https://registry.npmjs.org/jss-plugin-rule-value-function/-/jss-plugin-rule-value-function-10.10.0.tgz", + "integrity": "sha512-uEFJFgaCtkXeIPgki8ICw3Y7VMkL9GEan6SqmT9tqpwM+/t+hxfMUdU4wQ0MtOiMNWhwnckBV0IebrKcZM9C0g==", "requires": { "@babel/runtime": "^7.3.1", - "jss": "10.9.0", + "jss": "10.10.0", "tiny-warning": "^1.0.2" } }, "jss-plugin-vendor-prefixer": { - "version": "10.9.0", - "resolved": "https://registry.npmjs.org/jss-plugin-vendor-prefixer/-/jss-plugin-vendor-prefixer-10.9.0.tgz", - "integrity": "sha512-MbvsaXP7iiVdYVSEoi+blrW+AYnTDvHTW6I6zqi7JcwXdc6I9Kbm234nEblayhF38EftoenbM+5218pidmC5gA==", + "version": "10.10.0", + "resolved": "https://registry.npmjs.org/jss-plugin-vendor-prefixer/-/jss-plugin-vendor-prefixer-10.10.0.tgz", + "integrity": "sha512-UY/41WumgjW8r1qMCO8l1ARg7NHnfRVWRhZ2E2m0DMYsr2DD91qIXLyNhiX83hHswR7Wm4D+oDYNC1zWCJWtqg==", "requires": { "@babel/runtime": "^7.3.1", "css-vendor": "^2.0.8", - "jss": "10.9.0" + "jss": "10.10.0" } }, "jsx-ast-utils": { @@ -26715,7 +28485,7 @@ "lodash.debounce": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=" + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" }, "lodash.memoize": { "version": "4.1.2", @@ -26816,6 +28586,12 @@ "tmpl": "1.0.5" } }, + "markdown-to-jsx": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/markdown-to-jsx/-/markdown-to-jsx-7.4.1.tgz", + "integrity": "sha512-GbrbkTnHp9u6+HqbPRFJbObi369AgJNXi/sGqq5HRsoZW063xR1XDCaConqq+whfEIAlzB1YPnOgsPc7B7bc/A==", + "requires": {} + }, "mdn-data": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", @@ -27058,9 +28834,9 @@ "integrity": "sha512-wynEP02LmIbLpcYw8uBKpcfF6dmg2vcpKqxeH5UcoKEYdExslsdUA4ugFauuaeYdTB76ez6gJW8XAZ6CgkXYxA==" }, "nanoid": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", - "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==" + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==" }, "natural-compare": { "version": "1.4.0", @@ -27445,6 +29221,21 @@ "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", "dev": true }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==", + "dev": true + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", + "dev": true, + "requires": { + "pinkie": "^2.0.0" + } + }, "pirates": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.4.tgz", @@ -28292,13 +30083,13 @@ } }, "prop-types": { - "version": "15.7.2", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", - "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", "requires": { "loose-envify": "^1.4.0", "object-assign": "^4.1.1", - "react-is": "^16.8.1" + "react-is": "^16.13.1" }, "dependencies": { "react-is": { @@ -28467,6 +30258,12 @@ "whatwg-fetch": "^3.6.2" } }, + "react-collapsible": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/react-collapsible/-/react-collapsible-2.10.0.tgz", + "integrity": "sha512-kEVsmlFfXBMTCnU5gwIv19MdmPAhbIPzz5Er37TiJSzRKS0IHrqAKQyQeHEmtoGIQMTcVI46FzE4z3NlVTx77A==", + "requires": {} + }, "react-dev-utils": { "version": "12.0.0", "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-12.0.0.tgz", @@ -28578,6 +30375,16 @@ "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" }, + "react-jsonschema-form-pagination": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/react-jsonschema-form-pagination/-/react-jsonschema-form-pagination-0.4.0.tgz", + "integrity": "sha512-Vuk/5CgxPV1sukCBAND+IVA6GbFjP/1dQhdyX97NYL2RGGwUh7epGq7TtrzSwq+U2N3o2QD9bAzi7BsSGcGdIw==" + }, + "react-lifecycles-compat": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", + "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==" + }, "react-refresh": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.11.0.tgz", @@ -28656,9 +30463,9 @@ } }, "react-transition-group": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.2.tgz", - "integrity": "sha512-/RNYfRAMlZwDSr6z4zNKV6xu53/e2BuaBbGhbyYIXTrmgu/bGHzmqOs7mJSJBHy9Ud+ApHx3QjrkKSp1pxvlFg==", + "version": "4.4.5", + "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", + "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==", "requires": { "@babel/runtime": "^7.5.5", "dom-helpers": "^5.0.1", @@ -28666,6 +30473,34 @@ "prop-types": "^15.6.2" } }, + "react-virtualized": { + "version": "9.22.5", + "resolved": "https://registry.npmjs.org/react-virtualized/-/react-virtualized-9.22.5.tgz", + "integrity": "sha512-YqQMRzlVANBv1L/7r63OHa2b0ZsAaDp1UhVNEdUaXI8A5u6hTpA5NYtUueLH2rFuY/27mTGIBl7ZhqFKzw18YQ==", + "requires": { + "@babel/runtime": "^7.7.2", + "clsx": "^1.0.4", + "dom-helpers": "^5.1.3", + "loose-envify": "^1.4.0", + "prop-types": "^15.7.2", + "react-lifecycles-compat": "^3.0.4" + } + }, + "react-virtualized-checkbox": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/react-virtualized-checkbox/-/react-virtualized-checkbox-3.0.1.tgz", + "integrity": "sha512-O7H2DupzArWxrBoa7w7cZXedelzkxMbH7Daq7gjErZQd9OkHe6kHLVojfKcNikfozQMlv5A5Dg5kt728j5x1VQ==", + "requires": { + "prop-types": "^15.5.10", + "react-virtualized": "^9.9.0" + } + }, + "reactjs-popup": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/reactjs-popup/-/reactjs-popup-2.0.5.tgz", + "integrity": "sha512-b5hv9a6aGsHEHXFAgPO5s1Jw1eSkopueyUVxQewGdLgqk2eW0IVXZrPRpHR629YcgIpC2oxtX8OOZ8a7bQJbxA==", + "requires": {} + }, "readable-stream": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", @@ -28916,6 +30751,11 @@ "glob": "^7.1.3" } }, + "rjsf-tabs": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/rjsf-tabs/-/rjsf-tabs-0.0.1.tgz", + "integrity": "sha512-GEfCLfKyKGlMBGDOskeFt9LEA/5PzZPwJLGn+2p30hf0W4hwVvXhMz8CDzb09v/ntJwRbNdhhJNdt7hZkNeGVw==" + }, "rollup": { "version": "2.61.1", "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.61.1.tgz", @@ -29193,6 +31033,19 @@ "integrity": "sha1-8Tv5KOQrnD55OD5hzDmYtdFObN0=", "dev": true }, + "set-function-length": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.1.tgz", + "integrity": "sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g==", + "requires": { + "define-data-property": "^1.1.2", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.3", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.1" + } + }, "setprototypeof": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", @@ -29512,6 +31365,15 @@ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==" }, + "strip-outer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.1.tgz", + "integrity": "sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.2" + } + }, "style-loader": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-3.3.1.tgz", @@ -29527,6 +31389,12 @@ "postcss-selector-parser": "^6.0.4" } }, + "stylis": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz", + "integrity": "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==", + "peer": true + }, "supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -29889,6 +31757,15 @@ "punycode": "^2.1.1" } }, + "trim-repeated": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz", + "integrity": "sha512-pkonvlKk8/ZuR0D5tLW8ljt5I8kmxp2XKymhepUeOdCEfKpZaktSArkLHZt76OB1ZvO9bssUsDty4SWhLvZpLg==", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.2" + } + }, "tryer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/tryer/-/tryer-1.0.1.tgz", @@ -29976,9 +31853,9 @@ } }, "typescript": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.4.tgz", - "integrity": "sha512-VgYs2A2QIRuGphtzFV7aQJduJ2gyfTljngLzjpfW9FoYZF6xuw1W0vW9ghCKLfcWrCFxK81CSGRAvS1pn4fIUg==", + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", "peer": true }, "unbox-primitive": { @@ -30134,6 +32011,18 @@ "prepend-http": "^2.0.0" } }, + "util": { + "version": "0.12.5", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", + "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", + "requires": { + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "which-typed-array": "^1.1.2" + } + }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -30190,17 +32079,17 @@ "validate.io-array": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/validate.io-array/-/validate.io-array-1.0.6.tgz", - "integrity": "sha1-W1osr9j4uFq7L4hroVPy2Tond00=" + "integrity": "sha512-DeOy7CnPEziggrOO5CZhVKJw6S3Yi7e9e65R1Nl/RTN1vTQKnzjfvks0/8kQ40FP/dsjRAOd4hxmJ7uLa6vxkg==" }, "validate.io-function": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/validate.io-function/-/validate.io-function-1.0.2.tgz", - "integrity": "sha1-NDoZgC7TsZaCaceA5VjpNBHAutc=" + "integrity": "sha512-LlFybRJEriSuBnUhQyG5bwglhh50EpTL2ul23MPIuR1odjO7XaMLFV8vHGwp7AZciFxtYOeiSCT5st+XSPONiQ==" }, "validate.io-integer": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/validate.io-integer/-/validate.io-integer-1.0.5.tgz", - "integrity": "sha1-FoSWSAuVviJH7EQ/IjPeT4mHgGg=", + "integrity": "sha512-22izsYSLojN/P6bppBqhgUDjCkr5RY2jd+N2a3DCAUey8ydvrZ/OkGvFPR7qfOpwR2LC5p4Ngzxz36g5Vgr/hQ==", "requires": { "validate.io-number": "^1.0.3" } @@ -30208,7 +32097,7 @@ "validate.io-integer-array": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/validate.io-integer-array/-/validate.io-integer-array-1.0.0.tgz", - "integrity": "sha1-LKveAzKTpry+Bj/q/pHq9GsToIk=", + "integrity": "sha512-mTrMk/1ytQHtCY0oNO3dztafHYyGU88KL+jRxWuzfOmQb+4qqnWmI+gykvGp8usKZOM0H7keJHEbRaFiYA0VrA==", "requires": { "validate.io-array": "^1.0.3", "validate.io-integer": "^1.0.4" @@ -30217,7 +32106,7 @@ "validate.io-number": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/validate.io-number/-/validate.io-number-1.0.3.tgz", - "integrity": "sha1-9j/+2iSL8opnqNSODjtGGhZluvg=" + "integrity": "sha512-kRAyotcbNaSYoDnXvb4MHg/0a1egJdLwS6oJ38TJY7aw9n93Fl/3blIXdyYvPOp55CNxywooG/3BcrwNrBpcSg==" }, "vary": { "version": "1.1.2", @@ -30566,6 +32455,18 @@ "is-symbol": "^1.0.3" } }, + "which-typed-array": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.14.tgz", + "integrity": "sha512-VnXFiIW8yNn9kIHN88xvZ4yOWchftKDsRJ8fEPacX/wl1lOvBrhsJ/OeJCXq7B0AaijRuqgzSKalJoPk+D8MPg==", + "requires": { + "available-typed-arrays": "^1.0.6", + "call-bind": "^1.0.5", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.1" + } + }, "widest-line": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", diff --git a/package.json b/package.json index b00e903..f82e9b7 100644 --- a/package.json +++ b/package.json @@ -1,21 +1,32 @@ { "name": "geoview-pluginform", "version": "0.1.0", + "homepage": "https://pewillia.github.io/GeoView-Plugins-Config", "private": true, "dependencies": { "@material-ui/core": "^4.12.3", "@material-ui/icons": "^4.11.2", - "@rjsf/core": "^3.2.1", - "@rjsf/material-ui": "^3.2.1", + "@rjsf/core": "^5.17.0", + "@rjsf/material-ui": "^5.17.0", + "@rjsf/mui": "^5.17.0", + "@rjsf/utils": "^5.17.0", + "@rjsf/validator-ajv8": "^5.17.0", "@testing-library/jest-dom": "^5.16.1", "@testing-library/react": "^12.1.2", "@testing-library/user-event": "^13.5.0", "axios": "^0.24.0", + "file-saver": "2.0.5", "formik": "^2.2.9", "react": "^17.0.2", "react-dom": "^17.0.2", + "react-jsonschema-form-pagination": "0.4.0", "react-router-dom": "^6.2.1", "react-scripts": "5.0.0", + "react-collapsible":"2.10.0", + "react-virtualized-checkbox":"3.0.1", + "reactjs-popup": "2.0.5", + "rjsf-tabs": "0.0.1", + "util": "^0.12.5", "web-vitals": "^2.1.2", "yup": "^0.32.11" }, @@ -25,7 +36,8 @@ "test": "react-scripts test", "eject": "react-scripts eject", "lint": "eslint src", - "postlint": "echo ✅ lint valid" + "postlint": "echo ✅ lint valid", + "deploy": "gh-pages -d build" }, "eslintConfig": { "extends": [ @@ -50,6 +62,8 @@ "eslint-config-prettier": "^8.3.0", "eslint-plugin-prettier": "^4.0.0", "eslint-plugin-react": "^7.28.0", + "geoview-core-types": "github:Canadian-Geospatial-Platform/GeoView#types", + "gh-pages": "^5.0.0", "json-server": "^0.17.0", "prettier": "^2.5.1" } diff --git a/public/Geocore commemorative and radiation.json b/public/Geocore commemorative and radiation.json new file mode 100644 index 0000000..c32c513 --- /dev/null +++ b/public/Geocore commemorative and radiation.json @@ -0,0 +1,69 @@ +{ + "map":{ + "basemapOptions":{ + "shaded":true, + "labeled":true, + "basemapId":"transport" + }, + "interaction":"dynamic", + "listOfGeoviewLayerConfig":[ + { + "geoviewLayerType":"geoCore", + "geoviewLayerName":{ + "en":"commmemorative" + }, + "geoviewLayerId":"21b821cf-0f1c-40ee-8925-eab12d357668", + "initialSettings":{ + "controls":{ + "highlight":true, + "hover":true, + "opacity":true, + "query":true, + "remove":true, + "table":true, + "visibility":true, + "zoom":true + }, + "states":{ + "visible":true, + "opacity":1 + } + } + }, + { + "geoviewLayerType":"geoCore", + "geoviewLayerName":{ + "en":"commemorative" + }, + "geoviewLayerId":"ccc75c12-5acc-4a6a-959f-ef6f621147b9", + "initialSettings":{ + "controls":{ + "highlight":true, + "hover":true, + "opacity":true, + "query":true, + "remove":true, + "table":true, + "visibility":true, + "zoom":true + }, + "states":{ + "visible":true, + "opacity":1 + } + } + } + ], + "viewSettings":{ + "center":[ + -106, + 60 + ], + "zoom":12, + "enableRotation":true, + "projection":3978, + "rotation":0 + }, + "highlightColor":"black" + } +} \ No newline at end of file diff --git a/public/Geocore radiation.json b/public/Geocore radiation.json new file mode 100644 index 0000000..664a52e --- /dev/null +++ b/public/Geocore radiation.json @@ -0,0 +1,46 @@ +{ + "map":{ + "basemapOptions":{ + "shaded":true, + "labeled":true, + "basemapId":"transport" + }, + "interaction":"dynamic", + "listOfGeoviewLayerConfig":[ + { + "geoviewLayerType":"geoCore", + "geoviewLayerName":{ + "en":"AireborneRadiation" + }, + "geoviewLayerId":"21b821cf-0f1c-40ee-8925-eab12d357668", + "initialSettings":{ + "controls":{ + "highlight":true, + "hover":true, + "opacity":true, + "query":true, + "remove":true, + "table":true, + "visibility":true, + "zoom":true + }, + "states":{ + "visible":true, + "opacity":1 + } + } + } + ], + "viewSettings":{ + "center":[ + -106, + 60 + ], + "zoom":12, + "enableRotation":true, + "projection":3978, + "rotation":0 + }, + "highlightColor":"black" + } +} \ No newline at end of file diff --git a/public/WMS weather and Geocore radiation.json b/public/WMS weather and Geocore radiation.json new file mode 100644 index 0000000..6ab8cc7 --- /dev/null +++ b/public/WMS weather and Geocore radiation.json @@ -0,0 +1 @@ +{"map":{"basemapOptions":{"shaded":true,"labeled":true,"basemapId":"transport"},"interaction":"dynamic","listOfGeoviewLayerConfig":[{"geoviewLayerName":{"en":"met"},"metadataAccessPath":{"en":"https://geo.weather.gc.ca/geomet"},"geoviewLayerType":"ogcWms","listOfLayerEntryConfig":[{"entryType":"raster-image3","schemaTag":"ogcWms","layerId":"CURRENT_CONDITIONS","layerName":{"en":"met3"},"initialSettings":{"opacity":1,"visible":"yes"},"source":{"dataAccessPath":{"en":"https://geo.weather.gc.ca/geomet"},"featureInfo":{"customParser":{"template":{"en":"ee"}},"nameField":{"en":"plain_text"},"outfields":{"en":"plain_text"},"aliasFields":{"en":"Forecast"},"queryable":true}},"style":{"LineString":{"styleId":"1","styleType":"simple","label":"1","settings":{"type":"lineString","stroke":{"color":"#231f1f","lineStyle":"dash","width":1}}},"Point":{"styleId":"1","styleType":"simple","label":"1","settings":{"type":"lineString","stroke":{"color":"#c11a1a","lineStyle":"dash","width":1}}},"Polygon":{"styleId":"1","styleType":"simple","label":"1","settings":{"type":"lineString","stroke":{"color":"#b42d2d","lineStyle":"dash-dot","width":1}}}}}],"geoviewLayerId":"wmsLYR1-Root"},{"geoviewLayerType":"geoCore","geoviewLayerName":{"en":"radiation"},"geoviewLayerId":"21b821cf-0f1c-40ee-8925-eab12d357668","initialSettings":{"controls":{"highlight":true,"hover":true,"opacity":true,"query":true,"remove":true,"table":true,"visibility":true,"zoom":true},"states":{"visible":true,"opacity":1}}}],"viewSettings":{"center":[-106,60],"zoom":12,"enableRotation":true,"projection":3857,"rotation":0},"highlightColor":"black"}} \ No newline at end of file diff --git a/public/chart.png b/public/chart.png new file mode 100644 index 0000000..ba3db33 Binary files /dev/null and b/public/chart.png differ diff --git a/public/counter.js b/public/counter.js new file mode 100644 index 0000000..1e5b422 --- /dev/null +++ b/public/counter.js @@ -0,0 +1,19 @@ +// counter.js +// import React from "react"; +(function () { + class counter { + translations = { + en: { + testMessage: "Hello", + }, + fr: { + testMessage: "Bonjour", + }, + }; + } + + + // export this package + window.packages = window.packages || {}; + window.packages.counter = counter; +})(); \ No newline at end of file diff --git a/public/counter.ts b/public/counter.ts new file mode 100644 index 0000000..e69de29 diff --git a/public/datat(52)my_config2.json b/public/datat(52)my_config2.json new file mode 100644 index 0000000..6251911 --- /dev/null +++ b/public/datat(52)my_config2.json @@ -0,0 +1 @@ +{"map":{"basemapOptions":{"id":"transport","shaded":true,"labeled":true},"interaction":"dynamic","viewSettings":{"center":[-106,60],"enableRotation":true,"extent":[2,2,2,2],"projection":3978,"rotation":0,"zoom":12},"extraOptions":{}},"theme":"dark","appBar":{"about":{}},"navBar":["zoom","fullscreen","fullextent"],"components":["app-bar","nav-bar","overview-map","north-arrow"],"corePackages":["basemap-panel","layers-panel","details-panel","geolocator-panel"],"externalPackages":{"keys":"https://geocore.api.geo.ca"},"serviceUrls":{"keys":"https://geocore.api.geo.ca"},"suportedLanguages":["en-CA","fr-CA"]} \ No newline at end of file diff --git a/public/energy.json b/public/energy.json new file mode 100644 index 0000000..3ee6c31 --- /dev/null +++ b/public/energy.json @@ -0,0 +1,36 @@ +{ + "map": { + "interaction": "static", + "viewSettings": { + "zoom": 4, + "center": [-100, 60], + "projection": 3857 + }, + "basemapOptions": { + "basemapId": "transport", + "shaded": false, + "labeled": true + }, + "listOfGeoviewLayerConfig": [ + + { + "geoviewLayerId": "esriDynamicLYR2", + "geoviewLayerName": { + "en": "Energy", + "fr": "Energy" + }, + "metadataAccessPath": { + "en": "https://maps-cartes.ec.gc.ca/arcgis/rest/services/CESI/MapServer", + "fr": "https://maps-cartes.ec.gc.ca/arcgis/rest/services/CESI/MapServer" + }, + "geoviewLayerType": "esriDynamic", + "listOfLayerEntryConfig": [{ "layerId": "0" }, { "layerId": "6" }] + } + + ] + }, + "theme": "dark", + "components": [], + "corePackages": [], + "suportedLanguages": ["en"] +} \ No newline at end of file diff --git a/public/esri-xyztiles.json b/public/esri-xyztiles.json new file mode 100644 index 0000000..d4a07fe --- /dev/null +++ b/public/esri-xyztiles.json @@ -0,0 +1,81 @@ +{ + "map":{ + "basemapOptions":{ + "basemapId":"transport", + "shaded":true, + "labeled":true + }, + "interaction":"dynamic", + "viewSettings":{ + "center":[ + -106, + 60 + ], + "zoom":12, + "enableRotation":true, + "projection":3978, + "rotation":0 + }, + "listOfGeoviewLayerConfig":[ + { + "geoviewLayerType":"xyzTiles", + "listOfLayerEntryConfig":[ + { + "entryType":"raster-tile2", + "layerId":"toner", + "layerName":{ + "en":"world2" + }, + "initialSettings":{ + "opacity":1, + "visible":"yes" + }, + "schemaTag":"ogcWms", + "source":{ + "dataAccessPath":{ + "en":"https://server.arcgisonline.com/ArcGIS/rest/services/World_Topo_Map/MapServer/tile/{z}/{y}/{x}" + } + } + } + ], + "geoviewLayerId":"xyzTilesLYR1", + "geoviewLayerName":{ + "en":"world" + } + } + ] + }, + "footerBar":{ + "tabs":{ + "core":[ + "legend", + "layers", + "details", + "data-table" + ], + "custom":[ + + ] + }, + "collapsed":false + }, + "suportedLanguages":[ + "en" + ], + "theme":"dark", + "navBar":[ + "zoom", + "fullscreen", + "home" + ], + "components":[ + "overview-map", + "north-arrow" + ], + "corePackages":[ + + ], + "externalPackages":[ + + ] +} \ No newline at end of file diff --git a/public/firstnation.json b/public/firstnation.json new file mode 100644 index 0000000..706367b --- /dev/null +++ b/public/firstnation.json @@ -0,0 +1,33 @@ +{ + "map": { + "interaction": "static", + "viewSettings": { + "zoom": 4, + "center": [-100, 60], + "projection": 3857 + }, + "basemapOptions": { + "basemapId": "transport", + "shaded": false, + "labeled": true + }, + "listOfGeoviewLayerConfig": [ + { + "geoviewLayerId": "wmsLYR1", + "geoviewLayerName": { + "en": "firstnation" + + }, + "metadataAccessPath": { + "en": "https://services.aadnc-aandc.gc.ca/geomatics/services/Donnees_Ouvertes-Open_Data/Premiere_Nation_First_Nation/MapServer/WMSServer" + }, + "geoviewLayerType": "ogcWms", + "listOfLayerEntryConfig": [{ "layerId": "0" }] + } + ] + }, + "theme": "dark", + "components": ["footer-bar"], + "corePackages": [], + "suportedLanguages": ["en"] +} \ No newline at end of file diff --git a/public/floodhistorical-esridynamic.json b/public/floodhistorical-esridynamic.json new file mode 100644 index 0000000..08431ef --- /dev/null +++ b/public/floodhistorical-esridynamic.json @@ -0,0 +1,90 @@ +{ + "theme":"dark", + "navBar":[ + "zoom", + "fullscreen", + "home" + ], + "components":[ + "overview-map", + "north-arrow" + ], + "corePackages":[ + + ], + "externalPackages":[ + + ], + "suportedLanguages":[ + "en" + ], + "map":{ + "basemapOptions":{ + "shaded":true, + "basemapId":"transport", + "labeled":true + }, + "interaction":"dynamic", + "listOfGeoviewLayerConfig":[ + { + "geoviewLayerType":"esriDynamic", + "listOfLayerEntryConfig":[ + { + "entryType":"vector-tile", + "initialSettings":{ + "opacity":1, + "visible":"yes" + }, + "layerId":"0", + "layerName":{ + "en":"flood" + }, + "schemaTag":"esriDynamic", + "source":{ + "dataAccessPath":{ + "en":"https://maps-cartes.services.geo.ca/server_serveur/rest/services/NRCan/historical_flood_event_en/MapServer" + }, + "featureInfo":{ + "customParser":{ + "template":{ + + } + }, + "nameField":{ + + }, + "outfields":{ + + }, + "aliasFields":{ + + }, + "queryable":true + } + }, + "style":{ + + } + } + ], + "geoviewLayerId":"historical-flood", + "geoviewLayerName":{ + "en":"flood" + }, + "metadataAccessPath":{ + "en":"https://maps-cartes.services.geo.ca/server_serveur/rest/services/NRCan/historical_flood_event_en/MapServer" + } + } + ], + "viewSettings":{ + "enableRotation":true, + "center":[ + -106, + 60 + ], + "projection":3857, + "rotation":0, + "zoom":12 + } + } +} \ No newline at end of file diff --git a/public/index.html b/public/index.html index f478e83..3546021 100644 --- a/public/index.html +++ b/public/index.html @@ -10,12 +10,15 @@ content="Web site created using create-react-app" /> + + - + NRCan Internal Application - - - -
+ + // + + +
+
+ +
+ + + + + + + + + + + + + diff --git a/public/my-config - Copy.json b/public/my-config - Copy.json new file mode 100644 index 0000000..d760be5 --- /dev/null +++ b/public/my-config - Copy.json @@ -0,0 +1,73 @@ +{ + "map": { + "interaction": "static", + "viewSettings": { + "zoom": 4, + "center": [-100, 60], + "projection": 3857 + }, + "basemapOptions": { + "basemapId": "transport", + "shaded": false, + "labeled": true + }, + "listOfGeoviewLayerConfig": [ + { + "geoviewLayerId": "wmsLYR1", + "geoviewLayerName": { + "en": "Première Nation / First Nation", + "fr": "Première Nation / First Nation" + }, + "metadataAccessPath": { + "en": "https://services.aadnc-aandc.gc.ca/geomatics/services/Donnees_Ouvertes-Open_Data/Premiere_Nation_First_Nation/MapServer/WMSServer", + "fr": "https://services.aadnc-aandc.gc.ca/geomatics/services/Donnees_Ouvertes-Open_Data/Premiere_Nation_First_Nation/MapServer/WMSServer" + }, + "geoviewLayerType": "ogcWms", + "listOfLayerEntryConfig": [{ "layerId": "0" }] + }, + { + "geoviewLayerId": "esriDynamicLYR2", + "geoviewLayerName": { + "en": "Energy", + "fr": "Energy" + }, + "metadataAccessPath": { + "en": "https://maps-cartes.ec.gc.ca/arcgis/rest/services/CESI/MapServer", + "fr": "https://maps-cartes.ec.gc.ca/arcgis/rest/services/CESI/MapServer" + }, + "geoviewLayerType": "esriDynamic", + "listOfLayerEntryConfig": [{ "layerId": "0" }, { "layerId": "6" }] + }, + { + "geoviewLayerId": "geojsonLYR4", + "geoviewLayerName": { + "en": "GeoJSON Line", + "fr": "GeoJSON Line" + }, + "metadataAccessPath": { + "en": "./geojson/metadata.json", + "fr": "./geojson/metadata.json" + }, + "geoviewLayerType": "GeoJSON", + "listOfLayerEntryConfig": [{ "layerId": "points.json" }, { "layerId": "lines.json" }, { "layerId": "polygons.json" }] + }, + { + "geoviewLayerId": "wmsLYR7", + "geoviewLayerName": { + "en": "Geomet", + "fr": "Geomet" + }, + "metadataAccessPath": { + "en": "https://geo.weather.gc.ca/geomet", + "fr": "https://geo.weather.gc.ca/geomet" + }, + "geoviewLayerType": "ogcWms", + "listOfLayerEntryConfig": [{ "layerId": "RAQDPS-FW.CE_PM2.5-DIFF-YAvg" }] + } + ] + }, + "theme": "dark", + "components": ["footer-bar"], + "corePackages": [], + "suportedLanguages": ["en"] +} \ No newline at end of file diff --git a/public/my-config.json b/public/my-config.json new file mode 100644 index 0000000..d760be5 --- /dev/null +++ b/public/my-config.json @@ -0,0 +1,73 @@ +{ + "map": { + "interaction": "static", + "viewSettings": { + "zoom": 4, + "center": [-100, 60], + "projection": 3857 + }, + "basemapOptions": { + "basemapId": "transport", + "shaded": false, + "labeled": true + }, + "listOfGeoviewLayerConfig": [ + { + "geoviewLayerId": "wmsLYR1", + "geoviewLayerName": { + "en": "Première Nation / First Nation", + "fr": "Première Nation / First Nation" + }, + "metadataAccessPath": { + "en": "https://services.aadnc-aandc.gc.ca/geomatics/services/Donnees_Ouvertes-Open_Data/Premiere_Nation_First_Nation/MapServer/WMSServer", + "fr": "https://services.aadnc-aandc.gc.ca/geomatics/services/Donnees_Ouvertes-Open_Data/Premiere_Nation_First_Nation/MapServer/WMSServer" + }, + "geoviewLayerType": "ogcWms", + "listOfLayerEntryConfig": [{ "layerId": "0" }] + }, + { + "geoviewLayerId": "esriDynamicLYR2", + "geoviewLayerName": { + "en": "Energy", + "fr": "Energy" + }, + "metadataAccessPath": { + "en": "https://maps-cartes.ec.gc.ca/arcgis/rest/services/CESI/MapServer", + "fr": "https://maps-cartes.ec.gc.ca/arcgis/rest/services/CESI/MapServer" + }, + "geoviewLayerType": "esriDynamic", + "listOfLayerEntryConfig": [{ "layerId": "0" }, { "layerId": "6" }] + }, + { + "geoviewLayerId": "geojsonLYR4", + "geoviewLayerName": { + "en": "GeoJSON Line", + "fr": "GeoJSON Line" + }, + "metadataAccessPath": { + "en": "./geojson/metadata.json", + "fr": "./geojson/metadata.json" + }, + "geoviewLayerType": "GeoJSON", + "listOfLayerEntryConfig": [{ "layerId": "points.json" }, { "layerId": "lines.json" }, { "layerId": "polygons.json" }] + }, + { + "geoviewLayerId": "wmsLYR7", + "geoviewLayerName": { + "en": "Geomet", + "fr": "Geomet" + }, + "metadataAccessPath": { + "en": "https://geo.weather.gc.ca/geomet", + "fr": "https://geo.weather.gc.ca/geomet" + }, + "geoviewLayerType": "ogcWms", + "listOfLayerEntryConfig": [{ "layerId": "RAQDPS-FW.CE_PM2.5-DIFF-YAvg" }] + } + ] + }, + "theme": "dark", + "components": ["footer-bar"], + "corePackages": [], + "suportedLanguages": ["en"] +} \ No newline at end of file diff --git a/public/weatherGeomet.json b/public/weatherGeomet.json new file mode 100644 index 0000000..284baef --- /dev/null +++ b/public/weatherGeomet.json @@ -0,0 +1,34 @@ +{ + "map": { + "interaction": "static", + "viewSettings": { + "zoom": 4, + "center": [-100, 60], + "projection": 3857 + }, + "basemapOptions": { + "basemapId": "transport", + "shaded": false, + "labeled": true + }, + "listOfGeoviewLayerConfig": [ + { + "geoviewLayerId": "wmsLYR7", + "geoviewLayerName": { + "en": "Geomet", + "fr": "Geomet" + }, + "metadataAccessPath": { + "en": "https://geo.weather.gc.ca/geomet", + "fr": "https://geo.weather.gc.ca/geomet" + }, + "geoviewLayerType": "ogcWms", + "listOfLayerEntryConfig": [{ "layerId": "RAQDPS-FW.CE_PM2.5-DIFF-YAvg" }] + } + ] + }, + "theme": "dark", + "components": [], + "corePackages": [], + "suportedLanguages": ["en"] +} \ No newline at end of file diff --git a/public/weather_current_condition_ogmwms.json b/public/weather_current_condition_ogmwms.json new file mode 100644 index 0000000..fc4f99e --- /dev/null +++ b/public/weather_current_condition_ogmwms.json @@ -0,0 +1,128 @@ +{ + "theme":"dark", + "navBar":[ + "zoom", + "fullscreen", + "home" + ], + "components":[ + "overview-map", + "north-arrow" + ], + "corePackages":[ + + ], + "externalPackages":[ + + ], + "suportedLanguages":[ + "en" + ], + "map":{ + "basemapOptions":{ + "basemapId":"transport", + "shaded":true, + "labeled":true + }, + "interaction":"dynamic", + "listOfGeoviewLayerConfig":[ + { + "geoviewLayerType":"ogcWms", + "listOfLayerEntryConfig":[ + { + "entryType":"raster-image3", + "schemaTag":"ogcWms", + "layerId":"CURRENT_CONDITIONS", + "layerName":{ + "en":"met3" + }, + "initialSettings":{ + "opacity":1, + "visible":"yes" + }, + "source":{ + "dataAccessPath":{ + "en":"https://geo.weather.gc.ca/geomet" + }, + "featureInfo":{ + "customParser":{ + "template":{ + "en":"ee" + } + }, + "nameField":{ + "en":"plain_text" + }, + "outfields":{ + "en":"plain_text" + }, + "aliasFields":{ + "en":"Forecast" + }, + "queryable":true + } + }, + "style":{ + "LineString":{ + "styleId":"1", + "styleType":"simple", + "label":"1", + "settings":{ + "type":"lineString", + "stroke":{ + "color":"#231f1f", + "lineStyle":"dash", + "width":1 + } + } + }, + "Point":{ + "styleId":"1", + "styleType":"simple", + "label":"1", + "settings":{ + "type":"lineString", + "stroke":{ + "color":"#c11a1a", + "lineStyle":"dash", + "width":1 + } + } + }, + "Polygon":{ + "styleId":"1", + "styleType":"simple", + "label":"1", + "settings":{ + "type":"lineString", + "stroke":{ + "color":"#b42d2d", + "lineStyle":"dash-dot", + "width":1 + } + } + } + } + } + ], + "geoviewLayerId":"wmsLYR1-Root", + "geoviewLayerName":{ + "en":"met" + }, + "metadataAccessPath":{ + "en":"https://geo.weather.gc.ca/geomet" + } + } + ], + "viewSettings":{ + "enableRotation":true, + "center":[ + -106, + 60 + ], + "projection":3857, + "rotation":0, + "zoom":12 + } + } +} \ No newline at end of file diff --git a/src/App.css b/src/App.css index dda669b..861c65d 100644 --- a/src/App.css +++ b/src/App.css @@ -55,3 +55,336 @@ code { border-radius: 1px; margin: 250px; } + + +/* added below */ + +.bold-title { + font-weight: bold; + justify-content: inherit; + font-size: 0.8125rem; + font-family: "Roboto", "Helvetica", "Arial", sans-serif; + font-weight: 500; + line-height: 1.75; + +} + + +.popup-content { + + position: relative; +width: 75vw !important; + height: 40px !important; + background: rgb(255, 255, 255); + /*width: 50%; + box-sizing: 800px !important; + /* padding: 5px; + added below after 7 mar */ + float: top; + left: 38%; + top: -40%; + transform: translate(-50%, -50%); +} +.popup-arrow { + color: rgb(255, 255, 255); +} +[role='tooltip'].popup-content { + width: 200px; + box-shadow: rgba(0, 0, 0, 0.16) 0px 0px 3px; +} + +.popup-overlay { + background: rgba(0, 0, 0, 0.5); +} + +/* added for pul down mendu june 8 */ + +.dropdown { + + position: relative; + background-color: #3f51b5; + color: #fff; + width: 200px; + align-items: inherit; + justify-content: inherit; + font-size: 0.8125rem; + font-family: "Roboto", "Helvetica", "Arial", sans-serif; + font-weight: 500; + line-height: 1.75; + border-radius: 4px; + letter-spacing: 0.02857em; + text-transform: uppercase; + padding: 6px 16px; + vertical-align: middle ; + text-align: center ; + +} + + +.menu { + position: absolute; + font-size: 0.8125rem; + + list-style-type: none; + margin: 5px 0; + padding: 0; + padding: 4px 10px; + font-size: 0.8125rem; + border: 1px solid grey; + width: 150px; +} + +.menu > li { + margin: 0; + + background-color: white; +} + +.menu > li:hover { + background-color: lightgray; +} + +.menu > li > button { + width: 100%; + height: 100%; + text-align: left; + + background: none; + color: inherit; + border: none; + padding: 5px; + margin: 0; + font: inherit; + cursor: pointer; +} +/* added for colums */ +/* Create two equal columns that floats next to each other */ +.column { + float: left; + width: 10%; + padding: 10px; + height: 300px; /* Should be removed. Only for demonstration */ +} + +/* Clear floats after the columns */ +.row:after { + content: ""; + display: table; + clear: both; +} + +.col-sm-6 { + width: 50%; +} +.col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 { + float: left; +} + +.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 { + position: relative; + min-height: 1px; + padding-right: 15px; + padding-left: 15px; +} +/* I added this */ +.row { + display: flex; +} + +.column { + flex: 50%; +} + +/* react Popup below*/ +.Collapsible__trigger{ + color:blue; +} +/* need content to remove marker character that opverlaps text*/ +::marker{ +unicode-bidi: isolate; + font-variant-numeric: tabular-nums; + text-transform: none; + text-indent: 0px !important; + text-align: start !important; + text-align-last: start !important; + content: ""; +} + +.nav + li { + text-align: left; + float: left; + padding-left: 50px; + flex: 50%; +} +/* below wworks +.nav > li { + text-align: left; + float: left; + padding-left: 50px; + flex: 50%; +} +*/ +.nav+div{ clear: both;} + +ul:empty + .empty-state { + display: block; +} + +.active { + background-color: white; + color:blue; + float: left; +} +.active + li{ + + float: left; +} +.active + li{ + + float: left; +} + +.active + li + li{ + + + float: left; +} +.active + li + li + li{ + + break-after: right; + break-after: right; + break-after: right; + float: left; +} +.active + li + li + li:after{ + +content: "\A "; + display: inline-block; +} + +/* adds horizontal tabs but oeverlap ,need float left for horizontgal tab* + padding-left: 5px; +float: left; + line-height: 150%; +*/ +/* + float: left; + + ul + li { float: left; + } +*/ + +/* hashtag selects and elemnt by id +*/ +#root_map__title{display:none;} + +.MuiTopography-root{display:none;} + +.MuiTopography-h5{float:left; + display:none; +text-align: left; +justify-content: flex-end;} + + + +li{ + + +font-size: 20px; +text-align: left; + +} + +label{ + text-align: left; + +} + +.footerBar{ line-height: 1.6; + text-align: left; +} + +header{ line-height: 1.6; +} + +.MuiInputLabel-formControl{ + text-align: left; +} + + +.MuiFormControl-root{ + text-align: left; +} + +.control-label { + clear: inherit; +line-height: 200%; + + display: none; + + +} + +.Collapsible{ +background-color: white; +/* just added below to align with popup */ + position: relative; + /* overflow-y: scroll; */ + overflow-x: hidden; + overflow-y: auto; +/*width: 75vw !important; + height: 40px !important;*/ + + /*width: 50%; + box-sizing: 800px !important; + /* padding: 5px; + added below after 7 mar + float: top;*/ + /* left: 38%; + top: -40%; + transform: translate(-50%, -50%);*/ +} + + +#restart:before { + content: ' '; + clear: right; + display: block; +} + + /* + + .modal { + font-size: 12px; +} +.modal > .header { + width: 100%; + border-bottom: 1px solid gray; + font-size: 18px; + text-align: center; + padding: 5px; +} +.modal > .content { + width: 100%; + padding: 10px 5px; +} +.modal > .actions { + width: 100%; + padding: 10px 5px; + margin: auto; + text-align: center; +} +.modal > .close { + cursor: pointer; + position: absolute; + display: block; + padding: 2px 5px; + line-height: 20px; + right: -10px; + top: -10px; + font-size: 24px; + background: #ffffff; + border-radius: 18px; + border: 1px solid #cfcece; +} +*/ \ No newline at end of file diff --git a/src/App.js b/src/App.js index 40dbf15..ea4ddbc 100644 --- a/src/App.js +++ b/src/App.js @@ -1,13 +1,23 @@ import InputForm from "./components/InputForm"; import { BrowserRouter as Router, Route, Routes } from "react-router-dom"; import Plugin from "./components/SchemaForm"; +//import PopUp from "./components/PopUps"; + // } /> + // } /> + const App = () => { return ( - + } /> } /> + + + + + + ); diff --git a/src/components/InputForm.js b/src/components/InputForm.js index e19397b..db7077a 100644 --- a/src/components/InputForm.js +++ b/src/components/InputForm.js @@ -2,42 +2,22 @@ * @author Vijendra Yadav */ -import { - Box, - Button, - FormControl, - FormControlLabel, - FormLabel, - Radio, - RadioGroup, - TextField, - Typography, -} from "@material-ui/core"; +import { Box,Button,FormControl,FormControlLabel,FormLabel,Radio,RadioGroup,TextField,Typography} from "@material-ui/core"; import { Field, Form, Formik } from "formik"; import { object, string } from "yup"; import { useNavigate } from "react-router-dom"; + //import api from "../api/api"; const initialValues = { uuid: "", language: "", plugin: "", + type: "string", + format: "data-url", + }; -/* -async function getSchema(uuid, language, pluginType) { - try { - return await api.get("/plugins", { - params: { - id: uuid, - language: language, - pluginType: pluginType, - }, - }); - } catch (error) { - console.error(error); - } -} -*/ + const InputForm = () => { let navigate = useNavigate(); @@ -54,8 +34,11 @@ const InputForm = () => { //const schema = getSchema(values.uuid, values.language, values.plugin); const jsonString = require("./db.json"); //const customer = JSON.parse(jsonString); - console.log(jsonString.plugins); + console.log('json string-',jsonString.plugins); +// navigate("/plugin", { +// state: { data: jsonString.plugins, desiredPlugin: values.plugin }, +// }); navigate("/plugin", { state: { data: jsonString.plugins, desiredPlugin: values.plugin }, }); @@ -84,6 +67,7 @@ const InputForm = () => { error={Boolean(errors.uuid) && Boolean(touched.uuid)} helperText={Boolean(touched.uuid) && errors.uuid} /> + @@ -140,15 +124,22 @@ const InputForm = () => { label="Swiper" /> } - label="Draw Toolbar" + label="Thematic Slider" + /> + } + label="Geoview map" /> } - label="Thematic Chart" + label="Draw Toolbar" /> + + @@ -170,4 +161,6 @@ const InputForm = () => { ); }; + + export default InputForm; diff --git a/src/components/SchemaForm.js b/src/components/SchemaForm.js index db18196..679aa9a 100644 --- a/src/components/SchemaForm.js +++ b/src/components/SchemaForm.js @@ -1,46 +1,4325 @@ /** * @author Vijendra Yadav */ +// commented out aug 9 for test +//import { RJSFSchema, UiSchema, FieldProps, RegistryFieldsType } from '@rjsf/utils'; + +//sept6 commentd out below, oct 6,v4 mui + +//commented out jan 5 for test ------------------ +//commneted out march 19 to add mui collapsible +//import { CSSProperties } from 'react'; +//import Box from '@material-ui/core/Box'; +import Grid from '@material-ui/core/Grid'; +import Paper from '@material-ui/core/Paper'; import Form from "@rjsf/material-ui"; +//import Tabs from '@mui/material/Tabs'; +//import Tab from '@mui/material/Tab'; +import { Accordion, AccordionSummary, AccordionDetails } from "@mui/material"; +import ExpandMoreIcon from '@material-ui/icons/ExpandMore'; +//import IconButton from '@mui/material/IconButton' +// ori +import { + titleId, + // StrictRJSFSchema, +// RJSFSchema, + // FormContextType, + + // ObjectFieldTemplatePropertyType, +} from '@rjsf/utils'; + +import { + getTemplate, + getUiOptions, + + // ObjectFieldTemplateProps, + + + canExpand, + descriptionId, + + + //ArrayFieldTemplateProps, + // ArrayFieldTemplateItemType, + // FormContextType, + //RJSFSchema, + // StrictRJSFSchema, +} from '@rjsf/utils'; + + +//added march 19 +//import { withTheme } from '@rjsf/core'; +//import Theme from '@rjsf/material-ui'; +//import { useMuiComponent } from '@rjsf/material-ui'; +//import { withTheme } from '@rjsf/core'; +//import { Theme } from '@rjsf/mui'; + + //const Form = withTheme(Theme); +//added oct10 below +//import { withTheme } from 'react-jsonschema-form'; +//import { Theme as MuiTheme } from 'rjsf-material-ui'; + // import { makeStyles } from '@material-ui/core'; + +//const Form = withTheme(MuiTheme); + +//added oct 10 + //import { useMuiComponent } from '@rjsf/material-ui/v4'; + +// tried below and works materual ui v5 +//import Form from "@rjsf/mui"; +//import Form from "@rjsf/core"; + +// added to test aug 9 for test v4 or v5 mateial ui +//import Form from "@rjsf/material-ui/v5"; +//import Form from "@rjsf/core"; +import { useNavigate } from "react-router-dom"; import { useLocation } from "react-router-dom"; import React from "react"; -import { Box, Button } from "@material-ui/core"; +import { Box, Button,ButtonGroup,FormControl,FormControlLabel,FormLabel,Radio,RadioGroup } from "@material-ui/core"; +//import { Box, Button,ButtonGroup,FormControl,FormControlLabel,FormLabel,Radio,RadioGroup } from "@rjsf/core"; + +//changed aug 16 +//import validator from "@rjsf/validator-ajv6"; + + +//commented jan 4 for test +//commneted ou for test ajv for verbose nessages +// + +//mar 10 uncommented out +//import validator from "@rjsf/validator-ajv8"; +import { customizeValidator } from '@rjsf/validator-ajv8'; + +//import Stack from '@mui/material/Stack'; +//import NewWindow from 'react-new-window'; +//import { render } from "react-dom"; +import { saveAs } from 'file-saver'; +import { useState,useCallback,useEffect } from 'react'; +import Tooltip from "@material-ui/core/Tooltip"; +import ReactDOM from 'react-dom'; +import Popup from 'reactjs-popup'; +import 'reactjs-popup/dist/index.css'; +import { createRef } from "react"; +//import { ContactlessOutlined } from "@material-ui/icons"; +// import { CollectionsBookmarkOutlined, TheatersRounded } from "@material-ui/icons"; + +// import { IconButtonProps, RJSFSchema } from '@rjsf/utils'; // added nov 16 +//import { helpId } from '@rjsf/utils'; +// import { Popper } from '@mui/material'; + +//import {TypeWindow,TypeJsonObject,TypeButtonPanel,TypePanelProps,TypeIconButtonProps,} from 'geoview-core-types'; //aded nov 20 + +//import applyNav from "rjsf-tabs/lib/applyNav" +//import { GENERIC_NAV } from "rjsf-tabs/lib/utils"; +//import { GENERIC_NAV } from "rjsf-tabs/utils"; +//import EditorNavs from './EditorNavs' + //import applyNavs from "react-jsonschema-form-pagination"; + +import applyNav from "rjsf-tabs/lib/applyNav"; +import Collapsible from 'react-collapsible'; + //below added may 10 for accordian to change background color +import { useRef } from "react"; +// import { GENERIC_NAV } from "rjsf-tabs/utils"; +//mport CustomNavs from "./CustomNavs"; + +//import { FormattedMessage } from 'react-intl'; // added nov 16 +// added may 14,2024 +//import { ScrollView, Image, Text } from 'react-native'; +//may 16 added below +import VirtualizedCheckbox from 'react-virtualized-checkbox'; +import { Filter1 } from '@material-ui/icons'; + +const submitFormRef = createRef(); + +// added jan 16 for test + +const formRef = createRef(); +const onError = (errors) => { + console.log("OnError , errors=", errors); + let accordian=document.getElementsByClassName("MuiButtonBase-root MuiAccordionSummary-root MuiAccordionSummary-gutters css-sh22l5-MuiButtonBase-root-MuiAccordionSummary-root"); + accordian.expanded = "true"; + //errors = errors[0]; + console.log("OnError just set errors, errors=", errors); + + //alert(errors[0].message); +} +// added jun 19 for vernose error messages +let Data = []; +// added jan 17 for vernose error messages + +const ajvOptionsOverrides = { + + //was fakle changed feb 7 late + strict:false, + verbose: true, + useDefaults: true, + allErrors: true, + //was false changed feb 7 flase needed descriminator field in one of ? + discriminator: true + + +}; + +const validator = customizeValidator({ ajvOptionsOverrides }); + +//added march 19 +//const Form = withTheme(Theme); + + +//let FormWithNav = applyNav(Form); +//let FormWithPagination = applyNav(Form); + +//import {StyleSheet,Text,SafeAreaView,ScrollView,StatusBar} from 'react-native'; + +//commented below out aug 8 + +//import applyNav from "rjsf-tabs/lib/applyNav"; +// import { GENERIC_NAV } from "rjsf-tabs/utils"; +//mport CustomNavs from "./CustomNavs"; + + +//commente out jan 26 + //let navSelected = ""; + + +//function EditorNavs({ navs: { links }, onNavChange }) { + // let relLinks = links.filter(({ nav }) => nav !== GENERIC_NAV); +// return ( + /* + + + + + + + + + Item One + + + Item Two + + + Item Three + +*/ + // + // ); +//} + +//addd oct 25 +//let uiSchema = {}; + +let plugins = { "plugins": [] }; +let plugin = ""; + +let draw = { "draw": "" }; +let swiper= { "swiper": "" }; +let map = ""; +let fileLoaded = false; +let notfirstLoad = true; +let formnotUpdated = true; +let oldSchema = "" +let mapLayersName = ["transport", "hill shade"]; // test of map layers +// let mapLayersName = []; + + // var f = new FileReader(); +const file = document.getElementById('file-selector'); +file.setAttribute("display", "none"); +let formData = new FormData(); // added nov 21 +let formSubmitted = false ; +let mapFormChanged = false; +let blob = ""; +let result = ""; + +let uiSchema = ""; +let image1 = ""; + +//a dded nov +let extentSet = false; +let mapExtent = []; +let active_plugin = ""; + +//added mar 27 +let errorColor = "grey"; + + +const Geoviewmapdiv = document.createElement("div"); + +let items1 = []; +// below added ay 10 + +//un commented april 12 +// const [expanded, setExpanded] = React.useState(false); + +/* +function customValidate(formData, errors) { + + console.log("custom validate --- valdiate form",formData); + + if (formData.map.listOfGeoviewLayerConfig[0] !== undefined) { + if (formData.map.listOfGeoviewLayerConfig[0].listOfLayerEntryConfig[0].style.LineString.settings.stroke.color === null) { + errors.formData.map.listOfGeoviewLayerConfig[0].listOfLayerEntryConfig[0].style.LineString.settings.stroke.color.addError("Color must not be null"); + } + } + else { console.log("listofGeoviewLayercOnfig not define"); } + console.log("errors type",typeof ( errors)); + + if (errors[0] ) { + console.log("custom validate -------------------just set error"); + errors = errors[0]; + } + console.log("custom validate -------------------just set error",errors); + return errors; +} +*/ + + + + +function Help() { + ReactDOM.render( + Open Modal } + modal + nested + > + {close => ( +
+ + +

General Information + +The Federal Geospatial Platform Authoring (FGPA) tool is used to create, update, validate and preview configuration files used by the Federal Geospatial Platform Viewer (FGPV). +

+The FGPA tool is based on React. This library generates forms from JSON schemas. +

+The FGPA tool uses the same schema as the FGPV and lets user modify values to easily create new configuration files. The schema is composed of 5 sections: +Map + +

+

+ +

+

+ +

+ # Map is divided in 5 sections (Extents and Levels of Details, Basemaps, Layers, Legend and Components) +

+UI +

+

+UI is divided in 4 sections (General, Application Bar, Navigation and Side Menu) +

+

+Services +

+Services is divided in 3 sections (Export Map, Geo Search and Service End Points) +

+

+Version +

+

+Language +

+

+ + +For more information about schema structure, go to the FGPV schema section in our wiki page. This section will also give you information on schema values and their effect in the viewer. + +

+ Useful information +

+

+

+

+To switch the interface language, use the language dropdown menu located in the upper right corner . + +At any time, when available, you can use the expand or collapse buttons to expand or collapse all the items inside a section. + +Some configuration items are for more advanced user. You can show/hide these items with the Show advanced configuration options checkbox located under each section name. + +Some items like basemaps, layers and layer fields can be reordered. You can easily identify reorderable items with the drag handle . To reorder an item, click the handle then drag the item to the desired position. A yellow box will appear under the item where it will be placed when you release the handle. Note: it is easier to drag an item when all items inside the section are collapsed. + +To upload user configuration file or template directly from url you can use the following syntax: + +your instance url?filename=your file name (e.g. https: //xxx/fgpv-author.html?filename=https: //myfolder/myfilename.json) +your instance url?template=your template name (e.g. https: //xxx/fgpv-author.html?template=mytemplate.json) +Note: if the application can't read the configuration file or if the template doesn't exist, it will open the default configuration or the first template inside the list on templates. + +Unanticipated behavior may occur if any interactions occur before data is fully loaded. Please allow the webpage to load completely before triggering any functions. If you still encounter bugs, please submit an issue in our GitHub repository. Someone from our development team will take care of it as soon as possible. +

+

+

+ +

+Header +

+

+The header toolbar allows you to: +

+Open the FGPA help window from the question mark button. +Create a new configuration file from scratch - only available when no templates are provided -. +Create a new configuration file from templates - only available when templates are provided -. +Templates are managed by the organization in charge of this FGPA instance. Contact the organization if you need more information or would like an update to the list of templates. +Upload an existing configuration file . +Save the configuration file once finished . +All files are saved in your Downloads folder. The application automatically increments the file name at each backup. +The file name you are working on is shown to the left of the save icon. However, if you save a file using an existing file name, it will be renamed by your operating system and may no longer match the file name you used (e.g. Test is shown as the used file name but renamed file name is Test(1)). + +When you create or upload a configuration file, loading time may vary based on the number of layers and basemaps being loaded. +

+

+Map - Extents and Levels of Detail +This section is used to define the tile schemas for your viewer application. For each tile schema, a spatial reference system must be defined in the Spatial Extents Sets section. Again, for each tile schema, levels of detail (LODs) must be defined in the Levels of Detail Sets section. For this, an ESRI tile cache layer must be used to retrieve the list of LODs from. Each LOD corresponds to a map at a given scale or resolution. Therefore each basemap linked to a tile schema must share the same spatial extent and LODs. + +For more information about how to setup the Extents and Levels of Detail section, see the help dropdown menu located below the section header. +

+

+Map - Basemaps +



+This section is used to add basemaps to your viewer application. To add a basemap, a tile schema appropriate for this basemap must already have been created. Once a basemap is added, the following information must be provided: +

+Name - it will be used to generate the basemap id - +Description +Alternate Text +Tile Schema ID (selected from existing tile schema) +At least one layer with ID, Layer Type and URL. +You must set the initial basemap that will appear when the viewer launches. To do so, select the basemap id (name-unique key from Initial Basemap ID) from the dropdown menu. + +For more information about how to setup the Basemaps section, see the help dropdown menu located below the section header. +

+

+Map - Layers +

+

+This section is used to add layers to your viewer application. Once a layer is added, the following information must be provided: +

+

+Layer Type +esriDynamic +esriFeature +esriImage +esriTile (an appropriate tile schema must exist) +ogcWms +Name - it will be used to generate the layer id - +URL +At least one layer entry must be added if the selected layer type is esriDynamic or ocgWms. The following properties must be set: +

+Index for esriDynamic +ID for ogcWMS +You can make a esriDynamic layer look like a esriFeature layer inside the legend with the Single entry collapse option. This option will render a single layered dynamic layer with a single layer without its root group. + +Optionally you can set URL values for the Metadata URL and Catalog URL options to display the relative information inside the viewer's metadata panel available in the Layer Controls section. + +For each layer and layer entries, the following Layer Controls options can be selected: + +Opacity (opacity) +Visibility (visibility) +Bounding box (boundingBox) +Query (query) +Snapshot (snapshot) +Metadata (metadata) +Boundary zoom (boundaryZoom) +Refresh (refresh) +Reload (reload) +Remove (remove) +Settings (settings) +Table (data) +Styles (styles) +

+For each layer and layer entries, the following State options can be selected: + +Opacity - Initial opacity value. +Visibility - Initial visibility setting. +Bounding box - Set initial display of the layer's bounding box. +Query - Enable querying of map feature and display information inside the viewer's details panel. Will only work with esriFeature and esriDynamic layer type. +Snapshot - Retrieve all feature data immediately on load. Will only work with esriFeature layer type. +Hovertips - Enable hover tips. Will only work with esriFeature layer type. +For every esriFeature layer and every esriDynamic layer entries a table is created automatically when the URL or entry Index option is set. The table section is optional and is populated from the service information by default. You can customize the following table properties: + +Title - Custom table title to apply. Default title is the layer name. +Description - Specifies additional information to be displayed in the table settings panel. +Maximize - Specifies if the table window is maximized on open. Default window size is split view. +Apply map - Specifies if table filters (from columns filters) are applied to the map (definition query). +Fields Customization - Specifies the array of table columns to display. Columns can be reinitialize with the Set Fields button at any time. The following properties can be customized: +Title - Custom column title. Default column title is set with column's alias name from the service. +Description - Specifies additional information to be displayed in the table settings panel. +Visible - Specifies if the field is visible by default. +Width - Column's width. If no width is set, best width will be calculated. +Sort - Sort ascending (asc) or descending (dsc). +Searchable - Specifies if column can be filtered or not. +Filters - For each column, the following filter properties can be customized: +Type - Specifies the filter type to use. If Type is not specified, data field type will be used. String filter can be string or selector. Other filters must be of the same type. +Value - Specifies the filter value. +Static - Specifies if filter value can be modified or not. +Important - Modifying the layer type of an existing layer is not a good practice. It is better to create a new layer and then delete the old one. + +For more information about how to setup Layers section, see the help dropdown menu located below the section header. +

+Map - Legend +This section is used to define legend for your viewer application. There are 2 types of legends to choose from: Autopopulate and Structured. The Autopopulate legend will read the layers as they appear in the Layers section in order to create a simple default legend. + +The Structured legend allows you to customize the display order of the layers, the layer grouping, descriptions and many other settings. + +For more information about legend customization options, see the dropdown help menu located below the section header. +

+Map - Components +This section is used to define map component: + +Mouse Coordinates +WKID must be set to display mouse coordinates on the map +Coordinates can be in degrees minutes seconds (DMS) and decimal degrees or meters depending on the projection (WKID) +North Arrow +Scale Bar +Overview Map +To change the overview map basemap, use Static Overview Map in the appropriate tile schema of Extents and Levels of Detail section +User Interface +General +The General section is for customizing the following information: + +Full screen - Used to set viewer application’s initial size to Full Screen (a.k.a. entire viewport). +On Viewer Failure +Failure Message - Custom message to use instead of the default failure message. +Failure Image Url - Custom image to use instead of the default failure image. +Legend +Is Reorderable Set to allow interactive reordering of layers inside the viewer application's legend. Structured legends ignore this option. +Allow Layers Import Set to allow interactive importing of additional layers inside the viewer application. +Legend Opening Options - Set to display the legend's initial view in small, medium and/or large display. +Table Opening Options - Set to display the table's initial view in small, medium and/or large display. +For table to open by default, a layer id must be selected. +Application Bar + +

+The Application Bar section allows you to add or remove the following tools: + +Side Menu +Geosearch +Basemap Selector +Layers Selector (legend) +Navigation Bar +The Navigation Bar allows you to add or remove the following navigation components: + +Your location (geolocator) - Display user position on the map +Initial extent (home) - Zoom to initial extent +Basemaps selector (basemap) - Open Basemap Selector - also available in the Application Bar - +Help (help) - Open help window - also available in the Side Menu - +Full screen (fullscreen) - Open viewer in fullscreen - also available in the Side Menu - +Geo search (geoSearch) - Open Geosearch tool - also available in the Application Bar - +Side menu (sidemenu) - Open the Side Menu - also available in the Application Bar - +Layers selector (layers) - Open the Layers Selector (legend) - also available in the Application Bar - +You can restrict navigation within the maximum extent by checking the Restrict Navigation checkbox. +

+Side Menu +The Side Menu allows you to configure how the side menu will appear. First you can set a title and a logo. If no title or logo are provided, the default title ("FGP R2 Viewer") and logo will be used. Then you can add as many group of tools as you want from the following options: + +Layers selector (layers) - Layers Selector (legend) - also available in the Application Bar - +Basemaps selector (basemap) - Basemap Selector - also available in the Application Bar - +Geo search (geoSearch) - Geosearch tool - also available in the Application Bar - +Map description (about) - Display additional information about the map +About can be of type string or file. When type file is selected, you must provide a folder name for your custom About markdown formatted files located inside the FGPV instance. +Important About of type file will not show up inside preview mode. +Full screen (fullscreen) - Open viewer in fullscreen - also available in the Navigation Bar - +Map export (export) - Export the map view as png image +Share the map (share) - Create a URL link to share the map +Touch mode (touch) - Enable touch mode for touch screen (to enhance layout spacing and button size) +Help (help) - Open Help window - also available in the Navigation Bar - +If you do not want to use the default Help, you must provide a folder name for your custom Help markdown formatted files located inside the FGPV instance. +Important Custom Help will not show up inside preview mode. +Languages selector (language) - Set interface language +Plugins section (plugins) - Container to receive custom plugins +Important plugins section will not show up inside preview mode. A piece of code must be added to the viewer application HTML page to activate the plugin(s). +Note: tools inside groups are not ordered as they appear inside the group list. They are ordered by selection order e.g. if you click on basemap then layers, inside the side menu basemap will appear first because it was the first item selected from the group. +

+Services +

+Export Map +Export Map allows you to configure what components will be displayed by default and/or be customizable on the map when exported as a png image. The Is present checkbox under each component allows you to add the components by default to the exported map. The User can remove it checkbox allows you to choose if you want the user to be able to remove the component from the exported map. + +The following components can be displayed or customized: +

+Title - a default value can be set - +Map +Legend +Map Elements (north arrow and scalebar) +Footnote - a default value can be set -. +Timestamp +

+Geosearch +The Geosearch section allows you to configure the geosearch tool capabilities. Geosearch allows you to find Canadian locations by different categories like cities, provinces, topographic entities and so on leveraging the Geonames API. In addition of this, Geosearch allows you to find locations by National Topographic System (NTS) name, forward sortation area (FSA) code and Latitude/Longitude values. The last 3 search types options can be enabled by checking the corresponding checkbox on. + +All URLs required by Geosearch are read-only values. If you encounter a problem whit these services, contact the person in charge of the FGPA application instance you are using and/or submit an issue to the FGPA developers team. +

+Service endpoints +The Service endpoints section lists all the services URLs the viewer application requires. These URLs are read-only values and therefor cannot be modified. If you encounter a problems with these services, contact contact the person in charge of the FGPV application instance you are using. +

+Version +The version section allows you to select the version number of the FGP viewer you would like to use. +

+
+ + < button + className="button" + onClick={() => { + console.log('modal closed '); + close(); + }} + > + +
+ )} +
, document.getElementById('popup-root') + ) + +} +const triggerSiblingExample = () => ( +
+ This is a sibling to the trigger which wont cause the Collapsible to open! +
+); -const onSubmit = ({ formData }) => alert("Data submitted: ", formData); +const changeColor = () => (this.setState({ [divClassName]: "red" })); + + + +function App4(props,onChange) { // added pre maps position nov 21 for extent display test + //tried to call onchange at first onclick but doesnt work dec 15 + //
map
+ // + // "title":"   Wildlife Management Zones", + // "description":"Delineates the administrative units used by the NB Department of Energy and Resource Development to manage populations and harvest of deer, moose, bear and furbearer species. Examples of furbearer species are beaver, muskrat, otter, mink, fox, and raccoon.", + // "published":"2022-06-09" + // let file = new XMLHttpRequest(); +// async open call https://dev.gcgeo.gc.ca/geonetwork/srv/eng/csw?request=GetCapabilities&service=CSW&acceptVersions=2.0.2&acceptFormats=application%252Fxml + +// works to query catalogue +// file.open('POST', 'https://dev.gcgeo.gc.ca/geonetwork/srv/eng/csw', true); +//file.setRequestHeader('Content-type', 'application/xml'); + +// file.open('POST', 'https://160.106.128.113', true); +// file.setRequestHeader('Content-type', 'application/xml'); + +//rcs call to tet rcsdev , not sure all i'd are in, add id at end and returns info +// file.open('GET', '//160.106.128.113/v2/doc/en/0', true); +// file.send(); + +// file.open('GET', 'https://internal.rcs.gcgeo.gc.ca', true); +// file.open('GET', 'https://internal.rcs.gcgeo.gc.ca/jstest', true); +//file.send('GET /v2/doc/EN'); + +//file.send('/v2/doc/en/0'); + +// query to get doain values for titles +// +// +// Title +// + +// + +// file.open('POST', 'https://dev.gcgeo.gc.ca/geonetwork/srv/eng/csw?request=GetCapabilities&service=CSW&acceptVersions=2.0.2&acceptFormats=application%252Fxml', true); +// file.send('https://dev.gcgeo.gc.ca/geonetwork/srv/eng/csw?request=GetCapabilities&service=CSW&acceptVersions=2.0.2&acceptFormats=application%252Fxml'); +//file.send(''); + +// works with GET +// file.open('GET', 'https://dev.gcgeo.gc.ca/geonetwork/srv/eng/csw?request=GetCapabilities&service=CSW&acceptVersions=2.0.2&acceptFormats=application%252Fxml', true); +// file.send(); + +// Getcapabilities +// file.send(''+ +//''+ +// ''+ +// ' 2.0.2'+ +// ''+ +// ''+ +// ' application/xml'+ +// ''+ +//''); +// + let file1 = new XMLHttpRequest(); + console.log('1--- get capability ready state change =', file .readyState);//0 empty,1 loading ,2or 4 done + + // file1.open('GET', 'https://dev.gcgeo.gc.ca/geonetwork/srv/eng/csw?request=GetCapabilities&service=CSW&acceptVersions=2.0.2&acceptFormats=application%252Fxml', true); + file1.open('GET', 'https://geocore-dev.api.geo.ca/geo?north=90&south=40&west=-180&east=180&keyword=emergency', true); + file1.send(); + file1.onreadystatechange = (r => { + console.log('get cat 9 bout to test'); + // if (file.readyState === XMLHttpRequest.DONE && file.status === 200) { + + console.log('2--- get capability ready state change =', file .readyState);//0 empty,1 loading ,2or 4 done + console.log('2--- get capability file status =', file1.status);//200okay + + if (file1.readyState === XMLHttpRequest.DONE && file1.status === 200) { + + //useMarkdown(language, self.sections, `${extenStringdir}/images/`, extenString + `-${language}.md`); + console.log(' 9 response from geose3rver is'); + console.log(Filter1.responseText); + let parser = new DOMParser(); + let xmlText = parser.parseFromString(file1.responseText, "text/xml"); + + let xmlDoc = ""; + // let p = new xjs.Parser(); + let p = new xjs.Parser({ mergeAttrs: true }); + + p.parseString(file1.responseText, function (err, result) { + if (err) { + console.log(' 9 There was an error processing this image: ' + err) + } + else { + + + console.log('9 result is'); + + // console.log(' 4 response xml evaluate',file.responseXML.evaluate); + console.log('9 response xml', file.responseXML); + // http://www.opengis.net/cat/csw/2.0.2' + let jsonDoc = file1.responseXML; + } + } //p string + )//if + + } + + } + ); + + + + console.log(" ---------------- in accordian "); + console.log(" accordian props =", props) + // const reference = useRef(null); + ReactDOM /* onclick="this.parentElement.style.display = 'none';" */ + .render( + Open Modal } + modal + nested + > + {close => ( +
+ Set Extent: zoom and pan to the extent then close the window + +
+ + + + + "title":"   Wildlife Management Zones", + "description":"Delineates the units used by the NB Department of Energy and Resource Development to manage populations and harvest of deer, moose, bear and furbearer species. Examples of furbearer species are beaver, muskrat, otter, mink, fox, and raccoon.", + "published":"2022-06-09" + "description":"Delineates the units used by the NB Department of Energy and Resource Development to manage populations and harvest of deer, moose, bear and furbearer species. Examples of furbearer species are beaver, muskrat, otter, mink, fox, and raccoon.", + "published":"2022-06-09" + "description":"Delineates the units used by the NB Department of Energy and Resource Development to manage populations and harvest of deer, moose, bear and furbearer species. Examples of furbearer species are beaver, muskrat, otter, mink, fox, and raccoon.", + "published":"2022-06-09" + "description":"Delineates the units used by the NB Department of Energy and Resource Development to manage populations and harvest of deer, moose, bear and furbearer species. Examples of furbearer species are beaver, muskrat, otter, mink, fox, and raccoon.", + "published":"2022-06-09" + "description":"Delineates the units used by the NB Department of Energy and Resource Development to manage populations and harvest of deer, moose, bear and furbearer species. Examples of furbearer species are beaver, muskrat, otter, mink, fox, and raccoon.", + "published":"2022-06-09" + "description":"Delineates the units used by the NB Department of Energy and Resource Development to manage populations and harvest of deer, moose, bear and furbearer species. Examples of furbearer species are beaver, muskrat, otter, mink, fox, and raccoon.", + "published":"2022-06-09" + + + + Delineates the administrative units used by the NB Department of Energy and Resource Development to manage populations and harvest of deer, moose, bear and furbearer species. Examples of furbearer species are beaver, muskrat, otter, mink, fox, and raccoon.", + "published":"2022-06-09" + "description":"Delineates the units used by the NB Department of Energy and Resource Development to manage populations and harvest of deer, moose, bear and furbearer species. Examples of furbearer species are beaver, muskrat, otter, mink, fox, and raccoon.", + "published":"2022-06-09" + "description":"Delineates the units used by the NB Department of Energy and Resource Development to manage populations and harvest of deer, moose, bear and furbearer species. Examples of furbearer species are beaver, muskrat, otter, mink, fox, and raccoon.", + "published":"2022-06-09" + "description":"Delineates the units used by the NB Department of Energy and Resource Development to manage populations and harvest of deer, moose, bear and furbearer species. Examples of furbearer species are beaver, muskrat, otter, mink, fox, and raccoon.", + "published":"2022-06-09" + "description":"Delineates the units used by the NB Department of Energy and Resource Development to manage populations and harvest of deer, moose, bear and furbearer species. Examples of furbearer species are beaver, muskrat, otter, mink, fox, and raccoon.", + "published":"2022-06-09" + "description":"Delineates the units used by the NB Department of Energy and Resource Development to manage populations and harvest of deer, moose, bear and furbearer species. Examples of furbearer species are beaver, muskrat, otter, mink, fox, and raccoon.", + "published":"2022-06-09" + "description":"Delineates the units used by the NB Department of Energy and Resource Development to manage populations and harvest of deer, moose, bear and furbearer species. Examples of furbearer species are beaver, muskrat, otter, mink, fox, and raccoon.", + "published":"2022-06-09" + "description":"Delineates the units used by the NB Department of Energy and Resource Development to manage populations and harvest of deer, moose, bear and furbearer species. Examples of furbearer species are beaver, muskrat, otter, mink, fox, and raccoon.", + "published":"2022-06-09" + "description":"Delineates the units used by the NB Department of Energy and Resource Development to manage populations and harvest of deer, moose, bear and furbearer species. Examples of furbearer species are beaver, muskrat, otter, mink, fox, and raccoon.", + "published":"2022-06-09" + "description":"Delineates the units used by the NB Department of Energy and Resource Development to manage populations and harvest of deer, moose, bear and furbearer species. Examples of furbearer species are beaver, muskrat, otter, mink, fox, and raccoon.", + "published":"2022-06-09" + "description":"Delineates the units used by the NB Department of Energy and Resource Development to manage populations and harvest of deer, moose, bear and furbearer species. Examples of furbearer species are beaver, muskrat, otter, mink, fox, and raccoon.", + "published":"2022-06-09" + "description":"Delineates the units used by the NB Department of Energy and Resource Development to manage populations and harvest of deer, moose, bear and furbearer species. Examples of furbearer species are beaver, muskrat, otter, mink, fox, and raccoon.", + "published":"2022-06-09" + "description":"Delineates the units used by the NB Department of Energy and Resource Development to manage populations and harvest of deer, moose, bear and furbearer species. Examples of furbearer species are beaver, muskrat, otter, mink, fox, and raccoon.", + "published":"2022-06-09" + "description":"Delineates the units used by the NB Department of Energy and Resource Development to manage populations and harvest of deer, moose, bear and furbearer species. Examples of furbearer species are beaver, muskrat, otter, mink, fox, and raccoon.", + "published":"2022-06-09" + "description":"Delineates the units used by the NB Department of Energy and Resource Development to manage populations and harvest of deer, moose, bear and furbearer species. Examples of furbearer species are beaver, muskrat, otter, mink, fox, and raccoon.", + "published":"2022-06-09" + "description":"Delineates the units used by the NB Department of Energy and Resource Development to manage populations and harvest of deer, moose, bear and furbearer species. Examples of furbearer species are beaver, muskrat, otter, mink, fox, and raccoon.", + "published":"2022-06-09" + "description":"Delineates the units used by the NB Department of Energy and Resource Development to manage populations and harvest of deer, moose, bear and furbearer species. Examples of furbearer species are beaver, muskrat, otter, mink, fox, and raccoon.", + "published":"2022-06-09" + "description":"Delineates the units used by the NB Department of Energy and Resource Development to manage populations and harvest of deer, moose, bear and furbearer species. Examples of furbearer species are beaver, muskrat, otter, mink, fox, and raccoon.", + "published":"2022-06-09" + "description":"Delineates the units used by the NB Department of Energy and Resource Development to manage populations and harvest of deer, moose, bear and furbearer species. Examples of furbearer species are beaver, muskrat, otter, mink, fox, and raccoon.", + "published":"2022-06-09" + "description":"Delineates the units used by the NB Department of Energy and Resource Development to manage populations and harvest of deer, moose, bear and furbearer species. Examples of furbearer species are beaver, muskrat, otter, mink, fox, and raccoon.", + "published":"2022-06-09" + "description":"Delineates the units used by the NB Department of Energy and Resource Development to manage populations and harvest of deer, moose, bear and furbearer species. Examples of furbearer species are beaver, muskrat, otter, mink, fox, and raccoon.", + "published":"2022-06-09" + "description":"Delineates the units used by the NB Department of Energy and Resource Development to manage populations and harvest of deer, moose, bear and furbearer species. Examples of furbearer species are beaver, muskrat, otter, mink, fox, and raccoon.", + "published":"2022-06-09" + "description":"Delineates the units used by the NB Department of Energy and Resource Development to manage populations and harvest of deer, moose, bear and furbearer species. Examples of furbearer species are beaver, muskrat, otter, mink, fox, and raccoon.", + "published":"2022-06-09" + "description":"Delineates the units used by the NB Department of Energy and Resource Development to manage populations and harvest of deer, moose, bear and furbearer species. Examples of furbearer species are beaver, muskrat, otter, mink, fox, and raccoon.", + "published":"2022-06-09" + "description":"Delineates the units used by the NB Department of Energy and Resource Development to manage populations and harvest of deer, moose, bear and furbearer species. Examples of furbearer species are beaver, muskrat, otter, mink, fox, and raccoon.", + "published":"2022-06-09" + "description":"Delineates the units used by the NB Department of Energy and Resource Development to manage populations and harvest of deer, moose, bear and furbearer species. Examples of furbearer species are beaver, muskrat, otter, mink, fox, and raccoon.", + "published":"2022-06-09" + "description":"Delineates the units used by the NB Department of Energy and Resource Development to manage populations and harvest of deer, moose, bear and furbearer species. Examples of furbearer species are beaver, muskrat, otter, mink, fox, and raccoon.", + "published":"2022-06-09" + + + + + Index for esriDynamic +ID for ogcWMS +You can make a esriDynamic layer look like a esriFeature layer inside the legend with the Single entry collapse option. This option will render a single layered dynamic layer with a single layer without its root group. + +Optionally you can set URL values for the Metadata URL and Catalog URL options to display the relative information inside the viewer's metadata panel available in the Layer Controls section. + +For each layer and layer entries, the following Layer Controls options can be selected: + + + Index for esriDynamic +ID for ogcWMS +You can make a esriDynamic layer look like a esriFeature layer inside the legend with the Single entry collapse option. This option will render a single layered dynamic layer with a single layer without its root group. + +Optionally you can set URL values for the Metadata URL and Catalog URL options to display the relative information inside the viewer's metadata panel available in the Layer Controls section. + +For each layer and layer entries, the following Layer Controls options can be selected: + + + Index for esriDynamic +ID for ogcWMS +You can make a esriDynamic layer look like a esriFeature layer inside the legend with the Single entry collapse option. This option will render a single layered dynamic layer with a single layer without its root group. + +Optionally you can set URL values for the Metadata URL and Catalog URL options to display the relative information inside the viewer's metadata panel available in the Layer Controls section. + +For each layer and layer entries, the following Layer Controls options can be selected: + + + + + + + Index for esriDynamic +ID for ogcWMS +You can make a esriDynamic layer look like a esriFeature layer inside the legend with the Single entry collapse option. This option will render a single layered dynamic layer with a single layer without its root group. + +Optionally you can set URL values for the Metadata URL and Catalog URL options to display the relative information inside the viewer's metadata panel available in the Layer Controls section. + +For each layer and layer entries, the following Layer Controls options can be selected: + + + + + Index for esriDynamic +ID for ogcWMS +You can make a esriDynamic layer look like a esriFeature layer inside the legend with the Single entry collapse option. This option will render a single layered dynamic layer with a single layer without its root group. + +Optionally you can set URL values for the Metadata URL and Catalog URL options to display the relative information inside the viewer's metadata panel available in the Layer Controls section. + +For each layer and layer entries, the following Layer Controls options can be selected: + + + < button + className="button" + onClick={() => { + console.log('modal closed '); + console.log('onChange=',onChange); + // this[onChange]({}, id); + // onChange({}, id); + + close(); + }} + > +
+
+ )} +
, document.getElementById('popup-root') + ) + +} +/* +useEffect(() => { + (async () => { + try { + const books = await fetchBooks(); + setBooks(books); + } catch (err) { + console.log('Error occured when fetching books'); + } + })(); +}, []); +*/ + + function FetchData1(items2) { +//const fetchData1 = (items2) => { + + console.log('FetchData1'); + + + // const [apiResponse, setApi] = React.useState([{}]); + console.log('FetchData2'); + + + const getApiData = async () => { + console.log('getapidata1'); + // let response = await fetch('https://geocore-dev.api.geo.ca/geo?north=90&south=40&west=-180&east=180&keyword=emergency'); + const response = await fetch('https://geocore-dev.api.geo.ca/geo?north=90&south=40&west=-180&east=180&keyword=emergency'); + + console.log('response 1'); + // console.log('response 1', response); + + response = response.json(); + //const apiResponse = response.json(); + + console.log('response 2'); + // setApi(apiResponse.json()); + // setApi(response.json()); + // setApi(apiResponse.json()); + + let items2 = response; + } + // file1.open('GET', 'https://dev.gcgeo.gc.ca/geonetwork/srv/eng/csw?request=GetCapabilities&service=CSW&acceptVersions=2.0.2&acceptFormats=application%252Fxml', true); + + /* let file1 = new XMLHttpRequest(); + file1.open('GET', 'https://geocore-dev.api.geo.ca/geo?north=90&south=40&west=-180&east=180&keyword=emergency', true); + file1.send(); + file1.onreadystatechange = (r => { + console.log('get cat 9 bout to test'); + // if (file.readyState === XMLHttpRequest.DONE && file.status === 200) { + + console.log('2--- get capability ready state change =', file.readyState);//0 empty,1 loading ,2or 4 done + console.log('2--- get capability file status =', file1.status);//200okay + + if (file1.readyState === XMLHttpRequest.DONE && file1.status === 200) { + + //useMarkdown(language, self.sections, `${extenStringdir}/images/`, extenString + `-${language}.md`); + console.log(' 9 response from geose3rver is'); + // console.log('9 response xml', file.responseXML); + console.log('9 response from geose3rver is', file1.responseText); + + let parser = new DOMParser(); + let xmlText = parser.parseFromString(file1.responseText, "text/xml"); + + let xmlDoc = ""; + // let p = new xjs.Parser(); + let p = new xjs.Parser({ mergeAttrs: true }); + + p.parseString(file1.responseText, function (err, result) { + if (err) { + console.log(' 9 There was an error processing this image: ' + err) + } + else { + + + console.log('9 result is'); + + // console.log(' 4 response xml evaluate',file.responseXML.evaluate); + console.log('9 response xml', file.responseXML); + // http://www.opengis.net/cat/csw/2.0.2' + let jsonDoc = file1.responseXML; + } + } //p string + )//if + + } + + }*/ + // console.log('FetchData2', response); + + /* + useEffect(() => { + (async () => { + try { + const t= await fetch('https://geocore-dev.api.geo.ca/geo?north=90&south=40&west=-180&east=180&keyword=emergency'); + + setApi(response.json()); + } catch (err) { + console.log('Error occured when fetching books'); + } + })(); + }, []); + +*/ + console.log('FetchData3'); + + /* useEffect(() => { console.log('FetchData4'); + getApiData(); + }); + */ + + console.log('FetchData5'); + return { response }; + // console.log('FetchData2', response); + + // let t = apiResponse; + // console.log('FetchData2', response); + + // return (response); + // ); //state change + + +}; + + + + function App5() { // added pre maps position nov 21 for extent display test + //tried to call onchange at first onclick but doesnt work dec 15 + //const [apiResponse, setApi] = useState(["rr"]); + console.log('1--- get capability ready state change =');//0 empty,1 loading ,2or 4 done + + // const [Name, setName] = useState('Mary'); + + + console.log('2--- get capability ready state change =');//0 empty,1 loading ,2or 4 done + // setName("angela"); + // const [apiResponse, setApi] = useState([{ee:"ee"}]); + let items2 = []; + // const apiResponse = FetchData1(items2); + + // let file1 = new XMLHttpRequest(); + + + /* + useEffect(() => { + (async () => { + try { + const t = await fetch('https://geocore-dev.api.geo.ca/geo?north=90&south=40&west=-180&east=180&keyword=emergency'); + + setApi(response.json()); + } catch (err) { + console.log('Error occured when fetching books'); + } + }) + }); + */ + console.log('2--- get capability ready state change =');//0 empty,1 loading ,2or 4 done + + const items1 = FetchData1(items2); + console.log('2--- app5 after fetchdta1 =');//0 empty,1 loading ,2or 4 done + + //items1 = apiResponse; + // fetchData(it; + console.log('response 3',items1); + + //const items1 = [{ label: "One", value: 1, checked: true }, + //{ label: "Two", value: 2, checked: true }, + //{ label: "Three", value: 3, checked: true } + // ]; + + //const items1 = file1.responseText; + + + ReactDOM.render( + + + Open Modal } + modal + nested + > + {close => ( +
+ Select record name to select corresponding UUID + + +
+ this.setState({ checkedItems })} + onCancel={ () => this.setState({ checkedItems: [] })} + /> + + +
+
+ + )} +
, document.getElementById('popup-root') + ) + +} + +function App3(onChange,id) { // added pre maps position nov 21 for extent display test + //tried to call onchange at first onclick but doesnt work dec 15 + ReactDOM.render( + Open Modal } + modal + nested + > + {close => ( +
+ Select record name to select corresponding UUID +
map
+
+ +

+              < button
+            className="button"
+            onClick={() => {
+              console.log('modal closed ');
+               console.log('onChange=',onChange);
+        //      this[onChange]({}, id);
+         //         onChange({}, id);
+        
+            //  close();
+            }}
+          >
+        
+
+ )} +
, document.getElementById('popup-root') + ) + +} +const onSubmit = ({ formData }) => { + + formSubmitted = true; + + console.log('in form submit-------------------------------------------------plugin=', plugin); + console.log('in form submit-------------------------------------------------formdata=', formData); + + //modified for navSelected may 2 + //commented out sept 26 reemoved navselected to do a deploy + + //added jan 15 + // if (formRef.current.validateForm()) { + // alert('in submit Form is valid'); + //} else alert('in Sbumit Form is NOT valid'); + alert('Form is valid'); + + //const submitbutton = document.getElementById("submit").style.background = '#000000' + document.getElementById("submit").style.backgroundColor = 'green'; + + // if ((plugin === "map")||(navSelected = "map")) { + if ((plugin === "map")) { + + const map1 = document.getElementById("mapTwo") + let temp1 = document.getElementById("mapTwo").innerHTML; + if (temp1 !== "") + { + console.log(' inside delete div matp2'); + temp1 = document.getElementById("mapTwo"); + temp1.parentNode.removeChild(temp1); + } + + console.log('map div=', Geoviewmapdiv); + map1.replaceWith(Geoviewmapdiv); // rect error 31 + console.log('before calling map init'); + + + //commneted out jan 8 + // window.cgpv.init(); //commented feb 3 + console.log('submit formdata=', formData); + console.log("formdata2 to write=", formData); + + } // end map + + console.log("in save plugin enable=", plugin, formData.enable); + + //commented out sept 26 reemoved navselected to do a deploy + //if (((plugin === "thematicSlider")||(navSelected = "thematicSlider")) && (formData.enable === true)) + + if ((plugin === "thematicSlider") && (formData.enable === true)) + { + map["thematicSlider"] = { "thematicSlider": formData }; + console.log("pluegin=thematicslider submit,mfordata=", formData); + } + else if ((plugin === "rangeSlider") && (formData.enable === true)) { + map["rangeSlider"] = { "rangeSlider": formData }; + console.log("pluegin=rangeslider submit,mfordata=", formData); + } + else if ((plugin === "chart") && (formData.enable === true)) + { + map["chart"] = { "chart": formData }; + console.log("pluegin=drawin submit,mfordata=", formData); + } + else if ((plugin === "Draw Toolbar") && (formData.enable === true)) //jan 23 just commented out to test + { + map["draw"] = { "draw": formData }; + console.log("pluegin=drawin submit,mfordata=", formData); + } + else if ((plugin === "Swiper") && (formData.enable === true)) { + + map["swiper"] = { "swiper": formData }; + console.log("pluegin=swiper formdata=", swiper); + } + else if (plugin === "map") { + map = formData; + console.log("------ map formdata=", map); + + let mapLayersNameString = ""; + if (typeof formData.map.listOfGeoviewLayerConfig !== "undefined" ) { + console.log(" ------- geoview layer name,type of", typeof formData.map.listOfGeoviewLayerConfig[0],formData.map.listOfGeoviewLayerConfig[0].layerName); + if (typeof formData.map.listOfGeoviewLayerConfig[0].listOfLayerEntryConfig !== "undefined") { + + for (let i = 0; i < formData.map.listOfGeoviewLayerConfig[0].listOfLayerEntryConfig.length; i++) { + console.log("in layer loop"); + console.log("in layer loop layername=", formData.map.listOfGeoviewLayerConfig[0].listOfLayerEntryConfig[i]); + // console.log("in layer loop layername=",formData.map.listOfGeoviewLayerConfig[0].listOfLayerEntryConfig[i].layerName.en); + + console.log("in layer loop layername=", formData.map.listOfGeoviewLayerConfig[0].listOfLayerEntryConfig[i].layerId); + console.log("in layer loop maplayeranameString=", mapLayersNameString); + + //works + mapLayersName.push(formData.map.listOfGeoviewLayerConfig[0].listOfLayerEntryConfig[i].layerId); + + console.log("in layer loop maplayeraname=", mapLayersName); + + console.log("inloop json strinify =", JSON.stringify(formData.map.listOfGeoviewLayerConfig[0].listOfLayerEntryConfig[i].layerName.en)); + + } //for + } //if + }//if + console.log("after layer loop maplayersname=", mapLayersName); + //feb21 commneted out below + // mapLayersName = ({ "enum": mapLayersName }); + console.log("after loop 2maplayeraname=", mapLayersName); + + + } //if + + //console.log("in save formdata,draw=",formData.draw); + + console.log("in save formdata,map=", map, "draw=", draw); + let mapData = JSON.stringify(map); + //commented out oct 18 ----- + //let plugins2 = mapData; + console.log("in save formdata,mapData=", mapData); + //commented out oct 18 ----- + //let plugins = JSON.parse(plugins2); + //mar 17 new + map = map["map"]; + + //console.log("map[map]=", map["map"]); + + blob = new Blob([JSON.stringify({ map})], { type: "text/plain;charset=utf-8" }); // mar 15 + + //mar 17 commented out + // blob = new Blob([JSON.stringify({plugins})], { type: "text/plain;charset=utf-8" }); + + console.log("blob=",blob); + +}; //end submit + + function SchemaForm() { + + function ErrorListTemplate(props) { + const { errors } = props; + return ( +
+

Custom error list

+
    + {errors.map(error => ( +
  • + {error.stack} +
  • + ))} +
+
+ ); + } + // if (formRef.current.validateForm()) { + // alert('Form is valid'); + // } + // else { alert('Form is NOTTTT valid'); } + + // doesnt display rest of form only this field until other part of for, + + //const CustomTitleField = (props) => { + // const { id, required, name } = props; + // return (
{name}
); + //}; + + // console.log(" 00000000000000000000 in custom field", name); + // const legend = required ? title + '*' : title; + // console.log(" 0000000000000000000000000000000000000000000000 in custom field",legend); + + //returns markrdown below + //return
{title}
; + + //return
hi hhhhhhhhhhhhhhhhhhhhhhh {title}
; + const CustomDescriptionField = ({ id, description }) => { + // console.log(" 0000000000000000000000000000000000000000000000 in custom field", description); + return
Hiiii {description}
; + }; + + //works changes every descriptpnfield for every section, oct 16, active now + function DescriptionFieldTemplate(props) { //console.log("------Description ---------------------props") + const { description, id } = props; + // console.log("------Description ---------------------props,id of element=", id); + // return ( + return (
+ + {description} +
+ //
+ ); + } + //works changes every title field for every section, oct 16, active now + function TitleFieldTemplate(props) { //console.log("-----Title----------------------props =",props) + const { id, required, title } = props; + return ( +
+ {title} + {required && } +
+ ); + } + //following works but dsplays label in duplicate,maybe becasue is an obeject ?,individual field + // dislays the description before the field or widget to enteradn not in duplicate but + // + + function CustomFieldTemplate(props) { + // + // let image1 = ""; + if (props.label === "Range Slider") { + // props.description = "The Range/Time Slider offers a dynamic way to visualize time series data as well as non-time series data by “range”. It is also called Time Slider when used for time series visualization. The basic slider is a horizontal bar with anchors that can be moved to establish the range of the values to be used. To visualize data as a dynamic range, any layer that contains a date or numeric fields can be used."; + // image1 = "https://github.com/Pewillia/GeoView-Plugins-Config/blob/30-save-formdata-json/images/timeslider.png?raw=true"; + } + const { id, classNames, label, help, errors, children } = props; + console.log("---------------label is =", label); + + let desc = ""; + + // console.log("---------------custom field template ptops is =", props); + if (label === "Chart") { + image1 = "https://github.com/Pewillia/GeoView-Plugins-Config/blob/30-save-formdata-json/images//Chart.png?raw=true"; + } + else if (label === "Swiper") { + image1 = "https://github.com/Pewillia/GeoView-Plugins-Config/blob/30-save-formdata-json/images/swiper.png?raw=true"; + } + else if (label === "Range Slider") { + desc = "The Range/Time Slider offers a dynamic way to visualize time series data as well as non-time series data by “range”. It is also called Time Slider when used for time series visualization. The basic slider is a horizontal bar with anchors that can be moved to establish the range of the values to be used. To visualize data as a dynamic range, any layer that contains a date or numeric fields can be used."; + + // description = "The Range/Time Slider offers a dynamic way to visualize time series data as well as non-time series data by “range”. It is also called Time Slider when used for time series visualization. The basic slider is a horizontal bar with anchors that can be moved to establish the range of the values to be used. To visualize data as a dynamic range, any layer that contains a date or numeric fields can be used."; + image1 = "https://github.com/Pewillia/GeoView-Plugins-Config/blob/30-save-formdata-json/images/timeslider.png?raw=true"; + } + else if (label === "Thematic Slider") { + image1 = "https://github.com/Pewillia/GeoView-Plugins-Config/blob/30-save-formdata-json/images/thematicslider.png?raw=true"; + } + else if (label === "Draw") { + console.log("-------------------------------------1111111------------------inside tool bar image"); + image1 = "https://github.com/Pewillia/GeoView-Plugins-Config/blob/30-save-formdata-json/images/drawtoolbar.png?raw=true"; + } + + // let desc = "The Range/Time Slider offers a dynamic way to visualize time series data as well as non-time series data by “range”. It is also called Time Slider when used for time series visualization. The basic slider is a horizontal bar with anchors that can be moved to establish the range of the values to be used. To visualize data as a dynamic range, any layer that contains a date or numeric fields can be used."; + + // console.log("just set label=",label,image1); + return ( + //
+ // swiper https://doc.arcgis.com/en/web-appbuilder/latest/create-apps/GUID-6EB589A5-7637-459C-A489-F60FB2AAB181-web.png + + // note if take ou description below and desciption is in uischema the descprition doesnt display twice,otherweise dislays twice + //
+ +
+ + + + + + + + + + {children} + {errors} + {help} + +
+ ); + } + + function GeocoreFieldTemplate(props) { + console.log('in GeocoreFieldTemplate'); + + const [data, setData] = useState([{ ee: "ee" }]); + const [category, setCategory] = useState("economy" ); + + let response = []; + + const handleSelectGeocoreChange = (event) => { + + // mar 14 set toaded to be able to submit + //fileLoaded = false; + //document.getElementById("submit").style.backgroundColor = "rgb(63,81,181)"; + // let filename = ""; + + // setValue(event.target.value); + // setValue(event.target.value); + console.log("geocorefiled templse category=", event.target.value); + setCategory( event.target.value); + + // console.log("MMMmap template event=", event.target.value); + // geocoreTheme = event.target.value; + if (((desiredSchema === "map"))) { + console.log("calling draw map"); //PopUps(); + + // extentSet = true; // just added here dec 5, was being execute mltple times ? + + /** + * initialize the map after it has been loaded + */ + // onChange => { + // console.log("onChange"); + // }; + // onChange = changeExtent(formData); + /** + * translations object to inject to the viewer translations + */ + + // below comented out dec 4 for test + // setTimeout(() => { updateForm(formData); forceUpdate;console.log("in extentfield template seting timeout, formdata=",formData); }, 10000);//was 1000} + + // console.log("calling cgpv.init"); //PopUps(); + // App4(onChange, id); // commneted nov 21 + + // fetchData(items1); + // App5(onChange, id); // commneted nov 21\ console.log("-------------In extent Field template --------------------", props); + console.log("-------------In handleSelectGeocoreChange --data=",data); + + //comented ou below jun 14 + + + // formData[0] = Math.round(mapExtent[0]); + // formData[1] = Math.round(mapExtent[1]); + // formData[2] = Math.round(mapExtent[2]); //changed this nov 24 + // formData[3] = Math.round(mapExtent[3]); + + //----------------------------------------------------------------------------------------------- + // this is hte one that works 00000000000000000000000000000000000000000 + // onChange({}, id); // invokes on global change form coodrindate and array index are stored in fields + + // onChange(({ formData }), id); // invokes on global change form coodrindate and array index are stored in fields + // onChange(changeExtent({formData},id)); + + + + + // formContext[0] = Math.round(mapExtent[0]); + // formContext[1] = Math.round(mapExtent[1]); + //// formContext[2] = Math.round(mapExtent[2]); //changed this nov 24 + // formContext[3] = Math.round(mapExtent[3]); + // console.log("in ,map extent 2 formdata=", formData); + // updateForm(formData); console.log("in extent set timeout",); + // updateForm(formData); // caes form fields to be set to 0 or reiitialized + // forceUpdate; + + // }, 5000); + // App55(data); + window.setTimeout(() => { console.log("----- in timeoute"); App55(); window.openpopup(); }, 35000); // was 45000 + // App55(data); // commneted nov 21 + + + // console.log("calling popip"); + + // console.log("calling popip"); + + // window.openpopup(); // commneted nov 21 + + // props.onChange(changeExtent); + // props.onChange(updateForm(formData)); + } else { + alert("cant draw map unless map selected, fields changed on map form or file loaded"); + } + // App55(data); // commneted nov 21 + // console.log("calling popip"); + + // console.log("calling popip"); + + // window.openpopup(); + /* + if (event.target.value === "Administartion") { + geocoreTtheme = "Administartion"; + } + else if (event.target.value === "Economy") { + geocoreTheme = "Economy"; + + } + else if (event.target.value === "Emergency") { + geocoreTheme = "Emergency"; + } + else if (event.target.value === "Environment") { + geocorTheme= "Environment"; + } + else if (event.target.value === "Imagery") { + geocoreTheme = "Imagery"; + } + else if (event.target.value === "Infrastructure") { + geocoreTtheme = "Infrastructurey"; + } + else if (event.target.value === "Legal") { + geocoreTtheme = "Legal"; + } + else if (event.target.value === "Science") { + geocoreTheme = "Science"; + } + else if (event.target.value === "Society") { + geocoreTtheme = "Society"; + }; + */ + }; + // }; + + + useEffect(async () => { + // response = await fetch('https://geocore-dev.api.geo.ca/geo?north=90&south=40&west=-180&east=180&keyword=emergency'); + // response = await fetch('https://geocore-dev.api.geo.ca/geo?north=90&south=40&west=-180&east=180&keyword=emergency') + // response = await fetch('https://geocore-dev.api.geo.ca/geo?north=90&south=40&west=-180&east=180&keyword=emergency&max=100000'); + // response = await fetch('https://geocore-dev.api.geo.ca/geo?north=90&south=40&west=-180&east=180&keyword="+category+"economy&max=100000') + let url = "https://geocore-dev.api.geo.ca/geo?north=90&south=40&west=-180&east=180&keyword=" + category + "&max=100000"; + console.log("--- user effect url=", url); + console.log("--- user effect category=", category); + // response = await fetch("https://geocore-dev.api.geo.ca/geo?north=90&south=40&west=-180&east=180&keyword="+{ category } +"&max=100000") + // response = await fetch('https://geocore-dev.api.geo.ca/geo?north=90&south=40&west=-180&east=180&keyword=economy&max=100000') + response = await fetch("https://geocore-dev.api.geo.ca/geo?north=90&south=40&west=-180&east=180&keyword=" + category + "&max=100000") + .then((response) => response.json()) + .then(console.log("---------------------------calling app 55 in effect")) + // .then( App55(data)); // added june 14 + + //console.log('response 1'); + console.log('use effect response 1', response); + console.log('use effect response 1 json=', response.Items); + + // let response2 = response.json(); + setData(response); + + Data = response; + // console.log('use effect response 1 response=',response.Promise.status); + // console.log('use effect response 1 response items=',response2); + // console.log('response 1', response); + + // response = response.json(); + //const apiResponse = response.json(); + // console.log ( "use effect ----data items=",data.Items) + + //june 25 added response to use effec to to see if not called all the time + // },[data]); + // }); + + // called onky once if use below, changedjune 13 + }, [category]); + + // + function FetchData(items2) { +//const fetchData1 = (items2) => { + + console.log('FetchData1'); + + + // const [apiResponse, setApi] = React.useState([{}]); + console.log('FetchData2'); + + // const getApiData = async () => { + + async function getApiData (response) { + console.log('getapidata1'); + // let response = await fetch('https://geocore-dev.api.geo.ca/geo?north=90&south=40&west=-180&east=180&keyword=emergency'); + //await fetch('https://geocore-dev.api.geo.ca/geo?north=90&south=40&west=-180&east=180&keyword=emergency'); + response = await fetch('https://geocore-dev.api.geo.ca/geo?north=90&south=40&west=-180&east=180&keyword=emergency'); + + console.log('response 1'); + // console.log('response 1', response); + + response = response.json(); + setData(response.json()); + console.log('response 1'); + // console.log('response 1', response); + + // response = response.json(); + //const apiResponse = response.json(); + console.log ( "----data items=",data.Items) + console.log('------ ----------------------response 2', response); + console.log ( "----data items=",data.Items) + + // setApi(apiResponse.json()); + // setApi(response.json()); + // setApi(apiResponse.json()); + + items2 = response; + } + // file1.open('GET', 'https://dev.gcgeo.gc.ca/geonetwork/srv/eng/csw?request=GetCapabilities&service=CSW&acceptVersions=2.0.2&acceptFormats=application%252Fxml', true); + + /* let file1 = new XMLHttpRequest(); + file1.open('GET', 'https://geocore-dev.api.geo.ca/geo?north=90&south=40&west=-180&east=180&keyword=emergency', true); + file1.send(); + file1.onreadystatechange = (r => { + console.log('get cat 9 bout to test'); + // if (file.readyState === XMLHttpRequest.DONE && file.status === 200) { + + console.log('2--- get capability ready state change =', file.readyState);//0 empty,1 loading ,2or 4 done + console.log('2--- get capability file status =', file1.status);//200okay + + if (file1.readyState === XMLHttpRequest.DONE && file1.status === 200) { + + //useMarkdown(language, self.sections, `${extenStringdir}/images/`, extenString + `-${language}.md`); + console.log(' 9 response from geose3rver is'); + // console.log('9 response xml', file.responseXML); + console.log('9 response from geose3rver is', file1.responseText); + + let parser = new DOMParser(); + let xmlText = parser.parseFromString(file1.responseText, "text/xml"); + + let xmlDoc = ""; + // let p = new xjs.Parser(); + let p = new xjs.Parser({ mergeAttrs: true }); + + p.parseString(file1.responseText, function (err, result) { + if (err) { + console.log(' 9 There was an error processing this image: ' + err) + } + else { + + + console.log('9 result is'); + + // console.log(' 4 response xml evaluate',file.responseXML.evaluate); + console.log('9 response xml', file.responseXML); + // http://www.opengis.net/cat/csw/2.0.2' + let jsonDoc = file1.responseXML; + } + } //p string + )//if + + } + + }*/ + console.log('FetchData3'); + let response1 = []; + getApiData(response1); + console.log('FetchData4'); + /* + useEffect(() => { + (async () => { + try { + const t= await fetch('https://geocore-dev.api.geo.ca/geo?north=90&south=40&west=-180&east=180&keyword=emergency'); + + setApi(response.json()); + } catch (err) { + console.log('Error occured when fetching books'); + } + })(); + }); + */ + + + // useEffect(() => { + // getApiData(); + //}); + // return { response }; + console.log('FetchData6'); + + // let t = apiResponse; + // console.log('FetchData7 response =',response); + + return (response1); + // ); //state change + + +}; + + function App55() { // added pre maps position nov 21 for extent display test + //tried to call onchange at first onclick but doesnt work dec 15 + // const [data, setData] = useState([{ee:"ee"}]); + + // console.log('App55 data=',data); + console.log('App55 data=',Data); + + // async function getApiData (data) { + + // console.log('getapidata1'); + // let response = await fetch('https://geocore-dev.api.geo.ca/geo?north=90&south=40&west=-180&east=180&keyword=emergency'); + //await fetch('https://geocore-dev.api.geo.ca/geo?north=90&south=40&west=-180&east=180&keyword=emergency'); + + // below works + // response = await fetch('https://geocore-dev.api.geo.ca/geo?north=90&south=40&west=-180&east=180&keyword=emergency'); + // response = await fetch('https://geocore-dev.api.geo.ca/geo?north=90&south=40&west=-180&east=180&keyword=emergency&max=100000'); + // response = await fetch('https://geocore-dev.api.geo.ca/geo?north=90&south=40&west=-180&east=180&keyword=emergency&max=100000'); + + // console.log('response 1'); + // console.log('response 1', response); + + // console.log('response 1'); + // console.log('response 1', response); + + // response = response.json(); + //const apiResponse = response.json(); + + // response = response.json(); + // setData(response); + // console.log('response 1'); + // console.log('response 1', response); + + // response = response.json(); + //const apiResponse = response.json(); + // console.log ( "----data=",data) + // console.log('------ ----------------------response 2', response); + // console.log("----data items=", data.json()); + + // console.log ( "----data items=",data.Items) + // response=data.json() + // console.log('response json=', response); + + //added june 5 --------------------------------------------- + // updateForm(formData); + + // setApi(apiResponse.json()); + // setApi(response.json()); + // setApi(apiResponse.json()); + + // items2 = response; + // } + // file1.open('GET', 'https://dev.gcgeo.gc.ca/geonetwork/srv/eng/csw?request=GetCapabilities&service=CSW&acceptVersions=2.0.2&acceptFormats=application%252Fxml', true); + + /* let file1 = new XMLHttpRequest(); + file1.open('GET', 'https://geocore-dev.api.geo.ca/geo?north=90&south=40&west=-180&east=180&keyword=emergency', true); + file1.send(); + file1.onreadystatechange = (r => { + console.log('get cat 9 bout to test'); + // if (file.readyState === XMLHttpRequest.DONE && file.status === 200) { + + console.log('2--- get capability ready state change =', file.readyState);//0 empty,1 loading ,2or 4 done + console.log('2--- get capability file status =', file1.status);//200okay + + if (file1.readyState === XMLHttpRequest.DONE && file1.status === 200) { + + //useMarkdown(language, self.sections, `${extenStringdir}/images/`, extenString + `-${language}.md`); + console.log(' 9 response from geose3rver is'); + // console.log('9 response xml', file.responseXML); + console.log('9 response from geose3rver is', file1.responseText); + + let parser = new DOMParser(); + let xmlText = parser.parseFromString(file1.responseText, "text/xml"); + + let xmlDoc = ""; + // let p = new xjs.Parser(); + let p = new xjs.Parser({ mergeAttrs: true }); + + p.parseString(file1.responseText, function (err, result) { + if (err) { + console.log(' 9 There was an error processing this image: ' + err) + } + else { + + + console.log('9 result is'); + + // console.log(' 4 response xml evaluate',file.responseXML.evaluate); + console.log('9 response xml', file.responseXML); + // http://www.opengis.net/cat/csw/2.0.2' + let jsonDoc = file1.responseXML; + } + } //p string + )//if + + } + + }*/ + console.log('FetchData3'); + let response1 = []; + //-------------------------------------------------------------- + //getApiData(response1); + + console.log('1--- get capability ready state change =');//0 empty,1 loading ,2or 4 done + + console.log('2--- get capability ready state change =');//0 empty,1 loading ,2or 4 done + + // const [Name, setName] = useState('Mary'); + + // setName("tina"); + console.log('3--- get capability ready state change =');//0 empty,1 loading ,2or 4 done + // setName("angela"); + // const [apiResponse, setApi] = useState([{ee:"ee"}]); + + let items2 = []; + // const apiResponse = FetchData1(items2); + + // let file1 = new XMLHttpRequest(); + + + + console.log('2--- get capability ready state change =');//0 empty,1 loading ,2or 4 done + + // const items1 = FetchData1(items2); + + //commented out june 5 test + // const items1 = FetchData(items2); + + //items1 = apiResponse; + // fetchData(it; + // console.log('response 3',items1); + + //const items1 = [{ label: "One", value: 1, checked: true }, + //{ label: "Two", value: 2, checked: true }, + //{ label: "Three", value: 3, checked: true } + // ]; + + //const items1 = file1.responseText; + + // setTimeout(() => { console.log("in range slider set timeout",); }, 5000);//was 1000} + + console.log("app55--------------------------------------------data items=", Data.Items) + + // console.log("----data items json=", data.json); + // console.log("----data items json=", data.json); + // console.log("----data items json=", data.json); + // console.log("----data items json=", data.json); + // console.log("----data items=", data.Items) + + function renameKey ( obj, oldKey, newKey ) { + obj[newKey] = obj[oldKey]; + delete obj[oldKey]; +}/* + const items3 = JSON.parse(data.Items); + items2.forEach(obj => renameKey(obj, "title", "value") ); + const updatedJson = JSON.stringify(arr); + */ + + + // response = data.json(); + // console.log('response json=', response); + // height was 300 just changed june 11 + // height: 300 + // rowHeight={200} //works get most all except a few entires but not sure search works + + // data.Items.map(function (item, index) { + // return (item.title) + + ReactDOM.render( + + + Open Modal } + modal + nested + > + {close => ( +
+ Select record name from {category} + + +
+ " + item.description + ""+item.title+""+""+ +//+ item.description + item.published+" ") + })} + onOk={(checkedItems) => this.setState({ checkedItems })} + onCancel={() => this.setState({ checkedItems: [] })} + // LabelKey={Item.title} + // added below to se description + // rowHeight={200} + + + + /> + + +
+
+ + )} +
, document.getElementById('popup-root') + ) + +} + // console.log("-------------In extent Field template --------------------",props); + // + // + // function onChange(formData) { Console.log("in onchange local -------------------"); + //// return (event) => { + // this.setState({ + // [formData]: parseFloat(event.target.value) + // }, () => this.props.onChange(this.state)); + // }; + // }; + + //function changeExtent(formDatamm,id) { + //function changeExtent(props) { + // const { icon, iconType, ...btnProps } = props; + // {icon} + // console.log('----------------------in extent 11 changge formdata =',formData); + // formData[0] = Math.round(mapExtent[0]); + // formData[1] = Math.round(mapExtent[1]); + // formData[2] = Math.round(mapExtent[2]); //changed this nov 24 + // formData[3] = Math.round(mapExtent[3]); + + // updateForm(formData); + // } + //
+ + // commneted out dev 5 for test beacuse etentSet is set turue sometime when it shouldnt + // extentSet = true; + + // setTimeout(() => { updateForm(formData); console.log("in extent set timeout",); }, 1000); //was 1000} + console.log("---------11 hook called in geocore filed template------labeldescription is ="); + //const [Name, setName] = useState('Mary'); + + const { id, classNames, label, help, description, errors, children, onChange } = props; + console.log("---------geocore filed template------labeldescription is =", label, description); + //console.log("---------geocore filed template------onchange is =", onChange); + // let mapExtent = []; + //setName('betty'); + //added dec 4 test of update + // setTimeout(() => { updateForm(formData); forceUpdate; console.log("in extentfield templage setring timeout",); }, 10000);//was 1000} + + // onChange={(event) => props.onChange(event.target.value)} + + /* + + */ + + /* } + +
+ ); + } + + const widgets = { CollapsibleArrayWidget }; + + function ObjectFieldTemplate(props) { + const { + description, + title, + properties, + required, + disabled, + readonly, + uiSchema, + idSchema, + schema, + formData, + onAddClick, + registry, + } = props; + const uiOptions = getUiOptions(uiSchema); + const TitleFieldTemplate = getTemplate('TitleFieldTemplate', registry, uiOptions); + const DescriptionFieldTemplate = getTemplate( + 'DescriptionFieldTemplate', + registry, + uiOptions + ); + // Button templates are not overridden in the uiSchema + const { + ButtonTemplates: { AddButton }, + } = registry.templates; + //console.log(uiSchema) + //console.log("propiedades" ,properties) + return ( + <> + {title && ( + + )} + {description && ( + + )} + + {properties.map((element, index) => + // Remove the if the inner element is hidden as the + // itself would otherwise still take up space. + element.hidden ? ( + element.content + ) : ( + + {element.content} + + ) + )} + {canExpand(schema, uiSchema, formData) && ( + + + + + + )} + + + ); + } + + + // function CollapsibleArrayTemplate(props) {

Hiiiiiiii

+ function ArrayFieldTemplate(props) { + console.log("------ Collapsible field template props=", props); + //style={{ backgroundColor: 'red' }} + const { canAdd, disabled, idSchema, uiSchema, items, onAddClick, readonly, registry, required, schema, title } = + props; + errorColor = "grey"; + if (typeof (props.items[0]) !== "undefined") { + if (typeof (props.items[0].children) !== "undefined") { + console.log("--------------------------- arrafieldtemplate item is and error1"); + if ((typeof (props.items[0].children.props.errorSchema) !== "undefined") && formSubmitted) { + console.log("--------------------------- arrafieldtemplate item is and error"); + errorColor = "red"; + } + } + } + + // expandIcon={ { setExpanded((prev) => !prev); console.log("trying to toggle accordian-------------------------"); }}/>} + // IconButtonProps={{ + // onClick: toggleAcordion + const toggleAcordion = () => { + console.log("trying to toggle accordian-------------------------"); + setExpanded((prev) => !prev); + }; + const uiOptions = getUiOptions(uiSchema); + const ArrayFieldDescriptionTemplate = getTemplate( + 'ArrayFieldDescriptionTemplate', + registry, + uiOptions + ); + const ArrayFieldItemTemplate = getTemplate( + 'ArrayFieldItemTemplate', + registry, + uiOptions + ); + const ArrayFieldTitleTemplate = getTemplate( + 'ArrayFieldTitleTemplate', + registry, + uiOptions + ); + // Button templates are not overridden in the uiSchema + const { + ButtonTemplates: { AddButton }, + } = registry.templates; + // + return ( + + { setExpanded((prev) => !prev); console.log("trying to toggle accordian-----"); }} />} + IconButtonProps={{ + onClick: toggleAcordion + }} + > + + {title} + + + + + + + + {items && + items.map(({ key, ...itemProps }) => ( + + ))} + {canAdd && ( + + + + + + + + )} + + + + + + ); + } + /* const { className, items, canAdd, onAddClick } = props; + return ( +
+ {props.items && + props.items.map((element) => ( +
+
{element.children}
+ {element.hasMoveDown && ( + + )} + {element.hasMoveUp && ( + + )} + +
+
+ ))} + + {props.canAdd && ( +
+

+ +

+
+ )} +
+ ); + } */ + + + function ColorFieldTemplate(props) { + // console.log("---------------label is =", label); ,maxLength:50 + // + // + // nputProps= {{ maxLength: 1000000 }} + //
+ + //addded onChange dev 19 + // const { id, classNames, label, help, required, description, errors, children, onChange } = props; + //inputProps = {{ max: 12 }} + + const { id, classNames, help, description, errors, children } = props; + // console.log("---------------label adn description is =", label, description); + return ( +
+ + {description} + {children} + {errors} + {help} +
+ ); + } + + + + + //function AddButton(props) { + // const { icon, iconType, ...btnProps } = props; + // {icon} + // return ( + // + // ); + //} + + // function ExtentButton(props) { + // const { icon, iconType, ...btnProps } = props; + // {icon} + // return (
+ // Click to add extent using viewer
+ // ); + // } + + //function FieldHelpTemplate( props) { + // const { help, idSchema } = props; + // const id = helpId(idSchema); + // return ; + // } + + function ExtentFieldTemplate(props) { + // console.log("-------------In extent Field template --------------------",props); + // + // + // function onChange(formData) { Console.log("in onchange local -------------------"); + //// return (event) => { + // this.setState({ + // [formData]: parseFloat(event.target.value) + // }, () => this.props.onChange(this.state)); + // }; + // }; + + //function changeExtent(formDatamm,id) { + //function changeExtent(props) { + // const { icon, iconType, ...btnProps } = props; + // {icon} + // console.log('----------------------in extent 11 changge formdata =',formData); + // formData[0] = Math.round(mapExtent[0]); + // formData[1] = Math.round(mapExtent[1]); + // formData[2] = Math.round(mapExtent[2]); //changed this nov 24 + // formData[3] = Math.round(mapExtent[3]); + + // updateForm(formData); + // } + //
+ + // commneted out dev 5 for test beacuse etentSet is set turue sometime when it shouldnt + // extentSet = true; + + // setTimeout(() => { updateForm(formData); console.log("in extent set timeout",); }, 1000); //was 1000} + + const { id, classNames, label, help, description, errors, children, onChange } = props; + console.log("---------extent filed template------labeldescription is =", label, description); + console.log("---------extent filed template------onchange is =", onChange); + // let mapExtent = []; + + //added dec 4 test of update + // setTimeout(() => { updateForm(formData); forceUpdate; console.log("in extentfield templage setring timeout",); }, 10000);//was 1000} + + // onChange={(event) => props.onChange(event.target.value)} + return ( +
{ console.log("on change in extent---------"); props.onChange(event.target.value) }} > + + + + + + + + {children} + {errors} + {help} +
+ ); + } + + const fields = { + //TitleField: CustomTitleField, + DescriptionField: CustomDescriptionField + //, SchemaField: CustomSchemaField + }; + + // + //const Templates = { + // TitleField: CustomTitleField, + // DescriptionField: CustomDescriptionField, + // TitleFieldTemplate1, TitleFieldTemplate, + // DescriptionFieldTemplate1:DescriptionFieldTemplate + //, SchemaField: TitleFieldTemplate + // }; + + // const RegistryFieldsType= { + // TitleField1: CustomTitleField, + //// DescriptionField: CustomDescriptionField + //}; + + // added amy 28 + + + + // following updates state of the form changed april 12 + const [, updateState] = useState(); + const forceUpdate = useCallback(() => updateState({}), []); + + + const [expanded, setExpanded] = React.useState(false); + // below works + const [newformData, updateForm] = useState(formData); + + //commented out below jan 18 + //const [newSchema, updateSchema] = useState(uiSchema); + + + const [value, setValue] = React.useState('first Nation'); + + // load predefinied templates from file + const handleTemplateChange = (event) => { + + // mar 14 set to loaded to be able to submit + fileLoaded = false; + document.getElementById("submit").style.backgroundColor = "rgb(63,81,181)"; + let filename = ""; + setValue(event.target.value); + console.log("MMMmap template event=", event.target.value); + if (event.target.value === "Weather current") { + filename = "weather_current_condition_ogmwms.json"; + } + else if (event.target.value === "Flood Historical") { + // filename = "energy.json"; + filename = "floodhistorical-esridynamic.json"; + + } + else if (event.target.value === "xyzTile") { + filename = "esri-xyztiles.json"; + } + else if (event.target.value === "Geocore radiation") { filename = "Geocore radiation.json"; + } + else if (event.target.value === "Geocore commemorative and radiation") { filename = "Geocore commemorative and radiation.json"; + } + else if (event.target.value === "ogc+Geocore") { filename = "WMS weather and Geocore radiation.json"; +} + + + var xmlhttp = new XMLHttpRequest(); + xmlhttp.open("GET",filename,true); + xmlhttp.send(); + xmlhttp.onreadystatechange = function () { + if (xmlhttp.status == 200 && xmlhttp.readyState == 4) { + + plugins["plugins"] = (JSON.parse(xmlhttp.responseText)); + + formData = (JSON.parse(xmlhttp.responseText)); + + updateForm(formData); // works form is updated -------------------------------------- + forceUpdate; + console.log("just updated form data using hook in file read ---------------",formData); + mapFormChanged = true; + + // mar 14 set to loaded to be able to submit + fileLoaded = true; + + + + mapFormChanged = true; + + // if (formData.map.listOfGeoviewLayerConfig[0].listOfLayerEntryConfig[0].source !== undefined) { + // console.log("ooooooonchange ---------- just deleted strategy and transparent key"); + // delete formData.map.listOfGeoviewLayerConfig[0].listOfLayerEntryConfig[0].source.strategy; + // delete formData.map.listOfGeoviewLayerConfig[0].listOfLayerEntryConfig[0].source.transparent; + // } + + + if (formData.map.listOfGeoviewLayerConfig !== undefined) { + console.log("before in for loop2"); + + let arrayLength = formData.map.listOfGeoviewLayerConfig.length; + console.log("before in for loop2", arrayLength); + + for (var i1 = 0; i1 < arrayLength; i1++) { + console.log("in for loop2"); + if (formData.map.listOfGeoviewLayerConfig[i1] !== undefined) { + console.log("in for 2 1 loop="); + // + console.log("----- geoview layer name=", formData.map.listOfGeoviewLayerConfig[i1].geoviewLayerName); + } + console.log("in for 2 2 loop="); + // testConfig.map.listOfGeoviewLayerConfig[i].geoviewLayerName.en.replace(/ /g, ' '); + // testConfig.map.listOfGeoviewLayerConfig[i].geoviewLayerName.en.replace(/\\s/g, "_"); + if (formData.map.listOfGeoviewLayerConfig[i1] !== undefined) { + console.log("in for 2 3 loop=",typeof formData.map.listOfGeoviewLayerConfig[i1]); + console.log("in for 2 33 loop=",typeof formData.map.listOfGeoviewLayerConfig[i1].geoviewLayerName); + + if ( formData.map.listOfGeoviewLayerConfig[i1].geoviewLayerName !== undefined) { + + if ( formData.map.listOfGeoviewLayerConfig[i1].geoviewLayerName.en !== undefined) { + console.log("in for 2 4 loop=",formData.map.listOfGeoviewLayerConfig[i1].geoviewLayerName.en); + + console.log("in for 2 5 loop=", typeof formData.map.listOfGeoviewLayerConfig[i1].geoviewLayerName.en); + + //re aded feb 21 + //commented out aug 9 for test, code works + let result = formData.map.listOfGeoviewLayerConfig[i1].geoviewLayerName.en.replace(/ /g, "_"); + console.log("result =", result); + //re aded feb 21 + //commented out aug 9 for test, code works + formData.map.listOfGeoviewLayerConfig[i1].geoviewLayerName.en = result; + } + } + // works must do this to work + + console.log("result 2=", result); + } + // testConfig.map.lig("----result=", resulstOfGeoviewLayerConfig[i].geoviewLayerName.en.replace(" ", ' '); + if (formData.map.listOfGeoviewLayerConfig[i1] !== undefined) { + // console.log("-----after 2 geoview layer name=", formData.map.listOfGeoviewLayerConfig[i].geoviewLayerName); + } + //Do something + } + } + console.log("before stringify ------ --- formdata", formData); + const m = JSON.stringify(formData); + m.replace(""", '"'); + console.log("after stringify ------ --- m=", m); + //below orig, set Geoviewmapid to map form data + Geoviewmapdiv.innerHTML = "
"; + //addedd jan 26 + // console.log("after stringify Geoviewmapdiv=", Geoviewmapdiv.innerHTML); + + // commented jan 25 + let m2 = Geoviewmapdiv.innerHTML.replace(/"/g, '\''); + //addedd jan 26 + /// + // console.log("after stringify ------ --- m2=", m2); + + // commented jan 25 + Geoviewmapdiv.innerHTML = m2; + + // console.log('---------------------------------------- about do submit form 2 accordian=',accordian ); + setExpanded(true); //open accordian + // updateForm(formData); // updagtes after 2nd form change + // Form.forceUpdate; + // console.log("after stringify Geoviewmapdiv=", Geoviewmapdiv.innerHTML); + // } + + } + } + }; + + + + + console.log("this schema ----------form Data=", formData); + let navigate = useNavigate(); const location = useLocation(); + + + function isJsonString(str) { + try { + JSON.parse(str); + } catch (e) { + return false; + } + return true; + } + + //save json file in download directory + + let filesave = () => { + + console.log('in filesave'); + + console.log("blob=", blob); + + saveAs(blob, "data.json"); + console.log(" ----- saved blob="); + //let formData = JSON.parse(JSON.stringify({ blob })); + console.log("after set blob=", blob) + } + + + // let fileLoad = e=> { + + function fileLoad(filename) { + + console.log('in fileload'); + //const fileReader = new FileReader(); + console.log('in afterfilerader'); + const file = document.getElementById("file-selector"); + file.setAttribute("display", "inline"); + // console.log(" filesave formdata=",formData); + + // formData: {} + // var blob = new Blob([JSON.stringify({ formData } )], {type: "text/plain;charset=utf-8"}); + // console.log("blob=",blob); + //saveAs(blob, "data.json"); + file.setAttribute("display", "none"); + // var fileList = window[fileList].files; + // const input = document.querySelector('input'); + + //const file1 = file.files[0]; /changed june 27 + let file1 = file.files[0]; + console.log(' file to open=', file1); + + //console.log("e filename", e.target.files[0].name); + + // console.log(' file to name=', file1.name); + if (typeof (filename) !== "undefined") + { + console.log(' setting file name,filename=',filename); + // file1[0].name= filename; + } + // console.log(' file to name=', file1.name); + + console.log(' 2 file to open=', file1); + var f = new FileReader(); + // f.readAsText(file1, 'utf8'); + + if (typeof (filename) !== "undefined") { + console.log(' opening filereder=', "firstnation.json"); + f.fileName = filename; + } + + f.readAsText(file1, 'blob');// new jan 5 becasue of error but wprked before + + f.onloadend = function () { + console.log("success"); + console.log("file =", f.result); + + console.log("file =", f); + blob = f.result; + + fileLoaded = true; + //formData = JSON.parse(f.result); + // let newformData = JSON.parse(f.result) ; + //console.log ("updateed form data ???=",newformData); + + // {"formData":{"map":{"basemapOptions":{"id":"transport","shaded":true,"labeled":true},"interaction":"dynamic","viewSettings":{"center":[-106,60],"enableRotation":true,"extent":[1,23,2,4],"projection":3978,"rotation":0,"zoom":12},"extraOptions":{}},"theme":"dark","appBar":{"about":{}},"navBar":["zoom","fullscreen","fullextent"],"components":["app-bar","nav-bar","overview-map","north-arrow"],"corePackages":["basemap-panel","layers-panel","details-panel","geolocator-panel"],"externalPackages":{"keys":"https://geocore.api.geo.ca"},"serviceUrls":{"keys":"https://geocore.api.geo.ca"},"suportedLanguages":["en-CA","fr-CA"]}} + console.log(" setting state"); + // setState({ formData: JSON.parse(blob) }); + + // newformData = JSON.parse(blob); + if (isJsonString(blob)) { + + // just to test addition of plugin to map json mar 14 to test + // plugins = JSON.parse(blob); + plugins = JSON.stringify(plugins); + plugins = JSON.parse(plugins); + + console.log("after push plugins=", typeof plugins, plugins); + plugins["plugins"] = (JSON.parse(blob)); + console.log("after push plugins=", plugins); + + // plugins = JSON.parse(blob); + + formData = plugins; + + console.log("justbefore setting to swiper----formData", formData); + let newData = formData; + if (plugin !== "map") { + + if (plugin === "draw") + newData = formData.draw; + + else if (plugin === "Swiper") + newData = formData.plugins.swiper;// works + + console.log("just set state1 newData=", plugin, newData); + formData = newData; + + console.log("just set state formData", formData); + } + else { + //newData = formData.plugins.map; doesn't work + newData = formData.plugins; // works + let map = newData; + // formData = map;//commneted marcg 16 + + formData = map; + + console.log("just set state map map ----formData", formData); + + } + console.log("just set state1 formdata=", formData); + + //change back jan 24 undelte this + updateForm(formData); // works form is updated -------------------------------------- + forceUpdate; + +// if ((desiredSchema === "map") && (typeof id !== "undefined")) { + // plugin = "map";//done for submit + //added jan 19 test to trun o live validate and sue it after first submit + // let liveValidate = false; + + mapFormChanged = true; + + // if (formData.map.listOfGeoviewLayerConfig[0].listOfLayerEntryConfig[0].source !== undefined) { + // console.log("ooooooonchange ---------- just deleted strategy and transparent key"); + // delete formData.map.listOfGeoviewLayerConfig[0].listOfLayerEntryConfig[0].source.strategy; + // delete formData.map.listOfGeoviewLayerConfig[0].listOfLayerEntryConfig[0].source.transparent; + // } + + + if (formData.map.listOfGeoviewLayerConfig !== undefined) { + console.log("before in for loop2"); + + let arrayLength = formData.map.listOfGeoviewLayerConfig.length; + console.log("before in for loop2", arrayLength); + + for (var i1 = 0; i1 < arrayLength; i1++) { + console.log("in for loop2"); + if (formData.map.listOfGeoviewLayerConfig[i1] !== undefined) { + console.log("in for 2 1 loop="); + // + console.log("----- geoview layer name=", formData.map.listOfGeoviewLayerConfig[i1].geoviewLayerName); + } + console.log("in for 2 2 loop="); + // testConfig.map.listOfGeoviewLayerConfig[i].geoviewLayerName.en.replace(/ /g, ' '); + // testConfig.map.listOfGeoviewLayerConfig[i].geoviewLayerName.en.replace(/\\s/g, "_"); + if (formData.map.listOfGeoviewLayerConfig[i1] !== undefined) { + console.log("in for 2 3 loop=",typeof formData.map.listOfGeoviewLayerConfig[i1]); + console.log("in for 2 33 loop=",typeof formData.map.listOfGeoviewLayerConfig[i1].geoviewLayerName); + + if ( formData.map.listOfGeoviewLayerConfig[i1].geoviewLayerName !== undefined) { + + if ( formData.map.listOfGeoviewLayerConfig[i1].geoviewLayerName.en !== undefined) { + console.log("in for 2 4 loop=",formData.map.listOfGeoviewLayerConfig[i1].geoviewLayerName.en); + + console.log("in for 2 5 loop=", typeof formData.map.listOfGeoviewLayerConfig[i1].geoviewLayerName.en); + + //re aded feb 21 + //commented out aug 9 for test, code works + let result = formData.map.listOfGeoviewLayerConfig[i1].geoviewLayerName.en.replace(/ /g, "_"); + console.log("result =", result); + //re aded feb 21 + //commented out aug 9 for test, code works + formData.map.listOfGeoviewLayerConfig[i1].geoviewLayerName.en = result; + } + } + // works must do this to work + + console.log("result 2=", result); + } + // testConfig.map.lig("----result=", resulstOfGeoviewLayerConfig[i].geoviewLayerName.en.replace(" ", ' '); + if (formData.map.listOfGeoviewLayerConfig[i1] !== undefined) { + // console.log("-----after 2 geoview layer name=", formData.map.listOfGeoviewLayerConfig[i].geoviewLayerName); + } + //Do something + } + } + console.log("before stringify ------ --- formdata", formData); + const m = JSON.stringify(formData); + m.replace(""", '"'); + console.log("after stringify ------ --- m=", m); + //below orig, set Geoviewmapid to map form data + Geoviewmapdiv.innerHTML = "
"; + //addedd jan 26 + // console.log("after stringify Geoviewmapdiv=", Geoviewmapdiv.innerHTML); + + // commented jan 25 + let m2 = Geoviewmapdiv.innerHTML.replace(/"/g, '\''); + //addedd jan 26 + /// + // console.log("after stringify ------ --- m2=", m2); + + // commented jan 25 + Geoviewmapdiv.innerHTML = m2; + // console.log("after stringify Geoviewmapdiv=", Geoviewmapdiv.innerHTML); + // } + + console.log("just updated form data using hook in file read ---------------"); + console.log("just updated form data -- newformdata=", newformData); + } + else { + try { + JSON.parse(blob); + } catch (error) { + console.log("error on reading input file is ", error.message); + alert("invalid json file, filename =" + file1.name + " error =" + error.message); + } + + } + // console.log("just set state newformdata", newformData); + forceUpdate(); + } + } + function transformErrors(errors, uiSchema) { + + + // commented out for deploy feb2 + // let firsterror = true; + // let firstproperty = ""; + console.log(uiSchema); + // console.log(uiSchema); + + //errors.sort(errors.property); + errors.sort((a,b) => (a.property > b.property) ? 1 : ((b.property > a.property) ? -1 : 0)) +//objs.sort((a,b) => (a.last_nom > b.last_nom) ? 1 : ((b.last_nom > a.last_nom) ? -1 : 0)) + + // console.log("in transform error sorted errors=",errors); + + return errors.map((error) => { + /* + console.log("in transform error firsterror=",firsterror," firstproperty=",firstproperty); + if ((error.message === "must be equal to one of the allowed values") || (error.message === "must be equal to constant") + // ||(error.message === "must NOT have fewer than 1 properties")||(error.message === "must match exactly one schema in oneOf") + ) { + error.message = ""; + } + else if ((error.message.includes("must have required property")) && (firsterror)) + { + console.log("transform error ---- first error"); + + firsterror = false; + firstproperty = error.property; + } + else if ((error.message.includes("must have required property")) && (error.property === firstproperty) && (!firsterror)) + { + console.log("transform error ---- 2nd error"); + error.message = ""; + } + else if ((error.message.includes("must have required property")) && (error.property !== firstproperty )&& (!firsterror)) + { + firsterror = true; + firstproperty = ""; + console.log("transform error ---new error"); + + } + console.log("transform error ---last error=", error); + */ + return error; + }); + } + + //let transformErrors = (errors) => { + // console.log("------------------------ -------- in transform errors",errors); + // var e = []; + // errors.map(error => { +// if (error.message === "must be equal to one of the allowed values") { + // error.message = ""; + + // e.push(error); + // console.log("just pushed error", e); + // } + + // else if (error.message === "should be number") { + // error.message = "devrait etre numero"; + // e.push(error) + // } + // }); + // console.log(e); + // return e; + // }; + + // commented ou ay 28 to test read from api + + //useEffect(() => { // just uncommented following 2 line monday jan 23 + /// updateForm(formData); + // forceUpdate; + // console.log("here is the use Effect----------------------------------", newformData); + // }, []); + + let dataObject = location.state.data; - console.log(dataObject); + console.log('data object-', dataObject); + let jsonObject = JSON.stringify(dataObject); let schemaData = JSON.parse(jsonObject); + + console.log('form dagta-'); // all data inisde plugin ? + //just commnetd ou jan 23 for test const desiredSchema = location.state.desiredPlugin; - //let formData, setFormData; - //[formData, setFormData] = React.useState(null); + + + + + + +//let FormWithPagination = applyNav(Form); + if (desiredSchema === "Range Slider") { - schemaData = dataObject[0].rangeSlider; - } else if (desiredSchema === "Chart") { + + uiSchema = { + "ui:field": "fieldFlexWidth" , + // "ui:field" : "columns", + //"ui:rootFieldId": "chart", + //// 'ui:globalOptions': { copyable: true }, + // 'ui:rootFieldId': 'myform', // ..just a test + //'ui:classNames': 'custom-css-class', + // "ui:classNames": "bold-title", + + // "ui:widget": (props) => { + // return ( + // props.onChange(event.target.value)} /> + // ); + // }, + "navConf": { + "order": [ + "rangeSlider", + + + ] + }, "rangeSlider": { + "nav": [" rangeSlider"], + }, + // + "ui:FieldTemplate": CustomFieldTemplate, + // "ui:description": "The Range/Time Slider offers a dynamic way to visualize time series data as well as non-time series data by “range”. It is also called Time Slider when used for time series visualization. The basic slider is a horizontal bar with anchors that can be moved to establish the range of the values to be used. To visualize data as a dynamic range, any layer that contains a date or numeric fields can be used.", + + // "ui:enableMarkdownInDescription": true, + // "ui:enableMarkdownInDescription": true, + // "ui:widget": "select", //works,] + // 'ui:style': { color: 'blue' }, + enable: { + "ui:enableMarkdownInDescription": true, + // "ui:widget": "select", //works,] + // 'ui:style': { color: 'blue' }, + // "ui:description": "MThe Range/Time Slider offers a dynamic way to visualize time series data as well as non-time series data by “range”. It is also called Time Slider when used for time series visualization. The basic slider is a horizontal bar with anchors that can be moved to establish the range of the values to be used. To visualize data as a dynamic range, any layer that contains a date or numeric fields can be used. Once the range properties for the dataset are defined, an interactive, on-screen slider is rendered (Figure 14), which can be used to explore the data through a range/time in a customized manner. Using this plugin, the end-user can control the animation of the data with buttons to play and pause, go to the previous range/time, or go to the next range/time.", + // "ui:CustomTitleField": "**RangeSlider**", + // "ui:title": "##RangeSlidersssss##" + }, + controls: { + // "ui:FieldTemplate": CustomFieldTemplate, + "ui:enableMarkdownInDescription": true, + // 'ui:style': { color: 'blue' }, + /// "ui:description": "Make text **bold** or *italic*. Take a look at other options ![](https://upload.wikimedia.org/wikipedia/commons/5/56/Tiger.50.jpg).", + }, + params: { + type: { + // "ui:FieldTemplate": ColorFieldTemplate, + // 'ui:style': { color: 'blue' }, + + //"ui:FieldTemplate": CustomFieldTemplate, + // "ui:enableMarkdownInDescription": true, + // "ui:description": "##ooooo basemapOptions oooo", + // "ui:title": "Rangy basemapOptions oooo", + } + }, + rangeType: { + // "ui:FieldTemplate": CustomFieldTemplate, + // "ui:title": "##RangeSlider bbbb##" + } + } + } + else if (desiredSchema === "map") { + // "map": { // uust reconizes what displayed in for for uischema no more + uiSchema = { + "navConf": { + "order": [ + "map", + "extra_Options", + "footer_nav_Bar", + "external_Packages" + + ] + }, + // "navConf": { + // order: ["main", "map", "extraOptions", "appBar", "externalPackages", "draw"] + // }, + + + // below works lits basemaptions + + //comment out feb26 + // "map": { + // "nav": ["Geoview","map"] + // }, + // below works , just commented for a test + + + + + + "footerBar": { + "nav": [" footer_Nav_Bar"], + }, + "navBar": { + "nav": [" footer_Nav_Bar"], + + }, + "components": { + "nav": [" footer_Nav_Bar"], + + }, + "corePackages": { + "nav": [" footer_Nav_Bar"], + + }, + + "externalPackages": { + "nav": [" external_Packages_Urls"], + + }, + "serviceUrls": { + "nav": [" external_Packages_Urls"], + + }, + "suportedLanguages": { + "nav": [" extra_Options"], + + }, + "schemaVersionUsed": { + "nav": [" extra_Options"], + + }, + "theme": { + "nav": [" extra_Options"] + }, + + "map": + { + "nav": "map", + + navConf: { + navs: [ + { + nav: "main", + name: "User", + icon: "glyphicons glyphicons-users" + } + ] + }, + + // "classNames": "col-md-12", + + //following works + "ui:FieldTemplate": CustomFieldTemplate, + + // below doesn't work unless adn objet field + "ui:enableMarkdownInDescription": true, + //doesnt wpdate range slider or chart with uischem only map + viewSettings: { + "nav": ["map", "viewSetting"], + + // below works column + // "classNames": "column", + + // ui: options': { + // expandable: true, + extent: { + "nav": ["map", "viewSetting"], //"ui:help": "Please select extent by clicking on extent button", + + + "ui:FieldTemplate": ExtentFieldTemplate, + // "ui:style": { + // "color": "red", + // }, + + } + }, + + basemapOptions: + { + basemapId: { + "ui:classNames": "bold-title", + // "ui:DescriptionField": "*basemap 22 Options*", + "ui:enableMarkdownInDescription": true, + // "ui:TitleField": "**basemapOptions**", + // "ui:TitleField": "**basemapOptions**", + // "ui:TitleField": "input[type=color]", + //below works + "ui:widget": "select",//works + + // "ui:description": "**_basemapOptions_**", + // "ui:style": { color: "blue", backgroundColor: "blue" } + }, + shaded: { + "ui:classNames": "bold-title", + //"ui:style": { color: "blue" , backgroundColor: "blue" }, + // "ui:widget": "select",//works + // "ui:widget":"input[type=color]", + // "ui:widget":"input[type=color]", + + }, + labeled: { + // "ui:widget": "select",//works + "ui:style": { color: "blue" }, + "ui:classNames": "bold-title", + // "ui:widget": "select" //works + } + }, + + listOfGeoviewLayerConfig: + + { + // 'ui:widget': 'CollapsibleArrayWidget', + // "ui:ArrayFieldTemplate": "ArrayFieldTemplate", //works but for all arrrays + + items: {// works with items here + + geoviewLayerName: { + en: { // works color picker appear + // "ui:widget": "color" + "ui:classNames": "bold-title" + } + }, + geoviewLayerId: { "ui:FieldTemplate": GeocoreFieldTemplate , + + en: { // works color picker appear + // "ui:widget": "color" + "ui:classNames": "bold-title", + // classNames: "style={fontWeight:\"bold\"}" + } + }, + metadataAccessPath: { + en: { + + "ui:autocomplete": "on", + "ui:placeholder": "http://"// doesnt work even if don't use defintion + // , // doesnt work cecause uses definition ? works if store definition in schema and use uri format + , "ui:format": "uri" + }, + fr: { + "ui:autocomplete": "on", + "ui:placeholder": "http://", + "ui:format": "uri" + // "ui:format": "uri", + } + }, + + listOfLayerEntryConfig: + { + // "ui:FieldTemplate": "CollapsibleArrayTemplate", + + + items: { + // "ui:disabled": "style", + style: { + "ui:widget": "hidden",// works dies fields whole section + // "ui:disabled": "style",// works disables section + // "ui:fieldFlexWidth": 6 , + LineString: { + styleId: {"ui:style": { "width": 100 }}, + styleType: { "ui:style": { "width": 100 }}, + label: {}, + settings: { + stroke: { + color: { + //"ui:FieldTemplate": "ColorFieldTemplate", + "ui:widget": "color", "ui:style": { "width": 100 }, "ui:help": "Please click to select a color" + } + } + } + + }, + Point: + { + settings: { + stroke: { + color: { "ui:widget": "color", "ui:style": { "width": 100 }, "ui:help": "Please click to select a color" } + } + } + + }, + Polygon: + { + settings: { + stroke: { + color: { "ui:widget": "color", "ui:style": { "width": 100 }, "ui:help": "Please click to select a color" } + } + } + + } + + }, settings: { color: { "ui:widget": "color", "ui:style": { "width": 100 }, maxLength: 1, "ui:help": "Please click to select a color" } }, + source: { + style: { + LineString: + { + settings: { + stroke: { + color: { "ui:widget": "color", "ui:style": { "width": 100 }, "ui:help": "Please click to select a color" } + } + } + + }, + Point: + { + settings: { + stroke: { + color: { "ui:widget": "color", "ui:style": { "width": 100 }, "ui:help": "Please click to select a color" } + } + } + + }, + Polygon: + { + settings: { + stroke: { + color: { "ui:widget": "color", "ui:style": { "width": 100 }, "ui:help": "Please click to select a color" } + } + } + + } + }, + cluster: { + textColor: { + "ui:widget": "color", "ui:style": { "width": 100 }, "ui:help": "Please click to select a col" + }, + settings: { + // color: { "ui:FieldTemplate":"ColorFieldTemplate", "ui:widget": "color","ui:help": "Please 222 click to select a color" }, + color: { "ui:widget": "color", "ui:style": { "width": 100 }, "ui:help": "Please click to select a color" }, + stroke: { color: { "ui:widget": "color", "ui:style": { "width": 100 }, "ui:help": "Please ick to select a color" } } + } + } + } + }//irems + } + } + } //listOfGeoviewLayerConf + // } //map1 + , + externalPackages: + { + items: { // works with items here + name: { + "ui:enableMarkdownInDescription": true, + // "ui:description": "Make text **bold** or *italic*. Take a look at other options [here](https://probablyup.com/markdown-to-jsx/).", + + }, + configUrl: { + + // "ui:format": "uri", + "ui:placeholder": "http://", //doesnt work + "ui:autocomplete": "on", + // "ui:help": "Hint: enter a good proxy", + // "ui:format": "uri" //doesnt work must be in schema + } + } + }, + + + // }, + serviceUrls: { + // keys: { "ui:autocomplete": "on", + // "ui:placeholder": "http://", // format:uri does work in uiSchem must be in schema file + // "ui:autocomplete": "on", + // }, + geolocator: { + "ui:format": "uri", // must be in schema for work + "ui:autocomplete": "on", + "ui:placeholder": "http://", + // "ui:autocomplete": "on" + }, + proxyUrl: { + // "ui:format": "uri", + "ui:autocomplete": "on", + "ui:placeholder": "http://", + + // "ui:autocomplete": "on" + // 'ui:help': 'Hint: enter a good proxy' + }, + } + } + } + } else if (desiredSchema === "chart") { + console.log("set tab to chart"); + uiSchema = { + + "chart": { + "nav": ["Chart"], + }, + + "ui:FieldTemplate": CustomFieldTemplate, + enable1: { + //ma2p + "ui:enableMarkdownInDescription": true, + "ui:description": "", + + // "ui:description": "Make text **bold** or *italic*. ![](https://upload.wikimedia.org/wikipedia/commons/5/56/Tiger.50.jpg)" , + // "ui:DescriptionField": "", + // ![Alt text](https://www.chartjs.org/docs/latest/assets/img/preview.0cc909a8.png)", + + //![Alt text](https://assets.digitalocean.com/articles/alligator/boo.svg "a title") + + }, + enable: { + // "ui:FieldTemplate": CustomFieldTemplate, + // "ui:enableMarkdownInDescription": true, + // "ui:description":"Make text **bold** or *italic*. ![](https://user-images.githubusercontent.com/91547284/153055799-9983e0a0-d090-480c-9aa6-5854d6782c49.png))" , + // "ui:description":"" , + //"ui:enableMarkdownInDescription": true, + // "ui:description":"" , + + // "ui:DescriptionField": "![Alt text](https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTXltVeuGCL8Y9Tnez5JGUr4_GcUhCvVfWjRQ&usqp=CAU)", + + //![Alt text](https://assets.digitalocean.com/articles/alligator/boo.svg "a title") + // "ui:title": "##RangeSlidersssss##", + // "ui:widget": "select", + // "ui:style": { color: "blue", backgroundColor: "blue"} + + // "ui:help": "click to open color picker" + }, + labelsPie: { + // "ui:style": { color: "blue", backgroundColor: "blue" } + + // "ui:help": "click to open color picker", + // "ui:DescriptionField": "*basemap 22 Options*", + + }, + options: { // commented out cuz hav to enter multiple color codes + // colors: { "ui:widget": "color","ui:style": { "width": 100 }, "ui:help": "Click to select color" } + } + } + } else if (desiredSchema === "Draw Toolbar") { + + uiSchema = { + "draw": { + "nav": [" Draw Toolbar"] + }, + "ui:FieldTemplate": CustomFieldTemplate, + + "enable": { + // "ui:enableMarkdownInDescription": true, + // "ui:DescriptionField": "*basemap 22 Options*", + // "ui:title": "##RangeSlidersssss##", + // "ui:widget": "select", + // "ui:style": { + // "color": "white", + // "backgroundColor": "blue" + // }, + // "ui:help": "click to open color picker" + }, + open: { + "ui:enableMarkdownInDescription": true, + // "ui:DescriptionField": "*basemap 22 Options*", + // "ui:title": "##RangeSlidersssss##", + // "ui:widget": "select", + // "ui:style": { + // "color": "blue", + // "backgroundColor": "blue" + // }, + // "ui:help": "click to open color picker" + }, + tools: { + // "ui:DescriptionField": "*basemap 22 Options*", + "ui:enableMarkdownInDescription": true, + // "ui:style": { + // "color": "blue", + // "backgroundColor": "blue" + // }, + // "ui:help": "click to open color picker" + } + + + } + } + else if (desiredSchema === "Swiper") { + console.log("set tab to swiper"); + uiSchema = { + "swiper": { + "nav": ["Swiper"] + } + } + } + else if (desiredSchema === "Thematic Slider") { + console.log("set tab to thematic slider"); + uiSchema = { + "thematicSlider": { + "nav": ["Thematic Slider"] + } + } + } + + + + +console.log( "=============================================map extent===", mapExtent); + + + console.log('desired schema', desiredSchema); // all data inisde plugin ? + + if (oldSchema !== desiredSchema) { + formnotUpdated = true; + } + if (desiredSchema === "Range Slider") { + + schemaData = schemaData[0].rangeSlider; + if ((fileLoaded) && (formnotUpdated)) { + formnotUpdated = false; + // formData = JSON.parse(blob); + formData = plugins; + + formData = formData.plugins.rangeSlider;// works yes jan 31,react limits number of render s need timeout + console.log("just tried to change to rangle slider form 1111111 data=", formData, (typeof formData)); + setTimeout(() => { updateForm(formData); console.log("in range slider set timeout",); }, 50);//was 1000} + } else if (formnotUpdated) { + console.log("just tried to change to rangle slider form 2222 data=", formData, (typeof formData)); + + console.log(" setting range slider 22222 enumm dataObject=", dataObject); + + console.log(" setting range sliderenumm dataObject array type=", typeof dataObject); + console.log(" setting ragne slider dataObject array=", dataObject["0"].rangeSlider.properties.layers.items.properties.id); + //below wrks + dataObject["0"].rangeSlider.properties.layers.items.properties.id = ({ "enum": mapLayersName, "default": mapLayersName[0] }); + console.log(" setting -----22 chart slider dataObject array=", dataObject["0"].rangeSlider.properties.layers.items.properties.id); + // formData.layers.push({ "enum": mapLayersName });.layers.push({ "enum": mapLayersName }); + setTimeout(() => { updateForm(formData); console.log("in range slider set timeout",); }, 50);//was 1000} + } + } else if (desiredSchema === "chart") { + console.log("in chart "); + schemaData = schemaData[0].chart; + if ((fileLoaded) && (formnotUpdated)) { + console.log("in chart2 "); + formnotUpdated = false; + // formData = JSON.parse(blob); + formData = plugins; + formData = formData.plugins.chart;// works yes jan 31,react limits number of render s need timeout + console.log("just tried to change to chart form data=", formData, (typeof formData)); + setTimeout(() => { updateForm(formData); console.log("in swiper set timeout",); }, 50);//was 1000} + } else if (formnotUpdated) { + console.log(" setting chart enumm dataObject=", dataObject); + + console.log(" setting chart sliderenumm dataObject array type=", typeof dataObject); + // console.log(" setting chart slider dataObject array=", dataObject["0"].chart.properties.layers.items.properties.id); + //below wrks + // dataObject["0"].chart.properties.layers.items.properties.id = ({ "enum": mapLayersName, "default": mapLayersName[0] }); + // console.log(" setting chart slider dataObject array=", dataObject["0"].chart.properties.layers.items.properties.id); + // formData.layers.push({ "enum": mapLayersName });.layers.push({ "enum": mapLayersName }); + setTimeout(() => { updateForm(formData); console.log("in chart set timeout",); }, 50);//was 1000} + } + + } else if (desiredSchema === "languages") { + schemaData = schemaData[0].languages; + } else if (desiredSchema === "version") { + schemaData = schemaData[0].version; + } else if (desiredSchema === "Ui") { + schemaData = schemaData[0].Ui; + } else if (desiredSchema === "map") { + // console.log('schma map-', schemaData[0].map); + // schemaData = schemaData[0].map; + if ((fileLoaded) && (notfirstLoad) && (formnotUpdated)) { + + formData = plugins; + // formData = JSON.parse(blob); // mar 16 + formnotUpdated = false; + // schemaData = schemaData[0].map; + formData = formData.plugins;// works yes jan 31,react limits number of render s need timeout + // formData = formData.plugins.map;// works yes jan 31,react limits number of render s need timeout + console.log("just tried to change map to form form data=", formData); + setTimeout(() => { updateForm(formData); console.log("in map set timeout",); }, 50);//was 1000 + } + console.log("=============================================map extent===", mapExtent); + + + // schemaData = schemaData[0].map; +if (extentSet) { + console.log('setting extent main===================================================='); + console.log('form extents===================map extent-', Math.round(mapExtent[0])); + // console.log('form extents=================== form extent=', formData); + + console.log('form extents=================== form extent=', dataObject["0"].map); + + console.log('form extents=================== form extent=', dataObject["0"].map.properties.map); + //formData.map.pviewSettings.extent[0] = mapExtent[0]; + // dataObject["0"].map.viewSettings.extent[1] = mapExtent[1]; + // dataObject["0"].map.viewSettings.extent[2] = mapExtent[2]; + // dataObject["0"].map.viewSettings.extent[3] = mapExtent[3]; + // extentSet = false; + // setTimeout(() => { updateForm(formData); console.log("in map set timeout",); }, 50);//was 1000 + } + //added march 20 to open array instead of getting to press add button + // if (formData.map.listOfGeoviewLayerConfig === undefined) { + // formData = formData.map.listOfGeoviewLayerConfig[0]; + + schemaData = schemaData[0].map; + } else if (desiredSchema === "Services") { + schemaData = schemaData[0].Services; } else if (desiredSchema === "Swiper") { + console.log("in swiper"); schemaData = schemaData[0].swiper; + if ((fileLoaded) && (formnotUpdated)) { + formnotUpdated = false; + // formData = JSON.parse(blob);// mar 16 + formData = plugins; + formData = formData.plugins.swiper;// works yes jan 31,react limits number of render s need timeout + console.log("just tried to change to swiper form data=", formData, (typeof formData)); + setTimeout(() => { updateForm(formData); console.log("in swiper set timeout",); }, 50);//was 1000} + + } else if (formnotUpdated) { + console.log(" setting swiper enumm dataObject=", dataObject); + + console.log(" setting swiper enumm dataObject array type=", typeof dataObject); + console.log(" setting enumm dataObject array=", dataObject["0"].swiper.properties.layers); + + //below wrks + dataObject["0"].swiper.properties.layers = ({ "enum": mapLayersName, "default": mapLayersName[0] }); + // formData.layers.push({ "enum": mapLayersName });.layers.push({ "enum": mapLayersName }); + // setTimeout(() => { updateForm(formData); console.log("in swiper set timeout",); }, 50);//was 1000} + } } else if (desiredSchema === "Draw Toolbar") { - schemaData = schemaData[0].draw; + setTimeout(() => { updateForm(formData); console.log("in swiper set timeout",); }, 50);//was 1000 + console.log("1draw map schema=", schemaData[0].draw); + schemaData = schemaData[0].draw; // below causes error jan 23 + if ((fileLoaded) && (formnotUpdated)) { + formnotUpdated = false; + // formData = JSON.parse(blob); // commented out mar 16 + formData = plugins; + console.log("2 about to change to draw form data=", formData); + + formData = formData.plugins.draw;// works yes jan 31,react limits number of render s need timeout + console.log("just tried to change to draw form data=", formData); + setTimeout(() => { updateForm(formData); console.log("in draw set timeout",); }, 50);//was 1000 + // updateForm(formData); + } + } else { + console.log("in thematic slider"); schemaData = schemaData[0].thematicSlider; + console.log("just tried to change to thematic slider form data=", formData, (typeof formData)); + + if ((fileLoaded) && (formnotUpdated)) { + formnotUpdated = false; + formData = plugins; + // formData = JSON.parse(blob); + formData = formData.plugins.thematicSlider;// works yes jan 31,react limits number of render s need timeout + console.log("just tried to change to thematic slider form data=", formData, (typeof formData)); + setTimeout(() => { updateForm(formData); console.log("in thmatic slider set timeout",); }, 50);//was 1000} + } else if (formnotUpdated) { + console.log(" setting thematic enumm dataObject=", dataObject); + + // console.log(" setting thematic enumm dataObject array type=", typeof dataObject); + // console.log(" setting thmatic enumm dataObject array=", dataObject["0"].thematicSlider.properties.layers); + //below wrks + // console.log(" setting thmatic slider enumm dataObject array=", dataObject["0"].thematicSlider.properties.layers.items.properties.id); + + // dataObject["0"].thematicSlider.properties.layers.items.properties.id = ({ "enum": mapLayersName, "default": mapLayersName[0] }); + + } + } + oldSchema = desiredSchema; + if (fileLoaded) + notfirstLoad = true; + + + console.log('just updated schema form in main'); + + // commented out aug 8 becasue of material ui form problem + + + //reactjsonschempagination below to see code generate + //let FormWithNav = applyNavs(Form); + + //let FormWithPagination = applyNav(Form, EditorNavs); + // let FormWithNav = applyNav(Form, CustomNavs); + //function EditorNavs({ navs: { links }, onNavChange }) { }; + + //function removeControlLabel() { }; + + //let FormWithNav = applyNav(Form, EditorNavs,removeControlLabel()); + let FormWithNav = applyNav(Form); + console.log('after applynav -----------------------------------'); + + if (desiredSchema === "map") { + console.log("id 1 of formdata=", formData); + } + // let e = 1; return ( -
-
-
- - - + + //below works withhorizzontal tabs + // +
+ + { + console.log("onChange, desired schema=", desiredSchema); + console.log("onChange, formdata=", formData); + // console.log(" onChange uischema -----", uiSchema); + if ((desiredSchema === "map")) { + mapFormChanged = true; + console.log("--------------- onChange setting desire schma is map 1"); + //syn Geoviewlayertype with listofLayerentryconfig = + if (typeof(formData.map.listOFGeoviewLayerConfig )!== undefined) { + console.log("--------------- onChange setting schematag1"); + + if (typeof(formData.map.listOfGeoviewLayerConfig[0].listOfLayerEntryConfig) !== undefined) { + console.log("--------------- onChange setting schematag=", formData.map.listOfGeoviewLayerConfig[0].geoviewLayerType); + // formData.map.listOfGeoviewLayerEntryConfig[0].listOfLayerEntryConfig[0].entrytype=formData.map.listOfGeoviewLayerConfig[0].geoviewLayerType; + + // commented out april 19n,a test to set schema tag bsed on type of layer , but not may be geocore layer type + // formData.map.listOfGeoviewLayerConfig[0].listOfLayerEntryConfig[0].schemaTag = formData.map.listOfGeoviewLayerConfig[0].geoviewLayerType; + // formData.map.listOfGeoviewLayerConfig[0].listOfLayerEntryConfig[0].entryType = "raster-image3"; + // console.log("onChange setting entrytype=", formData.map.listOfGeoviewLayerConfig[0].geoviewLayerType[0].entryType); + //["raster-image3"]; + } + } + } + // console.log("onChange, props=", props); + + if (desiredSchema === "map"){ + console.log("=============================================map extent===", extentSet, Math.round(mapExtent[0])); + // must call on change twice in order to update the form + } +if ((desiredSchema === "map")&&(extentSet)) { + console.log('setting extent in on change===================================================='); + formData.map.viewSettings.extent[0] = Math.round(mapExtent[0]); + formData.map.viewSettings.extent[1] = Math.round(mapExtent[1]); + formData.map.viewSettings.extent[2] = Math.round(mapExtent[2]); //changed this nov 24 + formData.map.viewSettings.extent[3] = Math.round(mapExtent[3]); + var covert = []; + + formData.map.viewSettings.extent=covert.concat(Math.round(mapExtent[0]),Math.round(mapExtent[1]),Math.round(mapExtent[2]),Math.round(mapExtent[3])); + // var covert = []; + //formData.map.viewSettings.extent = covert.concat(mapExtent[3]); + // covert = Object.keys(formData.map.viewSettings.extent).map(function(key) +//{ +// return [(formData.map.viewSettings.extent[key])]; + + // }); +// var covert = []; + // covert = Object.keys(formData.map.viewSettings.extent).map((key) => { covert.push[formData.map.viewSettings.extent[key]] }); + console.log('form extents===================values-', covert); + + //console.log('form extents===================values-', formData.map.viewSettings.extent.values(1)); + // formData.map.viewSettings.extent[0] = 1; + // formData.map.viewSettings.extent[1] = 2; + // formData.map.viewSettings.extent[2] = 3; //changed this nov 24 + /// formData.map.viewSettings.extent[3] = 4; + // formData.map.viewSettings.extent = [1, 2, 3, 4]; + console.log('form extents===================map extent-', mapExtent[0]); + + console.log('form extents=================== frm extent=', formData.map.viewSettings.extent[0]); + console.log('form extents=================== frm extent=', formData.map.viewSettings.extent); + console.log("form extents type",typeof formData.map.viewSettings.extent); + console.log("form extents type", formData.map.viewSettings.extent.length); + + extentSet = false; + updateForm(formData); // updagtes after 2nd form change + forceUpdate; + // window.setTimeout(() => { updateForm(formData); console.log("in on change ------- update extent 1----------------------------",); }, 0);//was 1000 + } + console.log("in on change id=",id); + if ((desiredSchema === "map")){ //changed april 3 //&& (typeof id !== "undefined")) { + plugin = "map";//done for submit + //added jan 19 test to trun o live validate and sue it after first submit + // let liveValidate = false; + mapFormChanged = true; + + + // if (formData.map.listOfGeoviewLayerConfig[0].listOfLayerEntryConfig[0].source !== undefined) { + // console.log("ooooooonchange ---------- just deleted strategy and transparent key"); + // delete formData.map.listOfGeoviewLayerConfig[0].listOfLayerEntryConfig[0].source.strategy; + // delete formData.map.listOfGeoviewLayerConfig[0].listOfLayerEntryConfig[0].source.transparent; + // } + console.log("in on change before loop"); + + if (formData.map.listOfGeoviewLayerConfig !== undefined) { + console.log("before in for loop2"); + + let arrayLength = formData.map.listOfGeoviewLayerConfig.length; + console.log("before in for loop2", arrayLength); + + for (var i1 = 0; i1 < arrayLength; i1++) { + console.log("in for loop2"); + if (formData.map.listOfGeoviewLayerConfig[i1] !== undefined) { + console.log("in for 2 1 loop="); + // + console.log("----- geoview layer name=", formData.map.listOfGeoviewLayerConfig[i1].geoviewLayerName); + } + console.log("in for 2 2 loop="); + // testConfig.map.listOfGeoviewLayerConfig[i].geoviewLayerName.en.replace(/ /g, ' '); + // testConfig.map.listOfGeoviewLayerConfig[i].geoviewLayerName.en.replace(/\\s/g, "_"); + if (formData.map.listOfGeoviewLayerConfig[i1] !== undefined) { + console.log("in for 2 3 loop=",typeof formData.map.listOfGeoviewLayerConfig[i1]); + console.log("in for 2 33 loop=",typeof formData.map.listOfGeoviewLayerConfig[i1].geoviewLayerName); + + if ( formData.map.listOfGeoviewLayerConfig[i1].geoviewLayerName !== undefined) { + + if ( formData.map.listOfGeoviewLayerConfig[i1].geoviewLayerName.en !== undefined) { + console.log("in for 2 4 loop=",formData.map.listOfGeoviewLayerConfig[i1].geoviewLayerName.en); + + console.log("in for 2 5 loop=", typeof formData.map.listOfGeoviewLayerConfig[i1].geoviewLayerName.en); + + //re aded feb 21 + //commented out aug 9 for test, code works + let result = formData.map.listOfGeoviewLayerConfig[i1].geoviewLayerName.en.replace(/ /g, "_"); + console.log("result =", result); + //re aded feb 21 + //commented out aug 9 for test, code works + formData.map.listOfGeoviewLayerConfig[i1].geoviewLayerName.en = result; + } + } + // works must do this to work + + console.log("result 2=", result); + } + // testConfig.map.lig("----result=", resulstOfGeoviewLayerConfig[i].geoviewLayerName.en.replace(" ", ' '); + if (formData.map.listOfGeoviewLayerConfig[i1] !== undefined) { + // console.log("-----after 2 geoview layer name=", formData.map.listOfGeoviewLayerConfig[i].geoviewLayerName); + } + //Do something + } + } + console.log("before stringify ------ --- formdata", formData); + const m = JSON.stringify(formData); + m.replace(""", '"'); + console.log("after stringify ------ --- m=", m); + //below orig, set Geoviewmapid to map form data + Geoviewmapdiv.innerHTML = "
"; + //addedd jan 26 + // console.log("after stringify Geoviewmapdiv=", Geoviewmapdiv.innerHTML); + + // commented jan 25 + let m2 = Geoviewmapdiv.innerHTML.replace(/"/g, '\''); + //addedd jan 26 + /// + console.log("after stringify ------ --- m2=", m2); + + // commented jan 25 + Geoviewmapdiv.innerHTML = m2; + // console.log("after stringify Geoviewmapdiv=", Geoviewmapdiv.innerHTML); + } + + console.log("end on change------ --- "); + // jan 8 took out live validate getting error and form not submitting + // }} transformErrors={transformErrors} formData={newformData} formContext={formData} > + // added OmitEstradata and liveOmit jfeb 20 to try and remove emply arrays from appearing in jsonexperimental_defaultFormStateBehavior={{emptyObjectFields : "populateRequiredDefaults"}} + //experimental_defaultFormStateBehavior={{emptyObjectFields : "populateRequiredDefaults"}} this does not display center filed of viewsettings but is a required field + }} transformErrors={transformErrors} widgets={widgets} formData={newformData} onError={onError} experimental_defaultFormStateBehavior={{ emptyObjectFields: "populateRequiredDefaults"}}formContext={formData} ref={formRef} liveValidate > + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ +
+ +
+ + + Available Plugins + { const jsonString = require("./db.json"); + + plugin = event.currentTarget.value; console.log("on change plugin value=", plugin); + navigate("/plugin", { + state: { data: jsonString.plugins, desiredPlugin: plugin }, + }); + active_plugin = plugin; + //= document.querySelector('[value={{plugin}}]'); + console.log("active 1plugn",active_plugin ); + + if ((event.currentTarget.value) === "map") { + // event.currentTarget.disabled= false; + // event.currentTarget.checked = true; + // active_plugin = document.querySelector('[value="map"]'); + console.log("active plugn",active_plugin ); + + console.log("-------------------- map seleceted"); + } + else if((event.currentTarget.value) === "chart") { + // event.currentTarget.valueSelected = true; + + event.currentTarget.checked = true; + updateForm(formData); // updagtes after 2nd form change + forceUpdate; + + // active_plugin = document.querySelector('[value="chart"]'); + console.log("active plugn",active_plugin ); + // active_plugin.control = "{}"; + console.log("-------------------- map seleceted"); + } + } + } + > + + } + label="Range Slider" + /> + } + label="Chart" + /> + } + label="Swiper" + /> + } + label="Thematic Slider" + /> + } + label="Geoview map" + + /> + } + label="Draw Toolbar" + /> + + + + +
+
+ // + // + ); } + -export default SchemaForm; + export default SchemaForm; diff --git a/src/components/db - Cop jan 30 orig.json b/src/components/db - Cop jan 30 orig.json new file mode 100644 index 0000000..5dc459b --- /dev/null +++ b/src/components/db - Cop jan 30 orig.json @@ -0,0 +1,3127 @@ +{ + + "plugins": [ + + { "draw": { + + "title": "Draw", + + + + "type": "object", + "properties": { + + "enable": { + "type": "boolean", + "title": "Enable", + "default":true + }, + "open": { + + "type": "boolean", + "title": "Open by default", + "default": true + }, + "tools": { + "type": "array", + "title": "Tools", + "minItems":0, + "uniqueItems": true, + "items":{ + "enum": [ + "picker", + "point", + "polyline", + "polygon", + "edit", + "measure", + "extent", + "write", + "read" + ] + }, + + + "description": "Tools to add to draw toolbar.", + "default": [ + "picker", + "point", + "polyline", + "polygon", + "edit", + "measure", + "extent", + "write", + "read" + ] + } + + }, + "required": [ + "enabled", + "open","tools" + ] + },"chart": { + + "title": "Chart", + "type": "object", + "properties": { + + "enable": { + "type": "boolean", + "title": "Enable", + "description":"chart", + + "default":true + + + }, + "type": { + "title": "Chart Type", + "type": "string", + "enum": [ + "pie", + "bar", + "line" + ], + + "default": "pie" + }, + "title": { + "title": "Title", + "type": "string", + "default": "" + }, + "labelsPie": { + "type": "object", + "title": "Labels", + "properties": { + "type": { + "title": "Type", + "type": "string", + "enum": [ + "field", + "config" + ], + "description": "Retreive the labels from a field or from the configuration.", + "default": "config" + }, + "values": { + "title": "Values", + "type": "string", + "description": "Values separated by semi colon or field name.", + "default": "" + }, + "split": { + "title": "Split Character", + "type": "string", + "description": "Character to use to split list of values.", + "default": ";" + } + }, + "required": [ + "type", + "values", + "split" + ] + }, + "options": { + "title": "Options", + "type": "object", + "properties": { + "colors": { + "title": "Datasets Colors", + "type": "string", + "description": "Hexadecimal color code separated by semicolon. If not provided, default colors will be use.", + "default": "" + }, + "cutOut": { + "title": "Cut Out Percentage", + "type": "number", + "description": "Cut out percentage to use to give doughnut effect.", + "default": 0, + "minimum": 0, + "maximum": 80 + } + }, + "required": [ + "cutOut" + ] + }, + "axis": { + "type": "object", + "title": "Labels", + "properties": { + "xAxis": { + "title": "X Axis", + "type": "object", + "properties": { + "title": { + "title": "Title", + "type": "string", + "default": "" + }, + "type": { + "title": "Type", + "type": "string", + "enum": [ + "field", + "config", + "linear", + "date" + ], + "description": "Retreive the labels from a field or configuration for bar chart or from values (linear or time) for line chart.", + "default": "config" + }, + "values": { + "title": "Values", + "type": "string", + "description": "Values separated by semicolon or field name.", + "default": "" + }, + "split": { + "title": "Split Character", + "type": "string", + "description": "Character to use to split list of values.", + "default": ";" + } + }, + "required": [ + "type", + "values", + "split" + ] + }, + "yAxis": { + "title": "Y Axis", + "type": "object", + "properties": { + "title": { + "title": "Title", + "type": "string", + "default": "" + }, + "type": { + "title": "Type", + "type": "string", + "enum": [ + "field", + "config", + "linear", + "time" + ], + "description": "Retreive the labels from a field or configuration for bar chart or from values (linear or time) for line chart.", + "default": "config" + }, + "values": { + "title": "Values", + "type": "string", + "description": "Values separated by semicolon or field name.", + "default": "" + }, + "split": { + "title": "Split Character", + "type": "string", + "description": "Character to use to split list of values.", + "default": ";" + } + }, + "required": [ + "type", + "values", + "split" + ] + }, + "required": [ + "xAxis", + "yAxis" + ] + } + }, + "layers": { + "type": "array", + "title": "Layers", + "items": { + "type": "object", + "properties": { + "id": { + "title": "Layer ID", + "type": "string", + "description": "", + "enum":["1"] + }, + "nameField": { + "type": "string", + "title": "Name Field", + "description": "Field name to use for the chart selection combo box when multiple charts." + }, + "type": { + "title": "Chart Data Type", + "type": "string", + "enum": [ + "inline", + "link" + ], + "description": "Type of data (inline for items inside the layer or link for items inside a link table).", + "default": "inline" + }, + "linkUrl": { + "type": "string", + "title": "Link URL", + "description": "URL of the link table." + }, + "linkField": { + "type": "string", + "title": "Link Field", + "description": "Field name for the link between the layer and the table." + }, + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "type": { + "title": "Type of data inside the field", + "type": "string", + "enum": [ + "single", + "combine" + ], + "description": "Single if there is only one value inside the field. Combine if we use time axis and time and value are part of the field.", + "default": "combine" + }, + "linkType": { + "title": "Type of link", + "type": "string", + "enum": [ + "single", + "multi" + ], + "description": "How data is structure inside the link table (single for one field for value and one for date OR multiple if there is multiple datasets inside one field and the chart needs to parse).", + "default": "single" + }, + "link": { + "title": "Link Field", + "type": "string", + "description": "Link field to link between layer and table." + }, + "date": { + "title": "Date Field", + "type": "string", + "description": "Field to use for the date" + }, + "measure": { + "title": "Measure Field", + "type": "string" + }, + "values": { + "title": "Label Values", + "type": "string", + "description": "Field name to get labels from for link type multi." + }, + "label": { + "type": "object", + "title": "Dataset Labels", + "properties": { + "type": { + "title": "Type", + "type": "string", + "enum": [ + "field", + "config" + ], + "description": "Retreive the labels from a field or from the configuration.", + "default": "config" + }, + "values": { + "title": "Values", + "type": "string", + "description": "Values separated by semicolon or field name.", + "default": "" + }, + "split": { + "title": "Split Character", + "type": "string", + "description": "Character to use to split list of values.", + "default": ";" + } + }, + "required": [ + "type", + "values", + "split" + ] + }, + "regex": { + "title": "Dataset splitter", + "type": "string", + "description": "

Regex value to split datasets inside the field.

This field is to manage when you have multiple datasets or combine values in the same field. To be able to separate datasets from values, we will use a regex expression. We encourage you to use your data and test your regex expression on a online site like https://regex101.com.

Below we list some samples of datasets and regex:

  • Sample 1
    • Data: [255;255;255];[120;232;23];[32;44;134]
    • Regex: \\\\[|\\\\];\\\\[|\\\\]
    • Ouput: 3 datasets (e.g. 255;255;255). Values inside dataset will be split by the field 'Values Splitter'.
  • Sample 2
    • Data: (2011-03-28,0.511),(2011-04-04,0.421)
    • Regex: \\\\(|\\\\),\\\\(|\\\\)
    • Ouput: 1 datasets, 2 pairs of values (e.g. 2011-03-28,0.511). Values inside are combined (y and x axis) and will be split by the field 'Values Splitter'.

Note: we need to double the '\\' character

", + "default": "\\(|\\),\\(|\\)" + }, + "split": { + "title": "Values splitter", + "type": "string", + "default": ",", + "description": "Character to use to split values inside a field. E.g. a field contains '10;20;30' means there is 3 values split by ';' or [1,2,3];[4,5,6] means there is 2 datasets with 3 values each split by ','." + }, + "prefix": { + "title": "Prefix", + "type": "string", + "default": "", + "description": "Prefix to add to data hover." + }, + "suffix": { + "title": "Suffix", + "type": "string", + "default": "", + "description": "Suffix to add to data hover." + } + }, + "required": [ + "type", + "measure", + "split" + ] + } + }, + "details": { + "type": "object", + "title": "Details", + "properties": { + "enabled": { + "type": "boolean", + "title": "Enable" + }, + "value": { + "type": "string", + "title": "Value", + "description": "String with the custom details in markdown notation." + } + } + } + }, + "required": [ + "id", + "nameField", + "type", + "data" + ] + } + }, + "required": [ + "type", + "layers" + ] + } + },"rangeSlider": { + "$id": "https://cgpv/schema", + "$schema": "http://json-schema.org/draft-07/schema#", + + "title": "Range Slider", + "type": "object", + "properties": { + "enable": { + "type": "boolean", + "title": "Enable", + "default": true + }, + "open": { + "type": "boolean", + "title": "Open by default", + "default": false + }, + "maximize": { + "type": "boolean", + "title": "Slider maximized by default", + "default": false + }, + "maximizeDesc": { + "type": "boolean", + "title": "Description section open by default", + "default": false + }, + "autorun": { + "type": "boolean", + "title": "Start animation on load", + "defaul": false + }, + "loop": { + "type": "boolean", + "title": "Play the animation in loop", + "default": false + }, + "reverse": { + "type": "boolean", + "title": "Animation in reverse mode", + "default": false + }, + "lock": { + "type": "boolean", + "title": "Lock handle", + "default": false + }, + "controls": { + "type": "array", + "minItems":0, + "uniqueItems": true, + + "items": { + "enum": [ + "lock", + "loop", + "delay", + "export", + "refresh", + "reverse" + ] + }, + "default": [ + "lock", + "delay" + ], + "title": "Slider bar controls" + + }, + "params": { + "type": "object", + "title": "Parameters", + "properties": { + "type": { + "title": "Slider Type", + "type": "string", + "enum": [ + "number", + "date", + "wmst" + ], + "description": "If the Date or WMS-T is selected, range and limit must be in milliseconds. Note: Date is for esri layer and WMS-T is for ogc WMS-T layer.", + "default": "number" + }, + "rangeType": { + "title": "Range Type", + "type": "string", + "enum": [ + "single", + "dual" + ], + "description": "Type of range (single for one handle or dual for 2 handles).", + "default": "dual" + }, + "stepType": { + "title": "Step Type", + "type": "string", + "enum": [ + "dynamic", + "static" + ], + "description": "Type of step (dynamic for open values or static from a list of values).", + "default": "dynamic" + }, + "precision": { + "title": "Precision", + "type": "string", + "enum": [ + "0", + "1", + "2", + "date", + "hour" + ], + "description": "Precision of numeric data (0, 1, 2) or date (Date, Hour).", + "default": "0" + }, + "delay": { + "title": "Animation Delay", + "type": "string", + "enum": [ + "3000", + "4000", + "5000", + "6000", + "7000" + ], + "description": "Delay between animations.", + "default": "3000" + }, + "rangeInterval": { + "type": "number", + "title": "Interval (in milliseconds for date data type)", + "default": -1, + "description": "When the limit type is dynamic, this option allows you to define a preset interval between the two handles. The value must be in milliseconds date data type. For other numerical value formats, enter the desired value directly. To convert a time interval into milliseconds, use the built-in converter. Will start at the beginning of the scroll bar, unless the \"Start at end\" option is enabled." + }, + "startRangeEnd": { + "type": "boolean", + "title": "Start interval at the end", + "default": false + }, + "range": { + "type": "object", + "title": "", + "properties": { + "min": { + "type": "number", + "title": "Minimum value of the range (in milliseconds for date data type)", + "description": "The minimum value of the range that corresponds to the position of the left handle. If not defined, the minimum limit will be used. The value must be in milliseconds date data type. For other numerical value formats, enter the desired value directly. To convert a date to milliseconds, use the site's built-in converter.", + "default": 0 + }, + "max": { + "type": "number", + "title": "Maximum value of the range (in milliseconds for date data type)", + "description": "The maximum value of the range that corresponds to the position of the right handle. If not defined, the maximum limit will be used. The value must be in milliseconds date data type. For other numerical value formats, enter the desired value directly. To convert a date to milliseconds, use the site's built-in converter.", + "default": 1 + } + } + }, + "limit": { + "type": "object", + "title": "Limits of the data set values", + "properties": { + "min": { + "type": "number", + "title": "Minimum Limit", + "description": "The minimum value contained in the dataset. If not defined, the value will be found using the values present in the used field of the layer. To convert a date to milliseconds, use the site's built-in converter.", + "default": 0 + }, + "max": { + "type": "number", + "title": "Maximum Limit", + "description": "The maximum value contained in the dataset. If not defined, the value will be found using the values present in the used field of the layer. To convert a date to milliseconds, use the site's built-in converter.", + "default": 1 + }, + "staticItems": { + "type": "array", + "title": "Static Limit Values", + "items": { + "title": "Value", + "type": "number" + }, + "default": [], + "description": "The values for static limit. Note: the minimum and maximum limits are used to define the lower and upper static limits. Enter only the intermediate values here." + } + } + }, + "units": { + "type": "string", + "title": "Units", + "description": "Shown at the right of the time axis. Keep it short to improve readability.", + "default": "" + }, + "description": { + "type": "string", + "title": "Description", + "description": "Description to add in the section below the slider." + } + }, + "required": [ + "type" + ] + }, + "layers": { + "type": "array", + "title": "Layers", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "The id of the layer for referencing within the viewer (does not relate directly to any external service).", + "title": "Layer id", + "enum":[] + + }, + "field": { + "type": "string", + "description": "The field name to use.", + "title": "Field Name", + "default": "" + }, + "isTimeAware": { + "type": "boolean", + "title": "Is Time Aware", + "default": true, + "description": "If time aware is true, the slider will use the TimeInfo (ESRI) or time dimension (WMS) to extract limits and range." + } + }, + "required": [ + "id, field", + "isTimeAware" + ] + } + } + }, + + "required": [ + "params", + "layers" + ] + }, + + + + "map": { + "$id": "https://cgpv/schema", + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "GeoView Core Config Schema", + + "version": 1.0, + "comments": "Configuration for GeoView core packages, each packages manages it own schema. It correspond to the TypeMapFeaturesInstance type.", + "comments": " in TypeLOcalized string I took out minProperties: 1,because it casused error messages eve if field was not requiered", + + "definitions": { + "TypeLocalizedString": { + + "minProperties": 1, + "type": "object", + "properties": { + "en": { + "type": "string", + "description": "The English version of the string." + }, + "fr": { + "type": "string", + "description": "The French version of the string. " + } + } + }, + + "TypeDetailsLayerConfig": { + + "type": "object", + "properties": { + + "parser": { + "type": "string", + "description": "A path to a javascript file with a function for parsing the layers identify output. Only needed if a custom template is being used." + }, + "template": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "A path to an html template (English/French) that will override default identify output." + } + }, + "required": ["template"] + }, + + "TypeFeatureInfoLayerConfig": { + + "type": "object", + "properties": { + "queryable": { + "type": "boolean", + "default": true, + "title": "Allow querying. Default = true." + }, + "customParser": { "$ref": "#/definitions/TypeDetailsLayerConfig" }, + "nameField": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display field (English/French) of the layer. If it is not present the viewer will make an attempt to find the first valid field." + }, + "outfields": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "A comma separated list of attribute names (English/French) that should be requested on query (all by default)." + }, + "fieldTypes": { + "type": "string", + "description": "A comma separated list of types. Type at index i is associated to the variable at index i." + }, + "aliasFields": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "A comma separated list of attribute names (English/French) that should be use for alias. If empty, no alias will be set if not found." + } + }, + "required": [ + "queryable" + ] + }, + "TypeFeatureInfoNotQueryable": { + + "properties": { + "queryable": { + "const": false, + "description": "Do not allow querying.", + "type": "boolean" + } + }, + "required": [ + "queryable" + ], + "type": "object" + }, + + "TypeStrokeSymbolConfig": { + + "type": "object", + "description": "Stroke style for vector features.", + "minProperties": 1, + "properties": { + "color": { + "type": "string","enum":["select color"] + }, + "lineStyle": { + "enum": [ + "dash", + "dash-dot", + "dash-dot-dot", + "dot", + "longDash", + "longDash-dot", + "null", + "shortDash", + "shortDash-dot", + "shortDash-dot-dot", + "solid" + ] + }, + "width": { + "type": "number" + } + } + }, + + "TypeLineStringVectorConfig": { + + "type": "object", + "properties": { + "type": { "type":"string", + "default": "lineString", + "enum": [ + "lineString" + ] + }, + "stroke": { "$ref": "#/definitions/TypeStrokeSymbolConfig" } + }, + "required": [ + "type", + "stroke" + ] + }, + + "TypePolygonVectorConfig": { + + "type": "object", + "properties": { + "type": {"type":"string", "default": "filledPolygon", + "enum": ["filledPolygon"] + }, + "color": { "type": "string" ,"enum":["select color"]}, + "stroke": { "$ref": "#/definitions/TypeStrokeSymbolConfig" }, + "paternSize": { + "type": "number", + "description": "Distance between patern lines. Default = 8" + }, + "paternWidth": { + "type": "number", + "description": "Patern line width.default = 1." + }, + "fillStyle": { + "enum": [ + "solid", + "backwardDiagonal", + "cross", + "diagonalCross", + "forwardDiagonal", + "horizontal", + "null", + "vertical" + ], + "description": "Kind of filling for vector features. Default = solid. " + } + }, + "required": [ + "type", + "stroke" + ] + }, + + "TypeSimpleSymbolVectorConfig": { + + "type": "object", + "properties": { + "type": {"type":"string", + "default": "simpleSymbol", + "enum": ["simpleSymbol"] + }, + "rotation": { + "type": "number", + "description": "Symbol rotation in radians." + }, + "color": { "type": "string" ,"enum":["select color"]}, + "stroke": { "$ref": "#/definitions/TypeStrokeSymbolConfig" }, + "size": { "type": "number" }, + "offset": { + "type": "array", + "items": { + "type": "number" + }, + "minItems": 2, + "maxItems": 2 + }, + "symbol": { + "enum": [ + "circle", + "+", + "diamond", + "square", + "triangle", + "X", + "star" + ] + } + }, + "required": + ["type", + "symbol" + ] + }, + + "TypeIconSymbolVectorConfig": { + + "type": "object", + "properties": { + "type": {"type":"string", + "default": "iconSymbol", + "enum": ["iconSymbol"] + }, + "mimeType": { "type": "string" }, + "src": { "type": "string" }, + "width": { + "type": "integer", + "description": "Icon width in pixel." + }, + "height": { + "type": "integer", + "description": "Icon height in pixel." + }, + "rotation": { + "type": "number", + "description": "Icon rotation in radians." + }, + "opacity": { + "type": "number", + "minimum": 0, + "maximum": 1, + "default": 1 + }, + "offset": { + "type": "array", + "items": { + "type": "number" + }, + "minItems": 2, + "maxItems": 2 + }, + "crossOrigin": { + "type": "string", + "description": "The crossOrigin attribute for loaded images. Note that you must provide a crossOrigin value if you want to access pixel data with the Canvas renderer." + } + }, + "required": ["type", "mimeType", "src"] + }, + + "TypeSimpleStyleConfig": { + + "type": "object", + "properties": { + "styleId": { + "type": "string" + }, + "styleType": { + "enum": ["simple"], + "default": "simple" + }, + "label": { + "type": "string" + }, + "settings": { "$ref": "#/definitions/TypeKindOfVectorSettings" } + }, + "required": [ + "styleType", + "label", + "settings" + ] + }, + + + "TypeUniqueValueStyleConfig": { + + "type": "object", + "properties": { + "styleId": { + "type": "string" + }, + "styleType": {"type":"string", + "default": "uniqueValue", + "enum": ["uniqueValue"] + }, + "defaultLabel": { + "type": "string", + "description": "Label used if field/value association is not found." + }, + "defaultSettings": { + "$ref": "#/definitions/TypeKindOfVectorSettings", + "description": "Settings used if field/value association is not found." + }, + "defaultVisible": { + "description": "Flag used to show/hide features associated to the default label (default: yes).", + "enum": [ + "yes", + "no", + "always" + ] + }, + "fields": { + "type": "array", + "items": { + "type": "string" + }, + "minItems": 1 + }, + "uniqueValueStyleInfo": { "$ref": "#/definitions/TypeUniqueValueStyleInfo" } + }, + "required": [ + "styleType", + "fields", + "uniqueValueStyleInfo" + ] + }, + + "TypeUniqueValueStyleInfo": { + "type": "array", + "items": { + + "type": "object", + "properties": { + "label": { + "type": "string" + }, + "settings": { + "$ref": "#/definitions/TypeKindOfVectorSettings" + }, + "values": { + "items": { + "oneOf": [ + { "title": "String Value", + "type": "string" + }, + { "title": "Numeric Value", + "type": "number" + } + ] + }, + "minItems": 1, + "type": "array" + }, + "visible": { + "description": "Flag used to show/hide features associated to the label (default: yes).", + "enum": [ + "yes", + "no", + "always" + ] + } + } + + }, + "minItems": 1, + "required": [ + "label", + "values", + "options" + ] + + }, + + "TypeValidMapProjectionCodes": { + "default": 3978, + "description": "Spatial Reference EPSG code supported (https://epsg.io/). We support Web Mercator and Lambert Conical Conform Canada.", + "enum": [ + 3978, + 3857 + ] + }, + + "TypeClassBreakStyleConfig": { + + "type": "object", + "properties": { + "styleId": { + "type": "string" + }, + "styleType": { + "default": "classBreaks", + "enum": ["classBreaks"] + }, + "field": { + "type": "string" + }, + "defaultLabel": { + "type": "string", + "description": "Label used if field/value association is not found." + }, + "defaultSettings": { + "$ref": "#/definitions/TypeKindOfVectorSettings", + "description": "Settings used if field/value association is not found." + }, + "defaultVisible": { + "description": "Flag used to show/hide features associated to the default label (default: yes).", + "default": "yes", + "enum": [ + "yes", + "no", + "always" + ] + }, + + "classBreakStyleInfo": { "$ref": "#/definitions/TypeClassBreakStyleInfo" } + }, + "required": ["styleType", "field", "classBreakStyleInfo"] + }, + + + "TypeClassBreakStyleInfo": { + + "type": "array", + "items": { + + "type": "object", + "properties": { + + "label": { + "type": "string" + }, + "minValue": { + "oneOf": [ + { "title": "minValue String value", + "type": "string" + }, + { "title": "minValue Numeric value", + "type": "number" + } + ] + }, + "maxValue": { + "oneOf": [ + { "title": "maxValue String value", + "type": "string" + }, + { "title": "maxValue Numeric value", + "type": "number" + } + ] + }, + "visible": { + "description": "Flag used to show/hide features associated to the label (default: yes).", + "enum": [ + "yes", + "no", + "always" + ], + "default" : ["no"] + }, + + "settings": { "$ref": "#/definitions/TypeKindOfVectorSettings" } + } + }, + "minItems": 1, + "required": ["label", "minValue", "maxValue", "settings"] + + }, + + "TypeKindOfVectorSettings": { + "oneOf": [ + { "title":"LineString", "$ref": "#/definitions/TypeLineStringVectorConfig" }, + { "title":"Polygon", "$ref": "#/definitions/TypePolygonVectorConfig" }, + { "title":"SimpleSymbol", "$ref": "#/definitions/TypeSimpleSymbolVectorConfig" }, + { "title":"IconSymbol", "$ref": "#/definitions/TypeIconSymbolVectorConfig" } + ] + }, + + "TypeStyleConfig": { + + "minProperties": 1, + "type": "object", + "Title": "Line Style Config", + "description":"Enter Line, Point and Polygon Style Config ", + "properties": { + "LineString": { "description":"Point Style Config ", + + "title":"Line", + + "$ref": "#/definitions/TypeStyleSettings" + }, + "Point": { "description": "Polygon Style Config", + "title":"Point Style", + + "$ref": "#/definitions/TypeStyleSettings" + }, + "Polygon": { + "title":"Polygon Style", + + "$ref": "#/definitions/TypeStyleSettings" + } + } + }, + + "TypeStyleSettings": { + "oneOf": [ {"title":"SimpleStyle", + "$ref": "#/definitions/TypeSimpleStyleConfig" + } , + {"title":"UniqueValueStyle", + "$ref": "#/definitions/TypeUniqueValueStyleConfig" + }, + {"title":"ClassBreakStyle", + "$ref": "#/definitions/TypeClassBreakStyleConfig" + } + ] + }, + + "TypeLayerInitialSettings": { + + "type": "object", + "properties": { + "bounds": { + "description": "The geographic bounding box that contains all the layer's features.", + "items": { + "type": "number" + }, + "maxItems": 4, + "minItems": 4, + "type": "array", + "default":[-16763712,5165908,-5688293,10649806] + }, + "opacity": { + "type": "number", + "minimum": 0, + "maximum": 1, + "default": 1, + "description": "Initial opacity setting." + }, + "visible": { + "default": "yes", + "description": "Initial visibility setting.", + "enum": [ + "yes", + "no", + "always" + ] + }, + "extent": { + "type": "array", + "minItems": 4, + "maxItems": 4, + "items": { + "type": "number" + },"default":[-16763712,5165908,-5688293,10649806], + "description": "The extent that constrains the view. Called with [minX, minY, maxX, maxY] extent coordinates." + }, + "minZoom": { + "type": "integer", + "minimum": 0, + "maximum": 50, + "description": "The minimum view zoom level (exclusive) above which this layer will be visible." + }, + "maxZoom": { + "type": "integer", + "minimum": 0, + "maximum": 50, + "description": "The maximum view zoom level (inclusive) above which this layer will be visible." + }, + "className": { + "type": "string", + "description": "A CSS class name to set to the layer element." + } + } + }, + + "TypeListOfEsriDynamicLayerEntryConfig": { + + "description": "This type is used recursively by the IsValidTypeListOfLayerEntryConfig method coded in config-validation.ts file. It completes the validation of the list of layer entry config.", + "items": { + "oneOf": [ + { "title": "GroupLayerEntry", + "$ref": "#/definitions/TypeLayerGroupEntryConfig" + }, + { "title": "EsriDynamicLayer","$ref": "#/definitions/TypeEsriDynamicLayerEntryConfig" + } + ] + }, + "minItems": 1, + "type": "array" + }, + + "TypeListOfEsriFeatureLayerEntryConfig": { + + "description": "This type is used recursively by the IsValidTypeListOfLayerEntryConfig method coded in config-validation.ts file. It completes the validation of the list of layer entry config.", + "items": { + "oneOf": [ + { "title": "GroupLayerEntry", + "$ref": "#/definitions/TypeLayerGroupEntryConfig" + }, + { "title": "VectorLayerEntry", "$ref": "#/definitions/TypeVectorLayerEntryConfig" + } + ] + }, + "minItems": 1, + "type": "array" + }, + + "TypeListOfGeoCoreLayerEntryConfig": { + + "description": "This type is used recursively by the IsValidTypeListOfLayerEntryConfig method coded in config-validation.ts file. It completes the validation of the list of layer entry config.", + "items": { + "oneOf": [ + { "title": "GroupLayerEntry", + "$ref": "#/definitions/TypeLayerGroupEntryConfig" + }, + { + "title": "GeocoreLayerEntry","$ref": "#/definitions/TypeGeocoreLayerEntryConfig" + } + ] + }, + "minItems": 1, + "type": "array" + }, + + "TypeListOfGeoJSONLayerEntryConfig": { + + "description": "This type is used recursively by the IsValidTypeListOfLayerEntryConfig method coded in config-validation.ts file. It completes the validation of the list of layer entry config.", + "items": { + "oneOf": [ + + { + "title": "VectorLayerEntry", "$ref": "#/definitions/TypeVectorLayerEntryConfig" + } + ] + }, + "minItems": 1, + "type": "array" + }, + + "TypeListOfImageStaticLayerEntryConfig": { + + "description": "This type is used recursively by the IsValidTypeListOfLayerEntryConfig method coded in config-validation.ts file. It completes the validation of the list of layer entry config.", + "items": { + "oneOf": [ + + { + "title": "ImageStaticLayerEntry", "$ref": "#/definitions/TypeImageStaticLayerEntryConfig" + } + ] + }, + "minItems": 1, + "type": "array" + }, + + "TypeListOfGeoPackageLayerEntryConfig": { + + "description": "This type is used recursively by the IsValidTypeListOfLayerEntryConfig method coded in config-validation.ts file. It completes the validation of the list of layer entry config.", + "items": { + "oneOf": [ + + { + "title": "VectorLayerEntry", "$ref": "#/definitions/TypeVectorLayerEntryConfig" + } + ] + }, + "minItems": 1, + "type": "array" + }, + + + "TypeVectorSourceFormats": { + "enum": [ + "GeoJSON", + "EsriJSON", + "KML", + "WFS", + "featureAPI", + "GeoPackage" + ] , + "default": "GeoJSON", + "description": "The feature format used by the XHR feature loader when access path is set." + }, + + "TypeVectorSourceInitialConfig": { + + "type": "object", + "properties": { + "dataAccessPath": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The path (English/French) to reach the data to display. If not specified, metadatAccessPath will be assigne dto it." + }, + "format": { "$ref": "#/definitions/TypeVectorSourceFormats" }, + "dataProjection": { + "type": "string", + "description": "The projection code of the source. Used only for GeoJSON format. Default value is EPSG:4326. " + }, + "featureInfo": { "$ref": "#/definitions/TypeFeatureInfoLayerConfig" }, + "cluster": { "$ref": "#/definitions/TypeSourceVectorClusterConfig" }, + "postSettings": { + "type": "object", + "properties": { + "data": + { + "type": "object" + }, + "header": + { + "type": "object" + } + } + }, + "strategy": { + "default": "all", + "description": "The loading strategy to use. By default an all strategy is used, a one-off strategy which loads all features at once.", + "enum": [ + "all", + "bbox" + ] + } + } + }, + + "TypeSourceVectorClusterConfig": { + + "type": "object", + "description": "Cluster vector data on vector layer. Works out of the box with point geometries. If another geometry is provided, it will be converted to points geometry.", + "properties": { + "enable": { + "type": "boolean", + "default": false + }, + "distance": { + "type": "integer", + "description": "Distance in pixels within which features will be clustered together (default 20px)." + }, + "minDistance": { + "type": "integer", + "description": "Minimum distance in pixels between clusters. Will be capped at the configured distance. By default no minimum distance is guaranteed. This config can be used to avoid overlapping icons. As a tradoff, the cluster feature's position will no longer be the center of all its features." + }, + "settings": { + "$ref": "#/definitions/TypeSimpleSymbolVectorConfig", + "description": "settings for the cluster symbol and clustered geometries" + }, + "splitZoom": { + "description": "Zoom level at which all clusters will split (default 7).", + "type": "integer" + }, + "*": { + "description": "Color for the text showing the number of points in a cluster", + "type": "string" + } + } + }, + + "TypeSourceImageWmsInitialConfig": { + + "type": "object", + "properties": { + "dataAccessPath": { + "$ref": "#/definitions/TypeLocalizedString", + + "description": "The path (English/French) to reach the data to display. If not specified, metadatAccessPath will be assigne dto it." + }, + "crossOrigin": { + "type": "string", + "description": "The crossOrigin attribute for loaded images. Note that you must provide a crossOrigin value if you want to access pixel data with the Canvas renderer." + }, + "projection": { + "type": "integer", + "description": "Spatial Reference EPSG code supported (https://epsg.io/). We support Web Mercator and Lambert Conical Conform Canada." + }, + "featureInfo": { + "$ref": "#/definitions/TypeFeatureInfoLayerConfig" + }, + "serverType": { + "$ref": "#/definitions/TypeOfServer", + "description": "The type of the remote WMS server. The default value is mapserver." + }, + "style": { + "oneOf": [ + { "title":"Single style", + "description": "Single style to apply", + "type": "string" + }, + { "title":"Array of styles", + "description": "Array of style to choose.", + "items": { + "type": "string" + }, + "type": "array" + } + ] + } + } + }, + + "TypeOfServer": { + "enum": [ + "mapserver", + "geoserver", + "qgis"], + "description": "The type of the remote WMS server. The default value is mapserver." + }, + + "TypeSourceImageEsriInitialConfig": { + + "type": "object", + "properties": { + "dataAccessPath": { + "$ref": "#/definitions/TypeLocalizedString", + + "description": "The path (English/French) to reach the data to display. If not specified, metadatAccessPath will be assigne dto it." + }, + "crossOrigin": { + "type": "string", + "description": "The crossOrigin attribute for loaded images. Note that you must provide a crossOrigin value if you want to access pixel data with the Canvas renderer." + }, + "projection": { + "type": "integer", + "description": "Spatial Reference EPSG code supported (https://epsg.io/). We support Web Mercator and Lambert Conical Conform Canada." + }, + "featureInfo": { + "$ref": "#/definitions/TypeFeatureInfoLayerConfig" + }, + "format": { + "$ref": "#/definitions/TypeEsriFormatParameter" + }, + "transparent": { + "type": "boolean", + "default": true, + "description": "If true, the image will be exported with the background color of the map set as its transparent color. Only the .png and .gif formats support transparency." + } + } + }, + + "TypeEsriDynamicLayerEntryConfig": { + + "properties": { + "entryType": { + "type": "string", + "enum": [ + "raster-image" + ], + "default": "raster-image" + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer entry at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "layerFilter": { + "description": "Filter to apply on feature of this layer.", + "type": "string" + }, + "layerId": { + "description": "The id of the layer to display on the map.", + "type": "string" + }, + "layerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "layerPathEnding": { + "description": "The ending element of the layer configuration path.", + "type": "string" + }, + "schemaTag": { + "enum": [ + "esriDynamic" + ], + "default": "esriDynamic" + + }, + "source": { + "$ref": "#/definitions/TypeSourceImageEsriInitialConfig" + }, + "style": { + "$ref": "#/definitions/TypeStyleConfig" + } + }, + "required": [ + "schemaTag", + "entryType", + "layerId" + ], + "type": "object" + }, + + "TypeEsriFormatParameter": { + "enum": ["png", "jpg", "gif", "svg"], + "default": "png", + "description": "The format of the exported image. The default format is png." + }, + + "TypeSourceTileInitialConfig": { + + "properties": { + "dataAccessPath": { + "$ref": "#/definitions/TypeLocalizedString", + + "description": "The path (English/French) to reach the data to display. If not specified, metadatAccessPath will be assigne dto it." + }, + "featureInfo": { + "$ref": "#/definitions/TypeFeatureInfoNotQueryable" + }, + "crossOrigin": { + "type": "string", + "description": "The crossOrigin attribute for loaded images. Note that you must provide a crossOrigin value if you want to access pixel data with the Canvas renderer." + }, + "projection": { + "type": "integer", + "description": "Spatial Reference EPSG code supported (https://epsg.io/). We support Web Mercator and Lambert Conical Conform Canada." + }, + "tileGrid": { "$ref": "#/definitions/TypeTileGrid" } + } + }, + + "TypeTileGrid": { + + "type": "object", + "properties": { + "extent": { + "type": "array", + "maxItems": 4, + "minItems": 4, + "items": + { + "type": "number" + }, + "description": "The extent that constrains the view. Called with [minX, minY, maxX, maxY] extent coordinates." + }, + "origin": { + "type": "array", + "maxItems": 2, + "minItems": 2, + "items": + { + "type": "number" + } + , + "description": "The tile grid origin, i.e. where the x and y axes meet ([z, 0, 0]). Tile coordinates increase left to right and downwards. If not specified, extent must be provided." + }, + "resolutions": { + "type": "array", + "items": { + "type": "number" + }, + "description": "Resolutions. The array index of each resolution needs to match the zoom level. This means that even if a minZoom is configured, the resolutions array will have a length of maxZoom + 1." + }, + "tileSize": { + "type": "array", + "maxItems": 2, + "minItems": 2, + "items": + { + "type": "number" + }, + "default": [256, + 256 + ], + "description": "The tile grid origin, i.e. where the x and y axes meet ([z, 0, 0]). Tile coordinates increase left to right and downwards. If not specified, extent must be provided." + } + }, + "required": ["origin", "resolutions"] + }, + + "TypeVectorHeatmapLayerEntryConfig": { + + "type": "object", + "properties": { + "schemaTag": { + "enum": [ + "not used yet" + ], + "defautl":"not used yet" + + }, + "entryType": { + "type": "string", + "enum": [ + "vector-heatmap" + ], + "default": "vector-heatmap" + }, + "layerPathEnding": { + "description": "The ending element of the layer configuration path.", + "type": "string" + }, + "layerId": { + "type": "string", + "description": "The id of the layer to display on the map." + }, + "layerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer entry at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "source": { "$ref": "#/definitions/TypeVectorSourceInitialConfig" }, + "gradient": { + "type": "array", + "items": { + "type": "string" + }, + "uniqueItems": true, + "minItems": 2, + "default": ["#00f", + "#0ff", + "#0f0", + "#ff0", + "#f00" + ], + "description": "Color gradient of the heatmap, specified as an array of CSS color strings." + }, + "radius": { + "type": "number", + "description": "Radius size in pixels (default 8px)." + }, + "blur": { + "type": "number", + "description": "Blur size in pixels (default 15px)." + }, + "weight": { + "type": "string", + "description": "Feature attribute to use for the weight or a function (ADD FORMAT) that returns a weight from a feature." + } + }, + "required": ["schemaTag", + "layerId", + "entryType" + ] + }, + + "TypeVectorLayerEntryConfig": { + + "type": "object", + "properties": { + "entryType": { + "type": "string", + "default": "vector", + "enum": [ + "vector" + ] + }, + "layerId": { + "type": "string", + "description": "The id of the layer to display on the map." + }, + "layerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "layerFilter": { + "description": "Filter to apply on feature of this layer.", + "type": "string" + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer entry at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "source": { "$ref": "#/definitions/TypeVectorSourceInitialConfig" }, + "style": { "$ref": "#/definitions/TypeStyleConfig" }, + "layerPathEnding": { + "description": "The ending element of the layer configuration path.", + "type": "string" + }, + "schemaTag": { + "enum": [ + "GeoJSON", + "esriFeature", + "ogcWfs", + "ogcFeature", + "GeoPackage" + ] + } + }, + "required": [ + "layerId", + "schemaTag", + "entryType" + ] + }, + + "TypeVectorTileLayerEntryConfig": { + + "type": "object", + "description": "Layer sources providing vector data divided into a tile grid.", + "properties": { + "entryType": { + "type": "string", + "enum": [ + "vector-tile" + ], + "default": "vector-tile" + }, + "layerId": { + "type": "string", + "description": "The id of the layer to display on the map." + }, + "layerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "layerFilter": { + "description": "Filter to apply on feature of this layer.", + "type": "string" + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer entry at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "source": { + "$ref": "#/definitions/TypeVectorTileSourceInitialConfig", + "description": "Information used to configure the source of a vector tile layer." + }, + "layerPathEnding": { + "description": "The ending element of the layer configuration path.", + "type": "string" + }, + "style": { + "$ref": "#/definitions/TypeStyleConfig" + }, + "schemaTag": { + "enum": [ + "not used yet" + ] + } + }, + "required": [ + + "entryType", + "layerId" + ] + }, + + "TypeVectorTileSourceInitialConfig": { + + "type": "object", + "description": "Layer sources providing vector data divided into a tile grid.", + "properties": { + "dataAccessPath": { + "$ref": "#/definitions/TypeLocalizedString", + + "description": "The path (English/French) to reach the data to display. If not specified, metadatAccessPath will be assigne dto it." + }, + "format": { + "enum": ["GeoJSON", "EsriJSON", "KML", "WFS", "MVT", "featureAPI"], + "description": "The feature format used by the XHR feature loader when access path is set." + }, + "dataProjection": { + "type": "string", + "description": "The projection code of the source. Used only for GeoJSON format. Default value is EPSG:4326." + }, + "featureInfo": { "$ref": "#/definitions/TypeFeatureInfoLayerConfig" }, + "style": { "$ref": "#/definitions/TypeStyleConfig" }, + "tileGrid": { + "$ref": "#/definitions/TypeTileGrid" + } + + } + }, + + "TypeTileLayerEntryConfig": { + + "type": "object", + "properties": { + "entryType": { + "type": "string", + "enum": [ + "raster-tile" + ], + "default": "raster-tile" + }, + "layerId": { + "type": "string", + "description": "The id of the layer to display on the map." + }, + "layerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer entry at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "layerPathEnding": { + "description": "The ending element of the layer configuration path.", + "type": "string" + }, + "schemaTag": { + "enum": [ + "ogcWms", + "xyzTiles", + "vectorTiles" + ], + "default": "ogcWms" + }, + "source": { "$ref": "#/definitions/TypeSourceTileInitialConfig" } + }, + "required": [ + "schemaTag", + "entryType", + "layerId" + ] + }, + + "TypeListOfOgcWfsLayerEntryConfig": { + "description": "This type is used recursively by the IsValidTypeListOfLayerEntryConfig method coded in config-validation.ts file. It completes the validation of the list of layer entry config.", + "type": "array", + "minItems": 1, + + "items": { + "oneOf": [ + + { "title" :"VectorLayerEntry", + "$ref": "#/definitions/TypeVectorLayerEntryConfig" + } + ] + } + }, + + "TypeListOfOgcFeatureLayerEntryConfig": { + + "description": "This type is used recursively by the IsValidTypeListOfLayerEntryConfig method coded in config-validation.ts file. It completes the validation of the list of layer entry config.", + "items": { + "oneOf": [ + + { "title" :"VectorLayerEntry", + "$ref": "#/definitions/TypeVectorLayerEntryConfig" + } + ] + }, + "minItems": 1, + "type": "array" + }, + + "TypeListOfOgcWmsLayerEntryConfig": { + + "description": "This type is used recursively by the IsValidTypeListOfLayerEntryConfig method coded in config-validation.ts file. It completes the validation of the list of layer entry config.", + "items": { + "oneOf": [ + + { "title" :"OgcWmsLayerEntry", + "$ref": "#/definitions/TypeOgcWmsLayerEntryConfig" + } + ] + }, + "minItems": 1, + "type": "array" + }, + + "TypeListOfXyzTilesLayerEntryConfig": { + + "description": "This type is used recursively by the IsValidTypeListOfLayerEntryConfig method coded in config-validation.ts file. It completes the validation of the list of layer entry config.", + "items": { + "oneOf": [ + + { "title" :"TileLayerEntry", + "$ref": "#/definitions/TypeTileLayerEntryConfig" + } + ] + }, + "minItems": 1, + "type": "array" + }, + + "TypeGeocoreLayerEntryConfig": { + + "type": "object", + "description": "Layer where configration is extracted by a configuration snippet stored on a server. The server configuration will handle bilangual informations.", + "properties": { + "entryType": { + "type": "string", + "enum": [ + "geocore" + ], + "default": "geocore" + }, + "layerId": { + "type": "string", + "description": "The id of the layer to display on the map." + }, + "geocoreLayerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer entry at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "listOfLayerEntryConfig": { + "$ref": "#/definitions/TypeListOfLayerEntryConfig", + "description": "The list of layer entry configurations to use from the GeoView layer group." + }, + "schemaTag": { + "enum": [ + "geoCore" + ], + "defaut": "geoCore" + }, + "source": { "$ref": "#/definitions/TypeSourceGeocoreConfig" } + }, + "required": ["schemaTag","entryType","layerId"] + }, + + "TypeSourceGeocoreConfig": { + + "type": "object", + "description": "Layer source providing geocore data.", + "properties": { + "dataAccessPath": { + "$ref": "#/definitions/TypeLocalizedString", + + "description": "The url path to the geoCore endpoint (optional, this value should be embeded in the GeoView API)." + }, + "featureInfo": { + "$ref": "#/definitions/TypeFeatureInfoNotQueryable" + } + } + }, + + "TypeOgcWmsLayerEntryConfig": { + "type": "object", + "properties": { + "entryType": { + "type": "string", + "enum": [ + "raster-image" + ], + "default": "raster-image" + }, + + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer entry at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "layerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "schemaTag": { + "enum": [ + "ogcWms" + ], + "default": "ogcWms" + }, + "layerId": { + "type": "string", + "description": "The id of the layer to display on the map." + }, + "layerPathEnding": { + "type": "string", + "description": "The ending element of the layer configuration path." + }, + "layerFilter": { + "type": "string", + "description": "Filter to apply on feature of this layer." + }, + "source": { + "$ref": "#/definitions/TypeSourceImageWmsInitialConfig" + }, + "style": { + "$ref": "#/definitions/TypeStyleConfig" + } + }, + "required": [ + "schemaTag", + "entryType", + "layerId" + ] + }, + + "TypeSourceImageStaticInitialConfig": { + + "properties": { + "crossOrigin": { + "description": "The crossOrigin attribute for loaded images. Note that you must provide a crossOrigin value if you want to access pixel data with the Canvas renderer.", + "type": "string" + }, + "dataAccessPath": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The path (English/French) to reach the data to display. If not specified, metadatAccessPath will be assigne dto it." + + }, + "extent": { + "description": "The extent of the static image. Called with [minX, minY, maxX, maxY] extent coordinates.", + "items": { + "type": "number" + }, + "maxItems": 4, + "minItems": 4, + "type": "array" + }, + "featureInfo": { + "$ref": "#/definitions/TypeFeatureInfoNotQueryable" + }, + "projection": { + "description": "Spatial Reference EPSG code supported (https://epsg.io/). We support Web Mercator and Lambert Conical Conform Canada.", + "type": "integer" + } + }, + "type": "object" + }, + + "TypeLayerEntryType": { "type": "string", + "enum": ["vector", + "vector-tile", + "vector-heatmap", + "raster-tile", + "raster-image", + "geoCore" + ], + "description": "Layer entry data type." + }, + + "TypeLayerGroupEntryConfig": { + + "type": "object", + "description": "Entry used to define a layer Group.", + + "properties": { + "entryType": { "type":"string", + + "enum": [ + "group" + ], + "default": "group" + }, + "layerId": { + "type": "string", + "description": "The id of the layer group to display on the map." + }, + "layerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer group (English/French)." + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer group entries at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "listOfLayerEntryConfig": { + "$ref": "#/definitions/TypeListOfLayerEntryConfig", + "description": "The list of layer entry configurations to use from the GeoView layer group." + } + }, + + "required": ["entryType", "layerId", "listOfLayerEntryConfig"] + }, + + + + + "TypeLayerEntryConfig": { + "type":"object", + "oneOf": [ + { "title": "LayerGroup", + + "type": "object", + "description": "Entry used to define a layer Group.", + + "properties": { + "entryType": {"type":"string", + + "enum": [ + "group" + ], + "default": "group" + }, + "layerId": { + "type": "string", + "description": "The id of the layer group to display on the map." + }, + "layerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer group (English/French)." + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer group entries at creation time. Initial settings are inherited from the parent in the configuration tree." + } + }, + + "required": ["entryType", "layerId"] + } , + {"title":"VectorTileLayer", + + "type": "object", + "description": "Layer sources providing vector data divided into a tile grid.", + "properties": { + "schemaTag": {"type": "string", + "enum": [ + "not used yet" + ], + "default": "not used yet" + }, + "entryType": { + "type": "string", + "enum": [ + "vector-tile" + ], + "default": "vector-tile" + }, + "layerPathEnding": { + "description": "The ending element of the layer configuration path.", + "type": "string" + }, + "layerId": { + "type": "string", + "description": "The id of the layer to display on the map." + }, + "layerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "layerFilter": { + "description": "Filter to apply on feature of this layer.", + "type": "string" + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer entry at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "source": { + "$ref": "#/definitions/TypeVectorTileSourceInitialConfig", + "description": "Information used to configure the source of a vector tile layer." + }, + "style": { + "$ref": "#/definitions/TypeStyleConfig" + } + }, + + "required": [ + "schemaTag", + "entryType", + "layerId" + ] + }, + + { + "title":"GeocoreLayer", + "type": "object", + "description": "Layer where configration is extracted by a configuration snippet stored on a server. The server configuration will handle bilangual informations.", + "properties": { + "schemaTag": { "type":"string", + "enum": [ + "geoCore" + ], + "defaut": "geoCore" + }, + "entryType": {"type": "string", + + "enum": [ + "geocore" + ], + "default": "geocore" + }, + "layerId": { + "type": "string", + "description": "The id of the layer to display on the map." + }, + "geocoreLayerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer entry at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "source": { "$ref": "#/definitions/TypeSourceGeocoreConfig" + }, + "listOfLayerEntryConfig": { + "$ref": "#/definitions/TypeListOfLayerEntryConfig", + "description": "The list of layer entry configurations to use from the GeoView layer group." + } }, + "required": ["schemaTag","entryType","layerId"] + }, + + { "title": "VectorLayer", + "type": "object", + "properties": { + "schemaTag": {"type":"string", + "enum": ["GeoJSON","esriFeature","ogcWfs","ogcFeature","GeoPackage"],"default": "esriFeature" + }, + "entryType": { + "type": "string", + "enum": [ + "vector" + ] ,"default": "vector" + }, + "layerPathEnding": { + "description": "The ending element of the layer configuration path.", + "type": "string" + }, + "layerId": { + "type": "string", + "description": "The id of the layer to display on the map." + }, + "layerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "layerFilter": { + "description": "Filter to apply on feature of this layer.", + "type": "string" + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer entry at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "source": { "$ref": "#/definitions/TypeVectorSourceInitialConfig" }, + "style": { "$ref": "#/definitions/TypeStyleConfig" } + + }, + "required": ["layerId","schemaTag","entryType" ] + } + + , + + { "title": "OgcWmsLayer", + "type": "object", + "properties": { + "schemaTag": { "type": "string", + + "enum": [ + "ogcWms" + ],"default": "ogcWms" + }, + "entryType": { + "type": "string", + + "enum": [ + "raster-image" + ], + "default": "raster-image" + }, + + "layerId": { + "type": "string", + "description": "The id of the layer to display on the map." + }, + "layerPathEnding": { + "type": "string", + "description": "The ending element of the layer configuration path." + }, + + "layerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "layerFilter": { + "type": "string", + "description": "Filter to apply on feature of this layer." + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer entry at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "source": { + "$ref": "#/definitions/TypeSourceImageWmsInitialConfig" + }, + "style": { + "$ref": "#/definitions/TypeStyleConfig" + } + }, + "required": [ "entryType", + "schemaTag", + "layerId" + ] + }, + { + "title": "EsriDynamicLayer", + "properties": { + "schemaTag": { "type": "string", + "enum": [ + "esriDynamic" + ], + "default": "esriDynamic" + + }, + "entryType": { + "type": "string", + "enum": [ + "raster-image" + ], + "default": "raster-image" + }, + "layerId": { + "description": "The id of the layer to display on the map.", + "type": "string" + }, + "layerPathEnding": { + "description": "The ending element of the layer configuration path.", + "type": "string" + }, + "layerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "layerFilter": { + "description": "Filter to apply on feature of this layer.", + "type": "string" + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer entry at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "source": { + "$ref": "#/definitions/TypeSourceImageEsriInitialConfig" + }, + "style": { + "$ref": "#/definitions/TypeStyleConfig" + } + }, + "required": [ + "entryType", + "layerId", + "schemaTag" + ], + "type": "object" + }, + { + "title": "TileLayer", + "type": "object", + "properties":{ + "schemaTag": {"type": "string", + "enum": [ + "ogcWms", + "xyzTiles", + "vectorTiles" + ],"default": "ogcWms" + } , + "entryType": { + "type": "string", + "enum": [ + "raster-tile" + ] ,"default": "raster-tile" + }, + "layerId": { + "type": "string", + "description": "The id of the layer to display on the map." + }, + "layerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer entry at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "layerPathEnding": { + "description": "The ending element of the layer configuration path.", + "type": "string" + }, + "source": { "$ref": "#/definitions/TypeSourceTileInitialConfig" } + + }, + "required": [ + "schemaTag", + "entryType", + "layerId" + ] + } + + + ] + }, + + "TypeListOfLayerEntryConfig": { + "type": "array", + "minItems": 1, + "items": { + "$ref": "#/definitions/TypeLayerEntryConfig" + } + }, + + "TypeMapConfig": { + + "type": "object", + "properties": { + "basemapOptions": { "$ref": "#/definitions/TypeBasemapOptions" }, + "interaction": { "$ref": "#/definitions/TypeInteraction" }, + "listOfGeoviewLayerConfig": { "$ref": "#/definitions/TypeListOfGeoviewLayerConfig" }, + "viewSettings": { "$ref": "#/definitions/TypeViewSettings" }, + "extraOptions": { + "type": "object", + "description": "Additional options used for OpenLayers map options" + } + }, + "required": ["basemapOptions", "interaction", "viewSettings"] + }, + + "TypeBasemapOptions": { + + "type": "object", + "properties": { + "basemapId": { "$ref": "#/definitions/TypeBasemapId" }, + + "shaded": { + "type": "boolean", + "default": true, + "title": "Enable or disable shaded basemap (if basemap id is set to shaded then this should be false)." + + }, + "labeled": { + "type": "boolean", + "default": true, + + "title": "Enable or disable basemap labels" + } + }, + "required": ["basemapId", "shaded", "labeled"] + }, + + "TypeBasemapId": { + "description": "Id of the basemap to use." , + "enum": ["transport", "osm", "simple", "nogeom", "shaded"], + "default": "transport" + + }, + + "TypeInteraction": { + "enum": ["static", "dynamic"], + "default": "dynamic", + "description": "If map is dynamic (pan/zoom) or static to act as a thumbnail (no nav bar)." + }, + + "TypeListOfGeoviewLayerConfig": { + + "description": "List of GeoView Layers in the order which they should be added to the map.", + "type": "array", + + "items": { + "$ref": "#/definitions/TypeGeoviewLayerConfig" + } + }, + + "TypeGeoviewLayerConfig": { + + "type": "object", + "properties": { + "externalDateFormat": { + "description": "Date format used by the getFeatureInfo to output date variable.", + "type": "string" + }, + "geoviewLayerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "metadataAccessPath": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The GeoView layer access path (English/French)." + }, + "geoviewLayerId": { + "description": "The id of the layer for referencing within the viewer (does not relate directly to any external service). The id will have the language extension (id-'lang').", + "type": "string" + }, + "geoviewLayerType": { + "$ref": "#/definitions/TypeGeoviewLayerType", + "description": "Type of GeoView layer." + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the GeoView layer at creation time." + }, + "listOfLayerEntryConfig": { + "$ref": "#/definitions/TypeListOfLayerEntryConfig", + "description": "The layer entries to use from the GeoView layer." + }, + "serviceDateFormat": { + "description": "Date format used by the service endpoint.", + "type": "string" + } + }, + "required": [ + "geoviewLayerType", + "listOfLayerEntryConfig" + ] + }, + + "TypeGeoviewLayerType": { + "type": "string", + "enum": [ + "esriDynamic", + "esriFeature", + "GeoJSON", + "geoCore", + "GeoPackage", + "xyzTiles", + "ogcFeature", + "ogcWfs", + "ogcWms", + "imageStatic", + "vectorTiles" + ], + "default": [ + "esriDynamic" + ], + "description": "Type of GeoView layer." + } + , + "TypeImageStaticLayerEntryConfig": { + + "properties": { + "entryType": { + "enum": [ + "raster-image" + ] + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer entry at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "layerId": { + "description": "The id of the layer to display on the map.", + "type": "string" + }, + "layerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "layerPathEnding": { + "description": "The ending element of the layer configuration path.", + "type": "string" + }, + "schemaTag": { + "enum": [ + "imageStatic" + ] + }, + "source": { + "$ref": "#/definitions/TypeSourceImageStaticInitialConfig" + } + }, + "required": [ + "schemaTag", + "entryType", + "layerId" + ], + "type": "object" + }, + + "TypeViewSettings": { + + "type": "object", + "additionalProperties":true, + "properties": { + "center": { + "type": "array", + "items": [ + + { + "type": "number", + "minimum": -160, + "maximum": 160, + "default": -106, + "description": "Initial longitude value for map center." + }, + { + "type": "number", + "minimum": -80, + "maximum": 80, + "default": 60, + "description": "Initial latitude value for map center." + } + + ] + + }, + "enableRotation": { + "type": "boolean", + "default": true, + "title": "Enable rotation. If false, a rotation constraint that always sets the rotation to zero is used." + }, + "extent": { + "type": "array", + "minItems":4, + "maxItems":4, + "items": { + + "type": "number" + + },"default":[-16763712,5165908,-5688293,10649806], + "description": "The extent that constrains the view. Called with [minX, minY, maxX, maxY] extent coordinates." + }, + "minZoom": { + "type": "integer", + "description": "The minimum zoom level used to determine the resolution constraint. If not set, will use default from basemap.", + "minimum": 0, + "maximum": 50 + }, + "maxZoom": { + "type": "integer", + "description": "The maximum zoom level used to determine the resolution constraint. If not set, will use default from basemap.", + "minimum": 0, + "maximum": 50 + }, + "projection": { "$ref": "#/definitions/TypeValidMapProjectionCodes" }, + "rotation": { + "type": "integer", + "minimum": -360, + "maximum": 360, + "default": 0, + "description": "The initial rotation for the view in degree (positive rotation clockwise, 0 means North). Will be converted to radiant by the viewer." + }, + "zoom": { + "type": "number", + "minimum": 0, + "maximum": 28, + "default": 12, + "description": "Initial map zoom level. Zoom level are define by the basemap zoom levels." + } + }, + "required": ["zoom", "center"] + }, + + "TypeAppBarProps": { + "default": [ + "geolocator" + ], + "description": "Controls availalbe on the application bar.", + "items": { + "enum": [ + "geolocator", + "export" + ] + }, + "minItems": 0, + "type": "array", + "uniqueItems": true + + }, + + "TypeNavBarProps": { + "type": "array", + "uniqueItems": true, + "items": { + "enum": [ + "zoom", + "fullscreen", + "home", + "location", + "export" + ] + }, + "default": [ + "zoom", + "fullscreen", + "home" + ], + "description": "Controls availalbe on the navigation bar.", + "minItems": 0 + }, + + "TypeOverviewMapProps": { + "type": "object", + "additionalProperties": false, + "properties": { + "hideOnZoom": { + "type": "number", + "minimum": 0, + "maximum": 10, + "default": 0, + "description": "Minimum zoom level to show overview map" + } + } + }, + + "TypeMapComponents": { + "type": "array", + "uniqueItems": true, + "items": { + "enum": [ + "overview-map", + "north-arrow", + "geolocator" + ] + }, + "default": [ + "overview-map", + "north-arrow", + "geolocator" + ], + "description": "Core components to initialize on viewer load. The schema for those are inside this file.", + "minItems": 0 + }, + + "TypeMapCorePackages": { + "type": "array", + "uniqueItems": true, + "items": { + "enum": [ + "basemap-panel", + "layers-panel", + "details-panel", + "geolocator-panel", + "footer-panel", + "swiper" + ] + }, + "default": ["basemap-panel", + "layers-panel", + "details-panel", + "geolocator-panel" + ], + "description": "Core packages to initialize on viewer load. The schema for those are on their own package. NOTE: config from packages are in the same loaction as core config (<>-<>.json).", + "minItems": 0 + }, + + "TypeExternalPackages": { + "type": "array", + "items": { + + "type": "object", + "properties": { + "name": { + "type": "string", + + + "description": "External Package name. The name must be ideintical to the window external package object to load." + }, + "configUrl": { + "type": "string", + + "format": "uri", + "description": "The url to the external package configuration setting. The core package will read the configuration and pass it inside the package." + } + }, + "required": ["name"] + }, + "default": [], + "description": "List of external packages to initialize on viewer load.", + "minItems": 0 + }, + + "TypeServiceUrls": { + + "type": "object", + "description": "Service endpoint urls", + "properties": { + "keys": { + "type": "string", + "default": "https://geocore.api.geo.ca", + + "description": "Service end point to access API for layers specification (loading and plugins parameters). By default it is GeoCore but can be another endpoint with similar output." + }, + "geolocator": { + "type": "string", + + "description": "Service end point to access geo location of searched value." + }, + + "proxyUrl": { + "type": "string", + + "description": "An optional proxy to be used for dealing with same-origin issues. URL must either be a relative path on the same server or an absolute path on a server which sets CORS headers." + } + }, + "required": [ + "keys" + ] + }, + + "TypeDisplayLanguage": { + "enum": ["en", "fr"], + "description": "Display languages supported." + }, + + "TypeLocalizedLanguages": { + "enum": ["en", "fr"], + "description": "ISO 639-1 code indicating the languages supported by the configuration file." + }, + + "TypeListOfLocalizedLanguages": { + "type": "array", + "uniqueItems": true, + "items": { "$ref": "#/definitions/TypeLocalizedLanguages" }, + "default": ["en", "fr"], + "description": "ISO 639-1 code indicating the languages supported by the configuration file. It will use value(s) provided here to access bilangual configuration nodes. For value(s) provided here, each bilingual configuration node MUST provide a value.", + "minItems": 1 + }, + + "TypeValidVersions": { + "enum": ["1.0"], + "description": "The schema version that can be used to validate the configuration file. The schema should enumerate the list of versions accepted by this version of the viewer." + }, + + "TypeMapFeaturesInstance": { + + "description": "The map features configuration. This type is used by the IsValidTypeMapFeaturesInstance method coded in config-validation.ts file. It does the validation down to the list of layer entry config.", + "type": "object", + "properties": { + "map": { "$ref": "#/definitions/TypeMapConfig" }, + "appBar": { "$ref": "#/definitions/TypeAppBarProps" }, + "navBar": { "$ref": "#/definitions/TypeNavBarProps" }, + "overviewMap": {"$ref": "#/definitions/TypeOverviewMapProps"}, + "components": { "$ref": "#/definitions/TypeMapComponents" }, + "corePackages": { "$ref": "#/definitions/TypeMapCorePackages" }, + "externalPackages": { "$ref": "#/definitions/TypeExternalPackages" }, + "serviceUrls": { "$ref": "#/definitions/TypeServiceUrls" }, + "suportedLanguages": { "$ref": "#/definitions/TypeListOfLocalizedLanguages" }, + "schemaVersionUsed": { "$ref": "#/definitions/TypeValidVersions" } + }, + "required": ["map", "suportedLanguages"] + } + }, + + "properties": { + "map": { "$ref": "#/definitions/TypeMapConfig" }, + "theme": { "Title": "Map Theme Style", + "enum": [ + "dark", + "light", + "royal" + ], + "default": "dark", + "description": "Theme style of the viewer." + }, + "appBar": { "$ref": "#/definitions/TypeAppBarProps" }, + "navBar": { "$ref": "#/definitions/TypeNavBarProps" }, + "overviewMap": {"$ref": "#/definitions/TypeOverviewMapProps"}, + "components": { "$ref": "#/definitions/TypeMapComponents" }, + "corePackages": { "$ref": "#/definitions/TypeMapCorePackages" }, + "externalPackages": {"$ref": "#/definitions/TypeExternalPackages"}, + "serviceUrls": { "$ref": "#/definitions/TypeServiceUrls" }, + "suportedLanguages": { "$ref": "#/definitions/TypeListOfLocalizedLanguages" }, + "versionUsed": { "$ref": "#/definitions/TypeValidVersions" } + } + }, + + + "areasOfInterest": { + "title": "Areas of Interest", + "type": "object", + "properties": { + "enable": { + "type": "boolean", + "title": "Enable", + "default":true + }, + "areas": { + "type": "array", + "items": { + "type": "object", + "properties": { + "title-en-CA": { + "type": "string", + "title": "English Title" + }, + "title-fr-CA": { + "type": "string", + "title": "French Title" + }, + "xmin": { + "type": "number", + "title": "Minimum value of x", + "default": -4844430 + }, + "ymin": { + "type": "number", + "title": "Minimum value of y", + "default": -1052774 + }, + "xmax": { + "type": "number", + "title": "Maximum value of x", + "default": 5666163 + }, + "ymax": { + "type": "number", + "title": "Maximum value of y", + "default": 4170111 + }, + "wkid": { + "type": "number", + "title": "Spatial Reference", + "default": 3978 + }, + "thumbnailUrl": { + "type": "string", + "title": "Thumbnail URL" + } + }, + "required": [ + "title-en-CA", + "title-fr-CA" + ] + } + } + } + }, + + + "swiper": { + "title": "Swiper", + "type": "object", + "properties": { + "enable": { + "type": "boolean", + "title": "Enable", + "default":true + }, + "type": { + "type": "string", + "title": "Type", + "enum": [ + "vertical", + "horizontal" + ], + "default": "vertical" + }, + "keyboardOffset": { + "type": "number", + "title": "Keyboard Movement", + "description": "Pixel value of swiper displacement.", + "default": 10, + "minimum": 1, + "maximum": 100 + }, + "layers": { + "type": "string", + "title": "Layers", + "description": "The id of the layer for referencing within the viewer (does not relate directly to any external service).", + "enum":[] + } + + + + + + }, + "required": [ + "type", + "keyboardOffset", + "layers" + ] + }, + + "thematicSlider": { + "title": "Thematic Slider", + "type": "object", + "properties": { + "enable": { + "type": "boolean", + "title": "Enable", + "default":true + }, + "open": { + "type": "boolean", + "title": "Open by default", + "default": true + }, + "autorun": { + "type": "boolean", + "title": "Start animation on load", + "defaul": false + }, + "loop": { + "type": "boolean", + "title": "Play the animation in loop", + "default": false + }, + "slider": { + "type": "boolean", + "title": "Enable slider control", + "default": true + }, + "stack": { + "type": "boolean", + "title": "Stack layer visibility", + "default": false + }, + "legendStack": { + "type": "boolean", + "title": "Stack legend items (useful with the stack option to see all active elements legend)", + "default": true + }, + "layers": { + "type": "array", + "title": "Layers", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "The id of the layer for referencing within the viewer (does not relate directly to any external service).", + "title": "Layer id", + "enum":[] + + }, + "duration": { + "type": "number", + "title": "Animation duration in milliseconds", + "minimum": 3000, + "default": 3000 + }, + "title": { + "type": "string", + "title": "Title for this layer animation" + }, + "description": { + "type": "string", + "title": "Description for this layer animation" + }, + "legend": { + "type": "array", + "title": "Legend", + "description": "Add items for a custom legend, leave it blank for default legend.", + "default": [], + "items": { + "type": "object", + "properties": { + "label": { + "type": "string", + "title": "Label" + }, + "image": { + "type": "object", + "properties": { + "url": { + "type": "string", + "title": "URL", + "default": "" + }, + "width": { + "type": "number", + "title": "Width", + "minimum": 25, + "maximum": 150, + "default": 150 + }, + "height": { + "type": "number", + "title": "Height", + "minimum": 25, + "maximum": 150, + "default": 150 + } + }, + "required": [ + "url", + "width", + "height" + ] + } + }, + "required": [ + "image" + ] + } + } + }, + "required": [ + "id", + "duration" + ] + } + }, + "required": [ + "layers" + ] + } + } + } + ] + } + + diff --git a/src/components/db - Copy (2).json b/src/components/db - Copy (2).json new file mode 100644 index 0000000..669b16c --- /dev/null +++ b/src/components/db - Copy (2).json @@ -0,0 +1,4180 @@ +{ + + "plugins": [ + + { "draw": { + + "title": "Draw", + + + + "type": "object", + "properties": { + + "enable": { + "type": "boolean", + "title": "Enable", + "default":true + }, + "open": { + + "type": "boolean", + "title": "Open by default", + "default": true + }, + "tools": { + "type": "array", + "title": "Tools", + "minItems":0, + "uniqueItems": true, + "items":{ + "enum": [ + "picker", + "point", + "polyline", + "polygon", + "edit", + "measure", + "extent", + "write", + "read" + ] + }, + + + "description": "Tools to add to draw toolbar.", + "default": [ + "picker", + "point", + "polyline", + "polygon", + "edit", + "measure", + "extent", + "write", + "read" + ] + } + + }, + "required": [ + "enabled", + "open","tools" + ] + },"chart": { + + "title": "Chart", + "type": "object", + "properties": { + + "enable": { + "type": "boolean", + "title": "Enable", + "description":"chart", + + "default":true + + + }, + "type": { + "title": "Chart Type", + "type": "string", + "enum": [ + "pie", + "bar", + "line" + ], + + "default": "pie" + }, + "title": { + "title": "Title", + "type": "string", + "default": "" + }, + "labelsPie": { + "type": "object", + "title": "Labels", + "properties": { + "type": { + "title": "Type", + "type": "string", + "enum": [ + "field", + "config" + ], + "description": "Retreive the labels from a field or from the configuration.", + "default": "config" + }, + "values": { + "title": "Values", + "type": "string", + "description": "Values separated by semi colon or field name.", + "default": "" + }, + "split": { + "title": "Split Character", + "type": "string", + "description": "Character to use to split list of values.", + "default": ";" + } + }, + "required": [ + "type", + "values", + "split" + ] + }, + "options": { + "title": "Options", + "type": "object", + "properties": { + "colors": { + "title": "Datasets Colors", + "type": "string", + "description": "Hexadecimal color code separated by semicolon. If not provided, default colors will be use.", + "default": "" + }, + "cutOut": { + "title": "Cut Out Percentage", + "type": "number", + "description": "Cut out percentage to use to give doughnut effect.", + "default": 0, + "minimum": 0, + "maximum": 80 + } + }, + "required": [ + "cutOut" + ] + }, + "axis": { + "type": "object", + "title": "Labels", + "properties": { + "xAxis": { + "title": "X Axis", + "type": "object", + "properties": { + "title": { + "title": "Title", + "type": "string", + "default": "" + }, + "type": { + "title": "Type", + "type": "string", + "enum": [ + "field", + "config", + "linear", + "date" + ], + "description": "Retreive the labels from a field or configuration for bar chart or from values (linear or time) for line chart.", + "default": "config" + }, + "values": { + "title": "Values", + "type": "string", + "description": "Values separated by semicolon or field name.", + "default": "" + }, + "split": { + "title": "Split Character", + "type": "string", + "description": "Character to use to split list of values.", + "default": ";" + } + }, + "required": [ + "type", + "values", + "split" + ] + }, + "yAxis": { + "title": "Y Axis", + "type": "object", + "properties": { + "title": { + "title": "Title", + "type": "string", + "default": "" + }, + "type": { + "title": "Type", + "type": "string", + "enum": [ + "field", + "config", + "linear", + "time" + ], + "description": "Retreive the labels from a field or configuration for bar chart or from values (linear or time) for line chart.", + "default": "config" + }, + "values": { + "title": "Values", + "type": "string", + "description": "Values separated by semicolon or field name.", + "default": "" + }, + "split": { + "title": "Split Character", + "type": "string", + "description": "Character to use to split list of values.", + "default": ";" + } + }, + "required": [ + "type", + "values", + "split" + ] + }, + "required": [ + "xAxis", + "yAxis" + ] + } + }, + "layers": { + "type": "array", + "title": "Layers", + "items": { + "type": "object", + "properties": { + "id": { + "title": "Layer ID", + "type": "string", + "description": "", + "enum":["1"] + }, + "nameField": { + "type": "string", + "title": "Name Field", + "description": "Field name to use for the chart selection combo box when multiple charts." + }, + "type": { + "title": "Chart Data Type", + "type": "string", + "enum": [ + "inline", + "link" + ], + "description": "Type of data (inline for items inside the layer or link for items inside a link table).", + "default": "inline" + }, + "linkUrl": { + "type": "string", + "title": "Link URL", + "description": "URL of the link table." + }, + "linkField": { + "type": "string", + "title": "Link Field", + "description": "Field name for the link between the layer and the table." + }, + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "type": { + "title": "Type of data inside the field", + "type": "string", + "enum": [ + "single", + "combine" + ], + "description": "Single if there is only one value inside the field. Combine if we use time axis and time and value are part of the field.", + "default": "combine" + }, + "linkType": { + "title": "Type of link", + "type": "string", + "enum": [ + "single", + "multi" + ], + "description": "How data is structure inside the link table (single for one field for value and one for date OR multiple if there is multiple datasets inside one field and the chart needs to parse).", + "default": "single" + }, + "link": { + "title": "Link Field", + "type": "string", + "description": "Link field to link between layer and table." + }, + "date": { + "title": "Date Field", + "type": "string", + "description": "Field to use for the date" + }, + "measure": { + "title": "Measure Field", + "type": "string" + }, + "values": { + "title": "Label Values", + "type": "string", + "description": "Field name to get labels from for link type multi." + }, + "label": { + "type": "object", + "title": "Dataset Labels", + "properties": { + "type": { + "title": "Type", + "type": "string", + "enum": [ + "field", + "config" + ], + "description": "Retreive the labels from a field or from the configuration.", + "default": "config" + }, + "values": { + "title": "Values", + "type": "string", + "description": "Values separated by semicolon or field name.", + "default": "" + }, + "split": { + "title": "Split Character", + "type": "string", + "description": "Character to use to split list of values.", + "default": ";" + } + }, + "required": [ + "type", + "values", + "split" + ] + }, + "regex": { + "title": "Dataset splitter", + "type": "string", + "description": "

Regex value to split datasets inside the field.

This field is to manage when you have multiple datasets or combine values in the same field. To be able to separate datasets from values, we will use a regex expression. We encourage you to use your data and test your regex expression on a online site like https://regex101.com.

Below we list some samples of datasets and regex:

  • Sample 1
    • Data: [255;255;255];[120;232;23];[32;44;134]
    • Regex: \\\\[|\\\\];\\\\[|\\\\]
    • Ouput: 3 datasets (e.g. 255;255;255). Values inside dataset will be split by the field 'Values Splitter'.
  • Sample 2
    • Data: (2011-03-28,0.511),(2011-04-04,0.421)
    • Regex: \\\\(|\\\\),\\\\(|\\\\)
    • Ouput: 1 datasets, 2 pairs of values (e.g. 2011-03-28,0.511). Values inside are combined (y and x axis) and will be split by the field 'Values Splitter'.

Note: we need to double the '\\' character

", + "default": "\\(|\\),\\(|\\)" + }, + "split": { + "title": "Values splitter", + "type": "string", + "default": ",", + "description": "Character to use to split values inside a field. E.g. a field contains '10;20;30' means there is 3 values split by ';' or [1,2,3];[4,5,6] means there is 2 datasets with 3 values each split by ','." + }, + "prefix": { + "title": "Prefix", + "type": "string", + "default": "", + "description": "Prefix to add to data hover." + }, + "suffix": { + "title": "Suffix", + "type": "string", + "default": "", + "description": "Suffix to add to data hover." + } + }, + "required": [ + "type", + "measure", + "split" + ] + } + }, + "details": { + "type": "object", + "title": "Details", + "properties": { + "enabled": { + "type": "boolean", + "title": "Enable" + }, + "value": { + "type": "string", + "title": "Value", + "description": "String with the custom details in markdown notation." + } + } + } + }, + "required": [ + "id", + "nameField", + "type", + "data" + ] + } + }, + "required": [ + "type", + "layers" + ] + } + },"rangeSlider": { + "$id": "https://cgpv/schema", + "$schema": "http://json-schema.org/draft-07/schema#", + + "title": "Range Slider", + "type": "object", + "properties": { + "enable": { + "type": "boolean", + "title": "Enable", + "default": true + }, + "open": { + "type": "boolean", + "title": "Open by default", + "default": false + }, + "maximize": { + "type": "boolean", + "title": "Slider maximized by default", + "default": false + }, + "maximizeDesc": { + "type": "boolean", + "title": "Description section open by default", + "default": false + }, + "autorun": { + "type": "boolean", + "title": "Start animation on load", + "defaul": false + }, + "loop": { + "type": "boolean", + "title": "Play the animation in loop", + "default": false + }, + "reverse": { + "type": "boolean", + "title": "Animation in reverse mode", + "default": false + }, + "lock": { + "type": "boolean", + "title": "Lock handle", + "default": false + }, + "controls": { + "type": "array", + "minItems":0, + "uniqueItems": true, + + "items": { + "enum": [ + "lock", + "loop", + "delay", + "export", + "refresh", + "reverse" + ] + }, + "default": [ + "lock", + "delay" + ], + "title": "Slider bar controls" + + }, + "params": { + "type": "object", + "title": "Parameters", + "properties": { + "type": { + "title": "Slider Type", + "type": "string", + "enum": [ + "number", + "date", + "wmst" + ], + "description": "If the Date or WMS-T is selected, range and limit must be in milliseconds. Note: Date is for esri layer and WMS-T is for ogc WMS-T layer.", + "default": "number" + }, + "rangeType": { + "title": "Range Type", + "type": "string", + "enum": [ + "single", + "dual" + ], + "description": "Type of range (single for one handle or dual for 2 handles).", + "default": "dual" + }, + "stepType": { + "title": "Step Type", + "type": "string", + "enum": [ + "dynamic", + "static" + ], + "description": "Type of step (dynamic for open values or static from a list of values).", + "default": "dynamic" + }, + "precision": { + "title": "Precision", + "type": "string", + "enum": [ + "0", + "1", + "2", + "date", + "hour" + ], + "description": "Precision of numeric data (0, 1, 2) or date (Date, Hour).", + "default": "0" + }, + "delay": { + "title": "Animation Delay", + "type": "string", + "enum": [ + "3000", + "4000", + "5000", + "6000", + "7000" + ], + "description": "Delay between animations.", + "default": "3000" + }, + "rangeInterval": { + "type": "number", + "title": "Interval (in milliseconds for date data type)", + "default": -1, + "description": "When the limit type is dynamic, this option allows you to define a preset interval between the two handles. The value must be in milliseconds date data type. For other numerical value formats, enter the desired value directly. To convert a time interval into milliseconds, use the built-in converter. Will start at the beginning of the scroll bar, unless the \"Start at end\" option is enabled." + }, + "startRangeEnd": { + "type": "boolean", + "title": "Start interval at the end", + "default": false + }, + "range": { + "type": "object", + "title": "", + "properties": { + "min": { + "type": "number", + "title": "Minimum value of the range (in milliseconds for date data type)", + "description": "The minimum value of the range that corresponds to the position of the left handle. If not defined, the minimum limit will be used. The value must be in milliseconds date data type. For other numerical value formats, enter the desired value directly. To convert a date to milliseconds, use the site's built-in converter.", + "default": 0 + }, + "max": { + "type": "number", + "title": "Maximum value of the range (in milliseconds for date data type)", + "description": "The maximum value of the range that corresponds to the position of the right handle. If not defined, the maximum limit will be used. The value must be in milliseconds date data type. For other numerical value formats, enter the desired value directly. To convert a date to milliseconds, use the site's built-in converter.", + "default": 1 + } + } + }, + "limit": { + "type": "object", + "title": "Limits of the data set values", + "properties": { + "min": { + "type": "number", + "title": "Minimum Limit", + "description": "The minimum value contained in the dataset. If not defined, the value will be found using the values present in the used field of the layer. To convert a date to milliseconds, use the site's built-in converter.", + "default": 0 + }, + "max": { + "type": "number", + "title": "Maximum Limit", + "description": "The maximum value contained in the dataset. If not defined, the value will be found using the values present in the used field of the layer. To convert a date to milliseconds, use the site's built-in converter.", + "default": 1 + }, + "staticItems": { + "type": "array", + "title": "Static Limit Values", + "items": { + "title": "Value", + "type": "number" + }, + "default": [], + "description": "The values for static limit. Note: the minimum and maximum limits are used to define the lower and upper static limits. Enter only the intermediate values here." + } + } + }, + "units": { + "type": "string", + "title": "Units", + "description": "Shown at the right of the time axis. Keep it short to improve readability.", + "default": "" + }, + "description": { + "type": "string", + "title": "Description", + "description": "Description to add in the section below the slider." + } + }, + "required": [ + "type" + ] + }, + "layers": { + "type": "array", + "title": "Layers", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "The id of the layer for referencing within the viewer (does not relate directly to any external service).", + "title": "Layer id", + "enum":[] + + }, + "field": { + "type": "string", + "description": "The field name to use.", + "title": "Field Name", + "default": "" + }, + "isTimeAware": { + "type": "boolean", + "title": "Is Time Aware", + "default": true, + "description": "If time aware is true, the slider will use the TimeInfo (ESRI) or time dimension (WMS) to extract limits and range." + } + }, + "required": [ + "id, field", + "isTimeAware" + ] + } + } + }, + + "required": [ + "params", + "layers" + ] + }, + + + + "map": { + "$id": "https://cgpv/schema", + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "GeoView Core Config Schema", + + "version": 1.0, + "comments": "Configuration for GeoView core packages, each packages manages it own schema. It correspond to the TypeMapFeaturesInstance type.", + "comments": " in TypeLOcalized string I took out minProperties: 1,because it casused error messages eve if field was not requiered", + + "definitions": { + "TypeLocalizedString": { + + "type": "object", + "properties": { + "en": { + "type": "string", + "description": "The English version of the string." + }, + "fr": { + "type": "string", + "description": "The French version of the string. " + } + } + }, + + "TypeDetailsLayerConfig": { + + "type": "object", + "properties": { + + "parser": { + "type": "string", + "description": "A path to a javascript file with a function for parsing the layers identify output. Only needed if a custom template is being used." + }, + "template": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "A path to an html template (English/French) that will override default identify output." + } + }, + "required": ["template"] + }, + + "TypeFeatureInfoLayerConfig": { + + "type": "object", + "properties": { + "queryable": { + "type": "boolean", + "default": true, + "title": "Allow querying. Default = true." + }, + "customParser": { "$ref": "#/definitions/TypeDetailsLayerConfig" }, + "nameField": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display field (English/French) of the layer. If it is not present the viewer will make an attempt to find the first valid field." + }, + "outfields": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "A comma separated list of attribute names (English/French) that should be requested on query (all by default)." + }, + "fieldTypes": { + "type": "string", + "description": "A comma separated list of types. Type at index i is associated to the variable at index i." + }, + "aliasFields": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "A comma separated list of attribute names (English/French) that should be use for alias. If empty, no alias will be set if not found." + } + }, + "required": [ + "queryable" + ] + }, + "TypeFeatureInfoNotQueryable": { + + "properties": { + "queryable": { + "const": false, + "description": "Do not allow querying.", + "type": "boolean" + } + }, + "required": [ + "queryable" + ], + "type": "object" + }, + + "TypeStrokeSymbolConfig": { + + "type": "object", + "description": "Stroke style for vector features.", + "minProperties": 1, + "properties": { + "color": { + "type": "string" + }, + "lineStyle": { + "enum": [ + "dash", + "dash-dot", + "dash-dot-dot", + "dot", + "longDash", + "longDash-dot", + "null", + "shortDash", + "shortDash-dot", + "shortDash-dot-dot", + "solid" + ] + }, + "width": { + "type": "number" + } + }, + "required": [ + "color", + "width", + "lineStyle" + ] + }, + + "TypeLineStringVectorConfig": { + + "type": "object", + "properties": { + "type": { "type":"string", + "default": "lineString", + "enum": [ + "lineString" + ] + }, + "stroke": { "$ref": "#/definitions/TypeStrokeSymbolConfig" } + }, + "required": [ + "type", + "stroke" + ] + }, + + "TypePolygonVectorConfig": { + + "type": "object", + "properties": { + "type": {"type":"string", "default": "filledPolygon", + "enum": ["filledPolygon"] + }, + "color": { "type": "string" }, + "stroke": { "$ref": "#/definitions/TypeStrokeSymbolConfig" }, + "paternSize": { + "type": "number", + "description": "Distance between patern lines. Default = 8" + }, + "paternWidth": { + "type": "number", + "description": "Patern line width.default = 1." + }, + "fillStyle": { + "enum": [ + "solid", + "backwardDiagonal", + "cross", + "diagonalCross", + "forwardDiagonal", + "horizontal", + "null", + "vertical" + ], + "description": "Kind of filling for vector features. Default = solid. " + } + }, + "required": [ + "type", + "stroke" + ] + }, + + "TypeSimpleSymbolVectorConfig": { + + "type": "object", + "properties": { + "type": {"type":"string", + "default": "simpleSymbol", + "enum": ["simpleSymbol"] + }, + "rotation": { + "type": "number", + "description": "Symbol rotation in radians." + }, + "color": { "type": "string" }, + "stroke": { "$ref": "#/definitions/TypeStrokeSymbolConfig" }, + "size": { "type": "number" }, + "offset": { + "type": "array", + "items": { + "type": "number" + }, + "minItems": 2, + "maxItems": 2 + }, + "symbol": { + "enum": [ + "circle", + "+", + "diamond", + "square", + "triangle", + "X", + "star" + ] + } + }, + "required": + ["type", + "symbol" + ] + }, + + "TypeIconSymbolVectorConfig": { + + "type": "object", + "properties": { + "type": {"type":"string", + "default": "iconSymbol", + "enum": ["iconSymbol"] + }, + "mimeType": { "type": "string" }, + "src": { "type": "string" }, + "width": { + "type": "integer", + "description": "Icon width in pixel." + }, + "height": { + "type": "integer", + "description": "Icon height in pixel." + }, + "rotation": { + "type": "number", + "description": "Icon rotation in radians." + }, + "opacity": { + "type": "number", + "minimum": 0, + "maximum": 1, + "default": 1 + }, + "offset": { + "type": "array", + "items": { + "type": "number" + }, + "minItems": 2, + "maxItems": 2 + }, + "crossOrigin": { + "type": "string", + "description": "The crossOrigin attribute for loaded images. Note that you must provide a crossOrigin value if you want to access pixel data with the Canvas renderer." + } + }, + "required": ["type", "mimeType", "src"] + }, + + "TypeSimpleStyleConfig": { + + "type": "object", + "properties": { + "styleId": { + "type": "string" + }, + "styleType": { + "enum": ["simple"], + "default": "simple" + }, + "label": { + "type": "string" + }, + "settings": { "$ref": "#/definitions/TypeKindOfVectorSettings" } + }, + "required": [ + "styleType", + "label", + "settings" + ] + }, + + + "TypeUniqueValueStyleConfig": { + + "type": "object", + "properties": { + "styleId": { + "type": "string" + }, + "styleType": {"type":"string", + "default": "uniqueValue", + "enum": ["uniqueValue"] + }, + "defaultLabel": { + "type": "string", + "description": "Label used if field/value association is not found." + }, + "defaultSettings": { + "$ref": "#/definitions/TypeKindOfVectorSettings", + "description": "Settings used if field/value association is not found." + }, + "defaultVisible": { + "description": "Flag used to show/hide features associated to the default label (default: yes).", + "enum": [ + "yes", + "no", + "always" + ] + }, + "fields": { + "type": "array", + "items": { + "type": "string" + }, + "minItems": 1 + }, + "uniqueValueStyleInfo": { + "type": "array", + "items": { + + "type": "object", + "properties": { + "label": { + "type": "string" + }, + "settings": { + "$ref": "#/definitions/TypeKindOfVectorSettings" + }, + "values": { + "items": { + "oneOf": [ + { "title": "String Value", + "type": "string" + }, + { "title": "Numeric Value", + "type": "number" + } + ] + }, + "minItems": 1, + "type": "array" + }, + "visible": { + "description": "Flag used to show/hide features associated to the label (default: yes).", + "enum": [ + "yes", + "no", + "always" + ] + } + } + + }, + "minItems": 1, + "required": [ + "label", + "values", + "options" + ] + } + }, + "required": [ + "styleType", + "fields", + "uniqueValueStyleInfo" + ] + }, + + "TypeUniqueValueStyleInfo": { + "type": "array", + "items": { + + "type": "object", + "properties": { + "label": { + "type": "string" + }, + "settings": { + "$ref": "#/definitions/TypeKindOfVectorSettings" + }, + "values": { + "items": { + "oneOf": [ + { "title": "String Value", + "type": "string" + }, + { "title": "Numeric Value", + "type": "number" + } + ] + }, + "minItems": 1, + "type": "array" + }, + "visible": { + "description": "Flag used to show/hide features associated to the label (default: yes).", + "enum": [ + "yes", + "no", + "always" + ] + } + } + + }, + "minItems": 1, + "required": [ + "label", + "values", + "options" + ] + + }, + + "TypeValidMapProjectionCodes": { + "default": 3978, + "description": "Spatial Reference EPSG code supported (https://epsg.io/). We support Web Mercator and Lambert Conical Conform Canada.", + "enum": [ + 3978, + 3857 + ] + }, + + "TypeClassBreakStyleConfig": { + + "type": "object", + "properties": { + "styleId": { + "type": "string" + }, + "styleType": { + "default": "classBreaks", + "enum": ["classBreaks"] + }, + "field": { + "type": "string" + }, + "defaultLabel": { + "type": "string", + "description": "Label used if field/value association is not found." + }, + "defaultSettings": { + "$ref": "#/definitions/TypeKindOfVectorSettings", + "description": "Settings used if field/value association is not found." + }, + "defaultVisible": { + "description": "Flag used to show/hide features associated to the default label (default: yes).", + "default": "yes", + "enum": [ + "yes", + "no", + "always" + ] + }, + + "classBreakStyleInfo": { "$ref": "#/definitions/TypeClassBreakStyleInfo" } + }, + "required": ["styleType", "field", "classBreakStyleInfo"] + }, + + + "TypeClassBreakStyleInfo": { + + "type": "array", + "items": { + + "type": "object", + "properties": { + + "label": { + "type": "string" + }, + "minValue": { + "oneOf": [ + { "title": "minValue String value", + "type": "string" + }, + { "title": "minValue Numeric value", + "type": "number" + } + ] + }, + "maxValue": { + "oneOf": [ + { "title": "maxValue String value", + "type": "string" + }, + { "title": "maxValue Numeric value", + "type": "number" + } + ] + }, + "visible": { + "description": "Flag used to show/hide features associated to the label (default: yes).", + "enum": [ + "yes", + "no", + "always" + ], + "default" : ["no"] + }, + + "settings": { "$ref": "#/definitions/TypeKindOfVectorSettings" } + } + }, + "minItems": 1, + "required": ["label", "minValue", "maxValue", "settings"] + + }, + + "TypeKindOfVectorSettings": { + "oneOf": [ + { "title":"LineString", + "type": "object", + "properties": { + "type": { "type":"string", + "default": "lineString", + "enum": [ + "lineString" + ] + }, + "stroke": { "type": "object", + "description": "Stroke style for vector features.", + "minProperties": 1, + "properties": { + "color": { + "type": "string" + }, + "lineStyle": { + "enum": [ + "dash", + "dash-dot", + "dash-dot-dot", + "dot", + "longDash", + "longDash-dot", + "null", + "shortDash", + "shortDash-dot", + "shortDash-dot-dot", + "solid" + ] + }, + "width": { + "type": "number" + } + }, + "required": [ + "color", + "width", + "lineStyle" + ] } + }, + "required": [ + "type", + "stroke" + ] }, + { "title":"Polygon", + "type": "object", + "properties": { + "type": {"type":"string", "default": "filledPolygon", + "enum": ["filledPolygon"] + }, + "color": { "type": "string" }, + "stroke": { + "type": "object" , + "description": "Stroke style for vector features.", + "minProperties": 1, + "properties": { + "color": { + "type": "string" + }, + "lineStyle": { + "enum": [ + "dash", + "dash-dot", + "dash-dot-dot", + "dot", + "longDash", + "longDash-dot", + "null", + "shortDash", + "shortDash-dot", + "shortDash-dot-dot", + "solid" + ] + }, + "width": { + "type": "number" + } + }, + "required": [ + "color", + "width", + "lineStyle" + ] + }, + "paternSize": { + "type": "number", + "description": "Distance between patern lines. Default = 8" + }, + "paternWidth": { + "type": "number", + "description": "Patern line width.default = 1." + }, + "fillStyle": { + "enum": [ + "solid", + "backwardDiagonal", + "cross", + "diagonalCross", + "forwardDiagonal", + "horizontal", + "null", + "vertical" + ], + "description": "Kind of filling for vector features. Default = solid. " + } + }, + "required": [ + "type", + "stroke" + ] }, + { "title":"SimpleSymbol", + "type": "object", + "properties": { + "type": {"type":"string", + "default": "simpleSymbol", + "enum": ["simpleSymbol"] + }, + "rotation": { + "type": "number", + "description": "Symbol rotation in radians." + }, + "color": { "type": "string" }, + "stroke": { + "type": "object", + "description": "Stroke style for vector features.", + "minProperties": 1, + "properties": { + "color": { + "type": "string" + }, + "lineStyle": { + "enum": [ + "dash", + "dash-dot", + "dash-dot-dot", + "dot", + "longDash", + "longDash-dot", + "null", + "shortDash", + "shortDash-dot", + "shortDash-dot-dot", + "solid" + ] + }, + "width": { + "type": "number" + } + }, + "required": [ + "color", + "width", + "lineStyle" + ] + }, + "size": { "type": "number" }, + "offset": { + "type": "array", + "items": { + "type": "number" + }, + "minItems": 2, + "maxItems": 2 + }, + "symbol": { + "enum": [ + "circle", + "+", + "diamond", + "square", + "triangle", + "X", + "star" + ] + } + }, + "required": + ["type", + "symbol" + ] + }, + { "title":"IconSymbol", + "type": "object", + "properties": { + "type": {"type":"string", + "default": "iconSymbol", + "enum": ["iconSymbol"] + }, + "mimeType": { "type": "string" }, + "src": { "type": "string" }, + "width": { + "type": "integer", + "description": "Icon width in pixel." + }, + "height": { + "type": "integer", + "description": "Icon height in pixel." + }, + "rotation": { + "type": "number", + "description": "Icon rotation in radians." + }, + "opacity": { + "type": "number", + "minimum": 0, + "maximum": 1, + "default": 1 + }, + "offset": { + "type": "array", + "items": { + "type": "number" + }, + "minItems": 2, + "maxItems": 2 + }, + "crossOrigin": { + "type": "string", + "description": "The crossOrigin attribute for loaded images. Note that you must provide a crossOrigin value if you want to access pixel data with the Canvas renderer." + } + }, + "required": ["type", "mimeType", "src"] } + ] + }, + + "TypeStyleConfig": { + + "minProperties": 1, + "type": "object", + "Title": "Line Style Config", + "description":"Enter Line, Point and Polygon Style Config ", + "properties": { + "LineString": { "description":"Point Style Config ", + + "title":"Line Style", + + "$ref": "#/definitions/TypeStyleSettings" + }, + "Point": { "description": "Polygon Style Config", + "title":"Point Style", + + "$ref": "#/definitions/TypeStyleSettings" + }, + "Polygon": { + "title":"Polygon Style", + + "$ref": "#/definitions/TypeStyleSettings" + } + } + }, + + "TypeStyleSettings": { + "oneOf": [ {"title":"SimpleStyle", + "type": "object", + "properties": { + "styleId": { + "type": "string" + }, + "styleType": { + "enum": ["simple"], + "default": "simple" + }, + "label": { + "type": "string" + }, + "settings": { + "oneOf": [ + { "title":"LineString", + "type": "object", + "properties": { + "type": { "type":"string", + "default": "lineString", + "enum": [ + "lineString" + ] + }, + "stroke": { "description": "Stroke style for vector features.", + "minProperties": 1, + "properties": { + "color": { + "type": "string" + }, + "lineStyle": { + "enum": [ + "dash", + "dash-dot", + "dash-dot-dot", + "dot", + "longDash", + "longDash-dot", + "null", + "shortDash", + "shortDash-dot", + "shortDash-dot-dot", + "solid" + ] + }, + "width": { + "type": "number" + } + }, + "required": [ + "color", + "width", + "lineStyle" + ] } + }, + "required": [ + "type", + "stroke" + ] }, + { "title":"Polygon", + "type": "object", + "properties": { + "type": {"type":"string", "default": "filledPolygon", + "enum": ["filledPolygon"] + }, + "color": { "type": "string" }, + "stroke": { + "description": "Stroke style for vector features.", + "minProperties": 1, + "properties": { + "color": { + "type": "string" + }, + "lineStyle": { + "enum": [ + "dash", + "dash-dot", + "dash-dot-dot", + "dot", + "longDash", + "longDash-dot", + "null", + "shortDash", + "shortDash-dot", + "shortDash-dot-dot", + "solid" + ] + }, + "width": { + "type": "number" + } + }, + "required": [ + "color", + "width", + "lineStyle" + ] + }, + "paternSize": { + "type": "number", + "description": "Distance between patern lines. Default = 8" + }, + "paternWidth": { + "type": "number", + "description": "Patern line width.default = 1." + }, + "fillStyle": { + "enum": [ + "solid", + "backwardDiagonal", + "cross", + "diagonalCross", + "forwardDiagonal", + "horizontal", + "null", + "vertical" + ], + "description": "Kind of filling for vector features. Default = solid. " + } + }, + "required": [ + "type", + "stroke" + ] }, + { "title":"SimpleSymbol", + "type": "object", + "properties": { + "type": {"type":"string", + "default": "simpleSymbol", + "enum": ["simpleSymbol"] + }, + "rotation": { + "type": "number", + "description": "Symbol rotation in radians." + }, + "color": { "type": "string" }, + "stroke": { + "description": "Stroke style for vector features.", + "minProperties": 1, + "properties": { + "color": { + "type": "string" + }, + "lineStyle": { + "enum": [ + "dash", + "dash-dot", + "dash-dot-dot", + "dot", + "longDash", + "longDash-dot", + "null", + "shortDash", + "shortDash-dot", + "shortDash-dot-dot", + "solid" + ] + }, + "width": { + "type": "number" + } + }, + "required": [ + "color", + "width", + "lineStyle" + ] + }, + "size": { "type": "number" }, + "offset": { + "type": "array", + "items": { + "type": "number" + }, + "minItems": 2, + "maxItems": 2 + }, + "symbol": { + "enum": [ + "circle", + "+", + "diamond", + "square", + "triangle", + "X", + "star" + ] + } + }, + "required": + ["type", + "symbol" + ] + }, + { "title":"IconSymbol", + "type": "object", + "properties": { + "type": {"type":"string", + "default": "iconSymbol", + "enum": ["iconSymbol"] + }, + "mimeType": { "type": "string" }, + "src": { "type": "string" }, + "width": { + "type": "integer", + "description": "Icon width in pixel." + }, + "height": { + "type": "integer", + "description": "Icon height in pixel." + }, + "rotation": { + "type": "number", + "description": "Icon rotation in radians." + }, + "opacity": { + "type": "number", + "minimum": 0, + "maximum": 1, + "default": 1 + }, + "offset": { + "type": "array", + "items": { + "type": "number" + }, + "minItems": 2, + "maxItems": 2 + }, + "crossOrigin": { + "type": "string", + "description": "The crossOrigin attribute for loaded images. Note that you must provide a crossOrigin value if you want to access pixel data with the Canvas renderer." + } + }, + "required": ["type", "mimeType", "src"] } + ] + } + }, + "required": [ + "styleType", + "label", + "settings" + ] + } , + {"title":"UniqueValueStyle", + "type": "object", + "properties": { + "styleId": { + "type": "string" + }, + "styleType": {"type":"string", + "default": "uniqueValue", + "enum": ["uniqueValue"] + }, + "defaultLabel": { + "type": "string", + "description": "Label used if field/value association is not found." + }, + "defaultSettings": { + "oneOf": [ + { "title":"LineString", + "type": "object", + "properties": { + "type": { "type":"string", + "default": "lineString", + "enum": [ + "lineString" + ] + }, + "stroke": { + "description": "Stroke style for vector features.", + "minProperties": 1, + "properties": { + "color": { + "type": "string" + }, + "lineStyle": { + "enum": [ + "dash", + "dash-dot", + "dash-dot-dot", + "dot", + "longDash", + "longDash-dot", + "null", + "shortDash", + "shortDash-dot", + "shortDash-dot-dot", + "solid" + ] + }, + "width": { + "type": "number" + } + }, + "required": [ + "color", + "width", + "lineStyle" + ] + } + }, + "required": [ + "type", + "stroke" + ] }, + { "title":"Polygon", + "type": "object", + "properties": { + "type": {"type":"string", "default": "filledPolygon", + "enum": ["filledPolygon"] + }, + "color": { "type": "string" }, + "stroke": { + "description": "Stroke style for vector features.", + "minProperties": 1, + "properties": { + "color": { + "type": "string" + }, + "lineStyle": { + "enum": [ + "dash", + "dash-dot", + "dash-dot-dot", + "dot", + "longDash", + "longDash-dot", + "null", + "shortDash", + "shortDash-dot", + "shortDash-dot-dot", + "solid" + ] + }, + "width": { + "type": "number" + } + }, + "required": [ + "color", + "width", + "lineStyle" + ] + }, + "paternSize": { + "type": "number", + "description": "Distance between patern lines. Default = 8" + }, + "paternWidth": { + "type": "number", + "description": "Patern line width.default = 1." + }, + "fillStyle": { + "enum": [ + "solid", + "backwardDiagonal", + "cross", + "diagonalCross", + "forwardDiagonal", + "horizontal", + "null", + "vertical" + ], + "description": "Kind of filling for vector features. Default = solid. " + } + }, + "required": [ + "type", + "stroke" + ] }, + { "title":"SimpleSymbol", + "type": "object", + "properties": { + "type": {"type":"string", + "default": "simpleSymbol", + "enum": ["simpleSymbol"] + }, + "rotation": { + "type": "number", + "description": "Symbol rotation in radians." + }, + "color": { "type": "string" }, + "stroke": { + "description": "Stroke style for vector features.", + "minProperties": 1, + "properties": { + "color": { + "type": "string" + }, + "lineStyle": { + "enum": [ + "dash", + "dash-dot", + "dash-dot-dot", + "dot", + "longDash", + "longDash-dot", + "null", + "shortDash", + "shortDash-dot", + "shortDash-dot-dot", + "solid" + ] + }, + "width": { + "type": "number" + } + }, + "required": [ + "color", + "width", + "lineStyle" + ] + }, + "size": { "type": "number" }, + "offset": { + "type": "array", + "items": { + "type": "number" + }, + "minItems": 2, + "maxItems": 2 + }, + "symbol": { + "enum": [ + "circle", + "+", + "diamond", + "square", + "triangle", + "X", + "star" + ] + } + }, + "required": + ["type", + "symbol" + ] + }, + { "title":"IconSymbol", + "type": "object", + "properties": { + "type": {"type":"string", + "default": "iconSymbol", + "enum": ["iconSymbol"] + }, + "mimeType": { "type": "string" }, + "src": { "type": "string" }, + "width": { + "type": "integer", + "description": "Icon width in pixel." + }, + "height": { + "type": "integer", + "description": "Icon height in pixel." + }, + "rotation": { + "type": "number", + "description": "Icon rotation in radians." + }, + "opacity": { + "type": "number", + "minimum": 0, + "maximum": 1, + "default": 1 + }, + "offset": { + "type": "array", + "items": { + "type": "number" + }, + "minItems": 2, + "maxItems": 2 + }, + "crossOrigin": { + "type": "string", + "description": "The crossOrigin attribute for loaded images. Note that you must provide a crossOrigin value if you want to access pixel data with the Canvas renderer." + } + }, + "required": ["type", "mimeType", "src"] } + ] + + }, + "defaultVisible": { + "description": "Flag used to show/hide features associated to the default label (default: yes).", + "enum": [ + "yes", + "no", + "always" + ] + }, + "fields": { + "type": "array", + "items": { + "type": "string" + }, + "minItems": 1 + }, + "uniqueValueStyleInfo": { + "type": "array", + "items": { + + "type": "object", + "properties": { + "label": { + "type": "string" + }, + "settings": { + + }, + "values": { + "items": { + "oneOf": [ + { "title": "String Value", + "type": "string" + }, + { "title": "Numeric Value", + "type": "number" + } + ] + }, + "minItems": 1, + "type": "array" + }, + "visible": { + "description": "Flag used to show/hide features associated to the label (default: yes).", + "enum": [ + "yes", + "no", + "always" + ] + } + } + + }, + "minItems": 1, + "required": [ + "label", + "values", + "options" + ] + } + }, + "required": [ + "styleType", + "fields", + "uniqueValueStyleInfo" + ] + }, + {"title":"ClassBreakStyle", + "type": "object", + "properties": { + "styleId": { + "type": "string" + }, + "styleType": { + "default": "classBreaks", + "enum": ["classBreaks"] + }, + "field": { + "type": "string" + }, + "defaultLabel": { + "type": "string", + "description": "Label used if field/value association is not found." + }, + "defaultSettings": { + "oneOf": [ + { "title":"LineString", + "type": "object", + "properties": { + "type": { "type":"string", + "default": "lineString", + "enum": [ + "lineString" + ] + }, + "stroke": { + "description": "Stroke style for vector features.", + "minProperties": 1, + "properties": { + "color": { + "type": "string" + }, + "lineStyle": { + "enum": [ + "dash", + "dash-dot", + "dash-dot-dot", + "dot", + "longDash", + "longDash-dot", + "null", + "shortDash", + "shortDash-dot", + "shortDash-dot-dot", + "solid" + ] + }, + "width": { + "type": "number" + } + }, + "required": [ + "color", + "width", + "lineStyle" + ] + } + }, + "required": [ + "type", + "stroke" + ] }, + { "title":"Polygon", + "type": "object", + "properties": { + "type": {"type":"string", "default": "filledPolygon", + "enum": ["filledPolygon"] + }, + "color": { "type": "string" }, + "stroke": { + "description": "Stroke style for vector features.", + "minProperties": 1, + "properties": { + "color": { + "type": "string" + }, + "lineStyle": { + "enum": [ + "dash", + "dash-dot", + "dash-dot-dot", + "dot", + "longDash", + "longDash-dot", + "null", + "shortDash", + "shortDash-dot", + "shortDash-dot-dot", + "solid" + ] + }, + "width": { + "type": "number" + } + }, + "required": [ + "color", + "width", + "lineStyle" + ] + }, + "paternSize": { + "type": "number", + "description": "Distance between patern lines. Default = 8" + }, + "paternWidth": { + "type": "number", + "description": "Patern line width.default = 1." + }, + "fillStyle": { + "enum": [ + "solid", + "backwardDiagonal", + "cross", + "diagonalCross", + "forwardDiagonal", + "horizontal", + "null", + "vertical" + ], + "description": "Kind of filling for vector features. Default = solid. " + } + }, + "required": [ + "type", + "stroke" + ] }, + { "title":"SimpleSymbol", + "type": "object", + "properties": { + "type": {"type":"string", + "default": "simpleSymbol", + "enum": ["simpleSymbol"] + }, + "rotation": { + "type": "number", + "description": "Symbol rotation in radians." + }, + "color": { "type": "string" }, + "stroke": { + "description": "Stroke style for vector features.", + "minProperties": 1, + "properties": { + "color": { + "type": "string" + }, + "lineStyle": { + "enum": [ + "dash", + "dash-dot", + "dash-dot-dot", + "dot", + "longDash", + "longDash-dot", + "null", + "shortDash", + "shortDash-dot", + "shortDash-dot-dot", + "solid" + ] + }, + "width": { + "type": "number" + } + }, + "required": [ + "color", + "width", + "lineStyle" + ] + }, + "size": { "type": "number" }, + "offset": { + "type": "array", + "items": { + "type": "number" + }, + "minItems": 2, + "maxItems": 2 + }, + "symbol": { + "enum": [ + "circle", + "+", + "diamond", + "square", + "triangle", + "X", + "star" + ] + } + }, + "required": + ["type", + "symbol" + ] + }, + { "title":"IconSymbol", + "type": "object", + "properties": { + "type": {"type":"string", + "default": "iconSymbol", + "enum": ["iconSymbol"] + }, + "mimeType": { "type": "string" }, + "src": { "type": "string" }, + "width": { + "type": "integer", + "description": "Icon width in pixel." + }, + "height": { + "type": "integer", + "description": "Icon height in pixel." + }, + "rotation": { + "type": "number", + "description": "Icon rotation in radians." + }, + "opacity": { + "type": "number", + "minimum": 0, + "maximum": 1, + "default": 1 + }, + "offset": { + "type": "array", + "items": { + "type": "number" + }, + "minItems": 2, + "maxItems": 2 + }, + "crossOrigin": { + "type": "string", + "description": "The crossOrigin attribute for loaded images. Note that you must provide a crossOrigin value if you want to access pixel data with the Canvas renderer." + } + }, + "required": ["type", "mimeType", "src"] } + ] + }, + "defaultVisible": { + "description": "Flag used to show/hide features associated to the default label (default: yes).", + "default": "yes", + "enum": [ + "yes", + "no", + "always" + ] + }, + + "classBreakStyleInfo": { + "type": "array", + "items": { + + "type": "object", + "properties": { + + "label": { + "type": "string" + }, + "minValue": { + "oneOf": [ + { "title": "minValue String value", + "type": "string" + }, + { "title": "minValue Numeric value", + "type": "number" + } + ] + }, + "maxValue": { + "oneOf": [ + { "title": "maxValue String value", + "type": "string" + }, + { "title": "maxValue Numeric value", + "type": "number" + } + ] + }, + "visible": { + "description": "Flag used to show/hide features associated to the label (default: yes).", + "enum": [ + "yes", + "no", + "always" + ], + "default" : ["no"] + }, + + "settings": { } + } + }, + "minItems": 1, + "required": ["label", "minValue", "maxValue", "settings"] + } + }, + "required": ["styleType", "field", "classBreakStyleInfo"] + } + ] + }, + + "TypeLayerInitialSettings": { + + "type": "object", + "properties": { + "bounds": { + "description": "The geographic bounding box that contains all the layer's features.", + "items": { + "type": "number" + }, + "maxItems": 4, + "minItems": 4, + "type": "array", + "default":[-16763712,5165908,-5688293,10649806] + }, + "opacity": { + "type": "number", + "minimum": 0, + "maximum": 1, + "default": 1, + "description": "Initial opacity setting." + }, + "visible": { + "default": "yes", + "description": "Initial visibility setting.", + "enum": [ + "yes", + "no", + "always" + ] + }, + "extent": { + "type": "array", + "minItems": 4, + "maxItems": 4, + "items": { + "type": "number" + },"default":[-16763712,5165908,-5688293,10649806], + "description": "The extent that constrains the view. Called with [minX, minY, maxX, maxY] extent coordinates." + }, + "minZoom": { + "type": "integer", + "minimum": 0, + "maximum": 50, + "description": "The minimum view zoom level (exclusive) above which this layer will be visible." + }, + "maxZoom": { + "type": "integer", + "minimum": 0, + "maximum": 50, + "description": "The maximum view zoom level (inclusive) above which this layer will be visible." + }, + "className": { + "type": "string", + "description": "A CSS class name to set to the layer element." + } + } + }, + + + "TypeVectorSourceFormats": { + "enum": [ + "GeoJSON", + "EsriJSON", + "KML", + "WFS", + "featureAPI", + "GeoPackage" + ] , + "default": "GeoJSON", + "description": "The feature format used by the XHR feature loader when access path is set." + }, + + "TypeVectorSourceInitialConfig": { + + "type": "object", + "properties": { + "dataAccessPath": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The path (English/French) to reach the data to display. If not specified, metadatAccessPath will be assigne dto it." + }, + "format": { "$ref": "#/definitions/TypeVectorSourceFormats" }, + "dataProjection": { + "type": "string", + "description": "The projection code of the source. Used only for GeoJSON format. Default value is EPSG:4326. " + }, + "featureInfo": { "$ref": "#/definitions/TypeFeatureInfoLayerConfig" }, + + "postSettings": { + "type": "object", + "properties": { + "data": + { + "type": "object" + }, + "header": + { + "type": "object" + } + } + }, + "strategy": { + "default": "all", + "description": "The loading strategy to use. By default an all strategy is used, a one-off strategy which loads all features at once.", + "enum": [ + "all", + "bbox" + ] + } + } + }, + + + + "TypeSourceImageWmsInitialConfig": { + + "type": "object", + "properties": { + "dataAccessPath": { + "$ref": "#/definitions/TypeLocalizedString", + + "description": "The path (English/French) to reach the data to display. If not specified, metadatAccessPath will be assigne dto it." + }, + "crossOrigin": { + "type": "string", + "description": "The crossOrigin attribute for loaded images. Note that you must provide a crossOrigin value if you want to access pixel data with the Canvas renderer." + }, + "projection": { + "type": "integer", + "description": "Spatial Reference EPSG code supported (https://epsg.io/). We support Web Mercator and Lambert Conical Conform Canada." + }, + "featureInfo": { + "$ref": "#/definitions/TypeFeatureInfoLayerConfig" + }, + "serverType": { + "$ref": "#/definitions/TypeOfServer", + "description": "The type of the remote WMS server. The default value is mapserver." + }, + "style": { + "oneOf": [ + { "title":"Single style", + "description": "Single style to apply", + "type": "string" + }, + { "title":"Array of styles", + "description": "Array of style to choose.", + "items": { + "type": "string" + }, + "type": "array" + } + ] + } + } + }, + + "TypeOfServer": { + "enum": [ + "mapserver", + "geoserver", + "qgis"], + "description": "The type of the remote WMS server. The default value is mapserver." + }, + + "TypeSourceImageEsriInitialConfig": { + + "type": "object", + "properties": { + "dataAccessPath": { + "$ref": "#/definitions/TypeLocalizedString", + + "description": "The path (English/French) to reach the data to display. If not specified, metadatAccessPath will be assigne dto it." + }, + "crossOrigin": { + "type": "string", + "description": "The crossOrigin attribute for loaded images. Note that you must provide a crossOrigin value if you want to access pixel data with the Canvas renderer." + }, + "projection": { + "type": "integer", + "description": "Spatial Reference EPSG code supported (https://epsg.io/). We support Web Mercator and Lambert Conical Conform Canada." + }, + "featureInfo": { + "$ref": "#/definitions/TypeFeatureInfoLayerConfig" + }, + "format": { + "$ref": "#/definitions/TypeEsriFormatParameter" + }, + "transparent": { + "type": "boolean", + "default": true, + "description": "If true, the image will be exported with the background color of the map set as its transparent color. Only the .png and .gif formats support transparency." + } + } + }, + + "TypeEsriDynamicLayerEntryConfig": { + + "properties": { + "entryType": { + "type": "string", + "enum": [ + "raster-image" + ], + "default": "raster-image" + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer entry at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "layerFilter": { + "description": "Filter to apply on feature of this layer.", + "type": "string" + }, + "layerId": { + "description": "The id of the layer to display on the map.", + "type": "string" + }, + "layerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "layerPathEnding": { + "description": "The ending element of the layer configuration path.", + "type": "string" + }, + "schemaTag": { + "enum": [ + "esriDynamic" + ], + "default": "esriDynamic" + + }, + "source": { + "$ref": "#/definitions/TypeSourceImageEsriInitialConfig" + }, + "style": { + "$ref": "#/definitions/TypeStyleConfig" + } + }, + "required": [ + "schemaTag", + "entryType", + "layerId" + ], + "type": "object" + }, + + "TypeEsriFormatParameter": { + "enum": ["png", "jpg", "gif", "svg"], + "default": "png", + "description": "The format of the exported image. The default format is png." + }, + + "TypeSourceTileInitialConfig": { + + "properties": { + "dataAccessPath": { + "$ref": "#/definitions/TypeLocalizedString", + + "description": "The path (English/French) to reach the data to display. If not specified, metadatAccessPath will be assigne dto it." + }, + "featureInfo": { + "$ref": "#/definitions/TypeFeatureInfoNotQueryable" + }, + "crossOrigin": { + "type": "string", + "description": "The crossOrigin attribute for loaded images. Note that you must provide a crossOrigin value if you want to access pixel data with the Canvas renderer." + }, + "projection": { + "type": "integer", + "description": "Spatial Reference EPSG code supported (https://epsg.io/). We support Web Mercator and Lambert Conical Conform Canada." + }, + "tileGrid": { "$ref": "#/definitions/TypeTileGrid" } + } + }, + + "TypeTileGrid": { + + "type": "object", + "properties": { + "extent": { + "type": "array", + "maxItems": 4, + "minItems": 4, + "items": + { + "type": "number" + }, + "description": "The extent that constrains the view. Called with [minX, minY, maxX, maxY] extent coordinates." + }, + "origin": { + "type": "array", + "maxItems": 2, + "minItems": 2, + "items": + { + "type": "number" + } + , + "description": "The tile grid origin, i.e. where the x and y axes meet ([z, 0, 0]). Tile coordinates increase left to right and downwards. If not specified, extent must be provided." + }, + "resolutions": { + "type": "array", + "items": { + "type": "number" + }, + "description": "Resolutions. The array index of each resolution needs to match the zoom level. This means that even if a minZoom is configured, the resolutions array will have a length of maxZoom + 1." + }, + "tileSize": { + "type": "array", + "maxItems": 2, + "minItems": 2, + "items": + { + "type": "number" + }, + "default": [256, + 256 + ], + "description": "The tile grid origin, i.e. where the x and y axes meet ([z, 0, 0]). Tile coordinates increase left to right and downwards. If not specified, extent must be provided." + } + }, + "required": ["origin", "resolutions"] + }, + + "TypeVectorHeatmapLayerEntryConfig": { + + "type": "object", + "properties": { + "schemaTag": { + "enum": [ + "not used yet" + ], + "defautl":"not used yet" + + }, + "entryType": { + "type": "string", + "enum": [ + "vector-heatmap" + ], + "default": "vector-heatmap" + }, + "layerPathEnding": { + "description": "The ending element of the layer configuration path.", + "type": "string" + }, + "layerId": { + "type": "string", + "description": "The id of the layer to display on the map." + }, + "layerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer entry at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "source": { "$ref": "#/definitions/TypeVectorSourceInitialConfig" }, + "gradient": { + "type": "array", + "items": { + "type": "string" + }, + "uniqueItems": true, + "minItems": 2, + "default": ["#00f", + "#0ff", + "#0f0", + "#ff0", + "#f00" + ], + "description": "Color gradient of the heatmap, specified as an array of CSS color strings." + }, + "radius": { + "type": "number", + "description": "Radius size in pixels (default 8px)." + }, + "blur": { + "type": "number", + "description": "Blur size in pixels (default 15px)." + }, + "weight": { + "type": "string", + "description": "Feature attribute to use for the weight or a function (ADD FORMAT) that returns a weight from a feature." + } + }, + "required": ["schemaTag", + "layerId", + "entryType" + ] + }, + + "TypeVectorLayerEntryConfig": { + + "type": "object", + "properties": { + "entryType": { + "type": "string", + "default": "vector", + "enum": [ + "vector" + ] + }, + "layerId": { + "type": "string", + "description": "The id of the layer to display on the map." + }, + "layerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "layerFilter": { + "description": "Filter to apply on feature of this layer.", + "type": "string" + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer entry at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "source": { "$ref": "#/definitions/TypeVectorSourceInitialConfig" }, + "style": { "$ref": "#/definitions/TypeStyleConfig" }, + "layerPathEnding": { + "description": "The ending element of the layer configuration path.", + "type": "string" + }, + "schemaTag": { + "enum": [ + "GeoJSON", + "esriFeature", + "ogcWfs", + "ogcFeature", + "GeoPackage" + ] + } + }, + "required": [ + "layerId", + "schemaTag", + "entryType" + ] + }, + + "TypeVectorTileLayerEntryConfig": { + + "type": "object", + "description": "Layer sources providing vector data divided into a tile grid.", + "properties": { + "entryType": { + "type": "string", + "enum": [ + "vector-tile" + ], + "default": "vector-tile" + }, + "layerId": { + "type": "string", + "description": "The id of the layer to display on the map." + }, + "layerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "layerFilter": { + "description": "Filter to apply on feature of this layer.", + "type": "string" + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer entry at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "source": { + "$ref": "#/definitions/TypeVectorTileSourceInitialConfig", + "description": "Information used to configure the source of a vector tile layer." + }, + "layerPathEnding": { + "description": "The ending element of the layer configuration path.", + "type": "string" + }, + "style": { + "$ref": "#/definitions/TypeStyleConfig" + }, + "schemaTag": { + "enum": [ + "not used yet" + ] + } + }, + "required": [ + + "entryType", + "layerId" + ] + }, + + "TypeVectorTileSourceInitialConfig": { + + "type": "object", + "description": "Layer sources providing vector data divided into a tile grid.", + "properties": { + "dataAccessPath": { + "$ref": "#/definitions/TypeLocalizedString", + + "description": "The path (English/French) to reach the data to display. If not specified, metadatAccessPath will be assigne dto it." + }, + "format": { + "enum": ["GeoJSON", "EsriJSON", "KML", "WFS", "MVT", "featureAPI"], + "description": "The feature format used by the XHR feature loader when access path is set." + }, + "dataProjection": { + "type": "string", + "description": "The projection code of the source. Used only for GeoJSON format. Default value is EPSG:4326." + }, + "featureInfo": { "$ref": "#/definitions/TypeFeatureInfoLayerConfig" }, + "style": { "$ref": "#/definitions/TypeStyleConfig" }, + "tileGrid": { + "$ref": "#/definitions/TypeTileGrid" + } + + } + }, + + "TypeTileLayerEntryConfig": { + + "type": "object", + "properties": { + "entryType": { + "type": "string", + "enum": [ + "raster-tile" + ], + "default": "raster-tile" + }, + "layerId": { + "type": "string", + "description": "The id of the layer to display on the map." + }, + "layerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer entry at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "layerPathEnding": { + "description": "The ending element of the layer configuration path.", + "type": "string" + }, + "schemaTag": { + "enum": [ + "ogcWms", + "xyzTiles", + "vectorTiles" + ], + "default": "ogcWms" + }, + "source": { "$ref": "#/definitions/TypeSourceTileInitialConfig" } + }, + "required": [ + "schemaTag", + "entryType", + "layerId" + ] + }, + + + + "TypeGeocoreLayerEntryConfig": { + + "type": "object", + "description": "Layer where configration is extracted by a configuration snippet stored on a server. The server configuration will handle bilangual informations.", + "properties": { + "entryType": { + "type": "string", + "enum": [ + "geocore" + ], + "default": "geocore" + }, + "layerId": { + "type": "string", + "description": "The id of the layer to display on the map." + }, + "geocoreLayerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer entry at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "listOfLayerEntryConfig": { + "$ref": "#/definitions/TypeListOfLayerEntryConfig", + "description": "The list of layer entry configurations to use from the GeoView layer group." + }, + "schemaTag": { + "enum": [ + "geoCore" + ], + "defaut": "geoCore" + }, + "source": { "$ref": "#/definitions/TypeSourceGeocoreConfig" } + }, + "required": ["schemaTag","entryType","layerId"] + }, + + "TypeSourceGeocoreConfig": { + + "type": "object", + "description": "Layer source providing geocore data.", + "properties": { + "dataAccessPath": { + "$ref": "#/definitions/TypeLocalizedString", + + "description": "The url path to the geoCore endpoint (optional, this value should be embeded in the GeoView API)." + }, + "featureInfo": { + "$ref": "#/definitions/TypeFeatureInfoNotQueryable" + } + } + }, + + "TypeOgcWmsLayerEntryConfig": { + "type": "object", + "properties": { + "entryType": { + "type": "string", + "enum": [ + "raster-image" + ], + "default": "raster-image" + }, + + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer entry at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "layerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "schemaTag": { + "enum": [ + "ogcWms" + ], + "default": "ogcWms" + }, + "layerId": { + "type": "string", + "description": "The id of the layer to display on the map." + }, + "layerPathEnding": { + "type": "string", + "description": "The ending element of the layer configuration path." + }, + "layerFilter": { + "type": "string", + "description": "Filter to apply on feature of this layer." + }, + "source": { + "$ref": "#/definitions/TypeSourceImageWmsInitialConfig" + }, + "style": { + "$ref": "#/definitions/TypeStyleConfig" + } + }, + "required": [ + "schemaTag", + "entryType", + "layerId" + ] + }, + + "TypeSourceImageStaticInitialConfig": { + + "properties": { + "crossOrigin": { + "description": "The crossOrigin attribute for loaded images. Note that you must provide a crossOrigin value if you want to access pixel data with the Canvas renderer.", + "type": "string" + }, + "dataAccessPath": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The path (English/French) to reach the data to display. If not specified, metadatAccessPath will be assigne dto it." + + }, + "extent": { + "description": "The extent of the static image. Called with [minX, minY, maxX, maxY] extent coordinates.", + "items": { + "type": "number" + }, + "maxItems": 4, + "minItems": 4, + "type": "array" + }, + "featureInfo": { + "$ref": "#/definitions/TypeFeatureInfoNotQueryable" + }, + "projection": { + "description": "Spatial Reference EPSG code supported (https://epsg.io/). We support Web Mercator and Lambert Conical Conform Canada.", + "type": "integer" + } + }, + "type": "object" + }, + + "TypeLayerEntryType": { "type": "string", + "enum": ["vector", + "vector-tile", + "vector-heatmap", + "raster-tile", + "raster-image", + "geoCore" + ], + "description": "Layer entry data type." + }, + + "TypeLayerGroupEntryConfig": { + + "type": "object", + "description": "Entry used to define a layer Group.", + + "properties": { + "entryType": { "type":"string", + + "enum": [ + "group" + ], + "default": "group" + }, + "layerId": { + "type": "string", + "description": "The id of the layer group to display on the map." + }, + "layerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer group (English/French)." + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer group entries at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "listOfLayerEntryConfig": { + "$ref": "#/definitions/TypeListOfLayerEntryConfig", + "description": "The list of layer entry configurations to use from the GeoView layer group." + } + }, + + "required": ["entryType", "layerId", "listOfLayerEntryConfig"] + }, + + + + + "TypeLayerEntryConfig": { + "type": "object", + "oneOf": [ + + { "title": "OgcWmsLayer", + + "properties": { + "schemaTag": { "type": "string", + + "default": "ogcWms" + }, + "entryType": { + "type": "string", + + + "default": "raster-image" + }, + + "layerId": { + "type": "string", + "description": "The id of the layer to display on the map." + }, + "layerPathEnding": { + "type": "string", + "description": "The ending element of the layer configuration path." + }, + + "layerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "layerFilter": { + "type": "string", + "description": "Filter to apply on feature of this layer." + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apTypeStyleConfiply to the layer entry at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "source": { + "$ref": "#/definitions/TypeSourceImageWmsInitialConfig" + }, + "style": { + "$ref": "#/definitions/TypeStyleConfig" + } + }, + "required": [ "entryType", + "schemaTag", + "layerId" + ] + }, + { "title": "LayerGroup", + + + "description": "Entry used to define a layer Group.", + + "properties": { + "entryType": {"type":"string", + + "enum": [ + "group" + ], + "default": "group" + }, + "layerId": { + "type": "string", + "description": "The id of the layer group to display on the map." + }, + "layerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer group (English/French)." + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer group entries at creation time. Initial settings are inherited from the parent in the configuration tree." + } + }, + + "required": ["entryType", "layerId"] + } , + {"title":"VectorTileLayer", + + + "description": "Layer sources providing vector data divided into a tile grid.", + "properties": { + "schemaTag": {"type": "string", + "enum": [ + "not used yet" + ], + "default": "not used yet" + }, + "entryType": { + "type": "string", + "enum": [ + "vector-tile" + ], + "default": "vector-tile" + }, + "layerPathEnding": { + "description": "The ending element of the layer configuration path.", + "type": "string" + }, + "layerId": { + "type": "string", + "description": "The id of the layer to display on the map." + }, + "layerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "layerFilter": { + "description": "Filter to apply on feature of this layer.", + "type": "string" + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer entry at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "source": { + "$ref": "#/definitions/TypeVectorTileSourceInitialConfig", + "description": "Information used to configure the source of a vector tile layer." + }, + "style": { + "$ref": "#/definitions/TypeStyleConfig" + } + }, + + "required": [ + "schemaTag", + "entryType", + "layerId" + ] + }, + + { + "title":"GeocoreLayer", + + "description": "Layer where configration is extracted by a configuration snippet stored on a server. The server configuration will handle bilangual informations.", + "properties": { + "schemaTag": { + "type":"string", + "enum": ["geoCore"],"defaut":"geoCore" + }, + "entryType": { + "type": "string", + "enum": ["geocore"],"default": "geocore" + }, + "layerId": { + "type": "string", + "description": "The id of the layer to display on the map." + }, + "geocoreLayerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer entry at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "source": { "$ref": "#/definitions/TypeSourceGeocoreConfig" + }, + "listOfLayerEntryConfig": { + "$ref": "#/definitions/TypeListOfLayerEntryConfig", + "description": "The list of layer entry configurations to use from the GeoView layer group." + } }, + "required": ["schemaTag","entryType","layerId"] + }, + + { "title": "VectorLayer", + + "properties": { + "schemaTag": {"type":"string", + "enum": ["GeoJSON","esriFeature","ogcWfs","ogcFeature","GeoPackage"],"default": "esriFeature" + }, + "entryType": { + "type": "string", + "enum": [ + "vector" + ] ,"default": "vector" + }, + "layerPathEnding": { + "description": "The ending element of the layer configuration path.", + "type": "string" + }, + "layerId": { + "type": "string", + "description": "The id of the layer to display on the map." + }, + "layerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "layerFilter": { + "description": "Filter to apply on feature of this layer.", + "type": "string" + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer entry at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "source": { "$ref": "#/definitions/TypeVectorSourceInitialConfig" }, + "style": { "$ref": "#/definitions/TypeStyleConfig" } + + }, + "required": ["layerId","schemaTag","entryType" ] + } + + , + { + "title": "EsriDynamicLayer", + + "properties": { + "schemaTag": { "type": "string", + "enum": [ + "esriDynamic" + ], + "default": "esriDynamic" + + }, + "entryType": { + "type": "string", + "enum": [ + "raster-image" + ], + "default": "raster-image" + }, + "layerId": { + "description": "The id of the layer to display on the map.", + "type": "string" + }, + "layerPathEnding": { + "description": "The ending element of the layer configuration path.", + "type": "string" + }, + "layerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "layerFilter": { + "description": "Filter to apply on feature of this layer.", + "type": "string" + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer entry at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "source": { + "$ref": "#/definitions/TypeSourceImageEsriInitialConfig" + }, + "style": { + "$ref": "#/definitions/TypeStyleConfig" + } + }, + "required": [ + "entryType", + "layerId", + "schemaTag" + ], + "type": "object" + }, + { + "title": "TileLayer", + + "properties":{ + "schemaTag": {"type": "string", + "enum": [ + "ogcWms", + "xyzTiles", + "vectorTiles" + ],"default": "ogcWms" + } , + "entryType": { + "type": "string", + "enum": [ + "raster-tile" + ] ,"default": "raster-tile" + }, + "layerId": { + "type": "string", + "description": "The id of the layer to display on the map." + }, + "layerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer entry at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "layerPathEnding": { + "description": "The ending element of the layer configuration path.", + "type": "string" + }, + "source": { "$ref": "#/definitions/TypeSourceTileInitialConfig" } + + }, + "required": [ + "schemaTag", + "entryType", + "layerId" + ] + } + + + ] ,"default":"OgcWmsLayer" + }, + + "TypeListOfLayerEntryConfig": { + "type": "array", + "minItems": 1, + "items": { + "$ref": "#/definitions/TypeLayerEntryConfig" + } + }, + + "TypeMapConfig": { + + "type": "object", + "properties": { + "basemapOptions": { "$ref": "#/definitions/TypeBasemapOptions" }, + "interaction": { "$ref": "#/definitions/TypeInteraction" }, + "listOfGeoviewLayerConfig": { "$ref": "#/definitions/TypeListOfGeoviewLayerConfig" }, + "viewSettings": { "$ref": "#/definitions/TypeViewSettings" }, + "extraOptions": { + "type": "object", + "description": "Additional options used for OpenLayers map options" + } + }, + "required": ["basemapOptions", "interaction", "viewSettings"] + }, + + "TypeBasemapOptions": { + + "type": "object", + "properties": { + "basemapId": { "$ref": "#/definitions/TypeBasemapId" }, + + "shaded": { + "type": "boolean", + "default": true, + "title": "Enable or disable shaded basemap (if basemap id is set to shaded then this should be false)." + + }, + "labeled": { + "type": "boolean", + "default": true, + + "title": "Enable or disable basemap labels" + } + }, + "required": ["basemapId", "shaded", "labeled"] + }, + + "TypeBasemapId": { + "description": "Id of the basemap to use." , + "enum": ["transport", "osm", "simple", "nogeom", "shaded"], + "default": "transport" + + }, + + "TypeInteraction": { + "enum": ["static", "dynamic"], + "default": "dynamic", + "description": "If map is dynamic (pan/zoom) or static to act as a thumbnail (no nav bar)." + }, + + "TypeListOfGeoviewLayerConfig": { + + "description": "List of GeoView Layers in the order which they should be added to the map.", + "type": "array", + + "items": { + "$ref": "#/definitions/TypeGeoviewLayerConfig" + } + }, + + "TypeGeoviewLayerConfig": { + + "type": "object", + "properties": { + "geoviewLayerId": { + "description": "The id of the layer for referencing within the viewer (does not relate directly to any external service). The id will have the language extension (id-'lang').", + "type": "string" + }, + "geoviewLayerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "metadataAccessPath": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The GeoView layer access path (English/French)." + }, + "geoviewLayerType": { + "$ref": "#/definitions/TypeGeoviewLayerType", + "description": "Type of GeoView layer." + }, + "serviceDateFormat": { + "description": "Date format used by the service endpoint.", + "type": "string" + }, + "externalDateFormat": { + "description": "Date format used by the getFeatureInfo to output date variable.", + "type": "string" + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the GeoView layer at creation time." + }, + "listOfLayerEntryConfig": { + "$ref": "#/definitions/TypeListOfLayerEntryConfig", + "description": "The layer entries to use from the GeoView layer." + } + }, + "required": [ + "geoviewLayerId", + "geoviewLayerName", + "metadataAccessPath", + "geoviewLayerType", + "listOfLayerEntryConfig" + ] + }, + + "TypeGeoviewLayerType": { + "type": "string", + "enum": ["", + "esriDynamic", + "esriFeature", + "GeoJSON", + "geoCore", + "GeoPackage", + "xyzTiles", + "ogcFeature", + "ogcWfs", + "ogcWms", + "imageStatic", + "vectorTiles" + ], + "default": [ + "" + ], + "description": "Type of GeoView layer." + } + , + "TypeImageStaticLayerEntryConfig": { + + "properties": { + "entryType": { + "enum": [ + "raster-image" + ] + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer entry at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "layerId": { + "description": "The id of the layer to display on the map.", + "type": "string" + }, + "layerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "layerPathEnding": { + "description": "The ending element of the layer configuration path.", + "type": "string" + }, + "schemaTag": { + "enum": [ + "imageStatic" + ] + }, + "source": { + "$ref": "#/definitions/TypeSourceImageStaticInitialConfig" + } + }, + "required": [ + "schemaTag", + "entryType", + "layerId" + ], + "type": "object" + }, + + "TypeViewSettings": { + + "type": "object", + + "properties": { + "center": { + "type": "array", + "items": [ + + { + "type": "number", + "minimum": -160, + "maximum": 160, + "default": -106, + "description": "Initial longitude value for map center." + }, + { + "type": "number", + "minimum": -80, + "maximum": 80, + "default": 60, + "description": "Initial latitude value for map center." + } + + ] + + }, + "enableRotation": { + "type": "boolean", + "default": true, + "title": "Enable rotation. If false, a rotation constraint that always sets the rotation to zero is used." + }, + "extent": { + "type": "array", + "minItems":4, + "maxItems":4, + "items": { + + "type": "number" + + },"default":[-16763712,5165908,-5688293,10649806], + "description": "The extent that constrains the view. Called with [minX, minY, maxX, maxY] extent coordinates." + }, + "minZoom": { + "type": "integer", + "description": "The minimum zoom level used to determine the resolution constraint. If not set, will use default from basemap.", + "minimum": 0, + "maximum": 50 + }, + "maxZoom": { + "type": "integer", + "description": "The maximum zoom level used to determine the resolution constraint. If not set, will use default from basemap.", + "minimum": 0, + "maximum": 50 + }, + "projection": { "$ref": "#/definitions/TypeValidMapProjectionCodes" }, + "rotation": { + "type": "integer", + "minimum": -360, + "maximum": 360, + "default": 0, + "description": "The initial rotation for the view in degree (positive rotation clockwise, 0 means North). Will be converted to radiant by the viewer." + }, + "zoom": { + "type": "number", + "minimum": 0, + "maximum": 28, + "default": 12, + "description": "Initial map zoom level. Zoom level are define by the basemap zoom levels." + } + }, + "required": ["zoom", "center"] + }, + + "TypeAppBarProps": { + "default": [ + "geolocator" + ], + "description": "Controls availalbe on the application bar.", + "items": { + "enum": [ + "geolocator", + "export" + ] + }, + "minItems": 0, + "type": "array", + "uniqueItems": true + + }, + + "TypeNavBarProps": { + "type": "array", + "uniqueItems": true, + "items": { + "enum": [ + "zoom", + "fullscreen", + "home", + "location", + "export" + ] + }, + "default": [ + "zoom", + "fullscreen", + "home" + ], + "description": "Controls availalbe on the navigation bar.", + "minItems": 0 + }, + + "TypeFooterTabsProps": { + "type": "object", + + "properties": { + "tabs": { + "type": "object", + "description": "Available tabs", + "properties": { + "core": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "legend", + "layers", + "details", + "data-table", + "time-slider", + "geochart" + ] + }, + "minItems": 1, + "default": [ + "legend", + "layers", + "details", + "data-table" + ], + "uniqueItems": true, + "description": "Default core tabs of footer panel to use" + }, + "custom": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "defaultTabs": { + "type": "string" + }, + "contentHTML": { + "type": "string" + } + } + }, + "minItems": 0, + "default": [], + "uniqueItems": true, + "description": "Custom tabs of footer panel to use" + } + } + + }, + "collapsed": { + "type": "boolean", + "default": false, + "description": "State of footer panel when map is loaded (expanded or collapsed)" + } + }, + "required": [ + "tabs" + ] + }, + + "TypeAppBarTabsProps": { + "type": "object", + + "properties": { + "tabs": { + "type": "object", + "description": "Available tabs", + "properties": { + "core": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "basemap-panel", + "layers", + "geochart" + ] + }, + "minItems": 1, + "default": [ "basemap-panel"], + "uniqueItems": true, + "description": "Default core tabs of app-bar to use" + }, + "custom": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "defaultTabs": { + "type": "string" + }, + "contentHTML": { + "type": "string" + } + } + }, + "minItems": 0, + "default": [], + "uniqueItems": true, + "description": "Custom tabs of app-bar to use" + } + } + + }, + "collapsed": { + "type": "boolean", + "default": false, + "description": "State of app-bar when map is loaded (expanded or collapsed)" + } + }, + "required": [ + "tabs" + ] + }, + + "TypeOverviewMapProps": { + "type": "object", + + "properties": { + "hideOnZoom": { + "type": "number", + "minimum": 0, + "maximum": 10, + "default": 0, + "description": "Minimum zoom level to show overview map" + } + } + }, + + "TypeMapComponents": { + "type": "array", + "uniqueItems": true, + "items": { + "enum": [ + "overview-map", + "north-arrow", + "geolocator" + ] + }, + "default": [ + "overview-map", + "north-arrow", + "geolocator" + ], + "description": "Core components to initialize on viewer load. The schema for those are inside this file.", + + "minItems": 0 + }, + + "TypeMapCorePackages": { + "type": "array", + "uniqueItems": true, + "items": { + "enum": [ + "basemap-panel", + "layers-panel", + "details-panel", + "geolocator-panel", + "swiper", + "geochart", + "time-slider" + ] + }, + "default": ["basemap-panel" + ], + "description": "Core packages to initialize on viewer load. The schema for those are on their own package. NOTE: config from packages are in the same loaction as core config (<>-<>.json).", + + "minItems": 0 + }, + + "TypeExternalPackages": { + "type": "array", + "items": { + + "type": "object", + "properties": { + "name": { + "type": "string", + + + "description": "External Package name. The name must be ideintical to the window external package object to load." + }, + "configUrl": { + "type": "string", + + "format": "uri", + "description": "The url to the external package configuration setting. The core package will read the configuration and pass it inside the package." + } + }, + "required": ["name"] + }, + "default": [], + "description": "List of external packages to initialize on viewer load.", + "minItems": 0 + }, + + "TypeServiceUrls": { + + "type": "object", + "description": "Service endpoint urls", + "properties": { + "keys": { + "type": "string", + "default": "https://geocore.api.geo.ca", + + "description": "Service end point to access API for layers specification (loading and plugins parameters). By default it is GeoCore but can be another endpoint with similar output." + }, + "geolocator": { + "type": "string", + + "description": "Service end point to access geo location of searched value." + }, + + "proxyUrl": { + "type": "string", + + "description": "An optional proxy to be used for dealing with same-origin issues. URL must either be a relative path on the same server or an absolute path on a server which sets CORS headers." + } + }, + "required": [ + "keys" + ] + }, + + "TypeDisplayLanguage": { + "enum": ["en", "fr"], + "description": "Display languages supported." + }, + + "TypeLocalizedLanguages": { + "enum": ["en", "fr"], + "description": "ISO 639-1 code indicating the languages supported by the configuration file." + }, + + "TypeListOfLocalizedLanguages": { + "type": "array", + "uniqueItems": true, + "items": { "$ref": "#/definitions/TypeLocalizedLanguages" }, + "default": ["en"], + "description": "ISO 639-1 code indicating the languages supported by the configuration file. It will use value(s) provided here to access bilangual configuration nodes. For value(s) provided here, each bilingual configuration node MUST provide a value.", + "minItems": 1 + }, + + "TypeValidVersions": { + "enum": ["1.0"], + "description": "The schema version that can be used to validate the configuration file. The schema should enumerate the list of versions accepted by this version of the viewer." + }, + + "TypeMapFeaturesInstance": { + + "description": "The map features configuration. This type is used by the IsValidTypeMapFeaturesInstance method coded in config-validation.ts file. It does the validation down to the list of layer entry config.", + "type": "object", + "properties": { + "mapId": { "type": "string" }, + "map": { "$ref": "#/definitions/TypeMapConfig" }, + "appBar": { "$ref": "#/definitions/TypeAppBarProps" }, + "navBar": { "$ref": "#/definitions/TypeNavBarProps" }, + "footerTabs": { "$ref": "#/definitions/TypeFooterTabsProps"}, + "appBarTabs": {"$ref": "#/definitions/TypeAppBarTabsProps"}, + "overviewMap": {"$ref": "#/definitions/TypeOverviewMapProps"}, + "components": { "$ref": "#/definitions/TypeMapComponents" }, + "corePackages": { "$ref": "#/definitions/TypeMapCorePackages" }, + "externalPackages": { "$ref": "#/definitions/TypeExternalPackages" }, + "serviceUrls": { "$ref": "#/definitions/TypeServiceUrls" }, + "suportedLanguages": { "$ref": "#/definitions/TypeListOfLocalizedLanguages" }, + "schemaVersionUsed": { "$ref": "#/definitions/TypeValidVersions" } + }, + "required": ["map", "suportedLanguages"] + } + }, + + "properties": { + "mapId": { "type": "string" }, + "map": { "$ref": "#/definitions/TypeMapConfig" }, + "theme": { "Title": "Map Theme Style", + "enum": [ + "dark", + "light", + "geo.ca" + ], + "default": "dark", + "description": "Theme style of the viewer." + }, + "appBar": { "$ref": "#/definitions/TypeAppBarProps" }, + "navBar": { "$ref": "#/definitions/TypeNavBarProps" }, + "footerTabs": { "$ref": "#/definitions/TypeFooterTabsProps"}, + "appBarTabs": {"$ref": "#/definitions/TypeAppBarTabsProps"}, + "overviewMap": {"$ref": "#/definitions/TypeOverviewMapProps"}, + "components": { "$ref": "#/definitions/TypeMapComponents" }, + "corePackages": { "$ref": "#/definitions/TypeMapCorePackages" }, + "externalPackages": {"$ref": "#/definitions/TypeExternalPackages"}, + "serviceUrls": { "$ref": "#/definitions/TypeServiceUrls" }, + "suportedLanguages": { "$ref": "#/definitions/TypeListOfLocalizedLanguages" }, + "versionUsed": { "$ref": "#/definitions/TypeValidVersions" } + } + }, + + + "areasOfInterest": { + "title": "Areas of Interest", + "type": "object", + "properties": { + "enable": { + "type": "boolean", + "title": "Enable", + "default":true + }, + "areas": { + "type": "array", + "items": { + "type": "object", + "properties": { + "title-en-CA": { + "type": "string", + "title": "English Title" + }, + "title-fr-CA": { + "type": "string", + "title": "French Title" + }, + "xmin": { + "type": "number", + "title": "Minimum value of x", + "default": -4844430 + }, + "ymin": { + "type": "number", + "title": "Minimum value of y", + "default": -1052774 + }, + "xmax": { + "type": "number", + "title": "Maximum value of x", + "default": 5666163 + }, + "ymax": { + "type": "number", + "title": "Maximum value of y", + "default": 4170111 + }, + "wkid": { + "type": "number", + "title": "Spatial Reference", + "default": 3978 + }, + "thumbnailUrl": { + "type": "string", + "title": "Thumbnail URL" + } + }, + "required": [ + "title-en-CA", + "title-fr-CA" + ] + } + } + } + }, + + + "swiper": { + "title": "Swiper", + "type": "object", + "properties": { + "enable": { + "type": "boolean", + "title": "Enable", + "default":true + }, + "type": { + "type": "string", + "title": "Type", + "enum": [ + "vertical", + "horizontal" + ], + "default": "vertical" + }, + "keyboardOffset": { + "type": "number", + "title": "Keyboard Movement", + "description": "Pixel value of swiper displacement.", + "default": 10, + "minimum": 1, + "maximum": 100 + }, + "layers": { + "type": "string", + "title": "Layers", + "description": "The id of the layer for referencing within the viewer (does not relate directly to any external service).", + "enum":[] + } + + + + + + }, + "required": [ + "type", + "keyboardOffset", + "layers" + ] + }, + + "thematicSlider": { + "title": "Thematic Slider", + "type": "object", + "properties": { + "enable": { + "type": "boolean", + "title": "Enable", + "default":true + }, + "open": { + "type": "boolean", + "title": "Open by default", + "default": true + }, + "autorun": { + "type": "boolean", + "title": "Start animation on load", + "defaul": false + }, + "loop": { + "type": "boolean", + "title": "Play the animation in loop", + "default": false + }, + "slider": { + "type": "boolean", + "title": "Enable slider control", + "default": true + }, + "stack": { + "type": "boolean", + "title": "Stack layer visibility", + "default": false + }, + "legendStack": { + "type": "boolean", + "title": "Stack legend items (useful with the stack option to see all active elements legend)", + "default": true + }, + "layers": { + "type": "array", + "title": "Layers", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "The id of the layer for referencing within the viewer (does not relate directly to any external service).", + "title": "Layer id", + "enum":[] + + }, + "duration": { + "type": "number", + "title": "Animation duration in milliseconds", + "minimum": 3000, + "default": 3000 + }, + "title": { + "type": "string", + "title": "Title for this layer animation" + }, + "description": { + "type": "string", + "title": "Description for this layer animation" + }, + "legend": { + "type": "array", + "title": "Legend", + "description": "Add items for a custom legend, leave it blank for default legend.", + "default": [], + "items": { + "type": "object", + "properties": { + "label": { + "type": "string", + "title": "Label" + }, + "image": { + "type": "object", + "properties": { + "url": { + "type": "string", + "title": "URL", + "default": "" + }, + "width": { + "type": "number", + "title": "Width", + "minimum": 25, + "maximum": 150, + "default": 150 + }, + "height": { + "type": "number", + "title": "Height", + "minimum": 25, + "maximum": 150, + "default": 150 + } + }, + "required": [ + "url", + "width", + "height" + ] + } + }, + "required": [ + "image" + ] + } + } + }, + "required": [ + "id", + "duration" + ] + } + }, + "required": [ + "layers" + ] + } + } + } + ] + } + + diff --git a/src/components/db - Copy (3).json b/src/components/db - Copy (3).json new file mode 100644 index 0000000..a2e6f2c --- /dev/null +++ b/src/components/db - Copy (3).json @@ -0,0 +1,4160 @@ +{ + + "plugins": [ + + { "draw": { + + "title": "Draw", + + + + "type": "object", + "properties": { + + "enable": { + "type": "boolean", + "title": "Enable", + "default":true + }, + "open": { + + "type": "boolean", + "title": "Open by default", + "default": true + }, + "tools": { + "type": "array", + "title": "Tools", + "minItems":0, + "uniqueItems": true, + "items":{ + "enum": [ + "picker", + "point", + "polyline", + "polygon", + "edit", + "measure", + "extent", + "write", + "read" + ] + }, + + + "description": "Tools to add to draw toolbar.", + "default": [ + "picker", + "point", + "polyline", + "polygon", + "edit", + "measure", + "extent", + "write", + "read" + ] + } + + }, + "required": [ + "enabled", + "open","tools" + ] + },"chart": { + + "title": "Chart", + "type": "object", + "properties": { + + "enable": { + "type": "boolean", + "title": "Enable", + "description":"chart", + + "default":true + + + }, + "type": { + "title": "Chart Type", + "type": "string", + "enum": [ + "pie", + "bar", + "line" + ], + + "default": "pie" + }, + "title": { + "title": "Title", + "type": "string", + "default": "" + }, + "labelsPie": { + "type": "object", + "title": "Labels", + "properties": { + "type": { + "title": "Type", + "type": "string", + "enum": [ + "field", + "config" + ], + "description": "Retreive the labels from a field or from the configuration.", + "default": "config" + }, + "values": { + "title": "Values", + "type": "string", + "description": "Values separated by semi colon or field name.", + "default": "" + }, + "split": { + "title": "Split Character", + "type": "string", + "description": "Character to use to split list of values.", + "default": ";" + } + }, + "required": [ + "type", + "values", + "split" + ] + }, + "options": { + "title": "Options", + "type": "object", + "properties": { + "colors": { + "title": "Datasets Colors", + "type": "string", + "description": "Hexadecimal color code separated by semicolon. If not provided, default colors will be use.", + "default": "" + }, + "cutOut": { + "title": "Cut Out Percentage", + "type": "number", + "description": "Cut out percentage to use to give doughnut effect.", + "default": 0, + "minimum": 0, + "maximum": 80 + } + }, + "required": [ + "cutOut" + ] + }, + "axis": { + "type": "object", + "title": "Labels", + "properties": { + "xAxis": { + "title": "X Axis", + "type": "object", + "properties": { + "title": { + "title": "Title", + "type": "string", + "default": "" + }, + "type": { + "title": "Type", + "type": "string", + "enum": [ + "field", + "config", + "linear", + "date" + ], + "description": "Retreive the labels from a field or configuration for bar chart or from values (linear or time) for line chart.", + "default": "config" + }, + "values": { + "title": "Values", + "type": "string", + "description": "Values separated by semicolon or field name.", + "default": "" + }, + "split": { + "title": "Split Character", + "type": "string", + "description": "Character to use to split list of values.", + "default": ";" + } + }, + "required": [ + "type", + "values", + "split" + ] + }, + "yAxis": { + "title": "Y Axis", + "type": "object", + "properties": { + "title": { + "title": "Title", + "type": "string", + "default": "" + }, + "type": { + "title": "Type", + "type": "string", + "enum": [ + "field", + "config", + "linear", + "time" + ], + "description": "Retreive the labels from a field or configuration for bar chart or from values (linear or time) for line chart.", + "default": "config" + }, + "values": { + "title": "Values", + "type": "string", + "description": "Values separated by semicolon or field name.", + "default": "" + }, + "split": { + "title": "Split Character", + "type": "string", + "description": "Character to use to split list of values.", + "default": ";" + } + }, + "required": [ + "type", + "values", + "split" + ] + }, + "required": [ + "xAxis", + "yAxis" + ] + } + }, + "layers": { + "type": "array", + "title": "Layers", + "items": { + "type": "object", + "properties": { + "id": { + "title": "Layer ID", + "type": "string", + "description": "", + "enum":["1"] + }, + "nameField": { + "type": "string", + "title": "Name Field", + "description": "Field name to use for the chart selection combo box when multiple charts." + }, + "type": { + "title": "Chart Data Type", + "type": "string", + "enum": [ + "inline", + "link" + ], + "description": "Type of data (inline for items inside the layer or link for items inside a link table).", + "default": "inline" + }, + "linkUrl": { + "type": "string", + "title": "Link URL", + "description": "URL of the link table." + }, + "linkField": { + "type": "string", + "title": "Link Field", + "description": "Field name for the link between the layer and the table." + }, + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "type": { + "title": "Type of data inside the field", + "type": "string", + "enum": [ + "single", + "combine" + ], + "description": "Single if there is only one value inside the field. Combine if we use time axis and time and value are part of the field.", + "default": "combine" + }, + "linkType": { + "title": "Type of link", + "type": "string", + "enum": [ + "single", + "multi" + ], + "description": "How data is structure inside the link table (single for one field for value and one for date OR multiple if there is multiple datasets inside one field and the chart needs to parse).", + "default": "single" + }, + "link": { + "title": "Link Field", + "type": "string", + "description": "Link field to link between layer and table." + }, + "date": { + "title": "Date Field", + "type": "string", + "description": "Field to use for the date" + }, + "measure": { + "title": "Measure Field", + "type": "string" + }, + "values": { + "title": "Label Values", + "type": "string", + "description": "Field name to get labels from for link type multi." + }, + "label": { + "type": "object", + "title": "Dataset Labels", + "properties": { + "type": { + "title": "Type", + "type": "string", + "enum": [ + "field", + "config" + ], + "description": "Retreive the labels from a field or from the configuration.", + "default": "config" + }, + "values": { + "title": "Values", + "type": "string", + "description": "Values separated by semicolon or field name.", + "default": "" + }, + "split": { + "title": "Split Character", + "type": "string", + "description": "Character to use to split list of values.", + "default": ";" + } + }, + "required": [ + "type", + "values", + "split" + ] + }, + "regex": { + "title": "Dataset splitter", + "type": "string", + "description": "

Regex value to split datasets inside the field.

This field is to manage when you have multiple datasets or combine values in the same field. To be able to separate datasets from values, we will use a regex expression. We encourage you to use your data and test your regex expression on a online site like https://regex101.com.

Below we list some samples of datasets and regex:

  • Sample 1
    • Data: [255;255;255];[120;232;23];[32;44;134]
    • Regex: \\\\[|\\\\];\\\\[|\\\\]
    • Ouput: 3 datasets (e.g. 255;255;255). Values inside dataset will be split by the field 'Values Splitter'.
  • Sample 2
    • Data: (2011-03-28,0.511),(2011-04-04,0.421)
    • Regex: \\\\(|\\\\),\\\\(|\\\\)
    • Ouput: 1 datasets, 2 pairs of values (e.g. 2011-03-28,0.511). Values inside are combined (y and x axis) and will be split by the field 'Values Splitter'.

Note: we need to double the '\\' character

", + "default": "\\(|\\),\\(|\\)" + }, + "split": { + "title": "Values splitter", + "type": "string", + "default": ",", + "description": "Character to use to split values inside a field. E.g. a field contains '10;20;30' means there is 3 values split by ';' or [1,2,3];[4,5,6] means there is 2 datasets with 3 values each split by ','." + }, + "prefix": { + "title": "Prefix", + "type": "string", + "default": "", + "description": "Prefix to add to data hover." + }, + "suffix": { + "title": "Suffix", + "type": "string", + "default": "", + "description": "Suffix to add to data hover." + } + }, + "required": [ + "type", + "measure", + "split" + ] + } + }, + "details": { + "type": "object", + "title": "Details", + "properties": { + "enabled": { + "type": "boolean", + "title": "Enable" + }, + "value": { + "type": "string", + "title": "Value", + "description": "String with the custom details in markdown notation." + } + } + } + }, + "required": [ + "id", + "nameField", + "type", + "data" + ] + } + }, + "required": [ + "type", + "layers" + ] + } + },"rangeSlider": { + "$id": "https://cgpv/schema", + "$schema": "http://json-schema.org/draft-07/schema#", + + "title": "Range Slider", + "type": "object", + "properties": { + "enable": { + "type": "boolean", + "title": "Enable", + "default": true + }, + "open": { + "type": "boolean", + "title": "Open by default", + "default": false + }, + "maximize": { + "type": "boolean", + "title": "Slider maximized by default", + "default": false + }, + "maximizeDesc": { + "type": "boolean", + "title": "Description section open by default", + "default": false + }, + "autorun": { + "type": "boolean", + "title": "Start animation on load", + "defaul": false + }, + "loop": { + "type": "boolean", + "title": "Play the animation in loop", + "default": false + }, + "reverse": { + "type": "boolean", + "title": "Animation in reverse mode", + "default": false + }, + "lock": { + "type": "boolean", + "title": "Lock handle", + "default": false + }, + "controls": { + "type": "array", + "minItems":0, + "uniqueItems": true, + + "items": { + "enum": [ + "lock", + "loop", + "delay", + "export", + "refresh", + "reverse" + ] + }, + "default": [ + "lock", + "delay" + ], + "title": "Slider bar controls" + + }, + "params": { + "type": "object", + "title": "Parameters", + "properties": { + "type": { + "title": "Slider Type", + "type": "string", + "enum": [ + "number", + "date", + "wmst" + ], + "description": "If the Date or WMS-T is selected, range and limit must be in milliseconds. Note: Date is for esri layer and WMS-T is for ogc WMS-T layer.", + "default": "number" + }, + "rangeType": { + "title": "Range Type", + "type": "string", + "enum": [ + "single", + "dual" + ], + "description": "Type of range (single for one handle or dual for 2 handles).", + "default": "dual" + }, + "stepType": { + "title": "Step Type", + "type": "string", + "enum": [ + "dynamic", + "static" + ], + "description": "Type of step (dynamic for open values or static from a list of values).", + "default": "dynamic" + }, + "precision": { + "title": "Precision", + "type": "string", + "enum": [ + "0", + "1", + "2", + "date", + "hour" + ], + "description": "Precision of numeric data (0, 1, 2) or date (Date, Hour).", + "default": "0" + }, + "delay": { + "title": "Animation Delay", + "type": "string", + "enum": [ + "3000", + "4000", + "5000", + "6000", + "7000" + ], + "description": "Delay between animations.", + "default": "3000" + }, + "rangeInterval": { + "type": "number", + "title": "Interval (in milliseconds for date data type)", + "default": -1, + "description": "When the limit type is dynamic, this option allows you to define a preset interval between the two handles. The value must be in milliseconds date data type. For other numerical value formats, enter the desired value directly. To convert a time interval into milliseconds, use the built-in converter. Will start at the beginning of the scroll bar, unless the \"Start at end\" option is enabled." + }, + "startRangeEnd": { + "type": "boolean", + "title": "Start interval at the end", + "default": false + }, + "range": { + "type": "object", + "title": "", + "properties": { + "min": { + "type": "number", + "title": "Minimum value of the range (in milliseconds for date data type)", + "description": "The minimum value of the range that corresponds to the position of the left handle. If not defined, the minimum limit will be used. The value must be in milliseconds date data type. For other numerical value formats, enter the desired value directly. To convert a date to milliseconds, use the site's built-in converter.", + "default": 0 + }, + "max": { + "type": "number", + "title": "Maximum value of the range (in milliseconds for date data type)", + "description": "The maximum value of the range that corresponds to the position of the right handle. If not defined, the maximum limit will be used. The value must be in milliseconds date data type. For other numerical value formats, enter the desired value directly. To convert a date to milliseconds, use the site's built-in converter.", + "default": 1 + } + } + }, + "limit": { + "type": "object", + "title": "Limits of the data set values", + "properties": { + "min": { + "type": "number", + "title": "Minimum Limit", + "description": "The minimum value contained in the dataset. If not defined, the value will be found using the values present in the used field of the layer. To convert a date to milliseconds, use the site's built-in converter.", + "default": 0 + }, + "max": { + "type": "number", + "title": "Maximum Limit", + "description": "The maximum value contained in the dataset. If not defined, the value will be found using the values present in the used field of the layer. To convert a date to milliseconds, use the site's built-in converter.", + "default": 1 + }, + "staticItems": { + "type": "array", + "title": "Static Limit Values", + "items": { + "title": "Value", + "type": "number" + }, + "default": [], + "description": "The values for static limit. Note: the minimum and maximum limits are used to define the lower and upper static limits. Enter only the intermediate values here." + } + } + }, + "units": { + "type": "string", + "title": "Units", + "description": "Shown at the right of the time axis. Keep it short to improve readability.", + "default": "" + }, + "description": { + "type": "string", + "title": "Description", + "description": "Description to add in the section below the slider." + } + }, + "required": [ + "type" + ] + }, + "layers": { + "type": "array", + "title": "Layers", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "The id of the layer for referencing within the viewer (does not relate directly to any external service).", + "title": "Layer id", + "enum":[] + + }, + "field": { + "type": "string", + "description": "The field name to use.", + "title": "Field Name", + "default": "" + }, + "isTimeAware": { + "type": "boolean", + "title": "Is Time Aware", + "default": true, + "description": "If time aware is true, the slider will use the TimeInfo (ESRI) or time dimension (WMS) to extract limits and range." + } + }, + "required": [ + "id, field", + "isTimeAware" + ] + } + } + }, + + "required": [ + "params", + "layers" + ] + }, + + + + "map": { + "$id": "https://cgpv/schema", + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "GeoView Core Config Schema", + + "version": 1.0, + "comments": "Configuration for GeoView core packages, each packages manages it own schema. It correspond to the TypeMapFeaturesInstance type.", + "comments": " in TypeLOcalized string I took out minProperties: 1,because it casused error messages eve if field was not requiered", + + "definitions": { + "TypeLocalizedString": { + + "type": "object", + "properties": { + "en": { + "type": "string", + "description": "The English version of the string." + }, + "fr": { + "type": "string", + "description": "The French version of the string. " + } + } + }, + + "TypeDetailsLayerConfig": { + + "type": "object", + "properties": { + + "parser": { + "type": "string", + "description": "A path to a javascript file with a function for parsing the layers identify output. Only needed if a custom template is being used." + }, + "template": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "A path to an html template (English/French) that will override default identify output." + } + }, + "required": ["template"] + }, + + "TypeFeatureInfoLayerConfig": { + + "type": "object", + "properties": { + "queryable": { + "type": "boolean", + "default": true, + "title": "Allow querying. Default = true." + }, + "customParser": { "$ref": "#/definitions/TypeDetailsLayerConfig" }, + "nameField": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display field (English/French) of the layer. If it is not present the viewer will make an attempt to find the first valid field." + }, + "outfields": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "A comma separated list of attribute names (English/French) that should be requested on query (all by default)." + }, + "fieldTypes": { + "type": "string", + "description": "A comma separated list of types. Type at index i is associated to the variable at index i." + }, + "aliasFields": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "A comma separated list of attribute names (English/French) that should be use for alias. If empty, no alias will be set if not found." + } + }, + "required": [ + "queryable" + ] + }, + "TypeFeatureInfoNotQueryable": { + + "properties": { + "queryable": { + "const": false, + "description": "Do not allow querying.", + "type": "boolean" + } + }, + "required": [ + "queryable" + ], + "type": "object" + }, + + "TypeStrokeSymbolConfig": { + + "type": "object", + "description": "Stroke style for vector features.", + "minProperties": 1, + "properties": { + "color": { + "type": "string" + }, + "lineStyle": { + "enum": [ + "dash", + "dash-dot", + "dash-dot-dot", + "dot", + "longDash", + "longDash-dot", + "null", + "shortDash", + "shortDash-dot", + "shortDash-dot-dot", + "solid" + ] + }, + "width": { + "type": "number" + } + }, + "required": [ + "color", + "width", + "lineStyle" + ] + }, + + "TypeLineStringVectorConfig": { + + "type": "object", + "properties": { + "type": { "type":"string", + "default": "lineString", + "enum": [ + "lineString" + ] + }, + "stroke": { "$ref": "#/definitions/TypeStrokeSymbolConfig" } + }, + "required": [ + "type", + "stroke" + ] + }, + + "TypePolygonVectorConfig": { + + "type": "object", + "properties": { + "type": {"type":"string", "default": "filledPolygon", + "enum": ["filledPolygon"] + }, + "color": { "type": "string" }, + "stroke": { "$ref": "#/definitions/TypeStrokeSymbolConfig" }, + "paternSize": { + "type": "number", + "description": "Distance between patern lines. Default = 8" + }, + "paternWidth": { + "type": "number", + "description": "Patern line width.default = 1." + }, + "fillStyle": { + "enum": [ + "solid", + "backwardDiagonal", + "cross", + "diagonalCross", + "forwardDiagonal", + "horizontal", + "null", + "vertical" + ], + "description": "Kind of filling for vector features. Default = solid. " + } + }, + "required": [ + "type", + "stroke" + ] + }, + + "TypeSimpleSymbolVectorConfig": { + + "type": "object", + "properties": { + "type": {"type":"string", + "default": "simpleSymbol", + "enum": ["simpleSymbol"] + }, + "rotation": { + "type": "number", + "description": "Symbol rotation in radians." + }, + "color": { "type": "string" }, + "stroke": { "$ref": "#/definitions/TypeStrokeSymbolConfig" }, + "size": { "type": "number" }, + "offset": { + "type": "array", + "items": { + "type": "number" + }, + "minItems": 2, + "maxItems": 2 + }, + "symbol": { + "enum": [ + "circle", + "+", + "diamond", + "square", + "triangle", + "X", + "star" + ] + } + }, + "required": + ["type", + "symbol" + ] + }, + + "TypeIconSymbolVectorConfig": { + + "type": "object", + "properties": { + "type": {"type":"string", + "default": "iconSymbol", + "enum": ["iconSymbol"] + }, + "mimeType": { "type": "string" }, + "src": { "type": "string" }, + "width": { + "type": "integer", + "description": "Icon width in pixel." + }, + "height": { + "type": "integer", + "description": "Icon height in pixel." + }, + "rotation": { + "type": "number", + "description": "Icon rotation in radians." + }, + "opacity": { + "type": "number", + "minimum": 0, + "maximum": 1, + "default": 1 + }, + "offset": { + "type": "array", + "items": { + "type": "number" + }, + "minItems": 2, + "maxItems": 2 + }, + "crossOrigin": { + "type": "string", + "description": "The crossOrigin attribute for loaded images. Note that you must provide a crossOrigin value if you want to access pixel data with the Canvas renderer." + } + }, + "required": ["type", "mimeType", "src"] + }, + + "TypeSimpleStyleConfig": { + + "type": "object", + "properties": { + "styleId": { + "type": "string" + }, + "styleType": { + "enum": ["simple"], + "default": "simple" + }, + "label": { + "type": "string" + }, + "settings": { "$ref": "#/definitions/TypeKindOfVectorSettings" } + }, + "required": [ + "styleType", + "label", + "settings" + ] + }, + + + "TypeUniqueValueStyleConfig": { + + "type": "object", + "properties": { + "styleId": { + "type": "string" + }, + "styleType": {"type":"string", + "default": "uniqueValue", + "enum": ["uniqueValue"] + }, + "defaultLabel": { + "type": "string", + "description": "Label used if field/value association is not found." + }, + "defaultSettings": { + "$ref": "#/definitions/TypeKindOfVectorSettings", + "description": "Settings used if field/value association is not found." + }, + "defaultVisible": { + "description": "Flag used to show/hide features associated to the default label (default: yes).", + "enum": [ + "yes", + "no", + "always" + ] + }, + "fields": { + "type": "array", + "items": { + "type": "string" + }, + "minItems": 1 + }, + "uniqueValueStyleInfo": { + "type": "array", + "items": { + + "type": "object", + "properties": { + "label": { + "type": "string" + }, + "settings": { + "$ref": "#/definitions/TypeKindOfVectorSettings" + }, + "values": { + "items": { + "oneOf": [ + { "title": "String Value", + "type": "string" + }, + { "title": "Numeric Value", + "type": "number" + } + ] + }, + "minItems": 1, + "type": "array" + }, + "visible": { + "description": "Flag used to show/hide features associated to the label (default: yes).", + "enum": [ + "yes", + "no", + "always" + ] + } + } + + }, + "minItems": 1, + "required": [ + "label", + "values", + "options" + ] + } + }, + "required": [ + "styleType", + "fields", + "uniqueValueStyleInfo" + ] + }, + + "TypeUniqueValueStyleInfo": { + "type": "array", + "items": { + + "type": "object", + "properties": { + "label": { + "type": "string" + }, + "settings": { + "$ref": "#/definitions/TypeKindOfVectorSettings" + }, + "values": { + "items": { + "oneOf": [ + { "title": "String Value", + "type": "string" + }, + { "title": "Numeric Value", + "type": "number" + } + ] + }, + "minItems": 1, + "type": "array" + }, + "visible": { + "description": "Flag used to show/hide features associated to the label (default: yes).", + "enum": [ + "yes", + "no", + "always" + ] + } + } + + }, + "minItems": 1, + "required": [ + "label", + "values", + "options" + ] + + }, + + "TypeValidMapProjectionCodes": { + "default": 3978, + "description": "Spatial Reference EPSG code supported (https://epsg.io/). We support Web Mercator and Lambert Conical Conform Canada.", + "enum": [ + 3978, + 3857 + ] + }, + + "TypeClassBreakStyleConfig": { + + "type": "object", + "properties": { + "styleId": { + "type": "string" + }, + "styleType": { + "default": "classBreaks", + "enum": ["classBreaks"] + }, + "field": { + "type": "string" + }, + "defaultLabel": { + "type": "string", + "description": "Label used if field/value association is not found." + }, + "defaultSettings": { + "$ref": "#/definitions/TypeKindOfVectorSettings", + "description": "Settings used if field/value association is not found." + }, + "defaultVisible": { + "description": "Flag used to show/hide features associated to the default label (default: yes).", + "default": "yes", + "enum": [ + "yes", + "no", + "always" + ] + }, + + "classBreakStyleInfo": { "$ref": "#/definitions/TypeClassBreakStyleInfo" } + }, + "required": ["styleType", "field", "classBreakStyleInfo"] + }, + + + "TypeClassBreakStyleInfo": { + + "type": "array", + "items": { + + "type": "object", + "properties": { + + "label": { + "type": "string" + }, + "minValue": { + "oneOf": [ + { "title": "minValue String value", + "type": "string" + }, + { "title": "minValue Numeric value", + "type": "number" + } + ] + }, + "maxValue": { + "oneOf": [ + { "title": "maxValue String value", + "type": "string" + }, + { "title": "maxValue Numeric value", + "type": "number" + } + ] + }, + "visible": { + "description": "Flag used to show/hide features associated to the label (default: yes).", + "enum": [ + "yes", + "no", + "always" + ], + "default" : ["no"] + }, + + "settings": { "$ref": "#/definitions/TypeKindOfVectorSettings" } + } + }, + "minItems": 1, + "required": ["label", "minValue", "maxValue", "settings"] + + }, + + "TypeKindOfVectorSettings": { + "oneOf": [ + { "title":"LineString", + "type": "object", + "properties": { + "type": { "type":"string", + "default": "lineString", + "enum": [ + "lineString" + ] + }, + "stroke": { "type": "object", + "description": "Stroke style for vector features.", + "minProperties": 1, + "properties": { + "color": { + "type": "string" + }, + "lineStyle": { + "enum": [ + "dash", + "dash-dot", + "dash-dot-dot", + "dot", + "longDash", + "longDash-dot", + "null", + "shortDash", + "shortDash-dot", + "shortDash-dot-dot", + "solid" + ] + }, + "width": { + "type": "number" + } + }, + "required": [ + "color", + "width", + "lineStyle" + ] } + }, + "required": [ + "type", + "stroke" + ] }, + { "title":"Polygon", + "type": "object", + "properties": { + "type": {"type":"string", "default": "filledPolygon", + "enum": ["filledPolygon"] + }, + "color": { "type": "string" }, + "stroke": { + "type": "object", + "description": "Stroke style for vector features.", + "minProperties": 1, + "properties": { + "color": { + "type": "string" + }, + "lineStyle": { + "enum": [ + "dash", + "dash-dot", + "dash-dot-dot", + "dot", + "longDash", + "longDash-dot", + "null", + "shortDash", + "shortDash-dot", + "shortDash-dot-dot", + "solid" + ] + }, + "width": { + "type": "number" + } + }, + "required": [ + "color", + "width", + "lineStyle" + ] + }, + "paternSize": { + "type": "number", + "description": "Distance between patern lines. Default = 8" + }, + "paternWidth": { + "type": "number", + "description": "Patern line width.default = 1." + }, + "fillStyle": { + "enum": [ + "solid", + "backwardDiagonal", + "cross", + "diagonalCross", + "forwardDiagonal", + "horizontal", + "null", + "vertical" + ], + "description": "Kind of filling for vector features. Default = solid. " + } + }, + "required": [ + "type", + "stroke" + ] }, + { "title":"SimpleSymbol", + "type": "object", + "properties": { + "type": {"type":"string", + "default": "simpleSymbol", + "enum": ["simpleSymbol"] + }, + "rotation": { + "type": "number", + "description": "Symbol rotation in radians." + }, + "color": { "type": "string" }, + "stroke": { + "type": "object", + "description": "Stroke style for vector features.", + "minProperties": 1, + "properties": { + "color": { + "type": "string" + }, + "lineStyle": { + "enum": [ + "dash", + "dash-dot", + "dash-dot-dot", + "dot", + "longDash", + "longDash-dot", + "null", + "shortDash", + "shortDash-dot", + "shortDash-dot-dot", + "solid" + ] + }, + "width": { + "type": "number" + } + }, + "required": [ + "color", + "width", + "lineStyle" + ] + }, + "size": { "type": "number" }, + "offset": { + "type": "array", + "items": { + "type": "number" + }, + "minItems": 2, + "maxItems": 2 + }, + "symbol": { + "enum": [ + "circle", + "+", + "diamond", + "square", + "triangle", + "X", + "star" + ] + } + }, + "required": + ["type", + "symbol" + ] + }, + { "title":"IconSymbol", + "type": "object", + "properties": { + "type": {"type":"string", + "default": "iconSymbol", + "enum": ["iconSymbol"] + }, + "mimeType": { "type": "string" }, + "src": { "type": "string" }, + "width": { + "type": "integer", + "description": "Icon width in pixel." + }, + "height": { + "type": "integer", + "description": "Icon height in pixel." + }, + "rotation": { + "type": "number", + "description": "Icon rotation in radians." + }, + + "offset": { + "type": "array", + "items": { + "type": "number" + }, + "minItems": 2, + "maxItems": 2 + }, + "crossOrigin": { + "type": "string", + "description": "The crossOrigin attribute for loaded images. Note that you must provide a crossOrigin value if you want to access pixel data with the Canvas renderer." + } + }, + "required": ["type", "mimeType", "src"] } + ] + }, + + "TypeStyleConfig": { + + "minProperties": 1, + "type": "object", + "Title": "Line Style Config", + "description":"Enter Line, Point and Polygon Style Config ", + "properties": { + "LineString": { "description":"Point Style Config ", + + "title":"Line Style", + + "$ref": "#/definitions/TypeStyleSettings" + }, + "Point": { "description": "Polygon Style Config", + "title":"Point Style", + + "$ref": "#/definitions/TypeStyleSettings" + }, + "Polygon": { + "title":"Polygon Style", + + "$ref": "#/definitions/TypeStyleSettings" + } + } + }, + + "TypeStyleSettings": { + "oneOf": [ {"title":"SimpleStyle", + "type": "object", + "properties": { + "styleId": { + "type": "string" + }, + "styleType": { + "enum": ["simple"], + "default": "simple" + }, + "label": { + "type": "string" + }, + "settings": { + "oneOf": [ + { "title":"LineString", + "type": "object", + "properties": { + "type": { "type":"string", + "default": "lineString", + "enum": [ + "lineString" + ] + }, + "stroke": { "description": "Stroke style for vector features.", + "minProperties": 1, + "properties": { + "color": { + "type": "string" + }, + "lineStyle": { + "enum": [ + "dash", + "dash-dot", + "dash-dot-dot", + "dot", + "longDash", + "longDash-dot", + "null", + "shortDash", + "shortDash-dot", + "shortDash-dot-dot", + "solid" + ] + }, + "width": { + "type": "number" + } + }, + "required": [ + "color", + "width", + "lineStyle" + ] } + }, + "required": [ + "type", + "stroke" + ] }, + { "title":"Polygon", + "type": "object", + "properties": { + "type": {"type":"string", "default": "filledPolygon", + "enum": ["filledPolygon"] + }, + "color": { "type": "string" }, + "stroke": { + "description": "Stroke style for vector features.", + "minProperties": 1, + "properties": { + "color": { + "type": "string" + }, + "lineStyle": { + "enum": [ + "dash", + "dash-dot", + "dash-dot-dot", + "dot", + "longDash", + "longDash-dot", + "null", + "shortDash", + "shortDash-dot", + "shortDash-dot-dot", + "solid" + ] + }, + "width": { + "type": "number" + } + }, + "required": [ + "color", + "width", + "lineStyle" + ] + }, + "paternSize": { + "type": "number", + "description": "Distance between patern lines. Default = 8" + }, + "paternWidth": { + "type": "number", + "description": "Patern line width.default = 1." + }, + "fillStyle": { + "enum": [ + "solid", + "backwardDiagonal", + "cross", + "diagonalCross", + "forwardDiagonal", + "horizontal", + "null", + "vertical" + ], + "description": "Kind of filling for vector features. Default = solid. " + } + }, + "required": [ + "type", + "stroke" + ] }, + { "title":"SimpleSymbol", + "type": "object", + "properties": { + "type": {"type":"string", + "default": "simpleSymbol", + "enum": ["simpleSymbol"] + }, + "rotation": { + "type": "number", + "description": "Symbol rotation in radians." + }, + "color": { "type": "string" }, + "stroke": { + "description": "Stroke style for vector features.", + "minProperties": 1, + "properties": { + "color": { + "type": "string" + }, + "lineStyle": { + "enum": [ + "dash", + "dash-dot", + "dash-dot-dot", + "dot", + "longDash", + "longDash-dot", + "null", + "shortDash", + "shortDash-dot", + "shortDash-dot-dot", + "solid" + ] + }, + "width": { + "type": "number" + } + }, + "required": [ + "color", + "width", + "lineStyle" + ] + }, + "size": { "type": "number" }, + "offset": { + "type": "array", + "items": { + "type": "number" + }, + "minItems": 2, + "maxItems": 2 + }, + "symbol": { + "enum": [ + "circle", + "+", + "diamond", + "square", + "triangle", + "X", + "star" + ] + } + }, + "required": + ["type", + "symbol" + ] + }, + { "title":"IconSymbol", + "type": "object", + "properties": { + "type": {"type":"string", + "default": "iconSymbol", + "enum": ["iconSymbol"] + }, + "mimeType": { "type": "string" }, + "src": { "type": "string" }, + "width": { + "type": "integer", + "description": "Icon width in pixel." + }, + "height": { + "type": "integer", + "description": "Icon height in pixel." + }, + "rotation": { + "type": "number", + "description": "Icon rotation in radians." + }, + + "offset": { + "type": "array", + "items": { + "type": "number" + }, + "minItems": 2, + "maxItems": 2 + }, + "crossOrigin": { + "type": "string", + "description": "The crossOrigin attribute for loaded images. Note that you must provide a crossOrigin value if you want to access pixel data with the Canvas renderer." + } + }, + "required": ["type", "mimeType", "src"] } + ] + } + }, + "required": [ + "styleType", + "label", + "settings" + ] + } , + {"title":"UniqueValueStyle", + "type": "object", + "properties": { + "styleId": { + "type": "string" + }, + "styleType": {"type":"string", + "default": "uniqueValue", + "enum": ["uniqueValue"] + }, + "defaultLabel": { + "type": "string", + "description": "Label used if field/value association is not found." + }, + "defaultSettings": { + "oneOf": [ + { "title":"LineString", + "type": "object", + "properties": { + "type": { "type":"string", + "default": "lineString", + "enum": [ + "lineString" + ] + }, + "stroke": { + "description": "Stroke style for vector features.", + "minProperties": 1, + "properties": { + "color": { + "type": "string" + }, + "lineStyle": { + "enum": [ + "dash", + "dash-dot", + "dash-dot-dot", + "dot", + "longDash", + "longDash-dot", + "null", + "shortDash", + "shortDash-dot", + "shortDash-dot-dot", + "solid" + ] + }, + "width": { + "type": "number" + } + }, + "required": [ + "color", + "width", + "lineStyle" + ] + } + }, + "required": [ + "type", + "stroke" + ] }, + { "title":"Polygon", + "type": "object", + "properties": { + "type": {"type":"string", "default": "filledPolygon", + "enum": ["filledPolygon"] + }, + "color": { "type": "string" }, + "stroke": { + "description": "Stroke style for vector features.", + "minProperties": 1, + "properties": { + "color": { + "type": "string" + }, + "lineStyle": { + "enum": [ + "dash", + "dash-dot", + "dash-dot-dot", + "dot", + "longDash", + "longDash-dot", + "null", + "shortDash", + "shortDash-dot", + "shortDash-dot-dot", + "solid" + ] + }, + "width": { + "type": "number" + } + }, + "required": [ + "color", + "width", + "lineStyle" + ] + }, + "paternSize": { + "type": "number", + "description": "Distance between patern lines. Default = 8" + }, + "paternWidth": { + "type": "number", + "description": "Patern line width.default = 1." + }, + "fillStyle": { + "enum": [ + "solid", + "backwardDiagonal", + "cross", + "diagonalCross", + "forwardDiagonal", + "horizontal", + "null", + "vertical" + ], + "description": "Kind of filling for vector features. Default = solid. " + } + }, + "required": [ + "type", + "stroke" + ] }, + { "title":"SimpleSymbol", + "type": "object", + "properties": { + "type": {"type":"string", + "default": "simpleSymbol", + "enum": ["simpleSymbol"] + }, + "rotation": { + "type": "number", + "description": "Symbol rotation in radians." + }, + "color": { "type": "string" }, + "stroke": { + "description": "Stroke style for vector features.", + "minProperties": 1, + "properties": { + "color": { + "type": "string" + }, + "lineStyle": { + "enum": [ + "dash", + "dash-dot", + "dash-dot-dot", + "dot", + "longDash", + "longDash-dot", + "null", + "shortDash", + "shortDash-dot", + "shortDash-dot-dot", + "solid" + ] + }, + "width": { + "type": "number" + } + }, + "required": [ + "color", + "width", + "lineStyle" + ] + }, + "size": { "type": "number" }, + "offset": { + "type": "array", + "items": { + "type": "number" + }, + "minItems": 2, + "maxItems": 2 + }, + "symbol": { + "enum": [ + "circle", + "+", + "diamond", + "square", + "triangle", + "X", + "star" + ] + } + }, + "required": + ["type", + "symbol" + ] + }, + { "title":"IconSymbol", + "type": "object", + "properties": { + "type": {"type":"string", + "default": "iconSymbol", + "enum": ["iconSymbol"] + }, + "mimeType": { "type": "string" }, + "src": { "type": "string" }, + "width": { + "type": "integer", + "description": "Icon width in pixel." + }, + "height": { + "type": "integer", + "description": "Icon height in pixel." + }, + "rotation": { + "type": "number", + "description": "Icon rotation in radians." + }, + + "offset": { + "type": "array", + "items": { + "type": "number" + }, + "minItems": 2, + "maxItems": 2 + }, + "crossOrigin": { + "type": "string", + "description": "The crossOrigin attribute for loaded images. Note that you must provide a crossOrigin value if you want to access pixel data with the Canvas renderer." + } + }, + "required": ["type", "mimeType", "src"] } + ] + + }, + "defaultVisible": { + "description": "Flag used to show/hide features associated to the default label (default: yes).", + "enum": [ + "yes", + "no", + "always" + ] + }, + "fields": { + "type": "array", + "items": { + "type": "string" + }, + "minItems": 1 + }, + "uniqueValueStyleInfo": { + "type": "array", + "items": { + + "type": "object", + "properties": { + "label": { + "type": "string" + }, + "settings": { + + }, + "values": { + "items": { + "oneOf": [ + { "title": "String Value", + "type": "string" + }, + { "title": "Numeric Value", + "type": "number" + } + ] + }, + "minItems": 1, + "type": "array" + }, + "visible": { + "description": "Flag used to show/hide features associated to the label (default: yes).", + "enum": [ + "yes", + "no", + "always" + ] + } + } + + }, + "minItems": 1, + "required": [ + "label", + "values", + "options" + ] + } + }, + "required": [ + "styleType", + "fields", + "uniqueValueStyleInfo" + ] + }, + {"title":"ClassBreakStyle", + "type": "object", + "properties": { + "styleId": { + "type": "string" + }, + "styleType": { + "default": "classBreaks", + "enum": ["classBreaks"] + }, + "field": { + "type": "string" + }, + "defaultLabel": { + "type": "string", + "description": "Label used if field/value association is not found." + }, + "defaultSettings": { + "oneOf": [ + { "title":"LineString", + "type": "object", + "properties": { + "type": { "type":"string", + "default": "lineString", + "enum": [ + "lineString" + ] + }, + "stroke": { + "description": "Stroke style for vector features.", + "minProperties": 1, + "properties": { + "color": { + "type": "string" + }, + "lineStyle": { + "enum": [ + "dash", + "dash-dot", + "dash-dot-dot", + "dot", + "longDash", + "longDash-dot", + "null", + "shortDash", + "shortDash-dot", + "shortDash-dot-dot", + "solid" + ] + }, + "width": { + "type": "number" + } + }, + "required": [ + "color", + "width", + "lineStyle" + ] + } + }, + "required": [ + "type", + "stroke" + ] }, + { "title":"Polygon", + "type": "object", + "properties": { + "type": {"type":"string", "default": "filledPolygon", + "enum": ["filledPolygon"] + }, + "color": { "type": "string" }, + "stroke": { + "description": "Stroke style for vector features.", + "minProperties": 1, + "properties": { + "color": { + "type": "string" + }, + "lineStyle": { + "enum": [ + "dash", + "dash-dot", + "dash-dot-dot", + "dot", + "longDash", + "longDash-dot", + "null", + "shortDash", + "shortDash-dot", + "shortDash-dot-dot", + "solid" + ] + }, + "width": { + "type": "number" + } + }, + "required": [ + "color", + "width", + "lineStyle" + ] + }, + "paternSize": { + "type": "number", + "description": "Distance between patern lines. Default = 8" + }, + "paternWidth": { + "type": "number", + "description": "Patern line width.default = 1." + }, + "fillStyle": { + "enum": [ + "solid", + "backwardDiagonal", + "cross", + "diagonalCross", + "forwardDiagonal", + "horizontal", + "null", + "vertical" + ], + "description": "Kind of filling for vector features. Default = solid. " + } + }, + "required": [ + "type", + "stroke" + ] }, + { "title":"SimpleSymbol", + "type": "object", + "properties": { + "type": {"type":"string", + "default": "simpleSymbol", + "enum": ["simpleSymbol"] + }, + "rotation": { + "type": "number", + "description": "Symbol rotation in radians." + }, + "color": { "type": "string" }, + "stroke": { + "description": "Stroke style for vector features.", + "minProperties": 1, + "properties": { + "color": { + "type": "string" + }, + "lineStyle": { + "enum": [ + "dash", + "dash-dot", + "dash-dot-dot", + "dot", + "longDash", + "longDash-dot", + "null", + "shortDash", + "shortDash-dot", + "shortDash-dot-dot", + "solid" + ] + }, + "width": { + "type": "number" + } + }, + "required": [ + "color", + "width", + "lineStyle" + ] + }, + "size": { "type": "number" }, + "offset": { + "type": "array", + "items": { + "type": "number" + }, + "minItems": 2, + "maxItems": 2 + }, + "symbol": { + "enum": [ + "circle", + "+", + "diamond", + "square", + "triangle", + "X", + "star" + ] + } + }, + "required": + ["type", + "symbol" + ] + }, + { "title":"IconSymbol", + "type": "object", + "properties": { + "type": {"type":"string", + "default": "iconSymbol", + "enum": ["iconSymbol"] + }, + "mimeType": { "type": "string" }, + "src": { "type": "string" }, + "width": { + "type": "integer", + "description": "Icon width in pixel." + }, + "height": { + "type": "integer", + "description": "Icon height in pixel." + }, + "rotation": { + "type": "number", + "description": "Icon rotation in radians." + }, + + "offset": { + "type": "array", + "items": { + "type": "number" + }, + "minItems": 2, + "maxItems": 2 + }, + "crossOrigin": { + "type": "string", + "description": "The crossOrigin attribute for loaded images. Note that you must provide a crossOrigin value if you want to access pixel data with the Canvas renderer." + } + }, + "required": ["type", "mimeType", "src"] } + ] + }, + "defaultVisible": { + "description": "Flag used to show/hide features associated to the default label (default: yes).", + "default": "yes", + "enum": [ + "yes", + "no", + "always" + ] + }, + + "classBreakStyleInfo": { + "type": "array", + "items": { + + "type": "object", + "properties": { + + "label": { + "type": "string" + }, + "minValue": { + "oneOf": [ + { "title": "minValue String value", + "type": "string" + }, + { "title": "minValue Numeric value", + "type": "number" + } + ] + }, + "maxValue": { + "oneOf": [ + { "title": "maxValue String value", + "type": "string" + }, + { "title": "maxValue Numeric value", + "type": "number" + } + ] + }, + "visible": { + "description": "Flag used to show/hide features associated to the label (default: yes).", + "enum": [ + "yes", + "no", + "always" + ], + "default" : ["no"] + }, + + "settings": { } + } + }, + "minItems": 1, + "required": ["label", "minValue", "maxValue", "settings"] + } + }, + "required": ["styleType", "field", "classBreakStyleInfo"] + } + ] + }, + + "TypeLayerInitialSettings": { + + "type": "object", + "properties": { + "bounds": { + "description": "The geographic bounding box that contains all the layer's features.", + "items": { + "type": "number" + }, + "maxItems": 4, + "minItems": 4, + "type": "array", + "default":[-16763712,5165908,-5688293,10649806] + }, + "opacity": { + "type": "number", + "minimum": 0, + "maximum": 1, + "default": 1, + "description": "Initial opacity setting." + }, + "visible": { + "default": "yes", + "description": "Initial visibility setting.", + "enum": [ + "yes", + "no", + "always" + ] + }, + "extent": { + "type": "array", + "minItems": 4, + "maxItems": 4, + "items": { + "type": "number" + },"default":[-16763712,5165908,-5688293,10649806], + "description": "The extent that constrains the view. Called with [minX, minY, maxX, maxY] extent coordinates." + }, + "minZoom": { + "type": "integer", + "minimum": 0, + "maximum": 50, + "description": "The minimum view zoom level (exclusive) above which this layer will be visible." + }, + "maxZoom": { + "type": "integer", + "minimum": 0, + "maximum": 50, + "description": "The maximum view zoom level (inclusive) above which this layer will be visible." + }, + "className": { + "type": "string", + "description": "A CSS class name to set to the layer element." + } + } + }, + + + "TypeVectorSourceFormats": { + "enum": [ + "GeoJSON", + "EsriJSON", + "KML", + "WFS", + "featureAPI", + "GeoPackage" + ] , + "default": "GeoJSON", + "description": "The feature format used by the XHR feature loader when access path is set." + }, + + "TypeVectorSourceInitialConfig": { + + "type": "object", + "properties": { + "dataAccessPath": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The path (English/French) to reach the data to display. If not specified, metadatAccessPath will be assigne dto it." + }, + "format": { "$ref": "#/definitions/TypeVectorSourceFormats" }, + "dataProjection": { + "type": "string", + "description": "The projection code of the source. Used only for GeoJSON format. Default value is EPSG:4326. " + }, + "featureInfo": { "$ref": "#/definitions/TypeFeatureInfoLayerConfig" }, + + "postSettings": { + "type": "object", + "properties": { + "data": + { + "type": "object" + }, + "header": + { + "type": "object" + } + } + }, + "strategy": { + "default": "all", + "description": "The loading strategy to use. By default an all strategy is used, a one-off strategy which loads all features at once.", + "enum": [ + "all", + "bbox" + ] + } + } + }, + + + + "TypeSourceImageWmsInitialConfig": { + + "type": "object", + "properties": { + "dataAccessPath": { + "$ref": "#/definitions/TypeLocalizedString", + + "description": "The path (English/French) to reach the data to display. If not specified, metadatAccessPath will be assigne dto it." + }, + "crossOrigin": { + "type": "string", + "description": "The crossOrigin attribute for loaded images. Note that you must provide a crossOrigin value if you want to access pixel data with the Canvas renderer." + }, + "projection": { + "type": "integer", + "description": "Spatial Reference EPSG code supported (https://epsg.io/). We support Web Mercator and Lambert Conical Conform Canada." + }, + "featureInfo": { + "$ref": "#/definitions/TypeFeatureInfoLayerConfig" + }, + "serverType": { + "$ref": "#/definitions/TypeOfServer", + "description": "The type of the remote WMS server. The default value is mapserver." + }, + "style": { + "oneOf": [ + { "title":"Single style", + "description": "Single style to apply", + "type": "string" + }, + { "title":"Array of styles", + "description": "Array of style to choose.", + "items": { + "type": "string" + }, + "type": "array" + } + ] + } + } + }, + + "TypeOfServer": { + "enum": [ + "mapserver", + "geoserver", + "qgis"], + "description": "The type of the remote WMS server. The default value is mapserver." + }, + + "TypeSourceImageEsriInitialConfig": { + + "type": "object", + "properties": { + "dataAccessPath": { + "$ref": "#/definitions/TypeLocalizedString", + + "description": "The path (English/French) to reach the data to display. If not specified, metadatAccessPath will be assigne dto it." + }, + "crossOrigin": { + "type": "string", + "description": "The crossOrigin attribute for loaded images. Note that you must provide a crossOrigin value if you want to access pixel data with the Canvas renderer." + }, + "projection": { + "type": "integer", + "description": "Spatial Reference EPSG code supported (https://epsg.io/). We support Web Mercator and Lambert Conical Conform Canada." + }, + "featureInfo": { + "$ref": "#/definitions/TypeFeatureInfoLayerConfig" + }, + "format": { + "$ref": "#/definitions/TypeEsriFormatParameter" + }, + "transparent": { + "type": "boolean", + "default": true, + "description": "If true, the image will be exported with the background color of the map set as its transparent color. Only the .png and .gif formats support transparency." + } + } + }, + + "TypeEsriDynamicLayerEntryConfig": { + + "properties": { + "entryType": { + "type": "string", + "enum": [ + "raster-image" + ], + "default": "raster-image" + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer entry at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "layerFilter": { + "description": "Filter to apply on feature of this layer.", + "type": "string" + }, + "layerId": { + "description": "The id of the layer to display on the map.", + "type": "string" + }, + "layerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "layerPathEnding": { + "description": "The ending element of the layer configuration path.", + "type": "string" + }, + "schemaTag": { + "enum": [ + "esriDynamic" + ], + "default": "esriDynamic" + + }, + "source": { + "$ref": "#/definitions/TypeSourceImageEsriInitialConfig" + }, + "style": { + "$ref": "#/definitions/TypeStyleConfig" + } + }, + "required": [ + "schemaTag", + "entryType", + "layerId" + ], + "type": "object" + }, + + "TypeEsriFormatParameter": { + "enum": ["png", "jpg", "gif", "svg"], + "default": "png", + "description": "The format of the exported image. The default format is png." + }, + + "TypeSourceTileInitialConfig": { + + "properties": { + "dataAccessPath": { + "$ref": "#/definitions/TypeLocalizedString", + + "description": "The path (English/French) to reach the data to display. If not specified, metadatAccessPath will be assigne dto it." + }, + "featureInfo": { + "$ref": "#/definitions/TypeFeatureInfoNotQueryable" + }, + "crossOrigin": { + "type": "string", + "description": "The crossOrigin attribute for loaded images. Note that you must provide a crossOrigin value if you want to access pixel data with the Canvas renderer." + }, + "projection": { + "type": "integer", + "description": "Spatial Reference EPSG code supported (https://epsg.io/). We support Web Mercator and Lambert Conical Conform Canada." + }, + "tileGrid": { "$ref": "#/definitions/TypeTileGrid" } + } + }, + + "TypeTileGrid": { + + "type": "object", + "properties": { + "extent": { + "type": "array", + "maxItems": 4, + "minItems": 4, + "items": + { + "type": "number" + }, + "description": "The extent that constrains the view. Called with [minX, minY, maxX, maxY] extent coordinates." + }, + "origin": { + "type": "array", + "maxItems": 2, + "minItems": 2, + "items": + { + "type": "number" + } + , + "description": "The tile grid origin, i.e. where the x and y axes meet ([z, 0, 0]). Tile coordinates increase left to right and downwards. If not specified, extent must be provided." + }, + "resolutions": { + "type": "array", + "items": { + "type": "number" + }, + "description": "Resolutions. The array index of each resolution needs to match the zoom level. This means that even if a minZoom is configured, the resolutions array will have a length of maxZoom + 1." + }, + "tileSize": { + "type": "array", + "maxItems": 2, + "minItems": 2, + "items": + { + "type": "number" + }, + "default": [256, + 256 + ], + "description": "The tile grid origin, i.e. where the x and y axes meet ([z, 0, 0]). Tile coordinates increase left to right and downwards. If not specified, extent must be provided." + } + }, + "required": ["origin", "resolutions"] + }, + + "TypeVectorHeatmapLayerEntryConfig": { + + "type": "object", + "properties": { + "schemaTag": { + "enum": [ + "not used yet" + ], + "defautl":"not used yet" + + }, + "entryType": { + "type": "string", + "enum": [ + "vector-heatmap" + ], + "default": "vector-heatmap" + }, + "layerPathEnding": { + "description": "The ending element of the layer configuration path.", + "type": "string" + }, + "layerId": { + "type": "string", + "description": "The id of the layer to display on the map." + }, + "layerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer entry at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "source": { "$ref": "#/definitions/TypeVectorSourceInitialConfig" }, + "gradient": { + "type": "array", + "items": { + "type": "string" + }, + "uniqueItems": true, + "minItems": 2, + "default": ["#00f", + "#0ff", + "#0f0", + "#ff0", + "#f00" + ], + "description": "Color gradient of the heatmap, specified as an array of CSS color strings." + }, + "radius": { + "type": "number", + "description": "Radius size in pixels (default 8px)." + }, + "blur": { + "type": "number", + "description": "Blur size in pixels (default 15px)." + }, + "weight": { + "type": "string", + "description": "Feature attribute to use for the weight or a function (ADD FORMAT) that returns a weight from a feature." + } + }, + "required": ["schemaTag", + "layerId", + "entryType" + ] + }, + + "TypeVectorLayerEntryConfig": { + + "type": "object", + "properties": { + "entryType": { + "type": "string", + "default": "vector", + "enum": [ + "vector" + ] + }, + "layerId": { + "type": "string", + "description": "The id of the layer to display on the map." + }, + "layerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "layerFilter": { + "description": "Filter to apply on feature of this layer.", + "type": "string" + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer entry at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "source": { "$ref": "#/definitions/TypeVectorSourceInitialConfig" }, + "style": { "$ref": "#/definitions/TypeStyleConfig" }, + "layerPathEnding": { + "description": "The ending element of the layer configuration path.", + "type": "string" + }, + "schemaTag": { + "enum": [ + "GeoJSON", + "esriFeature", + "ogcWfs", + "ogcFeature", + "GeoPackage" + ] + } + }, + "required": [ + "layerId", + "schemaTag", + "entryType" + ] + }, + + "TypeVectorTileLayerEntryConfig": { + + "type": "object", + "description": "Layer sources providing vector data divided into a tile grid.", + "properties": { + "entryType": { + "type": "string", + "enum": [ + "vector-tile" + ], + "default": "vector-tile" + }, + "layerId": { + "type": "string", + "description": "The id of the layer to display on the map." + }, + "layerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "layerFilter": { + "description": "Filter to apply on feature of this layer.", + "type": "string" + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer entry at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "source": { + "$ref": "#/definitions/TypeVectorTileSourceInitialConfig", + "description": "Information used to configure the source of a vector tile layer." + }, + "layerPathEnding": { + "description": "The ending element of the layer configuration path.", + "type": "string" + }, + "style": { + "$ref": "#/definitions/TypeStyleConfig" + }, + "schemaTag": { + "enum": [ + "not used yet" + ] + } + }, + "required": [ + + "entryType", + "layerId" + ] + }, + + "TypeVectorTileSourceInitialConfig": { + + "type": "object", + "description": "Layer sources providing vector data divided into a tile grid.", + "properties": { + "dataAccessPath": { + "$ref": "#/definitions/TypeLocalizedString", + + "description": "The path (English/French) to reach the data to display. If not specified, metadatAccessPath will be assigne dto it." + }, + "format": { + "enum": ["GeoJSON", "EsriJSON", "KML", "WFS", "MVT", "featureAPI"], + "description": "The feature format used by the XHR feature loader when access path is set." + }, + "dataProjection": { + "type": "string", + "description": "The projection code of the source. Used only for GeoJSON format. Default value is EPSG:4326." + }, + "featureInfo": { "$ref": "#/definitions/TypeFeatureInfoLayerConfig" }, + "style": { "$ref": "#/definitions/TypeStyleConfig" }, + "tileGrid": { + "$ref": "#/definitions/TypeTileGrid" + } + + } + }, + + "TypeTileLayerEntryConfig": { + + "type": "object", + "properties": { + "entryType": { + "type": "string", + "enum": [ + "raster-tile" + ], + "default": "raster-tile" + }, + "layerId": { + "type": "string", + "description": "The id of the layer to display on the map." + }, + "layerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer entry at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "layerPathEnding": { + "description": "The ending element of the layer configuration path.", + "type": "string" + }, + "schemaTag": { + "enum": [ + "ogcWms", + "xyzTiles", + "vectorTiles" + ], + "default": "ogcWms" + }, + "source": { "$ref": "#/definitions/TypeSourceTileInitialConfig" } + }, + "required": [ + "schemaTag", + "entryType", + "layerId" + ] + }, + + + + "TypeGeocoreLayerEntryConfig": { + + "type": "object", + "description": "Layer where configration is extracted by a configuration snippet stored on a server. The server configuration will handle bilangual informations.", + "properties": { + "entryType": { + "type": "string", + "enum": [ + "geocore" + ], + "default": "geocore" + }, + "layerId": { + "type": "string", + "description": "The id of the layer to display on the map." + }, + "geocoreLayerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer entry at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "listOfLayerEntryConfig": { + "$ref": "#/definitions/TypeListOfLayerEntryConfig", + "description": "The list of layer entry configurations to use from the GeoView layer group." + }, + "schemaTag": { + "enum": [ + "geoCore" + ], + "defaut": "geoCore" + }, + "source": { "$ref": "#/definitions/TypeSourceGeocoreConfig" } + }, + "required": ["schemaTag","entryType","layerId"] + }, + + "TypeSourceGeocoreConfig": { + + "type": "object", + "description": "Layer source providing geocore data.", + "properties": { + "dataAccessPath": { + "$ref": "#/definitions/TypeLocalizedString", + + "description": "The url path to the geoCore endpoint (optional, this value should be embeded in the GeoView API)." + }, + "featureInfo": { + "$ref": "#/definitions/TypeFeatureInfoNotQueryable" + } + } + }, + + "TypeOgcWmsLayerEntryConfig": { + "type": "object", + "properties": { + "entryType": { + "type": "string", + "enum": [ + "raster-image" + ], + "default": "raster-image" + }, + + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer entry at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "layerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "schemaTag": { + "enum": [ + "ogcWms" + ], + "default": "ogcWms" + }, + "layerId": { + "type": "string", + "description": "The id of the layer to display on the map." + }, + "layerPathEnding": { + "type": "string", + "description": "The ending element of the layer configuration path." + }, + "layerFilter": { + "type": "string", + "description": "Filter to apply on feature of this layer." + }, + "source": { + "$ref": "#/definitions/TypeSourceImageWmsInitialConfig" + }, + "style": { + "$ref": "#/definitions/TypeStyleConfig" + } + }, + "required": [ + "schemaTag", + "entryType", + "layerId" + ] + }, + + "TypeSourceImageStaticInitialConfig": { + + "properties": { + "crossOrigin": { + "description": "The crossOrigin attribute for loaded images. Note that you must provide a crossOrigin value if you want to access pixel data with the Canvas renderer.", + "type": "string" + }, + "dataAccessPath": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The path (English/French) to reach the data to display. If not specified, metadatAccessPath will be assigne dto it." + + }, + "extent": { + "description": "The extent of the static image. Called with [minX, minY, maxX, maxY] extent coordinates.", + "items": { + "type": "number" + }, + "maxItems": 4, + "minItems": 4, + "type": "array" + }, + "featureInfo": { + "$ref": "#/definitions/TypeFeatureInfoNotQueryable" + }, + "projection": { + "description": "Spatial Reference EPSG code supported (https://epsg.io/). We support Web Mercator and Lambert Conical Conform Canada.", + "type": "integer" + } + }, + "type": "object" + }, + + "TypeLayerEntryType": { "type": "string", + "enum": ["vector", + "vector-tile", + "vector-heatmap", + "raster-tile", + "raster-image", + "geoCore" + ], + "description": "Layer entry data type." + }, + + "TypeLayerGroupEntryConfig": { + + "type": "object", + "description": "Entry used to define a layer Group.", + + "properties": { + "entryType": { "type":"string", + + "enum": [ + "group" + ], + "default": "group" + }, + "layerId": { + "type": "string", + "description": "The id of the layer group to display on the map." + }, + "layerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer group (English/French)." + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer group entries at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "listOfLayerEntryConfig": { + "$ref": "#/definitions/TypeListOfLayerEntryConfig", + "description": "The list of layer entry configurations to use from the GeoView layer group." + } + }, + + "required": ["entryType", "layerId", "listOfLayerEntryConfig"] + }, + + + + + "TypeLayerEntryConfig": { + "type": "object", + "oneOf": [ + + { "title": "OgcWmsLayer", + + "properties": { + "schemaTag": { "type": "string", + + "default": "ogcWms" + }, + "entryType": { + "type": "string", + + + "default": "raster-image" + }, + + "layerId": { + "type": "string", + "description": "The id of the layer to display on the map." + }, + "layerPathEnding": { + "type": "string", + "description": "The ending element of the layer configuration path." + }, + + "layerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "layerFilter": { + "type": "string", + "description": "Filter to apply on feature of this layer." + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apTypeStyleConfiply to the layer entry at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "source": { + "$ref": "#/definitions/TypeSourceImageWmsInitialConfig" + }, + "style": { + "$ref": "#/definitions/TypeStyleConfig" + } + }, + "required": [ "entryType", + "schemaTag", + "layerId" + ] + }, + { "title": "LayerGroup", + + + "description": "Entry used to define a layer Group.", + + "properties": { + "entryType": {"type":"string", + + "enum": [ + "group" + ], + "default": "group" + }, + "layerId": { + "type": "string", + "description": "The id of the layer group to display on the map." + }, + "layerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer group (English/French)." + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer group entries at creation time. Initial settings are inherited from the parent in the configuration tree." + } + }, + + "required": ["entryType", "layerId"] + } , + {"title":"VectorTileLayer", + + + "description": "Layer sources providing vector data divided into a tile grid.", + "properties": { + "schemaTag": {"type": "string", + "enum": [ + "not used yet" + ], + "default": "not used yet" + }, + "entryType": { + "type": "string", + "enum": [ + "vector-tile" + ], + "default": "vector-tile" + }, + "layerPathEnding": { + "description": "The ending element of the layer configuration path.", + "type": "string" + }, + "layerId": { + "type": "string", + "description": "The id of the layer to display on the map." + }, + "layerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "layerFilter": { + "description": "Filter to apply on feature of this layer.", + "type": "string" + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer entry at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "source": { + "$ref": "#/definitions/TypeVectorTileSourceInitialConfig", + "description": "Information used to configure the source of a vector tile layer." + }, + "style": { + "$ref": "#/definitions/TypeStyleConfig" + } + }, + + "required": [ + "schemaTag", + "entryType", + "layerId" + ] + }, + + { + "title":"GeocoreLayer", + + "description": "Layer where configration is extracted by a configuration snippet stored on a server. The server configuration will handle bilangual informations.", + "properties": { + "schemaTag": { + "type":"string", + "enum": ["geoCore"],"defaut":"geoCore" + }, + "entryType": { + "type": "string", + "enum": ["geocore"],"default": "geocore" + }, + "layerId": { + "type": "string", + "description": "The id of the layer to display on the map." + }, + "geocoreLayerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer entry at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "source": { "$ref": "#/definitions/TypeSourceGeocoreConfig" + }, + "listOfLayerEntryConfig": { + "$ref": "#/definitions/TypeListOfLayerEntryConfig", + "description": "The list of layer entry configurations to use from the GeoView layer group." + } }, + "required": ["schemaTag","entryType","layerId"] + }, + + { "title": "VectorLayer", + + "properties": { + "schemaTag": {"type":"string", + "enum": ["GeoJSON","esriFeature","ogcWfs","ogcFeature","GeoPackage"],"default": "esriFeature" + }, + "entryType": { + "type": "string", + "enum": [ + "vector" + ] ,"default": "vector" + }, + "layerPathEnding": { + "description": "The ending element of the layer configuration path.", + "type": "string" + }, + "layerId": { + "type": "string", + "description": "The id of the layer to display on the map." + }, + "layerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "layerFilter": { + "description": "Filter to apply on feature of this layer.", + "type": "string" + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer entry at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "source": { "$ref": "#/definitions/TypeVectorSourceInitialConfig" }, + "style": { "$ref": "#/definitions/TypeStyleConfig" } + + }, + "required": ["layerId","schemaTag","entryType" ] + } + + , + { + "title": "EsriDynamicLayer", + + "properties": { + "schemaTag": { "type": "string", + "enum": [ + "esriDynamic" + ], + "default": "esriDynamic" + + }, + "entryType": { + "type": "string", + "enum": [ + "raster-image" + ], + "default": "raster-image" + }, + "layerId": { + "description": "The id of the layer to display on the map.", + "type": "string" + }, + "layerPathEnding": { + "description": "The ending element of the layer configuration path.", + "type": "string" + }, + "layerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "layerFilter": { + "description": "Filter to apply on feature of this layer.", + "type": "string" + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer entry at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "source": { + "$ref": "#/definitions/TypeSourceImageEsriInitialConfig" + }, + "style": { + "$ref": "#/definitions/TypeStyleConfig" + } + }, + "required": [ + "entryType", + "layerId", + "schemaTag" + ], + "type": "object" + }, + { + "title": "TileLayer", + + "properties":{ + "schemaTag": {"type": "string", + "enum": [ + "ogcWms", + "xyzTiles", + "vectorTiles" + ],"default": "ogcWms" + } , + "entryType": { + "type": "string", + "enum": [ + "raster-tile" + ] ,"default": "raster-tile" + }, + "layerId": { + "type": "string", + "description": "The id of the layer to display on the map." + }, + "layerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer entry at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "layerPathEnding": { + "description": "The ending element of the layer configuration path.", + "type": "string" + }, + "source": { "$ref": "#/definitions/TypeSourceTileInitialConfig" } + + }, + "required": [ + "schemaTag", + "entryType", + "layerId" + ] + } + + + ] ,"default":"OgcWmsLayer" + }, + + "TypeListOfLayerEntryConfig": { + "type": "array", + "minItems": 1, + "items": { + "$ref": "#/definitions/TypeLayerEntryConfig" + } + }, + + "TypeMapConfig": { + + "type": "object", + "properties": { + "basemapOptions": { "$ref": "#/definitions/TypeBasemapOptions" }, + "interaction": { "$ref": "#/definitions/TypeInteraction" }, + "listOfGeoviewLayerConfig": { "$ref": "#/definitions/TypeListOfGeoviewLayerConfig" }, + "viewSettings": { "$ref": "#/definitions/TypeViewSettings" }, + "extraOptions": { + "type": "object", + "description": "Additional options used for OpenLayers map options" + } + }, + "required": ["basemapOptions", "interaction", "viewSettings"] + }, + + "TypeBasemapOptions": { + + "type": "object", + "properties": { + "basemapId": { "$ref": "#/definitions/TypeBasemapId" }, + + "shaded": { + "type": "boolean", + "default": true, + "title": "Enable or disable shaded basemap (if basemap id is set to shaded then this should be false)." + + }, + "labeled": { + "type": "boolean", + "default": true, + + "title": "Enable or disable basemap labels" + } + }, + "required": ["basemapId", "shaded", "labeled"] + }, + + "TypeBasemapId": { + "description": "Id of the basemap to use." , + "enum": ["transport", "osm", "simple", "nogeom", "shaded"], + "default": "transport" + + }, + + "TypeInteraction": { + "enum": ["static", "dynamic"], + "default": "dynamic", + "description": "If map is dynamic (pan/zoom) or static to act as a thumbnail (no nav bar)." + }, + + "TypeListOfGeoviewLayerConfig": { + + "description": "List of GeoView Layers in the order which they should be added to the map.", + "type": "array", + + "items": { + "$ref": "#/definitions/TypeGeoviewLayerConfig" + } + }, + + "TypeGeoviewLayerConfig": { + + "type": "object", + "properties": { + "geoviewLayerId": { + "description": "The id of the layer for referencing within the viewer (does not relate directly to any external service). The id will have the language extension (id-'lang').", + "type": "string" + }, + "geoviewLayerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "metadataAccessPath": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The GeoView layer access path (English/French)." + }, + "geoviewLayerType": { + "$ref": "#/definitions/TypeGeoviewLayerType", + "description": "Type of GeoView layer." + }, + "serviceDateFormat": { + "description": "Date format used by the service endpoint.", + "type": "string" + }, + "externalDateFormat": { + "description": "Date format used by the getFeatureInfo to output date variable.", + "type": "string" + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the GeoView layer at creation time." + }, + "listOfLayerEntryConfig": { + "$ref": "#/definitions/TypeListOfLayerEntryConfig", + "description": "The layer entries to use from the GeoView layer." + } + }, + "required": [ + "geoviewLayerId", + "geoviewLayerName", + "metadataAccessPath", + "geoviewLayerType", + "listOfLayerEntryConfig" + ] + }, + + "TypeGeoviewLayerType": { + "type": "string", + "enum": ["", + "esriDynamic", + "esriFeature", + "GeoJSON", + "geoCore", + "GeoPackage", + "xyzTiles", + "ogcFeature", + "ogcWfs", + "ogcWms", + "imageStatic", + "vectorTiles" + ], + "default": [ + "" + ], + "description": "Type of GeoView layer." + } + , + "TypeImageStaticLayerEntryConfig": { + + "properties": { + "entryType": { + "enum": [ + "raster-image" + ] + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer entry at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "layerId": { + "description": "The id of the layer to display on the map.", + "type": "string" + }, + "layerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "layerPathEnding": { + "description": "The ending element of the layer configuration path.", + "type": "string" + }, + "schemaTag": { + "enum": [ + "imageStatic" + ] + }, + "source": { + "$ref": "#/definitions/TypeSourceImageStaticInitialConfig" + } + }, + "required": [ + "schemaTag", + "entryType", + "layerId" + ], + "type": "object" + }, + + "TypeViewSettings": { + + "type": "object", + + "properties": { + "center": { + "type": "array", + "items": [ + + { + "type": "number", + "minimum": -160, + "maximum": 160, + "default": -106, + "description": "Initial longitude value for map center." + }, + { + "type": "number", + "minimum": -80, + "maximum": 80, + "default": 60, + "description": "Initial latitude value for map center." + } + + ] + + }, + "enableRotation": { + "type": "boolean", + "default": true, + "title": "Enable rotation. If false, a rotation constraint that always sets the rotation to zero is used." + }, + "extent": { + "type": "array", + "minItems":4, + "maxItems":4, + "items": { + + "type": "number" + + },"default":[-16763712,5165908,-5688293,10649806], + "description": "The extent that constrains the view. Called with [minX, minY, maxX, maxY] extent coordinates." + }, + "minZoom": { + "type": "integer", + "description": "The minimum zoom level used to determine the resolution constraint. If not set, will use default from basemap.", + "minimum": 0, + "maximum": 50 + }, + "maxZoom": { + "type": "integer", + "description": "The maximum zoom level used to determine the resolution constraint. If not set, will use default from basemap.", + "minimum": 0, + "maximum": 50 + }, + "projection": { "$ref": "#/definitions/TypeValidMapProjectionCodes" }, + "rotation": { + "type": "integer", + "minimum": -360, + "maximum": 360, + "default": 0, + "description": "The initial rotation for the view in degree (positive rotation clockwise, 0 means North). Will be converted to radiant by the viewer." + }, + "zoom": { + "type": "number", + "minimum": 0, + "maximum": 28, + "default": 12, + "description": "Initial map zoom level. Zoom level are define by the basemap zoom levels." + } + }, + "required": ["zoom", "center"] + }, + + "TypeAppBarProps": { + "default": [ + "geolocator" + ], + "description": "Controls availalbe on the application bar.", + "items": { + "enum": [ + "geolocator", + "export" + ] + }, + "minItems": 0, + "type": "array", + "uniqueItems": true + + }, + + "TypeNavBarProps": { + "type": "array", + "uniqueItems": true, + "items": { + "enum": [ + "zoom", + "fullscreen", + "home", + "location", + "export" + ] + }, + "default": [ + "zoom", + "fullscreen", + "home" + ], + "description": "Controls availalbe on the navigation bar.", + "minItems": 0 + }, + + "TypeFooterTabsProps": { + "type": "object", + + "properties": { + "tabs": { + "type": "object", + "description": "Available tabs", + "properties": { + "core": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "legend", + "layers", + "details", + "data-table", + "time-slider", + "geochart" + ] + }, + "minItems": 1, + "default": [ + "legend", + "layers", + "details", + "data-table" + ], + "uniqueItems": true, + "description": "Default core tabs of footer panel to use" + }, + "custom": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "defaultTabs": { + "type": "string" + }, + "contentHTML": { + "type": "string" + } + } + }, + "minItems": 0, + "default": [], + "uniqueItems": true, + "description": "Custom tabs of footer panel to use" + } + } + + }, + "collapsed": { + "type": "boolean", + "default": false, + "description": "State of footer panel when map is loaded (expanded or collapsed)" + } + }, + "required": [ + "tabs" + ] + }, + + "TypeAppBarTabsProps": { + "type": "object", + + "properties": { + "tabs": { + "type": "object", + "description": "Available tabs", + "properties": { + "core": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "basemap-panel", + "layers", + "geochart" + ] + }, + "minItems": 1, + "default": [ "basemap-panel"], + "uniqueItems": true, + "description": "Default core tabs of app-bar to use" + }, + "custom": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "defaultTabs": { + "type": "string" + }, + "contentHTML": { + "type": "string" + } + } + }, + "minItems": 0, + "default": [], + "uniqueItems": true, + "description": "Custom tabs of app-bar to use" + } + } + + }, + "collapsed": { + "type": "boolean", + "default": false, + "description": "State of app-bar when map is loaded (expanded or collapsed)" + } + }, + "required": [ + "tabs" + ] + }, + + "TypeOverviewMapProps": { + "type": "object", + + "properties": { + "hideOnZoom": { + "type": "number", + "minimum": 0, + "maximum": 10, + "default": 0, + "description": "Minimum zoom level to show overview map" + } + } + }, + + "TypeMapComponents": { + "type": "array", + "uniqueItems": true, + "items": { + "enum": [ + "overview-map", + "north-arrow", + "geolocator" + ] + }, + "default": [ + "overview-map", + "north-arrow", + "geolocator" + ], + "description": "Core components to initialize on viewer load. The schema for those are inside this file.", + + "minItems": 0 + }, + + "TypeMapCorePackages": { + "type": "array", + "uniqueItems": true, + "items": { + "enum": [ + "basemap-panel", + "layers-panel", + "details-panel", + "geolocator-panel", + "swiper", + "geochart", + "time-slider" + ] + }, + "default": ["basemap-panel" + ], + "description": "Core packages to initialize on viewer load. The schema for those are on their own package. NOTE: config from packages are in the same loaction as core config (<>-<>.json).", + + "minItems": 0 + }, + + "TypeExternalPackages": { + "type": "array", + "items": { + + "type": "object", + "properties": { + "name": { + "type": "string", + + + "description": "External Package name. The name must be ideintical to the window external package object to load." + }, + "configUrl": { + "type": "string", + + "format": "uri", + "description": "The url to the external package configuration setting. The core package will read the configuration and pass it inside the package." + } + }, + "required": ["name"] + }, + "default": [], + "description": "List of external packages to initialize on viewer load.", + "minItems": 0 + }, + + "TypeServiceUrls": { + + "type": "object", + "description": "Service endpoint urls", + "properties": { + "keys": { + "type": "string", + "default": "https://geocore.api.geo.ca", + + "description": "Service end point to access API for layers specification (loading and plugins parameters). By default it is GeoCore but can be another endpoint with similar output." + }, + "geolocator": { + "type": "string", + + "description": "Service end point to access geo location of searched value." + }, + + "proxyUrl": { + "type": "string", + + "description": "An optional proxy to be used for dealing with same-origin issues. URL must either be a relative path on the same server or an absolute path on a server which sets CORS headers." + } + }, + "required": [ + "keys" + ] + }, + + "TypeDisplayLanguage": { + "enum": ["en", "fr"], + "description": "Display languages supported." + }, + + "TypeLocalizedLanguages": { + "enum": ["en", "fr"], + "description": "ISO 639-1 code indicating the languages supported by the configuration file." + }, + + "TypeListOfLocalizedLanguages": { + "type": "array", + "uniqueItems": true, + "items": { "$ref": "#/definitions/TypeLocalizedLanguages" }, + "default": ["en"], + "description": "ISO 639-1 code indicating the languages supported by the configuration file. It will use value(s) provided here to access bilangual configuration nodes. For value(s) provided here, each bilingual configuration node MUST provide a value.", + "minItems": 1 + }, + + "TypeValidVersions": { + "enum": ["1.0"], + "description": "The schema version that can be used to validate the configuration file. The schema should enumerate the list of versions accepted by this version of the viewer." + }, + + "TypeMapFeaturesInstance": { + + "description": "The map features configuration. This type is used by the IsValidTypeMapFeaturesInstance method coded in config-validation.ts file. It does the validation down to the list of layer entry config.", + "type": "object", + "properties": { + "mapId": { "type": "string" }, + "map": { "$ref": "#/definitions/TypeMapConfig" }, + "appBar": { "$ref": "#/definitions/TypeAppBarProps" }, + "navBar": { "$ref": "#/definitions/TypeNavBarProps" }, + "footerTabs": { "$ref": "#/definitions/TypeFooterTabsProps"}, + "appBarTabs": {"$ref": "#/definitions/TypeAppBarTabsProps"}, + "overviewMap": {"$ref": "#/definitions/TypeOverviewMapProps"}, + "components": { "$ref": "#/definitions/TypeMapComponents" }, + "corePackages": { "$ref": "#/definitions/TypeMapCorePackages" }, + "externalPackages": { "$ref": "#/definitions/TypeExternalPackages" }, + "serviceUrls": { "$ref": "#/definitions/TypeServiceUrls" }, + "suportedLanguages": { "$ref": "#/definitions/TypeListOfLocalizedLanguages" }, + "schemaVersionUsed": { "$ref": "#/definitions/TypeValidVersions" } + }, + "required": ["map", "suportedLanguages"] + } + }, + + "properties": { + "mapId": { "type": "string" }, + "map": { "$ref": "#/definitions/TypeMapConfig" }, + "theme": { "Title": "Map Theme Style", + "enum": [ + "dark", + "light", + "geo.ca" + ], + "default": "dark", + "description": "Theme style of the viewer." + }, + "appBar": { "$ref": "#/definitions/TypeAppBarProps" }, + "navBar": { "$ref": "#/definitions/TypeNavBarProps" }, + "footerTabs": { "$ref": "#/definitions/TypeFooterTabsProps"}, + "appBarTabs": {"$ref": "#/definitions/TypeAppBarTabsProps"}, + "overviewMap": {"$ref": "#/definitions/TypeOverviewMapProps"}, + "components": { "$ref": "#/definitions/TypeMapComponents" }, + "corePackages": { "$ref": "#/definitions/TypeMapCorePackages" }, + "externalPackages": {"$ref": "#/definitions/TypeExternalPackages"}, + "serviceUrls": { "$ref": "#/definitions/TypeServiceUrls" }, + "suportedLanguages": { "$ref": "#/definitions/TypeListOfLocalizedLanguages" }, + "versionUsed": { "$ref": "#/definitions/TypeValidVersions" } + } + }, + + + "areasOfInterest": { + "title": "Areas of Interest", + "type": "object", + "properties": { + "enable": { + "type": "boolean", + "title": "Enable", + "default":true + }, + "areas": { + "type": "array", + "items": { + "type": "object", + "properties": { + "title-en-CA": { + "type": "string", + "title": "English Title" + }, + "title-fr-CA": { + "type": "string", + "title": "French Title" + }, + "xmin": { + "type": "number", + "title": "Minimum value of x", + "default": -4844430 + }, + "ymin": { + "type": "number", + "title": "Minimum value of y", + "default": -1052774 + }, + "xmax": { + "type": "number", + "title": "Maximum value of x", + "default": 5666163 + }, + "ymax": { + "type": "number", + "title": "Maximum value of y", + "default": 4170111 + }, + "wkid": { + "type": "number", + "title": "Spatial Reference", + "default": 3978 + }, + "thumbnailUrl": { + "type": "string", + "title": "Thumbnail URL" + } + }, + "required": [ + "title-en-CA", + "title-fr-CA" + ] + } + } + } + }, + + + "swiper": { + "title": "Swiper", + "type": "object", + "properties": { + "enable": { + "type": "boolean", + "title": "Enable", + "default":true + }, + "type": { + "type": "string", + "title": "Type", + "enum": [ + "vertical", + "horizontal" + ], + "default": "vertical" + }, + "keyboardOffset": { + "type": "number", + "title": "Keyboard Movement", + "description": "Pixel value of swiper displacement.", + "default": 10, + "minimum": 1, + "maximum": 100 + }, + "layers": { + "type": "string", + "title": "Layers", + "description": "The id of the layer for referencing within the viewer (does not relate directly to any external service).", + "enum":[] + } + + + + + + }, + "required": [ + "type", + "keyboardOffset", + "layers" + ] + }, + + "thematicSlider": { + "title": "Thematic Slider", + "type": "object", + "properties": { + "enable": { + "type": "boolean", + "title": "Enable", + "default":true + }, + "open": { + "type": "boolean", + "title": "Open by default", + "default": true + }, + "autorun": { + "type": "boolean", + "title": "Start animation on load", + "defaul": false + }, + "loop": { + "type": "boolean", + "title": "Play the animation in loop", + "default": false + }, + "slider": { + "type": "boolean", + "title": "Enable slider control", + "default": true + }, + "stack": { + "type": "boolean", + "title": "Stack layer visibility", + "default": false + }, + "legendStack": { + "type": "boolean", + "title": "Stack legend items (useful with the stack option to see all active elements legend)", + "default": true + }, + "layers": { + "type": "array", + "title": "Layers", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "The id of the layer for referencing within the viewer (does not relate directly to any external service).", + "title": "Layer id", + "enum":[] + + }, + "duration": { + "type": "number", + "title": "Animation duration in milliseconds", + "minimum": 3000, + "default": 3000 + }, + "title": { + "type": "string", + "title": "Title for this layer animation" + }, + "description": { + "type": "string", + "title": "Description for this layer animation" + }, + "legend": { + "type": "array", + "title": "Legend", + "description": "Add items for a custom legend, leave it blank for default legend.", + "default": [], + "items": { + "type": "object", + "properties": { + "label": { + "type": "string", + "title": "Label" + }, + "image": { + "type": "object", + "properties": { + "url": { + "type": "string", + "title": "URL", + "default": "" + }, + "width": { + "type": "number", + "title": "Width", + "minimum": 25, + "maximum": 150, + "default": 150 + }, + "height": { + "type": "number", + "title": "Height", + "minimum": 25, + "maximum": 150, + "default": 150 + } + }, + "required": [ + "url", + "width", + "height" + ] + } + }, + "required": [ + "image" + ] + } + } + }, + "required": [ + "id", + "duration" + ] + } + }, + "required": [ + "layers" + ] + } + } + } + ] + } + + diff --git a/src/components/db - Copy feb7combinedtypeofvectorysetttings.json b/src/components/db - Copy feb7combinedtypeofvectorysetttings.json new file mode 100644 index 0000000..669b16c --- /dev/null +++ b/src/components/db - Copy feb7combinedtypeofvectorysetttings.json @@ -0,0 +1,4180 @@ +{ + + "plugins": [ + + { "draw": { + + "title": "Draw", + + + + "type": "object", + "properties": { + + "enable": { + "type": "boolean", + "title": "Enable", + "default":true + }, + "open": { + + "type": "boolean", + "title": "Open by default", + "default": true + }, + "tools": { + "type": "array", + "title": "Tools", + "minItems":0, + "uniqueItems": true, + "items":{ + "enum": [ + "picker", + "point", + "polyline", + "polygon", + "edit", + "measure", + "extent", + "write", + "read" + ] + }, + + + "description": "Tools to add to draw toolbar.", + "default": [ + "picker", + "point", + "polyline", + "polygon", + "edit", + "measure", + "extent", + "write", + "read" + ] + } + + }, + "required": [ + "enabled", + "open","tools" + ] + },"chart": { + + "title": "Chart", + "type": "object", + "properties": { + + "enable": { + "type": "boolean", + "title": "Enable", + "description":"chart", + + "default":true + + + }, + "type": { + "title": "Chart Type", + "type": "string", + "enum": [ + "pie", + "bar", + "line" + ], + + "default": "pie" + }, + "title": { + "title": "Title", + "type": "string", + "default": "" + }, + "labelsPie": { + "type": "object", + "title": "Labels", + "properties": { + "type": { + "title": "Type", + "type": "string", + "enum": [ + "field", + "config" + ], + "description": "Retreive the labels from a field or from the configuration.", + "default": "config" + }, + "values": { + "title": "Values", + "type": "string", + "description": "Values separated by semi colon or field name.", + "default": "" + }, + "split": { + "title": "Split Character", + "type": "string", + "description": "Character to use to split list of values.", + "default": ";" + } + }, + "required": [ + "type", + "values", + "split" + ] + }, + "options": { + "title": "Options", + "type": "object", + "properties": { + "colors": { + "title": "Datasets Colors", + "type": "string", + "description": "Hexadecimal color code separated by semicolon. If not provided, default colors will be use.", + "default": "" + }, + "cutOut": { + "title": "Cut Out Percentage", + "type": "number", + "description": "Cut out percentage to use to give doughnut effect.", + "default": 0, + "minimum": 0, + "maximum": 80 + } + }, + "required": [ + "cutOut" + ] + }, + "axis": { + "type": "object", + "title": "Labels", + "properties": { + "xAxis": { + "title": "X Axis", + "type": "object", + "properties": { + "title": { + "title": "Title", + "type": "string", + "default": "" + }, + "type": { + "title": "Type", + "type": "string", + "enum": [ + "field", + "config", + "linear", + "date" + ], + "description": "Retreive the labels from a field or configuration for bar chart or from values (linear or time) for line chart.", + "default": "config" + }, + "values": { + "title": "Values", + "type": "string", + "description": "Values separated by semicolon or field name.", + "default": "" + }, + "split": { + "title": "Split Character", + "type": "string", + "description": "Character to use to split list of values.", + "default": ";" + } + }, + "required": [ + "type", + "values", + "split" + ] + }, + "yAxis": { + "title": "Y Axis", + "type": "object", + "properties": { + "title": { + "title": "Title", + "type": "string", + "default": "" + }, + "type": { + "title": "Type", + "type": "string", + "enum": [ + "field", + "config", + "linear", + "time" + ], + "description": "Retreive the labels from a field or configuration for bar chart or from values (linear or time) for line chart.", + "default": "config" + }, + "values": { + "title": "Values", + "type": "string", + "description": "Values separated by semicolon or field name.", + "default": "" + }, + "split": { + "title": "Split Character", + "type": "string", + "description": "Character to use to split list of values.", + "default": ";" + } + }, + "required": [ + "type", + "values", + "split" + ] + }, + "required": [ + "xAxis", + "yAxis" + ] + } + }, + "layers": { + "type": "array", + "title": "Layers", + "items": { + "type": "object", + "properties": { + "id": { + "title": "Layer ID", + "type": "string", + "description": "", + "enum":["1"] + }, + "nameField": { + "type": "string", + "title": "Name Field", + "description": "Field name to use for the chart selection combo box when multiple charts." + }, + "type": { + "title": "Chart Data Type", + "type": "string", + "enum": [ + "inline", + "link" + ], + "description": "Type of data (inline for items inside the layer or link for items inside a link table).", + "default": "inline" + }, + "linkUrl": { + "type": "string", + "title": "Link URL", + "description": "URL of the link table." + }, + "linkField": { + "type": "string", + "title": "Link Field", + "description": "Field name for the link between the layer and the table." + }, + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "type": { + "title": "Type of data inside the field", + "type": "string", + "enum": [ + "single", + "combine" + ], + "description": "Single if there is only one value inside the field. Combine if we use time axis and time and value are part of the field.", + "default": "combine" + }, + "linkType": { + "title": "Type of link", + "type": "string", + "enum": [ + "single", + "multi" + ], + "description": "How data is structure inside the link table (single for one field for value and one for date OR multiple if there is multiple datasets inside one field and the chart needs to parse).", + "default": "single" + }, + "link": { + "title": "Link Field", + "type": "string", + "description": "Link field to link between layer and table." + }, + "date": { + "title": "Date Field", + "type": "string", + "description": "Field to use for the date" + }, + "measure": { + "title": "Measure Field", + "type": "string" + }, + "values": { + "title": "Label Values", + "type": "string", + "description": "Field name to get labels from for link type multi." + }, + "label": { + "type": "object", + "title": "Dataset Labels", + "properties": { + "type": { + "title": "Type", + "type": "string", + "enum": [ + "field", + "config" + ], + "description": "Retreive the labels from a field or from the configuration.", + "default": "config" + }, + "values": { + "title": "Values", + "type": "string", + "description": "Values separated by semicolon or field name.", + "default": "" + }, + "split": { + "title": "Split Character", + "type": "string", + "description": "Character to use to split list of values.", + "default": ";" + } + }, + "required": [ + "type", + "values", + "split" + ] + }, + "regex": { + "title": "Dataset splitter", + "type": "string", + "description": "

Regex value to split datasets inside the field.

This field is to manage when you have multiple datasets or combine values in the same field. To be able to separate datasets from values, we will use a regex expression. We encourage you to use your data and test your regex expression on a online site like https://regex101.com.

Below we list some samples of datasets and regex:

  • Sample 1
    • Data: [255;255;255];[120;232;23];[32;44;134]
    • Regex: \\\\[|\\\\];\\\\[|\\\\]
    • Ouput: 3 datasets (e.g. 255;255;255). Values inside dataset will be split by the field 'Values Splitter'.
  • Sample 2
    • Data: (2011-03-28,0.511),(2011-04-04,0.421)
    • Regex: \\\\(|\\\\),\\\\(|\\\\)
    • Ouput: 1 datasets, 2 pairs of values (e.g. 2011-03-28,0.511). Values inside are combined (y and x axis) and will be split by the field 'Values Splitter'.

Note: we need to double the '\\' character

", + "default": "\\(|\\),\\(|\\)" + }, + "split": { + "title": "Values splitter", + "type": "string", + "default": ",", + "description": "Character to use to split values inside a field. E.g. a field contains '10;20;30' means there is 3 values split by ';' or [1,2,3];[4,5,6] means there is 2 datasets with 3 values each split by ','." + }, + "prefix": { + "title": "Prefix", + "type": "string", + "default": "", + "description": "Prefix to add to data hover." + }, + "suffix": { + "title": "Suffix", + "type": "string", + "default": "", + "description": "Suffix to add to data hover." + } + }, + "required": [ + "type", + "measure", + "split" + ] + } + }, + "details": { + "type": "object", + "title": "Details", + "properties": { + "enabled": { + "type": "boolean", + "title": "Enable" + }, + "value": { + "type": "string", + "title": "Value", + "description": "String with the custom details in markdown notation." + } + } + } + }, + "required": [ + "id", + "nameField", + "type", + "data" + ] + } + }, + "required": [ + "type", + "layers" + ] + } + },"rangeSlider": { + "$id": "https://cgpv/schema", + "$schema": "http://json-schema.org/draft-07/schema#", + + "title": "Range Slider", + "type": "object", + "properties": { + "enable": { + "type": "boolean", + "title": "Enable", + "default": true + }, + "open": { + "type": "boolean", + "title": "Open by default", + "default": false + }, + "maximize": { + "type": "boolean", + "title": "Slider maximized by default", + "default": false + }, + "maximizeDesc": { + "type": "boolean", + "title": "Description section open by default", + "default": false + }, + "autorun": { + "type": "boolean", + "title": "Start animation on load", + "defaul": false + }, + "loop": { + "type": "boolean", + "title": "Play the animation in loop", + "default": false + }, + "reverse": { + "type": "boolean", + "title": "Animation in reverse mode", + "default": false + }, + "lock": { + "type": "boolean", + "title": "Lock handle", + "default": false + }, + "controls": { + "type": "array", + "minItems":0, + "uniqueItems": true, + + "items": { + "enum": [ + "lock", + "loop", + "delay", + "export", + "refresh", + "reverse" + ] + }, + "default": [ + "lock", + "delay" + ], + "title": "Slider bar controls" + + }, + "params": { + "type": "object", + "title": "Parameters", + "properties": { + "type": { + "title": "Slider Type", + "type": "string", + "enum": [ + "number", + "date", + "wmst" + ], + "description": "If the Date or WMS-T is selected, range and limit must be in milliseconds. Note: Date is for esri layer and WMS-T is for ogc WMS-T layer.", + "default": "number" + }, + "rangeType": { + "title": "Range Type", + "type": "string", + "enum": [ + "single", + "dual" + ], + "description": "Type of range (single for one handle or dual for 2 handles).", + "default": "dual" + }, + "stepType": { + "title": "Step Type", + "type": "string", + "enum": [ + "dynamic", + "static" + ], + "description": "Type of step (dynamic for open values or static from a list of values).", + "default": "dynamic" + }, + "precision": { + "title": "Precision", + "type": "string", + "enum": [ + "0", + "1", + "2", + "date", + "hour" + ], + "description": "Precision of numeric data (0, 1, 2) or date (Date, Hour).", + "default": "0" + }, + "delay": { + "title": "Animation Delay", + "type": "string", + "enum": [ + "3000", + "4000", + "5000", + "6000", + "7000" + ], + "description": "Delay between animations.", + "default": "3000" + }, + "rangeInterval": { + "type": "number", + "title": "Interval (in milliseconds for date data type)", + "default": -1, + "description": "When the limit type is dynamic, this option allows you to define a preset interval between the two handles. The value must be in milliseconds date data type. For other numerical value formats, enter the desired value directly. To convert a time interval into milliseconds, use the built-in converter. Will start at the beginning of the scroll bar, unless the \"Start at end\" option is enabled." + }, + "startRangeEnd": { + "type": "boolean", + "title": "Start interval at the end", + "default": false + }, + "range": { + "type": "object", + "title": "", + "properties": { + "min": { + "type": "number", + "title": "Minimum value of the range (in milliseconds for date data type)", + "description": "The minimum value of the range that corresponds to the position of the left handle. If not defined, the minimum limit will be used. The value must be in milliseconds date data type. For other numerical value formats, enter the desired value directly. To convert a date to milliseconds, use the site's built-in converter.", + "default": 0 + }, + "max": { + "type": "number", + "title": "Maximum value of the range (in milliseconds for date data type)", + "description": "The maximum value of the range that corresponds to the position of the right handle. If not defined, the maximum limit will be used. The value must be in milliseconds date data type. For other numerical value formats, enter the desired value directly. To convert a date to milliseconds, use the site's built-in converter.", + "default": 1 + } + } + }, + "limit": { + "type": "object", + "title": "Limits of the data set values", + "properties": { + "min": { + "type": "number", + "title": "Minimum Limit", + "description": "The minimum value contained in the dataset. If not defined, the value will be found using the values present in the used field of the layer. To convert a date to milliseconds, use the site's built-in converter.", + "default": 0 + }, + "max": { + "type": "number", + "title": "Maximum Limit", + "description": "The maximum value contained in the dataset. If not defined, the value will be found using the values present in the used field of the layer. To convert a date to milliseconds, use the site's built-in converter.", + "default": 1 + }, + "staticItems": { + "type": "array", + "title": "Static Limit Values", + "items": { + "title": "Value", + "type": "number" + }, + "default": [], + "description": "The values for static limit. Note: the minimum and maximum limits are used to define the lower and upper static limits. Enter only the intermediate values here." + } + } + }, + "units": { + "type": "string", + "title": "Units", + "description": "Shown at the right of the time axis. Keep it short to improve readability.", + "default": "" + }, + "description": { + "type": "string", + "title": "Description", + "description": "Description to add in the section below the slider." + } + }, + "required": [ + "type" + ] + }, + "layers": { + "type": "array", + "title": "Layers", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "The id of the layer for referencing within the viewer (does not relate directly to any external service).", + "title": "Layer id", + "enum":[] + + }, + "field": { + "type": "string", + "description": "The field name to use.", + "title": "Field Name", + "default": "" + }, + "isTimeAware": { + "type": "boolean", + "title": "Is Time Aware", + "default": true, + "description": "If time aware is true, the slider will use the TimeInfo (ESRI) or time dimension (WMS) to extract limits and range." + } + }, + "required": [ + "id, field", + "isTimeAware" + ] + } + } + }, + + "required": [ + "params", + "layers" + ] + }, + + + + "map": { + "$id": "https://cgpv/schema", + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "GeoView Core Config Schema", + + "version": 1.0, + "comments": "Configuration for GeoView core packages, each packages manages it own schema. It correspond to the TypeMapFeaturesInstance type.", + "comments": " in TypeLOcalized string I took out minProperties: 1,because it casused error messages eve if field was not requiered", + + "definitions": { + "TypeLocalizedString": { + + "type": "object", + "properties": { + "en": { + "type": "string", + "description": "The English version of the string." + }, + "fr": { + "type": "string", + "description": "The French version of the string. " + } + } + }, + + "TypeDetailsLayerConfig": { + + "type": "object", + "properties": { + + "parser": { + "type": "string", + "description": "A path to a javascript file with a function for parsing the layers identify output. Only needed if a custom template is being used." + }, + "template": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "A path to an html template (English/French) that will override default identify output." + } + }, + "required": ["template"] + }, + + "TypeFeatureInfoLayerConfig": { + + "type": "object", + "properties": { + "queryable": { + "type": "boolean", + "default": true, + "title": "Allow querying. Default = true." + }, + "customParser": { "$ref": "#/definitions/TypeDetailsLayerConfig" }, + "nameField": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display field (English/French) of the layer. If it is not present the viewer will make an attempt to find the first valid field." + }, + "outfields": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "A comma separated list of attribute names (English/French) that should be requested on query (all by default)." + }, + "fieldTypes": { + "type": "string", + "description": "A comma separated list of types. Type at index i is associated to the variable at index i." + }, + "aliasFields": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "A comma separated list of attribute names (English/French) that should be use for alias. If empty, no alias will be set if not found." + } + }, + "required": [ + "queryable" + ] + }, + "TypeFeatureInfoNotQueryable": { + + "properties": { + "queryable": { + "const": false, + "description": "Do not allow querying.", + "type": "boolean" + } + }, + "required": [ + "queryable" + ], + "type": "object" + }, + + "TypeStrokeSymbolConfig": { + + "type": "object", + "description": "Stroke style for vector features.", + "minProperties": 1, + "properties": { + "color": { + "type": "string" + }, + "lineStyle": { + "enum": [ + "dash", + "dash-dot", + "dash-dot-dot", + "dot", + "longDash", + "longDash-dot", + "null", + "shortDash", + "shortDash-dot", + "shortDash-dot-dot", + "solid" + ] + }, + "width": { + "type": "number" + } + }, + "required": [ + "color", + "width", + "lineStyle" + ] + }, + + "TypeLineStringVectorConfig": { + + "type": "object", + "properties": { + "type": { "type":"string", + "default": "lineString", + "enum": [ + "lineString" + ] + }, + "stroke": { "$ref": "#/definitions/TypeStrokeSymbolConfig" } + }, + "required": [ + "type", + "stroke" + ] + }, + + "TypePolygonVectorConfig": { + + "type": "object", + "properties": { + "type": {"type":"string", "default": "filledPolygon", + "enum": ["filledPolygon"] + }, + "color": { "type": "string" }, + "stroke": { "$ref": "#/definitions/TypeStrokeSymbolConfig" }, + "paternSize": { + "type": "number", + "description": "Distance between patern lines. Default = 8" + }, + "paternWidth": { + "type": "number", + "description": "Patern line width.default = 1." + }, + "fillStyle": { + "enum": [ + "solid", + "backwardDiagonal", + "cross", + "diagonalCross", + "forwardDiagonal", + "horizontal", + "null", + "vertical" + ], + "description": "Kind of filling for vector features. Default = solid. " + } + }, + "required": [ + "type", + "stroke" + ] + }, + + "TypeSimpleSymbolVectorConfig": { + + "type": "object", + "properties": { + "type": {"type":"string", + "default": "simpleSymbol", + "enum": ["simpleSymbol"] + }, + "rotation": { + "type": "number", + "description": "Symbol rotation in radians." + }, + "color": { "type": "string" }, + "stroke": { "$ref": "#/definitions/TypeStrokeSymbolConfig" }, + "size": { "type": "number" }, + "offset": { + "type": "array", + "items": { + "type": "number" + }, + "minItems": 2, + "maxItems": 2 + }, + "symbol": { + "enum": [ + "circle", + "+", + "diamond", + "square", + "triangle", + "X", + "star" + ] + } + }, + "required": + ["type", + "symbol" + ] + }, + + "TypeIconSymbolVectorConfig": { + + "type": "object", + "properties": { + "type": {"type":"string", + "default": "iconSymbol", + "enum": ["iconSymbol"] + }, + "mimeType": { "type": "string" }, + "src": { "type": "string" }, + "width": { + "type": "integer", + "description": "Icon width in pixel." + }, + "height": { + "type": "integer", + "description": "Icon height in pixel." + }, + "rotation": { + "type": "number", + "description": "Icon rotation in radians." + }, + "opacity": { + "type": "number", + "minimum": 0, + "maximum": 1, + "default": 1 + }, + "offset": { + "type": "array", + "items": { + "type": "number" + }, + "minItems": 2, + "maxItems": 2 + }, + "crossOrigin": { + "type": "string", + "description": "The crossOrigin attribute for loaded images. Note that you must provide a crossOrigin value if you want to access pixel data with the Canvas renderer." + } + }, + "required": ["type", "mimeType", "src"] + }, + + "TypeSimpleStyleConfig": { + + "type": "object", + "properties": { + "styleId": { + "type": "string" + }, + "styleType": { + "enum": ["simple"], + "default": "simple" + }, + "label": { + "type": "string" + }, + "settings": { "$ref": "#/definitions/TypeKindOfVectorSettings" } + }, + "required": [ + "styleType", + "label", + "settings" + ] + }, + + + "TypeUniqueValueStyleConfig": { + + "type": "object", + "properties": { + "styleId": { + "type": "string" + }, + "styleType": {"type":"string", + "default": "uniqueValue", + "enum": ["uniqueValue"] + }, + "defaultLabel": { + "type": "string", + "description": "Label used if field/value association is not found." + }, + "defaultSettings": { + "$ref": "#/definitions/TypeKindOfVectorSettings", + "description": "Settings used if field/value association is not found." + }, + "defaultVisible": { + "description": "Flag used to show/hide features associated to the default label (default: yes).", + "enum": [ + "yes", + "no", + "always" + ] + }, + "fields": { + "type": "array", + "items": { + "type": "string" + }, + "minItems": 1 + }, + "uniqueValueStyleInfo": { + "type": "array", + "items": { + + "type": "object", + "properties": { + "label": { + "type": "string" + }, + "settings": { + "$ref": "#/definitions/TypeKindOfVectorSettings" + }, + "values": { + "items": { + "oneOf": [ + { "title": "String Value", + "type": "string" + }, + { "title": "Numeric Value", + "type": "number" + } + ] + }, + "minItems": 1, + "type": "array" + }, + "visible": { + "description": "Flag used to show/hide features associated to the label (default: yes).", + "enum": [ + "yes", + "no", + "always" + ] + } + } + + }, + "minItems": 1, + "required": [ + "label", + "values", + "options" + ] + } + }, + "required": [ + "styleType", + "fields", + "uniqueValueStyleInfo" + ] + }, + + "TypeUniqueValueStyleInfo": { + "type": "array", + "items": { + + "type": "object", + "properties": { + "label": { + "type": "string" + }, + "settings": { + "$ref": "#/definitions/TypeKindOfVectorSettings" + }, + "values": { + "items": { + "oneOf": [ + { "title": "String Value", + "type": "string" + }, + { "title": "Numeric Value", + "type": "number" + } + ] + }, + "minItems": 1, + "type": "array" + }, + "visible": { + "description": "Flag used to show/hide features associated to the label (default: yes).", + "enum": [ + "yes", + "no", + "always" + ] + } + } + + }, + "minItems": 1, + "required": [ + "label", + "values", + "options" + ] + + }, + + "TypeValidMapProjectionCodes": { + "default": 3978, + "description": "Spatial Reference EPSG code supported (https://epsg.io/). We support Web Mercator and Lambert Conical Conform Canada.", + "enum": [ + 3978, + 3857 + ] + }, + + "TypeClassBreakStyleConfig": { + + "type": "object", + "properties": { + "styleId": { + "type": "string" + }, + "styleType": { + "default": "classBreaks", + "enum": ["classBreaks"] + }, + "field": { + "type": "string" + }, + "defaultLabel": { + "type": "string", + "description": "Label used if field/value association is not found." + }, + "defaultSettings": { + "$ref": "#/definitions/TypeKindOfVectorSettings", + "description": "Settings used if field/value association is not found." + }, + "defaultVisible": { + "description": "Flag used to show/hide features associated to the default label (default: yes).", + "default": "yes", + "enum": [ + "yes", + "no", + "always" + ] + }, + + "classBreakStyleInfo": { "$ref": "#/definitions/TypeClassBreakStyleInfo" } + }, + "required": ["styleType", "field", "classBreakStyleInfo"] + }, + + + "TypeClassBreakStyleInfo": { + + "type": "array", + "items": { + + "type": "object", + "properties": { + + "label": { + "type": "string" + }, + "minValue": { + "oneOf": [ + { "title": "minValue String value", + "type": "string" + }, + { "title": "minValue Numeric value", + "type": "number" + } + ] + }, + "maxValue": { + "oneOf": [ + { "title": "maxValue String value", + "type": "string" + }, + { "title": "maxValue Numeric value", + "type": "number" + } + ] + }, + "visible": { + "description": "Flag used to show/hide features associated to the label (default: yes).", + "enum": [ + "yes", + "no", + "always" + ], + "default" : ["no"] + }, + + "settings": { "$ref": "#/definitions/TypeKindOfVectorSettings" } + } + }, + "minItems": 1, + "required": ["label", "minValue", "maxValue", "settings"] + + }, + + "TypeKindOfVectorSettings": { + "oneOf": [ + { "title":"LineString", + "type": "object", + "properties": { + "type": { "type":"string", + "default": "lineString", + "enum": [ + "lineString" + ] + }, + "stroke": { "type": "object", + "description": "Stroke style for vector features.", + "minProperties": 1, + "properties": { + "color": { + "type": "string" + }, + "lineStyle": { + "enum": [ + "dash", + "dash-dot", + "dash-dot-dot", + "dot", + "longDash", + "longDash-dot", + "null", + "shortDash", + "shortDash-dot", + "shortDash-dot-dot", + "solid" + ] + }, + "width": { + "type": "number" + } + }, + "required": [ + "color", + "width", + "lineStyle" + ] } + }, + "required": [ + "type", + "stroke" + ] }, + { "title":"Polygon", + "type": "object", + "properties": { + "type": {"type":"string", "default": "filledPolygon", + "enum": ["filledPolygon"] + }, + "color": { "type": "string" }, + "stroke": { + "type": "object" , + "description": "Stroke style for vector features.", + "minProperties": 1, + "properties": { + "color": { + "type": "string" + }, + "lineStyle": { + "enum": [ + "dash", + "dash-dot", + "dash-dot-dot", + "dot", + "longDash", + "longDash-dot", + "null", + "shortDash", + "shortDash-dot", + "shortDash-dot-dot", + "solid" + ] + }, + "width": { + "type": "number" + } + }, + "required": [ + "color", + "width", + "lineStyle" + ] + }, + "paternSize": { + "type": "number", + "description": "Distance between patern lines. Default = 8" + }, + "paternWidth": { + "type": "number", + "description": "Patern line width.default = 1." + }, + "fillStyle": { + "enum": [ + "solid", + "backwardDiagonal", + "cross", + "diagonalCross", + "forwardDiagonal", + "horizontal", + "null", + "vertical" + ], + "description": "Kind of filling for vector features. Default = solid. " + } + }, + "required": [ + "type", + "stroke" + ] }, + { "title":"SimpleSymbol", + "type": "object", + "properties": { + "type": {"type":"string", + "default": "simpleSymbol", + "enum": ["simpleSymbol"] + }, + "rotation": { + "type": "number", + "description": "Symbol rotation in radians." + }, + "color": { "type": "string" }, + "stroke": { + "type": "object", + "description": "Stroke style for vector features.", + "minProperties": 1, + "properties": { + "color": { + "type": "string" + }, + "lineStyle": { + "enum": [ + "dash", + "dash-dot", + "dash-dot-dot", + "dot", + "longDash", + "longDash-dot", + "null", + "shortDash", + "shortDash-dot", + "shortDash-dot-dot", + "solid" + ] + }, + "width": { + "type": "number" + } + }, + "required": [ + "color", + "width", + "lineStyle" + ] + }, + "size": { "type": "number" }, + "offset": { + "type": "array", + "items": { + "type": "number" + }, + "minItems": 2, + "maxItems": 2 + }, + "symbol": { + "enum": [ + "circle", + "+", + "diamond", + "square", + "triangle", + "X", + "star" + ] + } + }, + "required": + ["type", + "symbol" + ] + }, + { "title":"IconSymbol", + "type": "object", + "properties": { + "type": {"type":"string", + "default": "iconSymbol", + "enum": ["iconSymbol"] + }, + "mimeType": { "type": "string" }, + "src": { "type": "string" }, + "width": { + "type": "integer", + "description": "Icon width in pixel." + }, + "height": { + "type": "integer", + "description": "Icon height in pixel." + }, + "rotation": { + "type": "number", + "description": "Icon rotation in radians." + }, + "opacity": { + "type": "number", + "minimum": 0, + "maximum": 1, + "default": 1 + }, + "offset": { + "type": "array", + "items": { + "type": "number" + }, + "minItems": 2, + "maxItems": 2 + }, + "crossOrigin": { + "type": "string", + "description": "The crossOrigin attribute for loaded images. Note that you must provide a crossOrigin value if you want to access pixel data with the Canvas renderer." + } + }, + "required": ["type", "mimeType", "src"] } + ] + }, + + "TypeStyleConfig": { + + "minProperties": 1, + "type": "object", + "Title": "Line Style Config", + "description":"Enter Line, Point and Polygon Style Config ", + "properties": { + "LineString": { "description":"Point Style Config ", + + "title":"Line Style", + + "$ref": "#/definitions/TypeStyleSettings" + }, + "Point": { "description": "Polygon Style Config", + "title":"Point Style", + + "$ref": "#/definitions/TypeStyleSettings" + }, + "Polygon": { + "title":"Polygon Style", + + "$ref": "#/definitions/TypeStyleSettings" + } + } + }, + + "TypeStyleSettings": { + "oneOf": [ {"title":"SimpleStyle", + "type": "object", + "properties": { + "styleId": { + "type": "string" + }, + "styleType": { + "enum": ["simple"], + "default": "simple" + }, + "label": { + "type": "string" + }, + "settings": { + "oneOf": [ + { "title":"LineString", + "type": "object", + "properties": { + "type": { "type":"string", + "default": "lineString", + "enum": [ + "lineString" + ] + }, + "stroke": { "description": "Stroke style for vector features.", + "minProperties": 1, + "properties": { + "color": { + "type": "string" + }, + "lineStyle": { + "enum": [ + "dash", + "dash-dot", + "dash-dot-dot", + "dot", + "longDash", + "longDash-dot", + "null", + "shortDash", + "shortDash-dot", + "shortDash-dot-dot", + "solid" + ] + }, + "width": { + "type": "number" + } + }, + "required": [ + "color", + "width", + "lineStyle" + ] } + }, + "required": [ + "type", + "stroke" + ] }, + { "title":"Polygon", + "type": "object", + "properties": { + "type": {"type":"string", "default": "filledPolygon", + "enum": ["filledPolygon"] + }, + "color": { "type": "string" }, + "stroke": { + "description": "Stroke style for vector features.", + "minProperties": 1, + "properties": { + "color": { + "type": "string" + }, + "lineStyle": { + "enum": [ + "dash", + "dash-dot", + "dash-dot-dot", + "dot", + "longDash", + "longDash-dot", + "null", + "shortDash", + "shortDash-dot", + "shortDash-dot-dot", + "solid" + ] + }, + "width": { + "type": "number" + } + }, + "required": [ + "color", + "width", + "lineStyle" + ] + }, + "paternSize": { + "type": "number", + "description": "Distance between patern lines. Default = 8" + }, + "paternWidth": { + "type": "number", + "description": "Patern line width.default = 1." + }, + "fillStyle": { + "enum": [ + "solid", + "backwardDiagonal", + "cross", + "diagonalCross", + "forwardDiagonal", + "horizontal", + "null", + "vertical" + ], + "description": "Kind of filling for vector features. Default = solid. " + } + }, + "required": [ + "type", + "stroke" + ] }, + { "title":"SimpleSymbol", + "type": "object", + "properties": { + "type": {"type":"string", + "default": "simpleSymbol", + "enum": ["simpleSymbol"] + }, + "rotation": { + "type": "number", + "description": "Symbol rotation in radians." + }, + "color": { "type": "string" }, + "stroke": { + "description": "Stroke style for vector features.", + "minProperties": 1, + "properties": { + "color": { + "type": "string" + }, + "lineStyle": { + "enum": [ + "dash", + "dash-dot", + "dash-dot-dot", + "dot", + "longDash", + "longDash-dot", + "null", + "shortDash", + "shortDash-dot", + "shortDash-dot-dot", + "solid" + ] + }, + "width": { + "type": "number" + } + }, + "required": [ + "color", + "width", + "lineStyle" + ] + }, + "size": { "type": "number" }, + "offset": { + "type": "array", + "items": { + "type": "number" + }, + "minItems": 2, + "maxItems": 2 + }, + "symbol": { + "enum": [ + "circle", + "+", + "diamond", + "square", + "triangle", + "X", + "star" + ] + } + }, + "required": + ["type", + "symbol" + ] + }, + { "title":"IconSymbol", + "type": "object", + "properties": { + "type": {"type":"string", + "default": "iconSymbol", + "enum": ["iconSymbol"] + }, + "mimeType": { "type": "string" }, + "src": { "type": "string" }, + "width": { + "type": "integer", + "description": "Icon width in pixel." + }, + "height": { + "type": "integer", + "description": "Icon height in pixel." + }, + "rotation": { + "type": "number", + "description": "Icon rotation in radians." + }, + "opacity": { + "type": "number", + "minimum": 0, + "maximum": 1, + "default": 1 + }, + "offset": { + "type": "array", + "items": { + "type": "number" + }, + "minItems": 2, + "maxItems": 2 + }, + "crossOrigin": { + "type": "string", + "description": "The crossOrigin attribute for loaded images. Note that you must provide a crossOrigin value if you want to access pixel data with the Canvas renderer." + } + }, + "required": ["type", "mimeType", "src"] } + ] + } + }, + "required": [ + "styleType", + "label", + "settings" + ] + } , + {"title":"UniqueValueStyle", + "type": "object", + "properties": { + "styleId": { + "type": "string" + }, + "styleType": {"type":"string", + "default": "uniqueValue", + "enum": ["uniqueValue"] + }, + "defaultLabel": { + "type": "string", + "description": "Label used if field/value association is not found." + }, + "defaultSettings": { + "oneOf": [ + { "title":"LineString", + "type": "object", + "properties": { + "type": { "type":"string", + "default": "lineString", + "enum": [ + "lineString" + ] + }, + "stroke": { + "description": "Stroke style for vector features.", + "minProperties": 1, + "properties": { + "color": { + "type": "string" + }, + "lineStyle": { + "enum": [ + "dash", + "dash-dot", + "dash-dot-dot", + "dot", + "longDash", + "longDash-dot", + "null", + "shortDash", + "shortDash-dot", + "shortDash-dot-dot", + "solid" + ] + }, + "width": { + "type": "number" + } + }, + "required": [ + "color", + "width", + "lineStyle" + ] + } + }, + "required": [ + "type", + "stroke" + ] }, + { "title":"Polygon", + "type": "object", + "properties": { + "type": {"type":"string", "default": "filledPolygon", + "enum": ["filledPolygon"] + }, + "color": { "type": "string" }, + "stroke": { + "description": "Stroke style for vector features.", + "minProperties": 1, + "properties": { + "color": { + "type": "string" + }, + "lineStyle": { + "enum": [ + "dash", + "dash-dot", + "dash-dot-dot", + "dot", + "longDash", + "longDash-dot", + "null", + "shortDash", + "shortDash-dot", + "shortDash-dot-dot", + "solid" + ] + }, + "width": { + "type": "number" + } + }, + "required": [ + "color", + "width", + "lineStyle" + ] + }, + "paternSize": { + "type": "number", + "description": "Distance between patern lines. Default = 8" + }, + "paternWidth": { + "type": "number", + "description": "Patern line width.default = 1." + }, + "fillStyle": { + "enum": [ + "solid", + "backwardDiagonal", + "cross", + "diagonalCross", + "forwardDiagonal", + "horizontal", + "null", + "vertical" + ], + "description": "Kind of filling for vector features. Default = solid. " + } + }, + "required": [ + "type", + "stroke" + ] }, + { "title":"SimpleSymbol", + "type": "object", + "properties": { + "type": {"type":"string", + "default": "simpleSymbol", + "enum": ["simpleSymbol"] + }, + "rotation": { + "type": "number", + "description": "Symbol rotation in radians." + }, + "color": { "type": "string" }, + "stroke": { + "description": "Stroke style for vector features.", + "minProperties": 1, + "properties": { + "color": { + "type": "string" + }, + "lineStyle": { + "enum": [ + "dash", + "dash-dot", + "dash-dot-dot", + "dot", + "longDash", + "longDash-dot", + "null", + "shortDash", + "shortDash-dot", + "shortDash-dot-dot", + "solid" + ] + }, + "width": { + "type": "number" + } + }, + "required": [ + "color", + "width", + "lineStyle" + ] + }, + "size": { "type": "number" }, + "offset": { + "type": "array", + "items": { + "type": "number" + }, + "minItems": 2, + "maxItems": 2 + }, + "symbol": { + "enum": [ + "circle", + "+", + "diamond", + "square", + "triangle", + "X", + "star" + ] + } + }, + "required": + ["type", + "symbol" + ] + }, + { "title":"IconSymbol", + "type": "object", + "properties": { + "type": {"type":"string", + "default": "iconSymbol", + "enum": ["iconSymbol"] + }, + "mimeType": { "type": "string" }, + "src": { "type": "string" }, + "width": { + "type": "integer", + "description": "Icon width in pixel." + }, + "height": { + "type": "integer", + "description": "Icon height in pixel." + }, + "rotation": { + "type": "number", + "description": "Icon rotation in radians." + }, + "opacity": { + "type": "number", + "minimum": 0, + "maximum": 1, + "default": 1 + }, + "offset": { + "type": "array", + "items": { + "type": "number" + }, + "minItems": 2, + "maxItems": 2 + }, + "crossOrigin": { + "type": "string", + "description": "The crossOrigin attribute for loaded images. Note that you must provide a crossOrigin value if you want to access pixel data with the Canvas renderer." + } + }, + "required": ["type", "mimeType", "src"] } + ] + + }, + "defaultVisible": { + "description": "Flag used to show/hide features associated to the default label (default: yes).", + "enum": [ + "yes", + "no", + "always" + ] + }, + "fields": { + "type": "array", + "items": { + "type": "string" + }, + "minItems": 1 + }, + "uniqueValueStyleInfo": { + "type": "array", + "items": { + + "type": "object", + "properties": { + "label": { + "type": "string" + }, + "settings": { + + }, + "values": { + "items": { + "oneOf": [ + { "title": "String Value", + "type": "string" + }, + { "title": "Numeric Value", + "type": "number" + } + ] + }, + "minItems": 1, + "type": "array" + }, + "visible": { + "description": "Flag used to show/hide features associated to the label (default: yes).", + "enum": [ + "yes", + "no", + "always" + ] + } + } + + }, + "minItems": 1, + "required": [ + "label", + "values", + "options" + ] + } + }, + "required": [ + "styleType", + "fields", + "uniqueValueStyleInfo" + ] + }, + {"title":"ClassBreakStyle", + "type": "object", + "properties": { + "styleId": { + "type": "string" + }, + "styleType": { + "default": "classBreaks", + "enum": ["classBreaks"] + }, + "field": { + "type": "string" + }, + "defaultLabel": { + "type": "string", + "description": "Label used if field/value association is not found." + }, + "defaultSettings": { + "oneOf": [ + { "title":"LineString", + "type": "object", + "properties": { + "type": { "type":"string", + "default": "lineString", + "enum": [ + "lineString" + ] + }, + "stroke": { + "description": "Stroke style for vector features.", + "minProperties": 1, + "properties": { + "color": { + "type": "string" + }, + "lineStyle": { + "enum": [ + "dash", + "dash-dot", + "dash-dot-dot", + "dot", + "longDash", + "longDash-dot", + "null", + "shortDash", + "shortDash-dot", + "shortDash-dot-dot", + "solid" + ] + }, + "width": { + "type": "number" + } + }, + "required": [ + "color", + "width", + "lineStyle" + ] + } + }, + "required": [ + "type", + "stroke" + ] }, + { "title":"Polygon", + "type": "object", + "properties": { + "type": {"type":"string", "default": "filledPolygon", + "enum": ["filledPolygon"] + }, + "color": { "type": "string" }, + "stroke": { + "description": "Stroke style for vector features.", + "minProperties": 1, + "properties": { + "color": { + "type": "string" + }, + "lineStyle": { + "enum": [ + "dash", + "dash-dot", + "dash-dot-dot", + "dot", + "longDash", + "longDash-dot", + "null", + "shortDash", + "shortDash-dot", + "shortDash-dot-dot", + "solid" + ] + }, + "width": { + "type": "number" + } + }, + "required": [ + "color", + "width", + "lineStyle" + ] + }, + "paternSize": { + "type": "number", + "description": "Distance between patern lines. Default = 8" + }, + "paternWidth": { + "type": "number", + "description": "Patern line width.default = 1." + }, + "fillStyle": { + "enum": [ + "solid", + "backwardDiagonal", + "cross", + "diagonalCross", + "forwardDiagonal", + "horizontal", + "null", + "vertical" + ], + "description": "Kind of filling for vector features. Default = solid. " + } + }, + "required": [ + "type", + "stroke" + ] }, + { "title":"SimpleSymbol", + "type": "object", + "properties": { + "type": {"type":"string", + "default": "simpleSymbol", + "enum": ["simpleSymbol"] + }, + "rotation": { + "type": "number", + "description": "Symbol rotation in radians." + }, + "color": { "type": "string" }, + "stroke": { + "description": "Stroke style for vector features.", + "minProperties": 1, + "properties": { + "color": { + "type": "string" + }, + "lineStyle": { + "enum": [ + "dash", + "dash-dot", + "dash-dot-dot", + "dot", + "longDash", + "longDash-dot", + "null", + "shortDash", + "shortDash-dot", + "shortDash-dot-dot", + "solid" + ] + }, + "width": { + "type": "number" + } + }, + "required": [ + "color", + "width", + "lineStyle" + ] + }, + "size": { "type": "number" }, + "offset": { + "type": "array", + "items": { + "type": "number" + }, + "minItems": 2, + "maxItems": 2 + }, + "symbol": { + "enum": [ + "circle", + "+", + "diamond", + "square", + "triangle", + "X", + "star" + ] + } + }, + "required": + ["type", + "symbol" + ] + }, + { "title":"IconSymbol", + "type": "object", + "properties": { + "type": {"type":"string", + "default": "iconSymbol", + "enum": ["iconSymbol"] + }, + "mimeType": { "type": "string" }, + "src": { "type": "string" }, + "width": { + "type": "integer", + "description": "Icon width in pixel." + }, + "height": { + "type": "integer", + "description": "Icon height in pixel." + }, + "rotation": { + "type": "number", + "description": "Icon rotation in radians." + }, + "opacity": { + "type": "number", + "minimum": 0, + "maximum": 1, + "default": 1 + }, + "offset": { + "type": "array", + "items": { + "type": "number" + }, + "minItems": 2, + "maxItems": 2 + }, + "crossOrigin": { + "type": "string", + "description": "The crossOrigin attribute for loaded images. Note that you must provide a crossOrigin value if you want to access pixel data with the Canvas renderer." + } + }, + "required": ["type", "mimeType", "src"] } + ] + }, + "defaultVisible": { + "description": "Flag used to show/hide features associated to the default label (default: yes).", + "default": "yes", + "enum": [ + "yes", + "no", + "always" + ] + }, + + "classBreakStyleInfo": { + "type": "array", + "items": { + + "type": "object", + "properties": { + + "label": { + "type": "string" + }, + "minValue": { + "oneOf": [ + { "title": "minValue String value", + "type": "string" + }, + { "title": "minValue Numeric value", + "type": "number" + } + ] + }, + "maxValue": { + "oneOf": [ + { "title": "maxValue String value", + "type": "string" + }, + { "title": "maxValue Numeric value", + "type": "number" + } + ] + }, + "visible": { + "description": "Flag used to show/hide features associated to the label (default: yes).", + "enum": [ + "yes", + "no", + "always" + ], + "default" : ["no"] + }, + + "settings": { } + } + }, + "minItems": 1, + "required": ["label", "minValue", "maxValue", "settings"] + } + }, + "required": ["styleType", "field", "classBreakStyleInfo"] + } + ] + }, + + "TypeLayerInitialSettings": { + + "type": "object", + "properties": { + "bounds": { + "description": "The geographic bounding box that contains all the layer's features.", + "items": { + "type": "number" + }, + "maxItems": 4, + "minItems": 4, + "type": "array", + "default":[-16763712,5165908,-5688293,10649806] + }, + "opacity": { + "type": "number", + "minimum": 0, + "maximum": 1, + "default": 1, + "description": "Initial opacity setting." + }, + "visible": { + "default": "yes", + "description": "Initial visibility setting.", + "enum": [ + "yes", + "no", + "always" + ] + }, + "extent": { + "type": "array", + "minItems": 4, + "maxItems": 4, + "items": { + "type": "number" + },"default":[-16763712,5165908,-5688293,10649806], + "description": "The extent that constrains the view. Called with [minX, minY, maxX, maxY] extent coordinates." + }, + "minZoom": { + "type": "integer", + "minimum": 0, + "maximum": 50, + "description": "The minimum view zoom level (exclusive) above which this layer will be visible." + }, + "maxZoom": { + "type": "integer", + "minimum": 0, + "maximum": 50, + "description": "The maximum view zoom level (inclusive) above which this layer will be visible." + }, + "className": { + "type": "string", + "description": "A CSS class name to set to the layer element." + } + } + }, + + + "TypeVectorSourceFormats": { + "enum": [ + "GeoJSON", + "EsriJSON", + "KML", + "WFS", + "featureAPI", + "GeoPackage" + ] , + "default": "GeoJSON", + "description": "The feature format used by the XHR feature loader when access path is set." + }, + + "TypeVectorSourceInitialConfig": { + + "type": "object", + "properties": { + "dataAccessPath": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The path (English/French) to reach the data to display. If not specified, metadatAccessPath will be assigne dto it." + }, + "format": { "$ref": "#/definitions/TypeVectorSourceFormats" }, + "dataProjection": { + "type": "string", + "description": "The projection code of the source. Used only for GeoJSON format. Default value is EPSG:4326. " + }, + "featureInfo": { "$ref": "#/definitions/TypeFeatureInfoLayerConfig" }, + + "postSettings": { + "type": "object", + "properties": { + "data": + { + "type": "object" + }, + "header": + { + "type": "object" + } + } + }, + "strategy": { + "default": "all", + "description": "The loading strategy to use. By default an all strategy is used, a one-off strategy which loads all features at once.", + "enum": [ + "all", + "bbox" + ] + } + } + }, + + + + "TypeSourceImageWmsInitialConfig": { + + "type": "object", + "properties": { + "dataAccessPath": { + "$ref": "#/definitions/TypeLocalizedString", + + "description": "The path (English/French) to reach the data to display. If not specified, metadatAccessPath will be assigne dto it." + }, + "crossOrigin": { + "type": "string", + "description": "The crossOrigin attribute for loaded images. Note that you must provide a crossOrigin value if you want to access pixel data with the Canvas renderer." + }, + "projection": { + "type": "integer", + "description": "Spatial Reference EPSG code supported (https://epsg.io/). We support Web Mercator and Lambert Conical Conform Canada." + }, + "featureInfo": { + "$ref": "#/definitions/TypeFeatureInfoLayerConfig" + }, + "serverType": { + "$ref": "#/definitions/TypeOfServer", + "description": "The type of the remote WMS server. The default value is mapserver." + }, + "style": { + "oneOf": [ + { "title":"Single style", + "description": "Single style to apply", + "type": "string" + }, + { "title":"Array of styles", + "description": "Array of style to choose.", + "items": { + "type": "string" + }, + "type": "array" + } + ] + } + } + }, + + "TypeOfServer": { + "enum": [ + "mapserver", + "geoserver", + "qgis"], + "description": "The type of the remote WMS server. The default value is mapserver." + }, + + "TypeSourceImageEsriInitialConfig": { + + "type": "object", + "properties": { + "dataAccessPath": { + "$ref": "#/definitions/TypeLocalizedString", + + "description": "The path (English/French) to reach the data to display. If not specified, metadatAccessPath will be assigne dto it." + }, + "crossOrigin": { + "type": "string", + "description": "The crossOrigin attribute for loaded images. Note that you must provide a crossOrigin value if you want to access pixel data with the Canvas renderer." + }, + "projection": { + "type": "integer", + "description": "Spatial Reference EPSG code supported (https://epsg.io/). We support Web Mercator and Lambert Conical Conform Canada." + }, + "featureInfo": { + "$ref": "#/definitions/TypeFeatureInfoLayerConfig" + }, + "format": { + "$ref": "#/definitions/TypeEsriFormatParameter" + }, + "transparent": { + "type": "boolean", + "default": true, + "description": "If true, the image will be exported with the background color of the map set as its transparent color. Only the .png and .gif formats support transparency." + } + } + }, + + "TypeEsriDynamicLayerEntryConfig": { + + "properties": { + "entryType": { + "type": "string", + "enum": [ + "raster-image" + ], + "default": "raster-image" + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer entry at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "layerFilter": { + "description": "Filter to apply on feature of this layer.", + "type": "string" + }, + "layerId": { + "description": "The id of the layer to display on the map.", + "type": "string" + }, + "layerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "layerPathEnding": { + "description": "The ending element of the layer configuration path.", + "type": "string" + }, + "schemaTag": { + "enum": [ + "esriDynamic" + ], + "default": "esriDynamic" + + }, + "source": { + "$ref": "#/definitions/TypeSourceImageEsriInitialConfig" + }, + "style": { + "$ref": "#/definitions/TypeStyleConfig" + } + }, + "required": [ + "schemaTag", + "entryType", + "layerId" + ], + "type": "object" + }, + + "TypeEsriFormatParameter": { + "enum": ["png", "jpg", "gif", "svg"], + "default": "png", + "description": "The format of the exported image. The default format is png." + }, + + "TypeSourceTileInitialConfig": { + + "properties": { + "dataAccessPath": { + "$ref": "#/definitions/TypeLocalizedString", + + "description": "The path (English/French) to reach the data to display. If not specified, metadatAccessPath will be assigne dto it." + }, + "featureInfo": { + "$ref": "#/definitions/TypeFeatureInfoNotQueryable" + }, + "crossOrigin": { + "type": "string", + "description": "The crossOrigin attribute for loaded images. Note that you must provide a crossOrigin value if you want to access pixel data with the Canvas renderer." + }, + "projection": { + "type": "integer", + "description": "Spatial Reference EPSG code supported (https://epsg.io/). We support Web Mercator and Lambert Conical Conform Canada." + }, + "tileGrid": { "$ref": "#/definitions/TypeTileGrid" } + } + }, + + "TypeTileGrid": { + + "type": "object", + "properties": { + "extent": { + "type": "array", + "maxItems": 4, + "minItems": 4, + "items": + { + "type": "number" + }, + "description": "The extent that constrains the view. Called with [minX, minY, maxX, maxY] extent coordinates." + }, + "origin": { + "type": "array", + "maxItems": 2, + "minItems": 2, + "items": + { + "type": "number" + } + , + "description": "The tile grid origin, i.e. where the x and y axes meet ([z, 0, 0]). Tile coordinates increase left to right and downwards. If not specified, extent must be provided." + }, + "resolutions": { + "type": "array", + "items": { + "type": "number" + }, + "description": "Resolutions. The array index of each resolution needs to match the zoom level. This means that even if a minZoom is configured, the resolutions array will have a length of maxZoom + 1." + }, + "tileSize": { + "type": "array", + "maxItems": 2, + "minItems": 2, + "items": + { + "type": "number" + }, + "default": [256, + 256 + ], + "description": "The tile grid origin, i.e. where the x and y axes meet ([z, 0, 0]). Tile coordinates increase left to right and downwards. If not specified, extent must be provided." + } + }, + "required": ["origin", "resolutions"] + }, + + "TypeVectorHeatmapLayerEntryConfig": { + + "type": "object", + "properties": { + "schemaTag": { + "enum": [ + "not used yet" + ], + "defautl":"not used yet" + + }, + "entryType": { + "type": "string", + "enum": [ + "vector-heatmap" + ], + "default": "vector-heatmap" + }, + "layerPathEnding": { + "description": "The ending element of the layer configuration path.", + "type": "string" + }, + "layerId": { + "type": "string", + "description": "The id of the layer to display on the map." + }, + "layerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer entry at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "source": { "$ref": "#/definitions/TypeVectorSourceInitialConfig" }, + "gradient": { + "type": "array", + "items": { + "type": "string" + }, + "uniqueItems": true, + "minItems": 2, + "default": ["#00f", + "#0ff", + "#0f0", + "#ff0", + "#f00" + ], + "description": "Color gradient of the heatmap, specified as an array of CSS color strings." + }, + "radius": { + "type": "number", + "description": "Radius size in pixels (default 8px)." + }, + "blur": { + "type": "number", + "description": "Blur size in pixels (default 15px)." + }, + "weight": { + "type": "string", + "description": "Feature attribute to use for the weight or a function (ADD FORMAT) that returns a weight from a feature." + } + }, + "required": ["schemaTag", + "layerId", + "entryType" + ] + }, + + "TypeVectorLayerEntryConfig": { + + "type": "object", + "properties": { + "entryType": { + "type": "string", + "default": "vector", + "enum": [ + "vector" + ] + }, + "layerId": { + "type": "string", + "description": "The id of the layer to display on the map." + }, + "layerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "layerFilter": { + "description": "Filter to apply on feature of this layer.", + "type": "string" + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer entry at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "source": { "$ref": "#/definitions/TypeVectorSourceInitialConfig" }, + "style": { "$ref": "#/definitions/TypeStyleConfig" }, + "layerPathEnding": { + "description": "The ending element of the layer configuration path.", + "type": "string" + }, + "schemaTag": { + "enum": [ + "GeoJSON", + "esriFeature", + "ogcWfs", + "ogcFeature", + "GeoPackage" + ] + } + }, + "required": [ + "layerId", + "schemaTag", + "entryType" + ] + }, + + "TypeVectorTileLayerEntryConfig": { + + "type": "object", + "description": "Layer sources providing vector data divided into a tile grid.", + "properties": { + "entryType": { + "type": "string", + "enum": [ + "vector-tile" + ], + "default": "vector-tile" + }, + "layerId": { + "type": "string", + "description": "The id of the layer to display on the map." + }, + "layerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "layerFilter": { + "description": "Filter to apply on feature of this layer.", + "type": "string" + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer entry at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "source": { + "$ref": "#/definitions/TypeVectorTileSourceInitialConfig", + "description": "Information used to configure the source of a vector tile layer." + }, + "layerPathEnding": { + "description": "The ending element of the layer configuration path.", + "type": "string" + }, + "style": { + "$ref": "#/definitions/TypeStyleConfig" + }, + "schemaTag": { + "enum": [ + "not used yet" + ] + } + }, + "required": [ + + "entryType", + "layerId" + ] + }, + + "TypeVectorTileSourceInitialConfig": { + + "type": "object", + "description": "Layer sources providing vector data divided into a tile grid.", + "properties": { + "dataAccessPath": { + "$ref": "#/definitions/TypeLocalizedString", + + "description": "The path (English/French) to reach the data to display. If not specified, metadatAccessPath will be assigne dto it." + }, + "format": { + "enum": ["GeoJSON", "EsriJSON", "KML", "WFS", "MVT", "featureAPI"], + "description": "The feature format used by the XHR feature loader when access path is set." + }, + "dataProjection": { + "type": "string", + "description": "The projection code of the source. Used only for GeoJSON format. Default value is EPSG:4326." + }, + "featureInfo": { "$ref": "#/definitions/TypeFeatureInfoLayerConfig" }, + "style": { "$ref": "#/definitions/TypeStyleConfig" }, + "tileGrid": { + "$ref": "#/definitions/TypeTileGrid" + } + + } + }, + + "TypeTileLayerEntryConfig": { + + "type": "object", + "properties": { + "entryType": { + "type": "string", + "enum": [ + "raster-tile" + ], + "default": "raster-tile" + }, + "layerId": { + "type": "string", + "description": "The id of the layer to display on the map." + }, + "layerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer entry at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "layerPathEnding": { + "description": "The ending element of the layer configuration path.", + "type": "string" + }, + "schemaTag": { + "enum": [ + "ogcWms", + "xyzTiles", + "vectorTiles" + ], + "default": "ogcWms" + }, + "source": { "$ref": "#/definitions/TypeSourceTileInitialConfig" } + }, + "required": [ + "schemaTag", + "entryType", + "layerId" + ] + }, + + + + "TypeGeocoreLayerEntryConfig": { + + "type": "object", + "description": "Layer where configration is extracted by a configuration snippet stored on a server. The server configuration will handle bilangual informations.", + "properties": { + "entryType": { + "type": "string", + "enum": [ + "geocore" + ], + "default": "geocore" + }, + "layerId": { + "type": "string", + "description": "The id of the layer to display on the map." + }, + "geocoreLayerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer entry at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "listOfLayerEntryConfig": { + "$ref": "#/definitions/TypeListOfLayerEntryConfig", + "description": "The list of layer entry configurations to use from the GeoView layer group." + }, + "schemaTag": { + "enum": [ + "geoCore" + ], + "defaut": "geoCore" + }, + "source": { "$ref": "#/definitions/TypeSourceGeocoreConfig" } + }, + "required": ["schemaTag","entryType","layerId"] + }, + + "TypeSourceGeocoreConfig": { + + "type": "object", + "description": "Layer source providing geocore data.", + "properties": { + "dataAccessPath": { + "$ref": "#/definitions/TypeLocalizedString", + + "description": "The url path to the geoCore endpoint (optional, this value should be embeded in the GeoView API)." + }, + "featureInfo": { + "$ref": "#/definitions/TypeFeatureInfoNotQueryable" + } + } + }, + + "TypeOgcWmsLayerEntryConfig": { + "type": "object", + "properties": { + "entryType": { + "type": "string", + "enum": [ + "raster-image" + ], + "default": "raster-image" + }, + + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer entry at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "layerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "schemaTag": { + "enum": [ + "ogcWms" + ], + "default": "ogcWms" + }, + "layerId": { + "type": "string", + "description": "The id of the layer to display on the map." + }, + "layerPathEnding": { + "type": "string", + "description": "The ending element of the layer configuration path." + }, + "layerFilter": { + "type": "string", + "description": "Filter to apply on feature of this layer." + }, + "source": { + "$ref": "#/definitions/TypeSourceImageWmsInitialConfig" + }, + "style": { + "$ref": "#/definitions/TypeStyleConfig" + } + }, + "required": [ + "schemaTag", + "entryType", + "layerId" + ] + }, + + "TypeSourceImageStaticInitialConfig": { + + "properties": { + "crossOrigin": { + "description": "The crossOrigin attribute for loaded images. Note that you must provide a crossOrigin value if you want to access pixel data with the Canvas renderer.", + "type": "string" + }, + "dataAccessPath": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The path (English/French) to reach the data to display. If not specified, metadatAccessPath will be assigne dto it." + + }, + "extent": { + "description": "The extent of the static image. Called with [minX, minY, maxX, maxY] extent coordinates.", + "items": { + "type": "number" + }, + "maxItems": 4, + "minItems": 4, + "type": "array" + }, + "featureInfo": { + "$ref": "#/definitions/TypeFeatureInfoNotQueryable" + }, + "projection": { + "description": "Spatial Reference EPSG code supported (https://epsg.io/). We support Web Mercator and Lambert Conical Conform Canada.", + "type": "integer" + } + }, + "type": "object" + }, + + "TypeLayerEntryType": { "type": "string", + "enum": ["vector", + "vector-tile", + "vector-heatmap", + "raster-tile", + "raster-image", + "geoCore" + ], + "description": "Layer entry data type." + }, + + "TypeLayerGroupEntryConfig": { + + "type": "object", + "description": "Entry used to define a layer Group.", + + "properties": { + "entryType": { "type":"string", + + "enum": [ + "group" + ], + "default": "group" + }, + "layerId": { + "type": "string", + "description": "The id of the layer group to display on the map." + }, + "layerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer group (English/French)." + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer group entries at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "listOfLayerEntryConfig": { + "$ref": "#/definitions/TypeListOfLayerEntryConfig", + "description": "The list of layer entry configurations to use from the GeoView layer group." + } + }, + + "required": ["entryType", "layerId", "listOfLayerEntryConfig"] + }, + + + + + "TypeLayerEntryConfig": { + "type": "object", + "oneOf": [ + + { "title": "OgcWmsLayer", + + "properties": { + "schemaTag": { "type": "string", + + "default": "ogcWms" + }, + "entryType": { + "type": "string", + + + "default": "raster-image" + }, + + "layerId": { + "type": "string", + "description": "The id of the layer to display on the map." + }, + "layerPathEnding": { + "type": "string", + "description": "The ending element of the layer configuration path." + }, + + "layerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "layerFilter": { + "type": "string", + "description": "Filter to apply on feature of this layer." + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apTypeStyleConfiply to the layer entry at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "source": { + "$ref": "#/definitions/TypeSourceImageWmsInitialConfig" + }, + "style": { + "$ref": "#/definitions/TypeStyleConfig" + } + }, + "required": [ "entryType", + "schemaTag", + "layerId" + ] + }, + { "title": "LayerGroup", + + + "description": "Entry used to define a layer Group.", + + "properties": { + "entryType": {"type":"string", + + "enum": [ + "group" + ], + "default": "group" + }, + "layerId": { + "type": "string", + "description": "The id of the layer group to display on the map." + }, + "layerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer group (English/French)." + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer group entries at creation time. Initial settings are inherited from the parent in the configuration tree." + } + }, + + "required": ["entryType", "layerId"] + } , + {"title":"VectorTileLayer", + + + "description": "Layer sources providing vector data divided into a tile grid.", + "properties": { + "schemaTag": {"type": "string", + "enum": [ + "not used yet" + ], + "default": "not used yet" + }, + "entryType": { + "type": "string", + "enum": [ + "vector-tile" + ], + "default": "vector-tile" + }, + "layerPathEnding": { + "description": "The ending element of the layer configuration path.", + "type": "string" + }, + "layerId": { + "type": "string", + "description": "The id of the layer to display on the map." + }, + "layerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "layerFilter": { + "description": "Filter to apply on feature of this layer.", + "type": "string" + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer entry at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "source": { + "$ref": "#/definitions/TypeVectorTileSourceInitialConfig", + "description": "Information used to configure the source of a vector tile layer." + }, + "style": { + "$ref": "#/definitions/TypeStyleConfig" + } + }, + + "required": [ + "schemaTag", + "entryType", + "layerId" + ] + }, + + { + "title":"GeocoreLayer", + + "description": "Layer where configration is extracted by a configuration snippet stored on a server. The server configuration will handle bilangual informations.", + "properties": { + "schemaTag": { + "type":"string", + "enum": ["geoCore"],"defaut":"geoCore" + }, + "entryType": { + "type": "string", + "enum": ["geocore"],"default": "geocore" + }, + "layerId": { + "type": "string", + "description": "The id of the layer to display on the map." + }, + "geocoreLayerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer entry at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "source": { "$ref": "#/definitions/TypeSourceGeocoreConfig" + }, + "listOfLayerEntryConfig": { + "$ref": "#/definitions/TypeListOfLayerEntryConfig", + "description": "The list of layer entry configurations to use from the GeoView layer group." + } }, + "required": ["schemaTag","entryType","layerId"] + }, + + { "title": "VectorLayer", + + "properties": { + "schemaTag": {"type":"string", + "enum": ["GeoJSON","esriFeature","ogcWfs","ogcFeature","GeoPackage"],"default": "esriFeature" + }, + "entryType": { + "type": "string", + "enum": [ + "vector" + ] ,"default": "vector" + }, + "layerPathEnding": { + "description": "The ending element of the layer configuration path.", + "type": "string" + }, + "layerId": { + "type": "string", + "description": "The id of the layer to display on the map." + }, + "layerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "layerFilter": { + "description": "Filter to apply on feature of this layer.", + "type": "string" + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer entry at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "source": { "$ref": "#/definitions/TypeVectorSourceInitialConfig" }, + "style": { "$ref": "#/definitions/TypeStyleConfig" } + + }, + "required": ["layerId","schemaTag","entryType" ] + } + + , + { + "title": "EsriDynamicLayer", + + "properties": { + "schemaTag": { "type": "string", + "enum": [ + "esriDynamic" + ], + "default": "esriDynamic" + + }, + "entryType": { + "type": "string", + "enum": [ + "raster-image" + ], + "default": "raster-image" + }, + "layerId": { + "description": "The id of the layer to display on the map.", + "type": "string" + }, + "layerPathEnding": { + "description": "The ending element of the layer configuration path.", + "type": "string" + }, + "layerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "layerFilter": { + "description": "Filter to apply on feature of this layer.", + "type": "string" + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer entry at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "source": { + "$ref": "#/definitions/TypeSourceImageEsriInitialConfig" + }, + "style": { + "$ref": "#/definitions/TypeStyleConfig" + } + }, + "required": [ + "entryType", + "layerId", + "schemaTag" + ], + "type": "object" + }, + { + "title": "TileLayer", + + "properties":{ + "schemaTag": {"type": "string", + "enum": [ + "ogcWms", + "xyzTiles", + "vectorTiles" + ],"default": "ogcWms" + } , + "entryType": { + "type": "string", + "enum": [ + "raster-tile" + ] ,"default": "raster-tile" + }, + "layerId": { + "type": "string", + "description": "The id of the layer to display on the map." + }, + "layerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer entry at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "layerPathEnding": { + "description": "The ending element of the layer configuration path.", + "type": "string" + }, + "source": { "$ref": "#/definitions/TypeSourceTileInitialConfig" } + + }, + "required": [ + "schemaTag", + "entryType", + "layerId" + ] + } + + + ] ,"default":"OgcWmsLayer" + }, + + "TypeListOfLayerEntryConfig": { + "type": "array", + "minItems": 1, + "items": { + "$ref": "#/definitions/TypeLayerEntryConfig" + } + }, + + "TypeMapConfig": { + + "type": "object", + "properties": { + "basemapOptions": { "$ref": "#/definitions/TypeBasemapOptions" }, + "interaction": { "$ref": "#/definitions/TypeInteraction" }, + "listOfGeoviewLayerConfig": { "$ref": "#/definitions/TypeListOfGeoviewLayerConfig" }, + "viewSettings": { "$ref": "#/definitions/TypeViewSettings" }, + "extraOptions": { + "type": "object", + "description": "Additional options used for OpenLayers map options" + } + }, + "required": ["basemapOptions", "interaction", "viewSettings"] + }, + + "TypeBasemapOptions": { + + "type": "object", + "properties": { + "basemapId": { "$ref": "#/definitions/TypeBasemapId" }, + + "shaded": { + "type": "boolean", + "default": true, + "title": "Enable or disable shaded basemap (if basemap id is set to shaded then this should be false)." + + }, + "labeled": { + "type": "boolean", + "default": true, + + "title": "Enable or disable basemap labels" + } + }, + "required": ["basemapId", "shaded", "labeled"] + }, + + "TypeBasemapId": { + "description": "Id of the basemap to use." , + "enum": ["transport", "osm", "simple", "nogeom", "shaded"], + "default": "transport" + + }, + + "TypeInteraction": { + "enum": ["static", "dynamic"], + "default": "dynamic", + "description": "If map is dynamic (pan/zoom) or static to act as a thumbnail (no nav bar)." + }, + + "TypeListOfGeoviewLayerConfig": { + + "description": "List of GeoView Layers in the order which they should be added to the map.", + "type": "array", + + "items": { + "$ref": "#/definitions/TypeGeoviewLayerConfig" + } + }, + + "TypeGeoviewLayerConfig": { + + "type": "object", + "properties": { + "geoviewLayerId": { + "description": "The id of the layer for referencing within the viewer (does not relate directly to any external service). The id will have the language extension (id-'lang').", + "type": "string" + }, + "geoviewLayerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "metadataAccessPath": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The GeoView layer access path (English/French)." + }, + "geoviewLayerType": { + "$ref": "#/definitions/TypeGeoviewLayerType", + "description": "Type of GeoView layer." + }, + "serviceDateFormat": { + "description": "Date format used by the service endpoint.", + "type": "string" + }, + "externalDateFormat": { + "description": "Date format used by the getFeatureInfo to output date variable.", + "type": "string" + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the GeoView layer at creation time." + }, + "listOfLayerEntryConfig": { + "$ref": "#/definitions/TypeListOfLayerEntryConfig", + "description": "The layer entries to use from the GeoView layer." + } + }, + "required": [ + "geoviewLayerId", + "geoviewLayerName", + "metadataAccessPath", + "geoviewLayerType", + "listOfLayerEntryConfig" + ] + }, + + "TypeGeoviewLayerType": { + "type": "string", + "enum": ["", + "esriDynamic", + "esriFeature", + "GeoJSON", + "geoCore", + "GeoPackage", + "xyzTiles", + "ogcFeature", + "ogcWfs", + "ogcWms", + "imageStatic", + "vectorTiles" + ], + "default": [ + "" + ], + "description": "Type of GeoView layer." + } + , + "TypeImageStaticLayerEntryConfig": { + + "properties": { + "entryType": { + "enum": [ + "raster-image" + ] + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer entry at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "layerId": { + "description": "The id of the layer to display on the map.", + "type": "string" + }, + "layerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "layerPathEnding": { + "description": "The ending element of the layer configuration path.", + "type": "string" + }, + "schemaTag": { + "enum": [ + "imageStatic" + ] + }, + "source": { + "$ref": "#/definitions/TypeSourceImageStaticInitialConfig" + } + }, + "required": [ + "schemaTag", + "entryType", + "layerId" + ], + "type": "object" + }, + + "TypeViewSettings": { + + "type": "object", + + "properties": { + "center": { + "type": "array", + "items": [ + + { + "type": "number", + "minimum": -160, + "maximum": 160, + "default": -106, + "description": "Initial longitude value for map center." + }, + { + "type": "number", + "minimum": -80, + "maximum": 80, + "default": 60, + "description": "Initial latitude value for map center." + } + + ] + + }, + "enableRotation": { + "type": "boolean", + "default": true, + "title": "Enable rotation. If false, a rotation constraint that always sets the rotation to zero is used." + }, + "extent": { + "type": "array", + "minItems":4, + "maxItems":4, + "items": { + + "type": "number" + + },"default":[-16763712,5165908,-5688293,10649806], + "description": "The extent that constrains the view. Called with [minX, minY, maxX, maxY] extent coordinates." + }, + "minZoom": { + "type": "integer", + "description": "The minimum zoom level used to determine the resolution constraint. If not set, will use default from basemap.", + "minimum": 0, + "maximum": 50 + }, + "maxZoom": { + "type": "integer", + "description": "The maximum zoom level used to determine the resolution constraint. If not set, will use default from basemap.", + "minimum": 0, + "maximum": 50 + }, + "projection": { "$ref": "#/definitions/TypeValidMapProjectionCodes" }, + "rotation": { + "type": "integer", + "minimum": -360, + "maximum": 360, + "default": 0, + "description": "The initial rotation for the view in degree (positive rotation clockwise, 0 means North). Will be converted to radiant by the viewer." + }, + "zoom": { + "type": "number", + "minimum": 0, + "maximum": 28, + "default": 12, + "description": "Initial map zoom level. Zoom level are define by the basemap zoom levels." + } + }, + "required": ["zoom", "center"] + }, + + "TypeAppBarProps": { + "default": [ + "geolocator" + ], + "description": "Controls availalbe on the application bar.", + "items": { + "enum": [ + "geolocator", + "export" + ] + }, + "minItems": 0, + "type": "array", + "uniqueItems": true + + }, + + "TypeNavBarProps": { + "type": "array", + "uniqueItems": true, + "items": { + "enum": [ + "zoom", + "fullscreen", + "home", + "location", + "export" + ] + }, + "default": [ + "zoom", + "fullscreen", + "home" + ], + "description": "Controls availalbe on the navigation bar.", + "minItems": 0 + }, + + "TypeFooterTabsProps": { + "type": "object", + + "properties": { + "tabs": { + "type": "object", + "description": "Available tabs", + "properties": { + "core": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "legend", + "layers", + "details", + "data-table", + "time-slider", + "geochart" + ] + }, + "minItems": 1, + "default": [ + "legend", + "layers", + "details", + "data-table" + ], + "uniqueItems": true, + "description": "Default core tabs of footer panel to use" + }, + "custom": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "defaultTabs": { + "type": "string" + }, + "contentHTML": { + "type": "string" + } + } + }, + "minItems": 0, + "default": [], + "uniqueItems": true, + "description": "Custom tabs of footer panel to use" + } + } + + }, + "collapsed": { + "type": "boolean", + "default": false, + "description": "State of footer panel when map is loaded (expanded or collapsed)" + } + }, + "required": [ + "tabs" + ] + }, + + "TypeAppBarTabsProps": { + "type": "object", + + "properties": { + "tabs": { + "type": "object", + "description": "Available tabs", + "properties": { + "core": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "basemap-panel", + "layers", + "geochart" + ] + }, + "minItems": 1, + "default": [ "basemap-panel"], + "uniqueItems": true, + "description": "Default core tabs of app-bar to use" + }, + "custom": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "defaultTabs": { + "type": "string" + }, + "contentHTML": { + "type": "string" + } + } + }, + "minItems": 0, + "default": [], + "uniqueItems": true, + "description": "Custom tabs of app-bar to use" + } + } + + }, + "collapsed": { + "type": "boolean", + "default": false, + "description": "State of app-bar when map is loaded (expanded or collapsed)" + } + }, + "required": [ + "tabs" + ] + }, + + "TypeOverviewMapProps": { + "type": "object", + + "properties": { + "hideOnZoom": { + "type": "number", + "minimum": 0, + "maximum": 10, + "default": 0, + "description": "Minimum zoom level to show overview map" + } + } + }, + + "TypeMapComponents": { + "type": "array", + "uniqueItems": true, + "items": { + "enum": [ + "overview-map", + "north-arrow", + "geolocator" + ] + }, + "default": [ + "overview-map", + "north-arrow", + "geolocator" + ], + "description": "Core components to initialize on viewer load. The schema for those are inside this file.", + + "minItems": 0 + }, + + "TypeMapCorePackages": { + "type": "array", + "uniqueItems": true, + "items": { + "enum": [ + "basemap-panel", + "layers-panel", + "details-panel", + "geolocator-panel", + "swiper", + "geochart", + "time-slider" + ] + }, + "default": ["basemap-panel" + ], + "description": "Core packages to initialize on viewer load. The schema for those are on their own package. NOTE: config from packages are in the same loaction as core config (<>-<>.json).", + + "minItems": 0 + }, + + "TypeExternalPackages": { + "type": "array", + "items": { + + "type": "object", + "properties": { + "name": { + "type": "string", + + + "description": "External Package name. The name must be ideintical to the window external package object to load." + }, + "configUrl": { + "type": "string", + + "format": "uri", + "description": "The url to the external package configuration setting. The core package will read the configuration and pass it inside the package." + } + }, + "required": ["name"] + }, + "default": [], + "description": "List of external packages to initialize on viewer load.", + "minItems": 0 + }, + + "TypeServiceUrls": { + + "type": "object", + "description": "Service endpoint urls", + "properties": { + "keys": { + "type": "string", + "default": "https://geocore.api.geo.ca", + + "description": "Service end point to access API for layers specification (loading and plugins parameters). By default it is GeoCore but can be another endpoint with similar output." + }, + "geolocator": { + "type": "string", + + "description": "Service end point to access geo location of searched value." + }, + + "proxyUrl": { + "type": "string", + + "description": "An optional proxy to be used for dealing with same-origin issues. URL must either be a relative path on the same server or an absolute path on a server which sets CORS headers." + } + }, + "required": [ + "keys" + ] + }, + + "TypeDisplayLanguage": { + "enum": ["en", "fr"], + "description": "Display languages supported." + }, + + "TypeLocalizedLanguages": { + "enum": ["en", "fr"], + "description": "ISO 639-1 code indicating the languages supported by the configuration file." + }, + + "TypeListOfLocalizedLanguages": { + "type": "array", + "uniqueItems": true, + "items": { "$ref": "#/definitions/TypeLocalizedLanguages" }, + "default": ["en"], + "description": "ISO 639-1 code indicating the languages supported by the configuration file. It will use value(s) provided here to access bilangual configuration nodes. For value(s) provided here, each bilingual configuration node MUST provide a value.", + "minItems": 1 + }, + + "TypeValidVersions": { + "enum": ["1.0"], + "description": "The schema version that can be used to validate the configuration file. The schema should enumerate the list of versions accepted by this version of the viewer." + }, + + "TypeMapFeaturesInstance": { + + "description": "The map features configuration. This type is used by the IsValidTypeMapFeaturesInstance method coded in config-validation.ts file. It does the validation down to the list of layer entry config.", + "type": "object", + "properties": { + "mapId": { "type": "string" }, + "map": { "$ref": "#/definitions/TypeMapConfig" }, + "appBar": { "$ref": "#/definitions/TypeAppBarProps" }, + "navBar": { "$ref": "#/definitions/TypeNavBarProps" }, + "footerTabs": { "$ref": "#/definitions/TypeFooterTabsProps"}, + "appBarTabs": {"$ref": "#/definitions/TypeAppBarTabsProps"}, + "overviewMap": {"$ref": "#/definitions/TypeOverviewMapProps"}, + "components": { "$ref": "#/definitions/TypeMapComponents" }, + "corePackages": { "$ref": "#/definitions/TypeMapCorePackages" }, + "externalPackages": { "$ref": "#/definitions/TypeExternalPackages" }, + "serviceUrls": { "$ref": "#/definitions/TypeServiceUrls" }, + "suportedLanguages": { "$ref": "#/definitions/TypeListOfLocalizedLanguages" }, + "schemaVersionUsed": { "$ref": "#/definitions/TypeValidVersions" } + }, + "required": ["map", "suportedLanguages"] + } + }, + + "properties": { + "mapId": { "type": "string" }, + "map": { "$ref": "#/definitions/TypeMapConfig" }, + "theme": { "Title": "Map Theme Style", + "enum": [ + "dark", + "light", + "geo.ca" + ], + "default": "dark", + "description": "Theme style of the viewer." + }, + "appBar": { "$ref": "#/definitions/TypeAppBarProps" }, + "navBar": { "$ref": "#/definitions/TypeNavBarProps" }, + "footerTabs": { "$ref": "#/definitions/TypeFooterTabsProps"}, + "appBarTabs": {"$ref": "#/definitions/TypeAppBarTabsProps"}, + "overviewMap": {"$ref": "#/definitions/TypeOverviewMapProps"}, + "components": { "$ref": "#/definitions/TypeMapComponents" }, + "corePackages": { "$ref": "#/definitions/TypeMapCorePackages" }, + "externalPackages": {"$ref": "#/definitions/TypeExternalPackages"}, + "serviceUrls": { "$ref": "#/definitions/TypeServiceUrls" }, + "suportedLanguages": { "$ref": "#/definitions/TypeListOfLocalizedLanguages" }, + "versionUsed": { "$ref": "#/definitions/TypeValidVersions" } + } + }, + + + "areasOfInterest": { + "title": "Areas of Interest", + "type": "object", + "properties": { + "enable": { + "type": "boolean", + "title": "Enable", + "default":true + }, + "areas": { + "type": "array", + "items": { + "type": "object", + "properties": { + "title-en-CA": { + "type": "string", + "title": "English Title" + }, + "title-fr-CA": { + "type": "string", + "title": "French Title" + }, + "xmin": { + "type": "number", + "title": "Minimum value of x", + "default": -4844430 + }, + "ymin": { + "type": "number", + "title": "Minimum value of y", + "default": -1052774 + }, + "xmax": { + "type": "number", + "title": "Maximum value of x", + "default": 5666163 + }, + "ymax": { + "type": "number", + "title": "Maximum value of y", + "default": 4170111 + }, + "wkid": { + "type": "number", + "title": "Spatial Reference", + "default": 3978 + }, + "thumbnailUrl": { + "type": "string", + "title": "Thumbnail URL" + } + }, + "required": [ + "title-en-CA", + "title-fr-CA" + ] + } + } + } + }, + + + "swiper": { + "title": "Swiper", + "type": "object", + "properties": { + "enable": { + "type": "boolean", + "title": "Enable", + "default":true + }, + "type": { + "type": "string", + "title": "Type", + "enum": [ + "vertical", + "horizontal" + ], + "default": "vertical" + }, + "keyboardOffset": { + "type": "number", + "title": "Keyboard Movement", + "description": "Pixel value of swiper displacement.", + "default": 10, + "minimum": 1, + "maximum": 100 + }, + "layers": { + "type": "string", + "title": "Layers", + "description": "The id of the layer for referencing within the viewer (does not relate directly to any external service).", + "enum":[] + } + + + + + + }, + "required": [ + "type", + "keyboardOffset", + "layers" + ] + }, + + "thematicSlider": { + "title": "Thematic Slider", + "type": "object", + "properties": { + "enable": { + "type": "boolean", + "title": "Enable", + "default":true + }, + "open": { + "type": "boolean", + "title": "Open by default", + "default": true + }, + "autorun": { + "type": "boolean", + "title": "Start animation on load", + "defaul": false + }, + "loop": { + "type": "boolean", + "title": "Play the animation in loop", + "default": false + }, + "slider": { + "type": "boolean", + "title": "Enable slider control", + "default": true + }, + "stack": { + "type": "boolean", + "title": "Stack layer visibility", + "default": false + }, + "legendStack": { + "type": "boolean", + "title": "Stack legend items (useful with the stack option to see all active elements legend)", + "default": true + }, + "layers": { + "type": "array", + "title": "Layers", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "The id of the layer for referencing within the viewer (does not relate directly to any external service).", + "title": "Layer id", + "enum":[] + + }, + "duration": { + "type": "number", + "title": "Animation duration in milliseconds", + "minimum": 3000, + "default": 3000 + }, + "title": { + "type": "string", + "title": "Title for this layer animation" + }, + "description": { + "type": "string", + "title": "Description for this layer animation" + }, + "legend": { + "type": "array", + "title": "Legend", + "description": "Add items for a custom legend, leave it blank for default legend.", + "default": [], + "items": { + "type": "object", + "properties": { + "label": { + "type": "string", + "title": "Label" + }, + "image": { + "type": "object", + "properties": { + "url": { + "type": "string", + "title": "URL", + "default": "" + }, + "width": { + "type": "number", + "title": "Width", + "minimum": 25, + "maximum": 150, + "default": 150 + }, + "height": { + "type": "number", + "title": "Height", + "minimum": 25, + "maximum": 150, + "default": 150 + } + }, + "required": [ + "url", + "width", + "height" + ] + } + }, + "required": [ + "image" + ] + } + } + }, + "required": [ + "id", + "duration" + ] + } + }, + "required": [ + "layers" + ] + } + } + } + ] + } + + diff --git a/src/components/db - Copy workscombinedanddescriminators.json b/src/components/db - Copy workscombinedanddescriminators.json new file mode 100644 index 0000000..3f8b864 --- /dev/null +++ b/src/components/db - Copy workscombinedanddescriminators.json @@ -0,0 +1,4206 @@ +{ + + "plugins": [ + + { "draw": { + + "title": "Draw", + + + + "type": "object", + "properties": { + + "enable": { + "type": "boolean", + "title": "Enable", + "default":true + }, + "open": { + + "type": "boolean", + "title": "Open by default", + "default": true + }, + "tools": { + "type": "array", + "title": "Tools", + "minItems":0, + "uniqueItems": true, + "items":{ + "enum": [ + "picker", + "point", + "polyline", + "polygon", + "edit", + "measure", + "extent", + "write", + "read" + ] + }, + + + "description": "Tools to add to draw toolbar.", + "default": [ + "picker", + "point", + "polyline", + "polygon", + "edit", + "measure", + "extent", + "write", + "read" + ] + } + + }, + "required": [ + "enabled", + "open","tools" + ] + },"chart": { + + "title": "Chart", + "type": "object", + "properties": { + + "enable": { + "type": "boolean", + "title": "Enable", + "description":"chart", + + "default":true + + + }, + "type": { + "title": "Chart Type", + "type": "string", + "enum": [ + "pie", + "bar", + "line" + ], + + "default": "pie" + }, + "title": { + "title": "Title", + "type": "string", + "default": "" + }, + "labelsPie": { + "type": "object", + "title": "Labels", + "properties": { + "type": { + "title": "Type", + "type": "string", + "enum": [ + "field", + "config" + ], + "description": "Retreive the labels from a field or from the configuration.", + "default": "config" + }, + "values": { + "title": "Values", + "type": "string", + "description": "Values separated by semi colon or field name.", + "default": "" + }, + "split": { + "title": "Split Character", + "type": "string", + "description": "Character to use to split list of values.", + "default": ";" + } + }, + "required": [ + "type", + "values", + "split" + ] + }, + "options": { + "title": "Options", + "type": "object", + "properties": { + "colors": { + "title": "Datasets Colors", + "type": "string", + "description": "Hexadecimal color code separated by semicolon. If not provided, default colors will be use.", + "default": "" + }, + "cutOut": { + "title": "Cut Out Percentage", + "type": "number", + "description": "Cut out percentage to use to give doughnut effect.", + "default": 0, + "minimum": 0, + "maximum": 80 + } + }, + "required": [ + "cutOut" + ] + }, + "axis": { + "type": "object", + "title": "Labels", + "properties": { + "xAxis": { + "title": "X Axis", + "type": "object", + "properties": { + "title": { + "title": "Title", + "type": "string", + "default": "" + }, + "type": { + "title": "Type", + "type": "string", + "enum": [ + "field", + "config", + "linear", + "date" + ], + "description": "Retreive the labels from a field or configuration for bar chart or from values (linear or time) for line chart.", + "default": "config" + }, + "values": { + "title": "Values", + "type": "string", + "description": "Values separated by semicolon or field name.", + "default": "" + }, + "split": { + "title": "Split Character", + "type": "string", + "description": "Character to use to split list of values.", + "default": ";" + } + }, + "required": [ + "type", + "values", + "split" + ] + }, + "yAxis": { + "title": "Y Axis", + "type": "object", + "properties": { + "title": { + "title": "Title", + "type": "string", + "default": "" + }, + "type": { + "title": "Type", + "type": "string", + "enum": [ + "field", + "config", + "linear", + "time" + ], + "description": "Retreive the labels from a field or configuration for bar chart or from values (linear or time) for line chart.", + "default": "config" + }, + "values": { + "title": "Values", + "type": "string", + "description": "Values separated by semicolon or field name.", + "default": "" + }, + "split": { + "title": "Split Character", + "type": "string", + "description": "Character to use to split list of values.", + "default": ";" + } + }, + "required": [ + "type", + "values", + "split" + ] + }, + "required": [ + "xAxis", + "yAxis" + ] + } + }, + "layers": { + "type": "array", + "title": "Layers", + "items": { + "type": "object", + "properties": { + "id": { + "title": "Layer ID", + "type": "string", + "description": "", + "enum":["1"] + }, + "nameField": { + "type": "string", + "title": "Name Field", + "description": "Field name to use for the chart selection combo box when multiple charts." + }, + "type": { + "title": "Chart Data Type", + "type": "string", + "enum": [ + "inline", + "link" + ], + "description": "Type of data (inline for items inside the layer or link for items inside a link table).", + "default": "inline" + }, + "linkUrl": { + "type": "string", + "title": "Link URL", + "description": "URL of the link table." + }, + "linkField": { + "type": "string", + "title": "Link Field", + "description": "Field name for the link between the layer and the table." + }, + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "type": { + "title": "Type of data inside the field", + "type": "string", + "enum": [ + "single", + "combine" + ], + "description": "Single if there is only one value inside the field. Combine if we use time axis and time and value are part of the field.", + "default": "combine" + }, + "linkType": { + "title": "Type of link", + "type": "string", + "enum": [ + "single", + "multi" + ], + "description": "How data is structure inside the link table (single for one field for value and one for date OR multiple if there is multiple datasets inside one field and the chart needs to parse).", + "default": "single" + }, + "link": { + "title": "Link Field", + "type": "string", + "description": "Link field to link between layer and table." + }, + "date": { + "title": "Date Field", + "type": "string", + "description": "Field to use for the date" + }, + "measure": { + "title": "Measure Field", + "type": "string" + }, + "values": { + "title": "Label Values", + "type": "string", + "description": "Field name to get labels from for link type multi." + }, + "label": { + "type": "object", + "title": "Dataset Labels", + "properties": { + "type": { + "title": "Type", + "type": "string", + "enum": [ + "field", + "config" + ], + "description": "Retreive the labels from a field or from the configuration.", + "default": "config" + }, + "values": { + "title": "Values", + "type": "string", + "description": "Values separated by semicolon or field name.", + "default": "" + }, + "split": { + "title": "Split Character", + "type": "string", + "description": "Character to use to split list of values.", + "default": ";" + } + }, + "required": [ + "type", + "values", + "split" + ] + }, + "regex": { + "title": "Dataset splitter", + "type": "string", + "description": "

Regex value to split datasets inside the field.

This field is to manage when you have multiple datasets or combine values in the same field. To be able to separate datasets from values, we will use a regex expression. We encourage you to use your data and test your regex expression on a online site like https://regex101.com.

Below we list some samples of datasets and regex:

  • Sample 1
    • Data: [255;255;255];[120;232;23];[32;44;134]
    • Regex: \\\\[|\\\\];\\\\[|\\\\]
    • Ouput: 3 datasets (e.g. 255;255;255). Values inside dataset will be split by the field 'Values Splitter'.
  • Sample 2
    • Data: (2011-03-28,0.511),(2011-04-04,0.421)
    • Regex: \\\\(|\\\\),\\\\(|\\\\)
    • Ouput: 1 datasets, 2 pairs of values (e.g. 2011-03-28,0.511). Values inside are combined (y and x axis) and will be split by the field 'Values Splitter'.

Note: we need to double the '\\' character

", + "default": "\\(|\\),\\(|\\)" + }, + "split": { + "title": "Values splitter", + "type": "string", + "default": ",", + "description": "Character to use to split values inside a field. E.g. a field contains '10;20;30' means there is 3 values split by ';' or [1,2,3];[4,5,6] means there is 2 datasets with 3 values each split by ','." + }, + "prefix": { + "title": "Prefix", + "type": "string", + "default": "", + "description": "Prefix to add to data hover." + }, + "suffix": { + "title": "Suffix", + "type": "string", + "default": "", + "description": "Suffix to add to data hover." + } + }, + "required": [ + "type", + "measure", + "split" + ] + } + }, + "details": { + "type": "object", + "title": "Details", + "properties": { + "enabled": { + "type": "boolean", + "title": "Enable" + }, + "value": { + "type": "string", + "title": "Value", + "description": "String with the custom details in markdown notation." + } + } + } + }, + "required": [ + "id", + "nameField", + "type", + "data" + ] + } + }, + "required": [ + "type", + "layers" + ] + } + },"rangeSlider": { + "$id": "https://cgpv/schema", + "$schema": "http://json-schema.org/draft-07/schema#", + + "title": "Range Slider", + "type": "object", + "properties": { + "enable": { + "type": "boolean", + "title": "Enable", + "default": true + }, + "open": { + "type": "boolean", + "title": "Open by default", + "default": false + }, + "maximize": { + "type": "boolean", + "title": "Slider maximized by default", + "default": false + }, + "maximizeDesc": { + "type": "boolean", + "title": "Description section open by default", + "default": false + }, + "autorun": { + "type": "boolean", + "title": "Start animation on load", + "defaul": false + }, + "loop": { + "type": "boolean", + "title": "Play the animation in loop", + "default": false + }, + "reverse": { + "type": "boolean", + "title": "Animation in reverse mode", + "default": false + }, + "lock": { + "type": "boolean", + "title": "Lock handle", + "default": false + }, + "controls": { + "type": "array", + "minItems":0, + "uniqueItems": true, + + "items": { + "enum": [ + "lock", + "loop", + "delay", + "export", + "refresh", + "reverse" + ] + }, + "default": [ + "lock", + "delay" + ], + "title": "Slider bar controls" + + }, + "params": { + "type": "object", + "title": "Parameters", + "properties": { + "type": { + "title": "Slider Type", + "type": "string", + "enum": [ + "number", + "date", + "wmst" + ], + "description": "If the Date or WMS-T is selected, range and limit must be in milliseconds. Note: Date is for esri layer and WMS-T is for ogc WMS-T layer.", + "default": "number" + }, + "rangeType": { + "title": "Range Type", + "type": "string", + "enum": [ + "single", + "dual" + ], + "description": "Type of range (single for one handle or dual for 2 handles).", + "default": "dual" + }, + "stepType": { + "title": "Step Type", + "type": "string", + "enum": [ + "dynamic", + "static" + ], + "description": "Type of step (dynamic for open values or static from a list of values).", + "default": "dynamic" + }, + "precision": { + "title": "Precision", + "type": "string", + "enum": [ + "0", + "1", + "2", + "date", + "hour" + ], + "description": "Precision of numeric data (0, 1, 2) or date (Date, Hour).", + "default": "0" + }, + "delay": { + "title": "Animation Delay", + "type": "string", + "enum": [ + "3000", + "4000", + "5000", + "6000", + "7000" + ], + "description": "Delay between animations.", + "default": "3000" + }, + "rangeInterval": { + "type": "number", + "title": "Interval (in milliseconds for date data type)", + "default": -1, + "description": "When the limit type is dynamic, this option allows you to define a preset interval between the two handles. The value must be in milliseconds date data type. For other numerical value formats, enter the desired value directly. To convert a time interval into milliseconds, use the built-in converter. Will start at the beginning of the scroll bar, unless the \"Start at end\" option is enabled." + }, + "startRangeEnd": { + "type": "boolean", + "title": "Start interval at the end", + "default": false + }, + "range": { + "type": "object", + "title": "", + "properties": { + "min": { + "type": "number", + "title": "Minimum value of the range (in milliseconds for date data type)", + "description": "The minimum value of the range that corresponds to the position of the left handle. If not defined, the minimum limit will be used. The value must be in milliseconds date data type. For other numerical value formats, enter the desired value directly. To convert a date to milliseconds, use the site's built-in converter.", + "default": 0 + }, + "max": { + "type": "number", + "title": "Maximum value of the range (in milliseconds for date data type)", + "description": "The maximum value of the range that corresponds to the position of the right handle. If not defined, the maximum limit will be used. The value must be in milliseconds date data type. For other numerical value formats, enter the desired value directly. To convert a date to milliseconds, use the site's built-in converter.", + "default": 1 + } + } + }, + "limit": { + "type": "object", + "title": "Limits of the data set values", + "properties": { + "min": { + "type": "number", + "title": "Minimum Limit", + "description": "The minimum value contained in the dataset. If not defined, the value will be found using the values present in the used field of the layer. To convert a date to milliseconds, use the site's built-in converter.", + "default": 0 + }, + "max": { + "type": "number", + "title": "Maximum Limit", + "description": "The maximum value contained in the dataset. If not defined, the value will be found using the values present in the used field of the layer. To convert a date to milliseconds, use the site's built-in converter.", + "default": 1 + }, + "staticItems": { + "type": "array", + "title": "Static Limit Values", + "items": { + "title": "Value", + "type": "number" + }, + "default": [], + "description": "The values for static limit. Note: the minimum and maximum limits are used to define the lower and upper static limits. Enter only the intermediate values here." + } + } + }, + "units": { + "type": "string", + "title": "Units", + "description": "Shown at the right of the time axis. Keep it short to improve readability.", + "default": "" + }, + "description": { + "type": "string", + "title": "Description", + "description": "Description to add in the section below the slider." + } + }, + "required": [ + "type" + ] + }, + "layers": { + "type": "array", + "title": "Layers", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "The id of the layer for referencing within the viewer (does not relate directly to any external service).", + "title": "Layer id", + "enum":[] + + }, + "field": { + "type": "string", + "description": "The field name to use.", + "title": "Field Name", + "default": "" + }, + "isTimeAware": { + "type": "boolean", + "title": "Is Time Aware", + "default": true, + "description": "If time aware is true, the slider will use the TimeInfo (ESRI) or time dimension (WMS) to extract limits and range." + } + }, + "required": [ + "id, field", + "isTimeAware" + ] + } + } + }, + + "required": [ + "params", + "layers" + ] + }, + + + + "map": { + "$id": "https://cgpv/schema", + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "GeoView Core Config Schema", + + "version": 1.0, + "comments": "Configuration for GeoView core packages, each packages manages it own schema. It correspond to the TypeMapFeaturesInstance type.", + "comments": " in TypeLOcalized string I took out minProperties: 1,because it casused error messages eve if field was not requiered", + + "definitions": { + "TypeLocalizedString": { + + "type": "object", + "properties": { + "en": { + "type": "string", + "description": "The English version of the string." + }, + "fr": { + "type": "string", + "description": "The French version of the string. " + } + } + }, + + "TypeDetailsLayerConfig": { + + "type": "object", + "properties": { + + "parser": { + "type": "string", + "description": "A path to a javascript file with a function for parsing the layers identify output. Only needed if a custom template is being used." + }, + "template": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "A path to an html template (English/French) that will override default identify output." + } + }, + "required": ["template"] + }, + + "TypeFeatureInfoLayerConfig": { + + "type": "object", + "properties": { + "queryable": { + "type": "boolean", + "default": true, + "title": "Allow querying. Default = true." + }, + "customParser": { "$ref": "#/definitions/TypeDetailsLayerConfig" }, + "nameField": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display field (English/French) of the layer. If it is not present the viewer will make an attempt to find the first valid field." + }, + "outfields": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "A comma separated list of attribute names (English/French) that should be requested on query (all by default)." + }, + "fieldTypes": { + "type": "string", + "description": "A comma separated list of types. Type at index i is associated to the variable at index i." + }, + "aliasFields": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "A comma separated list of attribute names (English/French) that should be use for alias. If empty, no alias will be set if not found." + } + }, + "required": [ + "queryable" + ] + }, + "TypeFeatureInfoNotQueryable": { + + "properties": { + "queryable": { + "const": false, + "description": "Do not allow querying.", + "type": "boolean" + } + }, + "required": [ + "queryable" + ], + "type": "object" + }, + + "TypeStrokeSymbolConfig": { + + "type": "object", + "description": "Stroke style for vector features.", + "minProperties": 1, + "properties": { + "color": { + "type": "string" + }, + "lineStyle": { + "enum": [ + "dash", + "dash-dot", + "dash-dot-dot", + "dot", + "longDash", + "longDash-dot", + "null", + "shortDash", + "shortDash-dot", + "shortDash-dot-dot", + "solid" + ] + }, + "width": { + "type": "number" + } + }, + "required": [ + "color", + "width", + "lineStyle" + ] + }, + + "TypeLineStringVectorConfig": { + + "type": "object", + "properties": { + "type": { "type":"string", + "default": "lineString", + "enum": [ + "lineString" + ] + }, + "stroke": { "$ref": "#/definitions/TypeStrokeSymbolConfig" } + }, + "required": [ + "type", + "stroke" + ] + }, + + "TypePolygonVectorConfig": { + + "type": "object", + "properties": { + "type": {"type":"string", "default": "filledPolygon", + "enum": ["filledPolygon"] + }, + "color": { "type": "string" }, + "stroke": { "$ref": "#/definitions/TypeStrokeSymbolConfig" }, + "paternSize": { + "type": "number", + "description": "Distance between patern lines. Default = 8" + }, + "paternWidth": { + "type": "number", + "description": "Patern line width.default = 1." + }, + "fillStyle": { + "enum": [ + "solid", + "backwardDiagonal", + "cross", + "diagonalCross", + "forwardDiagonal", + "horizontal", + "null", + "vertical" + ], + "description": "Kind of filling for vector features. Default = solid. " + } + }, + "required": [ + "type", + "stroke" + ] + }, + + "TypeSimpleSymbolVectorConfig": { + + "type": "object", + "properties": { + "type": {"type":"string", + "default": "simpleSymbol", + "enum": ["simpleSymbol"] + }, + "rotation": { + "type": "number", + "description": "Symbol rotation in radians." + }, + "color": { "type": "string" }, + "stroke": { "$ref": "#/definitions/TypeStrokeSymbolConfig" }, + "size": { "type": "number" }, + "offset": { + "type": "array", + "items": { + "type": "number" + }, + "minItems": 2, + "maxItems": 2 + }, + "symbol": { + "enum": [ + "circle", + "+", + "diamond", + "square", + "triangle", + "X", + "star" + ] + } + }, + "required": + ["type", + "symbol" + ] + }, + + "TypeIconSymbolVectorConfig": { + + "type": "object", + "properties": { + "type": {"type":"string", + "default": "iconSymbol", + "enum": ["iconSymbol"] + }, + "mimeType": { "type": "string" }, + "src": { "type": "string" }, + "width": { + "type": "integer", + "description": "Icon width in pixel." + }, + "height": { + "type": "integer", + "description": "Icon height in pixel." + }, + "rotation": { + "type": "number", + "description": "Icon rotation in radians." + }, + "opacity": { + "type": "number", + "minimum": 0, + "maximum": 1, + "default": 1 + }, + "offset": { + "type": "array", + "items": { + "type": "number" + }, + "minItems": 2, + "maxItems": 2 + }, + "crossOrigin": { + "type": "string", + "description": "The crossOrigin attribute for loaded images. Note that you must provide a crossOrigin value if you want to access pixel data with the Canvas renderer." + } + }, + "required": ["type", "mimeType", "src"] + }, + + "TypeSimpleStyleConfig": { + + "type": "object", + "properties": { + "styleId": { + "type": "string" + }, + "styleType": { + "enum": ["simple"], + "default": "simple" + }, + "label": { + "type": "string" + }, + "settings": { "$ref": "#/definitions/TypeKindOfVectorSettings" } + }, + "required": [ + "styleType", + "label", + "settings" + ] + }, + + + "TypeUniqueValueStyleConfig": { + + "type": "object", + "properties": { + "styleId": { + "type": "string" + }, + "styleType": {"type":"string", + "default": "uniqueValue", + "enum": ["uniqueValue"] + }, + "defaultLabel": { + "type": "string", + "description": "Label used if field/value association is not found." + }, + "defaultSettings": { + "$ref": "#/definitions/TypeKindOfVectorSettings", + "description": "Settings used if field/value association is not found." + }, + "defaultVisible": { + "description": "Flag used to show/hide features associated to the default label (default: yes).", + "enum": [ + "yes", + "no", + "always" + ] + }, + "fields": { + "type": "array", + "items": { + "type": "string" + }, + "minItems": 1 + }, + "uniqueValueStyleInfo": { + "type": "array", + "items": { + + "type": "object", + "properties": { + "label": { + "type": "string" + }, + "settings": { + "$ref": "#/definitions/TypeKindOfVectorSettings" + }, + "values": { + "items": { + "oneOf": [ + { "title": "String Value", + "type": "string" + }, + { "title": "Numeric Value", + "type": "number" + } + ] + }, + "minItems": 1, + "type": "array" + }, + "visible": { + "description": "Flag used to show/hide features associated to the label (default: yes).", + "enum": [ + "yes", + "no", + "always" + ] + } + } + + }, + "minItems": 1, + "required": [ + "label", + "values", + "options" + ] + } + }, + "required": [ + "styleType", + "fields", + "uniqueValueStyleInfo" + ] + }, + + "TypeUniqueValueStyleInfo": { + "type": "array", + "items": { + + "type": "object", + "properties": { + "label": { + "type": "string" + }, + "settings": { + "$ref": "#/definitions/TypeKindOfVectorSettings" + }, + "values": { + "items": { + "oneOf": [ + { "title": "String Value", + "type": "string" + }, + { "title": "Numeric Value", + "type": "number" + } + ] + }, + "minItems": 1, + "type": "array" + }, + "visible": { + "description": "Flag used to show/hide features associated to the label (default: yes).", + "enum": [ + "yes", + "no", + "always" + ] + } + } + + }, + "minItems": 1, + "required": [ + "label", + "values", + "options" + ] + + }, + + "TypeValidMapProjectionCodes": { + "default": 3978, + "description": "Spatial Reference EPSG code supported (https://epsg.io/). We support Web Mercator and Lambert Conical Conform Canada.", + "enum": [ + 3978, + 3857 + ] + }, + + "TypeClassBreakStyleConfig": { + + "type": "object", + "properties": { + "styleId": { + "type": "string" + }, + "styleType": { + "default": "classBreaks", + "enum": ["classBreaks"] + }, + "field": { + "type": "string" + }, + "defaultLabel": { + "type": "string", + "description": "Label used if field/value association is not found." + }, + "defaultSettings": { + "$ref": "#/definitions/TypeKindOfVectorSettings", + "description": "Settings used if field/value association is not found." + }, + "defaultVisible": { + "description": "Flag used to show/hide features associated to the default label (default: yes).", + "default": "yes", + "enum": [ + "yes", + "no", + "always" + ] + }, + + "classBreakStyleInfo": { "$ref": "#/definitions/TypeClassBreakStyleInfo" } + }, + "required": ["styleType", "field", "classBreakStyleInfo"] + }, + + + "TypeClassBreakStyleInfo": { + + "type": "array", + "items": { + + "type": "object", + "properties": { + + "label": { + "type": "string" + }, + "minValue": { + "oneOf": [ + { "title": "minValue String value", + "type": "string" + }, + { "title": "minValue Numeric value", + "type": "number" + } + ] + }, + "maxValue": { + "oneOf": [ + { "title": "maxValue String value", + "type": "string" + }, + { "title": "maxValue Numeric value", + "type": "number" + } + ] + }, + "visible": { + "description": "Flag used to show/hide features associated to the label (default: yes).", + "enum": [ + "yes", + "no", + "always" + ], + "default" : ["no"] + }, + + "settings": { "$ref": "#/definitions/TypeKindOfVectorSettings" } + } + }, + "minItems": 1, + "required": ["label", "minValue", "maxValue", "settings"] + + }, + + "TypeKindOfVectorSettings": { + "discriminator": {"propertyName": "type"}, + "oneOf": [ + { "title":"LineString", + "type": "object", + "properties": { + "type": { "type":"string", + "default": "lineString", + "enum": [ + "lineString" + ] + }, + "stroke": { "type": "object", + "description": "Stroke style for vector features.", + "minProperties": 1, + "properties": { + "color": { + "type": "string" + }, + "lineStyle": { + "enum": [ + "dash", + "dash-dot", + "dash-dot-dot", + "dot", + "longDash", + "longDash-dot", + "null", + "shortDash", + "shortDash-dot", + "shortDash-dot-dot", + "solid" + ] + }, + "width": { + "type": "number" + } + }, + "required": [ + "color", + "width", + "lineStyle" + ] } + }, + "required": [ + "type", + "stroke" + ] }, + { "title":"Polygon", + "type": "object", + "properties": { + "type": {"type":"string", "default": "filledPolygon", + "enum": ["filledPolygon"] + }, + "color": { "type": "string" }, + "stroke": { + "type": "object", + "description": "Stroke style for vector features.", + "minProperties": 1, + "properties": { + "color": { + "type": "string" + }, + "lineStyle": { + "enum": [ + "dash", + "dash-dot", + "dash-dot-dot", + "dot", + "longDash", + "longDash-dot", + "null", + "shortDash", + "shortDash-dot", + "shortDash-dot-dot", + "solid" + ] + }, + "width": { + "type": "number" + } + }, + "required": [ + "color", + "width", + "lineStyle" + ] + }, + "paternSize": { + "type": "number", + "description": "Distance between patern lines. Default = 8" + }, + "paternWidth": { + "type": "number", + "description": "Patern line width.default = 1." + }, + "fillStyle": { + "enum": [ + "solid", + "backwardDiagonal", + "cross", + "diagonalCross", + "forwardDiagonal", + "horizontal", + "null", + "vertical" + ], + "description": "Kind of filling for vector features. Default = solid. " + } + }, + "required": [ + "type", + "stroke" + ] }, + { "title":"SimpleSymbol", + "type": "object", + "properties": { + "type": {"type":"string", + "default": "simpleSymbol", + "enum": ["simpleSymbol"] + }, + "rotation": { + "type": "number", + "description": "Symbol rotation in radians." + }, + "color": { "type": "string" }, + "stroke": { + "type": "object", + "description": "Stroke style for vector features.", + "minProperties": 1, + "properties": { + "color": { + "type": "string" + }, + "lineStyle": { + "enum": [ + "dash", + "dash-dot", + "dash-dot-dot", + "dot", + "longDash", + "longDash-dot", + "null", + "shortDash", + "shortDash-dot", + "shortDash-dot-dot", + "solid" + ] + }, + "width": { + "type": "number" + } + }, + "required": [ + "color", + "width", + "lineStyle" + ] + }, + "size": { "type": "number" }, + "offset": { + "type": "array", + "items": { + "type": "number" + }, + "minItems": 2, + "maxItems": 2 + }, + "symbol": { + "enum": [ + "circle", + "+", + "diamond", + "square", + "triangle", + "X", + "star" + ] + } + }, + "required": + ["type", + "symbol" + ] + }, + { "title":"IconSymbol", + "type": "object", + "properties": { + "type": {"type":"string", + "default": "iconSymbol", + "enum": ["iconSymbol"] + }, + "mimeType": { "type": "string" }, + "src": { "type": "string" }, + "width": { + "type": "integer", + "description": "Icon width in pixel." + }, + "height": { + "type": "integer", + "description": "Icon height in pixel." + }, + "rotation": { + "type": "number", + "description": "Icon rotation in radians." + }, + "opacity": { + "type": "number", + "minimum": 0, + "maximum": 1, + "default": 1 + }, + "offset": { + "type": "array", + "items": { + "type": "number" + }, + "minItems": 2, + "maxItems": 2 + }, + "crossOrigin": { + "type": "string", + "description": "The crossOrigin attribute for loaded images. Note that you must provide a crossOrigin value if you want to access pixel data with the Canvas renderer." + } + }, + "required": ["type", "mimeType", "src"] } + ] + }, + + "TypeStyleConfig": { + + "minProperties": 1, + "type": "object", + "Title": "Line Style Config", + "description":"Enter Line, Point and Polygon Style Config ", + "properties": { + "LineString": { "description":"Point Style Config ", + + "title":"Line Style", + + "$ref": "#/definitions/TypeStyleSettings" + }, + "Point": { "description": "Polygon Style Config", + "title":"Point Style", + + "$ref": "#/definitions/TypeStyleSettings" + }, + "Polygon": { + "title":"Polygon Style", + + "$ref": "#/definitions/TypeStyleSettings" + } + } + }, + + "TypeStyleSettings": { + "discriminator": {"propertyName":"styleType"}, + "oneOf": + [ { + "title":"SimpleStyle", + "type": "object", + "properties": { + "styleId": { + "type": "string" + }, + "styleType": { + "enum": ["simple"], + "default": "simple" + }, + "label": { + "type": "string" + }, + "settings": { +"discriminator": {"propertyName":"type"}, + "oneOf": + [ + { "title":"LineString", + "type": "object", + "properties": { + "type": { "type":"string", + "default": "lineString", + "enum": [ + "lineString" + ] + }, + "stroke": { "description": "Stroke style for vector features.", + "minProperties": 1, + "properties": { + "color": { + "type": "string" + }, + "lineStyle": { + "enum": [ + "dash", + "dash-dot", + "dash-dot-dot", + "dot", + "longDash", + "longDash-dot", + "null", + "shortDash", + "shortDash-dot", + "shortDash-dot-dot", + "solid" + ] + }, + "width": { + "type": "number" + } + }, + "required": [ + "color", + "width", + "lineStyle" + ] } + }, + "required": [ + "type", + "stroke" + ] }, + { "title":"Polygon", + "type": "object", + "properties": { + "type": {"type":"string", "default": "filledPolygon", + "enum": ["filledPolygon"] + }, + "color": { "type": "string" }, + "stroke": { + "description": "Stroke style for vector features.", + "minProperties": 1, + "properties": { + "color": { + "type": "string" + }, + "lineStyle": { + "enum": [ + "dash", + "dash-dot", + "dash-dot-dot", + "dot", + "longDash", + "longDash-dot", + "null", + "shortDash", + "shortDash-dot", + "shortDash-dot-dot", + "solid" + ] + }, + "width": { + "type": "number" + } + }, + "required": [ + "color", + "width", + "lineStyle" + ] + }, + "paternSize": { + "type": "number", + "description": "Distance between patern lines. Default = 8" + }, + "paternWidth": { + "type": "number", + "description": "Patern line width.default = 1." + }, + "fillStyle": { + "enum": [ + "solid", + "backwardDiagonal", + "cross", + "diagonalCross", + "forwardDiagonal", + "horizontal", + "null", + "vertical" + ], + "description": "Kind of filling for vector features. Default = solid. " + } + }, + "required": [ + "type", + "stroke" + ] }, + + { "title":"SimpleSymbol", + "type": "object", + "properties": { + "type": {"type":"string", + "default": "simpleSymbol", + "enum": ["simpleSymbol"] + }, + "rotation": { + "type": "number", + "description": "Symbol rotation in radians." + }, + "color": { "type": "string" }, + "stroke": { + "description": "Stroke style for vector features.", + "minProperties": 1, + "properties": { + "color": { + "type": "string" + }, + "lineStyle": { + "enum": [ + "dash", + "dash-dot", + "dash-dot-dot", + "dot", + "longDash", + "longDash-dot", + "null", + "shortDash", + "shortDash-dot", + "shortDash-dot-dot", + "solid" + ] + }, + "width": { + "type": "number" + } + }, + "required": [ + "color", + "width", + "lineStyle" + ] + }, + "size": { "type": "number" }, + "offset": { + "type": "array", + "items": { + "type": "number" + }, + "minItems": 2, + "maxItems": 2 + }, + "symbol": { + "enum": [ + "circle", + "+", + "diamond", + "square", + "triangle", + "X", + "star" + ] + } + }, + "required": + ["type", + "symbol" + ] + }, + + { "title":"IconSymbol", + "type": "object", + "properties": { + "type": {"type":"string", + "default": "iconSymbol", + "enum": ["iconSymbol"] + }, + "mimeType": { "type": "string" }, + "src": { "type": "string" }, + "width": { + "type": "integer", + "description": "Icon width in pixel." + }, + "height": { + "type": "integer", + "description": "Icon height in pixel." + }, + "rotation": { + "type": "number", + "description": "Icon rotation in radians." + }, + "opacity": { + "type": "number", + "minimum": 0, + "maximum": 1, + "default": 1 + }, + "offset": { + "type": "array", + "items": { + "type": "number" + }, + "minItems": 2, + "maxItems": 2 + }, + "crossOrigin": { + "type": "string", + "description": "The crossOrigin attribute for loaded images. Note that you must provide a crossOrigin value if you want to access pixel data with the Canvas renderer." + } + }, + "required": ["type", "mimeType", "src"] + } + ] + + } + }, + "required": [ + "styleType", + "label", + "settings" + ] + + } + + , + + { "title":"UniqueValueStyle", + "type": "object", + "properties": { + "styleId": { + "type": "string" + }, + "styleType": {"type":"string", + "default": "uniqueValue", + "enum": ["uniqueValue"] + }, + "defaultLabel": { + "type": "string", + "description": "Label used if field/value association is not found." + }, + "defaultSettings": { + "discriminator": {"propertyName":"type"}, + "oneOf": [ + { "title":"LineString", + "type": "object", + "properties": { + "type": { "type":"string", + "default": "lineString", + "enum": [ + "lineString" + ] + }, + "stroke": { + "description": "Stroke style for vector features.", + "minProperties": 1, + "properties": { + "color": { + "type": "string" + }, + "lineStyle": { + "enum": [ + "dash", + "dash-dot", + "dash-dot-dot", + "dot", + "longDash", + "longDash-dot", + "null", + "shortDash", + "shortDash-dot", + "shortDash-dot-dot", + "solid" + ] + }, + "width": { + "type": "number" + } + }, + "required": [ + "color", + "width", + "lineStyle" + ] + } + }, + "required": [ + "type", + "stroke" + ] + } + + , + { "title":"Polygon", + "type": "object", + "properties": { + "type": {"type":"string", "default": "filledPolygon", + "enum": ["filledPolygon"] + }, + "color": { "type": "string" }, + "stroke": { + "description": "Stroke style for vector features.", + "minProperties": 1, + "properties": { + "color": { + "type": "string" + }, + "lineStyle": { + "enum": [ + "dash", + "dash-dot", + "dash-dot-dot", + "dot", + "longDash", + "longDash-dot", + "null", + "shortDash", + "shortDash-dot", + "shortDash-dot-dot", + "solid" + ] + }, + "width": { + "type": "number" + } + }, + "required": [ + "color", + "width", + "lineStyle" + ] + }, + "paternSize": { + "type": "number", + "description": "Distance between patern lines. Default = 8" + }, + "paternWidth": { + "type": "number", + "description": "Patern line width.default = 1." + }, + "fillStyle": { + "enum": [ + "solid", + "backwardDiagonal", + "cross", + "diagonalCross", + "forwardDiagonal", + "horizontal", + "null", + "vertical" + ], + "description": "Kind of filling for vector features. Default = solid. " + } + }, + "required": [ + "type", + "stroke" + ] }, + { "title":"SimpleSymbol", + "type": "object", + "properties": { + "type": {"type":"string", + "default": "simpleSymbol", + "enum": ["simpleSymbol"] + }, + "rotation": { + "type": "number", + "description": "Symbol rotation in radians." + }, + "color": { "type": "string" }, + "stroke": { + "description": "Stroke style for vector features.", + "minProperties": 1, + "properties": { + "color": { + "type": "string" + }, + "lineStyle": { + "enum": [ + "dash", + "dash-dot", + "dash-dot-dot", + "dot", + "longDash", + "longDash-dot", + "null", + "shortDash", + "shortDash-dot", + "shortDash-dot-dot", + "solid" + ] + }, + "width": { + "type": "number" + } + }, + "required": [ + "color", + "width", + "lineStyle" + ] + }, + "size": { "type": "number" }, + "offset": { + "type": "array", + "items": { + "type": "number" + }, + "minItems": 2, + "maxItems": 2 + }, + "symbol": { + "enum": [ + "circle", + "+", + "diamond", + "square", + "triangle", + "X", + "star" + ] + } + }, + "required": + ["type", + "symbol" + ] + }, + { "title":"IconSymbol", + "type": "object", + "properties": { + "type": {"type":"string", + "default": "iconSymbol", + "enum": ["iconSymbol"] + }, + "mimeType": { "type": "string" }, + "src": { "type": "string" }, + "width": { + "type": "integer", + "description": "Icon width in pixel." + }, + "height": { + "type": "integer", + "description": "Icon height in pixel." + }, + "rotation": { + "type": "number", + "description": "Icon rotation in radians." + }, + "opacity": { + "type": "number", + "minimum": 0, + "maximum": 1, + "default": 1 + }, + "offset": { + "type": "array", + "items": { + "type": "number" + }, + "minItems": 2, + "maxItems": 2 + }, + "crossOrigin": { + "type": "string", + "description": "The crossOrigin attribute for loaded images. Note that you must provide a crossOrigin value if you want to access pixel data with the Canvas renderer." + } + }, + "required": ["type", "mimeType", "src"] } + + ] + + }, + "defaultVisible": { + "description": "Flag used to show/hide features associated to the default label (default: yes).", + "enum": [ + "yes", + "no", + "always" + ] + }, + "fields": { + "type": "array", + "items": { + "type": "string" + }, + "minItems": 1 + }, + "uniqueValueStyleInfo": { + "type": "array", + "items": { + + "type": "object", + "properties": { + "label": { + "type": "string" + }, + "settings": { + + }, + "values": { + "items": { + "oneOf": [ + { "title": "String Value", + "type": "string" + }, + { "title": "Numeric Value", + "type": "number" + } + ] + }, + "minItems": 1, + "type": "array" + }, + "visible": { + "description": "Flag used to show/hide features associated to the label (default: yes).", + "enum": [ + "yes", + "no", + "always" + ] + } + } + + }, + "minItems": 1, + "required": [ + "label", + "values", + "options" + ] + } + }, + "required": [ + "styleType", + "fields", + "uniqueValueStyleInfo" + ] + } + + + , + {"title":"ClassBreakStyle", + "type": "object", + "properties": { + "styleId": { + "type": "string" + }, + "styleType": { + "default": "classBreaks", + "enum": ["classBreaks"] + }, + "field": { + "type": "string" + }, + "defaultLabel": { + "type": "string", + "description": "Label used if field/value association is not found." + }, + "defaultSettings": { + "discriminator": {"propertyName":"type"}, + "oneOf": [ + { "title":"LineString", + "type": "object", + "properties": { + "type": { "type":"string", + "default": "lineString", + "enum": [ + "lineString" + ] + }, + "stroke": { + "description": "Stroke style for vector features.", + "minProperties": 1, + "properties": { + "color": { + "type": "string" + }, + "lineStyle": { + "enum": [ + "dash", + "dash-dot", + "dash-dot-dot", + "dot", + "longDash", + "longDash-dot", + "null", + "shortDash", + "shortDash-dot", + "shortDash-dot-dot", + "solid" + ] + }, + "width": { + "type": "number" + } + }, + "required": [ + "color", + "width", + "lineStyle" + ] + } + }, + "required": [ + "type", + "stroke" + ] }, + { "title":"Polygon", + "type": "object", + "properties": { + "type": {"type":"string", "default": "filledPolygon", + "enum": ["filledPolygon"] + }, + "color": { "type": "string" }, + "stroke": { + "description": "Stroke style for vector features.", + "minProperties": 1, + "properties": { + "color": { + "type": "string" + }, + "lineStyle": { + "enum": [ + "dash", + "dash-dot", + "dash-dot-dot", + "dot", + "longDash", + "longDash-dot", + "null", + "shortDash", + "shortDash-dot", + "shortDash-dot-dot", + "solid" + ] + }, + "width": { + "type": "number" + } + }, + "required": [ + "color", + "width", + "lineStyle" + ] + }, + "paternSize": { + "type": "number", + "description": "Distance between patern lines. Default = 8" + }, + "paternWidth": { + "type": "number", + "description": "Patern line width.default = 1." + }, + "fillStyle": { + "enum": [ + "solid", + "backwardDiagonal", + "cross", + "diagonalCross", + "forwardDiagonal", + "horizontal", + "null", + "vertical" + ], + "description": "Kind of filling for vector features. Default = solid. " + } + }, + "required": [ + "type", + "stroke" + ] }, + { "title":"SimpleSymbol", + "type": "object", + "properties": { + "type": {"type":"string", + "default": "simpleSymbol", + "enum": ["simpleSymbol"] + }, + "rotation": { + "type": "number", + "description": "Symbol rotation in radians." + }, + "color": { "type": "string" }, + "stroke": { + "description": "Stroke style for vector features.", + "minProperties": 1, + "properties": { + "color": { + "type": "string" + }, + "lineStyle": { + "enum": [ + "dash", + "dash-dot", + "dash-dot-dot", + "dot", + "longDash", + "longDash-dot", + "null", + "shortDash", + "shortDash-dot", + "shortDash-dot-dot", + "solid" + ] + }, + "width": { + "type": "number" + } + }, + "required": [ + "color", + "width", + "lineStyle" + ] + }, + "size": { "type": "number" }, + "offset": { + "type": "array", + "items": { + "type": "number" + }, + "minItems": 2, + "maxItems": 2 + }, + "symbol": { + "enum": [ + "circle", + "+", + "diamond", + "square", + "triangle", + "X", + "star" + ] + } + }, + "required": + ["type", + "symbol" + ] + }, + { "title":"IconSymbol", + "type": "object", + "properties": { + "type": {"type":"string", + "default": "iconSymbol", + "enum": ["iconSymbol"] + }, + "mimeType": { "type": "string" }, + "src": { "type": "string" }, + "width": { + "type": "integer", + "description": "Icon width in pixel." + }, + "height": { + "type": "integer", + "description": "Icon height in pixel." + }, + "rotation": { + "type": "number", + "description": "Icon rotation in radians." + }, + "opacity": { + "type": "number", + "minimum": 0, + "maximum": 1, + "default": 1 + }, + "offset": { + "type": "array", + "items": { + "type": "number" + }, + "minItems": 2, + "maxItems": 2 + }, + "crossOrigin": { + "type": "string", + "description": "The crossOrigin attribute for loaded images. Note that you must provide a crossOrigin value if you want to access pixel data with the Canvas renderer." + } + }, + "required": ["type", "mimeType", "src"] } + + ] + }, + "defaultVisible": { + "description": "Flag used to show/hide features associated to the default label (default: yes).", + "default": "yes", + "enum": [ + "yes", + "no", + "always" + ] + }, + + "classBreakStyleInfo": { + "type": "array", + "items": { + + "type": "object", + "properties": { + + "label": { + "type": "string" + }, + "minValue": { + "oneOf": [ + { "title": "minValue String value", + "type": "string" + }, + { "title": "minValue Numeric value", + "type": "number" + } + ] + }, + "maxValue": { + "oneOf": [ + { "title": "maxValue String value", + "type": "string" + }, + { "title": "maxValue Numeric value", + "type": "number" + } + ] + }, + "visible": { + "description": "Flag used to show/hide features associated to the label (default: yes).", + "enum": [ + "yes", + "no", + "always" + ], + "default" : ["no"] + }, + + "settings": { } + } + }, + "minItems": 1, + "required": ["label", "minValue", "maxValue", "settings"] + } + }, + + "required": ["styleType", "field", "classBreakStyleInfo"] + } + ] + + }, + + "TypeLayerInitialSettings": { + + "type": "object", + "properties": { + "bounds": { + "description": "The geographic bounding box that contains all the layer's features.", + "items": { + "type": "number" + }, + "maxItems": 4, + "minItems": 4, + "type": "array", + "default":[-16763712,5165908,-5688293,10649806] + }, + "opacity": { + "type": "number", + "minimum": 0, + "maximum": 1, + "default": 1, + "description": "Initial opacity setting." + }, + "visible": { + "default": "yes", + "description": "Initial visibility setting.", + "enum": [ + "yes", + "no", + "always" + ] + }, + "extent": { + "type": "array", + "minItems": 4, + "maxItems": 4, + "items": { + "type": "number" + },"default":[-16763712,5165908,-5688293,10649806], + "description": "The extent that constrains the view. Called with [minX, minY, maxX, maxY] extent coordinates." + }, + "minZoom": { + "type": "integer", + "minimum": 0, + "maximum": 50, + "description": "The minimum view zoom level (exclusive) above which this layer will be visible." + }, + "maxZoom": { + "type": "integer", + "minimum": 0, + "maximum": 50, + "description": "The maximum view zoom level (inclusive) above which this layer will be visible." + }, + "className": { + "type": "string", + "description": "A CSS class name to set to the layer element." + } + } + }, + + + "TypeVectorSourceFormats": { + "enum": [ + "GeoJSON", + "EsriJSON", + "KML", + "WFS", + "featureAPI", + "GeoPackage" + ] , + "default": "GeoJSON", + "description": "The feature format used by the XHR feature loader when access path is set." + }, + + "TypeVectorSourceInitialConfig": { + + "type": "object", + "properties": { + "dataAccessPath": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The path (English/French) to reach the data to display. If not specified, metadatAccessPath will be assigne dto it." + }, + "format": { "$ref": "#/definitions/TypeVectorSourceFormats" }, + "dataProjection": { + "type": "string", + "description": "The projection code of the source. Used only for GeoJSON format. Default value is EPSG:4326. " + }, + "featureInfo": { "$ref": "#/definitions/TypeFeatureInfoLayerConfig" }, + + "postSettings": { + "type": "object", + "properties": { + "data": + { + "type": "object" + }, + "header": + { + "type": "object" + } + } + }, + "strategy": { + "default": "all", + "description": "The loading strategy to use. By default an all strategy is used, a one-off strategy which loads all features at once.", + "enum": [ + "all", + "bbox" + ] + } + } + }, + + + + "TypeSourceImageWmsInitialConfig": { + + "type": "object", + "properties": { + "dataAccessPath": { + "$ref": "#/definitions/TypeLocalizedString", + + "description": "The path (English/French) to reach the data to display. If not specified, metadatAccessPath will be assigne dto it." + }, + "crossOrigin": { + "type": "string", + "description": "The crossOrigin attribute for loaded images. Note that you must provide a crossOrigin value if you want to access pixel data with the Canvas renderer." + }, + "projection": { + "type": "integer", + "description": "Spatial Reference EPSG code supported (https://epsg.io/). We support Web Mercator and Lambert Conical Conform Canada." + }, + "featureInfo": { + "$ref": "#/definitions/TypeFeatureInfoLayerConfig" + }, + "serverType": { + "$ref": "#/definitions/TypeOfServer", + "description": "The type of the remote WMS server. The default value is mapserver." + }, + "style": { + "oneOf": [ + { "title":"Single style", + "description": "Single style to apply", + "type": "string" + }, + { "title":"Array of styles", + "description": "Array of style to choose.", + "items": { + "type": "string" + }, + "type": "array" + } + ] + } + } + }, + + "TypeOfServer": { + "enum": [ + "mapserver", + "geoserver", + "qgis"], + "description": "The type of the remote WMS server. The default value is mapserver." + }, + + "TypeSourceImageEsriInitialConfig": { + + "type": "object", + "properties": { + "dataAccessPath": { + "$ref": "#/definitions/TypeLocalizedString", + + "description": "The path (English/French) to reach the data to display. If not specified, metadatAccessPath will be assigne dto it." + }, + "crossOrigin": { + "type": "string", + "description": "The crossOrigin attribute for loaded images. Note that you must provide a crossOrigin value if you want to access pixel data with the Canvas renderer." + }, + "projection": { + "type": "integer", + "description": "Spatial Reference EPSG code supported (https://epsg.io/). We support Web Mercator and Lambert Conical Conform Canada." + }, + "featureInfo": { + "$ref": "#/definitions/TypeFeatureInfoLayerConfig" + }, + "format": { + "$ref": "#/definitions/TypeEsriFormatParameter" + }, + "transparent": { + "type": "boolean", + "default": true, + "description": "If true, the image will be exported with the background color of the map set as its transparent color. Only the .png and .gif formats support transparency." + } + } + }, + + "TypeEsriDynamicLayerEntryConfig": { + + "properties": { + "entryType": { + "type": "string", + "enum": [ + "raster-image" + ], + "default": "raster-image" + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer entry at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "layerFilter": { + "description": "Filter to apply on feature of this layer.", + "type": "string" + }, + "layerId": { + "description": "The id of the layer to display on the map.", + "type": "string" + }, + "layerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "layerPathEnding": { + "description": "The ending element of the layer configuration path.", + "type": "string" + }, + "schemaTag": { + "enum": [ + "esriDynamic" + ], + "default": "esriDynamic" + + }, + "source": { + "$ref": "#/definitions/TypeSourceImageEsriInitialConfig" + }, + "style": { + "$ref": "#/definitions/TypeStyleConfig" + } + }, + "required": [ + "schemaTag", + "entryType", + "layerId" + ], + "type": "object" + }, + + "TypeEsriFormatParameter": { + "enum": ["png", "jpg", "gif", "svg"], + "default": "png", + "description": "The format of the exported image. The default format is png." + }, + + "TypeSourceTileInitialConfig": { + + "properties": { + "dataAccessPath": { + "$ref": "#/definitions/TypeLocalizedString", + + "description": "The path (English/French) to reach the data to display. If not specified, metadatAccessPath will be assigne dto it." + }, + "featureInfo": { + "$ref": "#/definitions/TypeFeatureInfoNotQueryable" + }, + "crossOrigin": { + "type": "string", + "description": "The crossOrigin attribute for loaded images. Note that you must provide a crossOrigin value if you want to access pixel data with the Canvas renderer." + }, + "projection": { + "type": "integer", + "description": "Spatial Reference EPSG code supported (https://epsg.io/). We support Web Mercator and Lambert Conical Conform Canada." + }, + "tileGrid": { "$ref": "#/definitions/TypeTileGrid" } + } + }, + + "TypeTileGrid": { + + "type": "object", + "properties": { + "extent": { + "type": "array", + "maxItems": 4, + "minItems": 4, + "items": + { + "type": "number" + }, + "description": "The extent that constrains the view. Called with [minX, minY, maxX, maxY] extent coordinates." + }, + "origin": { + "type": "array", + "maxItems": 2, + "minItems": 2, + "items": + { + "type": "number" + } + , + "description": "The tile grid origin, i.e. where the x and y axes meet ([z, 0, 0]). Tile coordinates increase left to right and downwards. If not specified, extent must be provided." + }, + "resolutions": { + "type": "array", + "items": { + "type": "number" + }, + "description": "Resolutions. The array index of each resolution needs to match the zoom level. This means that even if a minZoom is configured, the resolutions array will have a length of maxZoom + 1." + }, + "tileSize": { + "type": "array", + "maxItems": 2, + "minItems": 2, + "items": + { + "type": "number" + }, + "default": [256, + 256 + ], + "description": "The tile grid origin, i.e. where the x and y axes meet ([z, 0, 0]). Tile coordinates increase left to right and downwards. If not specified, extent must be provided." + } + }, + "required": ["origin", "resolutions"] + }, + + "TypeVectorHeatmapLayerEntryConfig": { + + "type": "object", + "properties": { + "schemaTag": { + "enum": [ + "not used yet" + ], + "defautl":"not used yet" + + }, + "entryType": { + "type": "string", + "enum": [ + "vector-heatmap" + ], + "default": "vector-heatmap" + }, + "layerPathEnding": { + "description": "The ending element of the layer configuration path.", + "type": "string" + }, + "layerId": { + "type": "string", + "description": "The id of the layer to display on the map." + }, + "layerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer entry at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "source": { "$ref": "#/definitions/TypeVectorSourceInitialConfig" }, + "gradient": { + "type": "array", + "items": { + "type": "string" + }, + "uniqueItems": true, + "minItems": 2, + "default": ["#00f", + "#0ff", + "#0f0", + "#ff0", + "#f00" + ], + "description": "Color gradient of the heatmap, specified as an array of CSS color strings." + }, + "radius": { + "type": "number", + "description": "Radius size in pixels (default 8px)." + }, + "blur": { + "type": "number", + "description": "Blur size in pixels (default 15px)." + }, + "weight": { + "type": "string", + "description": "Feature attribute to use for the weight or a function (ADD FORMAT) that returns a weight from a feature." + } + }, + "required": ["schemaTag", + "layerId", + "entryType" + ] + }, + + "TypeVectorLayerEntryConfig": { + + "type": "object", + "properties": { + "entryType": { + "type": "string", + "default": "vector", + "enum": [ + "vector" + ] + }, + "layerId": { + "type": "string", + "description": "The id of the layer to display on the map." + }, + "layerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "layerFilter": { + "description": "Filter to apply on feature of this layer.", + "type": "string" + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer entry at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "source": { "$ref": "#/definitions/TypeVectorSourceInitialConfig" }, + "style": { "$ref": "#/definitions/TypeStyleConfig" }, + "layerPathEnding": { + "description": "The ending element of the layer configuration path.", + "type": "string" + }, + "schemaTag": { + "enum": [ + "GeoJSON", + "esriFeature", + "ogcWfs", + "ogcFeature", + "GeoPackage" + ] + } + }, + "required": [ + "layerId", + "schemaTag", + "entryType" + ] + }, + + "TypeVectorTileLayerEntryConfig": { + + "type": "object", + "description": "Layer sources providing vector data divided into a tile grid.", + "properties": { + "entryType": { + "type": "string", + "enum": [ + "vector-tile" + ], + "default": "vector-tile" + }, + "layerId": { + "type": "string", + "description": "The id of the layer to display on the map." + }, + "layerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "layerFilter": { + "description": "Filter to apply on feature of this layer.", + "type": "string" + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer entry at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "source": { + "$ref": "#/definitions/TypeVectorTileSourceInitialConfig", + "description": "Information used to configure the source of a vector tile layer." + }, + "layerPathEnding": { + "description": "The ending element of the layer configuration path.", + "type": "string" + }, + "style": { + "$ref": "#/definitions/TypeStyleConfig" + }, + "schemaTag": { + "enum": [ + "not used yet" + ] + } + }, + "required": [ + + "entryType", + "layerId" + ] + }, + + "TypeVectorTileSourceInitialConfig": { + + "type": "object", + "description": "Layer sources providing vector data divided into a tile grid.", + "properties": { + "dataAccessPath": { + "$ref": "#/definitions/TypeLocalizedString", + + "description": "The path (English/French) to reach the data to display. If not specified, metadatAccessPath will be assigne dto it." + }, + "format": { + "enum": ["GeoJSON", "EsriJSON", "KML", "WFS", "MVT", "featureAPI"], + "description": "The feature format used by the XHR feature loader when access path is set." + }, + "dataProjection": { + "type": "string", + "description": "The projection code of the source. Used only for GeoJSON format. Default value is EPSG:4326." + }, + "featureInfo": { "$ref": "#/definitions/TypeFeatureInfoLayerConfig" }, + "style": { "$ref": "#/definitions/TypeStyleConfig" }, + "tileGrid": { + "$ref": "#/definitions/TypeTileGrid" + } + + } + }, + + "TypeTileLayerEntryConfig": { + + "type": "object", + "properties": { + "entryType": { + "type": "string", + "enum": [ + "raster-tile" + ], + "default": "raster-tile" + }, + "layerId": { + "type": "string", + "description": "The id of the layer to display on the map." + }, + "layerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer entry at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "layerPathEnding": { + "description": "The ending element of the layer configuration path.", + "type": "string" + }, + "schemaTag": { + "enum": [ + "ogcWms", + "xyzTiles", + "vectorTiles" + ], + "default": "ogcWms" + }, + "source": { "$ref": "#/definitions/TypeSourceTileInitialConfig" } + }, + "required": [ + "schemaTag", + "entryType", + "layerId" + ] + }, + + + + "TypeGeocoreLayerEntryConfig": { + + "type": "object", + "description": "Layer where configration is extracted by a configuration snippet stored on a server. The server configuration will handle bilangual informations.", + "properties": { + "entryType": { + "type": "string", + "enum": [ + "geocore" + ], + "default": "geocore" + }, + "layerId": { + "type": "string", + "description": "The id of the layer to display on the map." + }, + "geocoreLayerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer entry at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "listOfLayerEntryConfig": { + "$ref": "#/definitions/TypeListOfLayerEntryConfig", + "description": "The list of layer entry configurations to use from the GeoView layer group." + }, + "schemaTag": { + "enum": [ + "geoCore" + ], + "defaut": "geoCore" + }, + "source": { "$ref": "#/definitions/TypeSourceGeocoreConfig" } + }, + "required": ["schemaTag","entryType","layerId"] + }, + + "TypeSourceGeocoreConfig": { + + "type": "object", + "description": "Layer source providing geocore data.", + "properties": { + "dataAccessPath": { + "$ref": "#/definitions/TypeLocalizedString", + + "description": "The url path to the geoCore endpoint (optional, this value should be embeded in the GeoView API)." + }, + "featureInfo": { + "$ref": "#/definitions/TypeFeatureInfoNotQueryable" + } + } + }, + + "TypeOgcWmsLayerEntryConfig": { + "type": "object", + "properties": { + "entryType": { + "type": "string", + "enum": [ + "raster-image" + ], + "default": "raster-image" + }, + + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer entry at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "layerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "schemaTag": { + "enum": [ + "ogcWms" + ], + "default": "ogcWms" + }, + "layerId": { + "type": "string", + "description": "The id of the layer to display on the map." + }, + "layerPathEnding": { + "type": "string", + "description": "The ending element of the layer configuration path." + }, + "layerFilter": { + "type": "string", + "description": "Filter to apply on feature of this layer." + }, + "source": { + "$ref": "#/definitions/TypeSourceImageWmsInitialConfig" + }, + "style": { + "$ref": "#/definitions/TypeStyleConfig" + } + }, + "required": [ + "schemaTag", + "entryType", + "layerId" + ] + }, + + "TypeSourceImageStaticInitialConfig": { + + "properties": { + "crossOrigin": { + "description": "The crossOrigin attribute for loaded images. Note that you must provide a crossOrigin value if you want to access pixel data with the Canvas renderer.", + "type": "string" + }, + "dataAccessPath": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The path (English/French) to reach the data to display. If not specified, metadatAccessPath will be assigne dto it." + + }, + "extent": { + "description": "The extent of the static image. Called with [minX, minY, maxX, maxY] extent coordinates.", + "items": { + "type": "number" + }, + "maxItems": 4, + "minItems": 4, + "type": "array" + }, + "featureInfo": { + "$ref": "#/definitions/TypeFeatureInfoNotQueryable" + }, + "projection": { + "description": "Spatial Reference EPSG code supported (https://epsg.io/). We support Web Mercator and Lambert Conical Conform Canada.", + "type": "integer" + } + }, + "type": "object" + }, + + "TypeLayerEntryType": { "type": "string", + "enum": ["vector", + "vector-tile", + "vector-heatmap", + "raster-tile", + "raster-image", + "geoCore" + ], + "description": "Layer entry data type." + }, + + "TypeLayerGroupEntryConfig": { + + "type": "object", + "description": "Entry used to define a layer Group.", + + "properties": { + "entryType": { "type":"string", + + "enum": [ + "group" + ], + "default": "group" + }, + "layerId": { + "type": "string", + "description": "The id of the layer group to display on the map." + }, + "layerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer group (English/French)." + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer group entries at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "listOfLayerEntryConfig": { + "$ref": "#/definitions/TypeListOfLayerEntryConfig", + "description": "The list of layer entry configurations to use from the GeoView layer group." + } + }, + + "required": ["entryType", "layerId", "listOfLayerEntryConfig"] + }, + + + + + "TypeLayerEntryConfig": { + "type": "object", + "oneOf": [ + + { "title": "OgcWmsLayer", + + "properties": { + "schemaTag": { "type": "string", + + "default": "ogcWms" + }, + "entryType": { + "type": "string", + + + "default": "raster-image" + }, + + "layerId": { + "type": "string", + "description": "The id of the layer to display on the map." + }, + "layerPathEnding": { + "type": "string", + "description": "The ending element of the layer configuration path." + }, + + "layerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "layerFilter": { + "type": "string", + "description": "Filter to apply on feature of this layer." + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apTypeStyleConfiply to the layer entry at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "source": { + "$ref": "#/definitions/TypeSourceImageWmsInitialConfig" + }, + "style": { + "$ref": "#/definitions/TypeStyleConfig" + } + }, + "required": [ "entryType", + "schemaTag", + "layerId" + ] + }, + { "title": "LayerGroup", + + + "description": "Entry used to define a layer Group.", + + "properties": { + "entryType": {"type":"string", + + "enum": [ + "group" + ], + "default": "group" + }, + "layerId": { + "type": "string", + "description": "The id of the layer group to display on the map." + }, + "layerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer group (English/French)." + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer group entries at creation time. Initial settings are inherited from the parent in the configuration tree." + } + }, + + "required": ["entryType", "layerId"] + } , + {"title":"VectorTileLayer", + + + "description": "Layer sources providing vector data divided into a tile grid.", + "properties": { + "schemaTag": {"type": "string", + "enum": [ + "not used yet" + ], + "default": "not used yet" + }, + "entryType": { + "type": "string", + "enum": [ + "vector-tile" + ], + "default": "vector-tile" + }, + "layerPathEnding": { + "description": "The ending element of the layer configuration path.", + "type": "string" + }, + "layerId": { + "type": "string", + "description": "The id of the layer to display on the map." + }, + "layerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "layerFilter": { + "description": "Filter to apply on feature of this layer.", + "type": "string" + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer entry at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "source": { + "$ref": "#/definitions/TypeVectorTileSourceInitialConfig", + "description": "Information used to configure the source of a vector tile layer." + }, + "style": { + "$ref": "#/definitions/TypeStyleConfig" + } + }, + + "required": [ + "schemaTag", + "entryType", + "layerId" + ] + }, + + { + "title":"GeocoreLayer", + + "description": "Layer where configration is extracted by a configuration snippet stored on a server. The server configuration will handle bilangual informations.", + "properties": { + "schemaTag": { + "type":"string", + "enum": ["geoCore"],"defaut":"geoCore" + }, + "entryType": { + "type": "string", + "enum": ["geocore"],"default": "geocore" + }, + "layerId": { + "type": "string", + "description": "The id of the layer to display on the map." + }, + "geocoreLayerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer entry at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "source": { "$ref": "#/definitions/TypeSourceGeocoreConfig" + }, + "listOfLayerEntryConfig": { + "$ref": "#/definitions/TypeListOfLayerEntryConfig", + "description": "The list of layer entry configurations to use from the GeoView layer group." + } }, + "required": ["schemaTag","entryType","layerId"] + }, + + { "title": "VectorLayer", + + "properties": { + "schemaTag": {"type":"string", + "enum": ["GeoJSON","esriFeature","ogcWfs","ogcFeature","GeoPackage"],"default": "esriFeature" + }, + "entryType": { + "type": "string", + "enum": [ + "vector" + ] ,"default": "vector" + }, + "layerPathEnding": { + "description": "The ending element of the layer configuration path.", + "type": "string" + }, + "layerId": { + "type": "string", + "description": "The id of the layer to display on the map." + }, + "layerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "layerFilter": { + "description": "Filter to apply on feature of this layer.", + "type": "string" + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer entry at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "source": { "$ref": "#/definitions/TypeVectorSourceInitialConfig" }, + "style": { "$ref": "#/definitions/TypeStyleConfig" } + + }, + "required": ["layerId","schemaTag","entryType" ] + } + + , + { + "title": "EsriDynamicLayer", + + "properties": { + "schemaTag": { "type": "string", + "enum": [ + "esriDynamic" + ], + "default": "esriDynamic" + + }, + "entryType": { + "type": "string", + "enum": [ + "raster-image" + ], + "default": "raster-image" + }, + "layerId": { + "description": "The id of the layer to display on the map.", + "type": "string" + }, + "layerPathEnding": { + "description": "The ending element of the layer configuration path.", + "type": "string" + }, + "layerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "layerFilter": { + "description": "Filter to apply on feature of this layer.", + "type": "string" + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer entry at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "source": { + "$ref": "#/definitions/TypeSourceImageEsriInitialConfig" + }, + "style": { + "$ref": "#/definitions/TypeStyleConfig" + } + }, + "required": [ + "entryType", + "layerId", + "schemaTag" + ], + "type": "object" + }, + { + "title": "TileLayer", + + "properties":{ + "schemaTag": {"type": "string", + "enum": [ + "ogcWms", + "xyzTiles", + "vectorTiles" + ],"default": "ogcWms" + } , + "entryType": { + "type": "string", + "enum": [ + "raster-tile" + ] ,"default": "raster-tile" + }, + "layerId": { + "type": "string", + "description": "The id of the layer to display on the map." + }, + "layerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer entry at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "layerPathEnding": { + "description": "The ending element of the layer configuration path.", + "type": "string" + }, + "source": { "$ref": "#/definitions/TypeSourceTileInitialConfig" } + + }, + "required": [ + "schemaTag", + "entryType", + "layerId" + ] + } + + + ] ,"default":"OgcWmsLayer" + }, + + "TypeListOfLayerEntryConfig": { + "type": "array", + "minItems": 1, + "items": { + "$ref": "#/definitions/TypeLayerEntryConfig" + } + }, + + "TypeMapConfig": { + + "type": "object", + "properties": { + "basemapOptions": { "$ref": "#/definitions/TypeBasemapOptions" }, + "interaction": { "$ref": "#/definitions/TypeInteraction" }, + "listOfGeoviewLayerConfig": { "$ref": "#/definitions/TypeListOfGeoviewLayerConfig" }, + "viewSettings": { "$ref": "#/definitions/TypeViewSettings" }, + "extraOptions": { + "type": "object", + "description": "Additional options used for OpenLayers map options" + } + }, + "required": ["basemapOptions", "interaction", "viewSettings"] + }, + + "TypeBasemapOptions": { + + "type": "object", + "properties": { + "basemapId": { "$ref": "#/definitions/TypeBasemapId" }, + + "shaded": { + "type": "boolean", + "default": true, + "title": "Enable or disable shaded basemap (if basemap id is set to shaded then this should be false)." + + }, + "labeled": { + "type": "boolean", + "default": true, + + "title": "Enable or disable basemap labels" + } + }, + "required": ["basemapId", "shaded", "labeled"] + }, + + "TypeBasemapId": { + "description": "Id of the basemap to use." , + "enum": ["transport", "osm", "simple", "nogeom", "shaded"], + "default": "transport" + + }, + + "TypeInteraction": { + "enum": ["static", "dynamic"], + "default": "dynamic", + "description": "If map is dynamic (pan/zoom) or static to act as a thumbnail (no nav bar)." + }, + + "TypeListOfGeoviewLayerConfig": { + + "description": "List of GeoView Layers in the order which they should be added to the map.", + "type": "array", + + "items": { + "$ref": "#/definitions/TypeGeoviewLayerConfig" + } + }, + + "TypeGeoviewLayerConfig": { + + "type": "object", + "properties": { + "geoviewLayerId": { + "description": "The id of the layer for referencing within the viewer (does not relate directly to any external service). The id will have the language extension (id-'lang').", + "type": "string" + }, + "geoviewLayerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "metadataAccessPath": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The GeoView layer access path (English/French)." + }, + "geoviewLayerType": { + "$ref": "#/definitions/TypeGeoviewLayerType", + "description": "Type of GeoView layer." + }, + "serviceDateFormat": { + "description": "Date format used by the service endpoint.", + "type": "string" + }, + "externalDateFormat": { + "description": "Date format used by the getFeatureInfo to output date variable.", + "type": "string" + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the GeoView layer at creation time." + }, + "listOfLayerEntryConfig": { + "$ref": "#/definitions/TypeListOfLayerEntryConfig", + "description": "The layer entries to use from the GeoView layer." + } + }, + "required": [ + "geoviewLayerId", + "geoviewLayerName", + "metadataAccessPath", + "geoviewLayerType", + "listOfLayerEntryConfig" + ] + }, + + "TypeGeoviewLayerType": { + "type": "string", + "enum": ["", + "esriDynamic", + "esriFeature", + "GeoJSON", + "geoCore", + "GeoPackage", + "xyzTiles", + "ogcFeature", + "ogcWfs", + "ogcWms", + "imageStatic", + "vectorTiles" + ], + "default": [ + "" + ], + "description": "Type of GeoView layer." + } + , + "TypeImageStaticLayerEntryConfig": { + + "properties": { + "entryType": { + "enum": [ + "raster-image" + ] + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer entry at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "layerId": { + "description": "The id of the layer to display on the map.", + "type": "string" + }, + "layerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "layerPathEnding": { + "description": "The ending element of the layer configuration path.", + "type": "string" + }, + "schemaTag": { + "enum": [ + "imageStatic" + ] + }, + "source": { + "$ref": "#/definitions/TypeSourceImageStaticInitialConfig" + } + }, + "required": [ + "schemaTag", + "entryType", + "layerId" + ], + "type": "object" + }, + + "TypeViewSettings": { + + "type": "object", + + "properties": { + "center": { + "type": "array", + "items": [ + + { + "type": "number", + "minimum": -160, + "maximum": 160, + "default": -106, + "description": "Initial longitude value for map center." + }, + { + "type": "number", + "minimum": -80, + "maximum": 80, + "default": 60, + "description": "Initial latitude value for map center." + } + + ] + + }, + "enableRotation": { + "type": "boolean", + "default": true, + "title": "Enable rotation. If false, a rotation constraint that always sets the rotation to zero is used." + }, + "extent": { + "type": "array", + "minItems":4, + "maxItems":4, + "items": { + + "type": "number" + + },"default":[-16763712,5165908,-5688293,10649806], + "description": "The extent that constrains the view. Called with [minX, minY, maxX, maxY] extent coordinates." + }, + "minZoom": { + "type": "integer", + "description": "The minimum zoom level used to determine the resolution constraint. If not set, will use default from basemap.", + "minimum": 0, + "maximum": 50 + }, + "maxZoom": { + "type": "integer", + "description": "The maximum zoom level used to determine the resolution constraint. If not set, will use default from basemap.", + "minimum": 0, + "maximum": 50 + }, + "projection": { "$ref": "#/definitions/TypeValidMapProjectionCodes" }, + "rotation": { + "type": "integer", + "minimum": -360, + "maximum": 360, + "default": 0, + "description": "The initial rotation for the view in degree (positive rotation clockwise, 0 means North). Will be converted to radiant by the viewer." + }, + "zoom": { + "type": "number", + "minimum": 0, + "maximum": 28, + "default": 12, + "description": "Initial map zoom level. Zoom level are define by the basemap zoom levels." + } + }, + "required": ["zoom", "center"] + }, + + "TypeAppBarProps": { + "default": [ + "geolocator" + ], + "description": "Controls availalbe on the application bar.", + "items": { + "enum": [ + "geolocator", + "export" + ] + }, + "minItems": 0, + "type": "array", + "uniqueItems": true + + }, + + "TypeNavBarProps": { + "type": "array", + "uniqueItems": true, + "items": { + "enum": [ + "zoom", + "fullscreen", + "home", + "location", + "export" + ] + }, + "default": [ + "zoom", + "fullscreen", + "home" + ], + "description": "Controls availalbe on the navigation bar.", + "minItems": 0 + }, + + "TypeFooterTabsProps": { + "type": "object", + + "properties": { + "tabs": { + "type": "object", + "description": "Available tabs", + "properties": { + "core": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "legend", + "layers", + "details", + "data-table", + "time-slider", + "geochart" + ] + }, + "minItems": 1, + "default": [ + "legend", + "layers", + "details", + "data-table" + ], + "uniqueItems": true, + "description": "Default core tabs of footer panel to use" + }, + "custom": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "defaultTabs": { + "type": "string" + }, + "contentHTML": { + "type": "string" + } + } + }, + "minItems": 0, + "default": [], + "uniqueItems": true, + "description": "Custom tabs of footer panel to use" + } + } + + }, + "collapsed": { + "type": "boolean", + "default": false, + "description": "State of footer panel when map is loaded (expanded or collapsed)" + } + }, + "required": [ + "tabs" + ] + }, + + "TypeAppBarTabsProps": { + "type": "object", + + "properties": { + "tabs": { + "type": "object", + "description": "Available tabs", + "properties": { + "core": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "basemap-panel", + "layers", + "geochart" + ] + }, + "minItems": 1, + "default": [ "basemap-panel"], + "uniqueItems": true, + "description": "Default core tabs of app-bar to use" + }, + "custom": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "defaultTabs": { + "type": "string" + }, + "contentHTML": { + "type": "string" + } + } + }, + "minItems": 0, + "default": [], + "uniqueItems": true, + "description": "Custom tabs of app-bar to use" + } + } + + }, + "collapsed": { + "type": "boolean", + "default": false, + "description": "State of app-bar when map is loaded (expanded or collapsed)" + } + }, + "required": [ + "tabs" + ] + }, + + "TypeOverviewMapProps": { + "type": "object", + + "properties": { + "hideOnZoom": { + "type": "number", + "minimum": 0, + "maximum": 10, + "default": 0, + "description": "Minimum zoom level to show overview map" + } + } + }, + + "TypeMapComponents": { + "type": "array", + "uniqueItems": true, + "items": { + "enum": [ + "overview-map", + "north-arrow", + "geolocator" + ] + }, + "default": [ + "overview-map", + "north-arrow", + "geolocator" + ], + "description": "Core components to initialize on viewer load. The schema for those are inside this file.", + + "minItems": 0 + }, + + "TypeMapCorePackages": { + "type": "array", + "uniqueItems": true, + "items": { + "enum": [ + "basemap-panel", + "layers-panel", + "details-panel", + "geolocator-panel", + "swiper", + "geochart", + "time-slider" + ] + }, + "default": ["basemap-panel" + ], + "description": "Core packages to initialize on viewer load. The schema for those are on their own package. NOTE: config from packages are in the same loaction as core config (<>-<>.json).", + + "minItems": 0 + }, + + "TypeExternalPackages": { + "type": "array", + "items": { + + "type": "object", + "properties": { + "name": { + "type": "string", + + + "description": "External Package name. The name must be ideintical to the window external package object to load." + }, + "configUrl": { + "type": "string", + + "format": "uri", + "description": "The url to the external package configuration setting. The core package will read the configuration and pass it inside the package." + } + }, + "required": ["name"] + }, + "default": [], + "description": "List of external packages to initialize on viewer load.", + "minItems": 0 + }, + + "TypeServiceUrls": { + + "type": "object", + "description": "Service endpoint urls", + "properties": { + "keys": { + "type": "string", + "default": "https://geocore.api.geo.ca", + + "description": "Service end point to access API for layers specification (loading and plugins parameters). By default it is GeoCore but can be another endpoint with similar output." + }, + "geolocator": { + "type": "string", + + "description": "Service end point to access geo location of searched value." + }, + + "proxyUrl": { + "type": "string", + + "description": "An optional proxy to be used for dealing with same-origin issues. URL must either be a relative path on the same server or an absolute path on a server which sets CORS headers." + } + }, + "required": [ + "keys" + ] + }, + + "TypeDisplayLanguage": { + "enum": ["en", "fr"], + "description": "Display languages supported." + }, + + "TypeLocalizedLanguages": { + "enum": ["en", "fr"], + "description": "ISO 639-1 code indicating the languages supported by the configuration file." + }, + + "TypeListOfLocalizedLanguages": { + "type": "array", + "uniqueItems": true, + "items": { "$ref": "#/definitions/TypeLocalizedLanguages" }, + "default": ["en"], + "description": "ISO 639-1 code indicating the languages supported by the configuration file. It will use value(s) provided here to access bilangual configuration nodes. For value(s) provided here, each bilingual configuration node MUST provide a value.", + "minItems": 1 + }, + + "TypeValidVersions": { + "enum": ["1.0"], + "description": "The schema version that can be used to validate the configuration file. The schema should enumerate the list of versions accepted by this version of the viewer." + }, + + "TypeMapFeaturesInstance": { + + "description": "The map features configuration. This type is used by the IsValidTypeMapFeaturesInstance method coded in config-validation.ts file. It does the validation down to the list of layer entry config.", + "type": "object", + "properties": { + "mapId": { "type": "string" }, + "map": { "$ref": "#/definitions/TypeMapConfig" }, + "appBar": { "$ref": "#/definitions/TypeAppBarProps" }, + "navBar": { "$ref": "#/definitions/TypeNavBarProps" }, + "footerTabs": { "$ref": "#/definitions/TypeFooterTabsProps"}, + "appBarTabs": {"$ref": "#/definitions/TypeAppBarTabsProps"}, + "overviewMap": {"$ref": "#/definitions/TypeOverviewMapProps"}, + "components": { "$ref": "#/definitions/TypeMapComponents" }, + "corePackages": { "$ref": "#/definitions/TypeMapCorePackages" }, + "externalPackages": { "$ref": "#/definitions/TypeExternalPackages" }, + "serviceUrls": { "$ref": "#/definitions/TypeServiceUrls" }, + "suportedLanguages": { "$ref": "#/definitions/TypeListOfLocalizedLanguages" }, + "schemaVersionUsed": { "$ref": "#/definitions/TypeValidVersions" } + }, + "required": ["map", "suportedLanguages"] + } + }, + + "properties": { + "mapId": { "type": "string" }, + "map": { "$ref": "#/definitions/TypeMapConfig" }, + "theme": { "Title": "Map Theme Style", + "enum": [ + "dark", + "light", + "geo.ca" + ], + "default": "dark", + "description": "Theme style of the viewer." + }, + "appBar": { "$ref": "#/definitions/TypeAppBarProps" }, + "navBar": { "$ref": "#/definitions/TypeNavBarProps" }, + "footerTabs": { "$ref": "#/definitions/TypeFooterTabsProps"}, + "appBarTabs": {"$ref": "#/definitions/TypeAppBarTabsProps"}, + "overviewMap": {"$ref": "#/definitions/TypeOverviewMapProps"}, + "components": { "$ref": "#/definitions/TypeMapComponents" }, + "corePackages": { "$ref": "#/definitions/TypeMapCorePackages" }, + "externalPackages": {"$ref": "#/definitions/TypeExternalPackages"}, + "serviceUrls": { "$ref": "#/definitions/TypeServiceUrls" }, + "suportedLanguages": { "$ref": "#/definitions/TypeListOfLocalizedLanguages" }, + "versionUsed": { "$ref": "#/definitions/TypeValidVersions" } + } + }, + + + "areasOfInterest": { + "title": "Areas of Interest", + "type": "object", + "properties": { + "enable": { + "type": "boolean", + "title": "Enable", + "default":true + }, + "areas": { + "type": "array", + "items": { + "type": "object", + "properties": { + "title-en-CA": { + "type": "string", + "title": "English Title" + }, + "title-fr-CA": { + "type": "string", + "title": "French Title" + }, + "xmin": { + "type": "number", + "title": "Minimum value of x", + "default": -4844430 + }, + "ymin": { + "type": "number", + "title": "Minimum value of y", + "default": -1052774 + }, + "xmax": { + "type": "number", + "title": "Maximum value of x", + "default": 5666163 + }, + "ymax": { + "type": "number", + "title": "Maximum value of y", + "default": 4170111 + }, + "wkid": { + "type": "number", + "title": "Spatial Reference", + "default": 3978 + }, + "thumbnailUrl": { + "type": "string", + "title": "Thumbnail URL" + } + }, + "required": [ + "title-en-CA", + "title-fr-CA" + ] + } + } + } + }, + + + "swiper": { + "title": "Swiper", + "type": "object", + "properties": { + "enable": { + "type": "boolean", + "title": "Enable", + "default":true + }, + "type": { + "type": "string", + "title": "Type", + "enum": [ + "vertical", + "horizontal" + ], + "default": "vertical" + }, + "keyboardOffset": { + "type": "number", + "title": "Keyboard Movement", + "description": "Pixel value of swiper displacement.", + "default": 10, + "minimum": 1, + "maximum": 100 + }, + "layers": { + "type": "string", + "title": "Layers", + "description": "The id of the layer for referencing within the viewer (does not relate directly to any external service).", + "enum":[] + } + + + + + + }, + "required": [ + "type", + "keyboardOffset", + "layers" + ] + }, + + "thematicSlider": { + "title": "Thematic Slider", + "type": "object", + "properties": { + "enable": { + "type": "boolean", + "title": "Enable", + "default":true + }, + "open": { + "type": "boolean", + "title": "Open by default", + "default": true + }, + "autorun": { + "type": "boolean", + "title": "Start animation on load", + "defaul": false + }, + "loop": { + "type": "boolean", + "title": "Play the animation in loop", + "default": false + }, + "slider": { + "type": "boolean", + "title": "Enable slider control", + "default": true + }, + "stack": { + "type": "boolean", + "title": "Stack layer visibility", + "default": false + }, + "legendStack": { + "type": "boolean", + "title": "Stack legend items (useful with the stack option to see all active elements legend)", + "default": true + }, + "layers": { + "type": "array", + "title": "Layers", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "The id of the layer for referencing within the viewer (does not relate directly to any external service).", + "title": "Layer id", + "enum":[] + + }, + "duration": { + "type": "number", + "title": "Animation duration in milliseconds", + "minimum": 3000, + "default": 3000 + }, + "title": { + "type": "string", + "title": "Title for this layer animation" + }, + "description": { + "type": "string", + "title": "Description for this layer animation" + }, + "legend": { + "type": "array", + "title": "Legend", + "description": "Add items for a custom legend, leave it blank for default legend.", + "default": [], + "items": { + "type": "object", + "properties": { + "label": { + "type": "string", + "title": "Label" + }, + "image": { + "type": "object", + "properties": { + "url": { + "type": "string", + "title": "URL", + "default": "" + }, + "width": { + "type": "number", + "title": "Width", + "minimum": 25, + "maximum": 150, + "default": 150 + }, + "height": { + "type": "number", + "title": "Height", + "minimum": 25, + "maximum": 150, + "default": 150 + } + }, + "required": [ + "url", + "width", + "height" + ] + } + }, + "required": [ + "image" + ] + } + } + }, + "required": [ + "id", + "duration" + ] + } + }, + "required": [ + "layers" + ] + } + } + } + ] + } + + diff --git a/src/components/db - Copy.json b/src/components/db - Copy.json new file mode 100644 index 0000000..77fc095 --- /dev/null +++ b/src/components/db - Copy.json @@ -0,0 +1,4160 @@ +{ + + "plugins": [ + + { "draw": { + + "title": "Draw", + + + + "type": "object", + "properties": { + + "enable": { + "type": "boolean", + "title": "Enable", + "default":true + }, + "open": { + + "type": "boolean", + "title": "Open by default", + "default": true + }, + "tools": { + "type": "array", + "title": "Tools", + "minItems":0, + "uniqueItems": true, + "items":{ + "enum": [ + "picker", + "point", + "polyline", + "polygon", + "edit", + "measure", + "extent", + "write", + "read" + ] + }, + + + "description": "Tools to add to draw toolbar.", + "default": [ + "picker", + "point", + "polyline", + "polygon", + "edit", + "measure", + "extent", + "write", + "read" + ] + } + + }, + "required": [ + "enabled", + "open","tools" + ] + },"chart": { + + "title": "Chart", + "type": "object", + "properties": { + + "enable": { + "type": "boolean", + "title": "Enable", + "description":"chart", + + "default":true + + + }, + "type": { + "title": "Chart Type", + "type": "string", + "enum": [ + "pie", + "bar", + "line" + ], + + "default": "pie" + }, + "title": { + "title": "Title", + "type": "string", + "default": "" + }, + "labelsPie": { + "type": "object", + "title": "Labels", + "properties": { + "type": { + "title": "Type", + "type": "string", + "enum": [ + "field", + "config" + ], + "description": "Retreive the labels from a field or from the configuration.", + "default": "config" + }, + "values": { + "title": "Values", + "type": "string", + "description": "Values separated by semi colon or field name.", + "default": "" + }, + "split": { + "title": "Split Character", + "type": "string", + "description": "Character to use to split list of values.", + "default": ";" + } + }, + "required": [ + "type", + "values", + "split" + ] + }, + "options": { + "title": "Options", + "type": "object", + "properties": { + "colors": { + "title": "Datasets Colors", + "type": "string", + "description": "Hexadecimal color code separated by semicolon. If not provided, default colors will be use.", + "default": "" + }, + "cutOut": { + "title": "Cut Out Percentage", + "type": "number", + "description": "Cut out percentage to use to give doughnut effect.", + "default": 0, + "minimum": 0, + "maximum": 80 + } + }, + "required": [ + "cutOut" + ] + }, + "axis": { + "type": "object", + "title": "Labels", + "properties": { + "xAxis": { + "title": "X Axis", + "type": "object", + "properties": { + "title": { + "title": "Title", + "type": "string", + "default": "" + }, + "type": { + "title": "Type", + "type": "string", + "enum": [ + "field", + "config", + "linear", + "date" + ], + "description": "Retreive the labels from a field or configuration for bar chart or from values (linear or time) for line chart.", + "default": "config" + }, + "values": { + "title": "Values", + "type": "string", + "description": "Values separated by semicolon or field name.", + "default": "" + }, + "split": { + "title": "Split Character", + "type": "string", + "description": "Character to use to split list of values.", + "default": ";" + } + }, + "required": [ + "type", + "values", + "split" + ] + }, + "yAxis": { + "title": "Y Axis", + "type": "object", + "properties": { + "title": { + "title": "Title", + "type": "string", + "default": "" + }, + "type": { + "title": "Type", + "type": "string", + "enum": [ + "field", + "config", + "linear", + "time" + ], + "description": "Retreive the labels from a field or configuration for bar chart or from values (linear or time) for line chart.", + "default": "config" + }, + "values": { + "title": "Values", + "type": "string", + "description": "Values separated by semicolon or field name.", + "default": "" + }, + "split": { + "title": "Split Character", + "type": "string", + "description": "Character to use to split list of values.", + "default": ";" + } + }, + "required": [ + "type", + "values", + "split" + ] + }, + "required": [ + "xAxis", + "yAxis" + ] + } + }, + "layers": { + "type": "array", + "title": "Layers", + "items": { + "type": "object", + "properties": { + "id": { + "title": "Layer ID", + "type": "string", + "description": "", + "enum":["1"] + }, + "nameField": { + "type": "string", + "title": "Name Field", + "description": "Field name to use for the chart selection combo box when multiple charts." + }, + "type": { + "title": "Chart Data Type", + "type": "string", + "enum": [ + "inline", + "link" + ], + "description": "Type of data (inline for items inside the layer or link for items inside a link table).", + "default": "inline" + }, + "linkUrl": { + "type": "string", + "title": "Link URL", + "description": "URL of the link table." + }, + "linkField": { + "type": "string", + "title": "Link Field", + "description": "Field name for the link between the layer and the table." + }, + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "type": { + "title": "Type of data inside the field", + "type": "string", + "enum": [ + "single", + "combine" + ], + "description": "Single if there is only one value inside the field. Combine if we use time axis and time and value are part of the field.", + "default": "combine" + }, + "linkType": { + "title": "Type of link", + "type": "string", + "enum": [ + "single", + "multi" + ], + "description": "How data is structure inside the link table (single for one field for value and one for date OR multiple if there is multiple datasets inside one field and the chart needs to parse).", + "default": "single" + }, + "link": { + "title": "Link Field", + "type": "string", + "description": "Link field to link between layer and table." + }, + "date": { + "title": "Date Field", + "type": "string", + "description": "Field to use for the date" + }, + "measure": { + "title": "Measure Field", + "type": "string" + }, + "values": { + "title": "Label Values", + "type": "string", + "description": "Field name to get labels from for link type multi." + }, + "label": { + "type": "object", + "title": "Dataset Labels", + "properties": { + "type": { + "title": "Type", + "type": "string", + "enum": [ + "field", + "config" + ], + "description": "Retreive the labels from a field or from the configuration.", + "default": "config" + }, + "values": { + "title": "Values", + "type": "string", + "description": "Values separated by semicolon or field name.", + "default": "" + }, + "split": { + "title": "Split Character", + "type": "string", + "description": "Character to use to split list of values.", + "default": ";" + } + }, + "required": [ + "type", + "values", + "split" + ] + }, + "regex": { + "title": "Dataset splitter", + "type": "string", + "description": "

Regex value to split datasets inside the field.

This field is to manage when you have multiple datasets or combine values in the same field. To be able to separate datasets from values, we will use a regex expression. We encourage you to use your data and test your regex expression on a online site like https://regex101.com.

Below we list some samples of datasets and regex:

  • Sample 1
    • Data: [255;255;255];[120;232;23];[32;44;134]
    • Regex: \\\\[|\\\\];\\\\[|\\\\]
    • Ouput: 3 datasets (e.g. 255;255;255). Values inside dataset will be split by the field 'Values Splitter'.
  • Sample 2
    • Data: (2011-03-28,0.511),(2011-04-04,0.421)
    • Regex: \\\\(|\\\\),\\\\(|\\\\)
    • Ouput: 1 datasets, 2 pairs of values (e.g. 2011-03-28,0.511). Values inside are combined (y and x axis) and will be split by the field 'Values Splitter'.

Note: we need to double the '\\' character

", + "default": "\\(|\\),\\(|\\)" + }, + "split": { + "title": "Values splitter", + "type": "string", + "default": ",", + "description": "Character to use to split values inside a field. E.g. a field contains '10;20;30' means there is 3 values split by ';' or [1,2,3];[4,5,6] means there is 2 datasets with 3 values each split by ','." + }, + "prefix": { + "title": "Prefix", + "type": "string", + "default": "", + "description": "Prefix to add to data hover." + }, + "suffix": { + "title": "Suffix", + "type": "string", + "default": "", + "description": "Suffix to add to data hover." + } + }, + "required": [ + "type", + "measure", + "split" + ] + } + }, + "details": { + "type": "object", + "title": "Details", + "properties": { + "enabled": { + "type": "boolean", + "title": "Enable" + }, + "value": { + "type": "string", + "title": "Value", + "description": "String with the custom details in markdown notation." + } + } + } + }, + "required": [ + "id", + "nameField", + "type", + "data" + ] + } + }, + "required": [ + "type", + "layers" + ] + } + },"rangeSlider": { + "$id": "https://cgpv/schema", + "$schema": "http://json-schema.org/draft-07/schema#", + + "title": "Range Slider", + "type": "object", + "properties": { + "enable": { + "type": "boolean", + "title": "Enable", + "default": true + }, + "open": { + "type": "boolean", + "title": "Open by default", + "default": false + }, + "maximize": { + "type": "boolean", + "title": "Slider maximized by default", + "default": false + }, + "maximizeDesc": { + "type": "boolean", + "title": "Description section open by default", + "default": false + }, + "autorun": { + "type": "boolean", + "title": "Start animation on load", + "defaul": false + }, + "loop": { + "type": "boolean", + "title": "Play the animation in loop", + "default": false + }, + "reverse": { + "type": "boolean", + "title": "Animation in reverse mode", + "default": false + }, + "lock": { + "type": "boolean", + "title": "Lock handle", + "default": false + }, + "controls": { + "type": "array", + "minItems":0, + "uniqueItems": true, + + "items": { + "enum": [ + "lock", + "loop", + "delay", + "export", + "refresh", + "reverse" + ] + }, + "default": [ + "lock", + "delay" + ], + "title": "Slider bar controls" + + }, + "params": { + "type": "object", + "title": "Parameters", + "properties": { + "type": { + "title": "Slider Type", + "type": "string", + "enum": [ + "number", + "date", + "wmst" + ], + "description": "If the Date or WMS-T is selected, range and limit must be in milliseconds. Note: Date is for esri layer and WMS-T is for ogc WMS-T layer.", + "default": "number" + }, + "rangeType": { + "title": "Range Type", + "type": "string", + "enum": [ + "single", + "dual" + ], + "description": "Type of range (single for one handle or dual for 2 handles).", + "default": "dual" + }, + "stepType": { + "title": "Step Type", + "type": "string", + "enum": [ + "dynamic", + "static" + ], + "description": "Type of step (dynamic for open values or static from a list of values).", + "default": "dynamic" + }, + "precision": { + "title": "Precision", + "type": "string", + "enum": [ + "0", + "1", + "2", + "date", + "hour" + ], + "description": "Precision of numeric data (0, 1, 2) or date (Date, Hour).", + "default": "0" + }, + "delay": { + "title": "Animation Delay", + "type": "string", + "enum": [ + "3000", + "4000", + "5000", + "6000", + "7000" + ], + "description": "Delay between animations.", + "default": "3000" + }, + "rangeInterval": { + "type": "number", + "title": "Interval (in milliseconds for date data type)", + "default": -1, + "description": "When the limit type is dynamic, this option allows you to define a preset interval between the two handles. The value must be in milliseconds date data type. For other numerical value formats, enter the desired value directly. To convert a time interval into milliseconds, use the built-in converter. Will start at the beginning of the scroll bar, unless the \"Start at end\" option is enabled." + }, + "startRangeEnd": { + "type": "boolean", + "title": "Start interval at the end", + "default": false + }, + "range": { + "type": "object", + "title": "", + "properties": { + "min": { + "type": "number", + "title": "Minimum value of the range (in milliseconds for date data type)", + "description": "The minimum value of the range that corresponds to the position of the left handle. If not defined, the minimum limit will be used. The value must be in milliseconds date data type. For other numerical value formats, enter the desired value directly. To convert a date to milliseconds, use the site's built-in converter.", + "default": 0 + }, + "max": { + "type": "number", + "title": "Maximum value of the range (in milliseconds for date data type)", + "description": "The maximum value of the range that corresponds to the position of the right handle. If not defined, the maximum limit will be used. The value must be in milliseconds date data type. For other numerical value formats, enter the desired value directly. To convert a date to milliseconds, use the site's built-in converter.", + "default": 1 + } + } + }, + "limit": { + "type": "object", + "title": "Limits of the data set values", + "properties": { + "min": { + "type": "number", + "title": "Minimum Limit", + "description": "The minimum value contained in the dataset. If not defined, the value will be found using the values present in the used field of the layer. To convert a date to milliseconds, use the site's built-in converter.", + "default": 0 + }, + "max": { + "type": "number", + "title": "Maximum Limit", + "description": "The maximum value contained in the dataset. If not defined, the value will be found using the values present in the used field of the layer. To convert a date to milliseconds, use the site's built-in converter.", + "default": 1 + }, + "staticItems": { + "type": "array", + "title": "Static Limit Values", + "items": { + "title": "Value", + "type": "number" + }, + "default": [], + "description": "The values for static limit. Note: the minimum and maximum limits are used to define the lower and upper static limits. Enter only the intermediate values here." + } + } + }, + "units": { + "type": "string", + "title": "Units", + "description": "Shown at the right of the time axis. Keep it short to improve readability.", + "default": "" + }, + "description": { + "type": "string", + "title": "Description", + "description": "Description to add in the section below the slider." + } + }, + "required": [ + "type" + ] + }, + "layers": { + "type": "array", + "title": "Layers", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "The id of the layer for referencing within the viewer (does not relate directly to any external service).", + "title": "Layer id", + "enum":[] + + }, + "field": { + "type": "string", + "description": "The field name to use.", + "title": "Field Name", + "default": "" + }, + "isTimeAware": { + "type": "boolean", + "title": "Is Time Aware", + "default": true, + "description": "If time aware is true, the slider will use the TimeInfo (ESRI) or time dimension (WMS) to extract limits and range." + } + }, + "required": [ + "id, field", + "isTimeAware" + ] + } + } + }, + + "required": [ + "params", + "layers" + ] + }, + + + + "map": { + "$id": "https://cgpv/schema", + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "GeoView Core Config Schema", + + "version": 1.0, + "comments": "Configuration for GeoView core packages, each packages manages it own schema. It correspond to the TypeMapFeaturesInstance type.", + "comments": " in TypeLOcalized string I took out minProperties: 1,because it casused error messages eve if field was not requiered", + + "definitions": { + "TypeLocalizedString": { + + "type": "object", + "properties": { + "en": { + "type": "string", + "description": "The English version of the string." + }, + "fr": { + "type": "string", + "description": "The French version of the string. " + } + } + }, + + "TypeDetailsLayerConfig": { + + "type": "object", + "properties": { + + "parser": { + "type": "string", + "description": "A path to a javascript file with a function for parsing the layers identify output. Only needed if a custom template is being used." + }, + "template": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "A path to an html template (English/French) that will override default identify output." + } + }, + "required": ["template"] + }, + + "TypeFeatureInfoLayerConfig": { + + "type": "object", + "properties": { + "queryable": { + "type": "boolean", + "default": true, + "title": "Allow querying. Default = true." + }, + "customParser": { "$ref": "#/definitions/TypeDetailsLayerConfig" }, + "nameField": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display field (English/French) of the layer. If it is not present the viewer will make an attempt to find the first valid field." + }, + "outfields": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "A comma separated list of attribute names (English/French) that should be requested on query (all by default)." + }, + "fieldTypes": { + "type": "string", + "description": "A comma separated list of types. Type at index i is associated to the variable at index i." + }, + "aliasFields": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "A comma separated list of attribute names (English/French) that should be use for alias. If empty, no alias will be set if not found." + } + }, + "required": [ + "queryable" + ] + }, + "TypeFeatureInfoNotQueryable": { + + "properties": { + "queryable": { + "const": false, + "description": "Do not allow querying.", + "type": "boolean" + } + }, + "required": [ + "queryable" + ], + "type": "object" + }, + + "TypeStrokeSymbolConfig": { + + "type": "object", + "description": "Stroke style for vector features.", + "minProperties": 1, + "properties": { + "color": { + "type": "string" + }, + "lineStyle": { + "enum": [ + "dash", + "dash-dot", + "dash-dot-dot", + "dot", + "longDash", + "longDash-dot", + "null", + "shortDash", + "shortDash-dot", + "shortDash-dot-dot", + "solid" + ] + }, + "width": { + "type": "number" + } + }, + "required": [ + "color", + "width", + "lineStyle" + ] + }, + + "TypeLineStringVectorConfig": { + + "type": "object", + "properties": { + "type": { "type":"string", + "default": "lineString", + "enum": [ + "lineString" + ] + }, + "stroke": { "$ref": "#/definitions/TypeStrokeSymbolConfig" } + }, + "required": [ + "type", + "stroke" + ] + }, + + "TypePolygonVectorConfig": { + + "type": "object", + "properties": { + "type": {"type":"string", "default": "filledPolygon", + "enum": ["filledPolygon"] + }, + "color": { "type": "string" }, + "stroke": { "$ref": "#/definitions/TypeStrokeSymbolConfig" }, + "paternSize": { + "type": "number", + "description": "Distance between patern lines. Default = 8" + }, + "paternWidth": { + "type": "number", + "description": "Patern line width.default = 1." + }, + "fillStyle": { + "enum": [ + "solid", + "backwardDiagonal", + "cross", + "diagonalCross", + "forwardDiagonal", + "horizontal", + "null", + "vertical" + ], + "description": "Kind of filling for vector features. Default = solid. " + } + }, + "required": [ + "type", + "stroke" + ] + }, + + "TypeSimpleSymbolVectorConfig": { + + "type": "object", + "properties": { + "type": {"type":"string", + "default": "simpleSymbol", + "enum": ["simpleSymbol"] + }, + "rotation": { + "type": "number", + "description": "Symbol rotation in radians." + }, + "color": { "type": "string" }, + "stroke": { "$ref": "#/definitions/TypeStrokeSymbolConfig" }, + "size": { "type": "number" }, + "offset": { + "type": "array", + "items": { + "type": "number" + }, + "minItems": 2, + "maxItems": 2 + }, + "symbol": { + "enum": [ + "circle", + "+", + "diamond", + "square", + "triangle", + "X", + "star" + ] + } + }, + "required": + ["type", + "symbol" + ] + }, + + "TypeIconSymbolVectorConfig": { + + "type": "object", + "properties": { + "type": {"type":"string", + "default": "iconSymbol", + "enum": ["iconSymbol"] + }, + "mimeType": { "type": "string" }, + "src": { "type": "string" }, + "width": { + "type": "integer", + "description": "Icon width in pixel." + }, + "height": { + "type": "integer", + "description": "Icon height in pixel." + }, + "rotation": { + "type": "number", + "description": "Icon rotation in radians." + }, + "opacity": { + "type": "number", + "minimum": 0, + "maximum": 1, + "default": 1 + }, + "offset": { + "type": "array", + "items": { + "type": "number" + }, + "minItems": 2, + "maxItems": 2 + }, + "crossOrigin": { + "type": "string", + "description": "The crossOrigin attribute for loaded images. Note that you must provide a crossOrigin value if you want to access pixel data with the Canvas renderer." + } + }, + "required": ["type", "mimeType", "src"] + }, + + "TypeSimpleStyleConfig": { + + "type": "object", + "properties": { + "styleId": { + "type": "string" + }, + "styleType": { + "enum": ["simple"], + "default": "simple" + }, + "label": { + "type": "string" + }, + "settings": { "$ref": "#/definitions/TypeKindOfVectorSettings" } + }, + "required": [ + "styleType", + "label", + "settings" + ] + }, + + + "TypeUniqueValueStyleConfig": { + + "type": "object", + "properties": { + "styleId": { + "type": "string" + }, + "styleType": {"type":"string", + "default": "uniqueValue", + "enum": ["uniqueValue"] + }, + "defaultLabel": { + "type": "string", + "description": "Label used if field/value association is not found." + }, + "defaultSettings": { + "$ref": "#/definitions/TypeKindOfVectorSettings", + "description": "Settings used if field/value association is not found." + }, + "defaultVisible": { + "description": "Flag used to show/hide features associated to the default label (default: yes).", + "enum": [ + "yes", + "no", + "always" + ] + }, + "fields": { + "type": "array", + "items": { + "type": "string" + }, + "minItems": 1 + }, + "uniqueValueStyleInfo": { + "type": "array", + "items": { + + "type": "object", + "properties": { + "label": { + "type": "string" + }, + "settings": { + "$ref": "#/definitions/TypeKindOfVectorSettings" + }, + "values": { + "items": { + "oneOf": [ + { "title": "String Value", + "type": "string" + }, + { "title": "Numeric Value", + "type": "number" + } + ] + }, + "minItems": 1, + "type": "array" + }, + "visible": { + "description": "Flag used to show/hide features associated to the label (default: yes).", + "enum": [ + "yes", + "no", + "always" + ] + } + } + + }, + "minItems": 1, + "required": [ + "label", + "values", + "options" + ] + } + }, + "required": [ + "styleType", + "fields", + "uniqueValueStyleInfo" + ] + }, + + "TypeUniqueValueStyleInfo": { + "type": "array", + "items": { + + "type": "object", + "properties": { + "label": { + "type": "string" + }, + "settings": { + "$ref": "#/definitions/TypeKindOfVectorSettings" + }, + "values": { + "items": { + "oneOf": [ + { "title": "String Value", + "type": "string" + }, + { "title": "Numeric Value", + "type": "number" + } + ] + }, + "minItems": 1, + "type": "array" + }, + "visible": { + "description": "Flag used to show/hide features associated to the label (default: yes).", + "enum": [ + "yes", + "no", + "always" + ] + } + } + + }, + "minItems": 1, + "required": [ + "label", + "values", + "options" + ] + + }, + + "TypeValidMapProjectionCodes": { + "default": 3978, + "description": "Spatial Reference EPSG code supported (https://epsg.io/). We support Web Mercator and Lambert Conical Conform Canada.", + "enum": [ + 3978, + 3857 + ] + }, + + "TypeClassBreakStyleConfig": { + + "type": "object", + "properties": { + "styleId": { + "type": "string" + }, + "styleType": { + "default": "classBreaks", + "enum": ["classBreaks"] + }, + "field": { + "type": "string" + }, + "defaultLabel": { + "type": "string", + "description": "Label used if field/value association is not found." + }, + "defaultSettings": { + "$ref": "#/definitions/TypeKindOfVectorSettings", + "description": "Settings used if field/value association is not found." + }, + "defaultVisible": { + "description": "Flag used to show/hide features associated to the default label (default: yes).", + "default": "yes", + "enum": [ + "yes", + "no", + "always" + ] + }, + + "classBreakStyleInfo": { "$ref": "#/definitions/TypeClassBreakStyleInfo" } + }, + "required": ["styleType", "field", "classBreakStyleInfo"] + }, + + + "TypeClassBreakStyleInfo": { + + "type": "array", + "items": { + + "type": "object", + "properties": { + + "label": { + "type": "string" + }, + "minValue": { + "oneOf": [ + { "title": "minValue String value", + "type": "string" + }, + { "title": "minValue Numeric value", + "type": "number" + } + ] + }, + "maxValue": { + "oneOf": [ + { "title": "maxValue String value", + "type": "string" + }, + { "title": "maxValue Numeric value", + "type": "number" + } + ] + }, + "visible": { + "description": "Flag used to show/hide features associated to the label (default: yes).", + "enum": [ + "yes", + "no", + "always" + ], + "default" : ["no"] + }, + + "settings": { "$ref": "#/definitions/TypeKindOfVectorSettings" } + } + }, + "minItems": 1, + "required": ["label", "minValue", "maxValue", "settings"] + + }, + + "TypeKindOfVectorSettings": { + "oneOf": [ + { "title":"LineString", + "type": "object", + "properties": { + "type": { "type":"string", + "default": "lineString", + "enum": [ + "lineString" + ] + }, + "stroke": { "type": "object", + "description": "Stroke style for vector features.", + "minProperties": 1, + "properties": { + "color": { + "type": "string" + }, + "lineStyle": { + "enum": [ + "dash", + "dash-dot", + "dash-dot-dot", + "dot", + "longDash", + "longDash-dot", + "null", + "shortDash", + "shortDash-dot", + "shortDash-dot-dot", + "solid" + ] + }, + "width": { + "type": "number" + } + }, + "required": [ + "color", + "width", + "lineStyle" + ] } + }, + "required": [ + "type", + "stroke" + ] }, + { "title":"Polygon", + "type": "object", + "properties": { + "type": {"type":"string", "default": "filledPolygon", + "enum": ["filledPolygon"] + }, + "color": { "type": "string" }, + "stroke": { + "type": "object", + "description": "Stroke style for vector features.", + "minProperties": 1, + "properties": { + "color": { + "type": "string" + }, + "lineStyle": { + "enum": [ + "dash", + "dash-dot", + "dash-dot-dot", + "dot", + "longDash", + "longDash-dot", + "null", + "shortDash", + "shortDash-dot", + "shortDash-dot-dot", + "solid" + ] + }, + "width": { + "type": "number" + } + }, + "required": [ + "color", + "width", + "lineStyle" + ] + }, + "paternSize": { + "type": "number", + "description": "Distance between patern lines. Default = 8" + }, + "paternWidth": { + "type": "number", + "description": "Patern line width.default = 1." + }, + "fillStyle": { + "enum": [ + "solid", + "backwardDiagonal", + "cross", + "diagonalCross", + "forwardDiagonal", + "horizontal", + "null", + "vertical" + ], + "description": "Kind of filling for vector features. Default = solid. " + } + }, + "required": [ + "type", + "stroke" + ] }, + { "title":"SimpleSymbol", + "type": "object", + "properties": { + "type": {"type":"string", + "default": "simpleSymbol", + "enum": ["simpleSymbol"] + }, + "rotation": { + "type": "number", + "description": "Symbol rotation in radians." + }, + "color": { "type": "string" }, + "stroke": { + "type": "object", + "description": "Stroke style for vector features.", + "minProperties": 1, + "properties": { + "color": { + "type": "string" + }, + "lineStyle": { + "enum": [ + "dash", + "dash-dot", + "dash-dot-dot", + "dot", + "longDash", + "longDash-dot", + "null", + "shortDash", + "shortDash-dot", + "shortDash-dot-dot", + "solid" + ] + }, + "width": { + "type": "number" + } + }, + "required": [ + "color", + "width", + "lineStyle" + ] + }, + "size": { "type": "number" }, + "offset": { + "type": "array", + "items": { + "type": "number" + }, + "minItems": 2, + "maxItems": 2 + }, + "symbol": { + "enum": [ + "circle", + "+", + "diamond", + "square", + "triangle", + "X", + "star" + ] + } + }, + "required": + ["type", + "symbol" + ] + }, + { "title":"IconSymbol", + "type": "object", + "properties": { + "type": {"type":"string", + "default": "iconSymbol", + "enum": ["iconSymbol"] + }, + "mimeType": { "type": "string" }, + "src": { "type": "string" }, + "width": { + "type": "integer", + "description": "Icon width in pixel." + }, + "height": { + "type": "integer", + "description": "Icon height in pixel." + }, + "rotation": { + "type": "number", + "description": "Icon rotation in radians." + }, + + "offset": { + "type": "array", + "items": { + "type": "number" + }, + "minItems": 2, + "maxItems": 2 + }, + "crossOrigin": { + "type": "string", + "description": "The crossOrigin attribute for loaded images. Note that you must provide a crossOrigin value if you want to access pixel data with the Canvas renderer." + } + }, + "required": ["type", "mimeType", "src"] } + ] + }, + + "TypeStyleConfig": { + + "minProperties": 1, + "type": "object", + "Title": "Line Style Config", + "description":"Enter Line, Point and Polygon Style Config ", + "properties": { + "LineString": { "description":"Point Style Config ", + + "title":"Line Style", + + "$ref": "#/definitions/TypeStyleSettings" + }, + "Point": { "description": "Polygon Style Config", + "title":"Point Style", + + "$ref": "#/definitions/TypeStyleSettings" + }, + "Polygon": { + "title":"Polygon Style", + + "$ref": "#/definitions/TypeStyleSettings" + } + } + }, + + "TypeStyleSettings": { + "oneOf": [ {"title":"SimpleStyle", + "type": "object", + "properties": { + "styleId": { + "type": "string" + }, + "styleType": { + "enum": ["simple"], + "default": "simple" + }, + "label": { + "type": "string" + }, + "settings": { + "oneOf": [ + { "title":"LineString", + "type": "object", + "properties": { + "type": { "type":"string", + "default": "lineString", + "enum": [ + "lineString" + ] + }, + "stroke": { "description": "Stroke style for vector features.", + "minProperties": 1, + "properties": { + "color": { + "type": "string" + }, + "lineStyle": { + "enum": [ + "dash", + "dash-dot", + "dash-dot-dot", + "dot", + "longDash", + "longDash-dot", + "null", + "shortDash", + "shortDash-dot", + "shortDash-dot-dot", + "solid" + ] + }, + "width": { + "type": "number" + } + }, + "required": [ + "color", + "width", + "lineStyle" + ] } + }, + "required": [ + "type", + "stroke" + ] }, + { "title":"Polygon", + "type": "object", + "properties": { + "type": {"type":"string", "default": "filledPolygon", + "enum": ["filledPolygon"] + }, + "color": { "type": "string" }, + "stroke": { + "description": "Stroke style for vector features.", + "minProperties": 1, + "properties": { + "color": { + "type": "string" + }, + "lineStyle": { + "enum": [ + "dash", + "dash-dot", + "dash-dot-dot", + "dot", + "longDash", + "longDash-dot", + "null", + "shortDash", + "shortDash-dot", + "shortDash-dot-dot", + "solid" + ] + }, + "width": { + "type": "number" + } + }, + "required": [ + "color", + "width", + "lineStyle" + ] + }, + "paternSize": { + "type": "number", + "description": "Distance between patern lines. Default = 8" + }, + "paternWidth": { + "type": "number", + "description": "Patern line width.default = 1." + }, + "fillStyle": { + "enum": [ + "solid", + "backwardDiagonal", + "cross", + "diagonalCross", + "forwardDiagonal", + "horizontal", + "null", + "vertical" + ], + "description": "Kind of filling for vector features. Default = solid. " + } + }, + "required": [ + "type", + "stroke" + ] }, + { "title":"SimpleSymbol", + "type": "object", + "properties": { + "type": {"type":"string", + "default": "simpleSymbol", + "enum": ["simpleSymbol"] + }, + "rotation": { + "type": "number", + "description": "Symbol rotation in radians." + }, + "color": { "type": "string" }, + "stroke": { + "description": "Stroke style for vector features.", + "minProperties": 1, + "properties": { + "color": { + "type": "string" + }, + "lineStyle": { + "enum": [ + "dash", + "dash-dot", + "dash-dot-dot", + "dot", + "longDash", + "longDash-dot", + "null", + "shortDash", + "shortDash-dot", + "shortDash-dot-dot", + "solid" + ] + }, + "width": { + "type": "number" + } + }, + "required": [ + "color", + "width", + "lineStyle" + ] + }, + "size": { "type": "number" }, + "offset": { + "type": "array", + "items": { + "type": "number" + }, + "minItems": 2, + "maxItems": 2 + }, + "symbol": { + "enum": [ + "circle", + "+", + "diamond", + "square", + "triangle", + "X", + "star" + ] + } + }, + "required": + ["type", + "symbol" + ] + }, + { "title":"IconSymbol", + "type": "object", + "properties": { + "type": {"type":"string", + "default": "iconSymbol", + "enum": ["iconSymbol"] + }, + "mimeType": { "type": "string" }, + "src": { "type": "string" }, + "width": { + "type": "integer", + "description": "Icon width in pixel." + }, + "height": { + "type": "integer", + "description": "Icon height in pixel." + }, + "rotation": { + "type": "number", + "description": "Icon rotation in radians." + }, + + "offset": { + "type": "array", + "items": { + "type": "number" + }, + "minItems": 2, + "maxItems": 2 + }, + "crossOrigin": { + "type": "string", + "description": "The crossOrigin attribute for loaded images. Note that you must provide a crossOrigin value if you want to access pixel data with the Canvas renderer." + } + }, + "required": ["type", "mimeType", "src"] } + ] + } + }, + "required": [ + "styleType", + "label", + "settings" + ] + } , + {"title":"UniqueValueStyle", + "type": "object", + "properties": { + "styleId": { + "type": "string" + }, + "styleType": {"type":"string", + "default": "uniqueValue", + "enum": ["uniqueValue"] + }, + "defaultLabel": { + "type": "string", + "description": "Label used if field/value association is not found." + }, + "defaultSettings": { + "oneOf": [ + { "title":"LineString", + "type": "object", + "properties": { + "type": { "type":"string", + "default": "lineString", + "enum": [ + "lineString" + ] + }, + "stroke": { + "description": "Stroke style for vector features.", + "minProperties": 1, + "properties": { + "color": { + "type": "string" + }, + "lineStyle": { + "enum": [ + "dash", + "dash-dot", + "dash-dot-dot", + "dot", + "longDash", + "longDash-dot", + "null", + "shortDash", + "shortDash-dot", + "shortDash-dot-dot", + "solid" + ] + }, + "width": { + "type": "number" + } + }, + "required": [ + "color", + "width", + "lineStyle" + ] + } + }, + "required": [ + "type", + "stroke" + ] }, + { "title":"Polygon", + "type": "object", + "properties": { + "type": {"type":"string", "default": "filledPolygon", + "enum": ["filledPolygon"] + }, + "color": { "type": "string" }, + "stroke": { + "description": "Stroke style for vector features.", + "minProperties": 1, + "properties": { + "color": { + "type": "string" + }, + "lineStyle": { + "enum": [ + "dash", + "dash-dot", + "dash-dot-dot", + "dot", + "longDash", + "longDash-dot", + "null", + "shortDash", + "shortDash-dot", + "shortDash-dot-dot", + "solid" + ] + }, + "width": { + "type": "number" + } + }, + "required": [ + "color", + "width", + "lineStyle" + ] + }, + "paternSize": { + "type": "number", + "description": "Distance between patern lines. Default = 8" + }, + "paternWidth": { + "type": "number", + "description": "Patern line width.default = 1." + }, + "fillStyle": { + "enum": [ + "solid", + "backwardDiagonal", + "cross", + "diagonalCross", + "forwardDiagonal", + "horizontal", + "null", + "vertical" + ], + "description": "Kind of filling for vector features. Default = solid. " + } + }, + "required": [ + "type", + "stroke" + ] }, + { "title":"SimpleSymbol", + "type": "object", + "properties": { + "type": {"type":"string", + "default": "simpleSymbol", + "enum": ["simpleSymbol"] + }, + "rotation": { + "type": "number", + "description": "Symbol rotation in radians." + }, + "color": { "type": "string" }, + "stroke": { + "description": "Stroke style for vector features.", + "minProperties": 1, + "properties": { + "color": { + "type": "string" + }, + "lineStyle": { + "enum": [ + "dash", + "dash-dot", + "dash-dot-dot", + "dot", + "longDash", + "longDash-dot", + "null", + "shortDash", + "shortDash-dot", + "shortDash-dot-dot", + "solid" + ] + }, + "width": { + "type": "number" + } + }, + "required": [ + "color", + "width", + "lineStyle" + ] + }, + "size": { "type": "number" }, + "offset": { + "type": "array", + "items": { + "type": "number" + }, + "minItems": 2, + "maxItems": 2 + }, + "symbol": { + "enum": [ + "circle", + "+", + "diamond", + "square", + "triangle", + "X", + "star" + ] + } + }, + "required": + ["type", + "symbol" + ] + }, + { "title":"IconSymbol", + "type": "object", + "properties": { + "type": {"type":"string", + "default": "iconSymbol", + "enum": ["iconSymbol"] + }, + "mimeType": { "type": "string" }, + "src": { "type": "string" }, + "width": { + "type": "integer", + "description": "Icon width in pixel." + }, + "height": { + "type": "integer", + "description": "Icon height in pixel." + }, + "rotation": { + "type": "number", + "description": "Icon rotation in radians." + }, + + "offset": { + "type": "array", + "items": { + "type": "number" + }, + "minItems": 2, + "maxItems": 2 + }, + "crossOrigin": { + "type": "string", + "description": "The crossOrigin attribute for loaded images. Note that you must provide a crossOrigin value if you want to access pixel data with the Canvas renderer." + } + }, + "required": ["type", "mimeType", "src"] } + ] + + }, + "defaultVisible": { + "description": "Flag used to show/hide features associated to the default label (default: yes).", + "enum": [ + "yes", + "no", + "always" + ] + }, + "fields": { + "type": "array", + "items": { + "type": "string" + }, + "minItems": 1 + }, + "uniqueValueStyleInfo": { + "type": "array", + "items": { + + "type": "object", + "properties": { + "label": { + "type": "string" + }, + "settings": { + + }, + "values": { + "items": { + "oneOf": [ + { "title": "String Value", + "type": "string" + }, + { "title": "Numeric Value", + "type": "number" + } + ] + }, + "minItems": 1, + "type": "array" + }, + "visible": { + "description": "Flag used to show/hide features associated to the label (default: yes).", + "enum": [ + "yes", + "no", + "always" + ] + } + } + + }, + "minItems": 1, + "required": [ + "label", + "values", + "options" + ] + } + }, + "required": [ + "styleType", + "fields", + "uniqueValueStyleInfo" + ] + }, + {"title":"ClassBreakStyle", + "type": "object", + "properties": { + "styleId": { + "type": "string" + }, + "styleType": { + "default": "classBreaks", + "enum": ["classBreaks"] + }, + "field": { + "type": "string" + }, + "defaultLabel": { + "type": "string", + "description": "Label used if field/value association is not found." + }, + "defaultSettings": { + "oneOf": [ + { "title":"LineString", + "type": "object", + "properties": { + "type": { "type":"string", + "default": "lineString", + "enum": [ + "lineString" + ] + }, + "stroke": { + "description": "Stroke style for vector features.", + "minProperties": 1, + "properties": { + "color": { + "type": "string" + }, + "lineStyle": { + "enum": [ + "dash", + "dash-dot", + "dash-dot-dot", + "dot", + "longDash", + "longDash-dot", + "null", + "shortDash", + "shortDash-dot", + "shortDash-dot-dot", + "solid" + ] + }, + "width": { + "type": "number" + } + }, + "required": [ + "color", + "width", + "lineStyle" + ] + } + }, + "required": [ + "type", + "stroke" + ] }, + { "title":"Polygon", + "type": "object", + "properties": { + "type": {"type":"string", "default": "filledPolygon", + "enum": ["filledPolygon"] + }, + "color": { "type": "string" }, + "stroke": { + "description": "Stroke style for vector features.", + "minProperties": 1, + "properties": { + "color": { + "type": "string" + }, + "lineStyle": { + "enum": [ + "dash", + "dash-dot", + "dash-dot-dot", + "dot", + "longDash", + "longDash-dot", + "null", + "shortDash", + "shortDash-dot", + "shortDash-dot-dot", + "solid" + ] + }, + "width": { + "type": "number" + } + }, + "required": [ + "color", + "width", + "lineStyle" + ] + }, + "paternSize": { + "type": "number", + "description": "Distance between patern lines. Default = 8" + }, + "paternWidth": { + "type": "number", + "description": "Patern line width.default = 1." + }, + "fillStyle": { + "enum": [ + "solid", + "backwardDiagonal", + "cross", + "diagonalCross", + "forwardDiagonal", + "horizontal", + "null", + "vertical" + ], + "description": "Kind of filling for vector features. Default = solid. " + } + }, + "required": [ + "type", + "stroke" + ] }, + { "title":"SimpleSymbol", + "type": "object", + "properties": { + "type": {"type":"string", + "default": "simpleSymbol", + "enum": ["simpleSymbol"] + }, + "rotation": { + "type": "number", + "description": "Symbol rotation in radians." + }, + "color": { "type": "string" }, + "stroke": { + "description": "Stroke style for vector features.", + "minProperties": 1, + "properties": { + "color": { + "type": "string" + }, + "lineStyle": { + "enum": [ + "dash", + "dash-dot", + "dash-dot-dot", + "dot", + "longDash", + "longDash-dot", + "null", + "shortDash", + "shortDash-dot", + "shortDash-dot-dot", + "solid" + ] + }, + "width": { + "type": "number" + } + }, + "required": [ + "color", + "width", + "lineStyle" + ] + }, + "size": { "type": "number" }, + "offset": { + "type": "array", + "items": { + "type": "number" + }, + "minItems": 2, + "maxItems": 2 + }, + "symbol": { + "enum": [ + "circle", + "+", + "diamond", + "square", + "triangle", + "X", + "star" + ] + } + }, + "required": + ["type", + "symbol" + ] + }, + { "title":"IconSymbol", + "type": "object", + "properties": { + "type": {"type":"string", + "default": "iconSymbol", + "enum": ["iconSymbol"] + }, + "mimeType": { "type": "string" }, + "src": { "type": "string" }, + "width": { + "type": "integer", + "description": "Icon width in pixel." + }, + "height": { + "type": "integer", + "description": "Icon height in pixel." + }, + "rotation": { + "type": "number", + "description": "Icon rotation in radians." + }, + + "offset": { + "type": "array", + "items": { + "type": "number" + }, + "minItems": 2, + "maxItems": 2 + }, + "crossOrigin": { + "type": "string", + "description": "The crossOrigin attribute for loaded images. Note that you must provide a crossOrigin value if you want to access pixel data with the Canvas renderer." + } + }, + "required": ["type", "mimeType", "src"] } + ] + }, + "defaultVisible": { + "description": "Flag used to show/hide features associated to the default label (default: yes).", + "default": "yes", + "enum": [ + "yes", + "no", + "always" + ] + }, + + "classBreakStyleInfo": { + "type": "array", + "items": { + + "type": "object", + "properties": { + + "label": { + "type": "string" + }, + "minValue": { + "oneOf": [ + { "title": "minValue String value", + "type": "string" + }, + { "title": "minValue Numeric value", + "type": "number" + } + ] + }, + "maxValue": { + "oneOf": [ + { "title": "maxValue String value", + "type": "string" + }, + { "title": "maxValue Numeric value", + "type": "number" + } + ] + }, + "visible": { + "description": "Flag used to show/hide features associated to the label (default: yes).", + "enum": [ + "yes", + "no", + "always" + ], + "default" : ["no"] + }, + + "settings": { } + } + }, + "minItems": 1, + "required": ["label", "minValue", "maxValue", "settings"] + } + }, + "required": ["styleType", "field", "classBreakStyleInfo"] + } + ] + }, + + "TypeLayerInitialSettings": { + + "type": "object", + "properties": { + "bounds": { + "description": "The geographic bounding box that contains all the layer's features.", + "items": { + "type": "number" + }, + "maxItems": 4, + "minItems": 4, + "type": "array", + "default":[-16763712,5165908,-5688293,10649806] + }, + "opacity": { + "type": "number", + "minimum": 0, + "maximum": 1, + "default": 1, + "description": "Initial opacity setting." + }, + "visible": { + "default": "yes", + "description": "Initial visibility setting.", + "enum": [ + "yes", + "no", + "always" + ] + }, + "extent": { + "type": "array", + "minItems": 4, + "maxItems": 4, + "items": { + "type": "number" + },"default":[-16763712,5165908,-5688293,10649806], + "description": "The extent that constrains the view. Called with [minX, minY, maxX, maxY] extent coordinates." + }, + "minZoom": { + "type": "integer", + "minimum": 0, + "maximum": 50, + "description": "The minimum view zoom level (exclusive) above which this layer will be visible." + }, + "maxZoom": { + "type": "integer", + "minimum": 0, + "maximum": 50, + "description": "The maximum view zoom level (inclusive) above which this layer will be visible." + }, + "className": { + "type": "string", + "description": "A CSS class name to set to the layer element." + } + } + }, + + + "TypeVectorSourceFormats": { + "enum": [ + "GeoJSON", + "EsriJSON", + "KML", + "WFS", + "featureAPI", + "GeoPackage" + ] , + "default": "GeoJSON", + "description": "The feature format used by the XHR feature loader when access path is set." + }, + + "TypeVectorSourceInitialConfig": { + + "type": "object", + "properties": { + "dataAccessPath": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The path (English/French) to reach the data to display. If not specified, metadatAccessPath will be assigne dto it." + }, + "format": { "$ref": "#/definitions/TypeVectorSourceFormats" }, + "dataProjection": { + "type": "string", + "description": "The projection code of the source. Used only for GeoJSON format. Default value is EPSG:4326. " + }, + "featureInfo": { "$ref": "#/definitions/TypeFeatureInfoLayerConfig" }, + + "postSettings": { + "type": "object", + "properties": { + "data": + { + "type": "object" + }, + "header": + { + "type": "object" + } + } + }, + "strategy": { + "default": "all", + "description": "The loading strategy to use. By default an all strategy is used, a one-off strategy which loads all features at once.", + "enum": [ + "all", + "bbox" + ] + } + } + }, + + + + "TypeSourceImageWmsInitialConfig": { + + "type": "object", + "properties": { + "dataAccessPath": { + "$ref": "#/definitions/TypeLocalizedString", + + "description": "The path (English/French) to reach the data to display. If not specified, metadatAccessPath will be assigne dto it." + }, + "crossOrigin": { + "type": "string", + "description": "The crossOrigin attribute for loaded images. Note that you must provide a crossOrigin value if you want to access pixel data with the Canvas renderer." + }, + "projection": { + "type": "integer", + "description": "Spatial Reference EPSG code supported (https://epsg.io/). We support Web Mercator and Lambert Conical Conform Canada." + }, + "featureInfo": { + "$ref": "#/definitions/TypeFeatureInfoLayerConfig" + }, + "serverType": { + "$ref": "#/definitions/TypeOfServer", + "description": "The type of the remote WMS server. The default value is mapserver." + }, + "style": { + "oneOf": [ + { "title":"Single style", + "description": "Single style to apply", + "type": "string" + }, + { "title":"Array of styles", + "description": "Array of style to choose.", + "items": { + "type": "string" + }, + "type": "array" + } + ] + } + } + }, + + "TypeOfServer": { + "enum": [ + "mapserver", + "geoserver", + "qgis"], + "description": "The type of the remote WMS server. The default value is mapserver." + }, + + "TypeSourceImageEsriInitialConfig": { + + "type": "object", + "properties": { + "dataAccessPath": { + "$ref": "#/definitions/TypeLocalizedString", + + "description": "The path (English/French) to reach the data to display. If not specified, metadatAccessPath will be assigne dto it." + }, + "crossOrigin": { + "type": "string", + "description": "The crossOrigin attribute for loaded images. Note that you must provide a crossOrigin value if you want to access pixel data with the Canvas renderer." + }, + "projection": { + "type": "integer", + "description": "Spatial Reference EPSG code supported (https://epsg.io/). We support Web Mercator and Lambert Conical Conform Canada." + }, + "featureInfo": { + "$ref": "#/definitions/TypeFeatureInfoLayerConfig" + }, + "format": { + "$ref": "#/definitions/TypeEsriFormatParameter" + }, + "transparent": { + "type": "boolean", + "default": true, + "description": "If true, the image will be exported with the background color of the map set as its transparent color. Only the .png and .gif formats support transparency." + } + } + }, + + "TypeEsriDynamicLayerEntryConfig": { + + "properties": { + "entryType": { + "type": "string", + "enum": [ + "raster-image" + ], + "default": "raster-image" + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer entry at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "layerFilter": { + "description": "Filter to apply on feature of this layer.", + "type": "string" + }, + "layerId": { + "description": "The id of the layer to display on the map.", + "type": "string" + }, + "layerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "layerPathEnding": { + "description": "The ending element of the layer configuration path.", + "type": "string" + }, + "schemaTag": { + "enum": [ + "esriDynamic" + ], + "default": "esriDynamic" + + }, + "source": { + "$ref": "#/definitions/TypeSourceImageEsriInitialConfig" + }, + "style": { + "$ref": "#/definitions/TypeStyleConfig" + } + }, + "required": [ + "schemaTag", + "entryType", + "layerId" + ], + "type": "object" + }, + + "TypeEsriFormatParameter": { + "enum": ["png", "jpg", "gif", "svg"], + "default": "png", + "description": "The format of the exported image. The default format is png." + }, + + "TypeSourceTileInitialConfig": { + + "properties": { + "dataAccessPath": { + "$ref": "#/definitions/TypeLocalizedString", + + "description": "The path (English/French) to reach the data to display. If not specified, metadatAccessPath will be assigne dto it." + }, + "featureInfo": { + "$ref": "#/definitions/TypeFeatureInfoNotQueryable" + }, + "crossOrigin": { + "type": "string", + "description": "The crossOrigin attribute for loaded images. Note that you must provide a crossOrigin value if you want to access pixel data with the Canvas renderer." + }, + "projection": { + "type": "integer", + "description": "Spatial Reference EPSG code supported (https://epsg.io/). We support Web Mercator and Lambert Conical Conform Canada." + }, + "tileGrid": { "$ref": "#/definitions/TypeTileGrid" } + } + }, + + "TypeTileGrid": { + + "type": "object", + "properties": { + "extent": { + "type": "array", + "maxItems": 4, + "minItems": 4, + "items": + { + "type": "number" + }, + "description": "The extent that constrains the view. Called with [minX, minY, maxX, maxY] extent coordinates." + }, + "origin": { + "type": "array", + "maxItems": 2, + "minItems": 2, + "items": + { + "type": "number" + } + , + "description": "The tile grid origin, i.e. where the x and y axes meet ([z, 0, 0]). Tile coordinates increase left to right and downwards. If not specified, extent must be provided." + }, + "resolutions": { + "type": "array", + "items": { + "type": "number" + }, + "description": "Resolutions. The array index of each resolution needs to match the zoom level. This means that even if a minZoom is configured, the resolutions array will have a length of maxZoom + 1." + }, + "tileSize": { + "type": "array", + "maxItems": 2, + "minItems": 2, + "items": + { + "type": "number" + }, + "default": [256, + 256 + ], + "description": "The tile grid origin, i.e. where the x and y axes meet ([z, 0, 0]). Tile coordinates increase left to right and downwards. If not specified, extent must be provided." + } + }, + "required": ["origin", "resolutions"] + }, + + "TypeVectorHeatmapLayerEntryConfig": { + + "type": "object", + "properties": { + "schemaTag": { + "enum": [ + "not used yet" + ], + "defautl":"not used yet" + + }, + "entryType": { + "type": "string", + "enum": [ + "vector-heatmap" + ], + "default": "vector-heatmap" + }, + "layerPathEnding": { + "description": "The ending element of the layer configuration path.", + "type": "string" + }, + "layerId": { + "type": "string", + "description": "The id of the layer to display on the map." + }, + "layerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer entry at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "source": { "$ref": "#/definitions/TypeVectorSourceInitialConfig" }, + "gradient": { + "type": "array", + "items": { + "type": "string" + }, + "uniqueItems": true, + "minItems": 2, + "default": ["#00f", + "#0ff", + "#0f0", + "#ff0", + "#f00" + ], + "description": "Color gradient of the heatmap, specified as an array of CSS color strings." + }, + "radius": { + "type": "number", + "description": "Radius size in pixels (default 8px)." + }, + "blur": { + "type": "number", + "description": "Blur size in pixels (default 15px)." + }, + "weight": { + "type": "string", + "description": "Feature attribute to use for the weight or a function (ADD FORMAT) that returns a weight from a feature." + } + }, + "required": ["schemaTag", + "layerId", + "entryType" + ] + }, + + "TypeVectorLayerEntryConfig": { + + "type": "object", + "properties": { + "entryType": { + "type": "string", + "default": "vector", + "enum": [ + "vector" + ] + }, + "layerId": { + "type": "string", + "description": "The id of the layer to display on the map." + }, + "layerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "layerFilter": { + "description": "Filter to apply on feature of this layer.", + "type": "string" + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer entry at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "source": { "$ref": "#/definitions/TypeVectorSourceInitialConfig" }, + "style": { "$ref": "#/definitions/TypeStyleConfig" }, + "layerPathEnding": { + "description": "The ending element of the layer configuration path.", + "type": "string" + }, + "schemaTag": { + "enum": [ + "GeoJSON", + "esriFeature", + "ogcWfs", + "ogcFeature", + "GeoPackage" + ] + } + }, + "required": [ + "layerId", + "schemaTag", + "entryType" + ] + }, + + "TypeVectorTileLayerEntryConfig": { + + "type": "object", + "description": "Layer sources providing vector data divided into a tile grid.", + "properties": { + "entryType": { + "type": "string", + "enum": [ + "vector-tile" + ], + "default": "vector-tile" + }, + "layerId": { + "type": "string", + "description": "The id of the layer to display on the map." + }, + "layerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "layerFilter": { + "description": "Filter to apply on feature of this layer.", + "type": "string" + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer entry at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "source": { + "$ref": "#/definitions/TypeVectorTileSourceInitialConfig", + "description": "Information used to configure the source of a vector tile layer." + }, + "layerPathEnding": { + "description": "The ending element of the layer configuration path.", + "type": "string" + }, + "style": { + "$ref": "#/definitions/TypeStyleConfig" + }, + "schemaTag": { + "enum": [ + "not used yet" + ] + } + }, + "required": [ + + "entryType", + "layerId" + ] + }, + + "TypeVectorTileSourceInitialConfig": { + + "type": "object", + "description": "Layer sources providing vector data divided into a tile grid.", + "properties": { + "dataAccessPath": { + "$ref": "#/definitions/TypeLocalizedString", + + "description": "The path (English/French) to reach the data to display. If not specified, metadatAccessPath will be assigne dto it." + }, + "format": { + "enum": ["GeoJSON", "EsriJSON", "KML", "WFS", "MVT", "featureAPI"], + "description": "The feature format used by the XHR feature loader when access path is set." + }, + "dataProjection": { + "type": "string", + "description": "The projection code of the source. Used only for GeoJSON format. Default value is EPSG:4326." + }, + "featureInfo": { "$ref": "#/definitions/TypeFeatureInfoLayerConfig" }, + "style": { "$ref": "#/definitions/TypeStyleConfig" }, + "tileGrid": { + "$ref": "#/definitions/TypeTileGrid" + } + + } + }, + + "TypeTileLayerEntryConfig": { + + "type": "object", + "properties": { + "entryType": { + "type": "string", + "enum": [ + "raster-tile" + ], + "default": "raster-tile" + }, + "layerId": { + "type": "string", + "description": "The id of the layer to display on the map." + }, + "layerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer entry at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "layerPathEnding": { + "description": "The ending element of the layer configuration path.", + "type": "string" + }, + "schemaTag": { + "enum": [ + "ogcWms", + "xyzTiles", + "vectorTiles" + ], + "default": "ogcWms" + }, + "source": { "$ref": "#/definitions/TypeSourceTileInitialConfig" } + }, + "required": [ + "schemaTag", + "entryType", + "layerId" + ] + }, + + + + "TypeGeocoreLayerEntryConfig": { + + "type": "object", + "description": "Layer where configration is extracted by a configuration snippet stored on a server. The server configuration will handle bilangual informations.", + "properties": { + "entryType": { + "type": "string", + "enum": [ + "geocore" + ], + "default": "geocore" + }, + "layerId": { + "type": "string", + "description": "The id of the layer to display on the map." + }, + "geocoreLayerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer entry at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "listOfLayerEntryConfig": { + "$ref": "#/definitions/TypeListOfLayerEntryConfig", + "description": "The list of layer entry configurations to use from the GeoView layer group." + }, + "schemaTag": { + "enum": [ + "geoCore" + ], + "defaut": "geoCore" + }, + "source": { "$ref": "#/definitions/TypeSourceGeocoreConfig" } + }, + "required": ["schemaTag","entryType","layerId"] + }, + + "TypeSourceGeocoreConfig": { + + "type": "object", + "description": "Layer source providing geocore data.", + "properties": { + "dataAccessPath": { + "$ref": "#/definitions/TypeLocalizedString", + + "description": "The url path to the geoCore endpoint (optional, this value should be embeded in the GeoView API)." + }, + "featureInfo": { + "$ref": "#/definitions/TypeFeatureInfoNotQueryable" + } + } + }, + + "TypeOgcWmsLayerEntryConfig": { + "type": "object", + "properties": { + "entryType": { + "type": "string", + "enum": [ + "raster-image" + ], + "default": "raster-image" + }, + + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer entry at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "layerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "schemaTag": { + "enum": [ + "ogcWms" + ], + "default": "ogcWms" + }, + "layerId": { + "type": "string", + "description": "The id of the layer to display on the map." + }, + "layerPathEnding": { + "type": "string", + "description": "The ending element of the layer configuration path." + }, + "layerFilter": { + "type": "string", + "description": "Filter to apply on feature of this layer." + }, + "source": { + "$ref": "#/definitions/TypeSourceImageWmsInitialConfig" + }, + "style": { + "$ref": "#/definitions/TypeStyleConfig" + } + }, + "required": [ + "schemaTag", + "entryType", + "layerId" + ] + }, + + "TypeSourceImageStaticInitialConfig": { + + "properties": { + "crossOrigin": { + "description": "The crossOrigin attribute for loaded images. Note that you must provide a crossOrigin value if you want to access pixel data with the Canvas renderer.", + "type": "string" + }, + "dataAccessPath": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The path (English/French) to reach the data to display. If not specified, metadatAccessPath will be assigne dto it." + + }, + "extent": { + "description": "The extent of the static image. Called with [minX, minY, maxX, maxY] extent coordinates.", + "items": { + "type": "number" + }, + "maxItems": 4, + "minItems": 4, + "type": "array" + }, + "featureInfo": { + "$ref": "#/definitions/TypeFeatureInfoNotQueryable" + }, + "projection": { + "description": "Spatial Reference EPSG code supported (https://epsg.io/). We support Web Mercator and Lambert Conical Conform Canada.", + "type": "integer" + } + }, + "type": "object" + }, + + "TypeLayerEntryType": { "type": "string", + "enum": ["vector", + "vector-tile", + "vector-heatmap", + "raster-tile", + "raster-image", + "geoCore" + ], + "description": "Layer entry data type." + }, + + "TypeLayerGroupEntryConfig": { + + "type": "object", + "description": "Entry used to define a layer Group.", + + "properties": { + "entryType": { "type":"string", + + "enum": [ + "group" + ], + "default": "group" + }, + "layerId": { + "type": "string", + "description": "The id of the layer group to display on the map." + }, + "layerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer group (English/French)." + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer group entries at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "listOfLayerEntryConfig": { + "$ref": "#/definitions/TypeListOfLayerEntryConfig", + "description": "The list of layer entry configurations to use from the GeoView layer group." + } + }, + + "required": ["entryType", "layerId", "listOfLayerEntryConfig"] + }, + + + + + "TypeLayerEntryConfig": { + "type": "object", + "oneOf": [ + + { "title": "OgcWmsLayer", + + "properties": { + "schemaTag": { "type": "string", + + "default": "ogcWms" + }, + "entryType": { + "type": "string", + + + "default": "raster-image" + }, + + "layerId": { + "type": "string", + "description": "The id of the layer to display on the map." + }, + "layerPathEnding": { + "type": "string", + "description": "The ending element of the layer configuration path." + }, + + "layerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "layerFilter": { + "type": "string", + "description": "Filter to apply on feature of this layer." + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apTypeStyleConfiply to the layer entry at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "source": { + "$ref": "#/definitions/TypeSourceImageWmsInitialConfig" + }, + "style": { + "$ref": "#/definitions/TypeStyleConfig" + } + }, + "required": [ "entryType", + "schemaTag", + "layerId" + ] + }, + { "title": "LayerGroup", + + + "description": "Entry used to define a layer Group.", + + "properties": { + "entryType": {"type":"string", + + "enum": [ + "group" + ], + "default": "group" + }, + "layerId": { + "type": "string", + "description": "The id of the layer group to display on the map." + }, + "layerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer group (English/French)." + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer group entries at creation time. Initial settings are inherited from the parent in the configuration tree." + } + }, + + "required": ["entryType", "layerId"] + } , + {"title":"VectorTileLayer", + + + "description": "Layer sources providing vector data divided into a tile grid.", + "properties": { + "schemaTag": {"type": "string", + "enum": [ + "not used yet" + ], + "default": "not used yet" + }, + "entryType": { + "type": "string", + "enum": [ + "vector-tile" + ], + "default": "vector-tile" + }, + "layerPathEnding": { + "description": "The ending element of the layer configuration path.", + "type": "string" + }, + "layerId": { + "type": "string", + "description": "The id of the layer to display on the map." + }, + "layerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "layerFilter": { + "description": "Filter to apply on feature of this layer.", + "type": "string" + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer entry at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "source": { + "$ref": "#/definitions/TypeVectorTileSourceInitialConfig", + "description": "Information used to configure the source of a vector tile layer." + }, + "style": { + "$ref": "#/definitions/TypeStyleConfig" + } + }, + + "required": [ + "schemaTag", + "entryType", + "layerId" + ] + }, + + { + "title":"GeocoreLayer", + + "description": "Layer where configration is extracted by a configuration snippet stored on a server. The server configuration will handle bilangual informations.", + "properties": { + "schemaTag": { + "type":"string", + "enum": ["geoCore"],"defaut":"geoCore" + }, + "entryType": { + "type": "string", + "enum": ["geocore"],"default": "geocore" + }, + "layerId": { + "type": "string", + "description": "The id of the layer to display on the map." + }, + "geocoreLayerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer entry at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "source": { "$ref": "#/definitions/TypeSourceGeocoreConfig" + }, + "listOfLayerEntryConfig": { + "$ref": "#/definitions/TypeListOfLayerEntryConfig", + "description": "The list of layer entry configurations to use from the GeoView layer group." + } }, + "required": ["schemaTag","entryType","layerId"] + }, + + { "title": "VectorLayer", + + "properties": { + "schemaTag": {"type":"string", + "enum": ["GeoJSON","esriFeature","ogcWfs","ogcFeature","GeoPackage"],"default": "esriFeature" + }, + "entryType": { + "type": "string", + "enum": [ + "vector" + ] ,"default": "vector" + }, + "layerPathEnding": { + "description": "The ending element of the layer configuration path.", + "type": "string" + }, + "layerId": { + "type": "string", + "description": "The id of the layer to display on the map." + }, + "layerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "layerFilter": { + "description": "Filter to apply on feature of this layer.", + "type": "string" + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer entry at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "source": { "$ref": "#/definitions/TypeVectorSourceInitialConfig" }, + "style": { "$ref": "#/definitions/TypeStyleConfig" } + + }, + "required": ["layerId","schemaTag","entryType" ] + } + + , + { + "title": "EsriDynamicLayer", + + "properties": { + "schemaTag": { "type": "string", + "enum": [ + "esriDynamic" + ], + "default": "esriDynamic" + + }, + "entryType": { + "type": "string", + "enum": [ + "raster-image" + ], + "default": "raster-image" + }, + "layerId": { + "description": "The id of the layer to display on the map.", + "type": "string" + }, + "layerPathEnding": { + "description": "The ending element of the layer configuration path.", + "type": "string" + }, + "layerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "layerFilter": { + "description": "Filter to apply on feature of this layer.", + "type": "string" + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer entry at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "source": { + "$ref": "#/definitions/TypeSourceImageEsriInitialConfig" + }, + "style": { + "$ref": "#/definitions/TypeStyleConfig" + } + }, + "required": [ + "entryType", + "layerId", + "schemaTag" + ], + "type": "object" + }, + { + "title": "TileLayer", + + "properties":{ + "schemaTag": {"type": "string", + "enum": [ + "ogcWms", + "xyzTiles", + "vectorTiles" + ],"default": "ogcWms" + } , + "entryType": { + "type": "string", + "enum": [ + "raster-tile" + ] ,"default": "raster-tile" + }, + "layerId": { + "type": "string", + "description": "The id of the layer to display on the map." + }, + "layerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer entry at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "layerPathEnding": { + "description": "The ending element of the layer configuration path.", + "type": "string" + }, + "source": { "$ref": "#/definitions/TypeSourceTileInitialConfig" } + + }, + "required": [ + "schemaTag", + "entryType", + "layerId" + ] + } + + + ] ,"default":"OgcWmsLayer" + }, + + "TypeListOfLayerEntryConfig": { + "type": "array", + "minItems": 1, + "items": { + "$ref": "#/definitions/TypeLayerEntryConfig" + } + }, + + "TypeMapConfig": { + + "type": "object", + "properties": { + "basemapOptions": { "$ref": "#/definitions/TypeBasemapOptions" }, + "interaction": { "$ref": "#/definitions/TypeInteraction" }, + "listOfGeoviewLayerConfig": { "$ref": "#/definitions/TypeListOfGeoviewLayerConfig" }, + "viewSettings": { "$ref": "#/definitions/TypeViewSettings" }, + "extraOptions": { + "type": "object", + "description": "Additional options used for OpenLayers map options" + } + }, + "required": ["basemapOptions", "interaction", "viewSettings"] + }, + + "TypeBasemapOptions": { + + "type": "object", + "properties": { + "basemapId": { "$ref": "#/definitions/TypeBasemapId" }, + + "shaded": { + "type": "boolean", + "default": true, + "title": "Enable or disable shaded basemap (if basemap id is set to shaded then this should be false)." + + }, + "labeled": { + "type": "boolean", + "default": true, + + "title": "Enable or disable basemap labels" + } + }, + "required": ["basemapId", "shaded", "labeled"] + }, + + "TypeBasemapId": { + "description": "Id of the basemap to use." , + "enum": ["transport", "osm", "simple", "nogeom", "shaded"], + "default": "transport" + + }, + + "TypeInteraction": { + "enum": ["static", "dynamic"], + "default": "dynamic", + "description": "If map is dynamic (pan/zoom) or static to act as a thumbnail (no nav bar)." + }, + + "TypeListOfGeoviewLayerConfig": { + + "description": "List of GeoView Layers in the order which they should be added to the map.", + "type": "array", + + "items": { + "$ref": "#/definitions/TypeGeoviewLayerConfig" + } + }, + + "TypeGeoviewLayerConfig": { + + "type": "object", + "properties": { + "geoviewLayerId": { + "description": "The id of the layer for referencing within the viewer (does not relate directly to any external service). The id will have the language extension (id-'lang').", + "type": "string" + }, + "geoviewLayerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "metadataAccessPath": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The GeoView layer access path (English/French)." + }, + "geoviewLayerType": { + "$ref": "#/definitions/TypeGeoviewLayerType", + "description": "Type of GeoView layer." + }, + "serviceDateFormat": { + "description": "Date format used by the service endpoint.", + "type": "string" + }, + "externalDateFormat": { + "description": "Date format used by the getFeatureInfo to output date variable.", + "type": "string" + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the GeoView layer at creation time." + }, + "listOfLayerEntryConfig": { + "$ref": "#/definitions/TypeListOfLayerEntryConfig", + "description": "The layer entries to use from the GeoView layer." + } + }, + "required": [ + "geoviewLayerId", + "geoviewLayerName", + "metadataAccessPath", + "geoviewLayerType", + "listOfLayerEntryConfig" + ] + }, + + "TypeGeoviewLayerType": { + "type": "string", + "enum": ["", + "esriDynamic", + "esriFeature", + "GeoJSON", + "geoCore", + "GeoPackage", + "xyzTiles", + "ogcFeature", + "ogcWfs", + "ogcWms", + "imageStatic", + "vectorTiles" + ], + "default": [ + "" + ], + "description": "Type of GeoView layer." + } + , + "TypeImageStaticLayerEntryConfig": { + + "properties": { + "entryType": { + "enum": [ + "raster-image" + ] + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer entry at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "layerId": { + "description": "The id of the layer to display on the map.", + "type": "string" + }, + "layerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "layerPathEnding": { + "description": "The ending element of the layer configuration path.", + "type": "string" + }, + "schemaTag": { + "enum": [ + "imageStatic" + ] + }, + "source": { + "$ref": "#/definitions/TypeSourceImageStaticInitialConfig" + } + }, + "required": [ + "schemaTag", + "entryType", + "layerId" + ], + "type": "object" + }, + + "TypeViewSettings": { + + "type": "object", + + "properties": { + "center": { + "type": "array", + "items": [ + + { + "type": "number", + "minimum": -160, + "maximum": 160, + "default": -106, + "description": "Initial longitude value for map center." + }, + { + "type": "number", + "minimum": -80, + "maximum": 80, + "default": 60, + "description": "Initial latitude value for map center." + } + + ] + + }, + "enableRotation": { + "type": "boolean", + "default": true, + "title": "Enable rotation. If false, a rotation constraint that always sets the rotation to zero is used." + }, + "extent": { + "type": "array", + "minItems":4, + "maxItems":4, + "items": { + + "type": "number" + + },"default":[-16763712,5165908,-5688293,10649806], + "description": "The extent that constrains the view. Called with [minX, minY, maxX, maxY] extent coordinates." + }, + "minZoom": { + "type": "integer", + "description": "The minimum zoom level used to determine the resolution constraint. If not set, will use default from basemap.", + "minimum": 0, + "maximum": 50 + }, + "maxZoom": { + "type": "integer", + "description": "The maximum zoom level used to determine the resolution constraint. If not set, will use default from basemap.", + "minimum": 0, + "maximum": 50 + }, + "projection": { "$ref": "#/definitions/TypeValidMapProjectionCodes" }, + "rotation": { + "type": "integer", + "minimum": -360, + "maximum": 360, + "default": 0, + "description": "The initial rotation for the view in degree (positive rotation clockwise, 0 means North). Will be converted to radiant by the viewer." + }, + "zoom": { + "type": "number", + "minimum": 0, + "maximum": 28, + "default": 12, + "description": "Initial map zoom level. Zoom level are define by the basemap zoom levels." + } + }, + "required": ["zoom", "center"] + }, + + "TypeAppBarProps": { + "default": [ + "geolocator" + ], + "description": "Controls availalbe on the application bar.", + "items": { + "enum": [ + "geolocator", + "export" + ] + }, + "minItems": 0, + "type": "array", + "uniqueItems": true + + }, + + "TypeNavBarProps": { + "type": "array", + "uniqueItems": true, + "items": { + "enum": [ + "zoom", + "fullscreen", + "home", + "location", + "export" + ] + }, + "default": [ + "zoom", + "fullscreen", + "home" + ], + "description": "Controls availalbe on the navigation bar.", + "minItems": 0 + }, + + "TypeFooterTabsProps": { + "type": "object", + + "properties": { + "tabs": { + "type": "object", + "description": "Available tabs", + "properties": { + "core": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "legend", + "layers", + "details", + "data-table", + "time-slider", + "geochart" + ] + }, + "minItems": 1, + "default": [ + "legend", + "layers", + "details", + "data-table" + ], + "uniqueItems": true, + "description": "Default core tabs of footer panel to use" + }, + "custom": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "defaultTabs": { + "type": "string" + }, + "contentHTML": { + "type": "string" + } + } + }, + "minItems": 0, + "default": [], + "uniqueItems": true, + "description": "Custom tabs of footer panel to use" + } + } + + }, + "collapsed": { + "type": "boolean", + "default": false, + "description": "State of footer panel when map is loaded (expanded or collapsed)" + } + }, + "required": [ + "tabs" + ] + }, + + "TypeAppBarTabsProps": { + "type": "object", + + "properties": { + "tabs": { + "type": "object", + "description": "Available tabs", + "properties": { + "core": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "basemap-panel", + "layers", + "geochart" + ] + }, + "minItems": 1, + "default": [ "basemap-panel"], + "uniqueItems": true, + "description": "Default core tabs of app-bar to use" + }, + "custom": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "defaultTabs": { + "type": "string" + }, + "contentHTML": { + "type": "string" + } + } + }, + "minItems": 0, + "default": [], + "uniqueItems": true, + "description": "Custom tabs of app-bar to use" + } + } + + }, + "collapsed": { + "type": "boolean", + "default": false, + "description": "State of app-bar when map is loaded (expanded or collapsed)" + } + }, + "required": [ + "tabs" + ] + }, + + "TypeOverviewMapProps": { + "type": "object", + + "properties": { + "hideOnZoom": { + "type": "number", + "minimum": 0, + "maximum": 10, + "default": 0, + "description": "Minimum zoom level to show overview map" + } + } + }, + + "TypeMapComponents": { + "type": "array", + "uniqueItems": true, + "items": { + "enum": [ + "overview-map", + "north-arrow", + "geolocator" + ] + }, + "default": [ + "overview-map", + "north-arrow", + "geolocator" + ], + "description": "Core components to initialize on viewer load. The schema for those are inside this file.", + + "minItems": 0 + }, + + "TypeMapCorePackages": { + "type": "array", + "uniqueItems": true, + "items": { + "enum": [ + "basemap-panel", + "layers-panel", + "details-panel", + "geolocator-panel", + "swiper", + "geochart", + "time-slider" + ] + }, + "default": ["basemap-panel" + ], + "description": "Core packages to initialize on viewer load. The schema for those are on their own package. NOTE: config from packages are in the same loaction as core config (<>-<>.json).", + + "minItems": 0 + }, + + "TypeExternalPackages": { + "type": "array", + "items": { + + "type": "object", + "properties": { + "name": { + "type": "string", + + + "description": "External Package name. The name must be ideintical to the window external package object to load." + }, + "configUrl": { + "type": "string", + + "format": "uri", + "description": "The url to the external package configuration setting. The core package will read the configuration and pass it inside the package." + } + }, + "required": ["name"] + }, + "default": [], + "description": "List of external packages to initialize on viewer load.", + "minItems": 0 + }, + + "TypeServiceUrls": { + + "type": "object", + "description": "Service endpoint urls", + "properties": { + "keys": { + "type": "string", + "default": "https://geocore.api.geo.ca", + + "description": "Service end point to access API for layers specification (loading and plugins parameters). By default it is GeoCore but can be another endpoint with similar output." + }, + "geolocator": { + "type": "string", + + "description": "Service end point to access geo location of searched value." + }, + + "proxyUrl": { + "type": "string", + + "description": "An optional proxy to be used for dealing with same-origin issues. URL must either be a relative path on the same server or an absolute path on a server which sets CORS headers." + } + }, + "required": [ + "keys" + ] + }, + + "TypeDisplayLanguage": { + "enum": ["en", "fr"], + "description": "Display languages supported." + }, + + "TypeLocalizedLanguages": { + "enum": ["en", "fr"], + "description": "ISO 639-1 code indicating the languages supported by the configuration file." + }, + + "TypeListOfLocalizedLanguages": { + "type": "array", + "uniqueItems": true, + "items": { "$ref": "#/definitions/TypeLocalizedLanguages" }, + "default": ["en"], + "description": "ISO 639-1 code indicating the languages supported by the configuration file. It will use value(s) provided here to access bilangual configuration nodes. For value(s) provided here, each bilingual configuration node MUST provide a value.", + "minItems": 1 + }, + + "TypeValidVersions": { + "enum": ["1.0"], + "description": "The schema version that can be used to validate the configuration file. The schema should enumerate the list of versions accepted by this version of the viewer." + }, + + "TypeMapFeaturesInstance": { + + "description": "The map features configuration. This type is used by the IsValidTypeMapFeaturesInstance method coded in config-validation.ts file. It does the validation down to the list of layer entry config.", + "type": "object", + "properties": { + "mapId": { "type": "string" }, + "map": { "$ref": "#/definitions/TypeMapConfig" }, + "appBar": { "$ref": "#/definitions/TypeAppBarProps" }, + "navBar": { "$ref": "#/definitions/TypeNavBarProps" }, + "footerTabs": { "$ref": "#/definitions/TypeFooterTabsProps"}, + "appBarTabs": {"$ref": "#/definitions/TypeAppBarTabsProps"}, + "overviewMap": {"$ref": "#/definitions/TypeOverviewMapProps"}, + "components": { "$ref": "#/definitions/TypeMapComponents" }, + "corePackages": { "$ref": "#/definitions/TypeMapCorePackages" }, + "externalPackages": { "$ref": "#/definitions/TypeExternalPackages" }, + "serviceUrls": { "$ref": "#/definitions/TypeServiceUrls" }, + "suportedLanguages": { "$ref": "#/definitions/TypeListOfLocalizedLanguages" }, + "schemaVersionUsed": { "$ref": "#/definitions/TypeValidVersions" } + }, + "required": ["map", "suportedLanguages"] + } + }, + + "properties": { + "mapId": { "type": "string" }, + "map": { "$ref": "#/definitions/TypeMapConfig" }, + "theme": { "Title": "Map Theme Style", + "enum": [ + "dark", + "light", + "geo.ca" + ], + "default": "dark", + "description": "Theme style of the viewer." + }, + "appBar": { "$ref": "#/definitions/TypeAppBarProps" }, + "navBar": { "$ref": "#/definitions/TypeNavBarProps" }, + "footerTabs": { "$ref": "#/definitions/TypeFooterTabsProps"}, + "appBarTabs": {"$ref": "#/definitions/TypeAppBarTabsProps"}, + "overviewMap": {"$ref": "#/definitions/TypeOverviewMapProps"}, + "components": { "$ref": "#/definitions/TypeMapComponents" }, + "corePackages": { "$ref": "#/definitions/TypeMapCorePackages" }, + "externalPackages": {"$ref": "#/definitions/TypeExternalPackages"}, + "serviceUrls": { "$ref": "#/definitions/TypeServiceUrls" }, + "suportedLanguages": { "$ref": "#/definitions/TypeListOfLocalizedLanguages" }, + "versionUsed": { "$ref": "#/definitions/TypeValidVersions" } + } + }, + + + "areasOfInterest": { + "title": "Areas of Interest", + "type": "object", + "properties": { + "enable": { + "type": "boolean", + "title": "Enable", + "default":true + }, + "areas": { + "type": "array", + "items": { + "type": "object", + "properties": { + "title-en-CA": { + "type": "string", + "title": "English Title" + }, + "title-fr-CA": { + "type": "string", + "title": "French Title" + }, + "xmin": { + "type": "number", + "title": "Minimum value of x", + "default": -4844430 + }, + "ymin": { + "type": "number", + "title": "Minimum value of y", + "default": -1052774 + }, + "xmax": { + "type": "number", + "title": "Maximum value of x", + "default": 5666163 + }, + "ymax": { + "type": "number", + "title": "Maximum value of y", + "default": 4170111 + }, + "wkid": { + "type": "number", + "title": "Spatial Reference", + "default": 3978 + }, + "thumbnailUrl": { + "type": "string", + "title": "Thumbnail URL" + } + }, + "required": [ + "title-en-CA", + "title-fr-CA" + ] + } + } + } + }, + + + "swiper": { + "title": "Swiper", + "type": "object", + "properties": { + "enable": { + "type": "boolean", + "title": "Enable", + "default":true + }, + "type": { + "type": "string", + "title": "Type", + "enum": [ + "vertical", + "horizontal" + ], + "default": "vertical" + }, + "keyboardOffset": { + "type": "number", + "title": "Keyboard Movement", + "description": "Pixel value of swiper displacement.", + "default": 10, + "minimum": 1, + "maximum": 100 + }, + "layers": { + "type": "string", + "title": "Layers", + "description": "The id of the layer for referencing within the viewer (does not relate directly to any external service).", + "enum":[] + } + + + + + + }, + "required": [ + "type", + "keyboardOffset", + "layers" + ] + }, + + "thematicSlider": { + "title": "Thematic Slider", + "type": "object", + "properties": { + "enable": { + "type": "boolean", + "title": "Enable", + "default":true + }, + "open": { + "type": "boolean", + "title": "Open by default", + "default": true + }, + "autorun": { + "type": "boolean", + "title": "Start animation on load", + "defaul": false + }, + "loop": { + "type": "boolean", + "title": "Play the animation in loop", + "default": false + }, + "slider": { + "type": "boolean", + "title": "Enable slider control", + "default": true + }, + "stack": { + "type": "boolean", + "title": "Stack layer visibility", + "default": false + }, + "legendStack": { + "type": "boolean", + "title": "Stack legend items (useful with the stack option to see all active elements legend)", + "default": true + }, + "layers": { + "type": "array", + "title": "Layers", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "The id of the layer for referencing within the viewer (does not relate directly to any external service).", + "title": "Layer id", + "enum":[] + + }, + "duration": { + "type": "number", + "title": "Animation duration in milliseconds", + "minimum": 3000, + "default": 3000 + }, + "title": { + "type": "string", + "title": "Title for this layer animation" + }, + "description": { + "type": "string", + "title": "Description for this layer animation" + }, + "legend": { + "type": "array", + "title": "Legend", + "description": "Add items for a custom legend, leave it blank for default legend.", + "default": [], + "items": { + "type": "object", + "properties": { + "label": { + "type": "string", + "title": "Label" + }, + "image": { + "type": "object", + "properties": { + "url": { + "type": "string", + "title": "URL", + "default": "" + }, + "width": { + "type": "number", + "title": "Width", + "minimum": 25, + "maximum": 150, + "default": 150 + }, + "height": { + "type": "number", + "title": "Height", + "minimum": 25, + "maximum": 150, + "default": 150 + } + }, + "required": [ + "url", + "width", + "height" + ] + } + }, + "required": [ + "image" + ] + } + } + }, + "required": [ + "id", + "duration" + ] + } + }, + "required": [ + "layers" + ] + } + } + } + ] + } + + diff --git a/src/components/db - feb 7oneofcombinetypeofvectorsetting.json b/src/components/db - feb 7oneofcombinetypeofvectorsetting.json new file mode 100644 index 0000000..3b57dad --- /dev/null +++ b/src/components/db - feb 7oneofcombinetypeofvectorsetting.json @@ -0,0 +1,3238 @@ +{ + + "plugins": [ + + { "draw": { + + "title": "Draw", + + + + "type": "object", + "properties": { + + "enable": { + "type": "boolean", + "title": "Enable", + "default":true + }, + "open": { + + "type": "boolean", + "title": "Open by default", + "default": true + }, + "tools": { + "type": "array", + "title": "Tools", + "minItems":0, + "uniqueItems": true, + "items":{ + "enum": [ + "picker", + "point", + "polyline", + "polygon", + "edit", + "measure", + "extent", + "write", + "read" + ] + }, + + + "description": "Tools to add to draw toolbar.", + "default": [ + "picker", + "point", + "polyline", + "polygon", + "edit", + "measure", + "extent", + "write", + "read" + ] + } + + }, + "required": [ + "enabled", + "open","tools" + ] + },"chart": { + + "title": "Chart", + "type": "object", + "properties": { + + "enable": { + "type": "boolean", + "title": "Enable", + "description":"chart", + + "default":true + + + }, + "type": { + "title": "Chart Type", + "type": "string", + "enum": [ + "pie", + "bar", + "line" + ], + + "default": "pie" + }, + "title": { + "title": "Title", + "type": "string", + "default": "" + }, + "labelsPie": { + "type": "object", + "title": "Labels", + "properties": { + "type": { + "title": "Type", + "type": "string", + "enum": [ + "field", + "config" + ], + "description": "Retreive the labels from a field or from the configuration.", + "default": "config" + }, + "values": { + "title": "Values", + "type": "string", + "description": "Values separated by semi colon or field name.", + "default": "" + }, + "split": { + "title": "Split Character", + "type": "string", + "description": "Character to use to split list of values.", + "default": ";" + } + }, + "required": [ + "type", + "values", + "split" + ] + }, + "options": { + "title": "Options", + "type": "object", + "properties": { + "colors": { + "title": "Datasets Colors", + "type": "string", + "description": "Hexadecimal color code separated by semicolon. If not provided, default colors will be use.", + "default": "" + }, + "cutOut": { + "title": "Cut Out Percentage", + "type": "number", + "description": "Cut out percentage to use to give doughnut effect.", + "default": 0, + "minimum": 0, + "maximum": 80 + } + }, + "required": [ + "cutOut" + ] + }, + "axis": { + "type": "object", + "title": "Labels", + "properties": { + "xAxis": { + "title": "X Axis", + "type": "object", + "properties": { + "title": { + "title": "Title", + "type": "string", + "default": "" + }, + "type": { + "title": "Type", + "type": "string", + "enum": [ + "field", + "config", + "linear", + "date" + ], + "description": "Retreive the labels from a field or configuration for bar chart or from values (linear or time) for line chart.", + "default": "config" + }, + "values": { + "title": "Values", + "type": "string", + "description": "Values separated by semicolon or field name.", + "default": "" + }, + "split": { + "title": "Split Character", + "type": "string", + "description": "Character to use to split list of values.", + "default": ";" + } + }, + "required": [ + "type", + "values", + "split" + ] + }, + "yAxis": { + "title": "Y Axis", + "type": "object", + "properties": { + "title": { + "title": "Title", + "type": "string", + "default": "" + }, + "type": { + "title": "Type", + "type": "string", + "enum": [ + "field", + "config", + "linear", + "time" + ], + "description": "Retreive the labels from a field or configuration for bar chart or from values (linear or time) for line chart.", + "default": "config" + }, + "values": { + "title": "Values", + "type": "string", + "description": "Values separated by semicolon or field name.", + "default": "" + }, + "split": { + "title": "Split Character", + "type": "string", + "description": "Character to use to split list of values.", + "default": ";" + } + }, + "required": [ + "type", + "values", + "split" + ] + }, + "required": [ + "xAxis", + "yAxis" + ] + } + }, + "layers": { + "type": "array", + "title": "Layers", + "items": { + "type": "object", + "properties": { + "id": { + "title": "Layer ID", + "type": "string", + "description": "", + "enum":["1"] + }, + "nameField": { + "type": "string", + "title": "Name Field", + "description": "Field name to use for the chart selection combo box when multiple charts." + }, + "type": { + "title": "Chart Data Type", + "type": "string", + "enum": [ + "inline", + "link" + ], + "description": "Type of data (inline for items inside the layer or link for items inside a link table).", + "default": "inline" + }, + "linkUrl": { + "type": "string", + "title": "Link URL", + "description": "URL of the link table." + }, + "linkField": { + "type": "string", + "title": "Link Field", + "description": "Field name for the link between the layer and the table." + }, + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "type": { + "title": "Type of data inside the field", + "type": "string", + "enum": [ + "single", + "combine" + ], + "description": "Single if there is only one value inside the field. Combine if we use time axis and time and value are part of the field.", + "default": "combine" + }, + "linkType": { + "title": "Type of link", + "type": "string", + "enum": [ + "single", + "multi" + ], + "description": "How data is structure inside the link table (single for one field for value and one for date OR multiple if there is multiple datasets inside one field and the chart needs to parse).", + "default": "single" + }, + "link": { + "title": "Link Field", + "type": "string", + "description": "Link field to link between layer and table." + }, + "date": { + "title": "Date Field", + "type": "string", + "description": "Field to use for the date" + }, + "measure": { + "title": "Measure Field", + "type": "string" + }, + "values": { + "title": "Label Values", + "type": "string", + "description": "Field name to get labels from for link type multi." + }, + "label": { + "type": "object", + "title": "Dataset Labels", + "properties": { + "type": { + "title": "Type", + "type": "string", + "enum": [ + "field", + "config" + ], + "description": "Retreive the labels from a field or from the configuration.", + "default": "config" + }, + "values": { + "title": "Values", + "type": "string", + "description": "Values separated by semicolon or field name.", + "default": "" + }, + "split": { + "title": "Split Character", + "type": "string", + "description": "Character to use to split list of values.", + "default": ";" + } + }, + "required": [ + "type", + "values", + "split" + ] + }, + "regex": { + "title": "Dataset splitter", + "type": "string", + "description": "

Regex value to split datasets inside the field.

This field is to manage when you have multiple datasets or combine values in the same field. To be able to separate datasets from values, we will use a regex expression. We encourage you to use your data and test your regex expression on a online site like https://regex101.com.

Below we list some samples of datasets and regex:

  • Sample 1
    • Data: [255;255;255];[120;232;23];[32;44;134]
    • Regex: \\\\[|\\\\];\\\\[|\\\\]
    • Ouput: 3 datasets (e.g. 255;255;255). Values inside dataset will be split by the field 'Values Splitter'.
  • Sample 2
    • Data: (2011-03-28,0.511),(2011-04-04,0.421)
    • Regex: \\\\(|\\\\),\\\\(|\\\\)
    • Ouput: 1 datasets, 2 pairs of values (e.g. 2011-03-28,0.511). Values inside are combined (y and x axis) and will be split by the field 'Values Splitter'.

Note: we need to double the '\\' character

", + "default": "\\(|\\),\\(|\\)" + }, + "split": { + "title": "Values splitter", + "type": "string", + "default": ",", + "description": "Character to use to split values inside a field. E.g. a field contains '10;20;30' means there is 3 values split by ';' or [1,2,3];[4,5,6] means there is 2 datasets with 3 values each split by ','." + }, + "prefix": { + "title": "Prefix", + "type": "string", + "default": "", + "description": "Prefix to add to data hover." + }, + "suffix": { + "title": "Suffix", + "type": "string", + "default": "", + "description": "Suffix to add to data hover." + } + }, + "required": [ + "type", + "measure", + "split" + ] + } + }, + "details": { + "type": "object", + "title": "Details", + "properties": { + "enabled": { + "type": "boolean", + "title": "Enable" + }, + "value": { + "type": "string", + "title": "Value", + "description": "String with the custom details in markdown notation." + } + } + } + }, + "required": [ + "id", + "nameField", + "type", + "data" + ] + } + }, + "required": [ + "type", + "layers" + ] + } + },"rangeSlider": { + "$id": "https://cgpv/schema", + "$schema": "http://json-schema.org/draft-07/schema#", + + "title": "Range Slider", + "type": "object", + "properties": { + "enable": { + "type": "boolean", + "title": "Enable", + "default": true + }, + "open": { + "type": "boolean", + "title": "Open by default", + "default": false + }, + "maximize": { + "type": "boolean", + "title": "Slider maximized by default", + "default": false + }, + "maximizeDesc": { + "type": "boolean", + "title": "Description section open by default", + "default": false + }, + "autorun": { + "type": "boolean", + "title": "Start animation on load", + "defaul": false + }, + "loop": { + "type": "boolean", + "title": "Play the animation in loop", + "default": false + }, + "reverse": { + "type": "boolean", + "title": "Animation in reverse mode", + "default": false + }, + "lock": { + "type": "boolean", + "title": "Lock handle", + "default": false + }, + "controls": { + "type": "array", + "minItems":0, + "uniqueItems": true, + + "items": { + "enum": [ + "lock", + "loop", + "delay", + "export", + "refresh", + "reverse" + ] + }, + "default": [ + "lock", + "delay" + ], + "title": "Slider bar controls" + + }, + "params": { + "type": "object", + "title": "Parameters", + "properties": { + "type": { + "title": "Slider Type", + "type": "string", + "enum": [ + "number", + "date", + "wmst" + ], + "description": "If the Date or WMS-T is selected, range and limit must be in milliseconds. Note: Date is for esri layer and WMS-T is for ogc WMS-T layer.", + "default": "number" + }, + "rangeType": { + "title": "Range Type", + "type": "string", + "enum": [ + "single", + "dual" + ], + "description": "Type of range (single for one handle or dual for 2 handles).", + "default": "dual" + }, + "stepType": { + "title": "Step Type", + "type": "string", + "enum": [ + "dynamic", + "static" + ], + "description": "Type of step (dynamic for open values or static from a list of values).", + "default": "dynamic" + }, + "precision": { + "title": "Precision", + "type": "string", + "enum": [ + "0", + "1", + "2", + "date", + "hour" + ], + "description": "Precision of numeric data (0, 1, 2) or date (Date, Hour).", + "default": "0" + }, + "delay": { + "title": "Animation Delay", + "type": "string", + "enum": [ + "3000", + "4000", + "5000", + "6000", + "7000" + ], + "description": "Delay between animations.", + "default": "3000" + }, + "rangeInterval": { + "type": "number", + "title": "Interval (in milliseconds for date data type)", + "default": -1, + "description": "When the limit type is dynamic, this option allows you to define a preset interval between the two handles. The value must be in milliseconds date data type. For other numerical value formats, enter the desired value directly. To convert a time interval into milliseconds, use the built-in converter. Will start at the beginning of the scroll bar, unless the \"Start at end\" option is enabled." + }, + "startRangeEnd": { + "type": "boolean", + "title": "Start interval at the end", + "default": false + }, + "range": { + "type": "object", + "title": "", + "properties": { + "min": { + "type": "number", + "title": "Minimum value of the range (in milliseconds for date data type)", + "description": "The minimum value of the range that corresponds to the position of the left handle. If not defined, the minimum limit will be used. The value must be in milliseconds date data type. For other numerical value formats, enter the desired value directly. To convert a date to milliseconds, use the site's built-in converter.", + "default": 0 + }, + "max": { + "type": "number", + "title": "Maximum value of the range (in milliseconds for date data type)", + "description": "The maximum value of the range that corresponds to the position of the right handle. If not defined, the maximum limit will be used. The value must be in milliseconds date data type. For other numerical value formats, enter the desired value directly. To convert a date to milliseconds, use the site's built-in converter.", + "default": 1 + } + } + }, + "limit": { + "type": "object", + "title": "Limits of the data set values", + "properties": { + "min": { + "type": "number", + "title": "Minimum Limit", + "description": "The minimum value contained in the dataset. If not defined, the value will be found using the values present in the used field of the layer. To convert a date to milliseconds, use the site's built-in converter.", + "default": 0 + }, + "max": { + "type": "number", + "title": "Maximum Limit", + "description": "The maximum value contained in the dataset. If not defined, the value will be found using the values present in the used field of the layer. To convert a date to milliseconds, use the site's built-in converter.", + "default": 1 + }, + "staticItems": { + "type": "array", + "title": "Static Limit Values", + "items": { + "title": "Value", + "type": "number" + }, + "default": [], + "description": "The values for static limit. Note: the minimum and maximum limits are used to define the lower and upper static limits. Enter only the intermediate values here." + } + } + }, + "units": { + "type": "string", + "title": "Units", + "description": "Shown at the right of the time axis. Keep it short to improve readability.", + "default": "" + }, + "description": { + "type": "string", + "title": "Description", + "description": "Description to add in the section below the slider." + } + }, + "required": [ + "type" + ] + }, + "layers": { + "type": "array", + "title": "Layers", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "The id of the layer for referencing within the viewer (does not relate directly to any external service).", + "title": "Layer id", + "enum":[] + + }, + "field": { + "type": "string", + "description": "The field name to use.", + "title": "Field Name", + "default": "" + }, + "isTimeAware": { + "type": "boolean", + "title": "Is Time Aware", + "default": true, + "description": "If time aware is true, the slider will use the TimeInfo (ESRI) or time dimension (WMS) to extract limits and range." + } + }, + "required": [ + "id, field", + "isTimeAware" + ] + } + } + }, + + "required": [ + "params", + "layers" + ] + }, + + + + "map": { + "$id": "https://cgpv/schema", + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "GeoView Core Config Schema", + + "version": 1.0, + "comments": "Configuration for GeoView core packages, each packages manages it own schema. It correspond to the TypeMapFeaturesInstance type.", + "comments": " in TypeLOcalized string I took out minProperties: 1,because it casused error messages eve if field was not requiered", + + "definitions": { + "TypeLocalizedString": { + + + "type": "object", + "properties": { + "en": { + "type": "string", + "description": "The English version of the string." + }, + "fr": { + "type": "string", + "description": "The French version of the string. " + } + } + }, + + "TypeDetailsLayerConfig": { + + "type": "object", + "properties": { + + "parser": { + "type": "string", + "description": "A path to a javascript file with a function for parsing the layers identify output. Only needed if a custom template is being used." + }, + "template": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "A path to an html template (English/French) that will override default identify output." + } + }, + "required": ["template"] + }, + + "TypeFeatureInfoLayerConfig": { + + "type": "object", + "properties": { + "queryable": { + "type": "boolean", + "default": true, + "title": "Allow querying. Default = true." + }, + + "nameField": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display field (English/French) of the layer. If it is not present the viewer will make an attempt to find the first valid field." + }, + "outfields": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "A comma separated list of attribute names (English/French) that should be requested on query (all by default)." + }, + "fieldTypes": { + "type": "string", + "description": "A comma separated list of types. Type at index i is associated to the variable at index i." + }, + "aliasFields": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "A comma separated list of attribute names (English/French) that should be use for alias. If empty, no alias will be set if not found." + } + }, + "required": [ + "queryable" + ] + }, + "TypeFeatureInfoNotQueryable": { + + "properties": { + "queryable": { + "const": false, + "description": "Do not allow querying.", + "type": "boolean" + } + }, + "required": [ + "queryable" + ], + "type": "object" + }, + + "TypeStrokeSymbolConfig": { + + "type": "object", + "description": "Stroke style for vector features.", + "minProperties": 1, + "properties": { + "color": { + "type": "string" + }, + "lineStyle": { + "enum": [ + "dash", + "dash-dot", + "dash-dot-dot", + "dot", + "longDash", + "longDash-dot", + "null", + "shortDash", + "shortDash-dot", + "shortDash-dot-dot", + "solid" + ] + }, + "width": { + "type": "number" + } + }, + "required": [ + "color", + "width", + "lineStyle" + ] + }, + + "TypeLineStringVectorConfig": { + + "type": "object", + "properties": { + "type": { "type":"string", + "default": "lineString", + "enum": [ + "lineString" + ] + }, + "stroke": { "$ref": "#/definitions/TypeStrokeSymbolConfig" } + }, + "required": [ + "type", + "stroke" + ] + }, + + "TypePolygonVectorConfig": { + + "type": "object", + "properties": { + "type": {"type":"string", "default": "filledPolygon", + "enum": ["filledPolygon"] + }, + "color": { "type": "string" }, + "stroke": { "$ref": "#/definitions/TypeStrokeSymbolConfig" }, + "paternSize": { + "type": "number", + "description": "Distance between patern lines. Default = 8" + }, + "paternWidth": { + "type": "number", + "description": "Patern line width.default = 1." + }, + "fillStyle": { + "enum": [ + "solid", + "backwardDiagonal", + "cross", + "diagonalCross", + "forwardDiagonal", + "horizontal", + "null", + "vertical" + ], + "description": "Kind of filling for vector features. Default = solid. " + } + }, + "required": [ + "type", + "stroke" + ] + }, + + "TypeSimpleSymbolVectorConfig": { + + "type": "object", + "properties": { + "type": {"type":"string", + "default": "simpleSymbol", + "enum": ["simpleSymbol"] + }, + "rotation": { + "type": "number", + "description": "Symbol rotation in radians." + }, + "color": { "type": "string" }, + "stroke": { "$ref": "#/definitions/TypeStrokeSymbolConfig" }, + "size": { "type": "number" }, + "offset": { + "type": "array", + "items": { + "type": "number" + }, + "minItems": 2, + "maxItems": 2 + }, + "symbol": { + "enum": [ + "circle", + "+", + "diamond", + "square", + "triangle", + "X", + "star" + ] + } + }, + "required": + ["type", + "symbol" + ] + }, + + "TypeIconSymbolVectorConfig": { + + "type": "object", + "properties": { + "type": {"type":"string", + "default": "iconSymbol", + "enum": ["iconSymbol"] + }, + "mimeType": { "type": "string" }, + "src": { "type": "string" }, + "width": { + "type": "integer", + "description": "Icon width in pixel." + }, + "height": { + "type": "integer", + "description": "Icon height in pixel." + }, + "rotation": { + "type": "number", + "description": "Icon rotation in radians." + }, + "opacity": { + "type": "number", + "minimum": 0, + "maximum": 1, + "default": 1 + }, + "offset": { + "type": "array", + "items": { + "type": "number" + }, + "minItems": 2, + "maxItems": 2 + }, + "crossOrigin": { + "type": "string", + "description": "The crossOrigin attribute for loaded images. Note that you must provide a crossOrigin value if you want to access pixel data with the Canvas renderer." + } + }, + "required": ["type", "mimeType", "src"] + }, + + "TypeSimpleStyleConfig": { + + "type": "object", + "properties": { + "styleId": { + "type": "string" + }, + "styleType": { + "enum": ["simple"], + "default": "simple" + }, + "label": { + "type": "string" + }, + "settings": { "$ref": "#/definitions/TypeKindOfVectorSettings" } + }, + "required": [ + "styleType", + "label", + "settings" + ] + }, + + + "TypeUniqueValueStyleConfig": { + + "type": "object", + "properties": { + "styleId": { + "type": "string" + }, + "styleType": {"type":"string", + "default": "uniqueValue", + "enum": ["uniqueValue"] + }, + "defaultLabel": { + "type": "string", + "description": "Label used if field/value association is not found." + }, + "defaultSettings": { + "$ref": "#/definitions/TypeKindOfVectorSettings", + "description": "Settings used if field/value association is not found." + }, + "defaultVisible": { + "description": "Flag used to show/hide features associated to the default label (default: yes).", + "enum": [ + "yes", + "no", + "always" + ] + }, + "fields": { + "type": "array", + "items": { + "type": "string" + }, + "minItems": 1 + }, + "uniqueValueStyleInfo": { "$ref": "#/definitions/TypeUniqueValueStyleInfo" } + }, + "required": [ + "styleType", + "fields", + "uniqueValueStyleInfo" + ] + }, + + "TypeUniqueValueStyleInfo": { + "type": "array", + "items": { + + "type": "object", + "properties": { + "label": { + "type": "string" + }, + "settings": { + "$ref": "#/definitions/TypeKindOfVectorSettings" + }, + "values": { + "items": { + "oneOf": [ + { "title": "String Value", + "type": "string" + }, + { "title": "Numeric Value", + "type": "number" + } + ] + }, + "minItems": 1, + "type": "array" + }, + "visible": { + "description": "Flag used to show/hide features associated to the label (default: yes).", + "enum": [ + "yes", + "no", + "always" + ] + } + } + + }, + "minItems": 1, + "required": [ + "label", + "values", + "options" + ] + + }, + + "TypeValidMapProjectionCodes": { + "default": 3978, + "description": "Spatial Reference EPSG code supported (https://epsg.io/). We support Web Mercator and Lambert Conical Conform Canada.", + "enum": [ + 3978, + 3857 + ] + }, + + "TypeClassBreakStyleConfig": { + + "type": "object", + "properties": { + "styleId": { + "type": "string" + }, + "styleType": { + "default": "classBreaks", + "enum": ["classBreaks"] + }, + "field": { + "type": "string" + }, + "defaultLabel": { + "type": "string", + "description": "Label used if field/value association is not found." + }, + "defaultSettings": { + "$ref": "#/definitions/TypeKindOfVectorSettings", + "description": "Settings used if field/value association is not found." + }, + "defaultVisible": { + "description": "Flag used to show/hide features associated to the default label (default: yes).", + "default": "yes", + "enum": [ + "yes", + "no", + "always" + ] + }, + + "classBreakStyleInfo": { "$ref": "#/definitions/TypeClassBreakStyleInfo" } + }, + "required": ["styleType", "field", "classBreakStyleInfo"] + }, + + + "TypeClassBreakStyleInfo": { + + "type": "array", + "items": { + + "type": "object", + "properties": { + + "label": { + "type": "string" + }, + "minValue": { + "oneOf": [ + { "title": "minValue String value", + "type": "string" + }, + { "title": "minValue Numeric value", + "type": "number" + } + ] + }, + "maxValue": { + "oneOf": [ + { "title": "maxValue String value", + "type": "string" + }, + { "title": "maxValue Numeric value", + "type": "number" + } + ] + }, + "visible": { + "description": "Flag used to show/hide features associated to the label (default: yes).", + "enum": [ + "yes", + "no", + "always" + ], + "default" : ["no"] + }, + + "settings": { "$ref": "#/definitions/TypeKindOfVectorSettings" } + } + }, + "minItems": 1, + "required": ["label", "minValue", "maxValue", "settings"] + + }, + + "TypeKindOfVectorSettings": { + "oneOf": [ + { "title":"LineString", "$ref": "#/definitions/TypeLineStringVectorConfig" }, + { "title":"Polygon", "$ref": "#/definitions/TypePolygonVectorConfig" }, + { "title":"SimpleSymbol", "$ref": "#/definitions/TypeSimpleSymbolVectorConfig" }, + { "title":"IconSymbol", "$ref": "#/definitions/TypeIconSymbolVectorConfig" } + ] + }, + + "TypeStyleConfig": { + + "minProperties": 1, + "type": "object", + "Title": "Line Style Config", + "description":"Enter Line, Point and Polygon Style Config ", + "properties": { + "LineString": { "description":"Point Style Config ", + + "title":"Line Style", + + "$ref": "#/definitions/TypeStyleSettings" + }, + "Point": { "description": "Polygon Style Config", + "title":"Point Style", + + "$ref": "#/definitions/TypeStyleSettings" + }, + "Polygon": { + "title":"Polygon Style", + + "$ref": "#/definitions/TypeStyleSettings" + } + } + }, + + "TypeStyleSettings": { + "oneOf": [ {"title":"SimpleStyle", + "$ref": "#/definitions/TypeSimpleStyleConfig" + } , + {"title":"UniqueValueStyle", + "$ref": "#/definitions/TypeUniqueValueStyleConfig" + }, + {"title":"ClassBreakStyle", + "$ref": "#/definitions/TypeClassBreakStyleConfig" + } + ] + }, + + "TypeLayerInitialSettings": { + + "type": "object", + "properties": { + "bounds": { + "description": "The geographic bounding box that contains all the layer's features.", + "items": { + "type": "number" + }, + "maxItems": 4, + "minItems": 4, + "type": "array", + "default":[-16763712,5165908,-5688293,10649806] + }, + "opacity": { + "type": "number", + "minimum": 0, + "maximum": 1, + "default": 1, + "description": "Initial opacity setting." + }, + "visible": { + "default": "yes", + "description": "Initial visibility setting.", + "enum": [ + "yes", + "no", + "always" + ] + }, + "extent": { + "type": "array", + "minItems": 4, + "maxItems": 4, + "items": { + "type": "number" + },"default":[-16763712,5165908,-5688293,10649806], + "description": "The extent that constrains the view. Called with [minX, minY, maxX, maxY] extent coordinates." + }, + "minZoom": { + "type": "integer", + "minimum": 0, + "maximum": 50, + "description": "The minimum view zoom level (exclusive) above which this layer will be visible." + }, + "maxZoom": { + "type": "integer", + "minimum": 0, + "maximum": 50, + "description": "The maximum view zoom level (inclusive) above which this layer will be visible." + }, + "className": { + "type": "string", + "description": "A CSS class name to set to the layer element." + } + } + }, + + "TypeListOfEsriDynamicLayerEntryConfig": { + + "description": "This type is used recursively by the IsValidTypeListOfLayerEntryConfig method coded in config-validation.ts file. It completes the validation of the list of layer entry config.", + "items": { + "oneOf": [ + { "title": "GroupLayerEntry", + "$ref": "#/definitions/TypeLayerGroupEntryConfig" + }, + { "title": "EsriDynamicLayer","$ref": "#/definitions/TypeEsriDynamicLayerEntryConfig" + } + ] + }, + "minItems": 1, + "type": "array" + }, + + "TypeListOfEsriFeatureLayerEntryConfig": { + + "description": "This type is used recursively by the IsValidTypeListOfLayerEntryConfig method coded in config-validation.ts file. It completes the validation of the list of layer entry config.", + "items": { + "oneOf": [ + { "title": "GroupLayerEntry", + "$ref": "#/definitions/TypeLayerGroupEntryConfig" + }, + { "title": "VectorLayerEntry", "$ref": "#/definitions/TypeVectorLayerEntryConfig" + } + ] + }, + "minItems": 1, + "type": "array" + }, + + "TypeListOfGeoCoreLayerEntryConfig": { + + "description": "This type is used recursively by the IsValidTypeListOfLayerEntryConfig method coded in config-validation.ts file. It completes the validation of the list of layer entry config.", + "items": { + "oneOf": [ + { "title": "GroupLayerEntry", + "$ref": "#/definitions/TypeLayerGroupEntryConfig" + }, + { + "title": "GeocoreLayerEntry","$ref": "#/definitions/TypeGeocoreLayerEntryConfig" + } + ] + }, + "minItems": 1, + "type": "array" + }, + + "TypeListOfGeoJSONLayerEntryConfig": { + + "description": "This type is used recursively by the IsValidTypeListOfLayerEntryConfig method coded in config-validation.ts file. It completes the validation of the list of layer entry config.", + "items": { + "oneOf": [ + { "title" :"GroupLayerEntry", + "$ref": "#/definitions/TypeLayerGroupEntryConfig" + }, + { + "title": "VectorLayerEntry", "$ref": "#/definitions/TypeVectorLayerEntryConfig" + } + ] + }, + "minItems": 1, + "type": "array" + }, + + "TypeListOfImageStaticLayerEntryConfig": { + + "description": "This type is used recursively by the IsValidTypeListOfLayerEntryConfig method coded in config-validation.ts file. It completes the validation of the list of layer entry config.", + "items": { + "oneOf": [ + { "title" :"LayerGrouprEntry", + "$ref": "#/definitions/TypeLayerGroupEntryConfig" + }, + { + "title": "ImageStaticLayerEntry", "$ref": "#/definitions/TypeImageStaticLayerEntryConfig" + } + ] + }, + "minItems": 1, + "type": "array" + }, + + "TypeListOfGeoPackageLayerEntryConfig": { + + "description": "This type is used recursively by the IsValidTypeListOfLayerEntryConfig method coded in config-validation.ts file. It completes the validation of the list of layer entry config.", + "items": { + "oneOf": [ + { "title" :"GroupLayerEntry", + "$ref": "#/definitions/TypeLayerGroupEntryConfig" + }, + { + "title": "VectorLayerEntry", "$ref": "#/definitions/TypeVectorLayerEntryConfig" + } + ] + }, + "minItems": 1, + "type": "array" + }, + + + "TypeVectorSourceFormats": { + "enum": [ + "GeoJSON", + "EsriJSON", + "KML", + "WFS", + "featureAPI", + "GeoPackage" + ] , + "default": "GeoJSON", + "description": "The feature format used by the XHR feature loader when access path is set." + }, + + "TypeVectorSourceInitialConfig": { + + "type": "object", + "properties": { + "dataAccessPath": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The path (English/French) to reach the data to display. If not specified, metadatAccessPath will be assigne dto it." + }, + "format": { "$ref": "#/definitions/TypeVectorSourceFormats" }, + "dataProjection": { + "type": "string", + "description": "The projection code of the source. Used only for GeoJSON format. Default value is EPSG:4326. " + }, + "featureInfo": { "$ref": "#/definitions/TypeFeatureInfoLayerConfig" }, + + "postSettings": { + "type": "object", + "properties": { + "data": + { + "type": "object" + }, + "header": + { + "type": "object" + } + } + }, + "strategy": { + "default": "all", + "description": "The loading strategy to use. By default an all strategy is used, a one-off strategy which loads all features at once.", + "enum": [ + "all", + "bbox" + ] + } + } + }, + + + + "TypeSourceImageWmsInitialConfig": { + + "type": "object", + "properties": { + "dataAccessPath": { + "$ref": "#/definitions/TypeLocalizedString", + + "description": "The path (English/French) to reach the data to display. If not specified, metadatAccessPath will be assigne dto it." + }, + "crossOrigin": { + "type": "string", + "description": "The crossOrigin attribute for loaded images. Note that you must provide a crossOrigin value if you want to access pixel data with the Canvas renderer." + }, + "projection": { + "type": "integer", + "description": "Spatial Reference EPSG code supported (https://epsg.io/). We support Web Mercator and Lambert Conical Conform Canada." + }, + "featureInfo": { + "$ref": "#/definitions/TypeFeatureInfoLayerConfig" + }, + "serverType": { + "$ref": "#/definitions/TypeOfServer", + "description": "The type of the remote WMS server. The default value is mapserver." + }, + "style": { + "oneOf": [ + { "title":"Single style", + "description": "Single style to apply", + "type": "string" + }, + { "title":"Array of styles", + "description": "Array of style to choose.", + "items": { + "type": "string" + }, + "type": "array" + } + ] + } + } + }, + + "TypeOfServer": { + "enum": [ + "mapserver", + "geoserver", + "qgis"], + "description": "The type of the remote WMS server. The default value is mapserver." + }, + + "TypeSourceImageEsriInitialConfig": { + + "type": "object", + "properties": { + "dataAccessPath": { + "$ref": "#/definitions/TypeLocalizedString", + + "description": "The path (English/French) to reach the data to display. If not specified, metadatAccessPath will be assigne dto it." + }, + "crossOrigin": { + "type": "string", + "description": "The crossOrigin attribute for loaded images. Note that you must provide a crossOrigin value if you want to access pixel data with the Canvas renderer." + }, + "projection": { + "type": "integer", + "description": "Spatial Reference EPSG code supported (https://epsg.io/). We support Web Mercator and Lambert Conical Conform Canada." + }, + "featureInfo": { + "$ref": "#/definitions/TypeFeatureInfoLayerConfig" + }, + "format": { + "$ref": "#/definitions/TypeEsriFormatParameter" + }, + "transparent": { + "type": "boolean", + "default": true, + "description": "If true, the image will be exported with the background color of the map set as its transparent color. Only the .png and .gif formats support transparency." + } + } + }, + + "TypeEsriDynamicLayerEntryConfig": { + + "properties": { + "entryType": { + "type": "string", + "enum": [ + "raster-image" + ], + "default": "raster-image" + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer entry at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "layerFilter": { + "description": "Filter to apply on feature of this layer.", + "type": "string" + }, + "layerId": { + "description": "The id of the layer to display on the map.", + "type": "string" + }, + "layerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "layerPathEnding": { + "description": "The ending element of the layer configuration path.", + "type": "string" + }, + "schemaTag": { + "enum": [ + "esriDynamic" + ], + "default": "esriDynamic" + + }, + "source": { + "$ref": "#/definitions/TypeSourceImageEsriInitialConfig" + }, + "style": { + "$ref": "#/definitions/TypeStyleConfig" + } + }, + "required": [ + "schemaTag", + "entryType", + "layerId" + ], + "type": "object" + }, + + "TypeEsriFormatParameter": { + "enum": ["png", "jpg", "gif", "svg"], + "default": "png", + "description": "The format of the exported image. The default format is png." + }, + + "TypeSourceTileInitialConfig": { + + "properties": { + "dataAccessPath": { + "$ref": "#/definitions/TypeLocalizedString", + + "description": "The path (English/French) to reach the data to display. If not specified, metadatAccessPath will be assigne dto it." + }, + "featureInfo": { + "$ref": "#/definitions/TypeFeatureInfoNotQueryable" + }, + "crossOrigin": { + "type": "string", + "description": "The crossOrigin attribute for loaded images. Note that you must provide a crossOrigin value if you want to access pixel data with the Canvas renderer." + }, + "projection": { + "type": "integer", + "description": "Spatial Reference EPSG code supported (https://epsg.io/). We support Web Mercator and Lambert Conical Conform Canada." + }, + "tileGrid": { "$ref": "#/definitions/TypeTileGrid" } + } + }, + + "TypeTileGrid": { + + "type": "object", + "properties": { + "extent": { + "type": "array", + "maxItems": 4, + "minItems": 4, + "items": + { + "type": "number" + }, + "description": "The extent that constrains the view. Called with [minX, minY, maxX, maxY] extent coordinates." + }, + "origin": { + "type": "array", + "maxItems": 2, + "minItems": 2, + "items": + { + "type": "number" + } + , + "description": "The tile grid origin, i.e. where the x and y axes meet ([z, 0, 0]). Tile coordinates increase left to right and downwards. If not specified, extent must be provided." + }, + "resolutions": { + "type": "array", + "items": { + "type": "number" + }, + "description": "Resolutions. The array index of each resolution needs to match the zoom level. This means that even if a minZoom is configured, the resolutions array will have a length of maxZoom + 1." + }, + "tileSize": { + "type": "array", + "maxItems": 2, + "minItems": 2, + "items": + { + "type": "number" + }, + "default": [256, + 256 + ], + "description": "The tile grid origin, i.e. where the x and y axes meet ([z, 0, 0]). Tile coordinates increase left to right and downwards. If not specified, extent must be provided." + } + }, + "required": ["origin", "resolutions"] + }, + + "TypeVectorHeatmapLayerEntryConfig": { + + "type": "object", + "properties": { + "schemaTag": { + "enum": [ + "not used yet" + ], + "defautl":"not used yet" + + }, + "entryType": { + "type": "string", + "enum": [ + "vector-heatmap" + ], + "default": "vector-heatmap" + }, + "layerPathEnding": { + "description": "The ending element of the layer configuration path.", + "type": "string" + }, + "layerId": { + "type": "string", + "description": "The id of the layer to display on the map." + }, + "layerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer entry at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "source": { "$ref": "#/definitions/TypeVectorSourceInitialConfig" }, + "gradient": { + "type": "array", + "items": { + "type": "string" + }, + "uniqueItems": true, + "minItems": 2, + "default": ["#00f", + "#0ff", + "#0f0", + "#ff0", + "#f00" + ], + "description": "Color gradient of the heatmap, specified as an array of CSS color strings." + }, + "radius": { + "type": "number", + "description": "Radius size in pixels (default 8px)." + }, + "blur": { + "type": "number", + "description": "Blur size in pixels (default 15px)." + }, + "weight": { + "type": "string", + "description": "Feature attribute to use for the weight or a function (ADD FORMAT) that returns a weight from a feature." + } + }, + "required": ["schemaTag", + "layerId", + "entryType" + ] + }, + + "TypeVectorLayerEntryConfig": { + + "type": "object", + "properties": { + "entryType": { + "type": "string", + "default": "vector", + "enum": [ + "vector" + ] + }, + "layerId": { + "type": "string", + "description": "The id of the layer to display on the map." + }, + "layerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "layerFilter": { + "description": "Filter to apply on feature of this layer.", + "type": "string" + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer entry at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "source": { "$ref": "#/definitions/TypeVectorSourceInitialConfig" }, + "style": { "$ref": "#/definitions/TypeStyleConfig" }, + "layerPathEnding": { + "description": "The ending element of the layer configuration path.", + "type": "string" + }, + "schemaTag": { + "enum": [ + "GeoJSON", + "esriFeature", + "ogcWfs", + "ogcFeature", + "GeoPackage" + ] + } + }, + "required": [ + "layerId", + "schemaTag", + "entryType" + ] + }, + + "TypeVectorTileLayerEntryConfig": { + + "type": "object", + "description": "Layer sources providing vector data divided into a tile grid.", + "properties": { + "entryType": { + "type": "string", + "enum": [ + "vector-tile" + ], + "default": "vector-tile" + }, + "layerId": { + "type": "string", + "description": "The id of the layer to display on the map." + }, + "layerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "layerFilter": { + "description": "Filter to apply on feature of this layer.", + "type": "string" + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer entry at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "source": { + "$ref": "#/definitions/TypeVectorTileSourceInitialConfig", + "description": "Information used to configure the source of a vector tile layer." + }, + "layerPathEnding": { + "description": "The ending element of the layer configuration path.", + "type": "string" + }, + "style": { + "$ref": "#/definitions/TypeStyleConfig" + }, + "schemaTag": { + "enum": [ + "not used yet" + ] + } + }, + "required": [ + + "entryType", + "layerId" + ] + }, + + "TypeVectorTileSourceInitialConfig": { + + "type": "object", + "description": "Layer sources providing vector data divided into a tile grid.", + "properties": { + "dataAccessPath": { + "$ref": "#/definitions/TypeLocalizedString", + + "description": "The path (English/French) to reach the data to display. If not specified, metadatAccessPath will be assigne dto it." + }, + "format": { + "enum": ["GeoJSON", "EsriJSON", "KML", "WFS", "MVT", "featureAPI"], + "description": "The feature format used by the XHR feature loader when access path is set." + }, + "dataProjection": { + "type": "string", + "description": "The projection code of the source. Used only for GeoJSON format. Default value is EPSG:4326." + }, + "featureInfo": { "$ref": "#/definitions/TypeFeatureInfoLayerConfig" }, + "style": { "$ref": "#/definitions/TypeStyleConfig" }, + "tileGrid": { + "$ref": "#/definitions/TypeTileGrid" + } + + } + }, + + "TypeTileLayerEntryConfig": { + + "type": "object", + "properties": { + "entryType": { + "type": "string", + "enum": [ + "raster-tile" + ], + "default": "raster-tile" + }, + "layerId": { + "type": "string", + "description": "The id of the layer to display on the map." + }, + "layerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer entry at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "layerPathEnding": { + "description": "The ending element of the layer configuration path.", + "type": "string" + }, + "schemaTag": { + "enum": [ + "ogcWms", + "xyzTiles", + "vectorTiles" + ], + "default": "ogcWms" + }, + "source": { "$ref": "#/definitions/TypeSourceTileInitialConfig" } + }, + "required": [ + "schemaTag", + "entryType", + "layerId" + ] + }, + + "TypeListOfOgcWfsLayerEntryConfig": { + "description": "This type is used recursively by the IsValidTypeListOfLayerEntryConfig method coded in config-validation.ts file. It completes the validation of the list of layer entry config.", + "type": "array", + "minItems": 1, + + "items": { + "oneOf": [ + { "title" :"LayerGrouprEntry", + "$ref": "#/definitions/TypeLayerGroupEntryConfig" + }, + { "title" :"VectorLayerEntry", + "$ref": "#/definitions/TypeVectorLayerEntryConfig" + } + ] + } + }, + + "TypeListOfOgcFeatureLayerEntryConfig": { + + "description": "This type is used recursively by the IsValidTypeListOfLayerEntryConfig method coded in config-validation.ts file. It completes the validation of the list of layer entry config.", + "items": { + "oneOf": [ + { "title" :"LayerGroupEntry", + "$ref": "#/definitions/TypeLayerGroupEntryConfig" + }, + { "title" :"VectorLayerEntry", + "$ref": "#/definitions/TypeVectorLayerEntryConfig" + } + ] + }, + "minItems": 1, + "type": "array" + }, + + "TypeListOfOgcWmsLayerEntryConfig": { + + "description": "This type is used recursively by the IsValidTypeListOfLayerEntryConfig method coded in config-validation.ts file. It completes the validation of the list of layer entry config.", + "items": { + "oneOf": [ + { "title" :"GroupLayerEntry", + "$ref": "#/definitions/TypeLayerGroupEntryConfig" + }, + { "title" :"OgcWmsLayerEntry", + "$ref": "#/definitions/TypeOgcWmsLayerEntryConfig" + } + ] + }, + "minItems": 1, + "type": "array" + }, + + "TypeListOfXyzTilesLayerEntryConfig": { + + "description": "This type is used recursively by the IsValidTypeListOfLayerEntryConfig method coded in config-validation.ts file. It completes the validation of the list of layer entry config.", + "items": { + "oneOf": [ + { "title" :"GroupLayerEntry", + "$ref": "#/definitions/TypeLayerGroupEntryConfig" + }, + { "title" :"TileLayerEntry", + "$ref": "#/definitions/TypeTileLayerEntryConfig" + } + ] + }, + "minItems": 1, + "type": "array" + }, + + "TypeGeocoreLayerEntryConfig": { + + "type": "object", + "description": "Layer where configration is extracted by a configuration snippet stored on a server. The server configuration will handle bilangual informations.", + "properties": { + "entryType": { + "type": "string", + "enum": [ + "geocore" + ], + "default": "geocore" + }, + "layerId": { + "type": "string", + "description": "The id of the layer to display on the map." + }, + "geocoreLayerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer entry at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "listOfLayerEntryConfig": { + "$ref": "#/definitions/TypeListOfLayerEntryConfig", + "description": "The list of layer entry configurations to use from the GeoView layer group." + }, + "schemaTag": { + "enum": [ + "geoCore" + ], + "defaut": "geoCore" + }, + "source": { "$ref": "#/definitions/TypeSourceGeocoreConfig" } + }, + "required": ["schemaTag","entryType","layerId"] + }, + + "TypeSourceGeocoreConfig": { + + "type": "object", + "description": "Layer source providing geocore data.", + "properties": { + "dataAccessPath": { + "$ref": "#/definitions/TypeLocalizedString", + + "description": "The url path to the geoCore endpoint (optional, this value should be embeded in the GeoView API)." + }, + "featureInfo": { + "$ref": "#/definitions/TypeFeatureInfoNotQueryable" + } + } + }, + + "TypeOgcWmsLayerEntryConfig": { + "type": "object", + "properties": { + "entryType": { + "type": "string", + "enum": [ + "raster-image" + ], + "default": "raster-image" + }, + + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer entry at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "layerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "schemaTag": { + "enum": [ + "ogcWms" + ], + "default": "ogcWms" + }, + "layerId": { + "type": "string", + "description": "The id of the layer to display on the map." + }, + "layerPathEnding": { + "type": "string", + "description": "The ending element of the layer configuration path." + }, + "layerFilter": { + "type": "string", + "description": "Filter to apply on feature of this layer." + }, + "source": { + "$ref": "#/definitions/TypeSourceImageWmsInitialConfig" + }, + "style": { + "$ref": "#/definitions/TypeStyleConfig" + } + }, + "required": [ + "schemaTag", + "entryType", + "layerId" + ] + }, + + "TypeSourceImageStaticInitialConfig": { + + "properties": { + "crossOrigin": { + "description": "The crossOrigin attribute for loaded images. Note that you must provide a crossOrigin value if you want to access pixel data with the Canvas renderer.", + "type": "string" + }, + "dataAccessPath": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The path (English/French) to reach the data to display. If not specified, metadatAccessPath will be assigne dto it." + + }, + "extent": { + "description": "The extent of the static image. Called with [minX, minY, maxX, maxY] extent coordinates.", + "items": { + "type": "number" + }, + "maxItems": 4, + "minItems": 4, + "type": "array" + }, + "featureInfo": { + "$ref": "#/definitions/TypeFeatureInfoNotQueryable" + }, + "projection": { + "description": "Spatial Reference EPSG code supported (https://epsg.io/). We support Web Mercator and Lambert Conical Conform Canada.", + "type": "integer" + } + }, + "type": "object" + }, + + "TypeLayerEntryType": { "type": "string", + "enum": ["vector", + "vector-tile", + "vector-heatmap", + "raster-tile", + "raster-image", + "geoCore" + ], + "description": "Layer entry data type." + }, + + "TypeLayerGroupEntryConfig": { + + "type": "object", + "description": "Entry used to define a layer Group.", + + "properties": { + "entryType": { "type":"string", + + "enum": [ + "group" + ], + "default": "group" + }, + "layerId": { + "type": "string", + "description": "The id of the layer group to display on the map." + }, + "layerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer group (English/French)." + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer group entries at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "listOfLayerEntryConfig": { + "$ref": "#/definitions/TypeListOfLayerEntryConfig", + "description": "The list of layer entry configurations to use from the GeoView layer group." + } + }, + + "required": ["entryType", "layerId", "listOfLayerEntryConfig"] + }, + + + + + "TypeLayerEntryConfig": { + "type": "object", + "oneOf": [ + + { "title": "OgcWmsLayer", + + "properties": { + "schemaTag": { "type": "string", + + "default": "ogcWms" + }, + "entryType": { + "type": "string", + + + "default": "raster-image" + }, + + "layerId": { + "type": "string", + "description": "The id of the layer to display on the map." + }, + "layerPathEnding": { + "type": "string", + "description": "The ending element of the layer configuration path." + }, + + "layerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "layerFilter": { + "type": "string", + "description": "Filter to apply on feature of this layer." + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apTypeStyleConfiply to the layer entry at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "source": { + "$ref": "#/definitions/TypeSourceImageWmsInitialConfig" + }, + "style": { + "$ref": "#/definitions/TypeStyleConfig" + } + }, + "required": [ "entryType", + "schemaTag", + "layerId" + ] + }, + { "title": "LayerGroup", + + + "description": "Entry used to define a layer Group.", + + "properties": { + "entryType": {"type":"string", + + "enum": [ + "group" + ], + "default": "group" + }, + "layerId": { + "type": "string", + "description": "The id of the layer group to display on the map." + }, + "layerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer group (English/French)." + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer group entries at creation time. Initial settings are inherited from the parent in the configuration tree." + } + }, + + "required": ["entryType", "layerId"] + } , + {"title":"VectorTileLayer", + + + "description": "Layer sources providing vector data divided into a tile grid.", + "properties": { + "schemaTag": {"type": "string", + "enum": [ + "not used yet" + ], + "default": "not used yet" + }, + "entryType": { + "type": "string", + "enum": [ + "vector-tile" + ], + "default": "vector-tile" + }, + "layerPathEnding": { + "description": "The ending element of the layer configuration path.", + "type": "string" + }, + "layerId": { + "type": "string", + "description": "The id of the layer to display on the map." + }, + "layerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "layerFilter": { + "description": "Filter to apply on feature of this layer.", + "type": "string" + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer entry at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "source": { + "$ref": "#/definitions/TypeVectorTileSourceInitialConfig", + "description": "Information used to configure the source of a vector tile layer." + }, + "style": { + "$ref": "#/definitions/TypeStyleConfig" + } + }, + + "required": [ + "schemaTag", + "entryType", + "layerId" + ] + }, + + { + "title":"GeocoreLayer", + + "description": "Layer where configration is extracted by a configuration snippet stored on a server. The server configuration will handle bilangual informations.", + "properties": { + "schemaTag": { + "type":"string", + "enum": ["geoCore"],"defaut":"geoCore" + }, + "entryType": { + "type": "string", + "enum": ["geocore"],"default": "geocore" + }, + "layerId": { + "type": "string", + "description": "The id of the layer to display on the map." + }, + "geocoreLayerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer entry at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "source": { "$ref": "#/definitions/TypeSourceGeocoreConfig" + }, + "listOfLayerEntryConfig": { + "$ref": "#/definitions/TypeListOfLayerEntryConfig", + "description": "The list of layer entry configurations to use from the GeoView layer group." + } }, + "required": ["schemaTag","entryType","layerId"] + }, + + { "title": "VectorLayer", + + "properties": { + "schemaTag": {"type":"string", + "enum": ["GeoJSON","esriFeature","ogcWfs","ogcFeature","GeoPackage"],"default": "esriFeature" + }, + "entryType": { + "type": "string", + "enum": [ + "vector" + ] ,"default": "vector" + }, + "layerPathEnding": { + "description": "The ending element of the layer configuration path.", + "type": "string" + }, + "layerId": { + "type": "string", + "description": "The id of the layer to display on the map." + }, + "layerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "layerFilter": { + "description": "Filter to apply on feature of this layer.", + "type": "string" + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer entry at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "source": { "$ref": "#/definitions/TypeVectorSourceInitialConfig" }, + "style": { "$ref": "#/definitions/TypeStyleConfig" } + + }, + "required": ["layerId","schemaTag","entryType" ] + } + + , + { + "title": "EsriDynamicLayer", + + "properties": { + "schemaTag": { "type": "string", + "enum": [ + "esriDynamic" + ], + "default": "esriDynamic" + + }, + "entryType": { + "type": "string", + "enum": [ + "raster-image" + ], + "default": "raster-image" + }, + "layerId": { + "description": "The id of the layer to display on the map.", + "type": "string" + }, + "layerPathEnding": { + "description": "The ending element of the layer configuration path.", + "type": "string" + }, + "layerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "layerFilter": { + "description": "Filter to apply on feature of this layer.", + "type": "string" + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer entry at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "source": { + "$ref": "#/definitions/TypeSourceImageEsriInitialConfig" + }, + "style": { + "$ref": "#/definitions/TypeStyleConfig" + } + }, + "required": [ + "entryType", + "layerId", + "schemaTag" + ], + "type": "object" + }, + { + "title": "TileLayer", + + "properties":{ + "schemaTag": {"type": "string", + "enum": [ + "ogcWms", + "xyzTiles", + "vectorTiles" + ],"default": "ogcWms" + } , + "entryType": { + "type": "string", + "enum": [ + "raster-tile" + ] ,"default": "raster-tile" + }, + "layerId": { + "type": "string", + "description": "The id of the layer to display on the map." + }, + "layerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer entry at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "layerPathEnding": { + "description": "The ending element of the layer configuration path.", + "type": "string" + }, + "source": { "$ref": "#/definitions/TypeSourceTileInitialConfig" } + + }, + "required": [ + "schemaTag", + "entryType", + "layerId" + ] + } + + + ] + }, + + "TypeListOfLayerEntryConfig": { + "type": "array", + "minItems": 1, + "items": { + "$ref": "#/definitions/TypeLayerEntryConfig" + } + }, + + "TypeMapConfig": { + + "type": "object", + "properties": { + "basemapOptions": { "$ref": "#/definitions/TypeBasemapOptions" }, + "interaction": { "$ref": "#/definitions/TypeInteraction" }, + "listOfGeoviewLayerConfig": { "$ref": "#/definitions/TypeListOfGeoviewLayerConfig" }, + "viewSettings": { "$ref": "#/definitions/TypeViewSettings" }, + "extraOptions": { + "type": "object", + "description": "Additional options used for OpenLayers map options" + } + }, + "required": ["basemapOptions", "interaction", "viewSettings"] + }, + + "TypeBasemapOptions": { + + "type": "object", + "properties": { + "basemapId": { "$ref": "#/definitions/TypeBasemapId" }, + + "shaded": { + "type": "boolean", + "default": true, + "title": "Enable or disable shaded basemap (if basemap id is set to shaded then this should be false)." + + }, + "labeled": { + "type": "boolean", + "default": true, + + "title": "Enable or disable basemap labels" + } + }, + "required": ["basemapId", "shaded", "labeled"] + }, + + "TypeBasemapId": { + "description": "Id of the basemap to use." , + "enum": ["transport", "osm", "simple", "nogeom", "shaded"], + "default": "transport" + + }, + + "TypeInteraction": { + "enum": ["static", "dynamic"], + "default": "dynamic", + "description": "If map is dynamic (pan/zoom) or static to act as a thumbnail (no nav bar)." + }, + + "TypeListOfGeoviewLayerConfig": { + + "description": "List of GeoView Layers in the order which they should be added to the map.", + "type": "array", + + "items": { + "$ref": "#/definitions/TypeGeoviewLayerConfig" + } + }, + + "TypeGeoviewLayerConfig": { + + "type": "object", + "properties": { + "externalDateFormat": { + "description": "Date format used by the getFeatureInfo to output date variable.", + "type": "string" + }, + "geoviewLayerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "metadataAccessPath": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The GeoView layer access path (English/French)." + }, + "geoviewLayerId": { + "description": "The id of the layer for referencing within the viewer (does not relate directly to any external service). The id will have the language extension (id-'lang').", + "type": "string" + }, + "geoviewLayerType": { + "$ref": "#/definitions/TypeGeoviewLayerType", + "description": "Type of GeoView layer." + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the GeoView layer at creation time." + }, + "listOfLayerEntryConfig": { + "$ref": "#/definitions/TypeListOfLayerEntryConfig", + "description": "The layer entries to use from the GeoView layer." + }, + "serviceDateFormat": { + "description": "Date format used by the service endpoint.", + "type": "string" + } + }, + "required": [ + "geoviewLayerType", + "listOfLayerEntryConfig" + ] + }, + + "TypeGeoviewLayerType": { + "type": "string", + "enum": [ + "esriDynamic", + "esriFeature", + "GeoJSON", + "geoCore", + "GeoPackage", + "xyzTiles", + "ogcFeature", + "ogcWfs", + "ogcWms", + "imageStatic", + "vectorTiles" + ], + "default": [ + "esriDynamic" + ], + "description": "Type of GeoView layer." + } + , + "TypeImageStaticLayerEntryConfig": { + + "properties": { + "entryType": { + "enum": [ + "raster-image" + ] + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer entry at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "layerId": { + "description": "The id of the layer to display on the map.", + "type": "string" + }, + "layerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "layerPathEnding": { + "description": "The ending element of the layer configuration path.", + "type": "string" + }, + "schemaTag": { + "enum": [ + "imageStatic" + ] + }, + "source": { + "$ref": "#/definitions/TypeSourceImageStaticInitialConfig" + } + }, + "required": [ + "schemaTag", + "entryType", + "layerId" + ], + "type": "object" + }, + + "TypeViewSettings": { + + "type": "object", + + "properties": { + "center": { + "type": "array", + "items": [ + + { + "type": "number", + "minimum": -160, + "maximum": 160, + "default": -106, + "description": "Initial longitude value for map center." + }, + { + "type": "number", + "minimum": -80, + "maximum": 80, + "default": 60, + "description": "Initial latitude value for map center." + } + + ] + + }, + "enableRotation": { + "type": "boolean", + "default": true, + "title": "Enable rotation. If false, a rotation constraint that always sets the rotation to zero is used." + }, + "extent": { + "type": "array", + "minItems":4, + "maxItems":4, + "items": { + + "type": "number" + + },"default":[-16763712,5165908,-5688293,10649806], + "description": "The extent that constrains the view. Called with [minX, minY, maxX, maxY] extent coordinates." + }, + "minZoom": { + "type": "integer", + "description": "The minimum zoom level used to determine the resolution constraint. If not set, will use default from basemap.", + "minimum": 0, + "maximum": 50 + }, + "maxZoom": { + "type": "integer", + "description": "The maximum zoom level used to determine the resolution constraint. If not set, will use default from basemap.", + "minimum": 0, + "maximum": 50 + }, + "projection": { "$ref": "#/definitions/TypeValidMapProjectionCodes" }, + "rotation": { + "type": "integer", + "minimum": -360, + "maximum": 360, + "default": 0, + "description": "The initial rotation for the view in degree (positive rotation clockwise, 0 means North). Will be converted to radiant by the viewer." + }, + "zoom": { + "type": "number", + "minimum": 0, + "maximum": 28, + "default": 12, + "description": "Initial map zoom level. Zoom level are define by the basemap zoom levels." + } + }, + "required": ["zoom", "center"] + }, + + "TypeAppBarProps": { + "default": [ + "geolocator" + ], + "description": "Controls availalbe on the application bar.", + "items": { + "enum": [ + "geolocator", + "export" + ] + }, + "minItems": 0, + "type": "array", + "uniqueItems": true + + }, + + "TypeNavBarProps": { + "type": "array", + "uniqueItems": true, + "items": { + "enum": [ + "zoom", + "fullscreen", + "home", + "location", + "export" + ] + }, + "default": [ + "zoom", + "fullscreen", + "home" + ], + "description": "Controls availalbe on the navigation bar.", + "minItems": 0 + }, + + "TypeFooterTabsProps": { + "type": "object", + + "properties": { + "tabs": { + "type": "object", + "description": "Available tabs", + "properties": { + "core": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "legend", + "layers", + "details", + "data-table", + "time-slider", + "geochart" + ] + }, + "minItems": 1, + "default": [ + "legend", + "layers", + "details", + "data-table" + ], + "uniqueItems": true, + "description": "Default core tabs of footer panel to use" + }, + "custom": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "defaultTabs": { + "type": "string" + }, + "contentHTML": { + "type": "string" + } + } + }, + "minItems": 0, + "default": [], + "uniqueItems": true, + "description": "Custom tabs of footer panel to use" + } + } + + }, + "collapsed": { + "type": "boolean", + "default": false, + "description": "State of footer panel when map is loaded (expanded or collapsed)" + } + }, + "required": [ + "tabs" + ] + }, + + "TypeAppBarTabsProps": { + "type": "object", + + "properties": { + "tabs": { + "type": "object", + "description": "Available tabs", + "properties": { + "core": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "basemap-panel", + "layers", + "geochart" + ] + }, + "minItems": 1, + "default": [ "basemap-panel"], + "uniqueItems": true, + "description": "Default core tabs of app-bar to use" + }, + "custom": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "defaultTabs": { + "type": "string" + }, + "contentHTML": { + "type": "string" + } + } + }, + "minItems": 0, + "default": [], + "uniqueItems": true, + "description": "Custom tabs of app-bar to use" + } + } + + }, + "collapsed": { + "type": "boolean", + "default": false, + "description": "State of app-bar when map is loaded (expanded or collapsed)" + } + }, + "required": [ + "tabs" + ] + }, + + "TypeOverviewMapProps": { + "type": "object", + + "properties": { + "hideOnZoom": { + "type": "number", + "minimum": 0, + "maximum": 10, + "default": 0, + "description": "Minimum zoom level to show overview map" + } + } + }, + + "TypeMapComponents": { + "type": "array", + "uniqueItems": true, + "items": { + "enum": [ + "overview-map", + "north-arrow", + "geolocator" + ] + }, + "default": [ + "overview-map", + "north-arrow", + "geolocator" + ], + "description": "Core components to initialize on viewer load. The schema for those are inside this file.", + + "minItems": 0 + }, + + "TypeMapCorePackages": { + "type": "array", + "uniqueItems": true, + "items": { + "enum": [ + "basemap-panel", + "layers-panel", + "details-panel", + "geolocator-panel", + "swiper", + "geochart", + "time-slider" + ] + }, + "default": ["basemap-panel", + "layers-panel", + "details-panel" + ], + "description": "Core packages to initialize on viewer load. The schema for those are on their own package. NOTE: config from packages are in the same loaction as core config (<>-<>.json).", + + "minItems": 0 + }, + + "TypeExternalPackages": { + "type": "array", + "items": { + + "type": "object", + "properties": { + "name": { + "type": "string", + + + "description": "External Package name. The name must be ideintical to the window external package object to load." + }, + "configUrl": { + "type": "string", + + "format": "uri", + "description": "The url to the external package configuration setting. The core package will read the configuration and pass it inside the package." + } + }, + "required": ["name"] + }, + "default": [], + "description": "List of external packages to initialize on viewer load.", + "minItems": 0 + }, + + "TypeServiceUrls": { + + "type": "object", + "description": "Service endpoint urls", + "properties": { + "keys": { + "type": "string", + "default": "https://geocore.api.geo.ca", + + "description": "Service end point to access API for layers specification (loading and plugins parameters). By default it is GeoCore but can be another endpoint with similar output." + }, + "geolocator": { + "type": "string", + + "description": "Service end point to access geo location of searched value." + }, + + "proxyUrl": { + "type": "string", + + "description": "An optional proxy to be used for dealing with same-origin issues. URL must either be a relative path on the same server or an absolute path on a server which sets CORS headers." + } + }, + "required": [ + "keys" + ] + }, + + "TypeDisplayLanguage": { + "enum": ["en", "fr"], + "description": "Display languages supported." + }, + + "TypeLocalizedLanguages": { + "enum": ["en", "fr"], + "description": "ISO 639-1 code indicating the languages supported by the configuration file." + }, + + "TypeListOfLocalizedLanguages": { + "type": "array", + "uniqueItems": true, + "items": { "$ref": "#/definitions/TypeLocalizedLanguages" }, + "default": ["en"], + "description": "ISO 639-1 code indicating the languages supported by the configuration file. It will use value(s) provided here to access bilangual configuration nodes. For value(s) provided here, each bilingual configuration node MUST provide a value.", + "minItems": 1 + }, + + "TypeValidVersions": { + "enum": ["1.0"], + "description": "The schema version that can be used to validate the configuration file. The schema should enumerate the list of versions accepted by this version of the viewer." + }, + + "TypeMapFeaturesInstance": { + + "description": "The map features configuration. This type is used by the IsValidTypeMapFeaturesInstance method coded in config-validation.ts file. It does the validation down to the list of layer entry config.", + "type": "object", + "properties": { + "mapId": { "type": "string" }, + "map": { "$ref": "#/definitions/TypeMapConfig" }, + "appBar": { "$ref": "#/definitions/TypeAppBarProps" }, + "navBar": { "$ref": "#/definitions/TypeNavBarProps" }, + "footerTabs": { "$ref": "#/definitions/TypeFooterTabsProps"}, + "appBarTabs": {"$ref": "#/definitions/TypeAppBarTabsProps"}, + "overviewMap": {"$ref": "#/definitions/TypeOverviewMapProps"}, + "components": { "$ref": "#/definitions/TypeMapComponents" }, + "corePackages": { "$ref": "#/definitions/TypeMapCorePackages" }, + "externalPackages": { "$ref": "#/definitions/TypeExternalPackages" }, + "serviceUrls": { "$ref": "#/definitions/TypeServiceUrls" }, + "suportedLanguages": { "$ref": "#/definitions/TypeListOfLocalizedLanguages" }, + "schemaVersionUsed": { "$ref": "#/definitions/TypeValidVersions" } + }, + "required": ["map", "suportedLanguages"] + } + }, + + "properties": { + "mapId": { "type": "string" }, + "map": { "$ref": "#/definitions/TypeMapConfig" }, + "theme": { "Title": "Map Theme Style", + "enum": [ + "dark", + "light", + "geo.ca" + ], + "default": "dark", + "description": "Theme style of the viewer." + }, + "appBar": { "$ref": "#/definitions/TypeAppBarProps" }, + "navBar": { "$ref": "#/definitions/TypeNavBarProps" }, + "overviewMap": {"$ref": "#/definitions/TypeOverviewMapProps"}, + "components": { "$ref": "#/definitions/TypeMapComponents" }, + "corePackages": { "$ref": "#/definitions/TypeMapCorePackages" }, + "externalPackages": {"$ref": "#/definitions/TypeExternalPackages"}, + "serviceUrls": { "$ref": "#/definitions/TypeServiceUrls" }, + "suportedLanguages": { "$ref": "#/definitions/TypeListOfLocalizedLanguages" }, + "versionUsed": { "$ref": "#/definitions/TypeValidVersions" } + } + }, + + + "areasOfInterest": { + "title": "Areas of Interest", + "type": "object", + "properties": { + "enable": { + "type": "boolean", + "title": "Enable", + "default":true + }, + "areas": { + "type": "array", + "items": { + "type": "object", + "properties": { + "title-en-CA": { + "type": "string", + "title": "English Title" + }, + "title-fr-CA": { + "type": "string", + "title": "French Title" + }, + "xmin": { + "type": "number", + "title": "Minimum value of x", + "default": -4844430 + }, + "ymin": { + "type": "number", + "title": "Minimum value of y", + "default": -1052774 + }, + "xmax": { + "type": "number", + "title": "Maximum value of x", + "default": 5666163 + }, + "ymax": { + "type": "number", + "title": "Maximum value of y", + "default": 4170111 + }, + "wkid": { + "type": "number", + "title": "Spatial Reference", + "default": 3978 + }, + "thumbnailUrl": { + "type": "string", + "title": "Thumbnail URL" + } + }, + "required": [ + "title-en-CA", + "title-fr-CA" + ] + } + } + } + }, + + + "swiper": { + "title": "Swiper", + "type": "object", + "properties": { + "enable": { + "type": "boolean", + "title": "Enable", + "default":true + }, + "type": { + "type": "string", + "title": "Type", + "enum": [ + "vertical", + "horizontal" + ], + "default": "vertical" + }, + "keyboardOffset": { + "type": "number", + "title": "Keyboard Movement", + "description": "Pixel value of swiper displacement.", + "default": 10, + "minimum": 1, + "maximum": 100 + }, + "layers": { + "type": "string", + "title": "Layers", + "description": "The id of the layer for referencing within the viewer (does not relate directly to any external service).", + "enum":[] + } + + + + + + }, + "required": [ + "type", + "keyboardOffset", + "layers" + ] + }, + + "thematicSlider": { + "title": "Thematic Slider", + "type": "object", + "properties": { + "enable": { + "type": "boolean", + "title": "Enable", + "default":true + }, + "open": { + "type": "boolean", + "title": "Open by default", + "default": true + }, + "autorun": { + "type": "boolean", + "title": "Start animation on load", + "defaul": false + }, + "loop": { + "type": "boolean", + "title": "Play the animation in loop", + "default": false + }, + "slider": { + "type": "boolean", + "title": "Enable slider control", + "default": true + }, + "stack": { + "type": "boolean", + "title": "Stack layer visibility", + "default": false + }, + "legendStack": { + "type": "boolean", + "title": "Stack legend items (useful with the stack option to see all active elements legend)", + "default": true + }, + "layers": { + "type": "array", + "title": "Layers", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "The id of the layer for referencing within the viewer (does not relate directly to any external service).", + "title": "Layer id", + "enum":[] + + }, + "duration": { + "type": "number", + "title": "Animation duration in milliseconds", + "minimum": 3000, + "default": 3000 + }, + "title": { + "type": "string", + "title": "Title for this layer animation" + }, + "description": { + "type": "string", + "title": "Description for this layer animation" + }, + "legend": { + "type": "array", + "title": "Legend", + "description": "Add items for a custom legend, leave it blank for default legend.", + "default": [], + "items": { + "type": "object", + "properties": { + "label": { + "type": "string", + "title": "Label" + }, + "image": { + "type": "object", + "properties": { + "url": { + "type": "string", + "title": "URL", + "default": "" + }, + "width": { + "type": "number", + "title": "Width", + "minimum": 25, + "maximum": 150, + "default": 150 + }, + "height": { + "type": "number", + "title": "Height", + "minimum": 25, + "maximum": 150, + "default": 150 + } + }, + "required": [ + "url", + "width", + "height" + ] + } + }, + "required": [ + "image" + ] + } + } + }, + "required": [ + "id", + "duration" + ] + } + }, + "required": [ + "layers" + ] + } + } + } + ] + } + + diff --git a/src/components/db - feb7 no changes.json b/src/components/db - feb7 no changes.json new file mode 100644 index 0000000..9895182 --- /dev/null +++ b/src/components/db - feb7 no changes.json @@ -0,0 +1,3074 @@ +{ + + "plugins": [ + + { "draw": { + + "title": "Draw", + + + + "type": "object", + "properties": { + + "enable": { + "type": "boolean", + "title": "Enable", + "default":true + }, + "open": { + + "type": "boolean", + "title": "Open by default", + "default": true + }, + "tools": { + "type": "array", + "title": "Tools", + "minItems":0, + "uniqueItems": true, + "items":{ + "enum": [ + "picker", + "point", + "polyline", + "polygon", + "edit", + "measure", + "extent", + "write", + "read" + ] + }, + + + "description": "Tools to add to draw toolbar.", + "default": [ + "picker", + "point", + "polyline", + "polygon", + "edit", + "measure", + "extent", + "write", + "read" + ] + } + + }, + "required": [ + "enabled", + "open","tools" + ] + },"chart": { + + "title": "Chart", + "type": "object", + "properties": { + + "enable": { + "type": "boolean", + "title": "Enable", + "description":"chart", + + "default":true + + + }, + "type": { + "title": "Chart Type", + "type": "string", + "enum": [ + "pie", + "bar", + "line" + ], + + "default": "pie" + }, + "title": { + "title": "Title", + "type": "string", + "default": "" + }, + "labelsPie": { + "type": "object", + "title": "Labels", + "properties": { + "type": { + "title": "Type", + "type": "string", + "enum": [ + "field", + "config" + ], + "description": "Retreive the labels from a field or from the configuration.", + "default": "config" + }, + "values": { + "title": "Values", + "type": "string", + "description": "Values separated by semi colon or field name.", + "default": "" + }, + "split": { + "title": "Split Character", + "type": "string", + "description": "Character to use to split list of values.", + "default": ";" + } + }, + "required": [ + "type", + "values", + "split" + ] + }, + "options": { + "title": "Options", + "type": "object", + "properties": { + "colors": { + "title": "Datasets Colors", + "type": "string", + "description": "Hexadecimal color code separated by semicolon. If not provided, default colors will be use.", + "default": "" + }, + "cutOut": { + "title": "Cut Out Percentage", + "type": "number", + "description": "Cut out percentage to use to give doughnut effect.", + "default": 0, + "minimum": 0, + "maximum": 80 + } + }, + "required": [ + "cutOut" + ] + }, + "axis": { + "type": "object", + "title": "Labels", + "properties": { + "xAxis": { + "title": "X Axis", + "type": "object", + "properties": { + "title": { + "title": "Title", + "type": "string", + "default": "" + }, + "type": { + "title": "Type", + "type": "string", + "enum": [ + "field", + "config", + "linear", + "date" + ], + "description": "Retreive the labels from a field or configuration for bar chart or from values (linear or time) for line chart.", + "default": "config" + }, + "values": { + "title": "Values", + "type": "string", + "description": "Values separated by semicolon or field name.", + "default": "" + }, + "split": { + "title": "Split Character", + "type": "string", + "description": "Character to use to split list of values.", + "default": ";" + } + }, + "required": [ + "type", + "values", + "split" + ] + }, + "yAxis": { + "title": "Y Axis", + "type": "object", + "properties": { + "title": { + "title": "Title", + "type": "string", + "default": "" + }, + "type": { + "title": "Type", + "type": "string", + "enum": [ + "field", + "config", + "linear", + "time" + ], + "description": "Retreive the labels from a field or configuration for bar chart or from values (linear or time) for line chart.", + "default": "config" + }, + "values": { + "title": "Values", + "type": "string", + "description": "Values separated by semicolon or field name.", + "default": "" + }, + "split": { + "title": "Split Character", + "type": "string", + "description": "Character to use to split list of values.", + "default": ";" + } + }, + "required": [ + "type", + "values", + "split" + ] + }, + "required": [ + "xAxis", + "yAxis" + ] + } + }, + "layers": { + "type": "array", + "title": "Layers", + "items": { + "type": "object", + "properties": { + "id": { + "title": "Layer ID", + "type": "string", + "description": "", + "enum":["1"] + }, + "nameField": { + "type": "string", + "title": "Name Field", + "description": "Field name to use for the chart selection combo box when multiple charts." + }, + "type": { + "title": "Chart Data Type", + "type": "string", + "enum": [ + "inline", + "link" + ], + "description": "Type of data (inline for items inside the layer or link for items inside a link table).", + "default": "inline" + }, + "linkUrl": { + "type": "string", + "title": "Link URL", + "description": "URL of the link table." + }, + "linkField": { + "type": "string", + "title": "Link Field", + "description": "Field name for the link between the layer and the table." + }, + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "type": { + "title": "Type of data inside the field", + "type": "string", + "enum": [ + "single", + "combine" + ], + "description": "Single if there is only one value inside the field. Combine if we use time axis and time and value are part of the field.", + "default": "combine" + }, + "linkType": { + "title": "Type of link", + "type": "string", + "enum": [ + "single", + "multi" + ], + "description": "How data is structure inside the link table (single for one field for value and one for date OR multiple if there is multiple datasets inside one field and the chart needs to parse).", + "default": "single" + }, + "link": { + "title": "Link Field", + "type": "string", + "description": "Link field to link between layer and table." + }, + "date": { + "title": "Date Field", + "type": "string", + "description": "Field to use for the date" + }, + "measure": { + "title": "Measure Field", + "type": "string" + }, + "values": { + "title": "Label Values", + "type": "string", + "description": "Field name to get labels from for link type multi." + }, + "label": { + "type": "object", + "title": "Dataset Labels", + "properties": { + "type": { + "title": "Type", + "type": "string", + "enum": [ + "field", + "config" + ], + "description": "Retreive the labels from a field or from the configuration.", + "default": "config" + }, + "values": { + "title": "Values", + "type": "string", + "description": "Values separated by semicolon or field name.", + "default": "" + }, + "split": { + "title": "Split Character", + "type": "string", + "description": "Character to use to split list of values.", + "default": ";" + } + }, + "required": [ + "type", + "values", + "split" + ] + }, + "regex": { + "title": "Dataset splitter", + "type": "string", + "description": "

Regex value to split datasets inside the field.

This field is to manage when you have multiple datasets or combine values in the same field. To be able to separate datasets from values, we will use a regex expression. We encourage you to use your data and test your regex expression on a online site like https://regex101.com.

Below we list some samples of datasets and regex:

  • Sample 1
    • Data: [255;255;255];[120;232;23];[32;44;134]
    • Regex: \\\\[|\\\\];\\\\[|\\\\]
    • Ouput: 3 datasets (e.g. 255;255;255). Values inside dataset will be split by the field 'Values Splitter'.
  • Sample 2
    • Data: (2011-03-28,0.511),(2011-04-04,0.421)
    • Regex: \\\\(|\\\\),\\\\(|\\\\)
    • Ouput: 1 datasets, 2 pairs of values (e.g. 2011-03-28,0.511). Values inside are combined (y and x axis) and will be split by the field 'Values Splitter'.

Note: we need to double the '\\' character

", + "default": "\\(|\\),\\(|\\)" + }, + "split": { + "title": "Values splitter", + "type": "string", + "default": ",", + "description": "Character to use to split values inside a field. E.g. a field contains '10;20;30' means there is 3 values split by ';' or [1,2,3];[4,5,6] means there is 2 datasets with 3 values each split by ','." + }, + "prefix": { + "title": "Prefix", + "type": "string", + "default": "", + "description": "Prefix to add to data hover." + }, + "suffix": { + "title": "Suffix", + "type": "string", + "default": "", + "description": "Suffix to add to data hover." + } + }, + "required": [ + "type", + "measure", + "split" + ] + } + }, + "details": { + "type": "object", + "title": "Details", + "properties": { + "enabled": { + "type": "boolean", + "title": "Enable" + }, + "value": { + "type": "string", + "title": "Value", + "description": "String with the custom details in markdown notation." + } + } + } + }, + "required": [ + "id", + "nameField", + "type", + "data" + ] + } + }, + "required": [ + "type", + "layers" + ] + } + },"rangeSlider": { + "$id": "https://cgpv/schema", + "$schema": "http://json-schema.org/draft-07/schema#", + + "title": "Range Slider", + "type": "object", + "properties": { + "enable": { + "type": "boolean", + "title": "Enable", + "default": true + }, + "open": { + "type": "boolean", + "title": "Open by default", + "default": false + }, + "maximize": { + "type": "boolean", + "title": "Slider maximized by default", + "default": false + }, + "maximizeDesc": { + "type": "boolean", + "title": "Description section open by default", + "default": false + }, + "autorun": { + "type": "boolean", + "title": "Start animation on load", + "defaul": false + }, + "loop": { + "type": "boolean", + "title": "Play the animation in loop", + "default": false + }, + "reverse": { + "type": "boolean", + "title": "Animation in reverse mode", + "default": false + }, + "lock": { + "type": "boolean", + "title": "Lock handle", + "default": false + }, + "controls": { + "type": "array", + "minItems":0, + "uniqueItems": true, + + "items": { + "enum": [ + "lock", + "loop", + "delay", + "export", + "refresh", + "reverse" + ] + }, + "default": [ + "lock", + "delay" + ], + "title": "Slider bar controls" + + }, + "params": { + "type": "object", + "title": "Parameters", + "properties": { + "type": { + "title": "Slider Type", + "type": "string", + "enum": [ + "number", + "date", + "wmst" + ], + "description": "If the Date or WMS-T is selected, range and limit must be in milliseconds. Note: Date is for esri layer and WMS-T is for ogc WMS-T layer.", + "default": "number" + }, + "rangeType": { + "title": "Range Type", + "type": "string", + "enum": [ + "single", + "dual" + ], + "description": "Type of range (single for one handle or dual for 2 handles).", + "default": "dual" + }, + "stepType": { + "title": "Step Type", + "type": "string", + "enum": [ + "dynamic", + "static" + ], + "description": "Type of step (dynamic for open values or static from a list of values).", + "default": "dynamic" + }, + "precision": { + "title": "Precision", + "type": "string", + "enum": [ + "0", + "1", + "2", + "date", + "hour" + ], + "description": "Precision of numeric data (0, 1, 2) or date (Date, Hour).", + "default": "0" + }, + "delay": { + "title": "Animation Delay", + "type": "string", + "enum": [ + "3000", + "4000", + "5000", + "6000", + "7000" + ], + "description": "Delay between animations.", + "default": "3000" + }, + "rangeInterval": { + "type": "number", + "title": "Interval (in milliseconds for date data type)", + "default": -1, + "description": "When the limit type is dynamic, this option allows you to define a preset interval between the two handles. The value must be in milliseconds date data type. For other numerical value formats, enter the desired value directly. To convert a time interval into milliseconds, use the built-in converter. Will start at the beginning of the scroll bar, unless the \"Start at end\" option is enabled." + }, + "startRangeEnd": { + "type": "boolean", + "title": "Start interval at the end", + "default": false + }, + "range": { + "type": "object", + "title": "", + "properties": { + "min": { + "type": "number", + "title": "Minimum value of the range (in milliseconds for date data type)", + "description": "The minimum value of the range that corresponds to the position of the left handle. If not defined, the minimum limit will be used. The value must be in milliseconds date data type. For other numerical value formats, enter the desired value directly. To convert a date to milliseconds, use the site's built-in converter.", + "default": 0 + }, + "max": { + "type": "number", + "title": "Maximum value of the range (in milliseconds for date data type)", + "description": "The maximum value of the range that corresponds to the position of the right handle. If not defined, the maximum limit will be used. The value must be in milliseconds date data type. For other numerical value formats, enter the desired value directly. To convert a date to milliseconds, use the site's built-in converter.", + "default": 1 + } + } + }, + "limit": { + "type": "object", + "title": "Limits of the data set values", + "properties": { + "min": { + "type": "number", + "title": "Minimum Limit", + "description": "The minimum value contained in the dataset. If not defined, the value will be found using the values present in the used field of the layer. To convert a date to milliseconds, use the site's built-in converter.", + "default": 0 + }, + "max": { + "type": "number", + "title": "Maximum Limit", + "description": "The maximum value contained in the dataset. If not defined, the value will be found using the values present in the used field of the layer. To convert a date to milliseconds, use the site's built-in converter.", + "default": 1 + }, + "staticItems": { + "type": "array", + "title": "Static Limit Values", + "items": { + "title": "Value", + "type": "number" + }, + "default": [], + "description": "The values for static limit. Note: the minimum and maximum limits are used to define the lower and upper static limits. Enter only the intermediate values here." + } + } + }, + "units": { + "type": "string", + "title": "Units", + "description": "Shown at the right of the time axis. Keep it short to improve readability.", + "default": "" + }, + "description": { + "type": "string", + "title": "Description", + "description": "Description to add in the section below the slider." + } + }, + "required": [ + "type" + ] + }, + "layers": { + "type": "array", + "title": "Layers", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "The id of the layer for referencing within the viewer (does not relate directly to any external service).", + "title": "Layer id", + "enum":[] + + }, + "field": { + "type": "string", + "description": "The field name to use.", + "title": "Field Name", + "default": "" + }, + "isTimeAware": { + "type": "boolean", + "title": "Is Time Aware", + "default": true, + "description": "If time aware is true, the slider will use the TimeInfo (ESRI) or time dimension (WMS) to extract limits and range." + } + }, + "required": [ + "id, field", + "isTimeAware" + ] + } + } + }, + + "required": [ + "params", + "layers" + ] + }, + + + + "map": { + "$id": "https://cgpv/schema", + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "GeoView Core Config Schema", + + "version": 1.0, + "comments": "Configuration for GeoView core packages, each packages manages it own schema. It correspond to the TypeMapFeaturesInstance type.", + "comments": " in TypeLOcalized string I took out minProperties: 1,because it casused error messages eve if field was not requiered", + + "definitions": { + "TypeLocalizedString": { + + "type": "object", + "properties": { + "en": { + "type": "string", + "description": "The English version of the string." + }, + "fr": { + "type": "string", + "description": "The French version of the string. " + } + } + }, + + "TypeDetailsLayerConfig": { + + "type": "object", + "properties": { + + "parser": { + "type": "string", + "description": "A path to a javascript file with a function for parsing the layers identify output. Only needed if a custom template is being used." + }, + "template": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "A path to an html template (English/French) that will override default identify output." + } + }, + "required": ["template"] + }, + + "TypeFeatureInfoLayerConfig": { + + "type": "object", + "properties": { + "queryable": { + "type": "boolean", + "default": true, + "title": "Allow querying. Default = true." + }, + "customParser": { "$ref": "#/definitions/TypeDetailsLayerConfig" }, + "nameField": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display field (English/French) of the layer. If it is not present the viewer will make an attempt to find the first valid field." + }, + "outfields": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "A comma separated list of attribute names (English/French) that should be requested on query (all by default)." + }, + "fieldTypes": { + "type": "string", + "description": "A comma separated list of types. Type at index i is associated to the variable at index i." + }, + "aliasFields": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "A comma separated list of attribute names (English/French) that should be use for alias. If empty, no alias will be set if not found." + } + }, + "required": [ + "queryable" + ] + }, + "TypeFeatureInfoNotQueryable": { + + "properties": { + "queryable": { + "const": false, + "description": "Do not allow querying.", + "type": "boolean" + } + }, + "required": [ + "queryable" + ], + "type": "object" + }, + + "TypeStrokeSymbolConfig": { + + "type": "object", + "description": "Stroke style for vector features.", + "minProperties": 1, + "properties": { + "color": { + "type": "string" + }, + "lineStyle": { + "enum": [ + "dash", + "dash-dot", + "dash-dot-dot", + "dot", + "longDash", + "longDash-dot", + "null", + "shortDash", + "shortDash-dot", + "shortDash-dot-dot", + "solid" + ] + }, + "width": { + "type": "number" + } + }, + "required": [ + "color", + "width", + "lineStyle" + ] + }, + + "TypeLineStringVectorConfig": { + + "type": "object", + "properties": { + "type": { "type":"string", + "default": "lineString", + "enum": [ + "lineString" + ] + }, + "stroke": { "$ref": "#/definitions/TypeStrokeSymbolConfig" } + }, + "required": [ + "type", + "stroke" + ] + }, + + "TypePolygonVectorConfig": { + + "type": "object", + "properties": { + "type": {"type":"string", "default": "filledPolygon", + "enum": ["filledPolygon"] + }, + "color": { "type": "string" }, + "stroke": { "$ref": "#/definitions/TypeStrokeSymbolConfig" }, + "paternSize": { + "type": "number", + "description": "Distance between patern lines. Default = 8" + }, + "paternWidth": { + "type": "number", + "description": "Patern line width.default = 1." + }, + "fillStyle": { + "enum": [ + "solid", + "backwardDiagonal", + "cross", + "diagonalCross", + "forwardDiagonal", + "horizontal", + "null", + "vertical" + ], + "description": "Kind of filling for vector features. Default = solid. " + } + }, + "required": [ + "type", + "stroke" + ] + }, + + "TypeSimpleSymbolVectorConfig": { + + "type": "object", + "properties": { + "type": {"type":"string", + "default": "simpleSymbol", + "enum": ["simpleSymbol"] + }, + "rotation": { + "type": "number", + "description": "Symbol rotation in radians." + }, + "color": { "type": "string" }, + "stroke": { "$ref": "#/definitions/TypeStrokeSymbolConfig" }, + "size": { "type": "number" }, + "offset": { + "type": "array", + "items": { + "type": "number" + }, + "minItems": 2, + "maxItems": 2 + }, + "symbol": { + "enum": [ + "circle", + "+", + "diamond", + "square", + "triangle", + "X", + "star" + ] + } + }, + "required": + ["type", + "symbol" + ] + }, + + "TypeIconSymbolVectorConfig": { + + "type": "object", + "properties": { + "type": {"type":"string", + "default": "iconSymbol", + "enum": ["iconSymbol"] + }, + "mimeType": { "type": "string" }, + "src": { "type": "string" }, + "width": { + "type": "integer", + "description": "Icon width in pixel." + }, + "height": { + "type": "integer", + "description": "Icon height in pixel." + }, + "rotation": { + "type": "number", + "description": "Icon rotation in radians." + }, + "opacity": { + "type": "number", + "minimum": 0, + "maximum": 1, + "default": 1 + }, + "offset": { + "type": "array", + "items": { + "type": "number" + }, + "minItems": 2, + "maxItems": 2 + }, + "crossOrigin": { + "type": "string", + "description": "The crossOrigin attribute for loaded images. Note that you must provide a crossOrigin value if you want to access pixel data with the Canvas renderer." + } + }, + "required": ["type", "mimeType", "src"] + }, + + "TypeSimpleStyleConfig": { + + "type": "object", + "properties": { + "styleId": { + "type": "string" + }, + "styleType": { + "enum": ["simple"], + "default": "simple" + }, + "label": { + "type": "string" + }, + "settings": { "$ref": "#/definitions/TypeKindOfVectorSettings" } + }, + "required": [ + "styleType", + "label", + "settings" + ] + }, + + + "TypeUniqueValueStyleConfig": { + + "type": "object", + "properties": { + "styleId": { + "type": "string" + }, + "styleType": {"type":"string", + "default": "uniqueValue", + "enum": ["uniqueValue"] + }, + "defaultLabel": { + "type": "string", + "description": "Label used if field/value association is not found." + }, + "defaultSettings": { + "$ref": "#/definitions/TypeKindOfVectorSettings", + "description": "Settings used if field/value association is not found." + }, + "defaultVisible": { + "description": "Flag used to show/hide features associated to the default label (default: yes).", + "enum": [ + "yes", + "no", + "always" + ] + }, + "fields": { + "type": "array", + "items": { + "type": "string" + }, + "minItems": 1 + }, + "uniqueValueStyleInfo": { "$ref": "#/definitions/TypeUniqueValueStyleInfo" } + }, + "required": [ + "styleType", + "fields", + "uniqueValueStyleInfo" + ] + }, + + "TypeUniqueValueStyleInfo": { + "type": "array", + "items": { + + "type": "object", + "properties": { + "label": { + "type": "string" + }, + "settings": { + "$ref": "#/definitions/TypeKindOfVectorSettings" + }, + "values": { + "items": { + "oneOf": [ + { "title": "String Value", + "type": "string" + }, + { "title": "Numeric Value", + "type": "number" + } + ] + }, + "minItems": 1, + "type": "array" + }, + "visible": { + "description": "Flag used to show/hide features associated to the label (default: yes).", + "enum": [ + "yes", + "no", + "always" + ] + } + } + + }, + "minItems": 1, + "required": [ + "label", + "values", + "options" + ] + + }, + + "TypeValidMapProjectionCodes": { + "default": 3978, + "description": "Spatial Reference EPSG code supported (https://epsg.io/). We support Web Mercator and Lambert Conical Conform Canada.", + "enum": [ + 3978, + 3857 + ] + }, + + "TypeClassBreakStyleConfig": { + + "type": "object", + "properties": { + "styleId": { + "type": "string" + }, + "styleType": { + "default": "classBreaks", + "enum": ["classBreaks"] + }, + "field": { + "type": "string" + }, + "defaultLabel": { + "type": "string", + "description": "Label used if field/value association is not found." + }, + "defaultSettings": { + "$ref": "#/definitions/TypeKindOfVectorSettings", + "description": "Settings used if field/value association is not found." + }, + "defaultVisible": { + "description": "Flag used to show/hide features associated to the default label (default: yes).", + "default": "yes", + "enum": [ + "yes", + "no", + "always" + ] + }, + + "classBreakStyleInfo": { "$ref": "#/definitions/TypeClassBreakStyleInfo" } + }, + "required": ["styleType", "field", "classBreakStyleInfo"] + }, + + + "TypeClassBreakStyleInfo": { + + "type": "array", + "items": { + + "type": "object", + "properties": { + + "label": { + "type": "string" + }, + "minValue": { + "oneOf": [ + { "title": "minValue String value", + "type": "string" + }, + { "title": "minValue Numeric value", + "type": "number" + } + ] + }, + "maxValue": { + "oneOf": [ + { "title": "maxValue String value", + "type": "string" + }, + { "title": "maxValue Numeric value", + "type": "number" + } + ] + }, + "visible": { + "description": "Flag used to show/hide features associated to the label (default: yes).", + "enum": [ + "yes", + "no", + "always" + ], + "default" : ["no"] + }, + + "settings": { "$ref": "#/definitions/TypeKindOfVectorSettings" } + } + }, + "minItems": 1, + "required": ["label", "minValue", "maxValue", "settings"] + + }, + + "TypeKindOfVectorSettings": {"type": "object", + "oneOf": [ + { "title":"LineString", "$ref": "#/definitions/TypeLineStringVectorConfig" }, + { "title":"Polygon", "$ref": "#/definitions/TypePolygonVectorConfig" }, + { "title":"SimpleSymbol", "$ref": "#/definitions/TypeSimpleSymbolVectorConfig" }, + { "title":"IconSymbol", "$ref": "#/definitions/TypeIconSymbolVectorConfig" } + ] + }, + + "TypeStyleConfig": { + + "minProperties": 1, + "type": "object", + "Title": "Line Style Config", + "description":"Enter Line, Point and Polygon Style Config ", + "properties": { + "LineString": { "description":"Point Style Config ", + + "title":"Line Style", + + "$ref": "#/definitions/TypeStyleSettings" + }, + "Point": { "description": "Polygon Style Config", + "title":"Point Style", + + "$ref": "#/definitions/TypeStyleSettings" + }, + "Polygon": { + "title":"Polygon Style", + + "$ref": "#/definitions/TypeStyleSettings" + } + } + }, + + "TypeStyleSettings": { "type": "object", + "oneOf": [ {"title":"SimpleStyle", + "$ref": "#/definitions/TypeSimpleStyleConfig" + } , + {"title":"UniqueValueStyle", + "$ref": "#/definitions/TypeUniqueValueStyleConfig" + }, + {"title":"ClassBreakStyle", + "$ref": "#/definitions/TypeClassBreakStyleConfig" + } + ] + }, + + "TypeLayerInitialSettings": { + + "type": "object", + "properties": { + "bounds": { + "description": "The geographic bounding box that contains all the layer's features.", + "items": { + "type": "number" + }, + "maxItems": 4, + "minItems": 4, + "type": "array", + "default":[-16763712,5165908,-5688293,10649806] + }, + "opacity": { + "type": "number", + "minimum": 0, + "maximum": 1, + "default": 1, + "description": "Initial opacity setting." + }, + "visible": { + "default": "yes", + "description": "Initial visibility setting.", + "enum": [ + "yes", + "no", + "always" + ] + }, + "extent": { + "type": "array", + "minItems": 4, + "maxItems": 4, + "items": { + "type": "number" + },"default":[-16763712,5165908,-5688293,10649806], + "description": "The extent that constrains the view. Called with [minX, minY, maxX, maxY] extent coordinates." + }, + "minZoom": { + "type": "integer", + "minimum": 0, + "maximum": 50, + "description": "The minimum view zoom level (exclusive) above which this layer will be visible." + }, + "maxZoom": { + "type": "integer", + "minimum": 0, + "maximum": 50, + "description": "The maximum view zoom level (inclusive) above which this layer will be visible." + }, + "className": { + "type": "string", + "description": "A CSS class name to set to the layer element." + } + } + }, + + + "TypeVectorSourceFormats": { + "enum": [ + "GeoJSON", + "EsriJSON", + "KML", + "WFS", + "featureAPI", + "GeoPackage" + ] , + "default": "GeoJSON", + "description": "The feature format used by the XHR feature loader when access path is set." + }, + + "TypeVectorSourceInitialConfig": { + + "type": "object", + "properties": { + "dataAccessPath": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The path (English/French) to reach the data to display. If not specified, metadatAccessPath will be assigne dto it." + }, + "format": { "$ref": "#/definitions/TypeVectorSourceFormats" }, + "dataProjection": { + "type": "string", + "description": "The projection code of the source. Used only for GeoJSON format. Default value is EPSG:4326. " + }, + "featureInfo": { "$ref": "#/definitions/TypeFeatureInfoLayerConfig" }, + + "postSettings": { + "type": "object", + "properties": { + "data": + { + "type": "object" + }, + "header": + { + "type": "object" + } + } + }, + "strategy": { + "default": "all", + "description": "The loading strategy to use. By default an all strategy is used, a one-off strategy which loads all features at once.", + "enum": [ + "all", + "bbox" + ] + } + } + }, + + + + "TypeSourceImageWmsInitialConfig": { + + "type": "object", + "properties": { + "dataAccessPath": { + "$ref": "#/definitions/TypeLocalizedString", + + "description": "The path (English/French) to reach the data to display. If not specified, metadatAccessPath will be assigne dto it." + }, + "crossOrigin": { + "type": "string", + "description": "The crossOrigin attribute for loaded images. Note that you must provide a crossOrigin value if you want to access pixel data with the Canvas renderer." + }, + "projection": { + "type": "integer", + "description": "Spatial Reference EPSG code supported (https://epsg.io/). We support Web Mercator and Lambert Conical Conform Canada." + }, + "featureInfo": { + "$ref": "#/definitions/TypeFeatureInfoLayerConfig" + }, + "serverType": { + "$ref": "#/definitions/TypeOfServer", + "description": "The type of the remote WMS server. The default value is mapserver." + }, + "style": { + "oneOf": [ + { "title":"Single style", + "description": "Single style to apply", + "type": "string" + }, + { "title":"Array of styles", + "description": "Array of style to choose.", + "items": { + "type": "string" + }, + "type": "array" + } + ] + } + } + }, + + "TypeOfServer": { + "enum": [ + "mapserver", + "geoserver", + "qgis"], + "description": "The type of the remote WMS server. The default value is mapserver." + }, + + "TypeSourceImageEsriInitialConfig": { + + "type": "object", + "properties": { + "dataAccessPath": { + "$ref": "#/definitions/TypeLocalizedString", + + "description": "The path (English/French) to reach the data to display. If not specified, metadatAccessPath will be assigne dto it." + }, + "crossOrigin": { + "type": "string", + "description": "The crossOrigin attribute for loaded images. Note that you must provide a crossOrigin value if you want to access pixel data with the Canvas renderer." + }, + "projection": { + "type": "integer", + "description": "Spatial Reference EPSG code supported (https://epsg.io/). We support Web Mercator and Lambert Conical Conform Canada." + }, + "featureInfo": { + "$ref": "#/definitions/TypeFeatureInfoLayerConfig" + }, + "format": { + "$ref": "#/definitions/TypeEsriFormatParameter" + }, + "transparent": { + "type": "boolean", + "default": true, + "description": "If true, the image will be exported with the background color of the map set as its transparent color. Only the .png and .gif formats support transparency." + } + } + }, + + "TypeEsriDynamicLayerEntryConfig": { + + "properties": { + "entryType": { + "type": "string", + "enum": [ + "raster-image" + ], + "default": "raster-image" + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer entry at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "layerFilter": { + "description": "Filter to apply on feature of this layer.", + "type": "string" + }, + "layerId": { + "description": "The id of the layer to display on the map.", + "type": "string" + }, + "layerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "layerPathEnding": { + "description": "The ending element of the layer configuration path.", + "type": "string" + }, + "schemaTag": { + "enum": [ + "esriDynamic" + ], + "default": "esriDynamic" + + }, + "source": { + "$ref": "#/definitions/TypeSourceImageEsriInitialConfig" + }, + "style": { + "$ref": "#/definitions/TypeStyleConfig" + } + }, + "required": [ + "schemaTag", + "entryType", + "layerId" + ], + "type": "object" + }, + + "TypeEsriFormatParameter": { + "enum": ["png", "jpg", "gif", "svg"], + "default": "png", + "description": "The format of the exported image. The default format is png." + }, + + "TypeSourceTileInitialConfig": { + + "properties": { + "dataAccessPath": { + "$ref": "#/definitions/TypeLocalizedString", + + "description": "The path (English/French) to reach the data to display. If not specified, metadatAccessPath will be assigne dto it." + }, + "featureInfo": { + "$ref": "#/definitions/TypeFeatureInfoNotQueryable" + }, + "crossOrigin": { + "type": "string", + "description": "The crossOrigin attribute for loaded images. Note that you must provide a crossOrigin value if you want to access pixel data with the Canvas renderer." + }, + "projection": { + "type": "integer", + "description": "Spatial Reference EPSG code supported (https://epsg.io/). We support Web Mercator and Lambert Conical Conform Canada." + }, + "tileGrid": { "$ref": "#/definitions/TypeTileGrid" } + } + }, + + "TypeTileGrid": { + + "type": "object", + "properties": { + "extent": { + "type": "array", + "maxItems": 4, + "minItems": 4, + "items": + { + "type": "number" + }, + "description": "The extent that constrains the view. Called with [minX, minY, maxX, maxY] extent coordinates." + }, + "origin": { + "type": "array", + "maxItems": 2, + "minItems": 2, + "items": + { + "type": "number" + } + , + "description": "The tile grid origin, i.e. where the x and y axes meet ([z, 0, 0]). Tile coordinates increase left to right and downwards. If not specified, extent must be provided." + }, + "resolutions": { + "type": "array", + "items": { + "type": "number" + }, + "description": "Resolutions. The array index of each resolution needs to match the zoom level. This means that even if a minZoom is configured, the resolutions array will have a length of maxZoom + 1." + }, + "tileSize": { + "type": "array", + "maxItems": 2, + "minItems": 2, + "items": + { + "type": "number" + }, + "default": [256, + 256 + ], + "description": "The tile grid origin, i.e. where the x and y axes meet ([z, 0, 0]). Tile coordinates increase left to right and downwards. If not specified, extent must be provided." + } + }, + "required": ["origin", "resolutions"] + }, + + "TypeVectorHeatmapLayerEntryConfig": { + + "type": "object", + "properties": { + "schemaTag": { + "enum": [ + "not used yet" + ], + "defautl":"not used yet" + + }, + "entryType": { + "type": "string", + "enum": [ + "vector-heatmap" + ], + "default": "vector-heatmap" + }, + "layerPathEnding": { + "description": "The ending element of the layer configuration path.", + "type": "string" + }, + "layerId": { + "type": "string", + "description": "The id of the layer to display on the map." + }, + "layerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer entry at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "source": { "$ref": "#/definitions/TypeVectorSourceInitialConfig" }, + "gradient": { + "type": "array", + "items": { + "type": "string" + }, + "uniqueItems": true, + "minItems": 2, + "default": ["#00f", + "#0ff", + "#0f0", + "#ff0", + "#f00" + ], + "description": "Color gradient of the heatmap, specified as an array of CSS color strings." + }, + "radius": { + "type": "number", + "description": "Radius size in pixels (default 8px)." + }, + "blur": { + "type": "number", + "description": "Blur size in pixels (default 15px)." + }, + "weight": { + "type": "string", + "description": "Feature attribute to use for the weight or a function (ADD FORMAT) that returns a weight from a feature." + } + }, + "required": ["schemaTag", + "layerId", + "entryType" + ] + }, + + "TypeVectorLayerEntryConfig": { + + "type": "object", + "properties": { + "entryType": { + "type": "string", + "default": "vector", + "enum": [ + "vector" + ] + }, + "layerId": { + "type": "string", + "description": "The id of the layer to display on the map." + }, + "layerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "layerFilter": { + "description": "Filter to apply on feature of this layer.", + "type": "string" + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer entry at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "source": { "$ref": "#/definitions/TypeVectorSourceInitialConfig" }, + "style": { "$ref": "#/definitions/TypeStyleConfig" }, + "layerPathEnding": { + "description": "The ending element of the layer configuration path.", + "type": "string" + }, + "schemaTag": { + "enum": [ + "GeoJSON", + "esriFeature", + "ogcWfs", + "ogcFeature", + "GeoPackage" + ] + } + }, + "required": [ + "layerId", + "schemaTag", + "entryType" + ] + }, + + "TypeVectorTileLayerEntryConfig": { + + "type": "object", + "description": "Layer sources providing vector data divided into a tile grid.", + "properties": { + "entryType": { + "type": "string", + "enum": [ + "vector-tile" + ], + "default": "vector-tile" + }, + "layerId": { + "type": "string", + "description": "The id of the layer to display on the map." + }, + "layerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "layerFilter": { + "description": "Filter to apply on feature of this layer.", + "type": "string" + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer entry at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "source": { + "$ref": "#/definitions/TypeVectorTileSourceInitialConfig", + "description": "Information used to configure the source of a vector tile layer." + }, + "layerPathEnding": { + "description": "The ending element of the layer configuration path.", + "type": "string" + }, + "style": { + "$ref": "#/definitions/TypeStyleConfig" + }, + "schemaTag": { + "enum": [ + "not used yet" + ] + } + }, + "required": [ + + "entryType", + "layerId" + ] + }, + + "TypeVectorTileSourceInitialConfig": { + + "type": "object", + "description": "Layer sources providing vector data divided into a tile grid.", + "properties": { + "dataAccessPath": { + "$ref": "#/definitions/TypeLocalizedString", + + "description": "The path (English/French) to reach the data to display. If not specified, metadatAccessPath will be assigne dto it." + }, + "format": { + "enum": ["GeoJSON", "EsriJSON", "KML", "WFS", "MVT", "featureAPI"], + "description": "The feature format used by the XHR feature loader when access path is set." + }, + "dataProjection": { + "type": "string", + "description": "The projection code of the source. Used only for GeoJSON format. Default value is EPSG:4326." + }, + "featureInfo": { "$ref": "#/definitions/TypeFeatureInfoLayerConfig" }, + "style": { "$ref": "#/definitions/TypeStyleConfig" }, + "tileGrid": { + "$ref": "#/definitions/TypeTileGrid" + } + + } + }, + + "TypeTileLayerEntryConfig": { + + "type": "object", + "properties": { + "entryType": { + "type": "string", + "enum": [ + "raster-tile" + ], + "default": "raster-tile" + }, + "layerId": { + "type": "string", + "description": "The id of the layer to display on the map." + }, + "layerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer entry at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "layerPathEnding": { + "description": "The ending element of the layer configuration path.", + "type": "string" + }, + "schemaTag": { + "enum": [ + "ogcWms", + "xyzTiles", + "vectorTiles" + ], + "default": "ogcWms" + }, + "source": { "$ref": "#/definitions/TypeSourceTileInitialConfig" } + }, + "required": [ + "schemaTag", + "entryType", + "layerId" + ] + }, + + + + "TypeGeocoreLayerEntryConfig": { + + "type": "object", + "description": "Layer where configration is extracted by a configuration snippet stored on a server. The server configuration will handle bilangual informations.", + "properties": { + "entryType": { + "type": "string", + "enum": [ + "geocore" + ], + "default": "geocore" + }, + "layerId": { + "type": "string", + "description": "The id of the layer to display on the map." + }, + "geocoreLayerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer entry at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "listOfLayerEntryConfig": { + "$ref": "#/definitions/TypeListOfLayerEntryConfig", + "description": "The list of layer entry configurations to use from the GeoView layer group." + }, + "schemaTag": { + "enum": [ + "geoCore" + ], + "defaut": "geoCore" + }, + "source": { "$ref": "#/definitions/TypeSourceGeocoreConfig" } + }, + "required": ["schemaTag","entryType","layerId"] + }, + + "TypeSourceGeocoreConfig": { + + "type": "object", + "description": "Layer source providing geocore data.", + "properties": { + "dataAccessPath": { + "$ref": "#/definitions/TypeLocalizedString", + + "description": "The url path to the geoCore endpoint (optional, this value should be embeded in the GeoView API)." + }, + "featureInfo": { + "$ref": "#/definitions/TypeFeatureInfoNotQueryable" + } + } + }, + + "TypeOgcWmsLayerEntryConfig": { + "type": "object", + "properties": { + "entryType": { + "type": "string", + "enum": [ + "raster-image" + ], + "default": "raster-image" + }, + + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer entry at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "layerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "schemaTag": { + "enum": [ + "ogcWms" + ], + "default": "ogcWms" + }, + "layerId": { + "type": "string", + "description": "The id of the layer to display on the map." + }, + "layerPathEnding": { + "type": "string", + "description": "The ending element of the layer configuration path." + }, + "layerFilter": { + "type": "string", + "description": "Filter to apply on feature of this layer." + }, + "source": { + "$ref": "#/definitions/TypeSourceImageWmsInitialConfig" + }, + "style": { + "$ref": "#/definitions/TypeStyleConfig" + } + }, + "required": [ + "schemaTag", + "entryType", + "layerId" + ] + }, + + "TypeSourceImageStaticInitialConfig": { + + "properties": { + "crossOrigin": { + "description": "The crossOrigin attribute for loaded images. Note that you must provide a crossOrigin value if you want to access pixel data with the Canvas renderer.", + "type": "string" + }, + "dataAccessPath": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The path (English/French) to reach the data to display. If not specified, metadatAccessPath will be assigne dto it." + + }, + "extent": { + "description": "The extent of the static image. Called with [minX, minY, maxX, maxY] extent coordinates.", + "items": { + "type": "number" + }, + "maxItems": 4, + "minItems": 4, + "type": "array" + }, + "featureInfo": { + "$ref": "#/definitions/TypeFeatureInfoNotQueryable" + }, + "projection": { + "description": "Spatial Reference EPSG code supported (https://epsg.io/). We support Web Mercator and Lambert Conical Conform Canada.", + "type": "integer" + } + }, + "type": "object" + }, + + "TypeLayerEntryType": { "type": "string", + "enum": ["vector", + "vector-tile", + "vector-heatmap", + "raster-tile", + "raster-image", + "geoCore" + ], + "description": "Layer entry data type." + }, + + "TypeLayerGroupEntryConfig": { + + "type": "object", + "description": "Entry used to define a layer Group.", + + "properties": { + "entryType": { "type":"string", + + "enum": [ + "group" + ], + "default": "group" + }, + "layerId": { + "type": "string", + "description": "The id of the layer group to display on the map." + }, + "layerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer group (English/French)." + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer group entries at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "listOfLayerEntryConfig": { + "$ref": "#/definitions/TypeListOfLayerEntryConfig", + "description": "The list of layer entry configurations to use from the GeoView layer group." + } + }, + + "required": ["entryType", "layerId", "listOfLayerEntryConfig"] + }, + + + + + "TypeLayerEntryConfig": { + "type": "object", + "oneOf": [ + + { "title": "OgcWmsLayer", + + "properties": { + "schemaTag": { "type": "string", + + "default": "ogcWms" + }, + "entryType": { + "type": "string", + + + "default": "raster-image" + }, + + "layerId": { + "type": "string", + "description": "The id of the layer to display on the map." + }, + "layerPathEnding": { + "type": "string", + "description": "The ending element of the layer configuration path." + }, + + "layerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "layerFilter": { + "type": "string", + "description": "Filter to apply on feature of this layer." + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apTypeStyleConfiply to the layer entry at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "source": { + "$ref": "#/definitions/TypeSourceImageWmsInitialConfig" + }, + "style": { + "$ref": "#/definitions/TypeStyleConfig" + } + }, + "required": [ "entryType", + "schemaTag", + "layerId" + ] + }, + { "title": "LayerGroup", + + + "description": "Entry used to define a layer Group.", + + "properties": { + "entryType": {"type":"string", + + "enum": [ + "group" + ], + "default": "group" + }, + "layerId": { + "type": "string", + "description": "The id of the layer group to display on the map." + }, + "layerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer group (English/French)." + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer group entries at creation time. Initial settings are inherited from the parent in the configuration tree." + } + }, + + "required": ["entryType", "layerId"] + } , + {"title":"VectorTileLayer", + + + "description": "Layer sources providing vector data divided into a tile grid.", + "properties": { + "schemaTag": {"type": "string", + "enum": [ + "not used yet" + ], + "default": "not used yet" + }, + "entryType": { + "type": "string", + "enum": [ + "vector-tile" + ], + "default": "vector-tile" + }, + "layerPathEnding": { + "description": "The ending element of the layer configuration path.", + "type": "string" + }, + "layerId": { + "type": "string", + "description": "The id of the layer to display on the map." + }, + "layerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "layerFilter": { + "description": "Filter to apply on feature of this layer.", + "type": "string" + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer entry at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "source": { + "$ref": "#/definitions/TypeVectorTileSourceInitialConfig", + "description": "Information used to configure the source of a vector tile layer." + }, + "style": { + "$ref": "#/definitions/TypeStyleConfig" + } + }, + + "required": [ + "schemaTag", + "entryType", + "layerId" + ] + }, + + { + "title":"GeocoreLayer", + + "description": "Layer where configration is extracted by a configuration snippet stored on a server. The server configuration will handle bilangual informations.", + "properties": { + "schemaTag": { + "type":"string", + "enum": ["geoCore"],"defaut":"geoCore" + }, + "entryType": { + "type": "string", + "enum": ["geocore"],"default": "geocore" + }, + "layerId": { + "type": "string", + "description": "The id of the layer to display on the map." + }, + "geocoreLayerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer entry at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "source": { "$ref": "#/definitions/TypeSourceGeocoreConfig" + }, + "listOfLayerEntryConfig": { + "$ref": "#/definitions/TypeListOfLayerEntryConfig", + "description": "The list of layer entry configurations to use from the GeoView layer group." + } }, + "required": ["schemaTag","entryType","layerId"] + }, + + { "title": "VectorLayer", + + "properties": { + "schemaTag": {"type":"string", + "enum": ["GeoJSON","esriFeature","ogcWfs","ogcFeature","GeoPackage"],"default": "esriFeature" + }, + "entryType": { + "type": "string", + "enum": [ + "vector" + ] ,"default": "vector" + }, + "layerPathEnding": { + "description": "The ending element of the layer configuration path.", + "type": "string" + }, + "layerId": { + "type": "string", + "description": "The id of the layer to display on the map." + }, + "layerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "layerFilter": { + "description": "Filter to apply on feature of this layer.", + "type": "string" + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer entry at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "source": { "$ref": "#/definitions/TypeVectorSourceInitialConfig" }, + "style": { "$ref": "#/definitions/TypeStyleConfig" } + + }, + "required": ["layerId","schemaTag","entryType" ] + } + + , + { + "title": "EsriDynamicLayer", + + "properties": { + "schemaTag": { "type": "string", + "enum": [ + "esriDynamic" + ], + "default": "esriDynamic" + + }, + "entryType": { + "type": "string", + "enum": [ + "raster-image" + ], + "default": "raster-image" + }, + "layerId": { + "description": "The id of the layer to display on the map.", + "type": "string" + }, + "layerPathEnding": { + "description": "The ending element of the layer configuration path.", + "type": "string" + }, + "layerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "layerFilter": { + "description": "Filter to apply on feature of this layer.", + "type": "string" + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer entry at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "source": { + "$ref": "#/definitions/TypeSourceImageEsriInitialConfig" + }, + "style": { + "$ref": "#/definitions/TypeStyleConfig" + } + }, + "required": [ + "entryType", + "layerId", + "schemaTag" + ], + "type": "object" + }, + { + "title": "TileLayer", + + "properties":{ + "schemaTag": {"type": "string", + "enum": [ + "ogcWms", + "xyzTiles", + "vectorTiles" + ],"default": "ogcWms" + } , + "entryType": { + "type": "string", + "enum": [ + "raster-tile" + ] ,"default": "raster-tile" + }, + "layerId": { + "type": "string", + "description": "The id of the layer to display on the map." + }, + "layerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer entry at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "layerPathEnding": { + "description": "The ending element of the layer configuration path.", + "type": "string" + }, + "source": { "$ref": "#/definitions/TypeSourceTileInitialConfig" } + + }, + "required": [ + "schemaTag", + "entryType", + "layerId" + ] + } + + + ] ,"default":"OgcWmsLayer" + }, + + "TypeListOfLayerEntryConfig": { + "type": "array", + "minItems": 1, + "items": { + "$ref": "#/definitions/TypeLayerEntryConfig" + } + }, + + "TypeMapConfig": { + + "type": "object", + "properties": { + "basemapOptions": { "$ref": "#/definitions/TypeBasemapOptions" }, + "interaction": { "$ref": "#/definitions/TypeInteraction" }, + "listOfGeoviewLayerConfig": { "$ref": "#/definitions/TypeListOfGeoviewLayerConfig" }, + "viewSettings": { "$ref": "#/definitions/TypeViewSettings" }, + "extraOptions": { + "type": "object", + "description": "Additional options used for OpenLayers map options" + } + }, + "required": ["basemapOptions", "interaction", "viewSettings"] + }, + + "TypeBasemapOptions": { + + "type": "object", + "properties": { + "basemapId": { "$ref": "#/definitions/TypeBasemapId" }, + + "shaded": { + "type": "boolean", + "default": true, + "title": "Enable or disable shaded basemap (if basemap id is set to shaded then this should be false)." + + }, + "labeled": { + "type": "boolean", + "default": true, + + "title": "Enable or disable basemap labels" + } + }, + "required": ["basemapId", "shaded", "labeled"] + }, + + "TypeBasemapId": { + "description": "Id of the basemap to use." , + "enum": ["transport", "osm", "simple", "nogeom", "shaded"], + "default": "transport" + + }, + + "TypeInteraction": { + "enum": ["static", "dynamic"], + "default": "dynamic", + "description": "If map is dynamic (pan/zoom) or static to act as a thumbnail (no nav bar)." + }, + + "TypeListOfGeoviewLayerConfig": { + + "description": "List of GeoView Layers in the order which they should be added to the map.", + "type": "array", + + "items": { + "$ref": "#/definitions/TypeGeoviewLayerConfig" + } + }, + + "TypeGeoviewLayerConfig": { + + "type": "object", + "properties": { + "geoviewLayerId": { + "description": "The id of the layer for referencing within the viewer (does not relate directly to any external service). The id will have the language extension (id-'lang').", + "type": "string" + }, + "geoviewLayerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "metadataAccessPath": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The GeoView layer access path (English/French)." + }, + "geoviewLayerType": { + "$ref": "#/definitions/TypeGeoviewLayerType", + "description": "Type of GeoView layer." + }, + "serviceDateFormat": { + "description": "Date format used by the service endpoint.", + "type": "string" + }, + "externalDateFormat": { + "description": "Date format used by the getFeatureInfo to output date variable.", + "type": "string" + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the GeoView layer at creation time." + }, + "listOfLayerEntryConfig": { + "$ref": "#/definitions/TypeListOfLayerEntryConfig", + "description": "The layer entries to use from the GeoView layer." + } + }, + "required": [ + "geoviewLayerId", + "geoviewLayerName", + "metadataAccessPath", + "geoviewLayerType", + "listOfLayerEntryConfig" + ] + }, + + "TypeGeoviewLayerType": { + "type": "string", + "enum": ["", + "esriDynamic", + "esriFeature", + "GeoJSON", + "geoCore", + "GeoPackage", + "xyzTiles", + "ogcFeature", + "ogcWfs", + "ogcWms", + "imageStatic", + "vectorTiles" + ], + "default": [ + "" + ], + "description": "Type of GeoView layer." + } + , + "TypeImageStaticLayerEntryConfig": { + + "properties": { + "entryType": { + "enum": [ + "raster-image" + ] + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer entry at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "layerId": { + "description": "The id of the layer to display on the map.", + "type": "string" + }, + "layerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "layerPathEnding": { + "description": "The ending element of the layer configuration path.", + "type": "string" + }, + "schemaTag": { + "enum": [ + "imageStatic" + ] + }, + "source": { + "$ref": "#/definitions/TypeSourceImageStaticInitialConfig" + } + }, + "required": [ + "schemaTag", + "entryType", + "layerId" + ], + "type": "object" + }, + + "TypeViewSettings": { + + "type": "object", + + "properties": { + "center": { + "type": "array", + "items": [ + + { + "type": "number", + "minimum": -160, + "maximum": 160, + "default": -106, + "description": "Initial longitude value for map center." + }, + { + "type": "number", + "minimum": -80, + "maximum": 80, + "default": 60, + "description": "Initial latitude value for map center." + } + + ] + + }, + "enableRotation": { + "type": "boolean", + "default": true, + "title": "Enable rotation. If false, a rotation constraint that always sets the rotation to zero is used." + }, + "extent": { + "type": "array", + "minItems":4, + "maxItems":4, + "items": { + + "type": "number" + + },"default":[-16763712,5165908,-5688293,10649806], + "description": "The extent that constrains the view. Called with [minX, minY, maxX, maxY] extent coordinates." + }, + "minZoom": { + "type": "integer", + "description": "The minimum zoom level used to determine the resolution constraint. If not set, will use default from basemap.", + "minimum": 0, + "maximum": 50 + }, + "maxZoom": { + "type": "integer", + "description": "The maximum zoom level used to determine the resolution constraint. If not set, will use default from basemap.", + "minimum": 0, + "maximum": 50 + }, + "projection": { "$ref": "#/definitions/TypeValidMapProjectionCodes" }, + "rotation": { + "type": "integer", + "minimum": -360, + "maximum": 360, + "default": 0, + "description": "The initial rotation for the view in degree (positive rotation clockwise, 0 means North). Will be converted to radiant by the viewer." + }, + "zoom": { + "type": "number", + "minimum": 0, + "maximum": 28, + "default": 12, + "description": "Initial map zoom level. Zoom level are define by the basemap zoom levels." + } + }, + "required": ["zoom", "center"] + }, + + "TypeAppBarProps": { + "default": [ + "geolocator" + ], + "description": "Controls availalbe on the application bar.", + "items": { + "enum": [ + "geolocator", + "export" + ] + }, + "minItems": 0, + "type": "array", + "uniqueItems": true + + }, + + "TypeNavBarProps": { + "type": "array", + "uniqueItems": true, + "items": { + "enum": [ + "zoom", + "fullscreen", + "home", + "location", + "export" + ] + }, + "default": [ + "zoom", + "fullscreen", + "home" + ], + "description": "Controls availalbe on the navigation bar.", + "minItems": 0 + }, + + "TypeFooterTabsProps": { + "type": "object", + + "properties": { + "tabs": { + "type": "object", + "description": "Available tabs", + "properties": { + "core": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "legend", + "layers", + "details", + "data-table", + "time-slider", + "geochart" + ] + }, + "minItems": 1, + "default": [ + "legend", + "layers", + "details", + "data-table" + ], + "uniqueItems": true, + "description": "Default core tabs of footer panel to use" + }, + "custom": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "defaultTabs": { + "type": "string" + }, + "contentHTML": { + "type": "string" + } + } + }, + "minItems": 0, + "default": [], + "uniqueItems": true, + "description": "Custom tabs of footer panel to use" + } + } + + }, + "collapsed": { + "type": "boolean", + "default": false, + "description": "State of footer panel when map is loaded (expanded or collapsed)" + } + }, + "required": [ + "tabs" + ] + }, + + "TypeAppBarTabsProps": { + "type": "object", + + "properties": { + "tabs": { + "type": "object", + "description": "Available tabs", + "properties": { + "core": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "basemap-panel", + "layers", + "geochart" + ] + }, + "minItems": 1, + "default": [ "basemap-panel"], + "uniqueItems": true, + "description": "Default core tabs of app-bar to use" + }, + "custom": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "defaultTabs": { + "type": "string" + }, + "contentHTML": { + "type": "string" + } + } + }, + "minItems": 0, + "default": [], + "uniqueItems": true, + "description": "Custom tabs of app-bar to use" + } + } + + }, + "collapsed": { + "type": "boolean", + "default": false, + "description": "State of app-bar when map is loaded (expanded or collapsed)" + } + }, + "required": [ + "tabs" + ] + }, + + "TypeOverviewMapProps": { + "type": "object", + + "properties": { + "hideOnZoom": { + "type": "number", + "minimum": 0, + "maximum": 10, + "default": 0, + "description": "Minimum zoom level to show overview map" + } + } + }, + + "TypeMapComponents": { + "type": "array", + "uniqueItems": true, + "items": { + "enum": [ + "overview-map", + "north-arrow", + "geolocator" + ] + }, + "default": [ + "overview-map", + "north-arrow", + "geolocator" + ], + "description": "Core components to initialize on viewer load. The schema for those are inside this file.", + + "minItems": 0 + }, + + "TypeMapCorePackages": { + "type": "array", + "uniqueItems": true, + "items": { + "enum": [ + "basemap-panel", + "layers-panel", + "details-panel", + "geolocator-panel", + "swiper", + "geochart", + "time-slider" + ] + }, + "default": ["basemap-panel" + ], + "description": "Core packages to initialize on viewer load. The schema for those are on their own package. NOTE: config from packages are in the same loaction as core config (<>-<>.json).", + + "minItems": 0 + }, + + "TypeExternalPackages": { + "type": "array", + "items": { + + "type": "object", + "properties": { + "name": { + "type": "string", + + + "description": "External Package name. The name must be ideintical to the window external package object to load." + }, + "configUrl": { + "type": "string", + + "format": "uri", + "description": "The url to the external package configuration setting. The core package will read the configuration and pass it inside the package." + } + }, + "required": ["name"] + }, + "default": [], + "description": "List of external packages to initialize on viewer load.", + "minItems": 0 + }, + + "TypeServiceUrls": { + + "type": "object", + "description": "Service endpoint urls", + "properties": { + "keys": { + "type": "string", + "default": "https://geocore.api.geo.ca", + + "description": "Service end point to access API for layers specification (loading and plugins parameters). By default it is GeoCore but can be another endpoint with similar output." + }, + "geolocator": { + "type": "string", + + "description": "Service end point to access geo location of searched value." + }, + + "proxyUrl": { + "type": "string", + + "description": "An optional proxy to be used for dealing with same-origin issues. URL must either be a relative path on the same server or an absolute path on a server which sets CORS headers." + } + }, + "required": [ + "keys" + ] + }, + + "TypeDisplayLanguage": { + "enum": ["en", "fr"], + "description": "Display languages supported." + }, + + "TypeLocalizedLanguages": { + "enum": ["en", "fr"], + "description": "ISO 639-1 code indicating the languages supported by the configuration file." + }, + + "TypeListOfLocalizedLanguages": { + "type": "array", + "uniqueItems": true, + "items": { "$ref": "#/definitions/TypeLocalizedLanguages" }, + "default": ["en"], + "description": "ISO 639-1 code indicating the languages supported by the configuration file. It will use value(s) provided here to access bilangual configuration nodes. For value(s) provided here, each bilingual configuration node MUST provide a value.", + "minItems": 1 + }, + + "TypeValidVersions": { + "enum": ["1.0"], + "description": "The schema version that can be used to validate the configuration file. The schema should enumerate the list of versions accepted by this version of the viewer." + }, + + "TypeMapFeaturesInstance": { + + "description": "The map features configuration. This type is used by the IsValidTypeMapFeaturesInstance method coded in config-validation.ts file. It does the validation down to the list of layer entry config.", + "type": "object", + "properties": { + "mapId": { "type": "string" }, + "map": { "$ref": "#/definitions/TypeMapConfig" }, + "appBar": { "$ref": "#/definitions/TypeAppBarProps" }, + "navBar": { "$ref": "#/definitions/TypeNavBarProps" }, + "footerTabs": { "$ref": "#/definitions/TypeFooterTabsProps"}, + "appBarTabs": {"$ref": "#/definitions/TypeAppBarTabsProps"}, + "overviewMap": {"$ref": "#/definitions/TypeOverviewMapProps"}, + "components": { "$ref": "#/definitions/TypeMapComponents" }, + "corePackages": { "$ref": "#/definitions/TypeMapCorePackages" }, + "externalPackages": { "$ref": "#/definitions/TypeExternalPackages" }, + "serviceUrls": { "$ref": "#/definitions/TypeServiceUrls" }, + "suportedLanguages": { "$ref": "#/definitions/TypeListOfLocalizedLanguages" }, + "schemaVersionUsed": { "$ref": "#/definitions/TypeValidVersions" } + }, + "required": ["map", "suportedLanguages"] + } + }, + + "properties": { + "mapId": { "type": "string" }, + "map": { "$ref": "#/definitions/TypeMapConfig" }, + "theme": { "Title": "Map Theme Style", + "enum": [ + "dark", + "light", + "geo.ca" + ], + "default": "dark", + "description": "Theme style of the viewer." + }, + "appBar": { "$ref": "#/definitions/TypeAppBarProps" }, + "navBar": { "$ref": "#/definitions/TypeNavBarProps" }, + "footerTabs": { "$ref": "#/definitions/TypeFooterTabsProps"}, + "appBarTabs": {"$ref": "#/definitions/TypeAppBarTabsProps"}, + "overviewMap": {"$ref": "#/definitions/TypeOverviewMapProps"}, + "components": { "$ref": "#/definitions/TypeMapComponents" }, + "corePackages": { "$ref": "#/definitions/TypeMapCorePackages" }, + "externalPackages": {"$ref": "#/definitions/TypeExternalPackages"}, + "serviceUrls": { "$ref": "#/definitions/TypeServiceUrls" }, + "suportedLanguages": { "$ref": "#/definitions/TypeListOfLocalizedLanguages" }, + "versionUsed": { "$ref": "#/definitions/TypeValidVersions" } + } + }, + + + "areasOfInterest": { + "title": "Areas of Interest", + "type": "object", + "properties": { + "enable": { + "type": "boolean", + "title": "Enable", + "default":true + }, + "areas": { + "type": "array", + "items": { + "type": "object", + "properties": { + "title-en-CA": { + "type": "string", + "title": "English Title" + }, + "title-fr-CA": { + "type": "string", + "title": "French Title" + }, + "xmin": { + "type": "number", + "title": "Minimum value of x", + "default": -4844430 + }, + "ymin": { + "type": "number", + "title": "Minimum value of y", + "default": -1052774 + }, + "xmax": { + "type": "number", + "title": "Maximum value of x", + "default": 5666163 + }, + "ymax": { + "type": "number", + "title": "Maximum value of y", + "default": 4170111 + }, + "wkid": { + "type": "number", + "title": "Spatial Reference", + "default": 3978 + }, + "thumbnailUrl": { + "type": "string", + "title": "Thumbnail URL" + } + }, + "required": [ + "title-en-CA", + "title-fr-CA" + ] + } + } + } + }, + + + "swiper": { + "title": "Swiper", + "type": "object", + "properties": { + "enable": { + "type": "boolean", + "title": "Enable", + "default":true + }, + "type": { + "type": "string", + "title": "Type", + "enum": [ + "vertical", + "horizontal" + ], + "default": "vertical" + }, + "keyboardOffset": { + "type": "number", + "title": "Keyboard Movement", + "description": "Pixel value of swiper displacement.", + "default": 10, + "minimum": 1, + "maximum": 100 + }, + "layers": { + "type": "string", + "title": "Layers", + "description": "The id of the layer for referencing within the viewer (does not relate directly to any external service).", + "enum":[] + } + + + + + + }, + "required": [ + "type", + "keyboardOffset", + "layers" + ] + }, + + "thematicSlider": { + "title": "Thematic Slider", + "type": "object", + "properties": { + "enable": { + "type": "boolean", + "title": "Enable", + "default":true + }, + "open": { + "type": "boolean", + "title": "Open by default", + "default": true + }, + "autorun": { + "type": "boolean", + "title": "Start animation on load", + "defaul": false + }, + "loop": { + "type": "boolean", + "title": "Play the animation in loop", + "default": false + }, + "slider": { + "type": "boolean", + "title": "Enable slider control", + "default": true + }, + "stack": { + "type": "boolean", + "title": "Stack layer visibility", + "default": false + }, + "legendStack": { + "type": "boolean", + "title": "Stack legend items (useful with the stack option to see all active elements legend)", + "default": true + }, + "layers": { + "type": "array", + "title": "Layers", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "The id of the layer for referencing within the viewer (does not relate directly to any external service).", + "title": "Layer id", + "enum":[] + + }, + "duration": { + "type": "number", + "title": "Animation duration in milliseconds", + "minimum": 3000, + "default": 3000 + }, + "title": { + "type": "string", + "title": "Title for this layer animation" + }, + "description": { + "type": "string", + "title": "Description for this layer animation" + }, + "legend": { + "type": "array", + "title": "Legend", + "description": "Add items for a custom legend, leave it blank for default legend.", + "default": [], + "items": { + "type": "object", + "properties": { + "label": { + "type": "string", + "title": "Label" + }, + "image": { + "type": "object", + "properties": { + "url": { + "type": "string", + "title": "URL", + "default": "" + }, + "width": { + "type": "number", + "title": "Width", + "minimum": 25, + "maximum": 150, + "default": 150 + }, + "height": { + "type": "number", + "title": "Height", + "minimum": 25, + "maximum": 150, + "default": 150 + } + }, + "required": [ + "url", + "width", + "height" + ] + } + }, + "required": [ + "image" + ] + } + } + }, + "required": [ + "id", + "duration" + ] + } + }, + "required": [ + "layers" + ] + } + } + } + ] + } + + diff --git a/src/components/db aug 9 orig.json b/src/components/db aug 9 orig.json new file mode 100644 index 0000000..8e779f9 --- /dev/null +++ b/src/components/db aug 9 orig.json @@ -0,0 +1,2737 @@ +{ + + "plugins": [ + + { + + "map": { + "$id": "https://cgpv/schema", + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "GeoView Core Config Schema", + "type": "object", + "version": 1.0, + "comments": "Configuration for GeoView core packages, each packages manages it own schema. It correspond to the TypeMapFeaturesInstance type.", + "additionalProperties": false, + "definitions": { + "TypeLocalizedString": { + + "minProperties": 1, + "type": "object", + "properties": { + "en": { + "type": "string", + "description": "The English version of the string." + }, + "fr": { + "type": "string", + "description": "The French version of the string. " + } + } + }, + + "TypeDetailsLayerConfig": { + + "type": "object", + "properties": { + + "parser": { + "type": "string", + "description": "A path to a javascript file with a function for parsing the layers identify output. Only needed if a custom template is being used." + }, + "template": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "A path to an html template (English/French) that will override default identify output." + } + }, + "required": ["template"] + }, + + "TypeFeatureInfoLayerConfig": { + + "type": "object", + "properties": { + "queryable": { + "type": "boolean", + "default": true, + "title": "Allow querying. Default = true." + }, + "customParser": { "$ref": "#/definitions/TypeDetailsLayerConfig" }, + "nameField": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display field (English/French) of the layer. If it is not present the viewer will make an attempt to find the first valid field." + }, + "outfields": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "A comma separated list of attribute names (English/French) that should be requested on query (all by default)." + }, + "fieldTypes": { + "type": "string", + "description": "A comma separated list of types. Type at index i is associated to the variable at index i." + }, + "aliasFields": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "A comma separated list of attribute names (English/French) that should be use for alias. If empty, no alias will be set if not found." + } + }, + "required": [ + "queryable" + ] + }, + "TypeFeatureInfoNotQueryable": { + + "properties": { + "queryable": { + "const": false, + "description": "Do not allow querying.", + "type": "boolean" + } + }, + "required": [ + "queryable" + ], + "type": "object" + }, + + "TypeStrokeSymbolConfig": { + "additionalProperties": false, + "type": "object", + "description": "Stroke style for vector features.", + "minProperties": 1, + "properties": { + "color": { + "type": "string" + }, + "lineStyle": { + "enum": [ + "dash", + "dash-dot", + "dash-dot-dot", + "dot", + "longDash", + "longDash-dot", + "null", + "shortDash", + "shortDash-dot", + "shortDash-dot-dot", + "solid" + ] + }, + "width": { + "type": "number" + } + } + }, + + "TypeLineStringVectorConfig": { + "additionalProperties": false, + "type": "object", + "properties": { + "type": { + "enum": [ + "lineString" + ] + }, + "stroke": { "$ref": "#/definitions/TypeStrokeSymbolConfig" } + }, + "required": [ + "type", + "stroke" + ] + }, + + "TypePolygonVectorConfig": { + "additionalProperties": false, + "type": "object", + "properties": { + "type": { + "enum": ["filledPolygon"] + }, + "color": { "type": "string" }, + "stroke": { "$ref": "#/definitions/TypeStrokeSymbolConfig" }, + "paternSize": { + "type": "number", + "description": "Distance between patern lines. Default = 8" + }, + "paternWidth": { + "type": "number", + "description": "Patern line width.default = 1." + }, + "fillStyle": { + "enum": [ + "solid", + "backwardDiagonal", + "cross", + "diagonalCross", + "forwardDiagonal", + "horizontal", + "null", + "vertical" + ], + "description": "Kind of filling for vector features. Default = solid. " + } + }, + "required": [ + "type", + "stroke" + ] + }, + + "TypeSimpleSymbolVectorConfig": { + "additionalProperties": false, + "type": "object", + "properties": { + "type": { + "enum": ["simpleSymbol"] + }, + "rotation": { + "type": "number", + "description": "Symbol rotation in radians." + }, + "color": { "type": "string" }, + "stroke": { "$ref": "#/definitions/TypeStrokeSymbolConfig" }, + "size": { "type": "number" }, + "offset": { + "type": "array", + "items": { + "type": "number" + }, + "minItems": 2, + "maxItems": 2 + }, + "symbol": { + "enum": [ + "circle", + "+", + "diamond", + "square", + "triangle", + "X", + "star" + ] + } + }, + "required": + ["type", + "symbol" + ] + }, + + "TypeIconSymbolVectorConfig": { + "additionalProperties": false, + "type": "object", + "properties": { + "type": { + "enum": ["iconSymbol"] + }, + "mimeType": { "type": "string" }, + "src": { "type": "string" }, + "width": { + "type": "integer", + "description": "Icon width in pixel." + }, + "height": { + "type": "integer", + "description": "Icon height in pixel." + }, + "rotation": { + "type": "number", + "description": "Icon rotation in radians." + }, + "opacity": { + "type": "number", + "minimum": 0, + "maximum": 1, + "default": 1 + }, + "offset": { + "type": "array", + "items": { + "type": "number" + }, + "minItems": 2, + "maxItems": 2 + }, + "crossOrigin": { + "type": "string", + "description": "The crossOrigin attribute for loaded images. Note that you must provide a crossOrigin value if you want to access pixel data with the Canvas renderer." + } + }, + "required": ["type", "mimeType", "src"] + }, + + "TypeSimpleStyleConfig": { + "additionalProperties": false, + "type": "object", + "properties": { + "styleId": { + "type": "string" + }, + "styleType": { + "enum": ["simple"] + }, + "label": { + "type": "string" + }, + "settings": { "$ref": "#/definitions/TypeKindOfVectorSettings" } + }, + "required": [ + "styleType", + "label", + "settings" + ] + }, + + + "TypeUniqueValueStyleConfig": { + "additionalProperties": false, + "type": "object", + "properties": { + "styleId": { + "type": "string" + }, + "styleType": { + "enum": ["uniqueValue"] + }, + "defaultLabel": { + "type": "string", + "description": "Label used if field/value association is not found." + }, + "defaultSettings": { + "$ref": "#/definitions/TypeKindOfVectorSettings", + "description": "Settings used if field/value association is not found." + }, + "defaultVisible": { + "description": "Flag used to show/hide features associated to the default label (default: yes).", + "enum": [ + "yes", + "no", + "always" + ] + }, + "fields": { + "type": "array", + "items": { + "type": "string" + }, + "minItems": 1 + }, + "uniqueValueStyleInfo": { "$ref": "#/definitions/TypeUniqueValueStyleInfo" } + }, + "required": [ + "styleType", + "fields", + "uniqueValueStyleInfo" + ] + }, + + "TypeUniqueValueStyleInfo": { + "type": "array", + "items": { + "additionalProperties": false, + "type": "object", + "properties": { + "label": { + "type": "string" + }, + "settings": { + "$ref": "#/definitions/TypeKindOfVectorSettings" + }, + "values": { + "items": { + "oneOf": [ + { "title": "String Value", + "type": "string" + }, + { "title": "Numeric Value", + "type": "number" + } + ] + }, + "minItems": 1, + "type": "array" + }, + "visible": { + "description": "Flag used to show/hide features associated to the label (default: yes).", + "enum": [ + "yes", + "no", + "always" + ] + } + } + + }, + "minItems": 1, + "required": [ + "label", + "values", + "options" + ] + + }, + + "TypeValidMapProjectionCodes": { + "default": 3978, + "description": "Spatial Reference EPSG code supported (https://epsg.io/). We support Web Mercator and Lambert Conical Conform Canada.", + "enum": [ + 3978, + 3857 + ] + }, + + "TypeClassBreakStyleConfig": { + "additionalProperties": false, + "type": "object", + "properties": { + "styleId": { + "type": "string" + }, + "styleType": { + "enum": ["classBreaks"] + }, + "field": { + "type": "string" + }, + "defaultLabel": { + "type": "string", + "description": "Label used if field/value association is not found." + }, + "defaultSettings": { + "$ref": "#/definitions/TypeKindOfVectorSettings", + "description": "Settings used if field/value association is not found." + }, + "defaultVisible": { + "description": "Flag used to show/hide features associated to the default label (default: yes).", + "enum": [ + "yes", + "no", + "always" + ] + }, + + "classBreakStyleInfo": { "$ref": "#/definitions/TypeClassBreakStyleInfo" } + }, + "required": ["styleType", "field", "classBreakStyleInfo"] + }, + + + "TypeClassBreakStyleInfo": { + "additionalProperties": false, + "type": "array", + "items": { + "additionalProperties": false, + "type": "object", + "properties": { + + "label": { + "type": "string" + }, + "minValue": { + "oneOf": [ + { "title": "minValue String value", + "type": "string" + }, + { "title": "minValue Numeric value", + "type": "number" + } + ] + }, + "maxValue": { + "oneOf": [ + { "title": "maxValue String value", + "type": "string" + }, + { "title": "maxValue Numeric value", + "type": "number" + } + ] + }, + "visible": { + "description": "Flag used to show/hide features associated to the label (default: yes).", + "enum": [ + "yes", + "no", + "always" + ], + "default" : ["no"] + }, + + "settings": { "$ref": "#/definitions/TypeKindOfVectorSettings" } + } + }, + "minItems": 1, + "required": ["label", "minValue", "maxValue", "settings"] + + }, + + "TypeKindOfVectorSettings": { + "oneOf": [ + { "title":"LineString", "$ref": "#/definitions/TypeLineStringVectorConfig" }, + { "title":"Polygon", "$ref": "#/definitions/TypePolygonVectorConfig" }, + { "title":"SimpleSymbol", "$ref": "#/definitions/TypeSimpleSymbolVectorConfig" }, + { "title":"IconSymbol", "$ref": "#/definitions/TypeIconSymbolVectorConfig" } + ] + }, + + "TypeStyleConfig": { + + "minProperties": 1, + "type": "object", + "description": "Line or Point or Polygon Style Config", + "properties": { + "LineString": {"description": "Line", + "title":"Line", + + "$ref": "#/definitions/TypeStyleSettings" + }, + "Point": { "description": "Point", + "title":"Point", + + "$ref": "#/definitions/TypeStyleSettings" + }, + "Polygon": {"description": "Polygon", + "title":"Polygon", + + "$ref": "#/definitions/TypeStyleSettings" + } + } + }, + + "TypeStyleSettings": { + "oneOf": [ + { + "title":"SimpleStyle", "$ref": "#/definitions/TypeSimpleStyleConfig" + }, + { + "title":"UniqueValue", "$ref": "#/definitions/TypeUniqueValueStyleConfig" + }, + { + "title":"ClassBreak", "$ref": "#/definitions/TypeClassBreakStyleConfig" + } + ] + }, + + "TypeLayerInitialSettings": { + "additionalProperties": false, + "type": "object", + "properties": { + "bounds": { + "description": "The geographic bounding box that contains all the layer's features.", + "items": { + "type": "number" + }, + "maxItems": 4, + "minItems": 4, + "type": "array" + }, + "opacity": { + "type": "number", + "minimum": 0, + "maximum": 1, + "default": 1, + "description": "Initial opacity setting." + }, + "visible": { + "type": "boolean", + "default": true, + "title": "Initial visibility setting." + }, + "extent": { + "type": "array", + "minItems": 4, + "maxItems": 4, + "items": { + "type": "number" + },"default":[-16763712,5165908,-5688293,10649806], + "description": "The extent that constrains the view. Called with [minX, minY, maxX, maxY] extent coordinates." + }, + "minZoom": { + "type": "integer", + "minimum": 0, + "maximum": 50, + "description": "The minimum view zoom level (exclusive) above which this layer will be visible." + }, + "maxZoom": { + "type": "integer", + "minimum": 0, + "maximum": 50, + "description": "The maximum view zoom level (inclusive) above which this layer will be visible." + }, + "className": { + "type": "string", + "description": "A CSS class name to set to the layer element." + } + } + }, + + "TypeListOfEsriDynamicLayerEntryConfig": { + "additionalProperties": false, + "description": "This type is used recursively by the IsValidTypeListOfLayerEntryConfig method coded in config-validation.ts file. It completes the validation of the list of layer entry config.", + "items": { + "oneOf": [ + { "title": "LayerGroupEntry", "$ref": "#/definitions/TypeLayerGroupEntryConfig" + }, + { "title": "EsriDynamicLayerEntry","$ref": "#/definitions/TypeEsriDynamicLayerEntryConfig" + } + ] + }, + "minItems": 1, + "type": "array" + }, + + "TypeListOfEsriFeatureLayerEntryConfig": { + "additionalProperties": false, + "description": "This type is used recursively by the IsValidTypeListOfLayerEntryConfig method coded in config-validation.ts file. It completes the validation of the list of layer entry config.", + "items": { + "oneOf": [ + { "title": "LayerGroupEntry","$ref": "#/definitions/TypeLayerGroupEntryConfig" + }, + { "title": "VectorLayerEntry", "$ref": "#/definitions/TypeVectorLayerEntryConfig" + } + ] + }, + "minItems": 1, + "type": "array" + }, + + "TypeListOfGeoCoreLayerEntryConfig": { + + "description": "This type is used recursively by the IsValidTypeListOfLayerEntryConfig method coded in config-validation.ts file. It completes the validation of the list of layer entry config.", + "items": { + "oneOf": [ + { + "title": "LayerGroupEntry", "$ref": "#/definitions/TypeLayerGroupEntryConfig" + }, + { + "title": "GeocoreLayerEntry","$ref": "#/definitions/TypeGeocoreLayerEntryConfig" + } + ] + }, + "minItems": 1, + "type": "array" + }, + + "TypeListOfGeoJSONLayerEntryConfig": { + + "description": "This type is used recursively by the IsValidTypeListOfLayerEntryConfig method coded in config-validation.ts file. It completes the validation of the list of layer entry config.", + "items": { + "oneOf": [ + { + "title": "LayerGroupEntry", "$ref": "#/definitions/TypeLayerGroupEntryConfig" + }, + { + "title": "VectorLayerEntry", "$ref": "#/definitions/TypeVectorLayerEntryConfig" + } + ] + }, + "minItems": 1, + "type": "array" + }, + + "TypeListOfImageStaticLayerEntryConfig": { + + "description": "This type is used recursively by the IsValidTypeListOfLayerEntryConfig method coded in config-validation.ts file. It completes the validation of the list of layer entry config.", + "items": { + "oneOf": [ + { + "title": "LayerGroupEntry", "$ref": "#/definitions/TypeLayerGroupEntryConfig" + }, + { + "title": "ImageStaticLayerEntry", "$ref": "#/definitions/TypeImageStaticLayerEntryConfig" + } + ] + }, + "minItems": 1, + "type": "array" + }, + + "TypeListOfGeoPackageLayerEntryConfig": { + + "description": "This type is used recursively by the IsValidTypeListOfLayerEntryConfig method coded in config-validation.ts file. It completes the validation of the list of layer entry config.", + "items": { + "oneOf": [ + { + "title": "LayerGroupEntry", "$ref": "#/definitions/TypeLayerGroupEntryConfig" + }, + { + "title": "VectorLayerEntry", "$ref": "#/definitions/TypeVectorLayerEntryConfig" + } + ] + }, + "minItems": 1, + "type": "array" + }, + + + "TypeVectorSourceFormats": { + "enum": [ + "GeoJSON", + "EsriJSON", + "KML", + "WFS", + "featureAPI", + "GeoPackage" + ] , + "default": "GeoJSON", + "description": "The feature format used by the XHR feature loader when access path is set." + }, + + "TypeVectorSourceInitialConfig": { + + "type": "object", + "properties": { + "dataAccessPath": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The path (English/French) to reach the data to display. If not specified, metadatAccessPath will be assigne dto it." + }, + "format": { "$ref": "#/definitions/TypeVectorSourceFormats" }, + "dataProjection": { + "type": "string", + "description": "The projection code of the source. Used only for GeoJSON format. Default value is EPSG:4326. " + }, + "featureInfo": { "$ref": "#/definitions/TypeFeatureInfoLayerConfig" }, + "cluster": { "$ref": "#/definitions/TypeSourceVectorClusterConfig" }, + "postSettings": { + "type": "object", + "properties": { + "data": + { + "type": "object" + }, + "header": + { + "type": "object" + } + } + }, + "strategy": { + "default": "all", + "description": "The loading strategy to use. By default an all strategy is used, a one-off strategy which loads all features at once.", + "enum": [ + "all", + "bbox" + ] + } + } + }, + + "TypeSourceVectorClusterConfig": { + + "type": "object", + "description": "Cluster vector data on vector layer. Works out of the box with point geometries. If another geometry is provided, it will be converted to points geometry.", + "properties": { + "enable": { + "type": "boolean", + "title": "Cluster vector data on vector layer. Default = false", + "default": false + }, + "distance": { + "type": "integer", + "description": "Distance in pixels within which features will be clustered together (deafult 20px)." + }, + "minDistance": { + "type": "integer", + "description": "Minimum distance in pixels between clusters. Will be capped at the configured distance. By default no minimum distance is guaranteed. This config can be used to avoid overlapping icons. As a tradoff, the cluster feature's position will no longer be the center of all its features." + }, + "settings": { + "$ref": "#/definitions/TypeSimpleSymbolVectorConfig", + "description": "settings for the cluster symbol and clustered geometries" + }, + "splitZoom": { + "description": "Zoom level at which all clusters will split (default 7).", + "type": "integer" + }, + "textColor": { + "description": "Color for the text showing the number of points in a cluster", + "type": "string" + } + } + }, + + "TypeSourceImageWmsInitialConfig": { + + "type": "object", + "properties": { + "dataAccessPath": { + "$ref": "#/definitions/TypeLocalizedString", + + "description": "The path (English/French) to reach the data to display. If not specified, metadatAccessPath will be assigne dto it." + }, + "crossOrigin": { + "type": "string", + "description": "The crossOrigin attribute for loaded images. Note that you must provide a crossOrigin value if you want to access pixel data with the Canvas renderer." + }, + "projection": { + "type": "integer", + "description": "Spatial Reference EPSG code supported (https://epsg.io/). We support Web Mercator and Lambert Conical Conform Canada." + }, + "featureInfo": { + "$ref": "#/definitions/TypeFeatureInfoLayerConfig" + }, + "serverType": { + "$ref": "#/definitions/TypeOfServer", + "description": "The type of the remote WMS server. The default value is mapserver." + }, + "style": { + "oneOf": [ + { + "description": "Single style to apply", + "type": "string" + }, + { + "description": "Array of style to choose.", + "items": { + "type": "string" + }, + "type": "array" + } + ] + } + } + }, + + "TypeOfServer": { + "enum": [ + "mapserver", + "geoserver", + "qgis"], + "description": "The type of the remote WMS server. The default value is mapserver." + }, + + "TypeSourceImageEsriInitialConfig": { + + "type": "object", + "properties": { + "dataAccessPath": { + "$ref": "#/definitions/TypeLocalizedString", + + "description": "The path (English/French) to reach the data to display. If not specified, metadatAccessPath will be assigne dto it." + }, + "crossOrigin": { + "type": "string", + "description": "The crossOrigin attribute for loaded images. Note that you must provide a crossOrigin value if you want to access pixel data with the Canvas renderer." + }, + "projection": { + "type": "integer", + "description": "Spatial Reference EPSG code supported (https://epsg.io/). We support Web Mercator and Lambert Conical Conform Canada." + }, + "featureInfo": { + "$ref": "#/definitions/TypeFeatureInfoLayerConfig" + }, + "format": { + "$ref": "#/definitions/TypeEsriFormatParameter" + }, + "transparent": { + "type": "boolean", + "default": true, + "description": "If true, the image will be exported with the background color of the map set as its transparent color. Only the .png and .gif formats support transparency." + } + } + }, + + "TypeEsriDynamicLayerEntryConfig": { + + "properties": { + "entryType": { + "enum": [ + "raster-image" + ], + "default": "raster-image" + + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer entry at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "layerFilter": { + "description": "Filter to apply on feature of this layer.", + "type": "string" + }, + "layerId": { + "description": "The id of the layer to display on the map.", + "type": "string" + }, + "layerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "layerPathEnding": { + "description": "The ending element of the layer configuration path.", + "type": "string" + }, + "schemaTag": { + "enum": [ + "esriDynamic" + ], + "default": "esriDynamic" + + }, + "source": { + "$ref": "#/definitions/TypeSourceImageEsriInitialConfig" + }, + "style": { + "$ref": "#/definitions/TypeStyleConfig" + } + }, + "required": [ + "schemaTag", + "entryType", + "layerId" + ], + "type": "object" + }, + + "TypeEsriFormatParameter": { + "enum": ["png", "jpg", "gif", "svg"], + "default": "png", + "description": "The format of the exported image. The default format is png." + }, + + "TypeSourceTileInitialConfig": { + + "properties": { + "dataAccessPath": { + "$ref": "#/definitions/TypeLocalizedString", + + "description": "The path (English/French) to reach the data to display. If not specified, metadatAccessPath will be assigne dto it." + }, + "featureInfo": { + "$ref": "#/definitions/TypeFeatureInfoNotQueryable" + }, + "crossOrigin": { + "type": "string", + "description": "The crossOrigin attribute for loaded images. Note that you must provide a crossOrigin value if you want to access pixel data with the Canvas renderer." + }, + "projection": { + "type": "integer", + "description": "Spatial Reference EPSG code supported (https://epsg.io/). We support Web Mercator and Lambert Conical Conform Canada." + }, + "tileGrid": { "$ref": "#/definitions/TypeTileGrid" } + } + }, + + "TypeTileGrid": { + + "type": "object", + "properties": { + "extent": { + "type": "array", + "maxItems": 4, + "minItems": 4, + "items": + { + "type": "number" + }, + "description": "The extent that constrains the view. Called with [minX, minY, maxX, maxY] extent coordinates." + }, + "origin": { + "type": "array", + "items": [ + { + "type": "number" + }, + { + "type": "number" + } + ], + "description": "The tile grid origin, i.e. where the x and y axes meet ([z, 0, 0]). Tile coordinates increase left to right and downwards. If not specified, extent must be provided." + }, + "resolutions": { + "type": "array", + "items": { + "type": "number" + }, + "description": "Resolutions. The array index of each resolution needs to match the zoom level. This means that even if a minZoom is configured, the resolutions array will have a length of maxZoom + 1." + }, + "tileSize": { + "type": "array", + "maxItems": 2, + "minItems": 2, + "items": + { + "type": "number" + }, + "default": [256, + 256 + ], + "description": "The tile grid origin, i.e. where the x and y axes meet ([z, 0, 0]). Tile coordinates increase left to right and downwards. If not specified, extent must be provided." + } + }, + "required": ["origin", "resolutions"] + }, + + "TypeVectorHeatmapLayerEntryConfig": { + + "type": "object", + "properties": { + "entryType": { + "enum": [ + "vector-heatmap" + ], + "default":"vector-heatmap"}, + "layerId": { + "type": "string", + "description": "The id of the layer to display on the map." + }, + "layerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "layerPathEnding": { + "description": "The ending element of the layer configuration path.", + "type": "string" + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer entry at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "source": { "$ref": "#/definitions/TypeVectorSourceInitialConfig" }, + "gradient": { + "type": "array", + "items": { + "type": "string" + }, + "uniqueItems": true, + "minItems": 2, + "default": ["#00f", + "#0ff", + "#0f0", + "#ff0", + "#f00" + ], + "description": "Color gradient of the heatmap, specified as an array of CSS color strings." + }, + "radius": { + "type": "number", + "description": "Radius size in pixels (default 8px)." + }, + "blur": { + "type": "number", + "description": "Blur size in pixels (default 15px)." + }, + "weight": { + "type": "string", + "description": "Feature attribute to use for the weight or a function (ADD FORMAT) that returns a weight from a feature." + }, + "schemaTag": { + "enum": [ + "not used yet" + ], + "defautl":"not used yet" + + } + }, + "required": [ + "layerId", + "entryType" + ] + }, + + "TypeVectorLayerEntryConfig": { + + "type": "object", + "properties": { + "entryType": { "default": "vector","enum": ["vector"] + + }, + "layerId": { + "type": "string", + "description": "The id of the layer to display on the map." + }, + "layerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "layerFilter": { + "description": "Filter to apply on feature of this layer.", + "type": "string" + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer entry at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "source": { "$ref": "#/definitions/TypeVectorSourceInitialConfig" }, + "style": { "$ref": "#/definitions/TypeStyleConfig" }, + "layerPathEnding": { + "description": "The ending element of the layer configuration path.", + "type": "string" + }, + "schemaTag": { + "enum": [ + "GeoJSON", + "esriFeature", + "ogcWfs", + "ogcFeature", + "GeoPackage" + ] + } + }, + "required": [ + "layerId", + "schemaTag", + "entryType" + ] + }, + + "TypeVectorTileLayerEntryConfig": { + + "type": "object", + "description": "Layer sources providing vector data divided into a tile grid.", + "properties": { + "entryType": { "enum": ["vector-tile"],"default":"vector-tile" }, + "layerId": { + "type": "string", + "description": "The id of the layer to display on the map." + }, + "layerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "layerFilter": { + "description": "Filter to apply on feature of this layer.", + "type": "string" + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer entry at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "source": { + "$ref": "#/definitions/TypeVectorTileSourceInitialConfig", + "description": "Information used to configure the source of a vector tile layer." + }, + "layerPathEnding": { + "description": "The ending element of the layer configuration path.", + "type": "string" + }, + "style": { + "$ref": "#/definitions/TypeStyleConfig" + }, + "schemaTag": { + "enum": [ + "not used yet" + ] + } + }, + "required": [ + + "entryType", + "layerId" + ] + }, + + "TypeVectorTileSourceInitialConfig": { + + "type": "object", + "description": "Layer sources providing vector data divided into a tile grid.", + "properties": { + "dataAccessPath": { + "$ref": "#/definitions/TypeLocalizedString", + + "description": "The path (English/French) to reach the data to display. If not specified, metadatAccessPath will be assigne dto it." + }, + "format": { + "enum": ["GeoJSON", "EsriJSON", "KML", "WFS", "MVT", "featureAPI"], + "description": "The feature format used by the XHR feature loader when access path is set." + }, + "dataProjection": { + "type": "string", + "description": "The projection code of the source. Used only for GeoJSON format. Default value is EPSG:4326." + }, + "featureInfo": { "$ref": "#/definitions/TypeFeatureInfoLayerConfig" }, + "style": { "$ref": "#/definitions/TypeStyleConfig" }, + "tileGrid": { + "$ref": "#/definitions/TypeTileGrid" + } + + } + }, + + "TypeTileLayerEntryConfig": { + + "type": "object", + "properties": { + "entryType": { "enum": ["raster-tile"] , + "default":"raster-tile" + }, + "layerId": { + "type": "string", + "description": "The id of the layer to display on the map." + }, + "layerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer entry at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "layerPathEnding": { + "description": "The ending element of the layer configuration path.", + "type": "string" + }, + "schemaTag": { + "enum": [ + "ogcWms", + "xyzTiles", + "vectorTiles" + ], + "default": "ogcWms" + }, + "source": { "$ref": "#/definitions/TypeSourceTileInitialConfig" } + }, + "required": [ + "schemaTag", + "entryType", + "layerId" + ] + }, + + "TypeListOfOgcWfsLayerEntryConfig": { + "description": "This type is used recursively by the IsValidTypeListOfLayerEntryConfig method coded in config-validation.ts file. It completes the validation of the list of layer entry config.", + "type": "array", + "minItems": 1, + "additionalProperties": false, + "items": { + "oneOf": [ + { "title" :"LayerGroupEntry", + "$ref": "#/definitions/TypeLayerGroupEntryConfig" + }, + { "title" :"VectorLayerEntry", + "$ref": "#/definitions/TypeVectorLayerEntryConfig" + } + ] + } + }, + + "TypeListOfOgcFeatureLayerEntryConfig": { + "additionalProperties": false, + "description": "This type is used recursively by the IsValidTypeListOfLayerEntryConfig method coded in config-validation.ts file. It completes the validation of the list of layer entry config.", + "items": { + "oneOf": [ + { "title" :"LayerGroupEntry", + "$ref": "#/definitions/TypeLayerGroupEntryConfig" + }, + { "title" :"VectorLayerEntry", + "$ref": "#/definitions/TypeVectorLayerEntryConfig" + } + ] + }, + "minItems": 1, + "type": "array" + }, + + "TypeListOfOgcWmsLayerEntryConfig": { + + "description": "This type is used recursively by the IsValidTypeListOfLayerEntryConfig method coded in config-validation.ts file. It completes the validation of the list of layer entry config.", + "items": { + "oneOf": [ + { "title" :"LayerGroupEntry", + "$ref": "#/definitions/TypeLayerGroupEntryConfig" + }, + { "title" :"OgcWmsLayerEntry", + "$ref": "#/definitions/TypeOgcWmsLayerEntryConfig" + } + ] + }, + "minItems": 1, + "type": "array" + }, + + "TypeListOfXyzTilesLayerEntryConfig": { + + "description": "This type is used recursively by the IsValidTypeListOfLayerEntryConfig method coded in config-validation.ts file. It completes the validation of the list of layer entry config.", + "items": { + "oneOf": [ + { "title" :"LayerGroupEntry", + "$ref": "#/definitions/TypeLayerGroupEntryConfig" + }, + { "title" :"TileLayerEntry", + "$ref": "#/definitions/TypeTileLayerEntryConfig" + } + ] + }, + "minItems": 1, + "type": "array" + }, + + "TypeGeocoreLayerEntryConfig": { + + "type": "object", + "description": "Layer where configration is extracted by a configuration snippet stored on a server. The server configuration will handle bilangual informations.", + "properties": { + "entryType": { "enum": ["geocore"], "default":"geocore" }, + "layerId": { + "type": "string", + "description": "The id of the layer to display on the map." + }, + "geocoreLayerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer entry at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "listOfLayerEntryConfig": { + "$ref": "#/definitions/TypeListOfLayerEntryConfig", + "description": "The list of layer entry configurations to use from the GeoView layer group." + }, + "schemaTag": { + "enum": [ + "geoCore" + ], + "defaut": "geoCore" + }, + "source": { "$ref": "#/definitions/TypeSourceGeocoreConfig" } + }, + "required": ["schemaTag","entryType","layerId"] + }, + + "TypeSourceGeocoreConfig": { + + "type": "object", + "description": "Layer source providing geocore data.", + "properties": { + "dataAccessPath": { + "$ref": "#/definitions/TypeLocalizedString", + + "description": "The url path to the geoCore endpoint (optional, this value should be embeded in the GeoView API)." + }, + "featureInfo": { + "$ref": "#/definitions/TypeFeatureInfoNotQueryable" + } + } + }, + + "TypeOgcWmsLayerEntryConfig": { + "type": "object", + "properties": { + "entryType": { + "enum": [ + "raster-image" + ], + "default": "raster-image" + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer entry at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "layerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "schemaTag": { + "enum": [ + "ogcWms" + ] + }, + "layerId": { + "type": "string", + "description": "The id of the layer to display on the map." + }, + "layerPathEnding": { + "type": "string", + "description": "The ending element of the layer configuration path." + }, + "layerFilter": { + "type": "string", + "description": "Filter to apply on feature of this layer." + }, + "source": { + "$ref": "#/definitions/TypeSourceImageWmsInitialConfig" + }, + "style": { + "$ref": "#/definitions/TypeStyleConfig" + } + }, + "required": [ + "schemaTag", + "entryType", + "layerId" + ] + }, + + "TypeSourceImageStaticInitialConfig": { + + "properties": { + "crossOrigin": { + "description": "The crossOrigin attribute for loaded images. Note that you must provide a crossOrigin value if you want to access pixel data with the Canvas renderer.", + "type": "string" + }, + "dataAccessPath": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The path (English/French) to reach the data to display. If not specified, metadatAccessPath will be assigne dto it." + + }, + "extent": { + "description": "The extent of the static image. Called with [minX, minY, maxX, maxY] extent coordinates.", + "items": { + "type": "number" + }, + "maxItems": 4, + "minItems": 4, + "type": "array" + }, + "featureInfo": { + "$ref": "#/definitions/TypeFeatureInfoNotQueryable" + }, + "projection": { + "description": "Spatial Reference EPSG code supported (https://epsg.io/). We support Web Mercator and Lambert Conical Conform Canada.", + "type": "integer" + } + }, + "type": "object" + }, + + "TypeLayerEntryType": { + "enum": ["vector", + "vector-tile", + "vector-heatmap", + "raster-tile", + "raster-image", + "geoCore" + ], + "description": "Layer entry data type." + }, + + "TypeLayerGroupEntryConfig": { + + "type": "object", + "description": "Entry used to define a layer Group.", + "properties": { + "entryType": { "enum": ["group"], + "default":"group" + }, + "layerId": { + "type": "string", + "description": "The id of the layer group to display on the map." + }, + "layerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer group (English/French)." + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer group entries at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "listOfLayerEntryConfig": { + "$ref": "#/definitions/TypeListOfLayerEntryConfig", + "description": "The list of layer entry configurations to use from the GeoView layer group." + } + }, + + "required": ["entryType", "layerId", "listOfLayerEntryConfig"] + }, + + "TypeLayerEntryConfig": { + "type":"object", + "oneOf": [ + { "title": "LayerGroup", "$ref": "#/definitions/TypeLayerGroupEntryConfig" }, + { "title": "VectorTileLayer", "$ref": "#/definitions/TypeVectorTileLayerEntryConfig" }, + { "title": "VectorLayer", "$ref": "#/definitions/TypeVectorLayerEntryConfig" }, + { "title": "OgcWmsLayer","$ref": "#/definitions/TypeOgcWmsLayerEntryConfig"}, + { "title": "EsriDynamicLayer","$ref": "#/definitions/TypeEsriDynamicLayerEntryConfig" }, + { "title": "TileLayer", "$ref": "#/definitions/TypeTileLayerEntryConfig" }, + { "title": "GeocoreLayer", "$ref": "#/definitions/TypeGeocoreLayerEntryConfig" }, + { "title": "VectorHeatmap","$ref": "#/definitions/TypeVectorHeatmapLayerEntryConfig" } + ] + }, + + "TypeListOfLayerEntryConfig": { + "type": "array", + "minItems": 1, + "items": { + "$ref": "#/definitions/TypeLayerEntryConfig" + } + }, + + "TypeMapConfig": { + + "type": "object", + "properties": { + "basemapOptions": { "$ref": "#/definitions/TypeBasemapOptions" }, + "interaction": { "$ref": "#/definitions/TypeInteraction" }, + "listOfGeoviewLayerConfig": { "$ref": "#/definitions/TypeListOfGeoviewLayerConfig" }, + "viewSettings": { "$ref": "#/definitions/TypeViewSettings" }, + "extraOptions": { + "type": "object", + "description": "Additional options used for OpenLayers map options" + } + }, + "required": ["basemapOptions", "interaction", "viewSettings"] + }, + + "TypeBasemapOptions": { + + "type": "object", + "properties": { + "basemapId": { "$ref": "#/definitions/TypeBasemapId" }, + "shaded": { + "type": "boolean", + "default": true, + "title": "Enable or disable shaded basemap (if basemap id is set to shaded then this should be false)." + }, + "labeled": { + "type": "boolean", + "default": true, + "title": "Enable or disable basemap labels" + } + }, + "required": ["basemapId", "shaded", "labeled"] + }, + + "TypeBasemapId": { + "description": "Id of the basemap to use." , + "enum": ["transport", "osm", "simple", "nogeom", "shaded"], + "default": "transport" + + }, + + "TypeInteraction": { + "enum": ["static", "dynamic"], + "default": "dynamic", + "description": "If map is dynamic (pan/zoom) or static to act as a thumbnail (no nav bar)." + }, + + "TypeListOfGeoviewLayerConfig": { + + "description": "List of GeoView Layers in the order which they should be added to the map.", + "type": "array", + + "items": { + "$ref": "#/definitions/TypeGeoviewLayerConfig" + } + }, + + "TypeGeoviewLayerConfig": { + + "type": "object", + "properties": { + "geoviewLayerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "metadataAccessPath": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The GeoView layer access path (English/French)." + }, + "geoviewLayerId": { + "description": "The id of the layer for referencing within the viewer (does not relate directly to any external service). The id will have the language extension (id-'lang').", + "type": "string" + }, + "geoviewLayerType": { + "$ref": "#/definitions/TypeGeoviewLayerType", + "description": "Type of GeoView layer." + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the GeoView layer at creation time." + }, + "listOfLayerEntryConfig": { + "$ref": "#/definitions/TypeListOfLayerEntryConfig", + "description": "The layer entries to use from the GeoView layer." + }, + "serviceDateFormat": { + "description": "Date format used by the service endpoint.", + "type": "string" + } + }, + "required": [ + "geoviewLayerType", + "listOfLayerEntryConfig" + ] + }, + + "TypeGeoviewLayerType": { + "type": "string", + "enum": [ + "esriDynamic", + "esriFeature", + "GeoJSON", + "geoCore", + "GeoPackage", + "xyzTiles", + "ogcFeature", + "ogcWfs", + "ogcWms" + ], + "default": [ + "esriDynamic" + ], + "description": "Type of GeoView layer." + } + , + "TypeImageStaticLayerEntryConfig": { + + "properties": { + "entryType": { + "enum": [ + "raster-image" + ] + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer entry at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "layerId": { + "description": "The id of the layer to display on the map.", + "type": "string" + }, + "layerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "layerPathEnding": { + "description": "The ending element of the layer configuration path.", + "type": "string" + }, + "schemaTag": { + "enum": [ + "imageStatic" + ] + }, + "source": { + "$ref": "#/definitions/TypeSourceImageStaticInitialConfig" + } + }, + "required": [ + "schemaTag", + "entryType", + "layerId" + ], + "type": "object" + }, + + "TypeViewSettings": { + + "type": "object", + "properties": { + "center": { + "type": "array", + "items": [ + + { + "type": "number", + "minimum": -160, + "maximum": 160, + "default": -106, + "description": "Initial longitude value for map center." + }, + { + "type": "number", + "minimum": -80, + "maximum": 80, + "default": 60, + "description": "Initial latitude value for map center." + } + + ] + + }, + "enableRotation": { + "type": "boolean", + "default": true, + "title": "Enable rotation. If false, a rotation constraint that always sets the rotation to zero is used." + }, + "extent": { + "type": "array", + "minItems":4, + "maxItems":4, + "items": { + + "type": "number" + + },"default":[-16763712,5165908,-5688293,10649806], + "description": "The extent that constrains the view. Called with [minX, minY, maxX, maxY] extent coordinates." + }, + "minZoom": { + "type": "integer", + "description": "The minimum zoom level used to determine the resolution constraint. If not set, will use default from basemap.", + "minimum": 0, + "maximum": 50 + }, + "maxZoom": { + "type": "integer", + "description": "The maximum zoom level used to determine the resolution constraint. If not set, will use default from basemap.", + "minimum": 0, + "maximum": 50 + }, + "projection": { "$ref": "#/definitions/TypeValidMapProjectionCodes" }, + "rotation": { + "type": "integer", + "minimum": -360, + "maximum": 360, + "default": 0, + "description": "The initial rotation for the view in degree (positive rotation clockwise, 0 means North). Will be converted to radiant by the viewer." + }, + "zoom": { + "type": "number", + "minimum": 0, + "maximum": 28, + "default": 12, + "description": "Initial map zoom level. Zoom level are define by the basemap zoom levels." + } + }, + "required": ["zoom", "center"] + }, + + "TypeAppBarProps": { + "default": [ + "geolocator" + ], + "description": "Controls availalbe on the application bar.", + "items": { + "enum": [ + "geolocator", + "export" + ] + }, + "minItems": 0, + "type": "array", + "uniqueItems": true + + }, + + "TypeNavBarProps": { + "type": "array", + "uniqueItems": true, + "items": { + "enum": [ + "zoom", + "fullscreen", + "fullextent" + ] + }, + "default": [ + "zoom", + "fullscreen", + "fullextent" + ], + "description": "Controls availalbe on the navigation bar.", + "minItems": 0 + }, + + "TypeMapComponents": { + "type": "array", + "uniqueItems": true, + "items": { + "enum": [ + "overview-map", + "north-arrow", + "geolocator" + ] + }, + "default": [ + "overview-map", + "north-arrow", + "geolocator" + ], + "description": "Core components to initialize on viewer load. The schema for those are inside this file.", + "minItems": 0 + }, + + "TypeMapCorePackages": { + "type": "array", + "uniqueItems": true, + "items": { + "enum": [ + "basemap-panel", + "layers-panel", + "details-panel", + "geolocator-panel", + "footer-panel", + "swiper" + ] + }, + "default": ["basemap-panel", + "layers-panel", + "details-panel", + "geolocator-panel" + ], + "description": "Core packages to initialize on viewer load. The schema for those are on their own package. NOTE: config from packages are in the same loaction as core config (<>-<>.json).", + "minItems": 0 + }, + + "TypeExternalPackages": { + "type": "array", + "items": { + + "type": "object", + "properties": { + "name": { + "type": "string", + + + "description": "External Package name. The name must be ideintical to the window external package object to load." + }, + "configUrl": { + "type": "string", + + + "description": "The url to the external package configuration setting. The core package will read the configuration and pass it inside the package." + } + }, + "required": ["name"] + }, + "default": [], + "description": "List of external packages to initialize on viewer load.", + "minItems": 0 + }, + + "TypeServiceUrls": { + + "type": "object", + "description": "Service endpoint urls", + "properties": { + "keys": { + "type": "string", + "default": "https://geocore.api.geo.ca", + + "description": "Service end point to access API for layers specification (loading and plugins parameters). By default it is GeoCore but can be another endpoint with similar output." + }, + "geolocator": { + "type": "string", + + "description": "Service end point to access geo location of searched value." + }, + + "proxyUrl": { + "type": "string", + + "description": "An optional proxy to be used for dealing with same-origin issues. URL must either be a relative path on the same server or an absolute path on a server which sets CORS headers." + } + }, + "required": [ + "keys" + ] + }, + + "TypeDisplayLanguage": { + "enum": ["en", "fr"], + "description": "Display languages supported." + }, + + "TypeLocalizedLanguages": { + "enum": ["en", "fr"], + "description": "ISO 639-1 code indicating the languages supported by the configuration file." + }, + + "TypeListOfLocalizedLanguages": { + "type": "array", + "uniqueItems": true, + "items": { "$ref": "#/definitions/TypeLocalizedLanguages" }, + "default": ["en", "fr"], + "description": "ISO 639-1 code indicating the languages supported by the configuration file. It will use value(s) provided here to access bilangual configuration nodes. For value(s) provided here, each bilingual configuration node MUST provide a value.", + "minItems": 1 + }, + + "TypeValidVersions": { + "enum": ["1.0"], + "description": "The schema version that can be used to validate the configuration file. The schema should enumerate the list of versions accepted by this version of the viewer." + }, + + "TypeMapFeaturesInstance": { + + "description": "The map feature configuration.", + "type": "object", + "properties": { + "map": { "$ref": "#/definitions/TypeMapConfig" }, + "appBar": { "$ref": "#/definitions/TypeAppBarProps" }, + "navBar": { "$ref": "#/definitions/TypeNavBarProps" }, + "components": { "$ref": "#/definitions/TypeMapComponents" }, + "corePackages": { "$ref": "#/definitions/TypeMapCorePackages" }, + "externalPackages": { "$ref": "#/definitions/TypeExternalPackages" }, + "serviceUrls": { "$ref": "#/definitions/TypeServiceUrls" }, + "suportedLanguages": { "$ref": "#/definitions/TypeListOfLocalizedLanguages" }, + "schemaVersionUsed": { "$ref": "#/definitions/TypeValidVersions" } + }, + "required": ["map", "suportedLanguages"] + } + }, + + "properties": { + "map": { "$ref": "#/definitions/TypeMapConfig" }, + "theme": { "Title": "Map Theme Style", + "enum": [ + "dark", + "light" + ], + "default": "dark", + "description": "Theme style of the viewer." + }, + "appBar": { "$ref": "#/definitions/TypeAppBarProps" }, + "navBar": { "$ref": "#/definitions/TypeNavBarProps" }, + "components": { "$ref": "#/definitions/TypeMapComponents" }, + "corePackages": { "$ref": "#/definitions/TypeMapCorePackages" }, + "externalPackages": { + + }, + "serviceUrls": { "$ref": "#/definitions/TypeServiceUrls" }, + "suportedLanguages": { "$ref": "#/definitions/TypeListOfLocalizedLanguages" }, + "versionUsed": { "$ref": "#/definitions/TypeValidVersions" } + + + } + }, + "rangeSlider": { + "type": "object", + "properties": { + "enable": { + "type": "boolean", + "title": "Enable", + "default": false + }, + "open": { + "type": "boolean", + "title": "Open by default", + "default": false + }, + "maximize": { + "type": "boolean", + "title": "Slider maximized by default", + "default": false + }, + "maximizeDesc": { + "type": "boolean", + "title": "Description section open by default", + "default": false + }, + "autorun": { + "type": "boolean", + "title": "Start animation on load", + "defaul": false + }, + "loop": { + "type": "boolean", + "title": "Play the animation in loop", + "default": false + }, + "reverse": { + "type": "boolean", + "title": "Animation in reverse mode", + "default": false + }, + "lock": { + "type": "boolean", + "title": "Lock handle", + "default": false + }, + "controls": { + "type": "array", + "minItems":0, + "uniqueItems": true, + + "items": { + "enum": [ + "lock", + "loop", + "delay", + "export", + "refresh", + "reverse" + ] + }, + "default": [ + "lock", + "delay" + ], + "title": "Slider bar controls" + }, + "params": { + "type": "object", + "title": "Parameters", + "properties": { + "type": { + "title": "Slider Type", + "type": "string", + "enum": [ + "number", + "date", + "wmst" + ], + "description": "If the Date or WMS-T is selected, range and limit must be in milliseconds. Note: Date is for esri layer and WMS-T is for ogc WMS-T layer.", + "default": "number" + }, + "rangeType": { + "title": "Range Type", + "type": "string", + "enum": [ + "single", + "dual" + ], + "description": "Type of range (single for one handle or dual for 2 handles).", + "default": "dual" + }, + "stepType": { + "title": "Step Type", + "type": "string", + "enum": [ + "dynamic", + "static" + ], + "description": "Type of step (dynamic for open values or static from a list of values).", + "default": "dynamic" + }, + "precision": { + "title": "Precision", + "type": "string", + "enum": [ + "0", + "1", + "2", + "date", + "hour" + ], + "description": "Precision of numeric data (0, 1, 2) or date (Date, Hour).", + "default": "0" + }, + "delay": { + "title": "Animation Delay", + "type": "string", + "enum": [ + "3000", + "4000", + "5000", + "6000", + "7000" + ], + "description": "Delay between animations.", + "default": "3000" + }, + "rangeInterval": { + "type": "number", + "title": "Interval (in milliseconds for date data type)", + "default": -1, + "description": "When the limit type is dynamic, this option allows you to define a preset interval between the two handles. The value must be in milliseconds date data type. For other numerical value formats, enter the desired value directly. To convert a time interval into milliseconds, use the built-in converter. Will start at the beginning of the scroll bar, unless the \"Start at end\" option is enabled." + }, + "startRangeEnd": { + "type": "boolean", + "title": "Start interval at the end", + "default": false + }, + "range": { + "type": "object", + "title": "", + "properties": { + "min": { + "type": "number", + "title": "Minimum value of the range (in milliseconds for date data type)", + "description": "The minimum value of the range that corresponds to the position of the left handle. If not defined, the minimum limit will be used. The value must be in milliseconds date data type. For other numerical value formats, enter the desired value directly. To convert a date to milliseconds, use the site's built-in converter.", + "default": 0 + }, + "max": { + "type": "number", + "title": "Maximum value of the range (in milliseconds for date data type)", + "description": "The maximum value of the range that corresponds to the position of the right handle. If not defined, the maximum limit will be used. The value must be in milliseconds date data type. For other numerical value formats, enter the desired value directly. To convert a date to milliseconds, use the site's built-in converter.", + "default": 1 + } + } + }, + "limit": { + "type": "object", + "title": "Limits of the data set values", + "properties": { + "min": { + "type": "number", + "title": "Minimum Limit", + "description": "The minimum value contained in the dataset. If not defined, the value will be found using the values present in the used field of the layer. To convert a date to milliseconds, use the site's built-in converter.", + "default": 0 + }, + "max": { + "type": "number", + "title": "Maximum Limit", + "description": "The maximum value contained in the dataset. If not defined, the value will be found using the values present in the used field of the layer. To convert a date to milliseconds, use the site's built-in converter.", + "default": 1 + }, + "staticItems": { + "type": "array", + "title": "Static Limit Values", + "items": { + "title": "Value", + "type": "number" + }, + "default": [], + "description": "The values for static limit. Note: the minimum and maximum limits are used to define the lower and upper static limits. Enter only the intermediate values here." + } + } + }, + "units": { + "type": "string", + "title": "Units", + "description": "Shown at the right of the time axis. Keep it short to improve readability.", + "default": "" + }, + "description": { + "type": "string", + "title": "Description", + "description": "Description to add in the section below the slider." + } + }, + "required": [ + "type" + ] + }, + "layers": { + "type": "array", + "title": "Layers", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "The id of the layer for referencing within the viewer (does not relate directly to any external service).", + "title": "Layer id", + "enum":[] + + }, + "field": { + "type": "string", + "description": "The field name to use.", + "title": "Field Name", + "default": "" + }, + "isTimeAware": { + "type": "boolean", + "title": "Is Time Aware", + "default": true, + "description": "If time aware is true, the slider will use the TimeInfo (ESRI) or time dimension (WMS) to extract limits and range." + } + }, + "required": [ + "id, field", + "isTimeAware" + ] + } + } + }, + "additionalProperties": false, + "required": [ + "params", + "layers" + ] + }, + "areasOfInterest": { + "type": "object", + "properties": { + "enable": { + "type": "boolean", + "title": "Enable" + }, + "areas": { + "type": "array", + "items": { + "type": "object", + "properties": { + "title-en-CA": { + "type": "string", + "title": "English Title" + }, + "title-fr-CA": { + "type": "string", + "title": "French Title" + }, + "xmin": { + "type": "number", + "title": "Minimum value of x", + "default": -4844430 + }, + "ymin": { + "type": "number", + "title": "Minimum value of y", + "default": -1052774 + }, + "xmax": { + "type": "number", + "title": "Maximum value of x", + "default": 5666163 + }, + "ymax": { + "type": "number", + "title": "Maximum value of y", + "default": 4170111 + }, + "wkid": { + "type": "number", + "title": "Spatial Reference", + "default": 3978 + }, + "thumbnailUrl": { + "type": "string", + "title": "Thumbnail URL" + } + }, + "required": [ + "title-en-CA", + "title-fr-CA" + ] + } + } + } + }, + "chart": { + "type": "object", + "properties": { + "enable": { + "type": "boolean", + "title": "Enable" + }, + "type": { + "title": "Chart Type", + "type": "string", + "enum": [ + "pie", + "bar", + "line" + ], + "description": "", + "default": "pie" + }, + "title": { + "title": "Title", + "type": "string", + "default": "" + }, + "labelsPie": { + "type": "object", + "title": "Labels", + "properties": { + "type": { + "title": "Type", + "type": "string", + "enum": [ + "field", + "config" + ], + "description": "Retreive the labels from a field or from the configuration.", + "default": "config" + }, + "values": { + "title": "Values", + "type": "string", + "description": "Values separated by semi colon or field name.", + "default": "" + }, + "split": { + "title": "Split Character", + "type": "string", + "description": "Character to use to split list of values.", + "default": ";" + } + }, + "required": [ + "type", + "values", + "split" + ] + }, + "options": { + "title": "Options", + "type": "object", + "properties": { + "colors": { + "title": "Datasets Colors", + "type": "string", + "description": "Hexadecimal color code separated by semicolon. If not provided, default colors will be use.", + "default": "" + }, + "cutOut": { + "title": "Cut Out Percentage", + "type": "number", + "description": "Cut out percentage to use to give doughnut effect.", + "default": 0, + "minimum": 0, + "maximum": 80 + } + }, + "required": [ + "cutOut" + ] + }, + "axis": { + "type": "object", + "title": "Labels", + "properties": { + "xAxis": { + "title": "X Axis", + "type": "object", + "properties": { + "title": { + "title": "Title", + "type": "string", + "default": "" + }, + "type": { + "title": "Type", + "type": "string", + "enum": [ + "field", + "config", + "linear", + "date" + ], + "description": "Retreive the labels from a field or configuration for bar chart or from values (linear or time) for line chart.", + "default": "config" + }, + "values": { + "title": "Values", + "type": "string", + "description": "Values separated by semicolon or field name.", + "default": "" + }, + "split": { + "title": "Split Character", + "type": "string", + "description": "Character to use to split list of values.", + "default": ";" + } + }, + "required": [ + "type", + "values", + "split" + ] + }, + "yAxis": { + "title": "Y Axis", + "type": "object", + "properties": { + "title": { + "title": "Title", + "type": "string", + "default": "" + }, + "type": { + "title": "Type", + "type": "string", + "enum": [ + "field", + "config", + "linear", + "time" + ], + "description": "Retreive the labels from a field or configuration for bar chart or from values (linear or time) for line chart.", + "default": "config" + }, + "values": { + "title": "Values", + "type": "string", + "description": "Values separated by semicolon or field name.", + "default": "" + }, + "split": { + "title": "Split Character", + "type": "string", + "description": "Character to use to split list of values.", + "default": ";" + } + }, + "required": [ + "type", + "values", + "split" + ] + }, + "required": [ + "xAxis", + "yAxis" + ] + } + }, + "layers": { + "type": "array", + "title": "Layers", + "items": { + "type": "object", + "properties": { + "id": { + "title": "Layer ID", + "type": "string", + "description": "", + "enum":[] + }, + "nameField": { + "type": "string", + "title": "Name Field", + "description": "Field name to use for the chart selection combo box when multiple charts." + }, + "type": { + "title": "Chart Data Type", + "type": "string", + "enum": [ + "inline", + "link" + ], + "description": "Type of data (inline for items inside the layer or link for items inside a link table).", + "default": "inline" + }, + "linkUrl": { + "type": "string", + "title": "Link URL", + "description": "URL of the link table." + }, + "linkField": { + "type": "string", + "title": "Link Field", + "description": "Field name for the link between the layer and the table." + }, + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "type": { + "title": "Type of data inside the field", + "type": "string", + "enum": [ + "single", + "combine" + ], + "description": "Single if there is only one value inside the field. Combine if we use time axis and time and value are part of the field.", + "default": "combine" + }, + "linkType": { + "title": "Type of link", + "type": "string", + "enum": [ + "single", + "multi" + ], + "description": "How data is structure inside the link table (single for one field for value and one for date OR multiple if there is multiple datasets inside one field and the chart needs to parse).", + "default": "single" + }, + "link": { + "title": "Link Field", + "type": "string", + "description": "Link field to link between layer and table." + }, + "date": { + "title": "Date Field", + "type": "string", + "description": "Field to use for the date" + }, + "measure": { + "title": "Measure Field", + "type": "string" + }, + "values": { + "title": "Label Values", + "type": "string", + "description": "Field name to get labels from for link type multi." + }, + "label": { + "type": "object", + "title": "Dataset Labels", + "properties": { + "type": { + "title": "Type", + "type": "string", + "enum": [ + "field", + "config" + ], + "description": "Retreive the labels from a field or from the configuration.", + "default": "config" + }, + "values": { + "title": "Values", + "type": "string", + "description": "Values separated by semicolon or field name.", + "default": "" + }, + "split": { + "title": "Split Character", + "type": "string", + "description": "Character to use to split list of values.", + "default": ";" + } + }, + "required": [ + "type", + "values", + "split" + ] + }, + "regex": { + "title": "Dataset splitter", + "type": "string", + "description": "

Regex value to split datasets inside the field.

This field is to manage when you have multiple datasets or combine values in the same field. To be able to separate datasets from values, we will use a regex expression. We encourage you to use your data and test your regex expression on a online site like https://regex101.com.

Below we list some samples of datasets and regex:

  • Sample 1
    • Data: [255;255;255];[120;232;23];[32;44;134]
    • Regex: \\\\[|\\\\];\\\\[|\\\\]
    • Ouput: 3 datasets (e.g. 255;255;255). Values inside dataset will be split by the field 'Values Splitter'.
  • Sample 2
    • Data: (2011-03-28,0.511),(2011-04-04,0.421)
    • Regex: \\\\(|\\\\),\\\\(|\\\\)
    • Ouput: 1 datasets, 2 pairs of values (e.g. 2011-03-28,0.511). Values inside are combined (y and x axis) and will be split by the field 'Values Splitter'.

Note: we need to double the '\\' character

", + "default": "\\(|\\),\\(|\\)" + }, + "split": { + "title": "Values splitter", + "type": "string", + "default": ",", + "description": "Character to use to split values inside a field. E.g. a field contains '10;20;30' means there is 3 values split by ';' or [1,2,3];[4,5,6] means there is 2 datasets with 3 values each split by ','." + }, + "prefix": { + "title": "Prefix", + "type": "string", + "default": "", + "description": "Prefix to add to data hover." + }, + "suffix": { + "title": "Suffix", + "type": "string", + "default": "", + "description": "Suffix to add to data hover." + } + }, + "required": [ + "type", + "measure", + "split" + ] + } + }, + "details": { + "type": "object", + "title": "Details", + "properties": { + "enabled": { + "type": "boolean", + "title": "Enable" + }, + "value": { + "type": "string", + "title": "Value", + "description": "String with the custom details in markdown notation." + } + } + } + }, + "required": [ + "id", + "nameField", + "type", + "data" + ] + } + }, + "required": [ + "type", + "layers" + ] + } + }, + "swiper": { + "type": "object", + "properties": { + "enable": { + "type": "boolean", + "title": "Enable" + }, + "type": { + "type": "string", + "title": "Type", + "enum": [ + "vertical", + "horizontal" + ], + "default": "vertical" + }, + "keyboardOffset": { + "type": "number", + "title": "Keyboard Movement", + "description": "Pixel value of swiper displacement.", + "default": 10, + "minimum": 1, + "maximum": 100 + }, + "layers": { + "type": "string", + "title": "Layers", + "description": "The id of the layer for referencing within the viewer (does not relate directly to any external service).", + "enum":[] + } + + + + + + }, + "required": [ + "type", + "keyboardOffset", + "layers" + ] + }, + "draw": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "GeoView Core Plugin Schema", + "comments": "It correspond to the TypeMapFeaturesInstance type.", + + "type": "object", + "properties": { + "enable": { + "type": "boolean", + "title": "Enable" + }, + "open": { + "type": "boolean", + "title": "Open by default", + "default": true + }, + "tools": { + "type": "array", + "title": "Tools", + "minItems":0, + "uniqueItems": true, + "items":{ + "enum": [ + "picker", + "point", + "polyline", + "polygon", + "edit", + "measure", + "extent", + "write", + "read" + ] + }, + + + "description": "Tools to add to draw toolbar.", + "default": [ + "picker", + "point", + "polyline", + "polygon", + "edit", + "measure", + "extent", + "write", + "read" + ] + } + + } + }, + "thematicSlider": { + "type": "object", + "properties": { + "enable": { + "type": "boolean", + "title": "Enable" + }, + "open": { + "type": "boolean", + "title": "Open by default", + "default": true + }, + "autorun": { + "type": "boolean", + "title": "Start animation on load", + "defaul": false + }, + "loop": { + "type": "boolean", + "title": "Play the animation in loop", + "default": false + }, + "slider": { + "type": "boolean", + "title": "Enable slider control", + "default": true + }, + "stack": { + "type": "boolean", + "title": "Stack layer visibility", + "default": false + }, + "legendStack": { + "type": "boolean", + "title": "Stack legend items (useful with the stack option to see all active elements legend)", + "default": true + }, + "layers": { + "type": "array", + "title": "Layers", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "The id of the layer for referencing within the viewer (does not relate directly to any external service).", + "title": "Layer id", + "enum":[] + + }, + "duration": { + "type": "number", + "title": "Animation duration in milliseconds", + "minimum": 3000, + "default": 3000 + }, + "title": { + "type": "string", + "title": "Title for this layer animation" + }, + "description": { + "type": "string", + "title": "Description for this layer animation" + }, + "legend": { + "type": "array", + "title": "Legend", + "description": "Add items for a custom legend, leave it blank for default legend.", + "default": [], + "items": { + "type": "object", + "properties": { + "label": { + "type": "string", + "title": "Label" + }, + "image": { + "type": "object", + "properties": { + "url": { + "type": "string", + "title": "URL", + "default": "" + }, + "width": { + "type": "number", + "title": "Width", + "minimum": 25, + "maximum": 150, + "default": 150 + }, + "height": { + "type": "number", + "title": "Height", + "minimum": 25, + "maximum": 150, + "default": 150 + } + }, + "required": [ + "url", + "width", + "height" + ] + } + }, + "required": [ + "image" + ] + } + } + }, + "required": [ + "id", + "duration" + ] + } + }, + "required": [ + "layers" + ] + } + } + } + ] + } + + diff --git a/src/components/db may 3.json b/src/components/db may 3.json new file mode 100644 index 0000000..094516a --- /dev/null +++ b/src/components/db may 3.json @@ -0,0 +1,2159 @@ +{ + + "plugins": [ + + { + + "map": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "GeoView Core Config Schema", + "comments": "Configuration for GeoView core packages, each packages manages it own schema. It correspond to the TypeMapFeaturesInstance type.", + + "definitions": { + "TypeLocalizedString": { + + "minProperties": 1, + "type": "object", + "properties": { + "en": { + "type": "string", + "description": "The English version of the string." + }, + "fr": { + "type": "string", + "description": "The French version of the string. " + } + } + }, + + "TypeDetailsLayerConfig": { + + "type": "object", + "properties": { + + "parser": { + "type": "string", + "description": "A path to a javascript file with a function for parsing the layers identify output. Only needed if a custom template is being used." + }, + "template": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "A path to an html template (English/French) that will override default identify output." + } + }, + "required": ["template"] + }, + + "TypeFeatureInfoLayerConfig": { + + "type": "object", + "properties": { + "queryable": { + "type": "boolean", + "default": true, + "title": "Allow querying. Default = true." + }, + "customParser": { "$ref": "#/definitions/TypeDetailsLayerConfig" }, + "nameField": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display field (English/French) of the layer. If it is not present the viewer will make an attempt to find the first valid field." + }, + "tooltipField": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The field (English/French) to be used for tooltips. If it is not present the viewer will use nameField (if provided)." + }, + "outfields": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "A comma separated list of attribute names (English/French) that should be requested on query (all by default)." + }, + "aliasFields": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "A comma separated list of attribute names (English/French) that should be use for alias. If empty, no alias will be set if not found." + } + } + }, + + "TypeFillSymbolConfig": { + + "type": "object", + "description": "Fill style for vector features.", + "properties": { + "color": { + + "type": "string" + } + }, + "required": ["color"] + }, + + "TypeStrokeSymbolConfig": { + + "type": "object", + "description": "Stroke style for vector features.", + "properties": { + "color": { + "type": "string" + }, + "width": { + "type": "number" + } + }, + "required": ["color", "width"] + }, + + "TypeLineStringVectorConfig": { + + "type": "object", + "properties": { + "type": { + "enum": ["lineString"] + }, + "stroke": { "$ref": "#/definitions/TypeStrokeSymbolConfig" } + }, + "required": ["type", "stroke"] + }, + + "TypePolygonVectorConfig": { + + "type": "object", + "properties": { + "type": { + "enum": ["filledPolygon"] + }, + "color": { "type": "string" }, + "stroke": { "$ref": "#/definitions/TypeStrokeSymbolConfig" }, + "paternSize": { + "type": "number", + "description": "Distance between patern lines. Default = 8" + }, + "paternWidth": { + "type": "number", + "description": "Patern line width.default = 1." + }, + "fillStyle": { + "enum": ["solid", "backwardDiagonal", "cross", "diagonalCross", "forwardDiagonal", "horizontal", "null", "vertical"], + "description": "Kind of filling for vector features. Default = solid. " + } + }, + "required": ["type", "stroke"] + }, + + "TypeSimpleSymbolVectorConfig": { + + "type": "object", + "properties": { + "type": { + "enum": ["simpleSymbol"] + }, + "rotation": { + "type": "number", + "description": "Symbol rotation in radians." + }, + "color": { "type": "string" }, + "stroke": { "$ref": "#/definitions/TypeStrokeSymbolConfig" }, + "size": { "type": "number" }, + "offset": { + "type": "array", + "items": { + "type": "number" + }, + "minItems": 2, + "maxItems": 2 + }, + "symbol": { + "enum": ["circle", "+", "diamond", "square", "triangle", "X", "star"] + } + }, + "required": ["type", "symbol"] + }, + + "TypeIconSymbolVectorConfig": { + + "type": "object", + "properties": { + "type": { + "enum": ["iconSymbol"] + }, + "mimeType": { "type": "string" }, + "src": { "type": "string" }, + "width": { + "type": "integer", + "description": "Icon width in pixel." + }, + "height": { + "type": "integer", + "description": "Icon height in pixel." + }, + "rotation": { + "type": "number", + "description": "Icon rotation in radians." + }, + "opacity": { + "type": "number", + "minimum": 0, + "maximum": 1, + "default": 1 + }, + "offset": { + "type": "array", + "items": { + "type": "number" + }, + "minItems": 2, + "maxItems": 2 + }, + "crossOrigin": { + "type": "string", + "description": "The crossOrigin attribute for loaded images. Note that you must provide a crossOrigin value if you want to access pixel data with the Canvas renderer." + } + }, + "required": ["type", "mimeType", "src"] + }, + + "TypeSimpleStyleConfig": { + "additionalProperties": false, + "type": "object", + "properties": { + "styleId": { + "type": "string" + }, + "styleType": { + "enum": ["simple"] + }, + "label": { + "type": "string" + }, + "settings": { "$ref": "#/definitions/TypeKindOfVectorSettings" } + }, + "required": ["styleType", "label", "settings"] + }, + + + "TypeUniqueValueStyleConfig": { + + "type": "object", + "properties": { + "styleId": { + "type": "string" + }, + "styleType": { + "enum": ["uniqueValue"] + }, + "defaultLabel": { + "type": "string", + "description": "Label used if field/value association is not found." + }, + "defaultSettings": { + "$ref": "#/definitions/TypeKindOfVectorSettings", + "description": "Settings used if field/value association is not found." + }, + "fields": { + "type": "array", + "items": { + "type": "string" + }, + "minItems": 1 + }, + "uniqueValueStyleInfo": { "$ref": "#/definitions/TypeUniqueValueStyleInfo" } + }, + "required": ["styleType", "fields", "uniqueValueStyleInfo"] + }, + + "TypeUniqueValueStyleInfo": { + "type": "array", + "minItems": 2, + "items": { + " type": "object", + "properties": { + "label": { + "type": "string" + }, + "values": { + "type": "array", + "minItems": 1, + "items": { + "type": "string" + } + + }, + "settings": { "$ref": "#/definitions/TypeKindOfVectorSettings" } + }, + + "required": ["label", "values", "settings"] + } + }, + + "TypeClassBreakStyleConfig": { + + "type": "object", + "properties": { + "styleId": { + "type": "string" + }, + "styleType": { + "enum": ["classBreaks"] + }, + "defaultLabel": { + "type": "string", + "description": "Label used if field/value association is not found." + }, + "defaultSettings": { + "$ref": "#/definitions/TypeKindOfVectorSettings", + "description": "Settings used if field/value association is not found." + }, + "field": { + "type": "string" + }, + "classBreakStyleInfos": { "$ref": "#/definitions/TypeClassBreakStyleInfo" } + }, + "required": ["styleType", "label", "field", "classBreakStyleInfo"] + }, + + + "TypeClassBreakStyleInfo": { + "additionalProperties": false, + "type": "array", + + "items": { + " type": "object", + "properties": { + + "label": { + "type": "string" + }, + "minValue": { + "type": "number" + }, + "maxValue": { + "type": "number" + }, + "settings": { "$ref": "#/definitions/TypeKindOfVectorSettings" } + } + }, + "minItems": 2, + "required": ["label", "minValue", "maxValue", "settings"] + + }, + + "TypeKindOfVectorSettings": { + "anyOf": [ + { "title":"LineString","$ref": "#/definitions/TypeLineStringVectorConfig" }, + {"title":"Polygon", "$ref": "#/definitions/TypePolygonVectorConfig" }, + {"title":"SimpleSymbol", "$ref": "#/definitions/TypeSimpleSymbolVectorConfig" }, + {"title":"IconSymbol", "$ref": "#/definitions/TypeIconSymbolVectorConfig" } + ] + }, + + "TypeStyleConfig": { + "anyOf": [ + { "title":"SimpleStyle","$ref": "#/definitions/TypeSimpleStyleConfig" }, + {"title":"UniqueValue","$ref": "#/definitions/TypeUniqueValueStyleConfig" }, + {"title":"ClassBreak", "$ref": "#/definitions/TypeClassBreakStyleConfig" } + ] + }, + + "TypeLayerInitialSettings": { + + "type": "object", + "properties": { + "opacity": { + "type": "number", + "minimum": 0, + "maximum": 1, + "default": 1, + "description": "Initial opacity setting." + }, + "visible": { + "type": "boolean", + "default": true, + "title": "Initial visibility setting." + }, + "extent": { + "type": "array", + "minItems": 4, + "maxItems": 4, + "items": { + "type": "number" + },"default":[-16763712,5165908,-5688293,10649806], + "description": "The extent that constrains the view. Called with [minX, minY, maxX, maxY] extent coordinates." + }, + "minZoom": { + "type": "integer", + "minimum": 0, + "maximum": 50, + "description": "The minimum view zoom level (exclusive) above which this layer will be visible." + }, + "maxZoom": { + "type": "integer", + "minimum": 0, + "maximum": 50, + "description": "The maximum view zoom level (inclusive) above which this layer will be visible." + }, + "className": { + "type": "string", + "description": "A CSS class name to set to the layer element." + } + } + }, + + "TypeVectorSourceFormats": { + "enum": ["GeoJSON", "EsriJSON", "KML", "WFS", "featureAPI"], + "description": "The feature format used by the XHR feature loader when access path is set." + }, + + "TypeVectorSourceInitialConfig": { + + "type": "object", + "properties": { + "dataAccessPath": { + "$ref": "#/definitions/TypeTileGrid", + "format": "uri", + "description": "The path (English/French) to reach the data to display. If not specified, metadatAccessPath will be assigne dto it." + }, + "format": { "$ref": "#/definitions/TypeVectorSourceFormats" }, + "dataProjection": { + "type": "string", + "description": "The projection code of the source. Used only for GeoJSON format. Default value is EPSG:4326. " + }, + "featureInfo": { "$ref": "#/definitions/TypeFeatureInfoLayerConfig" }, + "cluster": { "$ref": "#/definitions/TypeSourceVectorClusterConfig" } + } + }, + + "TypeSourceVectorClusterConfig": { + + "type": "object", + "description": "Cluster vector data on vector layer. Works out of the box with point geometries. If another geometry is provided, it will be converted to points geometry.", + "properties": { + "enable": { + "type": "boolean", + "title": "Cluster vector data on vector layer. Default = false", + "default": false + }, + "distance": { + "type": "integer", + "description": "Distance in pixels within which features will be clustered together (deafult 20px)." + }, + "minDistance": { + "type": "integer", + "description": "Minimum distance in pixels between clusters. Will be capped at the configured distance. By default no minimum distance is guaranteed. This config can be used to avoid overlapping icons. As a tradoff, the cluster feature's position will no longer be the center of all its features." + } + } + }, + + "TypeSourceImageInitialConfig": { + "anyOf": [ + { "title":"Wms Image Config","$ref": "#/definitions/TypeSourceImageWmsInitialConfig" }, + { "title":"Esri Image Config","$ref": "#/definitions/TypeSourceImageEsriInitialConfig" } + ] + }, + + "TypeSourceImageWmsInitialConfig": { + + "type": "object", + "properties": { + "dataAccessPath": { + "$ref": "#/definitions/TypeTileGrid", + "format": "uri", + "description": "The path (English/French) to reach the data to display. If not specified, metadatAccessPath will be assigne dto it." + }, + "crossOrigin": { + "type": "string", + "description": "The crossOrigin attribute for loaded images. Note that you must provide a crossOrigin value if you want to access pixel data with the Canvas renderer." + }, + "projection": { + "type": "integer", + "description": "Spatial Reference EPSG code supported (https://epsg.io/). We support Web Mercator and Lambert Conical Conform Canada." + }, + "featureInfo": { + "$ref": "#/definitions/TypeFeatureInfoLayerConfig" + }, + "serverType": { + "$ref": "#/definitions/TypeOfServer", + "description": "The type of the remote WMS server. The default value is mapserver." + }, + "style": { + "type": "string", + "default": "", + "description": "Style to apply" + } + } + }, + + "TypeOfServer": { + "enum": ["mapserver", "geoserver", "qgis"], + "description": "The type of the remote WMS server. The default value is mapserver." + }, + + "TypeSourceImageEsriInitialConfig": { + + "type": "object", + "properties": { + "dataAccessPath": { + "$ref": "#/definitions/TypeTileGrid", + "format": "uri", + "description": "The path (English/French) to reach the data to display. If not specified, metadatAccessPath will be assigne dto it." + }, + "crossOrigin": { + "type": "string", + "description": "The crossOrigin attribute for loaded images. Note that you must provide a crossOrigin value if you want to access pixel data with the Canvas renderer." + }, + "projection": { + "type": "integer", + "description": "Spatial Reference EPSG code supported (https://epsg.io/). We support Web Mercator and Lambert Conical Conform Canada." + }, + "featureInfo": { + "$ref": "#/definitions/TypeFeatureInfoLayerConfig" + }, + "format": { + "$ref": "#/definitions/TypeEsriFormatParameter" + }, + "transparent": { + "type": "boolean", + "default": true, + "description": "If true, the image will be exported with the background color of the map set as its transparent color. Only the .png and .gif formats support transparency." + } + } + }, + + "TypeEsriFormatParameter": { + "enum": ["png", "jpg", "gif", "svg"], + "default": "png", + "description": "The format of the exported image. The default format is png." + }, + + "TypeSourceTileInitialConfig": { + + "properties": { + "dataAccessPath": { + "$ref": "#/definitions/TypeTileGrid", + "format": "uri", + "description": "The path (English/French) to reach the data to display. If not specified, metadatAccessPath will be assigne dto it." + }, + "crossOrigin": { + "type": "string", + "description": "The crossOrigin attribute for loaded images. Note that you must provide a crossOrigin value if you want to access pixel data with the Canvas renderer." + }, + "projection": { + "type": "integer", + "description": "Spatial Reference EPSG code supported (https://epsg.io/). We support Web Mercator and Lambert Conical Conform Canada." + }, + "tileGrid": { "$ref": "#/definitions/TypeTileGrid" } + } + }, + + "TypeTileGrid": { + + "type": "object", + "properties": { + "extent": { + "type": "array", + "items": [ + { + "type": "number" + }, + { + "type": "number" + }, + { + "type": "number" + }, + { + "type": "number" + } + ], + "description": "The extent that constrains the view. Called with [minX, minY, maxX, maxY] extent coordinates." + }, + "origin": { + "type": "array", + "items": [ + { + "type": "number" + }, + { + "type": "number" + } + ], + "description": "The tile grid origin, i.e. where the x and y axes meet ([z, 0, 0]). Tile coordinates increase left to right and downwards. If not specified, extent must be provided." + }, + "resolutions": { + "type": "array", + "items": { + "type": "number" + }, + "description": "Resolutions. The array index of each resolution needs to match the zoom level. This means that even if a minZoom is configured, the resolutions array will have a length of maxZoom + 1." + }, + "tileSize": { + "type": "array", + "items": [ + { + "type": "number" + }, + { + "type": "number" + } + ], + "default": [256, 256], + "description": "The tile grid origin, i.e. where the x and y axes meet ([z, 0, 0]). Tile coordinates increase left to right and downwards. If not specified, extent must be provided." + } + }, + "required": ["origin", "resolutions"] + }, + + "TypeVectorHeatmapLayerEntryConfig": { + + "type": "object", + "properties": { + "entryType": { "enum": ["vector"],"default":"vector"}, + "layerId": { + "type": "string", + "description": "The id of the layer to display on the map." + }, + "layerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer entry at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "source": { "$ref": "#/definitions/TypeVectorSourceInitialConfig" }, + "gradient": { + "type": "array", + "items": { + "type": "string" + }, + "uniqueItems": true, + "minItems": 2, + "default": ["#00f", "#0ff", "#0f0", "#ff0", "#f00"], + "description": "Color gradient of the heatmap, specified as an array of CSS color strings." + }, + "radius": { + "type": "number", + "description": "Radius size in pixels (default 8px)." + }, + "blur": { + "type": "number", + "description": "Blur size in pixels (default 15px)." + }, + "weight": { + "type": "string", + "description": "Feature attribute to use for the weight or a function (ADD FORMAT) that returns a weight from a feature." + } + }, + "required": ["layerId"] + }, + + "TypeVectorLayerEntryConfig": { + + "type": "object", + "properties": { + "entryType": { "enum": ["vector"] ,"default":"vector"}, + "layerId": { + "type": "string", + "description": "The id of the layer to display on the map." + }, + "layerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer entry at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "source": { "$ref": "#/definitions/TypeVectorSourceInitialConfig" }, + "style": { "$ref": "#/definitions/TypeStyleConfig" } + }, + "required": ["layerId"] + }, + + "TypeVectorTileLayerEntryConfig": { + + "type": "object", + "description": "Layer sources providing vector data divided into a tile grid.", + "properties": { + "entryType": { "enum": ["vector"],"default":"vector" }, + "layerId": { + "type": "string", + "description": "The id of the layer to display on the map." + }, + "layerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer entry at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "source": { + "$ref": "#/definitions/TypeVectorTileSourceInitialConfig", + "description": "Information used to configure the source of a vector tile layer." + } + }, + "required": ["layerId"] + }, + + "TypeVectorTileSourceInitialConfig": { + + "type": "object", + "description": "Layer sources providing vector data divided into a tile grid.", + "properties": { + "dataAccessPath": { + "$ref": "#/definitions/TypeTileGrid", + "format": "uri", + "description": "The path (English/French) to reach the data to display. If not specified, metadatAccessPath will be assigne dto it." + }, + "format": { + "enum": ["GeoJSON", "EsriJSON", "KML", "WFS", "MVT", "featureAPI"], + "description": "The feature format used by the XHR feature loader when access path is set." + }, + "dataProjection": { + "type": "string", + "description": "The projection code of the source. Used only for GeoJSON format. Default value is EPSG:4326." + }, + "featureInfo": { "$ref": "#/definitions/TypeFeatureInfoLayerConfig" }, + "style": { "$ref": "#/definitions/TypeStyleConfig" }, + "tileGrid": { + + "type": "object", + "properties": { + "extent": { + "type": "array", + "items": [ + { + "type": "number" + }, + { + "type": "number" + }, + { + "type": "number" + }, + { + "type": "number" + } + ], + "description": "The extent that constrains the view. Called with [minX, minY, maxX, maxY] extent coordinates." + }, + "origin": { + "type": "array", + "items": [ + { + "type": "number" + }, + { + "type": "number" + } + ], + "description": "The tile grid origin, i.e. where the x and y axes meet ([z, 0, 0]). Tile coordinates increase left to right and downwards. If not specified, extent must be provided." + }, + "resolutions": { + "type": "array", + "items": { + "type": "number" + }, + "description": "Resolutions. The array index of each resolution needs to match the zoom level. This means that even if a minZoom is configured, the resolutions array will have a length of maxZoom + 1." + }, + "tileSize": { + "type": "array", + "items": [ + { + "type": "number" + }, + { + "type": "number" + } + ], + "default": [256, 256], + "description": "The tile grid origin, i.e. where the x and y axes meet ([z, 0, 0]). Tile coordinates increase left to right and downwards. If not specified, extent must be provided." + } + }, + "required": ["origin", "resolutions"] + } + } + }, + + "TypeImageLayerEntryConfig": { + + "type": "object", + "properties": { + "entryType": { "enum": ["raster"] ,"default":"raster"}, + "layerId": { + "type": "string", + "description": "The id of the layer to display on the map." + }, + "layerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer entry at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "source": { "$ref": "#/definitions/TypeSourceImageInitialConfig" } + }, + "required": ["layerId"] + }, + + "TypeTileLayerEntryConfig": { + + "type": "object", + "properties": { + "entryType": { "enum": ["raster"] ,"default":"raster"}, + "layerId": { + "type": "string", + "description": "The id of the layer to display on the map." + }, + "layerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer entry at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "source": { "$ref": "#/definitions/TypeSourceTileInitialConfig" } + }, + "required": ["layerId"] + }, + + "TypeGeocoreLayerEntryConfig": { + + "type": "object", + "description": "Layer where configration is extracted by a configuration snippet stored on a server. The server configuration will handle bilangual informations.", + "properties": { + "entryType": { "enum": ["geocore"], "default":"geocore" }, + "layerId": { + "type": "string", + "description": "The id of the layer to display on the map." + }, + "layerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "source": { "$ref": "#/definitions/TypeSourceGeocoreConfig" } + }, + "required": ["layerId"] + }, + + "TypeSourceGeocoreConfig": { + + "type": "object", + "description": "Layer source providing geocore data.", + "properties": { + "dataAccessPath": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The url path to the geoCore endpoint (optional, this value should be embeded in the GeoView API)." + } + } + }, + + "TypeLayerEntryType": { + "enum": ["vector", "raster", "geocore"], + "description": "Layer entry data type." + }, + + "TypeLayerGroupEntryConfig": { + + "type": "object", + "description": "Entry used to define a layer Group.", + "properties": { + "entryType": { "enum": ["group"], "default":"group"}, + "layerId": { + "type": "string", + "description": "The id of the layer group to display on the map." + }, + "layerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer group (English/French)." + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer group entries at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "listOfLayerEntryConfig": { + "$ref": "#/definitions/TypeListOfLayerEntryConfig", + "description": "The list of layer entry configurations to use from the GeoView layer group." + } + }, + "required": ["entryType", "layerId", "layerName", "listOfLayerEntryConfig"] + }, + + "TypeLayerEntryConfig": { + "type":"object", + "anyOf": [ + { "title": "LayerGroup", "$ref": "#/definitions/TypeLayerGroupEntryConfig" }, + { "title": "VectorHeatmap","$ref": "#/definitions/TypeVectorHeatmapLayerEntryConfig" }, + { "title": "VectorTileLayer", "$ref": "#/definitions/TypeVectorTileLayerEntryConfig" }, + { "title": "VectorLayer", "$ref": "#/definitions/TypeVectorLayerEntryConfig" }, + { "title": "ImageLayer", "$ref": "#/definitions/TypeImageLayerEntryConfig" }, + { "title": "TileLayer", "$ref": "#/definitions/TypeTileLayerEntryConfig" }, + { "title": "GeocoreLayer", "$ref": "#/definitions/TypeGeocoreLayerEntryConfig" } + ] + }, + + "TypeListOfLayerEntryConfig": { + "type": "array", + "minItems": 1, + + "items": { + "$ref": "#/definitions/TypeLayerEntryConfig" + } + }, + + "TypeMapConfig": { + + "type": "object", + "properties": { + "basemapOptions": { "$ref": "#/definitions/TypeBasemapOptions" }, + "interaction": { "$ref": "#/definitions/TypeInteraction" }, + "listOfGeoviewLayerConfig": { "$ref": "#/definitions/TypeListOfGeoviewLayerConfig" }, + "viewSettings": { "$ref": "#/definitions/TypeViewSettings" }, + "extraOptions": { + "type": "object", + "description": "Additional options used for OpenLayers map options" + } + }, + "required": ["basemapOptions", "interaction", "viewSettings"] + }, + + "TypeBasemapOptions": { + + "type": "object", + "properties": { + "id": { "$ref": "#/definitions/TypeBasemapId" }, + "shaded": { + "type": "boolean", + "default": true, + "ui:style": { "color": "blue", "backgroundColor": "blue" }, + "title": "Enable or disable shaded basemap (if basemap id is set to shaded then this should be false)." + }, + "labeled": { + "type": "boolean", + "default": true, + "title": "Enable or disable basemap labels" + } + }, + "required": ["id", "shaded", "labeled"] + }, + + "TypeBasemapId": { + "description": "Id of the basemap to use." , + "enum": ["transport", "osm", "simple", "nogeom", "shaded"], + "default": "transport" + + }, + + "TypeInteraction": { + "enum": ["static", "dynamic"], + "default": "dynamic", + "description": "If map is dynamic (pan/zoom) or static to act as a thumbnail (no nav bar)." + }, + + "TypeListOfGeoviewLayerConfig": { + "description": "List of GeoView Layers in the order which they should be added to the map.", + "type": "array", + + "items": { + "$ref": "#/definitions/TypeGeoviewLayerConfig" + } + }, + + "TypeGeoviewLayerConfig": { + + "type": "object", + "properties": { + "layerId": { + "type": "string", + "description": "The id of the layer for referencing within the viewer (does not relate directly to any external service). The id will have the language extension (id-'lang')." + }, + "layerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "metadataAccessPath": { + "format": "uri", + "$ref": "#/definitions/TypeLocalizedString", + "description": "The GeoView layer access path (English/French)." + }, + "geoviewLayerType": { + "$ref": "#/definitions/TypeGeoviewLayerType", + "description": "Type of GeoView layer." + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the GeoView layer at creation time." + }, + "listOfLayerEntryConfig": { + "$ref": "#/definitions/TypeListOfLayerEntryConfig", + "description": "The layer entries to use from the GeoView layer." + } + }, + "required": [ + "layerId", + "geoviewLayerType", + "listOfLayerEntryConfig" + ] + }, + + "TypeGeoviewLayerType": { + "type": "array", + "uniqueItems": true, + "items": { + "enum": [ + "esriDynamic", + "esriFeature", + "GeoJSON", + "geoCore", + "xyzTiles", + "ogcFeature", + "ogcWfs", + "ogcWms" + ] + },"defaut":[ "esriDynamic","esriFeature", + "GeoJSON", + "geoCore", + "xyzTiles", + "ogcFeature", + "ogcWfs", + "ogcWms" + ], + "minItems": 1, + "description": "Type of GeoView layer." + }, + + "TypeViewSettings": { + + "type": "object", + "properties": { + "center": { + "type": "array", + "items": [ + { + "type": "number", + "minimum": -160, + "maximum": 160, + "default": -106, + "description": "Initial longitude value for map center." + }, + { + "type": "number", + "minimum": -80, + "maximum": 80, + "default": 60, + "description": "Initial latitude value for map center." + } + ], + "default": [-106, 60] + }, + "enableRotation": { + "type": "boolean", + "default": true, + "title": "Enable rotation. If false, a rotation constraint that always sets the rotation to zero is used." + }, + "extent": { + "type": "array", + "minItems":4, + "maxItems":4, + "items": { + + "type": "number" + + },"default":[-16763712,5165908,-5688293,10649806], + "description": "The extent that constrains the view. Called with [minX, minY, maxX, maxY] extent coordinates." + }, + "minZoom": { + "type": "integer", + "description": "The minimum zoom level used to determine the resolution constraint. If not set, will use default from basemap.", + "minimum": 0, + "maximum": 50 + }, + "maxZoom": { + "type": "integer", + "description": "The maximum zoom level used to determine the resolution constraint. If not set, will use default from basemap.", + "minimum": 0, + "maximum": 50 + }, + "projection": { "$ref": "#/definitions/TypeProjectionCodes" }, + "rotation": { + "type": "integer", + "minimum": -360, + "maximum": 360, + "default": 0, + "description": "The initial rotation for the view in degree (positive rotation clockwise, 0 means North). Will be converted to radiant by the viewer." + }, + "zoom": { + "type": "integer", + "minimum": 0, + "maximum": 28, + "default": 12, + "description": "Initial map zoom level. Zoom level are define by the basemap zoom levels." + } + }, + "required": ["zoom", "center"] + }, + + "TypeProjectionCodes": { + "enum": [3978, 3857], + "default": 3978, + "description": "Spatial Reference EPSG code supported (https://epsg.io/). We support Web Mercator and Lambert Conical Conform Canada." + }, + + "TypeAppBarProps": { + + "type": "object", + "properties": { + "about": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The content of the about section in Markdown format. If empty, it will be ignored. If not, it will create a button on the appbar to open the panel. In the basic view, this information may be added in a container above the map." + } + } + }, + + "TypeNavBarProps": { + "type": "array", + "uniqueItems": true, + "items": { + "enum": ["zoom", "fullscreen", "fullextent"] + }, + "default": ["zoom", "fullscreen", "fullextent"], + "description": "Controls availalbe on the navigation bar.", + "minItems": 0 + }, + + "TypeMapComponents": { + "type": "array", + "uniqueItems": true, + "items": { + "enum": ["app-bar", "nav-bar", "overview-map", "north-arrow"] + }, + "default": ["app-bar", "nav-bar", "overview-map", "north-arrow"], + "description": "Core components to initialize on viewer load. The schema for those are inside this file.", + "minItems": 0 + }, + + "TypeMapCorePackages": { + "type": "array", + "uniqueItems": true, + "items": { + "enum": ["basemap-panel", "layers-panel", "details-panel", "geolocator-panel"] + }, + "default": ["basemap-panel", "layers-panel", "details-panel", "geolocator-panel"], + "description": "Core packages to initialize on viewer load. The schema for those are on their own package. NOTE: config from packages are in the same loaction as core config (<>-<>.json).", + "minItems": 0 + }, + + "TypeExternalPackages": { + "type": "array", + "items": { + + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "External Package name. The name must be ideintical to the window external package object to load." + }, + "configUrl": { + "type": "string", + "description": "The url to the external package configuration setting. The core package will read the configuration and pass it inside the package." + } + }, + "required": ["name"] + }, + "default": [], + "description": "List of external packages to initialize on viewer load.", + "minItems": 0 + }, + + "TypeServiceUrls": { + + "type": "object", + "description": "Service endpoint urls", + "properties": { + "keys": { + "type": "string", + "default": "https://geocore.api.geo.ca", + "format": "uri", + "description": "Service end point to access API for layers specification (loading and plugins parameters). By default it is GeoCore but can be another endpoint with similar output." + }, + "proxyUrl": { + "type": "string", + "format": "uri", + "description": "An optional proxy to be used for dealing with same-origin issues. URL must either be a relative path on the same server or an absolute path on a server which sets CORS headers." + } + } + }, + + "TypeDisplayLanguage": { + "enum": ["en", "fr"], + "description": "Display languages supported." + }, + + "TypeLocalizedLanguages": { + "enum": ["en", "fr"], + "description": "ISO 639-1 code indicating the languages supported by the configuration file." + }, + + "TypeListOfLocalizedLanguages": { + "type": "array", + "uniqueItems": true, + "items": { "$ref": "#/definitions/TypeLocalizedLanguages" }, + "default": ["en", "fr"], + "description": "ISO 639-1 code indicating the languages supported by the configuration file. It will use value(s) provided here to access bilangual configuration nodes. For value(s) provided here, each bilingual configuration node MUST provide a value.", + "minItems": 1 + }, + + "TypeValidVersions": { + "enum": ["1.0"], + "description": "The schema version that can be used to validate the configuration file. The schema should enumerate the list of versions accepted by this version of the viewer." + }, + + "TypeMapFeaturesInstance": { + "description": "The map feature configuration.", + + "type": "object", + "properties": { + "map": { "$ref": "#/definitions/TypeMapConfig" }, + + + "appBar": { "$ref": "#/definitions/TypeAppBarProps" }, + "navBar": { "$ref": "#/definitions/TypeNavBarProps" }, + "components": { "$ref": "#/definitions/TypeMapComponents" }, + "corePackages": { "$ref": "#/definitions/TypeMapCorePackages" }, + "externalPackages": { "$ref": "#/definitions/TypeServiceUrls" }, + "serviceUrls": { "$ref": "#/definitions/TypeServiceUrls" }, + "suportedLanguages": { "$ref": "#/definitions/TypeListOfLocalizedLanguages" }, + "versionUsed": { "$ref": "#/definitions/TypeValidVersions" } + + }, + "required": ["map", "suportedLanguages"] + } + }, + + "properties": { + "map": { "$ref": "#/definitions/TypeMapConfig" }, + "appBar": { "$ref": "#/definitions/TypeAppBarProps" }, + "navBar": { "$ref": "#/definitions/TypeNavBarProps" }, + "components": { "$ref": "#/definitions/TypeMapComponents" }, + "corePackages": { "$ref": "#/definitions/TypeMapCorePackages" }, + "externalPackages": { "$ref": "#/definitions/TypeServiceUrls" }, + "serviceUrls": { "$ref": "#/definitions/TypeServiceUrls" }, + "suportedLanguages": { "$ref": "#/definitions/TypeListOfLocalizedLanguages" }, + "versionUsed": { "$ref": "#/definitions/TypeValidVersions" }, + "draw1": { + + + "type": "object", + "properties": { + "enable": { + "type": "boolean", + "title": "Enable" + }, + "open": { + "type": "boolean", + "title": "Open by default", + "default": true + }, + "tools": { + "type": "array", + "title": "Tools", + "minItems":0, + "uniqueItems": true, + "items":{ + "enum": [ + "picker", + "point", + "polyline", + "polygon", + "edit", + "measure", + "extent", + "write", + "read" + ] + }, + + + "description": "Tools to add to draw toolbar.", + "default": [ + "picker", + "point", + "polyline", + "polygon", + "edit", + "measure", + "extent", + "write", + "read" + ] + } + + } + } + }, + + + + "required": ["map", "suportedLanguages"] + }, + "rangeSlider": { + "type": "object", + "properties": { + "enable": { + "type": "boolean", + "title": "Enable", + "default": false + }, + "open": { + "type": "boolean", + "title": "Open by default", + "default": false + }, + "maximize": { + "type": "boolean", + "title": "Slider maximized by default", + "default": false + }, + "maximizeDesc": { + "type": "boolean", + "title": "Description section open by default", + "default": false + }, + "autorun": { + "type": "boolean", + "title": "Start animation on load", + "defaul": false + }, + "loop": { + "type": "boolean", + "title": "Play the animation in loop", + "default": false + }, + "reverse": { + "type": "boolean", + "title": "Animation in reverse mode", + "default": false + }, + "lock": { + "type": "boolean", + "title": "Lock handle", + "default": false + }, + "controls": { + "type": "array", + "minItems":0, + "uniqueItems": true, + + "items": { + "enum": [ + "lock", + "loop", + "delay", + "export", + "refresh", + "reverse" + ] + }, + "default": [ + "lock", + "delay" + ], + "title": "Slider bar controls" + }, + "params": { + "type": "object", + "title": "Parameters", + "properties": { + "type": { + "title": "Slider Type", + "type": "string", + "enum": [ + "number", + "date", + "wmst" + ], + "description": "If the Date or WMS-T is selected, range and limit must be in milliseconds. Note: Date is for esri layer and WMS-T is for ogc WMS-T layer.", + "default": "number" + }, + "rangeType": { + "title": "Range Type", + "type": "string", + "enum": [ + "single", + "dual" + ], + "description": "Type of range (single for one handle or dual for 2 handles).", + "default": "dual" + }, + "stepType": { + "title": "Step Type", + "type": "string", + "enum": [ + "dynamic", + "static" + ], + "description": "Type of step (dynamic for open values or static from a list of values).", + "default": "dynamic" + }, + "precision": { + "title": "Precision", + "type": "string", + "enum": [ + "0", + "1", + "2", + "date", + "hour" + ], + "description": "Precision of numeric data (0, 1, 2) or date (Date, Hour).", + "default": "0" + }, + "delay": { + "title": "Animation Delay", + "type": "string", + "enum": [ + "3000", + "4000", + "5000", + "6000", + "7000" + ], + "description": "Delay between animations.", + "default": "3000" + }, + "rangeInterval": { + "type": "number", + "title": "Interval (in milliseconds for date data type)", + "default": -1, + "description": "When the limit type is dynamic, this option allows you to define a preset interval between the two handles. The value must be in milliseconds date data type. For other numerical value formats, enter the desired value directly. To convert a time interval into milliseconds, use the built-in converter. Will start at the beginning of the scroll bar, unless the \"Start at end\" option is enabled." + }, + "startRangeEnd": { + "type": "boolean", + "title": "Start interval at the end", + "default": false + }, + "range": { + "type": "object", + "title": "", + "properties": { + "min": { + "type": "number", + "title": "Minimum value of the range (in milliseconds for date data type)", + "description": "The minimum value of the range that corresponds to the position of the left handle. If not defined, the minimum limit will be used. The value must be in milliseconds date data type. For other numerical value formats, enter the desired value directly. To convert a date to milliseconds, use the site's built-in converter.", + "default": 0 + }, + "max": { + "type": "number", + "title": "Maximum value of the range (in milliseconds for date data type)", + "description": "The maximum value of the range that corresponds to the position of the right handle. If not defined, the maximum limit will be used. The value must be in milliseconds date data type. For other numerical value formats, enter the desired value directly. To convert a date to milliseconds, use the site's built-in converter.", + "default": 1 + } + } + }, + "limit": { + "type": "object", + "title": "Limits of the data set values", + "properties": { + "min": { + "type": "number", + "title": "Minimum Limit", + "description": "The minimum value contained in the dataset. If not defined, the value will be found using the values present in the used field of the layer. To convert a date to milliseconds, use the site's built-in converter.", + "default": 0 + }, + "max": { + "type": "number", + "title": "Maximum Limit", + "description": "The maximum value contained in the dataset. If not defined, the value will be found using the values present in the used field of the layer. To convert a date to milliseconds, use the site's built-in converter.", + "default": 1 + }, + "staticItems": { + "type": "array", + "title": "Static Limit Values", + "items": { + "title": "Value", + "type": "number" + }, + "default": [], + "description": "The values for static limit. Note: the minimum and maximum limits are used to define the lower and upper static limits. Enter only the intermediate values here." + } + } + }, + "units": { + "type": "string", + "title": "Units", + "description": "Shown at the right of the time axis. Keep it short to improve readability.", + "default": "" + }, + "description": { + "type": "string", + "title": "Description", + "description": "Description to add in the section below the slider." + } + }, + "required": [ + "type" + ] + }, + "layers": { + "type": "array", + "title": "Layers", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "The id of the layer for referencing within the viewer (does not relate directly to any external service).", + "title": "Layer id", + "enum":[] + + }, + "field": { + "type": "string", + "description": "The field name to use.", + "title": "Field Name", + "default": "" + }, + "isTimeAware": { + "type": "boolean", + "title": "Is Time Aware", + "default": true, + "description": "If time aware is true, the slider will use the TimeInfo (ESRI) or time dimension (WMS) to extract limits and range." + } + }, + "required": [ + "id, field", + "isTimeAware" + ] + } + } + }, + "additionalProperties": false, + "required": [ + "params", + "layers" + ] + }, + "areasOfInterest": { + "type": "object", + "properties": { + "enable": { + "type": "boolean", + "title": "Enable" + }, + "areas": { + "type": "array", + "items": { + "type": "object", + "properties": { + "title-en-CA": { + "type": "string", + "title": "English Title" + }, + "title-fr-CA": { + "type": "string", + "title": "French Title" + }, + "xmin": { + "type": "number", + "title": "Minimum value of x", + "default": -4844430 + }, + "ymin": { + "type": "number", + "title": "Minimum value of y", + "default": -1052774 + }, + "xmax": { + "type": "number", + "title": "Maximum value of x", + "default": 5666163 + }, + "ymax": { + "type": "number", + "title": "Maximum value of y", + "default": 4170111 + }, + "wkid": { + "type": "number", + "title": "Spatial Reference", + "default": 3978 + }, + "thumbnailUrl": { + "type": "string", + "title": "Thumbnail URL" + } + }, + "required": [ + "title-en-CA", + "title-fr-CA" + ] + } + } + } + }, + "chart": { + "type": "object", + "properties": { + "enable": { + "type": "boolean", + "title": "Enable" + }, + "type": { + "title": "Chart Type", + "type": "string", + "enum": [ + "pie", + "bar", + "line" + ], + "description": "", + "default": "pie" + }, + "title": { + "title": "Title", + "type": "string", + "default": "" + }, + "labelsPie": { + "type": "object", + "title": "Labels", + "properties": { + "type": { + "title": "Type", + "type": "string", + "enum": [ + "field", + "config" + ], + "description": "Retreive the labels from a field or from the configuration.", + "default": "config" + }, + "values": { + "title": "Values", + "type": "string", + "description": "Values separated by semi colon or field name.", + "default": "" + }, + "split": { + "title": "Split Character", + "type": "string", + "description": "Character to use to split list of values.", + "default": ";" + } + }, + "required": [ + "type", + "values", + "split" + ] + }, + "options": { + "title": "Options", + "type": "object", + "properties": { + "colors": { + "title": "Datasets Colors", + "type": "string", + "description": "Hexadecimal color code separated by semicolon. If not provided, default colors will be use.", + "default": "" + }, + "cutOut": { + "title": "Cut Out Percentage", + "type": "number", + "description": "Cut out percentage to use to give doughnut effect.", + "default": 0, + "minimum": 0, + "maximum": 80 + } + }, + "required": [ + "cutOut" + ] + }, + "axis": { + "type": "object", + "title": "Labels", + "properties": { + "xAxis": { + "title": "X Axis", + "type": "object", + "properties": { + "title": { + "title": "Title", + "type": "string", + "default": "" + }, + "type": { + "title": "Type", + "type": "string", + "enum": [ + "field", + "config", + "linear", + "date" + ], + "description": "Retreive the labels from a field or configuration for bar chart or from values (linear or time) for line chart.", + "default": "config" + }, + "values": { + "title": "Values", + "type": "string", + "description": "Values separated by semicolon or field name.", + "default": "" + }, + "split": { + "title": "Split Character", + "type": "string", + "description": "Character to use to split list of values.", + "default": ";" + } + }, + "required": [ + "type", + "values", + "split" + ] + }, + "yAxis": { + "title": "Y Axis", + "type": "object", + "properties": { + "title": { + "title": "Title", + "type": "string", + "default": "" + }, + "type": { + "title": "Type", + "type": "string", + "enum": [ + "field", + "config", + "linear", + "time" + ], + "description": "Retreive the labels from a field or configuration for bar chart or from values (linear or time) for line chart.", + "default": "config" + }, + "values": { + "title": "Values", + "type": "string", + "description": "Values separated by semicolon or field name.", + "default": "" + }, + "split": { + "title": "Split Character", + "type": "string", + "description": "Character to use to split list of values.", + "default": ";" + } + }, + "required": [ + "type", + "values", + "split" + ] + }, + "required": [ + "xAxis", + "yAxis" + ] + } + }, + "layers": { + "type": "array", + "title": "Layers", + "items": { + "type": "object", + "properties": { + "id": { + "title": "Layer ID", + "type": "string", + "description": "", + "enum":[] + }, + "nameField": { + "type": "string", + "title": "Name Field", + "description": "Field name to use for the chart selection combo box when multiple charts." + }, + "type": { + "title": "Chart Data Type", + "type": "string", + "enum": [ + "inline", + "link" + ], + "description": "Type of data (inline for items inside the layer or link for items inside a link table).", + "default": "inline" + }, + "linkUrl": { + "type": "string", + "title": "Link URL", + "description": "URL of the link table." + }, + "linkField": { + "type": "string", + "title": "Link Field", + "description": "Field name for the link between the layer and the table." + }, + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "type": { + "title": "Type of data inside the field", + "type": "string", + "enum": [ + "single", + "combine" + ], + "description": "Single if there is only one value inside the field. Combine if we use time axis and time and value are part of the field.", + "default": "combine" + }, + "linkType": { + "title": "Type of link", + "type": "string", + "enum": [ + "single", + "multi" + ], + "description": "How data is structure inside the link table (single for one field for value and one for date OR multiple if there is multiple datasets inside one field and the chart needs to parse).", + "default": "single" + }, + "link": { + "title": "Link Field", + "type": "string", + "description": "Link field to link between layer and table." + }, + "date": { + "title": "Date Field", + "type": "string", + "description": "Field to use for the date" + }, + "measure": { + "title": "Measure Field", + "type": "string" + }, + "values": { + "title": "Label Values", + "type": "string", + "description": "Field name to get labels from for link type multi." + }, + "label": { + "type": "object", + "title": "Dataset Labels", + "properties": { + "type": { + "title": "Type", + "type": "string", + "enum": [ + "field", + "config" + ], + "description": "Retreive the labels from a field or from the configuration.", + "default": "config" + }, + "values": { + "title": "Values", + "type": "string", + "description": "Values separated by semicolon or field name.", + "default": "" + }, + "split": { + "title": "Split Character", + "type": "string", + "description": "Character to use to split list of values.", + "default": ";" + } + }, + "required": [ + "type", + "values", + "split" + ] + }, + "regex": { + "title": "Dataset splitter", + "type": "string", + "description": "

Regex value to split datasets inside the field.

This field is to manage when you have multiple datasets or combine values in the same field. To be able to separate datasets from values, we will use a regex expression. We encourage you to use your data and test your regex expression on a online site like https://regex101.com.

Below we list some samples of datasets and regex:

  • Sample 1
    • Data: [255;255;255];[120;232;23];[32;44;134]
    • Regex: \\\\[|\\\\];\\\\[|\\\\]
    • Ouput: 3 datasets (e.g. 255;255;255). Values inside dataset will be split by the field 'Values Splitter'.
  • Sample 2
    • Data: (2011-03-28,0.511),(2011-04-04,0.421)
    • Regex: \\\\(|\\\\),\\\\(|\\\\)
    • Ouput: 1 datasets, 2 pairs of values (e.g. 2011-03-28,0.511). Values inside are combined (y and x axis) and will be split by the field 'Values Splitter'.

Note: we need to double the '\\' character

", + "default": "\\(|\\),\\(|\\)" + }, + "split": { + "title": "Values splitter", + "type": "string", + "default": ",", + "description": "Character to use to split values inside a field. E.g. a field contains '10;20;30' means there is 3 values split by ';' or [1,2,3];[4,5,6] means there is 2 datasets with 3 values each split by ','." + }, + "prefix": { + "title": "Prefix", + "type": "string", + "default": "", + "description": "Prefix to add to data hover." + }, + "suffix": { + "title": "Suffix", + "type": "string", + "default": "", + "description": "Suffix to add to data hover." + } + }, + "required": [ + "type", + "measure", + "split" + ] + } + }, + "details": { + "type": "object", + "title": "Details", + "properties": { + "enabled": { + "type": "boolean", + "title": "Enable" + }, + "value": { + "type": "string", + "title": "Value", + "description": "String with the custom details in markdown notation." + } + } + } + }, + "required": [ + "id", + "nameField", + "type", + "data" + ] + } + }, + "required": [ + "type", + "layers" + ] + } + }, + "swiper": { + "type": "object", + "properties": { + "enable": { + "type": "boolean", + "title": "Enable" + }, + "type": { + "type": "string", + "title": "Type", + "enum": [ + "vertical", + "horizontal" + ], + "default": "vertical" + }, + "keyboardOffset": { + "type": "number", + "title": "Keyboard Movement", + "description": "Pixel value of swiper displacement.", + "default": 10, + "minimum": 1, + "maximum": 100 + }, + "layers": { + "type": "string", + "title": "Layers", + "description": "The id of the layer for referencing within the viewer (does not relate directly to any external service).", + "enum":[] + } + + + + + + }, + "required": [ + "type", + "keyboardOffset", + "layers" + ] + }, + "draw": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "GeoView Core Plugin Schema", + "comments": "It correspond to the TypeMapFeaturesInstance type.", + + "type": "object", + "properties": { + "enable": { + "type": "boolean", + "title": "Enable" + }, + "open": { + "type": "boolean", + "title": "Open by default", + "default": true + }, + "tools": { + "type": "array", + "title": "Tools", + "minItems":0, + "uniqueItems": true, + "items":{ + "enum": [ + "picker", + "point", + "polyline", + "polygon", + "edit", + "measure", + "extent", + "write", + "read" + ] + }, + + + "description": "Tools to add to draw toolbar.", + "default": [ + "picker", + "point", + "polyline", + "polygon", + "edit", + "measure", + "extent", + "write", + "read" + ] + } + + } + }, + "thematicSlider": { + "type": "object", + "properties": { + "enable": { + "type": "boolean", + "title": "Enable" + }, + "open": { + "type": "boolean", + "title": "Open by default", + "default": true + }, + "autorun": { + "type": "boolean", + "title": "Start animation on load", + "defaul": false + }, + "loop": { + "type": "boolean", + "title": "Play the animation in loop", + "default": false + }, + "slider": { + "type": "boolean", + "title": "Enable slider control", + "default": true + }, + "stack": { + "type": "boolean", + "title": "Stack layer visibility", + "default": false + }, + "legendStack": { + "type": "boolean", + "title": "Stack legend items (useful with the stack option to see all active elements legend)", + "default": true + }, + "layers": { + "type": "array", + "title": "Layers", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "The id of the layer for referencing within the viewer (does not relate directly to any external service).", + "title": "Layer id", + "enum":[] + + }, + "duration": { + "type": "number", + "title": "Animation duration in milliseconds", + "minimum": 3000, + "default": 3000 + }, + "title": { + "type": "string", + "title": "Title for this layer animation" + }, + "description": { + "type": "string", + "title": "Description for this layer animation" + }, + "legend": { + "type": "array", + "title": "Legend", + "description": "Add items for a custom legend, leave it blank for default legend.", + "default": [], + "items": { + "type": "object", + "properties": { + "label": { + "type": "string", + "title": "Label" + }, + "image": { + "type": "object", + "properties": { + "url": { + "type": "string", + "title": "URL", + "default": "" + }, + "width": { + "type": "number", + "title": "Width", + "minimum": 25, + "maximum": 150, + "default": 150 + }, + "height": { + "type": "number", + "title": "Height", + "minimum": 25, + "maximum": 150, + "default": 150 + } + }, + "required": [ + "url", + "width", + "height" + ] + } + }, + "required": [ + "image" + ] + } + } + }, + "required": [ + "id", + "duration" + ] + } + }, + "required": [ + "layers" + ] + } + } + } + ] + } + + diff --git a/src/components/db.json b/src/components/db.json index 06557d9..5899205 100644 --- a/src/components/db.json +++ b/src/components/db.json @@ -1,423 +1,200 @@ { + "plugins": [ - { - "rangeSlider": { + + { "draw": { + + "title": "Draw", + + + "type": "object", - "properties": { - "enable": { + "properties": { + + "enable": { "type": "boolean", "title": "Enable", - "default": false + "default":true }, - "open": { + "open": { + "type": "boolean", "title": "Open by default", - "default": false - }, - "maximize": { - "type": "boolean", - "title": "Slider maximized by default", - "default": false - }, - "maximizeDesc": { - "type": "boolean", - "title": "Description section open by default", - "default": false - }, - "autorun": { - "type": "boolean", - "title": "Start animation on load", - "defaul": false - }, - "loop": { - "type": "boolean", - "title": "Play the animation in loop", - "default": false - }, - "reverse": { - "type": "boolean", - "title": "Animation in reverse mode", - "default": false - }, - "lock": { - "type": "boolean", - "title": "Lock handle", - "default": false + "default": true }, - "controls": { + "tools": { "type": "array", - "default": [ - "lock", - "delay" - ], - "items": { - "type": "string", + "title": "Tools", + "minItems":0, + "uniqueItems": true, + "items":{ "enum": [ - "lock", - "loop", - "delay", - "export", - "refresh", - "reverse" + "picker", + "point", + "polyline", + "polygon", + "edit", + "measure", + "extent", + "write", + "read" ] }, - "title": "Slider bar controls" + + + "description": "Tools to add to draw toolbar.", + "default": [ + "picker", + "point", + "polyline", + "polygon", + "edit", + "measure", + "extent", + "write", + "read" + ] + } + + }, + "required": [ + "enabled", + "open","tools" + ] + }, + "chart": { + + "title": "Chart", + "type": "object", + "properties": { + + "enable": { + "type": "boolean", + "title": "Enable", + "description":"chart", + + "default":true + + }, - "params": { + "type": { + "title": "Chart Type", + "type": "string", + "enum": [ + "pie", + "bar", + "line" + ], + + "default": "pie" + }, + "title": { + "title": "Title", + "type": "string", + "default": "" + }, + "labelsPie": { "type": "object", - "title": "Parameters", + "title": "Labels", "properties": { "type": { - "title": "Slider Type", - "type": "string", - "enum": [ - "number", - "date", - "wmst" - ], - "description": "If the Date or WMS-T is selected, range and limit must be in milliseconds. Note: Date is for esri layer and WMS-T is for ogc WMS-T layer.", - "default": "number" - }, - "rangeType": { - "title": "Range Type", + "title": "Type", "type": "string", "enum": [ - "single", - "dual" + "field", + "config" ], - "description": "Type of range (single for one handle or dual for 2 handles).", - "default": "dual" + "description": "Retreive the labels from a field or from the configuration.", + "default": "config" }, - "stepType": { - "title": "Step Type", + "values": { + "title": "Values", "type": "string", - "enum": [ - "dynamic", - "static" - ], - "description": "Type of step (dynamic for open values or static from a list of values).", - "default": "dynamic" + "description": "Values separated by semi colon or field name.", + "default": "" }, - "precision": { - "title": "Precision", + "split": { + "title": "Split Character", "type": "string", - "enum": [ - "0", - "1", - "2", - "date", - "hour" - ], - "description": "Precision of numeric data (0, 1, 2) or date (Date, Hour).", - "default": "0" - }, - "delay": { - "title": "Animation Delay", + "description": "Character to use to split list of values.", + "default": ";" + } + }, + "required": [ + "type", + "values", + "split" + ] + }, + "options": { + "title": "Options", + "type": "object", + "properties": { + "colors": { + "title": "Datasets Colors", "type": "string", - "enum": [ - "3000", - "4000", - "5000", - "6000", - "7000" - ], - "description": "Delay between animations.", - "default": "3000" + "description": "Hexadecimal color code separated by semicolon. If not provided, default colors will be use.", + "default": "" }, - "rangeInterval": { + "cutOut": { + "title": "Cut Out Percentage", "type": "number", - "title": "Interval (in milliseconds for date data type)", - "default": -1, - "description": "When the limit type is dynamic, this option allows you to define a preset interval between the two handles. The value must be in milliseconds date data type. For other numerical value formats, enter the desired value directly. To convert a time interval into milliseconds, use the built-in converter. Will start at the beginning of the scroll bar, unless the \"Start at end\" option is enabled." - }, - "startRangeEnd": { - "type": "boolean", - "title": "Start interval at the end", - "default": false - }, - "range": { + "description": "Cut out percentage to use to give doughnut effect.", + "default": 0, + "minimum": 0, + "maximum": 80 + } + }, + "required": [ + "cutOut" + ] + }, + "axis": { + "type": "object", + "title": "Labels", + "properties": { + "xAxis": { + "title": "X Axis", "type": "object", - "title": "", "properties": { - "min": { - "type": "number", - "title": "Minimum value of the range (in milliseconds for date data type)", - "description": "The minimum value of the range that corresponds to the position of the left handle. If not defined, the minimum limit will be used. The value must be in milliseconds date data type. For other numerical value formats, enter the desired value directly. To convert a date to milliseconds, use the site's built-in converter.", - "default": 0 + "title": { + "title": "Title", + "type": "string", + "default": "" }, - "max": { - "type": "number", - "title": "Maximum value of the range (in milliseconds for date data type)", - "description": "The maximum value of the range that corresponds to the position of the right handle. If not defined, the maximum limit will be used. The value must be in milliseconds date data type. For other numerical value formats, enter the desired value directly. To convert a date to milliseconds, use the site's built-in converter.", - "default": 1 + "type": { + "title": "Type", + "type": "string", + "enum": [ + "field", + "config", + "linear", + "date" + ], + "description": "Retreive the labels from a field or configuration for bar chart or from values (linear or time) for line chart.", + "default": "config" + }, + "values": { + "title": "Values", + "type": "string", + "description": "Values separated by semicolon or field name.", + "default": "" + }, + "split": { + "title": "Split Character", + "type": "string", + "description": "Character to use to split list of values.", + "default": ";" } - } + }, + "required": [ + "type", + "values", + "split" + ] }, - "limit": { - "type": "object", - "title": "Limits of the data set values", - "properties": { - "min": { - "type": "number", - "title": "Minimum Limit", - "description": "The minimum value contained in the dataset. If not defined, the value will be found using the values present in the used field of the layer. To convert a date to milliseconds, use the site's built-in converter.", - "default": 0 - }, - "max": { - "type": "number", - "title": "Maximum Limit", - "description": "The maximum value contained in the dataset. If not defined, the value will be found using the values present in the used field of the layer. To convert a date to milliseconds, use the site's built-in converter.", - "default": 1 - }, - "staticItems": { - "type": "array", - "title": "Static Limit Values", - "items": { - "title": "Value", - "type": "number" - }, - "default": [], - "description": "The values for static limit. Note: the minimum and maximum limits are used to define the lower and upper static limits. Enter only the intermediate values here." - } - } - }, - "units": { - "type": "string", - "title": "Units", - "description": "Shown at the right of the time axis. Keep it short to improve readability.", - "default": "" - }, - "description": { - "type": "string", - "title": "Description", - "description": "Description to add in the section below the slider." - } - }, - "required": [ - "type" - ] - }, - "layers": { - "type": "array", - "title": "Layers", - "items": { - "type": "object", - "properties": { - "id": { - "type": "string", - "description": "The id of the layer for referencing within the viewer (does not relate directly to any external service).", - "title": "Layer id", - "default": "" - }, - "field": { - "type": "string", - "description": "The field name to use.", - "title": "Field Name", - "default": "" - }, - "isTimeAware": { - "type": "boolean", - "title": "Is Time Aware", - "default": true, - "description": "If time aware is true, the slider will use the TimeInfo (ESRI) or time dimension (WMS) to extract limits and range." - } - }, - "required": [ - "id, field", - "isTimeAware" - ] - } - } - }, - "additionalProperties": false, - "required": [ - "params", - "layers" - ] - }, - "areasOfInterest": { - "type": "object", - "properties": { - "enable": { - "type": "boolean", - "title": "Enable" - }, - "areas": { - "type": "array", - "items": { - "type": "object", - "properties": { - "title-en-CA": { - "type": "string", - "title": "English Title" - }, - "title-fr-CA": { - "type": "string", - "title": "French Title" - }, - "xmin": { - "type": "number", - "title": "Minimum value of x", - "default": -4844430 - }, - "ymin": { - "type": "number", - "title": "Minimum value of y", - "default": -1052774 - }, - "xmax": { - "type": "number", - "title": "Maximum value of x", - "default": 5666163 - }, - "ymax": { - "type": "number", - "title": "Maximum value of y", - "default": 4170111 - }, - "wkid": { - "type": "number", - "title": "Spatial Reference", - "default": 3978 - }, - "thumbnailUrl": { - "type": "string", - "title": "Thumbnail URL" - } - }, - "required": [ - "title-en-CA", - "title-fr-CA" - ] - } - } - } - }, - "chart": { - "type": "object", - "properties": { - "enable": { - "type": "boolean", - "title": "Enable" - }, - "type": { - "title": "Chart Type", - "type": "string", - "enum": [ - "pie", - "bar", - "line" - ], - "description": "", - "default": "pie" - }, - "title": { - "title": "Title", - "type": "string", - "default": "" - }, - "labelsPie": { - "type": "object", - "title": "Labels", - "properties": { - "type": { - "title": "Type", - "type": "string", - "enum": [ - "field", - "config" - ], - "description": "Retreive the labels from a field or from the configuration.", - "default": "config" - }, - "values": { - "title": "Values", - "type": "string", - "description": "Values separated by semi colon or field name.", - "default": "" - }, - "split": { - "title": "Split Character", - "type": "string", - "description": "Character to use to split list of values.", - "default": ";" - } - }, - "required": [ - "type", - "values", - "split" - ] - }, - "options": { - "title": "Options", - "type": "object", - "properties": { - "colors": { - "title": "Datasets Colors", - "type": "string", - "description": "Hexadecimal color code separated by semicolon. If not provided, default colors will be use.", - "default": "" - }, - "cutOut": { - "title": "Cut Out Percentage", - "type": "number", - "description": "Cut out percentage to use to give doughnut effect.", - "default": 0, - "minimum": 0, - "maximum": 80 - } - }, - "required": [ - "cutOut" - ] - }, - "axis": { - "type": "object", - "title": "Labels", - "properties": { - "xAxis": { - "title": "X Axis", - "type": "object", - "properties": { - "title": { - "title": "Title", - "type": "string", - "default": "" - }, - "type": { - "title": "Type", - "type": "string", - "enum": [ - "field", - "config", - "linear", - "date" - ], - "description": "Retreive the labels from a field or configuration for bar chart or from values (linear or time) for line chart.", - "default": "config" - }, - "values": { - "title": "Values", - "type": "string", - "description": "Values separated by semicolon or field name.", - "default": "" - }, - "split": { - "title": "Split Character", - "type": "string", - "description": "Character to use to split list of values.", - "default": ";" - } - }, - "required": [ - "type", - "values", - "split" - ] - }, - "yAxis": { - "title": "Y Axis", + "yAxis": { + "title": "Y Axis", "type": "object", "properties": { "title": { @@ -455,194 +232,2495 @@ "values", "split" ] - }, + } + }, "required": [ "xAxis", "yAxis" ] + }, + "layers": { + "type": "array", + "title": "Layers", + "items": { + "type": "object", + "properties": { + "id": { + "title": "Layer ID", + "type": "string", + "description": "ID of layer", + "enum":["1"] + }, + "nameField": { + "type": "string", + "title": "Name Field", + "description": "Field name to use for the chart selection combo box when multiple charts." + }, + "type": { + "title": "Chart Data Type", + "type": "string", + "enum": [ + "inline", + "link" + ], + "description": "Type of data (inline for items inside the layer or link for items inside a link table).", + "default": "inline" + }, + "linkUrl": { + "type": "string", + "title": "Link URL", + "description": "URL of the link table." + }, + "linkField": { + "type": "string", + "title": "Link Field", + "description": "Field name for the link between the layer and the table." + }, + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "type": { + "title": "Type of data inside the field", + "type": "string", + "enum": [ + "single", + "combine" + ], + "description": "Single if there is only one value inside the field. Combine if we use time axis and time and value are part of the field.", + "default": "combine" + }, + "linkType": { + "title": "Type of link", + "type": "string", + "enum": [ + "single", + "multi" + ], + "description": "How data is structure inside the link table (single for one field for value and one for date OR multiple if there is multiple datasets inside one field and the chart needs to parse).", + "default": "single" + }, + "link": { + "title": "Link Field", + "type": "string", + "description": "Link field to link between layer and table." + }, + "date": { + "title": "Date Field", + "type": "string", + "description": "Field to use for the date" + }, + "measure": { + "title": "Measure Field", + "type": "string" + }, + "values": { + "title": "Label Values", + "type": "string", + "description": "Field name to get labels from for link type multi." + }, + "label": { + "type": "object", + "title": "Dataset Labels", + "properties": { + "type": { + "title": "Type", + "type": "string", + "enum": [ + "field", + "config" + ], + "description": "Retreive the labels from a field or from the configuration.", + "default": "config" + }, + "values": { + "title": "Values", + "type": "string", + "description": "Values separated by semicolon or field name.", + "default": "" + }, + "split": { + "title": "Split Character", + "type": "string", + "description": "Character to use to split list of values.", + "default": ";" + } + }, + "required": [ + "type", + "values", + "split" + ] + }, + "regex": { + "title": "Dataset splitter", + "type": "string", + "description": "

Regex value to split datasets inside the field.

This field is to manage when you have multiple datasets or combine values in the same field. To be able to separate datasets from values, we will use a regex expression. We encourage you to use your data and test your regex expression on a online site like https://regex101.com.

Below we list some samples of datasets and regex:

  • Sample 1
    • Data: [255;255;255];[120;232;23];[32;44;134]
    • Regex: \\\\[|\\\\];\\\\[|\\\\]
    • Ouput: 3 datasets (e.g. 255;255;255). Values inside dataset will be split by the field 'Values Splitter'.
  • Sample 2
    • Data: (2011-03-28,0.511),(2011-04-04,0.421)
    • Regex: \\\\(|\\\\),\\\\(|\\\\)
    • Ouput: 1 datasets, 2 pairs of values (e.g. 2011-03-28,0.511). Values inside are combined (y and x axis) and will be split by the field 'Values Splitter'.

Note: we need to double the '\\' character

", + "default": "\\(|\\),\\(|\\)" + }, + "split": { + "title": "Values splitter", + "type": "string", + "default": ",", + "description": "Character to use to split values inside a field. E.g. a field contains '10;20;30' means there is 3 values split by ';' or [1,2,3];[4,5,6] means there is 2 datasets with 3 values each split by ','." + }, + "prefix": { + "title": "Prefix", + "type": "string", + "default": "", + "description": "Prefix to add to data hover." + }, + "suffix": { + "title": "Suffix", + "type": "string", + "default": "", + "description": "Suffix to add to data hover." + } + }, + "required": [ + "type", + "measure", + "split" + ] + } + }, + "details": { + "type": "object", + "title": "Details", + "properties": { + "enabled": { + "type": "boolean", + "title": "Enable" + }, + "value": { + "type": "string", + "title": "Value", + "description": "String with the custom details in markdown notation." + } + } + } + }, + "required": [ + "id", + "nameField", + "type", + "data" + ] } + } + }, + "required": [ + "type", + "layers" + ] + }, + "rangeSlider": { + "$id": "https://cgpv/schema", + "$schema": "http://json-schema.org/draft-07/schema#", + + "title": "Range Slider", + "type": "object", + "properties": { + "enable": { + "type": "boolean", + "title": "Enable", + "default": true + }, + "open": { + "type": "boolean", + "title": "Open by default", + "default": false + }, + "maximize": { + "type": "boolean", + "title": "Slider maximized by default", + "default": false + }, + "maximizeDesc": { + "type": "boolean", + "title": "Description section open by default", + "default": false + }, + "autorun": { + "type": "boolean", + "title": "Start animation on load", + "defaul": false + }, + "loop": { + "type": "boolean", + "title": "Play the animation in loop", + "default": false + }, + "reverse": { + "type": "boolean", + "title": "Animation in reverse mode", + "default": false + }, + "lock": { + "type": "boolean", + "title": "Lock handle", + "default": false + }, + "controls": { + "type": "array", + "minItems":0, + "uniqueItems": true, + + "items": { + "enum": [ + "lock", + "loop", + "delay", + "export", + "refresh", + "reverse" + ] + }, + "default": [ + "lock", + "delay" + ], + "title": "Slider bar controls" + + }, + "params": { + "type": "object", + "title": "Parameters", + "properties": { + "type": { + "title": "Slider Type", + "type": "string", + "enum": [ + "number", + "date", + "wmst" + ], + "description": "If the Date or WMS-T is selected, range and limit must be in milliseconds. Note: Date is for esri layer and WMS-T is for ogc WMS-T layer.", + "default": "number" + }, + "rangeType": { + "title": "Range Type", + "type": "string", + "enum": [ + "single", + "dual" + ], + "description": "Type of range (single for one handle or dual for 2 handles).", + "default": "dual" + }, + "stepType": { + "title": "Step Type", + "type": "string", + "enum": [ + "dynamic", + "static" + ], + "description": "Type of step (dynamic for open values or static from a list of values).", + "default": "dynamic" + }, + "precision": { + "title": "Precision", + "type": "string", + "enum": [ + "0", + "1", + "2", + "date", + "hour" + ], + "description": "Precision of numeric data (0, 1, 2) or date (Date, Hour).", + "default": "0" + }, + "delay": { + "title": "Animation Delay", + "type": "string", + "enum": [ + "3000", + "4000", + "5000", + "6000", + "7000" + ], + "description": "Delay between animations.", + "default": "3000" + }, + "rangeInterval": { + "type": "number", + "title": "Interval (in milliseconds for date data type)", + "default": -1, + "description": "When the limit type is dynamic, this option allows you to define a preset interval between the two handles. The value must be in milliseconds date data type. For other numerical value formats, enter the desired value directly. To convert a time interval into milliseconds, use the built-in converter. Will start at the beginning of the scroll bar, unless the \"Start at end\" option is enabled." + }, + "startRangeEnd": { + "type": "boolean", + "title": "Start interval at the end", + "default": false + }, + "range": { + "type": "object", + "title": "", + "properties": { + "min": { + "type": "number", + "title": "Minimum value of the range (in milliseconds for date data type)", + "description": "The minimum value of the range that corresponds to the position of the left handle. If not defined, the minimum limit will be used. The value must be in milliseconds date data type. For other numerical value formats, enter the desired value directly. To convert a date to milliseconds, use the site's built-in converter.", + "default": 0 + }, + "max": { + "type": "number", + "title": "Maximum value of the range (in milliseconds for date data type)", + "description": "The maximum value of the range that corresponds to the position of the right handle. If not defined, the maximum limit will be used. The value must be in milliseconds date data type. For other numerical value formats, enter the desired value directly. To convert a date to milliseconds, use the site's built-in converter.", + "default": 1 + } + } + }, + "limit": { + "type": "object", + "title": "Limits of the data set values", + "properties": { + "min": { + "type": "number", + "title": "Minimum Limit", + "description": "The minimum value contained in the dataset. If not defined, the value will be found using the values present in the used field of the layer. To convert a date to milliseconds, use the site's built-in converter.", + "default": 0 + }, + "max": { + "type": "number", + "title": "Maximum Limit", + "description": "The maximum value contained in the dataset. If not defined, the value will be found using the values present in the used field of the layer. To convert a date to milliseconds, use the site's built-in converter.", + "default": 1 + }, + "staticItems": { + "type": "array", + "title": "Static Limit Values", + "items": { + "title": "Value", + "type": "number" + }, + "default": [], + "description": "The values for static limit. Note: the minimum and maximum limits are used to define the lower and upper static limits. Enter only the intermediate values here." + } + } + }, + "units": { + "type": "string", + "title": "Units", + "description": "Shown at the right of the time axis. Keep it short to improve readability.", + "default": "" + }, + "description": { + "type": "string", + "title": "Description", + "description": "Description to add in the section below the slider." + } + }, + "required": [ + "type" + ] + }, + "layers": { + "type": "array", + "title": "Layers", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "The id of the layer for referencing within the viewer (does not relate directly to any external service).", + "title": "Layer id", + "enum":["1"] + + }, + "field": { + "type": "string", + "description": "The field name to use.", + "title": "Field Name", + "default": "" + }, + "isTimeAware": { + "type": "boolean", + "title": "Is Time Aware", + "default": true, + "description": "If time aware is true, the slider will use the TimeInfo (ESRI) or time dimension (WMS) to extract limits and range." + } + }, + "required": [ + "id, field", + "isTimeAware" + ] + } + } + }, + + "required": [ + "params", + "layers" + ] + }, + + + + "map": { + "$id": "https://cgpv/schema", + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "GeoView Core Config Schema", + "type": "object", + "version": 1.0, + "comments": "Configuration for GeoView core packages, each packages manages it own schema. It correspond to the TypeMapFeaturesInstance type.", + + "definitions": { + + "TypeLocalizedString": { + "type": "object", + "minProperties": 1, + "properties": { + "en": { + "type": "string", + "description": "The English version of the string." + }, + "fr": { + "type": "string", + "description": "The French version of the string. " + } + } + }, + + "TypeDetailsLayerConfig": { + + "type": "object", + "properties": { + + "parser": { + "type": "string", + "description": "A path to a javascript file with a function for parsing the layers identify output. Only needed if a custom template is being used." + }, + "template": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "A path to an html template (English/French) that will override default identify output." + } + }, + "required": ["template"] + }, + + "TypeFeatureInfoLayerConfig": { + + "type": "object", + "properties": { + "queryable": { + "type": "boolean", + "default": true, + "title": "Allow querying. Default = true." + }, + "customParser": { "$ref": "#/definitions/TypeDetailsLayerConfig" }, + "nameField": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display field (English/French) of the layer. If it is not present the viewer will make an attempt to find the first valid field." + }, + "outfields": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "A comma separated list of attribute names (English/French) that should be requested on query (all by default)." + }, + "fieldTypes": { + "type": "string", + "description": "A comma separated list of types. Type at index i is associated to the variable at index i." + }, + "aliasFields": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "A comma separated list of attribute names (English/French) that should be use for alias. If empty, no alias will be set if not found." + } + }, + "required": [ + "queryable" + ] + }, + "TypeFeatureInfoNotQueryable": { + + "properties": { + "queryable": { + "const": false, + "description": "Do not allow querying.", + "type": "boolean" + } + }, + "required": [ + "queryable" + ], + "type": "object" + }, + + "TypeFooterBarProps": { + "type": "object", + "additionalProperties": false, + "properties": { + "tabs": { + "type": "object", + "description": "Available tabs", + "properties": { + "core": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "legend", + "layers", + "details", + "data-table", + "time-slider", + "geochart" + ] + }, + "minItems": 1, + "default": ["legend", "layers", "details", "data-table"], + "uniqueItems": true, + "description": "Default core tabs of footer bar to use. NOTE: config from packages for time-slider and geochart are in the same loaction as core config (<>-<>.json)." + }, + "custom": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "defaultTabs": { + "type": "string" + }, + "contentHTML": { + "type": "string" + } + } + }, + "minItems": 0, + "default": [], + "uniqueItems": true, + "description": "Custom tabs of footer bar to use" + } + }, + "additionalProperties": false + }, + "collapsed": { + "type": "boolean", + "default": false, + "description": "State of footer bar when map is loaded (expanded or collapsed)" + } + }, + "required": ["tabs"] + }, + + "TypeStrokeSymbolConfig": { + + "type": "object", + "description": "Stroke style for vector features.", + "minProperties": 1, + "properties": { + "color": { + "type": "string" + }, + "lineStyle": { + "enum": [ + "dash", + "dash-dot", + "dash-dot-dot", + "dot", + "longDash", + "longDash-dot", + "null", + "shortDash", + "shortDash-dot", + "shortDash-dot-dot", + "solid" + ] + }, + "width": { + "type": "number" + } + }, + "required": [ + "color", + "width", + "lineStyle" + ] + }, + + "TypeLineStringVectorConfig": { + + "type": "object", + "properties": { + "type": { "type":"string", + "default": "lineString", + "enum": [ + "lineString" + ] + }, + "stroke": { "$ref": "#/definitions/TypeStrokeSymbolConfig" } + }, + "required": [ + "type", + "stroke" + ] + }, + + "TypePolygonVectorConfig": { + + "type": "object", + "properties": { + "type": {"type":"string", "default": "filledPolygon", + "enum": ["filledPolygon"] + }, + "color": { "type": "string" }, + "stroke": { "$ref": "#/definitions/TypeStrokeSymbolConfig" }, + "paternSize": { + "type": "number", + "description": "Distance between patern lines. Default = 8" + }, + "paternWidth": { + "type": "number", + "description": "Patern line width.default = 1." + }, + "fillStyle": { + "enum": [ + "solid", + "backwardDiagonal", + "cross", + "diagonalCross", + "forwardDiagonal", + "horizontal", + "null", + "vertical" + ], + "description": "Kind of filling for vector features. Default = solid. " + } + }, + "required": [ + "type", + "stroke" + ] + }, + + "TypeSimpleSymbolVectorConfig": { + + "type": "object", + "properties": { + "type": {"type":"string", + "default": "simpleSymbol", + "enum": ["simpleSymbol"] + }, + "rotation": { + "type": "number", + "description": "Symbol rotation in radians." + }, + "color": { "type": "string" }, + "stroke": { "$ref": "#/definitions/TypeStrokeSymbolConfig" }, + "size": { "type": "number" }, + "offset": { + "type": "array", + "items": { + "type": "number" + }, + "minItems": 2, + "maxItems": 2 + }, + "symbol": { + "enum": [ + "circle", + "+", + "diamond", + "square", + "triangle", + "X", + "star" + ] + } + }, + "required": + ["type", + "symbol" + ] + }, + + "TypeIconSymbolVectorConfig": { + + "type": "object", + "properties": { + "type": {"type":"string", + "default": "iconSymbol", + "enum": ["iconSymbol"] + }, + "mimeType": { "type": "string" }, + "src": { "type": "string" }, + "width": { + "type": "integer", + "description": "Icon width in pixel." + }, + "height": { + "type": "integer", + "description": "Icon height in pixel." + }, + "rotation": { + "type": "number", + "description": "Icon rotation in radians." + }, + "opacity": { + "type": "number", + "minimum": 0, + "maximum": 1, + "default": 1 + }, + "offset": { + "type": "array", + "items": { + "type": "number" + }, + "minItems": 2, + "maxItems": 2 + }, + "crossOrigin": { + "type": "string", + "description": "The crossOrigin attribute for loaded images. Note that you must provide a crossOrigin value if you want to access pixel data with the Canvas renderer." + } + }, + "required": ["type", "mimeType", "src"] + }, + + "TypeSimpleStyleConfig": { + + "type": "object", + "properties": { + "styleId": { + "type": "string" + }, + "styleType": { "type": "string", + "enum": ["simple"], + "default": "simple" + }, + "label": { + "type": "string" + }, + "settings": { "$ref": "#/definitions/TypeKindOfVectorSettings" } + }, + "required": [ + "styleType", + "label", + "settings" + ] + }, + + + "TypeUniqueValueStyleConfig": { + + "type": "object", + "properties": { + "styleId": { + "type": "string" + }, + "styleType": {"type":"string", + + "enum": ["uniqueValue"], + "default": "uniqueValue" + }, + "defaultLabel": { + "type": "string", + "description": "Label used if field/value association is not found." + }, + "defaultSettings": { + "$ref": "#/definitions/TypeKindOfVectorSettings", + "description": "Settings used if field/value association is not found." + }, + "defaultVisible": { + "description": "Flag used to show/hide features associated to the default label (default: yes).", + "enum": [ + "yes", + "no", + "always" + ] + }, + "fields": { + "type": "array", + "items": { + "type": "string" + }, + "minItems": 1 + }, + "uniqueValueStyleInfo": { "$ref": "#/definitions/TypeUniqueValueStyleInfo" } + }, + "required": [ + "styleType", + "fields", + "uniqueValueStyleInfo" + ] + }, + + "TypeUniqueValueStyleInfo": { + "type": "array", + "items": { + + "type": "object", + "properties": { + "label": { + "type": "string" + }, + "settings": { + "$ref": "#/definitions/TypeKindOfVectorSettings" + }, + "values": { + "items": { + "oneOf": [ + { "title": "String Value", + "type": "string" + }, + { "title": "Numeric Value", + "type": "number" + } + ] + }, + "minItems": 1, + "type": "array" + }, + "visible": { + "description": "Flag used to show/hide features associated to the label (default: yes).", + "enum": [ + "yes", + "no", + "always" + ] + } + } + + }, + "minItems": 1, + "required": [ + "label", + "values", + "options" + ] + + }, + + "TypeValidMapProjectionCodes": { + "default": 3978, + "description": "Spatial Reference EPSG code supported (https://epsg.io/). We support Web Mercator and Lambert Conical Conform Canada.", + "enum": [ + 3978, + 3857 + ] + }, + + "TypeClassBreakStyleConfig": { + + "type": "object", + "properties": { + "styleId": { + "type": "string" + }, + "styleType": {"type": "string", + "default": "classBreaks", + "enum": ["classBreaks"] + }, + + "defaultLabel": { + "type": "string", + "description": "Label used if field/value association is not found." + }, + "defaultVisible": { + "description": "Flag used to show/hide features associated to the default label (default: true).", + "type": "boolean", + "default": true + }, + "defaultSettings": { + "$ref": "#/definitions/TypeKindOfVectorSettings", + "description": "Settings used if field/value association is not found." + }, + "field": { + "type": "string" + }, + + "classBreakStyleInfo": { "$ref": "#/definitions/TypeClassBreakStyleInfo" } + }, + "required": ["styleType", "field", "classBreakStyleInfo"] + }, + + + "TypeClassBreakStyleInfo": { + + "type": "array", + "items": { + + "type": "object", + "properties": { + + "label": { + "type": "string" + }, + "minValue": { + "oneOf": [ + { "title": "minValue String value", + "type": "string" + }, + { "title": "minValue Numeric value", + "type": "number" + } + ] + }, + "maxValue": { + "oneOf": [ + { "title": "maxValue String value", + "type": "string" + }, + { "title": "maxValue Numeric value", + "type": "number" + } + ] + }, + "settings": { "$ref": "#/definitions/TypeKindOfVectorSettings" }, + + "visible": { + "description": "Flag used to show/hide features associated to the label (default: true).", + "type": "boolean", + "default": true + } + } + }, + "minItems": 1, + "required": ["label", "minValue", "maxValue", "settings"] + + }, + + "TypeKindOfVectorSettings": {"type": "object", + "discriminator": {"propertyName": "type"}, + "oneOf": [ + { "title":"LineString", "$ref": "#/definitions/TypeLineStringVectorConfig" }, + { "title":"Polygon", "$ref": "#/definitions/TypePolygonVectorConfig" }, + { "title":"SimpleSymbol", "$ref": "#/definitions/TypeSimpleSymbolVectorConfig" }, + { "title":"IconSymbol", "$ref": "#/definitions/TypeIconSymbolVectorConfig" } + ] + }, + + "TypeStyleConfig": { + + "minProperties": 1, + "type": "object", + "Title": "Line Style Config", + "description":"Enter Line, Point and Polygon Style Config ", + "properties": { + "LineString": { + + "title":"Line Style", + + "$ref": "#/definitions/TypeStyleSettings" + }, + "Point": { + "title":"Point Style", + + "$ref": "#/definitions/TypeStyleSettings" + }, + "Polygon": { + "title":"Polygon Style", + + "$ref": "#/definitions/TypeStyleSettings" + } + } + }, + + "TypeStyleSettings": { "type": "object", + "discriminator": {"propertyName": "styleType"}, + "oneOf": [ {"title":"SimpleStyle", + "$ref": "#/definitions/TypeSimpleStyleConfig" + } , + {"title":"UniqueValueStyle", + "$ref": "#/definitions/TypeUniqueValueStyleConfig" + }, + {"title":"ClassBreakStyle", + "$ref": "#/definitions/TypeClassBreakStyleConfig" + } + ] + }, + + "TypeLayerControls": { + + "type": "object", + "properties": { + "highlight": { + "type": "boolean", + "default": true + }, + "hover": { + "type": "boolean", + "default": true + }, + "opacity": { + "type": "boolean", + "default": true + }, + "query": { + "type": "boolean", + "default": true + }, + "remove": { + "type": "boolean", + "default": true + }, + "table": { + "type": "boolean", + "default": true + }, + "visibility": { + "type": "boolean", + "default": true + }, + "zoom": { + "type": "boolean", + "default": true + } + }, + "description": "Which UI controls are available." + }, + + "TypeLayerStates": { + + "type": "object", + "properties": { + "visible": { + "type": "boolean", + "default": true, + "description": "Initial visibility setting." + }, + "hoverable": { + "type": "boolean", + "description": "Layer is hoverable." + }, + "queryable": { + "type": "boolean", + "description": "Layer is queryable." + }, + "opacity": { + "type": "number", + "minimum": 0, + "maximum": 1, + "default": 1, + "description": "Initial opacity setting." + } + }, + "description": "Which UI controls are available." + }, + + "TypeLayerInitialSettings": { + + "type": "object", + "properties": { + "controls": { + "$ref": "#/definitions/TypeLayerControls", + "description": "The status of various controls for the layer (available/unavailable)." + }, + "bounds": { + "description": "The geographic bounding box that contains all the layer's features.", + "items": { + "type": "number" + }, + "maxItems": 4, + "minItems": 4, + "type": "array" + }, + "extent": { + "type": "array", + "minItems": 0, + "maxItems": 4, + "items": { + "type": "number" + }, + "description": "The extent that constrains the view. Called with [minX, minY, maxX, maxY] extent coordinates." + }, + "minZoom": { + "type": "integer", + "minimum": 0, + "maximum": 50, + "description": "The minimum view zoom level (exclusive) above which this layer will be visible." + }, + "maxZoom": { + "type": "integer", + "minimum": 0, + "maximum": 50, + "description": "The maximum view zoom level (inclusive) above which this layer will be visible." + }, + "className": { + "type": "string", + "description": "A CSS class name to set to the layer element." + }, + "states": { + "$ref": "#/definitions/TypeLayerStates", + "description": "The status of initial states for the layer." + } + } + }, + + + "TypeVectorSourceFormats": { + "enum": [ + "GeoJSON", + "EsriJSON", + "KML", + "WFS", + "featureAPI", + "GeoPackage" + ] , + "default": "GeoJSON", + "description": "The feature format used by the XHR feature loader when access path is set." + }, + + "TypeVectorSourceInitialConfig": { + + "type": "object", + "properties": { + "dataAccessPath": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The path (English/French) to reach the data to display. If not specified, metadatAccessPath will be assigne dto it." + }, + "format": { "$ref": "#/definitions/TypeVectorSourceFormats" }, + "dataProjection": { + "type": "string", + "description": "The projection code of the source. Used only for GeoJSON format. Default value is EPSG:4326. " + }, + "featureInfo": { "$ref": "#/definitions/TypeFeatureInfoLayerConfig" }, + + "postSettings": { + "type": "object", + "properties": { + "data": + { + "type": "object" + }, + "header": + { + "type": "object" + } + } + }, + "strategy": { + "default": "all", + "description": "The loading strategy to use. By default an all strategy is used, a one-off strategy which loads all features at once.", + "enum": [ + "all", + "bbox" + ] + } + } + }, + + + + "TypeSourceImageWmsInitialConfig": { + + "type": "object", + "properties": { + "dataAccessPath": { + "$ref": "#/definitions/TypeLocalizedString", + + "description": "The path (English/French) to reach the data to display. If not specified, metadatAccessPath will be assigne dto it." + }, + "crossOrigin": { + "type": "string", + "description": "The crossOrigin attribute for loaded images. Note that you must provide a crossOrigin value if you want to access pixel data with the Canvas renderer." + }, + "projection": { + "type": "integer", + "description": "Spatial Reference EPSG code supported (https://epsg.io/). We support Web Mercator and Lambert Conical Conform Canada." + }, + "featureInfo": { + "$ref": "#/definitions/TypeFeatureInfoLayerConfig" + }, + "serverType": { + "$ref": "#/definitions/TypeOfServer", + "description": "The type of the remote WMS server. The default value is mapserver." + }, + "style": { + "oneOf": [ + { "title":"Single style", + "description": "Single style to apply", + "type": "string" + }, + { "title":"Array of styles", + "description": "Array of style to choose.", + "items": { + "type": "string" + }, + "type": "array" + } + ] + } + } + }, + + "TypeOfServer": { + "enum": [ + "mapserver", + "geoserver", + "qgis"], + "description": "The type of the remote WMS server. The default value is mapserver." + }, + + "TypeSourceImageEsriInitialConfig": { + + "type": "object", + "properties": { + "dataAccessPath": { + "$ref": "#/definitions/TypeLocalizedString", + + "description": "The path (English/French) to reach the data to display. If not specified, metadatAccessPath will be assigne dto it." + }, + "crossOrigin": { + "type": "string", + "description": "The crossOrigin attribute for loaded images. Note that you must provide a crossOrigin value if you want to access pixel data with the Canvas renderer." + }, + "projection": { + "type": "integer", + "description": "Spatial Reference EPSG code supported (https://epsg.io/). We support Web Mercator and Lambert Conical Conform Canada." + }, + "featureInfo": { + "$ref": "#/definitions/TypeFeatureInfoLayerConfig" + }, + "format": { + "$ref": "#/definitions/TypeEsriFormatParameter" + }, + "transparent": { + "type": "boolean", + "default": true, + "description": "If true, the image will be exported with the background color of the map set as its transparent color. Only the .png and .gif formats support transparency." + } + } + }, + + "TypeEsriDynamicLayerEntryConfig": { + + "properties": { + "entryType": { + "type": "string", + "enum": [ + "raster-image1" + ], + "default": "raster-image" + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer entry at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "layerFilter": { + "description": "Filter to apply on feature of this layer.", + "type": "string" + }, + "layerId": { + "description": "The id of the layer to display on the map.", + "type": "string" + }, + "layerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "layerPathEnding": { + "description": "The ending element of the layer configuration path.", + "type": "string" + }, + "schemaTag": { + "enum": [ + "esriDynamic" + ], + "default": "esriDynamic" + + }, + "source": { + "$ref": "#/definitions/TypeSourceImageEsriInitialConfig" + }, + "style": { + "$ref": "#/definitions/TypeStyleConfig" + } + }, + "required": [ + "schemaTag", + "entryType", + "layerId" + ], + "type": "object" + }, + + "TypeEsriFormatParameter": { + "enum": ["png", "jpg", "gif", "svg"], + "default": "png", + "description": "The format of the exported image. The default format is png." + }, + + "TypeSourceTileInitialConfig": { + + "properties": { + "dataAccessPath": { + "$ref": "#/definitions/TypeLocalizedString", + + "description": "The path (English/French) to reach the data to display. If not specified, metadatAccessPath will be assigne dto it." + }, + "featureInfo": { + "$ref": "#/definitions/TypeFeatureInfoNotQueryable" + }, + "crossOrigin": { + "type": "string", + "description": "The crossOrigin attribute for loaded images. Note that you must provide a crossOrigin value if you want to access pixel data with the Canvas renderer." + }, + "projection": { + "type": "integer", + "description": "Spatial Reference EPSG code supported (https://epsg.io/). We support Web Mercator and Lambert Conical Conform Canada." + }, + "tileGrid": { "$ref": "#/definitions/TypeTileGrid" } + } + }, + + "TypeTileGrid": { + + "type": "object", + "properties": { + "extent": { + "type": "array", + "maxItems": 4, + "minItems": 0, + "items": + { + "type": "number" + }, + "description": "The extent that constrains the view. Called with [minX, minY, maxX, maxY] extent coordinates." + }, + "origin": { + "type": "array", + "maxItems": 2, + "minItems": 2, + "items": + { + "type": "number" + } + , + "description": "The tile grid origin, i.e. where the x and y axes meet ([z, 0, 0]). Tile coordinates increase left to right and downwards. If not specified, extent must be provided." + }, + "resolutions": { + "type": "array", + "items": { + "type": "number" + }, + "description": "Resolutions. The array index of each resolution needs to match the zoom level. This means that even if a minZoom is configured, the resolutions array will have a length of maxZoom + 1." + }, + "tileSize": { + "type": "array", + "maxItems": 2, + "minItems": 2, + "items": + { + "type": "number" + }, + "default": [256, + 256 + ], + "description": "The tile grid origin, i.e. where the x and y axes meet ([z, 0, 0]). Tile coordinates increase left to right and downwards. If not specified, extent must be provided." + } + }, + "required": ["origin", "resolutions"] + }, + + "TypeVectorHeatmapLayerEntryConfig": { + + "type": "object", + "properties": { + "schemaTag": { + "enum": [ + "not used yet" + ], + "defautl":"not used yet" + + }, + "entryType": { + "type": "string", + "enum": [ + "vector-heatmap" + ], + "default": "vector-heatmap" + }, + "layerPathEnding": { + "description": "The ending element of the layer configuration path.", + "type": "string" + }, + "layerId": { + "type": "string", + "description": "The id of the layer to display on the map." + }, + "layerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer entry at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "source": { "$ref": "#/definitions/TypeVectorSourceInitialConfig" }, + "gradient": { + "type": "array", + "items": { + "type": "string" + }, + "uniqueItems": true, + "minItems": 2, + "default": ["#00f", + "#0ff", + "#0f0", + "#ff0", + "#f00" + ], + "description": "Color gradient of the heatmap, specified as an array of CSS color strings." + }, + "radius": { + "type": "number", + "description": "Radius size in pixels (default 8px)." + }, + "blur": { + "type": "number", + "description": "Blur size in pixels (default 15px)." + }, + "weight": { + "type": "string", + "description": "Feature attribute to use for the weight or a function (ADD FORMAT) that returns a weight from a feature." + } + }, + "required": ["schemaTag", + "layerId", + "entryType" + ] + }, + + "TypeVectorLayerEntryConfig": { + + "type": "object", + "properties": { + "schemaTag": { + "enum": [ + "GeoJSON", + "esriFeature", + "ogcWfs", + "ogcFeature", + "GeoPackage" + ] + }, + "entryType": { + "type": "string", + "default": "vector", + "enum": [ + "vector" + ] + }, + "layerPathEnding": { + "description": "The ending element of the layer configuration path.", + "type": "string" + }, + "layerId": { + "type": "string", + "description": "The id of the layer to display on the map." + }, + "layerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "layerFilter": { + "description": "Filter to apply on feature of this layer.", + "type": "string" + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer entry at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "source": { "$ref": "#/definitions/TypeVectorSourceInitialConfig" }, + "style": { "$ref": "#/definitions/TypeStyleConfig" } + + }, + "required": [ + "layerId", + "schemaTag", + "entryType" + ] + }, + + "TypeVectorTileLayerEntryConfig": { + + "type": "object", + "description": "Layer sources providing vector data divided into a tile grid.", + "properties": { + "entryType": { + "type": "string", + "enum": [ + "vector-tile" + ], + "default": "vector-tile" + }, + "layerId": { + "type": "string", + "description": "The id of the layer to display on the map." + }, + "layerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "layerFilter": { + "description": "Filter to apply on feature of this layer.", + "type": "string" + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer entry at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "source": { + "$ref": "#/definitions/TypeVectorTileSourceInitialConfig", + "description": "Information used to configure the source of a vector tile layer." + }, + "layerPathEnding": { + "description": "The ending element of the layer configuration path.", + "type": "string" + }, + "style": { + "$ref": "#/definitions/TypeStyleConfig" + }, + "schemaTag": { + "enum": [ + "not used yet" + ] + } + }, + "required": [ + + "entryType", + "layerId" + ] + }, + + "TypeVectorTileSourceInitialConfig": { + + "type": "object", + "description": "Layer sources providing vector data divided into a tile grid.", + "properties": { + "dataAccessPath": { + "$ref": "#/definitions/TypeLocalizedString", + + "description": "The path (English/French) to reach the data to display. If not specified, metadatAccessPath will be assigne dto it." + }, + "format": { + "enum": ["GeoJSON", "EsriJSON", "KML", "WFS", "MVT", "featureAPI"], + "description": "The feature format used by the XHR feature loader when access path is set." + }, + "dataProjection": { + "type": "string", + "description": "The projection code of the source. Used only for GeoJSON format. Default value is EPSG:4326." + }, + "featureInfo": { "$ref": "#/definitions/TypeFeatureInfoLayerConfig" }, + "style": { "$ref": "#/definitions/TypeStyleConfig" }, + "tileGrid": { + "$ref": "#/definitions/TypeTileGrid" + } + + } + }, + + "TypeTileLayerEntryConfig": { + + "type": "object", + "properties": { + "entryType": { + "type": "string", + "enum": [ + "raster-tile2" + ], + "default": "raster-tile" + }, + "layerId": { + "type": "string", + "description": "The id of the layer to display on the map." + }, + "layerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer entry at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "layerPathEnding": { + "description": "The ending element of the layer configuration path.", + "type": "string" + }, + "schemaTag": { + "enum": [ + "ogcWms", + "xyzTiles", + "vectorTiles" + ], + "default": "ogcWms" + }, + "source": { "$ref": "#/definitions/TypeSourceTileInitialConfig" } + }, + "required": [ + "schemaTag", + "entryType", + "layerId" + ] + }, + + + + "TypeGeocoreLayerEntryConfig": { + + "type": "object", + "description": "Layer where configration is extracted by a configuration snippet stored on a server. The server configuration will handle bilangual informations.", + "properties": { + "entryType": { + "type": "string", + "enum": [ + "geocore" + ], + "default": "geocore" + }, + "layerId": { + "type": "string", + "description": "The id of the layer to display on the map." + }, + "geocoreLayerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer entry at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "listOfLayerEntryConfig": { + "$ref": "#/definitions/TypeListOfLayerEntryConfig", + "description": "The list of layer entry configurations to use from the GeoView layer group." + }, + "schemaTag": { + "enum": [ + "geoCore" + ], + "defaut": "geoCore" + }, + "source": { "$ref": "#/definitions/TypeSourceGeocoreConfig" } + }, + "required": ["schemaTag","entryType","layerId"] + }, + + "TypeSourceGeocoreConfig": { + + "type": "object", + "description": "Layer source providing geocore data.", + "properties": { + "dataAccessPath": { + "$ref": "#/definitions/TypeLocalizedString", + + "description": "The url path to the geoCore endpoint (optional, this value should be embeded in the GeoView API)." + }, + "featureInfo": { + "$ref": "#/definitions/TypeFeatureInfoNotQueryable" + } + } + }, + + "TypeOgcWmsLayerEntryConfig": { + "type": "object", + "properties": { + "entryType": { + "type": "string", + "enum": [ + "raster-image3" + ], + "default": "raster-image3" + }, + "schemaTag": { + "enum": [ + "ogcWms" + ], + "default": "ogcWms" + }, + "layerId": { + "type": "string", + "description": "The id of the layer to display on the map." + }, + "layerPathEnding": { + "type": "string", + "description": "The ending element of the layer configuration path." + }, + + "layerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "layerFilter": { + "type": "string", + "description": "Filter to apply on feature of this layer." + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer entry at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "source": { + "$ref": "#/definitions/TypeSourceImageWmsInitialConfig" + }, + "style": { + "$ref": "#/definitions/TypeStyleConfig" + } + }, + "required": [ + "schemaTag", + "entryType", + "layerId" + ] + }, + + "TypeSourceImageStaticInitialConfig": { + + "properties": { + "crossOrigin": { + "description": "The crossOrigin attribute for loaded images. Note that you must provide a crossOrigin value if you want to access pixel data with the Canvas renderer.", + "type": "string" + }, + "dataAccessPath": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The path (English/French) to reach the data to display. If not specified, metadatAccessPath will be assigne dto it." + + }, + "extent": { + "description": "The extent of the static image. Called with [minX, minY, maxX, maxY] extent coordinates.", + "items": { + "type": "number" + }, + "maxItems": 4, + "minItems": 0, + "type": "array" + }, + "featureInfo": { + "$ref": "#/definitions/TypeFeatureInfoNotQueryable" + }, + "projection": { + "description": "Spatial Reference EPSG code supported (https://epsg.io/). We support Web Mercator and Lambert Conical Conform Canada.", + "type": "integer" + } + }, + "type": "object" + }, + + "TypeLayerEntryType": { "type": "string", + "enum": ["vector", + "vector-tile", + "vector-heatmap", + "raster-tile", + "raster-image", + "geoCore" + ], + "description": "Layer entry data type." + }, + + "TypeLayerGroupEntryConfig": { + + "type": "object", + "description": "Entry used to define a layer Group.", + + "properties": { + "entryType": { "type":"string", + + "enum": [ + "group" + ], + "default": "group" + }, + "layerId": { + "type": "string", + "description": "The id of the layer group to display on the map." + }, + "layerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer group (English/French)." + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer group entries at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "listOfLayerEntryConfig": { + "$ref": "#/definitions/TypeListOfLayerEntryConfig", + "description": "The list of layer entry configurations to use from the GeoView layer group." + } + }, + + "required": ["entryType", "layerId", "listOfLayerEntryConfig"] + }, + + "TypeEsriImageLayerEntryConfig": { + + "type": "object", + "properties": { + "schemaTag": { + "enum": ["esriImage"] + }, + "entryType": { + "enum": ["raster-image4"] + }, + "layerId": { + "type": "string", + "description": "The id of the layer to display on the map." + }, + "layerPathEnding": { + "type": "string", + "description": "The ending element of the layer configuration path." + }, + "layerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "layerFilter": { + "type": "string", + "description": "Filter to apply on feature of this layer." + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer entry at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "source": { + "$ref": "#/definitions/TypeSourceImageEsriInitialConfig" + }, + "style": { + "$ref": "#/definitions/TypeStyleConfig" + } + }, + "required": ["schemaTag", "entryType", "layerId"] + }, + + "TypeLayerEntryConfig": { + "type":"object", + "discriminator": {"propertyName": "entryType"}, + "oneOf": [ + + { "title": "LayerGroup", "$ref": "#/definitions/TypeLayerGroupEntryConfig" }, + { "title": "EsriImageLayer","$ref": "#/definitions/TypeEsriImageLayerEntryConfig" }, + { "title": "VectorTileLayer", "$ref": "#/definitions/TypeVectorTileLayerEntryConfig" }, + { "title": "VectorLayer", "$ref": "#/definitions/TypeVectorLayerEntryConfig" }, + { "title": "OgcWmsLayer","$ref": "#/definitions/TypeOgcWmsLayerEntryConfig"}, + { "title": "EsriDynamicLayer","$ref": "#/definitions/TypeEsriDynamicLayerEntryConfig" }, + { "title": "TileLayer", "$ref": "#/definitions/TypeTileLayerEntryConfig" }, + { "title": "VectorHeatmap","$ref": "#/definitions/TypeVectorHeatmapLayerEntryConfig" } + + ] + }, + + + + "TypeListOfLayerEntryConfig": { + "type": "array", + "minItems": 1, + "items": { + "$ref": "#/definitions/TypeLayerEntryConfig" + } + }, + + "TypeMapConfig": { + + "type": "object", + "properties": { + "basemapOptions": { "$ref": "#/definitions/TypeBasemapOptions" }, + "interaction": { "$ref": "#/definitions/TypeInteraction" }, + "listOfGeoviewLayerConfig": { "$ref": "#/definitions/TypeListOfGeoviewLayerConfig" }, + "viewSettings": {"$ref": "#/definitions/TypeViewSettings" }, + "highlightColor": { + "$ref": "#/definitions/TypeHighlightColors" + }, + "extraOptions": { + "type": "object", + "description": "Additional options used for OpenLayers map options" + } + + }, + "required": ["basemapOptions", "viewSettings","interaction","listOfGeoviewLayerConfig"] + }, + + "TypeBasemapOptions": { + + "type": "object", + "properties": { + + + "shaded": { + "type": "boolean", + "default": true, + "title": "Enable or disable shaded basemap " + + }, + "labeled": { + "type": "boolean", + "default": true, + + "title": "Enable or disable basemap labels" + }, + "basemapId": { "$ref": "#/definitions/TypeBasemapId" } + }, + "required": ["basemapId", "shaded", "labeled"] + }, + + "TypeBasemapId": { + "description": "Id of the basemap to use." , + "enum": ["transport", "osm", "simple", "nogeom", "shaded"], + "default": "transport" + + }, + + "TypeInteraction": { + "enum": ["static", "dynamic"], + "default": "dynamic", + "description": "If map is dynamic (pan/zoom) or static to act as a thumbnail (no nav bar)." + }, + + "TypeHighlightColors": { + "enum": ["black", "white", "red", "green"], + "default": "black", + "description": "Color to use for feature highlights." + }, + + "TypeListOfGeoviewLayerConfig": { + + "description": "List of GeoView Layers in the order which they should be added to the map.", + "type": "array", + "minItems": 1, + "items": { "discriminator": {"propertyName": "geoviewLayerType"}, + "oneOf": [ + { "title": "GeoviewLayerConfig", + "$ref": "#/definitions/TypeGeoviewLayerConfig" + }, + { "title": "GeoCoreLayerConfig", + "$ref": "#/definitions/TypeGeoCoreLayerConfig" + } + ] + },"default":"GeoviewLayerConfig" + + }, + + "TypeGeoviewLayerConfig": { + + "type": "object", + "properties": { + "geoviewLayerId": { + "description": "The id of the layer for referencing within the viewer (does not relate directly to any external service). The id will have the language extension (id-'lang').", + "type": "string" + }, + "geoviewLayerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "metadataAccessPath": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The GeoView layer access path (English/French)." + }, + "geoviewLayerType": { + "type": "string", + + "enum": [ "CSV", + "esriDynamic", + "esriFeature", + "esriImage", + "GeoJSON", + "geoCore1", + "GeoPackage", + "xyzTiles", + "ogcFeature", + "ogcWfs", + "ogcWms", + "imageStatic", + "vectorTiles" + ], + "default": [ + ""], + "description": "Type of GeoView layer." + }, + "serviceDateFormat": { + "description": "Date format used by the service endpoint.", + "type": "string" + }, + "externalDateFormat": { + "description": "Date format used by the getFeatureInfo to output date variable.", + "type": "string" + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the GeoView layer at creation time." + }, + "listOfLayerEntryConfig": { + "$ref": "#/definitions/TypeListOfLayerEntryConfig", + "description": "The layer entries to use from the GeoView layer." + } + }, + "required": [ + "geoviewLayerType", + "listOfLayerEntryConfig", + "geoviewLayerId", + "geoviewLayerName", + "metadataAccessPath" + ] + }, + + "TypeGeoCoreLayerConfig": { + + "type": "object", + "properties": { + "geoviewLayerId": { + "type": "string", + "description": "The id of the layer for referencing within the viewer (does not relate directly to any external service). The id will have the language extension (id-'lang')." + }, + "geoviewLayerType": { + "type": "string", + + "enum": ["geoCore"] , + + "default": ["geoCore"], + + "description": "Type of GeoCore layer." + }, + + + "geoviewLayerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the GeoView layer at creation time." + } + }, + "required": ["geoviewLayerId", "geoviewLayerType"] + }, + + "TypeGeoviewLayerType": { + "type": "string", + + "enum": [ "CSV", + "esriDynamic", + "esriFeature", + "esriImage", + "GeoJSON", + "geoCore", + "GeoPackage", + "xyzTiles", + "ogcFeature", + "ogcWfs", + "ogcWms", + "imageStatic", + "vectorTiles" + ], + "default": [ + "" + ], + "description": "Type of GeoView layer." + }, + + "TypeGeoCoreLayerType": { + "type": "string", + "items": { + "enum": ["geoCore1"] + }, + "default": ["geoCore"], + + "description": "Type of GeoCore layer." + }, + + "TypeImageStaticLayerEntryConfig": { + + "properties": { + "entryType": { + "enum": [ + "raster-image" + ] + }, + "initialSettings": { + "$ref": "#/definitions/TypeLayerInitialSettings", + "description": "Initial settings to apply to the layer entry at creation time. Initial settings are inherited from the parent in the configuration tree." + }, + "layerId": { + "description": "The id of the layer to display on the map.", + "type": "string" + }, + "layerName": { + "$ref": "#/definitions/TypeLocalizedString", + "description": "The display name of the layer (English/French). If it is not present the viewer will make an attempt to scrape this information." + }, + "layerPathEnding": { + "description": "The ending element of the layer configuration path.", + "type": "string" + }, + "schemaTag": { + "enum": [ + "imageStatic" + ] + }, + "source": { + "$ref": "#/definitions/TypeSourceImageStaticInitialConfig" + } + }, + "required": [ + "schemaTag", + "entryType", + "layerId" + ], + "type": "object" + }, + + "TypeViewSettings": { + + "type": "object", + + "properties": { + "center": { + "type": "array", + "items": [ + { + "type": "number", + "minimum": -160, + "maximum": 160, + "default": -106, + "description": "Initial longitude value for map center." + }, + { + "type": "number", + "minimum": -80, + "maximum": 80, + "default": 60, + "description": "Initial latitude value for map center." + } + + ], + "default": [ + -106, + 60 + ] + }, + "enableRotation": { + "type": "boolean", + "default": true, + "title": "Enable rotation. If false, a rotation constraint that always sets the rotation to zero is used." + }, + "extent": { + "type": "array", + "minItems":0, + "maxItems":4, + "items": { + + "type": "number" + + }, + "description": "The extent that constrains the view. Called with [minX, minY, maxX, maxY] extent coordinates." + }, + "minZoom": { + "type": "integer", + "description": "The minimum zoom level used to determine the resolution constraint. If not set, will use default from basemap.", + "minimum": 0, + "maximum": 50 + }, + "maxZoom": { + "type": "integer", + "description": "The maximum zoom level used to determine the resolution constraint. If not set, will use default from basemap.", + "minimum": 0, + "maximum": 50 + }, + "projection": { "$ref": "#/definitions/TypeValidMapProjectionCodes" }, + "rotation": { + "type": "integer", + "minimum": -360, + "maximum": 360, + "default": 0, + "description": "The initial rotation for the view in degree (positive rotation clockwise, 0 means North). Will be converted to radiant by the viewer." + }, + "zoom": { + "type": "number", + "minimum": 0, + "maximum": 28, + "default": 12, + "description": "Initial map zoom level. Zoom level are define by the basemap zoom levels." + } + }, + "required": ["zoom", "center"] + }, + + + + + "TypeAppBarProps": { + "type": "object", + + "properties": { + "tabs": { + "type": "object", + "description": "Available tabs - controls", + "properties": { + "core": { + "type": "array", + "items": { + "type": "string", + "enum": ["geolocator", "export", "basemap-panel", "geochart", "details","legend","guide"] + }, + "minItems": 0, + "default": ["geolocator"], + "uniqueItems": true, + "description": "Default core tabs of app-bar to use. NOTE: config from packages like geochart are in the same loaction as core config (<>-<>.json)." + } + }, + "additionalProperties": false + } + }, + "required": ["tabs"] + }, + + "TypeNavBarProps": { + "type": "array", + "title":"Navigation Bar", + "description": "Controls availalbe on the navigation bar.", + "uniqueItems": true, + "items": { + "enum": [ + "zoom", + "fullscreen", + "home", + "location", + "export" + ] + }, + "default": [ + "zoom", + "fullscreen", + "home" + ], + + "minItems": 0 + }, + + + "TypeOverviewMapProps": { + "type": "object", + + "properties": { + "hideOnZoom": { + "type": "number", + "minimum": 0, + "maximum": 10, + "default": 0, + "description": "Minimum zoom level to show overview map" + } + } + }, + + "TypeMapComponents": { + "type": "array", + "uniqueItems": true, + "items": { + "enum": [ + "overview-map", + "north-arrow" + ] + }, + "default": [ + "overview-map", + "north-arrow" + ], + "description": "Core components to initialize on viewer load. The schema for those are inside this file.", + + "minItems": 0 + }, + + "TypeMapCorePackages": { + "type": "array", + "uniqueItems": true, + "items": { + "enum": [ + "swiper" + ] + }, + "default": [ + ], + "description": "Core packages to initialize on viewer load. The schema for those are on their own package. NOTE: config from packages are in the same loaction as core config (<>-<>.json).", + + "minItems": 0 + }, + + "TypeExternalPackages": { + "type": "array", + "items": { + + "type": "object", + "properties": { + "name": { + "type": "string", + + + "description": "External Package name. The name must be ideintical to the window external package object to load." + }, + "configUrl": { + "type": "string", + + "format": "uri", + "description": "The url to the external package configuration setting. The core package will read the configuration and pass it inside the package." + } + }, + "required": ["name"] + }, + "default": [], + "description": "List of external packages to initialize on viewer load.", + "minItems": 0 + }, + + "TypeServiceUrls": { + + "type": "object", + "description": "Service endpoint urls", + "properties": { + "keys": { + "type": "string", + "default": "https://geocore.api.geo.ca", + + "description": "Service end point to access API for layers specification (loading and plugins parameters). By default it is GeoCore but can be another endpoint with similar output." + }, + "geolocator": { + "type": "string", + + "description": "Service end point to access geo location of searched value." + }, + + "proxyUrl": { + "type": "string", + + "description": "An optional proxy to be used for dealing with same-origin issues. URL must either be a relative path on the same server or an absolute path on a server which sets CORS headers." + } + }, + "required": [ + "keys" + ] + }, + + "TypeDisplayLanguage": { + "enum": ["en", "fr"], + "description": "Display languages supported." + }, + + "TypeValidVersions": { + "enum": ["1.0"], + "description": "The schema version that can be used to validate the configuration file. The schema should enumerate the list of versions accepted by this version of the viewer." + }, + + "TypeMapFeaturesInstance": { + + "description": "The map features configuration. This type is used by the IsValidTypeMapFeaturesInstance method coded in config-validation.ts file. It does the validation down to the list of layer entry config.", + "type": "object", + "properties": { + "mapId": { "type": "string" }, + "map": { "$ref": "#/definitions/TypeMapConfig" }, + "navBar": { "$ref": "#/definitions/TypeNavBarProps" }, + "footerBar": { "$ref": "#/definitions/TypeFooterBarProps"}, + "appBar": { "$ref": "#/definitions/TypeAppBarProps" }, + "overviewMap": {"$ref": "#/definitions/TypeOverviewMapProps"}, + "components": { "$ref": "#/definitions/TypeMapComponents" }, + "corePackages": { "$ref": "#/definitions/TypeMapCorePackages" }, + "externalPackages": { "$ref": "#/definitions/TypeExternalPackages" }, + "serviceUrls": { "$ref": "#/definitions/TypeServiceUrls" }, + "schemaVersionUsed": { "$ref": "#/definitions/TypeValidVersions" } + }, + "required": ["map"] + } + }, + + "properties": { + "mapId": { "type": "string" }, + "map": { "$ref": "#/definitions/TypeMapConfig" }, + "theme": { + "Title": "Map Theme Style", + "type": "string", + "description": "Theme style of the viewer." , + "enum": [ + "dark", + "light", + "geo.ca" + ], + "default": "dark" + + }, + "navBar": { "$ref": "#/definitions/TypeNavBarProps" }, + "footerBar": { "$ref": "#/definitions/TypeFooterBarProps"}, + "appBar": { "$ref": "#/definitions/TypeAppBarProps" }, + "overviewMap": {"$ref": "#/definitions/TypeOverviewMapProps"}, + "components": { "$ref": "#/definitions/TypeMapComponents" }, + "corePackages": { "$ref": "#/definitions/TypeMapCorePackages" }, + "externalPackages": {"$ref": "#/definitions/TypeExternalPackages"}, + "serviceUrls": { "$ref": "#/definitions/TypeServiceUrls" }, + "schemaVersionUsed": { "$ref": "#/definitions/TypeValidVersions" } + }, + "required": ["map"] + }, + + + "areasOfInterest": { + "title": "Areas of Interest", + "type": "object", + "properties": { + "enable": { + "type": "boolean", + "title": "Enable", + "default":true }, - "layers": { + "areas": { "type": "array", - "title": "Layers", "items": { "type": "object", "properties": { - "id": { - "title": "Layer ID", + "title-en-CA": { "type": "string", - "description": "" + "title": "English Title" }, - "nameField": { + "title-fr-CA": { "type": "string", - "title": "Name Field", - "description": "Field name to use for the chart selection combo box when multiple charts." + "title": "French Title" }, - "type": { - "title": "Chart Data Type", - "type": "string", - "enum": [ - "inline", - "link" - ], - "description": "Type of data (inline for items inside the layer or link for items inside a link table).", - "default": "inline" + "xmin": { + "type": "number", + "title": "Minimum value of x", + "default": -4844430 }, - "linkUrl": { - "type": "string", - "title": "Link URL", - "description": "URL of the link table." + "ymin": { + "type": "number", + "title": "Minimum value of y", + "default": -1052774 }, - "linkField": { - "type": "string", - "title": "Link Field", - "description": "Field name for the link between the layer and the table." + "xmax": { + "type": "number", + "title": "Maximum value of x", + "default": 5666163 }, - "data": { - "type": "array", - "items": { - "type": "object", - "properties": { - "type": { - "title": "Type of data inside the field", - "type": "string", - "enum": [ - "single", - "combine" - ], - "description": "Single if there is only one value inside the field. Combine if we use time axis and time and value are part of the field.", - "default": "combine" - }, - "linkType": { - "title": "Type of link", - "type": "string", - "enum": [ - "single", - "multi" - ], - "description": "How data is structure inside the link table (single for one field for value and one for date OR multiple if there is multiple datasets inside one field and the chart needs to parse).", - "default": "single" - }, - "link": { - "title": "Link Field", - "type": "string", - "description": "Link field to link between layer and table." - }, - "date": { - "title": "Date Field", - "type": "string", - "description": "Field to use for the date" - }, - "measure": { - "title": "Measure Field", - "type": "string" - }, - "values": { - "title": "Label Values", - "type": "string", - "description": "Field name to get labels from for link type multi." - }, - "label": { - "type": "object", - "title": "Dataset Labels", - "properties": { - "type": { - "title": "Type", - "type": "string", - "enum": [ - "field", - "config" - ], - "description": "Retreive the labels from a field or from the configuration.", - "default": "config" - }, - "values": { - "title": "Values", - "type": "string", - "description": "Values separated by semicolon or field name.", - "default": "" - }, - "split": { - "title": "Split Character", - "type": "string", - "description": "Character to use to split list of values.", - "default": ";" - } - }, - "required": [ - "type", - "values", - "split" - ] - }, - "regex": { - "title": "Dataset splitter", - "type": "string", - "description": "

Regex value to split datasets inside the field.

This field is to manage when you have multiple datasets or combine values in the same field. To be able to separate datasets from values, we will use a regex expression. We encourage you to use your data and test your regex expression on a online site like https://regex101.com.

Below we list some samples of datasets and regex:

  • Sample 1
    • Data: [255;255;255];[120;232;23];[32;44;134]
    • Regex: \\\\[|\\\\];\\\\[|\\\\]
    • Ouput: 3 datasets (e.g. 255;255;255). Values inside dataset will be split by the field 'Values Splitter'.
  • Sample 2
    • Data: (2011-03-28,0.511),(2011-04-04,0.421)
    • Regex: \\\\(|\\\\),\\\\(|\\\\)
    • Ouput: 1 datasets, 2 pairs of values (e.g. 2011-03-28,0.511). Values inside are combined (y and x axis) and will be split by the field 'Values Splitter'.

Note: we need to double the '\\' character

", - "default": "\\(|\\),\\(|\\)" - }, - "split": { - "title": "Values splitter", - "type": "string", - "default": ",", - "description": "Character to use to split values inside a field. E.g. a field contains '10;20;30' means there is 3 values split by ';' or [1,2,3];[4,5,6] means there is 2 datasets with 3 values each split by ','." - }, - "prefix": { - "title": "Prefix", - "type": "string", - "default": "", - "description": "Prefix to add to data hover." - }, - "suffix": { - "title": "Suffix", - "type": "string", - "default": "", - "description": "Suffix to add to data hover." - } - }, - "required": [ - "type", - "measure", - "split" - ] - } + "ymax": { + "type": "number", + "title": "Maximum value of y", + "default": 4170111 }, - "details": { - "type": "object", - "title": "Details", - "properties": { - "enabled": { - "type": "boolean", - "title": "Enable" - }, - "value": { - "type": "string", - "title": "Value", - "description": "String with the custom details in markdown notation." - } - } + "wkid": { + "type": "number", + "title": "Spatial Reference", + "default": 3978 + }, + "thumbnailUrl": { + "type": "string", + "title": "Thumbnail URL" } }, "required": [ - "id", - "nameField", - "type", - "data" + "title-en-CA", + "title-fr-CA" ] } - }, - "required": [ - "type", - "layers" - ] + } } }, + + "swiper": { + "title": "Swiper", "type": "object", "properties": { "enable": { "type": "boolean", - "title": "Enable" + "title": "Enable", + "default":true }, "type": { "type": "string", @@ -662,22 +2740,16 @@ "maximum": 100 }, "layers": { - "type": "array", + "type": "string", "title": "Layers", - "items": { - "type": "object", - "properties": { - "id": { - "type": "string", - "description": "The id of the layer for referencing within the viewer (does not relate directly to any external service).", - "title": "Layer id" - } - }, - "required": [ - "id" - ] - } - } + "description": "The id of the layer for referencing within the viewer (does not relate directly to any external service).", + "enum":["1"] + } + + + + + }, "required": [ "type", @@ -685,60 +2757,15 @@ "layers" ] }, - "draw": { - "type": "object", - "properties": { - "enable": { - "type": "boolean", - "title": "Enable" - }, - "open": { - "type": "boolean", - "title": "Open by default", - "default": true - }, - "tools": { - "type": "array", - "title": "Tools", - "items": { - "type": "string", - "enum": [ - "picker", - "point", - "polyline", - "polygon", - "edit", - "measure", - "extent", - "write", - "read" - ] - }, - "description": "Tools to add to draw toolbar.", - "default": [ - "picker", - "point", - "polyline", - "polygon", - "edit", - "measure", - "extent", - "write", - "read" - ] - } - }, - "required": [ - "active", - "tools" - ] - }, + "thematicSlider": { + "title": "Thematic Slider", "type": "object", "properties": { "enable": { "type": "boolean", - "title": "Enable" + "title": "Enable", + "default":true }, "open": { "type": "boolean", @@ -779,7 +2806,8 @@ "id": { "type": "string", "description": "The id of the layer for referencing within the viewer (does not relate directly to any external service).", - "title": "Layer id" + "title": "Layer id", + "enum":["1"] }, "duration": { "type": "number", @@ -799,7 +2827,7 @@ "type": "array", "title": "Legend", "description": "Add items for a custom legend, leave it blank for default legend.", - "default": [], + "items": { "type": "object", "properties": { @@ -848,12 +2876,14 @@ "duration" ] } - }, + } + }, "required": [ "layers" ] - } } } - ] -} + ] + } + + diff --git a/src/index.js b/src/index.js index ccf1f27..04e1c50 100644 --- a/src/index.js +++ b/src/index.js @@ -2,10 +2,11 @@ import React from "react"; import ReactDOM from "react-dom"; import "./App.css"; import App from "./App"; - +// commetned below for deply feb23 must un comment +//import { render } from 'react-dom'; // added nov 20 ReactDOM.render( - + - , + , document.getElementById("root") -); +); \ No newline at end of file diff --git a/src/popups.js b/src/popups.js new file mode 100644 index 0000000..c807eb0 --- /dev/null +++ b/src/popups.js @@ -0,0 +1,26 @@ +import React, { Component } from "react"; + +function Popup() { +const [isOpen, setIsOpen] = useState(false); + +return ( +
+ + +{isOpen && ( +
+
+This is the content of the pop-up. +
+ +
+)} +
+); +} + +export default PopUps; \ No newline at end of file