diff --git a/package-lock.json b/package-lock.json index 25cada9a2..38630bac1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -20,6 +20,7 @@ "@konturio/default-theme": "3.1.1", "@konturio/ui-kit": "^3.5.3", "@loaders.gl/core": "^3.2.3", + "@mdx-js/rollup": "^2.1.5", "@nebula.gl/edit-modes": "1.0.3", "@nebula.gl/layers": "1.0.3", "@reatom/core": "^2.0.22", @@ -73,7 +74,8 @@ "react-router-cache-route": "^1.11.1", "react-router-dom": "^5.3.0", "react-transition-group": "^4.4.5", - "react-virtuoso": "^2.19.0" + "react-virtuoso": "^2.19.0", + "remark-gfm": "^3.0.1" }, "devDependencies": { "@testing-library/react": "^13.4.0", @@ -1490,6 +1492,65 @@ "gl-matrix": "^3.4.0" } }, + "node_modules/@mdx-js/mdx": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-2.1.5.tgz", + "integrity": "sha512-zEG0lt+Bl/r5U6e0TOS7qDbsXICtemfAPquxWFsMbdzrvlWaqMGemLl+sjVpqlyaaiCiGVQBSGdCk0t1qXjkQg==", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/mdx": "^2.0.0", + "estree-util-build-jsx": "^2.0.0", + "estree-util-is-identifier-name": "^2.0.0", + "estree-util-to-js": "^1.1.0", + "estree-walker": "^3.0.0", + "hast-util-to-estree": "^2.0.0", + "markdown-extensions": "^1.0.0", + "periscopic": "^3.0.0", + "remark-mdx": "^2.0.0", + "remark-parse": "^10.0.0", + "remark-rehype": "^10.0.0", + "unified": "^10.0.0", + "unist-util-position-from-estree": "^1.0.0", + "unist-util-stringify-position": "^3.0.0", + "unist-util-visit": "^4.0.0", + "vfile": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/@mdx-js/mdx/node_modules/estree-walker": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.1.tgz", + "integrity": "sha512-woY0RUD87WzMBUiZLx8NsYr23N5BKsOMZHhu2hoNRVh6NXGfoiT1KOL8G3UHlJAnEDGmfa5ubNA/AacfG+Kb0g==" + }, + "node_modules/@mdx-js/rollup": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@mdx-js/rollup/-/rollup-2.1.5.tgz", + "integrity": "sha512-l90rSiwnEf6PnjH8uRXjZ1W0rR8p1fp1YIiDuA3uF7SOfxMQ98uymaIwI6BsX+8BC2dcWij7Racwp++JkvdOLQ==", + "dependencies": { + "@mdx-js/mdx": "^2.0.0", + "@rollup/pluginutils": "^4.0.0", + "source-map": "^0.7.0", + "vfile": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + }, + "peerDependencies": { + "rollup": ">=2" + } + }, + "node_modules/@mdx-js/rollup/node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "engines": { + "node": ">= 8" + } + }, "node_modules/@nebula.gl/edit-modes": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/@nebula.gl/edit-modes/-/edit-modes-1.0.3.tgz", @@ -1684,7 +1745,6 @@ "version": "4.2.1", "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.2.1.tgz", "integrity": "sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==", - "dev": true, "dependencies": { "estree-walker": "^2.0.1", "picomatch": "^2.2.2" @@ -2350,6 +2410,14 @@ "url": "https://opencollective.com/turf" } }, + "node_modules/@types/acorn": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@types/acorn/-/acorn-4.0.6.tgz", + "integrity": "sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==", + "dependencies": { + "@types/estree": "*" + } + }, "node_modules/@types/aria-query": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-4.2.2.tgz", @@ -2411,9 +2479,15 @@ "node_modules/@types/estree": { "version": "0.0.51", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", - "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==", - "dev": true, - "peer": true + "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==" + }, + "node_modules/@types/estree-jsx": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-1.0.0.tgz", + "integrity": "sha512-3qvGd0z8F2ENTGr/GG1yViqfiKmRfrXVx5sJyHGFu3z7m5g5utCQtGp/g29JnjflhtQJBv1WDQukHiT58xPcYQ==", + "dependencies": { + "@types/estree": "*" + } }, "node_modules/@types/file-saver": { "version": "2.0.5", @@ -2509,6 +2583,11 @@ "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-1.0.2.tgz", "integrity": "sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA==" }, + "node_modules/@types/mdx": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/mdx/-/mdx-2.0.3.tgz", + "integrity": "sha512-IgHxcT3RC8LzFLhKwP3gbMPeaK7BM9eBH46OdapPA7yvuIUJ8H6zHZV53J8hGZcTSnt95jANt+rTBNUUc22ACQ==" + }, "node_modules/@types/minimist": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", @@ -3230,7 +3309,6 @@ "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } @@ -3609,6 +3687,14 @@ "node": ">=8" } }, + "node_modules/astring": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/astring/-/astring-1.8.3.tgz", + "integrity": "sha512-sRpyiNrx2dEYIMmUXprS8nlpRg2Drs8m9ElX9vVEXaCB4XEAJhKfs7IcX0IwShjuOAjLR6wzIrgoptz1n19i1A==", + "bin": { + "astring": "bin/astring" + } + }, "node_modules/async": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", @@ -4055,6 +4141,15 @@ "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", "devOptional": true }, + "node_modules/ccount": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", + "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/chai": { "version": "4.3.6", "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.6.tgz", @@ -4097,6 +4192,33 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/character-entities-html4": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz", + "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-legacy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", + "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-reference-invalid": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz", + "integrity": "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/charenc": { "version": "0.0.2", "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", @@ -6645,11 +6767,90 @@ "node": ">=4.0" } }, + "node_modules/estree-util-attach-comments": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/estree-util-attach-comments/-/estree-util-attach-comments-2.1.0.tgz", + "integrity": "sha512-rJz6I4L0GaXYtHpoMScgDIwM0/Vwbu5shbMeER596rB2D1EWF6+Gj0e0UKzJPZrpoOc87+Q2kgVFHfjAymIqmw==", + "dependencies": { + "@types/estree": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/estree-util-attach-comments/node_modules/@types/estree": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz", + "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==" + }, + "node_modules/estree-util-build-jsx": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/estree-util-build-jsx/-/estree-util-build-jsx-2.2.0.tgz", + "integrity": "sha512-apsfRxF9uLrqosApvHVtYZjISPvTJ+lBiIydpC+9wE6cF6ssbhnjyQLqaIjgzGxvC2Hbmec1M7g91PoBayYoQQ==", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "estree-util-is-identifier-name": "^2.0.0", + "estree-walker": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/estree-util-build-jsx/node_modules/estree-walker": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.1.tgz", + "integrity": "sha512-woY0RUD87WzMBUiZLx8NsYr23N5BKsOMZHhu2hoNRVh6NXGfoiT1KOL8G3UHlJAnEDGmfa5ubNA/AacfG+Kb0g==" + }, + "node_modules/estree-util-is-identifier-name": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/estree-util-is-identifier-name/-/estree-util-is-identifier-name-2.0.1.tgz", + "integrity": "sha512-rxZj1GkQhY4x1j/CSnybK9cGuMFQYFPLq0iNyopqf14aOVLFtMv7Esika+ObJWPWiOHuMOAHz3YkWoLYYRnzWQ==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/estree-util-to-js": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/estree-util-to-js/-/estree-util-to-js-1.1.0.tgz", + "integrity": "sha512-490lbfCcpLk+ofK6HCgqDfYs4KAfq6QVvDw3+Bm1YoKRgiOjKiKYGAVQE1uwh7zVxBgWhqp4FDtp5SqunpUk1A==", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "astring": "^1.8.0", + "source-map": "^0.7.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/estree-util-to-js/node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/estree-util-visit": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/estree-util-visit/-/estree-util-visit-1.2.0.tgz", + "integrity": "sha512-wdsoqhWueuJKsh5hqLw3j8lwFqNStm92VcwtAOAny8g/KS/l5Y8RISjR4k5W6skCj3Nirag/WUCMS0Nfy3sgsg==", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/unist": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/estree-walker": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "dev": true + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" }, "node_modules/esutils": { "version": "2.0.3", @@ -7974,6 +8175,37 @@ "resolved": "https://registry.npmjs.org/hash-wasm/-/hash-wasm-4.9.0.tgz", "integrity": "sha512-7SW7ejyfnRxuOc7ptQHSf4LDoZaWOivfzqw+5rpcQku0nHfmicPKE51ra9BiRLAmT8+gGLestr1XroUkqdjL6w==" }, + "node_modules/hast-util-to-estree": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/hast-util-to-estree/-/hast-util-to-estree-2.1.0.tgz", + "integrity": "sha512-Vwch1etMRmm89xGgz+voWXvVHba2iiMdGMKmaMfYt35rbVtFDq8JNwwAIvi8zHMkO6Gvqo9oTMwJTmzVRfXh4g==", + "dependencies": { + "@types/estree": "^1.0.0", + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^2.0.0", + "@types/unist": "^2.0.0", + "comma-separated-tokens": "^2.0.0", + "estree-util-attach-comments": "^2.0.0", + "estree-util-is-identifier-name": "^2.0.0", + "hast-util-whitespace": "^2.0.0", + "mdast-util-mdx-expression": "^1.0.0", + "mdast-util-mdxjs-esm": "^1.0.0", + "property-information": "^6.0.0", + "space-separated-tokens": "^2.0.0", + "style-to-object": "^0.3.0", + "unist-util-position": "^4.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-estree/node_modules/@types/estree": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz", + "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==" + }, "node_modules/hast-util-whitespace": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-2.0.0.tgz", @@ -8558,6 +8790,28 @@ "node": ">=0.10.0" } }, + "node_modules/is-alphabetical": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz", + "integrity": "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-alphanumerical": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz", + "integrity": "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==", + "dependencies": { + "is-alphabetical": "^2.0.0", + "is-decimal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", @@ -8676,6 +8930,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-decimal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz", + "integrity": "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/is-docker": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", @@ -8724,6 +8987,15 @@ "node": ">=0.10.0" } }, + "node_modules/is-hexadecimal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz", + "integrity": "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/is-installed-globally": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", @@ -8821,6 +9093,14 @@ "node": ">=0.10.0" } }, + "node_modules/is-reference": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.0.tgz", + "integrity": "sha512-Eo1W3wUoHWoCoVM4GVl/a+K0IgiqE5aIo4kJABFyMum1ZORlPkC+UC357sSQUL5w5QCE5kCC9upl75b7+7CY/Q==", + "dependencies": { + "@types/estree": "*" + } + }, "node_modules/is-regex": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", @@ -9837,6 +10117,15 @@ "node": ">=0.6" } }, + "node_modules/longest-streak": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz", + "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/loose-envify": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", @@ -10011,6 +10300,23 @@ "node": ">=6.4.0" } }, + "node_modules/markdown-extensions": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/markdown-extensions/-/markdown-extensions-1.1.1.tgz", + "integrity": "sha512-WWC0ZuMzCyDHYCasEGs4IPvLyTGftYwh6wIEOULOF0HXcqZlhwRzrK0w2VUlxWA98xnvb/jszw4ZSkJ6ADpM6Q==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/markdown-table": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.3.tgz", + "integrity": "sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/math.gl": { "version": "3.6.3", "resolved": "https://registry.npmjs.org/math.gl/-/math.gl-3.6.3.tgz", @@ -10060,6 +10366,31 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/mdast-util-find-and-replace": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-2.2.1.tgz", + "integrity": "sha512-SobxkQXFAdd4b5WmEakmkVoh18icjQRxGy5OWTCzgsLRm1Fu/KCtwD1HIQSsmq5ZRjVH0Ehwg6/Fn3xIUk+nKw==", + "dependencies": { + "escape-string-regexp": "^5.0.0", + "unist-util-is": "^5.0.0", + "unist-util-visit-parents": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-find-and-replace/node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/mdast-util-from-markdown": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-1.2.0.tgz", @@ -10083,54 +10414,227 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/mdast-util-to-hast": { - "version": "12.2.2", - "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-12.2.2.tgz", - "integrity": "sha512-lVkUttV9wqmdXFtEBXKcepvU/zfwbhjbkM5rxrquLW55dS1DfOrnAXCk5mg1be1sfY/WfMmayGy1NsbK1GLCYQ==", + "node_modules/mdast-util-gfm": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-2.0.1.tgz", + "integrity": "sha512-42yHBbfWIFisaAfV1eixlabbsa6q7vHeSPY+cg+BBjX51M8xhgMacqH9g6TftB/9+YkcI0ooV4ncfrJslzm/RQ==", "dependencies": { - "@types/hast": "^2.0.0", - "@types/mdast": "^3.0.0", - "@types/mdurl": "^1.0.0", - "mdast-util-definitions": "^5.0.0", - "mdurl": "^1.0.0", - "micromark-util-sanitize-uri": "^1.0.0", - "trim-lines": "^3.0.0", - "unist-builder": "^3.0.0", - "unist-util-generated": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-visit": "^4.0.0" + "mdast-util-from-markdown": "^1.0.0", + "mdast-util-gfm-autolink-literal": "^1.0.0", + "mdast-util-gfm-footnote": "^1.0.0", + "mdast-util-gfm-strikethrough": "^1.0.0", + "mdast-util-gfm-table": "^1.0.0", + "mdast-util-gfm-task-list-item": "^1.0.0", + "mdast-util-to-markdown": "^1.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/mdast-util-to-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.1.0.tgz", - "integrity": "sha512-n4Vypz/DZgwo0iMHLQL49dJzlp7YtAJP+N07MZHpjPf/5XJuHUWstviF4Mn2jEiR/GNmtnRRqnwsXExk3igfFA==", + "node_modules/mdast-util-gfm-autolink-literal": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-1.0.2.tgz", + "integrity": "sha512-FzopkOd4xTTBeGXhXSBU0OCDDh5lUj2rd+HQqG92Ld+jL4lpUfgX2AT2OHAVP9aEeDKp7G92fuooSZcYJA3cRg==", + "dependencies": { + "@types/mdast": "^3.0.0", + "ccount": "^2.0.0", + "mdast-util-find-and-replace": "^2.0.0", + "micromark-util-character": "^1.0.0" + }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/mdurl": { + "node_modules/mdast-util-gfm-footnote": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", - "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==" - }, - "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", - "dev": true, - "engines": { - "node": ">= 0.6" + "resolved": "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-1.0.1.tgz", + "integrity": "sha512-p+PrYlkw9DeCRkTVw1duWqPRHX6Ywh2BNKJQcZbCwAuP/59B0Lk9kakuAd7KbQprVO4GzdW8eS5++A9PUSqIyw==", + "dependencies": { + "@types/mdast": "^3.0.0", + "mdast-util-to-markdown": "^1.3.0", + "micromark-util-normalize-identifier": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/mem": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/mem/-/mem-8.1.1.tgz", + "node_modules/mdast-util-gfm-strikethrough": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-1.0.2.tgz", + "integrity": "sha512-T/4DVHXcujH6jx1yqpcAYYwd+z5lAYMw4Ls6yhTfbMMtCt0PHY4gEfhW9+lKsLBtyhUGKRIzcUA2FATVqnvPDA==", + "dependencies": { + "@types/mdast": "^3.0.0", + "mdast-util-to-markdown": "^1.3.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-table": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-1.0.6.tgz", + "integrity": "sha512-uHR+fqFq3IvB3Rd4+kzXW8dmpxUhvgCQZep6KdjsLK4O6meK5dYZEayLtIxNus1XO3gfjfcIFe8a7L0HZRGgag==", + "dependencies": { + "@types/mdast": "^3.0.0", + "markdown-table": "^3.0.0", + "mdast-util-from-markdown": "^1.0.0", + "mdast-util-to-markdown": "^1.3.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-task-list-item": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-1.0.1.tgz", + "integrity": "sha512-KZ4KLmPdABXOsfnM6JHUIjxEvcx2ulk656Z/4Balw071/5qgnhz+H1uGtf2zIGnrnvDC8xR4Fj9uKbjAFGNIeA==", + "dependencies": { + "@types/mdast": "^3.0.0", + "mdast-util-to-markdown": "^1.3.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdx": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-mdx/-/mdast-util-mdx-2.0.0.tgz", + "integrity": "sha512-M09lW0CcBT1VrJUaF/PYxemxxHa7SLDHdSn94Q9FhxjCQfuW7nMAWKWimTmA3OyDMSTH981NN1csW1X+HPSluw==", + "dependencies": { + "mdast-util-mdx-expression": "^1.0.0", + "mdast-util-mdx-jsx": "^2.0.0", + "mdast-util-mdxjs-esm": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdx-expression": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/mdast-util-mdx-expression/-/mdast-util-mdx-expression-1.3.1.tgz", + "integrity": "sha512-TTb6cKyTA1RD+1su1iStZ5PAv3rFfOUKcoU5EstUpv/IZo63uDX03R8+jXjMEhcobXnNOiG6/ccekvVl4eV1zQ==", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^2.0.0", + "@types/mdast": "^3.0.0", + "mdast-util-from-markdown": "^1.0.0", + "mdast-util-to-markdown": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdx-jsx": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-2.1.0.tgz", + "integrity": "sha512-KzgzfWMhdteDkrY4mQtyvTU5bc/W4ppxhe9SzelO6QUUiwLAM+Et2Dnjjprik74a336kHdo0zKm7Tp+n6FFeRg==", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^2.0.0", + "@types/mdast": "^3.0.0", + "ccount": "^2.0.0", + "mdast-util-to-markdown": "^1.3.0", + "parse-entities": "^4.0.0", + "stringify-entities": "^4.0.0", + "unist-util-remove-position": "^4.0.0", + "unist-util-stringify-position": "^3.0.0", + "vfile-message": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdxjs-esm": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-1.3.0.tgz", + "integrity": "sha512-7N5ihsOkAEGjFotIX9p/YPdl4TqUoMxL4ajNz7PbT89BqsdWJuBC9rvgt6wpbwTZqWWR0jKWqQbwsOWDBUZv4g==", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^2.0.0", + "@types/mdast": "^3.0.0", + "mdast-util-from-markdown": "^1.0.0", + "mdast-util-to-markdown": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-hast": { + "version": "12.2.2", + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-12.2.2.tgz", + "integrity": "sha512-lVkUttV9wqmdXFtEBXKcepvU/zfwbhjbkM5rxrquLW55dS1DfOrnAXCk5mg1be1sfY/WfMmayGy1NsbK1GLCYQ==", + "dependencies": { + "@types/hast": "^2.0.0", + "@types/mdast": "^3.0.0", + "@types/mdurl": "^1.0.0", + "mdast-util-definitions": "^5.0.0", + "mdurl": "^1.0.0", + "micromark-util-sanitize-uri": "^1.0.0", + "trim-lines": "^3.0.0", + "unist-builder": "^3.0.0", + "unist-util-generated": "^2.0.0", + "unist-util-position": "^4.0.0", + "unist-util-visit": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-markdown": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-1.3.0.tgz", + "integrity": "sha512-6tUSs4r+KK4JGTTiQ7FfHmVOaDrLQJPmpjD6wPMlHGUVXoG9Vjc3jIeP+uyBWRf8clwB2blM+W7+KrlMYQnftA==", + "dependencies": { + "@types/mdast": "^3.0.0", + "@types/unist": "^2.0.0", + "longest-streak": "^3.0.0", + "mdast-util-to-string": "^3.0.0", + "micromark-util-decode-string": "^1.0.0", + "unist-util-visit": "^4.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.1.0.tgz", + "integrity": "sha512-n4Vypz/DZgwo0iMHLQL49dJzlp7YtAJP+N07MZHpjPf/5XJuHUWstviF4Mn2jEiR/GNmtnRRqnwsXExk3igfFA==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdurl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", + "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==" + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mem": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/mem/-/mem-8.1.1.tgz", "integrity": "sha512-qFCFUDs7U3b8mBDPyz5EToEKoAkgCzqquIgi9nkkR9bixxOVOre+09lbuH7+9Kn2NFpm56M3GUWVbU2hQgdACA==", "dev": true, "dependencies": { @@ -10309,6 +10813,215 @@ "uvu": "^0.5.0" } }, + "node_modules/micromark-extension-gfm": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-2.0.1.tgz", + "integrity": "sha512-p2sGjajLa0iYiGQdT0oelahRYtMWvLjy8J9LOCxzIQsllMCGLbsLW+Nc+N4vi02jcRJvedVJ68cjelKIO6bpDA==", + "dependencies": { + "micromark-extension-gfm-autolink-literal": "^1.0.0", + "micromark-extension-gfm-footnote": "^1.0.0", + "micromark-extension-gfm-strikethrough": "^1.0.0", + "micromark-extension-gfm-table": "^1.0.0", + "micromark-extension-gfm-tagfilter": "^1.0.0", + "micromark-extension-gfm-task-list-item": "^1.0.0", + "micromark-util-combine-extensions": "^1.0.0", + "micromark-util-types": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-autolink-literal": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-1.0.3.tgz", + "integrity": "sha512-i3dmvU0htawfWED8aHMMAzAVp/F0Z+0bPh3YrbTPPL1v4YAlCZpy5rBO5p0LPYiZo0zFVkoYh7vDU7yQSiCMjg==", + "dependencies": { + "micromark-util-character": "^1.0.0", + "micromark-util-sanitize-uri": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-footnote": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-1.0.4.tgz", + "integrity": "sha512-E/fmPmDqLiMUP8mLJ8NbJWJ4bTw6tS+FEQS8CcuDtZpILuOb2kjLqPEeAePF1djXROHXChM/wPJw0iS4kHCcIg==", + "dependencies": { + "micromark-core-commonmark": "^1.0.0", + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-normalize-identifier": "^1.0.0", + "micromark-util-sanitize-uri": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-strikethrough": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-1.0.4.tgz", + "integrity": "sha512-/vjHU/lalmjZCT5xt7CcHVJGq8sYRm80z24qAKXzaHzem/xsDYb2yLL+NNVbYvmpLx3O7SYPuGL5pzusL9CLIQ==", + "dependencies": { + "micromark-util-chunked": "^1.0.0", + "micromark-util-classify-character": "^1.0.0", + "micromark-util-resolve-all": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-table": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-1.0.5.tgz", + "integrity": "sha512-xAZ8J1X9W9K3JTJTUL7G6wSKhp2ZYHrFk5qJgY/4B33scJzE2kpfRL6oiw/veJTbt7jiM/1rngLlOKPWr1G+vg==", + "dependencies": { + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-tagfilter": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-1.0.1.tgz", + "integrity": "sha512-Ty6psLAcAjboRa/UKUbbUcwjVAv5plxmpUTy2XC/3nJFL37eHej8jrHrRzkqcpipJliuBH30DTs7+3wqNcQUVA==", + "dependencies": { + "micromark-util-types": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-task-list-item": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-1.0.3.tgz", + "integrity": "sha512-PpysK2S1Q/5VXi72IIapbi/jliaiOFzv7THH4amwXeYXLq3l1uo8/2Be0Ac1rEwK20MQEsGH2ltAZLNY2KI/0Q==", + "dependencies": { + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-mdx-expression": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/micromark-extension-mdx-expression/-/micromark-extension-mdx-expression-1.0.3.tgz", + "integrity": "sha512-TjYtjEMszWze51NJCZmhv7MEBcgYRgb3tJeMAJ+HQCAaZHHRBaDCccqQzGizR/H4ODefP44wRTgOn2vE5I6nZA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-factory-mdx-expression": "^1.0.0", + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-events-to-acorn": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0" + } + }, + "node_modules/micromark-extension-mdx-jsx": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/micromark-extension-mdx-jsx/-/micromark-extension-mdx-jsx-1.0.3.tgz", + "integrity": "sha512-VfA369RdqUISF0qGgv2FfV7gGjHDfn9+Qfiv5hEwpyr1xscRj/CiVRkU7rywGFCO7JwJ5L0e7CJz60lY52+qOA==", + "dependencies": { + "@types/acorn": "^4.0.0", + "estree-util-is-identifier-name": "^2.0.0", + "micromark-factory-mdx-expression": "^1.0.0", + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0", + "vfile-message": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-mdx-md": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-mdx-md/-/micromark-extension-mdx-md-1.0.0.tgz", + "integrity": "sha512-xaRAMoSkKdqZXDAoSgp20Azm0aRQKGOl0RrS81yGu8Hr/JhMsBmfs4wR7m9kgVUIO36cMUQjNyiyDKPrsv8gOw==", + "dependencies": { + "micromark-util-types": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-mdxjs": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-mdxjs/-/micromark-extension-mdxjs-1.0.0.tgz", + "integrity": "sha512-TZZRZgeHvtgm+IhtgC2+uDMR7h8eTKF0QUX9YsgoL9+bADBpBY6SiLvWqnBlLbCEevITmTqmEuY3FoxMKVs1rQ==", + "dependencies": { + "acorn": "^8.0.0", + "acorn-jsx": "^5.0.0", + "micromark-extension-mdx-expression": "^1.0.0", + "micromark-extension-mdx-jsx": "^1.0.0", + "micromark-extension-mdx-md": "^1.0.0", + "micromark-extension-mdxjs-esm": "^1.0.0", + "micromark-util-combine-extensions": "^1.0.0", + "micromark-util-types": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-mdxjs-esm": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/micromark-extension-mdxjs-esm/-/micromark-extension-mdxjs-esm-1.0.3.tgz", + "integrity": "sha512-2N13ol4KMoxb85rdDwTAC6uzs8lMX0zeqpcyx7FhS7PxXomOnLactu8WI8iBNXW8AVyea3KIJd/1CKnUmwrK9A==", + "dependencies": { + "micromark-core-commonmark": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-events-to-acorn": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "unist-util-position-from-estree": "^1.1.0", + "uvu": "^0.5.0", + "vfile-message": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/micromark-factory-destination": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-1.0.0.tgz", @@ -10350,6 +11063,31 @@ "uvu": "^0.5.0" } }, + "node_modules/micromark-factory-mdx-expression": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/micromark-factory-mdx-expression/-/micromark-factory-mdx-expression-1.0.6.tgz", + "integrity": "sha512-WRQIc78FV7KrCfjsEf/sETopbYjElh3xAmNpLkd1ODPqxEngP42eVRGbiPEQWpRV27LzqW+XVTvQAMIIRLPnNA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-events-to-acorn": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "unist-util-position-from-estree": "^1.0.0", + "uvu": "^0.5.0", + "vfile-message": "^3.0.0" + } + }, "node_modules/micromark-factory-space": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-1.0.0.tgz", @@ -10542,6 +11280,35 @@ } ] }, + "node_modules/micromark-util-events-to-acorn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/micromark-util-events-to-acorn/-/micromark-util-events-to-acorn-1.2.0.tgz", + "integrity": "sha512-WWp3bf7xT9MppNuw3yPjpnOxa8cj5ACivEzXJKu0WwnjBYfzaBvIAT9KfeyI0Qkll+bfQtfftSwdgTH6QhTOKw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "@types/acorn": "^4.0.0", + "@types/estree": "^1.0.0", + "estree-util-visit": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0", + "vfile-location": "^4.0.0", + "vfile-message": "^3.0.0" + } + }, + "node_modules/micromark-util-events-to-acorn/node_modules/@types/estree": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz", + "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==" + }, "node_modules/micromark-util-html-tag-name": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-1.1.0.tgz", @@ -11590,6 +12357,25 @@ "integrity": "sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg==", "devOptional": true }, + "node_modules/parse-entities": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.0.tgz", + "integrity": "sha512-5nk9Fn03x3rEhGaX1FU6IDwG/k+GxLXlFAkgrbM1asuAFl3BhdQWvASaIsmwWypRNcZKHPYnIuOSfIWEyEQnPQ==", + "dependencies": { + "@types/unist": "^2.0.0", + "character-entities": "^2.0.0", + "character-entities-legacy": "^3.0.0", + "character-reference-invalid": "^2.0.0", + "decode-named-character-reference": "^1.0.0", + "is-alphanumerical": "^2.0.0", + "is-decimal": "^2.0.0", + "is-hexadecimal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/parse-json": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", @@ -11939,6 +12725,20 @@ "node": ">=6.0.0" } }, + "node_modules/periscopic": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/periscopic/-/periscopic-3.0.4.tgz", + "integrity": "sha512-SFx68DxCv0Iyo6APZuw/AKewkkThGwssmU0QWtTlvov3VAtPX+QJ4CadwSaz8nrT5jPIuxdvJWB4PnD2KNDxQg==", + "dependencies": { + "estree-walker": "^3.0.0", + "is-reference": "^3.0.0" + } + }, + "node_modules/periscopic/node_modules/estree-walker": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.1.tgz", + "integrity": "sha512-woY0RUD87WzMBUiZLx8NsYr23N5BKsOMZHhu2hoNRVh6NXGfoiT1KOL8G3UHlJAnEDGmfa5ubNA/AacfG+Kb0g==" + }, "node_modules/picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", @@ -11948,7 +12748,6 @@ "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, "engines": { "node": ">=8.6" }, @@ -13332,6 +14131,34 @@ "node": ">= 0.10" } }, + "node_modules/remark-gfm": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-3.0.1.tgz", + "integrity": "sha512-lEFDoi2PICJyNrACFOfDD3JlLkuSbOa5Wd8EPt06HUdptv8Gn0bxYTdbU/XXQ3swAPkEaGxxPN9cbnMHvVu1Ig==", + "dependencies": { + "@types/mdast": "^3.0.0", + "mdast-util-gfm": "^2.0.0", + "micromark-extension-gfm": "^2.0.0", + "unified": "^10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-mdx": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-2.1.5.tgz", + "integrity": "sha512-A8vw5s+BgOa968Irt8BO7DfWJTE0Fe7Ge3hX8zzDB1DnwMZTNdK6qF2IcFao+/7nzk1vSysKcFp+3ku4vhMpaQ==", + "dependencies": { + "mdast-util-mdx": "^2.0.0", + "micromark-extension-mdxjs": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/remark-parse": { "version": "10.0.1", "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-10.0.1.tgz", @@ -14428,6 +15255,19 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/stringify-entities": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.3.tgz", + "integrity": "sha512-BP9nNHMhhfcMbiuQKCqMjhDP5yBCAxsPu4pHFFzJ6Alo9dZgY4VLDPutXqIjpRiMoKdp7Av85Gr73Q5uH9k7+g==", + "dependencies": { + "character-entities-html4": "^2.0.0", + "character-entities-legacy": "^3.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -15903,6 +16743,31 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/unist-util-position-from-estree": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unist-util-position-from-estree/-/unist-util-position-from-estree-1.1.1.tgz", + "integrity": "sha512-xtoY50b5+7IH8tFbkw64gisG9tMSpxDjhX9TmaJJae/XuxQ9R/Kc8Nv1eOsf43Gt4KV/LkriMy9mptDr7XLcaw==", + "dependencies": { + "@types/unist": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-remove-position": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-4.0.1.tgz", + "integrity": "sha512-0yDkppiIhDlPrfHELgB+NLQD5mfjup3a8UYclHruTJWmY74je8g+CIFr79x5f6AkmzSwlvKLbs63hC0meOMowQ==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-visit": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/unist-util-stringify-position": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.2.tgz", @@ -16136,6 +17001,19 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/vfile-location": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-4.0.1.tgz", + "integrity": "sha512-JDxPlTbZrZCQXogGheBHjbRWjESSPEak770XwWPfw5mTc1v1nWGLB/apzZxsx8a0SJVfF8HK8ql8RD308vXRUw==", + "dependencies": { + "@types/unist": "^2.0.0", + "vfile": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/vfile-message": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.1.2.tgz", @@ -16966,6 +17844,15 @@ "funding": { "url": "https://github.com/sponsors/sindresorhus" } + }, + "node_modules/zwitch": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", + "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } } }, "dependencies": { @@ -18066,6 +18953,55 @@ "gl-matrix": "^3.4.0" } }, + "@mdx-js/mdx": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-2.1.5.tgz", + "integrity": "sha512-zEG0lt+Bl/r5U6e0TOS7qDbsXICtemfAPquxWFsMbdzrvlWaqMGemLl+sjVpqlyaaiCiGVQBSGdCk0t1qXjkQg==", + "requires": { + "@types/estree-jsx": "^1.0.0", + "@types/mdx": "^2.0.0", + "estree-util-build-jsx": "^2.0.0", + "estree-util-is-identifier-name": "^2.0.0", + "estree-util-to-js": "^1.1.0", + "estree-walker": "^3.0.0", + "hast-util-to-estree": "^2.0.0", + "markdown-extensions": "^1.0.0", + "periscopic": "^3.0.0", + "remark-mdx": "^2.0.0", + "remark-parse": "^10.0.0", + "remark-rehype": "^10.0.0", + "unified": "^10.0.0", + "unist-util-position-from-estree": "^1.0.0", + "unist-util-stringify-position": "^3.0.0", + "unist-util-visit": "^4.0.0", + "vfile": "^5.0.0" + }, + "dependencies": { + "estree-walker": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.1.tgz", + "integrity": "sha512-woY0RUD87WzMBUiZLx8NsYr23N5BKsOMZHhu2hoNRVh6NXGfoiT1KOL8G3UHlJAnEDGmfa5ubNA/AacfG+Kb0g==" + } + } + }, + "@mdx-js/rollup": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@mdx-js/rollup/-/rollup-2.1.5.tgz", + "integrity": "sha512-l90rSiwnEf6PnjH8uRXjZ1W0rR8p1fp1YIiDuA3uF7SOfxMQ98uymaIwI6BsX+8BC2dcWij7Racwp++JkvdOLQ==", + "requires": { + "@mdx-js/mdx": "^2.0.0", + "@rollup/pluginutils": "^4.0.0", + "source-map": "^0.7.0", + "vfile": "^5.0.0" + }, + "dependencies": { + "source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==" + } + } + }, "@nebula.gl/edit-modes": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/@nebula.gl/edit-modes/-/edit-modes-1.0.3.tgz", @@ -18233,7 +19169,6 @@ "version": "4.2.1", "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.2.1.tgz", "integrity": "sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==", - "dev": true, "requires": { "estree-walker": "^2.0.1", "picomatch": "^2.2.2" @@ -18762,6 +19697,14 @@ "polygon-clipping": "^0.15.3" } }, + "@types/acorn": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@types/acorn/-/acorn-4.0.6.tgz", + "integrity": "sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==", + "requires": { + "@types/estree": "*" + } + }, "@types/aria-query": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-4.2.2.tgz", @@ -18823,9 +19766,15 @@ "@types/estree": { "version": "0.0.51", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", - "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==", - "dev": true, - "peer": true + "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==" + }, + "@types/estree-jsx": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-1.0.0.tgz", + "integrity": "sha512-3qvGd0z8F2ENTGr/GG1yViqfiKmRfrXVx5sJyHGFu3z7m5g5utCQtGp/g29JnjflhtQJBv1WDQukHiT58xPcYQ==", + "requires": { + "@types/estree": "*" + } }, "@types/file-saver": { "version": "2.0.5", @@ -18921,6 +19870,11 @@ "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-1.0.2.tgz", "integrity": "sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA==" }, + "@types/mdx": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/mdx/-/mdx-2.0.3.tgz", + "integrity": "sha512-IgHxcT3RC8LzFLhKwP3gbMPeaK7BM9eBH46OdapPA7yvuIUJ8H6zHZV53J8hGZcTSnt95jANt+rTBNUUc22ACQ==" + }, "@types/minimist": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", @@ -19475,7 +20429,6 @@ "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, "requires": {} }, "acorn-jsx-walk": { @@ -19746,6 +20699,11 @@ "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", "dev": true }, + "astring": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/astring/-/astring-1.8.3.tgz", + "integrity": "sha512-sRpyiNrx2dEYIMmUXprS8nlpRg2Drs8m9ElX9vVEXaCB4XEAJhKfs7IcX0IwShjuOAjLR6wzIrgoptz1n19i1A==" + }, "async": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", @@ -20051,6 +21009,11 @@ "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", "devOptional": true }, + "ccount": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", + "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==" + }, "chai": { "version": "4.3.6", "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.6.tgz", @@ -20080,6 +21043,21 @@ "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==" }, + "character-entities-html4": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz", + "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==" + }, + "character-entities-legacy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", + "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==" + }, + "character-reference-invalid": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz", + "integrity": "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==" + }, "charenc": { "version": "0.0.2", "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", @@ -21987,11 +22965,73 @@ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true }, + "estree-util-attach-comments": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/estree-util-attach-comments/-/estree-util-attach-comments-2.1.0.tgz", + "integrity": "sha512-rJz6I4L0GaXYtHpoMScgDIwM0/Vwbu5shbMeER596rB2D1EWF6+Gj0e0UKzJPZrpoOc87+Q2kgVFHfjAymIqmw==", + "requires": { + "@types/estree": "^1.0.0" + }, + "dependencies": { + "@types/estree": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz", + "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==" + } + } + }, + "estree-util-build-jsx": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/estree-util-build-jsx/-/estree-util-build-jsx-2.2.0.tgz", + "integrity": "sha512-apsfRxF9uLrqosApvHVtYZjISPvTJ+lBiIydpC+9wE6cF6ssbhnjyQLqaIjgzGxvC2Hbmec1M7g91PoBayYoQQ==", + "requires": { + "@types/estree-jsx": "^1.0.0", + "estree-util-is-identifier-name": "^2.0.0", + "estree-walker": "^3.0.0" + }, + "dependencies": { + "estree-walker": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.1.tgz", + "integrity": "sha512-woY0RUD87WzMBUiZLx8NsYr23N5BKsOMZHhu2hoNRVh6NXGfoiT1KOL8G3UHlJAnEDGmfa5ubNA/AacfG+Kb0g==" + } + } + }, + "estree-util-is-identifier-name": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/estree-util-is-identifier-name/-/estree-util-is-identifier-name-2.0.1.tgz", + "integrity": "sha512-rxZj1GkQhY4x1j/CSnybK9cGuMFQYFPLq0iNyopqf14aOVLFtMv7Esika+ObJWPWiOHuMOAHz3YkWoLYYRnzWQ==" + }, + "estree-util-to-js": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/estree-util-to-js/-/estree-util-to-js-1.1.0.tgz", + "integrity": "sha512-490lbfCcpLk+ofK6HCgqDfYs4KAfq6QVvDw3+Bm1YoKRgiOjKiKYGAVQE1uwh7zVxBgWhqp4FDtp5SqunpUk1A==", + "requires": { + "@types/estree-jsx": "^1.0.0", + "astring": "^1.8.0", + "source-map": "^0.7.0" + }, + "dependencies": { + "source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==" + } + } + }, + "estree-util-visit": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/estree-util-visit/-/estree-util-visit-1.2.0.tgz", + "integrity": "sha512-wdsoqhWueuJKsh5hqLw3j8lwFqNStm92VcwtAOAny8g/KS/l5Y8RISjR4k5W6skCj3Nirag/WUCMS0Nfy3sgsg==", + "requires": { + "@types/estree-jsx": "^1.0.0", + "@types/unist": "^2.0.0" + } + }, "estree-walker": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "dev": true + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" }, "esutils": { "version": "2.0.3", @@ -23059,6 +24099,35 @@ "resolved": "https://registry.npmjs.org/hash-wasm/-/hash-wasm-4.9.0.tgz", "integrity": "sha512-7SW7ejyfnRxuOc7ptQHSf4LDoZaWOivfzqw+5rpcQku0nHfmicPKE51ra9BiRLAmT8+gGLestr1XroUkqdjL6w==" }, + "hast-util-to-estree": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/hast-util-to-estree/-/hast-util-to-estree-2.1.0.tgz", + "integrity": "sha512-Vwch1etMRmm89xGgz+voWXvVHba2iiMdGMKmaMfYt35rbVtFDq8JNwwAIvi8zHMkO6Gvqo9oTMwJTmzVRfXh4g==", + "requires": { + "@types/estree": "^1.0.0", + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^2.0.0", + "@types/unist": "^2.0.0", + "comma-separated-tokens": "^2.0.0", + "estree-util-attach-comments": "^2.0.0", + "estree-util-is-identifier-name": "^2.0.0", + "hast-util-whitespace": "^2.0.0", + "mdast-util-mdx-expression": "^1.0.0", + "mdast-util-mdxjs-esm": "^1.0.0", + "property-information": "^6.0.0", + "space-separated-tokens": "^2.0.0", + "style-to-object": "^0.3.0", + "unist-util-position": "^4.0.0", + "zwitch": "^2.0.0" + }, + "dependencies": { + "@types/estree": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz", + "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==" + } + } + }, "hast-util-whitespace": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-2.0.0.tgz", @@ -23485,8 +24554,22 @@ "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==", "dev": true, "requires": { - "is-relative": "^1.0.0", - "is-windows": "^1.0.1" + "is-relative": "^1.0.0", + "is-windows": "^1.0.1" + } + }, + "is-alphabetical": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz", + "integrity": "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==" + }, + "is-alphanumerical": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz", + "integrity": "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==", + "requires": { + "is-alphabetical": "^2.0.0", + "is-decimal": "^2.0.0" } }, "is-arrayish": { @@ -23560,6 +24643,11 @@ "has-tostringtag": "^1.0.0" } }, + "is-decimal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz", + "integrity": "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==" + }, "is-docker": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", @@ -23587,6 +24675,11 @@ "is-extglob": "^2.1.1" } }, + "is-hexadecimal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz", + "integrity": "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==" + }, "is-installed-globally": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", @@ -23648,6 +24741,14 @@ "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", "dev": true }, + "is-reference": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.0.tgz", + "integrity": "sha512-Eo1W3wUoHWoCoVM4GVl/a+K0IgiqE5aIo4kJABFyMum1ZORlPkC+UC357sSQUL5w5QCE5kCC9upl75b7+7CY/Q==", + "requires": { + "@types/estree": "*" + } + }, "is-regex": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", @@ -24445,6 +25546,11 @@ "resolved": "https://registry.npmjs.org/long/-/long-3.2.0.tgz", "integrity": "sha512-ZYvPPOMqUwPoDsbJaR10iQJYnMuZhRTvHYl62ErLIEX7RgFlziSBUUvrt3OVfc47QlHHpzPZYP17g3Fv7oeJkg==" }, + "longest-streak": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz", + "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==" + }, "loose-envify": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", @@ -24585,6 +25691,16 @@ "vt-pbf": "^3.1.1" } }, + "markdown-extensions": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/markdown-extensions/-/markdown-extensions-1.1.1.tgz", + "integrity": "sha512-WWC0ZuMzCyDHYCasEGs4IPvLyTGftYwh6wIEOULOF0HXcqZlhwRzrK0w2VUlxWA98xnvb/jszw4ZSkJ6ADpM6Q==" + }, + "markdown-table": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.3.tgz", + "integrity": "sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw==" + }, "math.gl": { "version": "3.6.3", "resolved": "https://registry.npmjs.org/math.gl/-/math.gl-3.6.3.tgz", @@ -24628,6 +25744,23 @@ "unist-util-visit": "^4.0.0" } }, + "mdast-util-find-and-replace": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-2.2.1.tgz", + "integrity": "sha512-SobxkQXFAdd4b5WmEakmkVoh18icjQRxGy5OWTCzgsLRm1Fu/KCtwD1HIQSsmq5ZRjVH0Ehwg6/Fn3xIUk+nKw==", + "requires": { + "escape-string-regexp": "^5.0.0", + "unist-util-is": "^5.0.0", + "unist-util-visit-parents": "^5.0.0" + }, + "dependencies": { + "escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==" + } + } + }, "mdast-util-from-markdown": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-1.2.0.tgz", @@ -24647,6 +25780,121 @@ "uvu": "^0.5.0" } }, + "mdast-util-gfm": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-2.0.1.tgz", + "integrity": "sha512-42yHBbfWIFisaAfV1eixlabbsa6q7vHeSPY+cg+BBjX51M8xhgMacqH9g6TftB/9+YkcI0ooV4ncfrJslzm/RQ==", + "requires": { + "mdast-util-from-markdown": "^1.0.0", + "mdast-util-gfm-autolink-literal": "^1.0.0", + "mdast-util-gfm-footnote": "^1.0.0", + "mdast-util-gfm-strikethrough": "^1.0.0", + "mdast-util-gfm-table": "^1.0.0", + "mdast-util-gfm-task-list-item": "^1.0.0", + "mdast-util-to-markdown": "^1.0.0" + } + }, + "mdast-util-gfm-autolink-literal": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-1.0.2.tgz", + "integrity": "sha512-FzopkOd4xTTBeGXhXSBU0OCDDh5lUj2rd+HQqG92Ld+jL4lpUfgX2AT2OHAVP9aEeDKp7G92fuooSZcYJA3cRg==", + "requires": { + "@types/mdast": "^3.0.0", + "ccount": "^2.0.0", + "mdast-util-find-and-replace": "^2.0.0", + "micromark-util-character": "^1.0.0" + } + }, + "mdast-util-gfm-footnote": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-1.0.1.tgz", + "integrity": "sha512-p+PrYlkw9DeCRkTVw1duWqPRHX6Ywh2BNKJQcZbCwAuP/59B0Lk9kakuAd7KbQprVO4GzdW8eS5++A9PUSqIyw==", + "requires": { + "@types/mdast": "^3.0.0", + "mdast-util-to-markdown": "^1.3.0", + "micromark-util-normalize-identifier": "^1.0.0" + } + }, + "mdast-util-gfm-strikethrough": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-1.0.2.tgz", + "integrity": "sha512-T/4DVHXcujH6jx1yqpcAYYwd+z5lAYMw4Ls6yhTfbMMtCt0PHY4gEfhW9+lKsLBtyhUGKRIzcUA2FATVqnvPDA==", + "requires": { + "@types/mdast": "^3.0.0", + "mdast-util-to-markdown": "^1.3.0" + } + }, + "mdast-util-gfm-table": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-1.0.6.tgz", + "integrity": "sha512-uHR+fqFq3IvB3Rd4+kzXW8dmpxUhvgCQZep6KdjsLK4O6meK5dYZEayLtIxNus1XO3gfjfcIFe8a7L0HZRGgag==", + "requires": { + "@types/mdast": "^3.0.0", + "markdown-table": "^3.0.0", + "mdast-util-from-markdown": "^1.0.0", + "mdast-util-to-markdown": "^1.3.0" + } + }, + "mdast-util-gfm-task-list-item": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-1.0.1.tgz", + "integrity": "sha512-KZ4KLmPdABXOsfnM6JHUIjxEvcx2ulk656Z/4Balw071/5qgnhz+H1uGtf2zIGnrnvDC8xR4Fj9uKbjAFGNIeA==", + "requires": { + "@types/mdast": "^3.0.0", + "mdast-util-to-markdown": "^1.3.0" + } + }, + "mdast-util-mdx": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-mdx/-/mdast-util-mdx-2.0.0.tgz", + "integrity": "sha512-M09lW0CcBT1VrJUaF/PYxemxxHa7SLDHdSn94Q9FhxjCQfuW7nMAWKWimTmA3OyDMSTH981NN1csW1X+HPSluw==", + "requires": { + "mdast-util-mdx-expression": "^1.0.0", + "mdast-util-mdx-jsx": "^2.0.0", + "mdast-util-mdxjs-esm": "^1.0.0" + } + }, + "mdast-util-mdx-expression": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/mdast-util-mdx-expression/-/mdast-util-mdx-expression-1.3.1.tgz", + "integrity": "sha512-TTb6cKyTA1RD+1su1iStZ5PAv3rFfOUKcoU5EstUpv/IZo63uDX03R8+jXjMEhcobXnNOiG6/ccekvVl4eV1zQ==", + "requires": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^2.0.0", + "@types/mdast": "^3.0.0", + "mdast-util-from-markdown": "^1.0.0", + "mdast-util-to-markdown": "^1.0.0" + } + }, + "mdast-util-mdx-jsx": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-2.1.0.tgz", + "integrity": "sha512-KzgzfWMhdteDkrY4mQtyvTU5bc/W4ppxhe9SzelO6QUUiwLAM+Et2Dnjjprik74a336kHdo0zKm7Tp+n6FFeRg==", + "requires": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^2.0.0", + "@types/mdast": "^3.0.0", + "ccount": "^2.0.0", + "mdast-util-to-markdown": "^1.3.0", + "parse-entities": "^4.0.0", + "stringify-entities": "^4.0.0", + "unist-util-remove-position": "^4.0.0", + "unist-util-stringify-position": "^3.0.0", + "vfile-message": "^3.0.0" + } + }, + "mdast-util-mdxjs-esm": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-1.3.0.tgz", + "integrity": "sha512-7N5ihsOkAEGjFotIX9p/YPdl4TqUoMxL4ajNz7PbT89BqsdWJuBC9rvgt6wpbwTZqWWR0jKWqQbwsOWDBUZv4g==", + "requires": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^2.0.0", + "@types/mdast": "^3.0.0", + "mdast-util-from-markdown": "^1.0.0", + "mdast-util-to-markdown": "^1.0.0" + } + }, "mdast-util-to-hast": { "version": "12.2.2", "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-12.2.2.tgz", @@ -24665,6 +25913,20 @@ "unist-util-visit": "^4.0.0" } }, + "mdast-util-to-markdown": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-1.3.0.tgz", + "integrity": "sha512-6tUSs4r+KK4JGTTiQ7FfHmVOaDrLQJPmpjD6wPMlHGUVXoG9Vjc3jIeP+uyBWRf8clwB2blM+W7+KrlMYQnftA==", + "requires": { + "@types/mdast": "^3.0.0", + "@types/unist": "^2.0.0", + "longest-streak": "^3.0.0", + "mdast-util-to-string": "^3.0.0", + "micromark-util-decode-string": "^1.0.0", + "unist-util-visit": "^4.0.0", + "zwitch": "^2.0.0" + } + }, "mdast-util-to-string": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.1.0.tgz", @@ -24813,6 +26075,161 @@ "uvu": "^0.5.0" } }, + "micromark-extension-gfm": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-2.0.1.tgz", + "integrity": "sha512-p2sGjajLa0iYiGQdT0oelahRYtMWvLjy8J9LOCxzIQsllMCGLbsLW+Nc+N4vi02jcRJvedVJ68cjelKIO6bpDA==", + "requires": { + "micromark-extension-gfm-autolink-literal": "^1.0.0", + "micromark-extension-gfm-footnote": "^1.0.0", + "micromark-extension-gfm-strikethrough": "^1.0.0", + "micromark-extension-gfm-table": "^1.0.0", + "micromark-extension-gfm-tagfilter": "^1.0.0", + "micromark-extension-gfm-task-list-item": "^1.0.0", + "micromark-util-combine-extensions": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "micromark-extension-gfm-autolink-literal": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-1.0.3.tgz", + "integrity": "sha512-i3dmvU0htawfWED8aHMMAzAVp/F0Z+0bPh3YrbTPPL1v4YAlCZpy5rBO5p0LPYiZo0zFVkoYh7vDU7yQSiCMjg==", + "requires": { + "micromark-util-character": "^1.0.0", + "micromark-util-sanitize-uri": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0" + } + }, + "micromark-extension-gfm-footnote": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-1.0.4.tgz", + "integrity": "sha512-E/fmPmDqLiMUP8mLJ8NbJWJ4bTw6tS+FEQS8CcuDtZpILuOb2kjLqPEeAePF1djXROHXChM/wPJw0iS4kHCcIg==", + "requires": { + "micromark-core-commonmark": "^1.0.0", + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-normalize-identifier": "^1.0.0", + "micromark-util-sanitize-uri": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0" + } + }, + "micromark-extension-gfm-strikethrough": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-1.0.4.tgz", + "integrity": "sha512-/vjHU/lalmjZCT5xt7CcHVJGq8sYRm80z24qAKXzaHzem/xsDYb2yLL+NNVbYvmpLx3O7SYPuGL5pzusL9CLIQ==", + "requires": { + "micromark-util-chunked": "^1.0.0", + "micromark-util-classify-character": "^1.0.0", + "micromark-util-resolve-all": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0" + } + }, + "micromark-extension-gfm-table": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-1.0.5.tgz", + "integrity": "sha512-xAZ8J1X9W9K3JTJTUL7G6wSKhp2ZYHrFk5qJgY/4B33scJzE2kpfRL6oiw/veJTbt7jiM/1rngLlOKPWr1G+vg==", + "requires": { + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0" + } + }, + "micromark-extension-gfm-tagfilter": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-1.0.1.tgz", + "integrity": "sha512-Ty6psLAcAjboRa/UKUbbUcwjVAv5plxmpUTy2XC/3nJFL37eHej8jrHrRzkqcpipJliuBH30DTs7+3wqNcQUVA==", + "requires": { + "micromark-util-types": "^1.0.0" + } + }, + "micromark-extension-gfm-task-list-item": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-1.0.3.tgz", + "integrity": "sha512-PpysK2S1Q/5VXi72IIapbi/jliaiOFzv7THH4amwXeYXLq3l1uo8/2Be0Ac1rEwK20MQEsGH2ltAZLNY2KI/0Q==", + "requires": { + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0" + } + }, + "micromark-extension-mdx-expression": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/micromark-extension-mdx-expression/-/micromark-extension-mdx-expression-1.0.3.tgz", + "integrity": "sha512-TjYtjEMszWze51NJCZmhv7MEBcgYRgb3tJeMAJ+HQCAaZHHRBaDCccqQzGizR/H4ODefP44wRTgOn2vE5I6nZA==", + "requires": { + "micromark-factory-mdx-expression": "^1.0.0", + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-events-to-acorn": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0" + } + }, + "micromark-extension-mdx-jsx": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/micromark-extension-mdx-jsx/-/micromark-extension-mdx-jsx-1.0.3.tgz", + "integrity": "sha512-VfA369RdqUISF0qGgv2FfV7gGjHDfn9+Qfiv5hEwpyr1xscRj/CiVRkU7rywGFCO7JwJ5L0e7CJz60lY52+qOA==", + "requires": { + "@types/acorn": "^4.0.0", + "estree-util-is-identifier-name": "^2.0.0", + "micromark-factory-mdx-expression": "^1.0.0", + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0", + "vfile-message": "^3.0.0" + } + }, + "micromark-extension-mdx-md": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-mdx-md/-/micromark-extension-mdx-md-1.0.0.tgz", + "integrity": "sha512-xaRAMoSkKdqZXDAoSgp20Azm0aRQKGOl0RrS81yGu8Hr/JhMsBmfs4wR7m9kgVUIO36cMUQjNyiyDKPrsv8gOw==", + "requires": { + "micromark-util-types": "^1.0.0" + } + }, + "micromark-extension-mdxjs": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-mdxjs/-/micromark-extension-mdxjs-1.0.0.tgz", + "integrity": "sha512-TZZRZgeHvtgm+IhtgC2+uDMR7h8eTKF0QUX9YsgoL9+bADBpBY6SiLvWqnBlLbCEevITmTqmEuY3FoxMKVs1rQ==", + "requires": { + "acorn": "^8.0.0", + "acorn-jsx": "^5.0.0", + "micromark-extension-mdx-expression": "^1.0.0", + "micromark-extension-mdx-jsx": "^1.0.0", + "micromark-extension-mdx-md": "^1.0.0", + "micromark-extension-mdxjs-esm": "^1.0.0", + "micromark-util-combine-extensions": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "micromark-extension-mdxjs-esm": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/micromark-extension-mdxjs-esm/-/micromark-extension-mdxjs-esm-1.0.3.tgz", + "integrity": "sha512-2N13ol4KMoxb85rdDwTAC6uzs8lMX0zeqpcyx7FhS7PxXomOnLactu8WI8iBNXW8AVyea3KIJd/1CKnUmwrK9A==", + "requires": { + "micromark-core-commonmark": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-events-to-acorn": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "unist-util-position-from-estree": "^1.1.0", + "uvu": "^0.5.0", + "vfile-message": "^3.0.0" + } + }, "micromark-factory-destination": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-1.0.0.tgz", @@ -24834,6 +26251,21 @@ "uvu": "^0.5.0" } }, + "micromark-factory-mdx-expression": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/micromark-factory-mdx-expression/-/micromark-factory-mdx-expression-1.0.6.tgz", + "integrity": "sha512-WRQIc78FV7KrCfjsEf/sETopbYjElh3xAmNpLkd1ODPqxEngP42eVRGbiPEQWpRV27LzqW+XVTvQAMIIRLPnNA==", + "requires": { + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-events-to-acorn": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "unist-util-position-from-estree": "^1.0.0", + "uvu": "^0.5.0", + "vfile-message": "^3.0.0" + } + }, "micromark-factory-space": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-1.0.0.tgz", @@ -24926,6 +26358,27 @@ "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-1.0.1.tgz", "integrity": "sha512-U2s5YdnAYexjKDel31SVMPbfi+eF8y1U4pfiRW/Y8EFVCy/vgxk/2wWTxzcqE71LHtCuCzlBDRU2a5CQ5j+mQA==" }, + "micromark-util-events-to-acorn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/micromark-util-events-to-acorn/-/micromark-util-events-to-acorn-1.2.0.tgz", + "integrity": "sha512-WWp3bf7xT9MppNuw3yPjpnOxa8cj5ACivEzXJKu0WwnjBYfzaBvIAT9KfeyI0Qkll+bfQtfftSwdgTH6QhTOKw==", + "requires": { + "@types/acorn": "^4.0.0", + "@types/estree": "^1.0.0", + "estree-util-visit": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0", + "vfile-location": "^4.0.0", + "vfile-message": "^3.0.0" + }, + "dependencies": { + "@types/estree": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz", + "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==" + } + } + }, "micromark-util-html-tag-name": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-1.1.0.tgz", @@ -25672,6 +27125,21 @@ "integrity": "sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg==", "devOptional": true }, + "parse-entities": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.0.tgz", + "integrity": "sha512-5nk9Fn03x3rEhGaX1FU6IDwG/k+GxLXlFAkgrbM1asuAFl3BhdQWvASaIsmwWypRNcZKHPYnIuOSfIWEyEQnPQ==", + "requires": { + "@types/unist": "^2.0.0", + "character-entities": "^2.0.0", + "character-entities-legacy": "^3.0.0", + "character-reference-invalid": "^2.0.0", + "decode-named-character-reference": "^1.0.0", + "is-alphanumerical": "^2.0.0", + "is-decimal": "^2.0.0", + "is-hexadecimal": "^2.0.0" + } + }, "parse-json": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", @@ -25938,6 +27406,22 @@ "which": "^2.0.2" } }, + "periscopic": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/periscopic/-/periscopic-3.0.4.tgz", + "integrity": "sha512-SFx68DxCv0Iyo6APZuw/AKewkkThGwssmU0QWtTlvov3VAtPX+QJ4CadwSaz8nrT5jPIuxdvJWB4PnD2KNDxQg==", + "requires": { + "estree-walker": "^3.0.0", + "is-reference": "^3.0.0" + }, + "dependencies": { + "estree-walker": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.1.tgz", + "integrity": "sha512-woY0RUD87WzMBUiZLx8NsYr23N5BKsOMZHhu2hoNRVh6NXGfoiT1KOL8G3UHlJAnEDGmfa5ubNA/AacfG+Kb0g==" + } + } + }, "picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", @@ -25946,8 +27430,7 @@ "picomatch": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" }, "pidtree": { "version": "0.6.0", @@ -26960,6 +28443,26 @@ "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", "dev": true }, + "remark-gfm": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-3.0.1.tgz", + "integrity": "sha512-lEFDoi2PICJyNrACFOfDD3JlLkuSbOa5Wd8EPt06HUdptv8Gn0bxYTdbU/XXQ3swAPkEaGxxPN9cbnMHvVu1Ig==", + "requires": { + "@types/mdast": "^3.0.0", + "mdast-util-gfm": "^2.0.0", + "micromark-extension-gfm": "^2.0.0", + "unified": "^10.0.0" + } + }, + "remark-mdx": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-2.1.5.tgz", + "integrity": "sha512-A8vw5s+BgOa968Irt8BO7DfWJTE0Fe7Ge3hX8zzDB1DnwMZTNdK6qF2IcFao+/7nzk1vSysKcFp+3ku4vhMpaQ==", + "requires": { + "mdast-util-mdx": "^2.0.0", + "micromark-extension-mdxjs": "^1.0.0" + } + }, "remark-parse": { "version": "10.0.1", "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-10.0.1.tgz", @@ -27838,6 +29341,15 @@ "es-abstract": "^1.19.5" } }, + "stringify-entities": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.3.tgz", + "integrity": "sha512-BP9nNHMhhfcMbiuQKCqMjhDP5yBCAxsPu4pHFFzJ6Alo9dZgY4VLDPutXqIjpRiMoKdp7Av85Gr73Q5uH9k7+g==", + "requires": { + "character-entities-html4": "^2.0.0", + "character-entities-legacy": "^3.0.0" + } + }, "strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -28972,6 +30484,23 @@ "@types/unist": "^2.0.0" } }, + "unist-util-position-from-estree": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unist-util-position-from-estree/-/unist-util-position-from-estree-1.1.1.tgz", + "integrity": "sha512-xtoY50b5+7IH8tFbkw64gisG9tMSpxDjhX9TmaJJae/XuxQ9R/Kc8Nv1eOsf43Gt4KV/LkriMy9mptDr7XLcaw==", + "requires": { + "@types/unist": "^2.0.0" + } + }, + "unist-util-remove-position": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-4.0.1.tgz", + "integrity": "sha512-0yDkppiIhDlPrfHELgB+NLQD5mfjup3a8UYclHruTJWmY74je8g+CIFr79x5f6AkmzSwlvKLbs63hC0meOMowQ==", + "requires": { + "@types/unist": "^2.0.0", + "unist-util-visit": "^4.0.0" + } + }, "unist-util-stringify-position": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.2.tgz", @@ -29142,6 +30671,15 @@ "vfile-message": "^3.0.0" } }, + "vfile-location": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-4.0.1.tgz", + "integrity": "sha512-JDxPlTbZrZCQXogGheBHjbRWjESSPEak770XwWPfw5mTc1v1nWGLB/apzZxsx8a0SJVfF8HK8ql8RD308vXRUw==", + "requires": { + "@types/unist": "^2.0.0", + "vfile": "^5.0.0" + } + }, "vfile-message": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.1.2.tgz", @@ -29741,6 +31279,11 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==" + }, + "zwitch": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", + "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==" } } } diff --git a/package.json b/package.json index 3fe4520ec..44820d630 100644 --- a/package.json +++ b/package.json @@ -82,6 +82,7 @@ "@konturio/default-theme": "3.1.1", "@konturio/ui-kit": "^3.5.3", "@loaders.gl/core": "^3.2.3", + "@mdx-js/rollup": "^2.1.5", "@nebula.gl/edit-modes": "1.0.3", "@nebula.gl/layers": "1.0.3", "@reatom/core": "^2.0.22", @@ -135,7 +136,8 @@ "react-router-cache-route": "^1.11.1", "react-router-dom": "^5.3.0", "react-transition-group": "^4.4.5", - "react-virtuoso": "^2.19.0" + "react-virtuoso": "^2.19.0", + "remark-gfm": "^3.0.1" }, "devDependencies": { "@testing-library/react": "^13.4.0", diff --git a/src/components/Layout/Article/Article.module.css b/src/components/Layout/Article/Article.module.css new file mode 100644 index 000000000..8b22d2ef5 --- /dev/null +++ b/src/components/Layout/Article/Article.module.css @@ -0,0 +1,60 @@ +.mainWrap { + place-content: center; + flex: 1; + padding-top: 80px; + padding-bottom: 80px; + overflow-y: auto; +} + +.content { + max-width: 800px; + margin-left: auto; + margin-right: auto; + font-size: 16px; + line-height: 24px; + box-sizing: content-box; + padding-left: 14px; + padding-right: 14px; +} + +.mainWrap blockquote { + margin-block-start: 2em; + margin-block-end: 2em; +} + +.mainWrap blockquote h3 { + margin-block-end: 0em; +} + +.mainWrap blockquote p { + margin-block-start: 0.3em; + padding-left: 1em; +} + +.mainWrap h1 { + font-weight: 500; + font-size: 48px; + line-height: 62px; + display: flex; + margin: 0 0 40px 0; +} + +.mainWrap a { + color: var(--accent-strong); + text-decoration: none; + cursor: pointer; +} + +.content table { + border-collapse: collapse; +} + +.content td, +.content th { + padding: var(--unit); + border: 1px solid var(--faint-weak); +} + +.content tr:nth-child(odd) { + background-color: var(--base-weak-up); +} diff --git a/src/components/Layout/Article/Article.tsx b/src/components/Layout/Article/Article.tsx new file mode 100644 index 000000000..e93222c42 --- /dev/null +++ b/src/components/Layout/Article/Article.tsx @@ -0,0 +1,10 @@ +import s from './Article.module.css'; +import type { PropsWithChildren } from 'react'; + +export function Article({ children }: PropsWithChildren) { + return ( +
+
{children}
+
+ ); +} diff --git a/src/components/Layout/Layout.tsx b/src/components/Layout/Layout.tsx deleted file mode 100644 index 087527247..000000000 --- a/src/components/Layout/Layout.tsx +++ /dev/null @@ -1,4 +0,0 @@ -import { Column } from './Column/Column'; -import { Row } from './Row/Row'; - -export { Row, Column }; diff --git a/src/components/Layout/index.tsx b/src/components/Layout/index.tsx new file mode 100644 index 000000000..2a8032251 --- /dev/null +++ b/src/components/Layout/index.tsx @@ -0,0 +1,5 @@ +import { Column } from './Column/Column'; +import { Row } from './Row/Row'; +import { Article } from './Article/Article'; + +export { Row, Column, Article }; diff --git a/src/core/localization/gettext/template/common.pot b/src/core/localization/gettext/template/common.pot index 2b93064d1..fad94361d 100644 --- a/src/core/localization/gettext/template/common.pot +++ b/src/core/localization/gettext/template/common.pot @@ -5,8 +5,8 @@ msgstr "" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" -"POT-Creation-Date: 2022-12-06T14:07:27.258Z\n" -"PO-Revision-Date: 2022-12-06T14:07:27.258Z\n" +"POT-Creation-Date: 2022-12-07T18:32:47.235Z\n" +"PO-Revision-Date: 2022-12-07T18:32:47.235Z\n" #: km msgid "km" @@ -717,6 +717,10 @@ msgstr "" msgid "Profile" msgstr "" +#: modes##privacy +msgid "Privacy" +msgstr "" + #: about##title msgid "Welcome to Disaster Ninja!" msgstr "" diff --git a/src/core/localization/translations/en/common.json b/src/core/localization/translations/en/common.json index 67889f669..993087977 100644 --- a/src/core/localization/translations/en/common.json +++ b/src/core/localization/translations/en/common.json @@ -240,7 +240,8 @@ "map": "Map", "about": "About", "reports": "Reports", - "profile": "Profile" + "profile": "Profile", + "privacy": "Privacy" }, "about": { "title": "Welcome to Disaster Ninja!", diff --git a/src/core/router/routes.tsx b/src/core/router/routes.tsx index bb444fbd3..0c6b93b9a 100644 --- a/src/core/router/routes.tsx +++ b/src/core/router/routes.tsx @@ -17,6 +17,8 @@ const { ReportsPage } = lazily(() => import('~views/Reports/Reports')); const { ReportPage } = lazily(() => import('~views/Report/Report')); const { ProfilePage } = lazily(() => import('~views/Profile/Profile')); const { AboutPage } = lazily(() => import('~views/About/About')); +const { PrivacyPage } = lazily(() => import('~views/Privacy/Privacy')); +const { CookiesPage } = lazily(() => import('~views/Cookies/Cookies')); const { BivariateManagerPage } = lazily( () => import('~views/BivariateManager/BivariateManager'), ); @@ -31,6 +33,22 @@ export const routerConfig: AppRouterConfig = { view: goTo('')} />, showForNewUsers: true, }, + { + slug: 'privacy', + title: i18n.t('modes.privacy'), + icon: , + view: , + parentRoute: 'about', + visibilityInNavigation: 'always', + }, + { + slug: 'cookies', + title: 'modes.cookies', + icon: , + view: , + parentRoute: 'about', + visibilityInNavigation: 'never', + }, { slug: 'profile', title: ( @@ -64,7 +82,7 @@ export const routerConfig: AppRouterConfig = { view: , requiredFeature: AppFeature.REPORTS, parentRoute: 'reports', - hidden: true, + visibilityInNavigation: 'never', }, { slug: 'bivariate-manager', diff --git a/src/core/router/types.ts b/src/core/router/types.ts index ca30589c9..e80121dc4 100644 --- a/src/core/router/types.ts +++ b/src/core/router/types.ts @@ -14,8 +14,13 @@ export interface AppRoute { requiredFeature?: AppFeatureType; /** Nest routes to each other */ parentRoute?: string; - /** Don't show route in navigation */ - hidden?: boolean; + /** + * Visibility in navigation sidebar + * - auto (default) - show when route or it's parent is active + * - never - never show it in navigation + * - always - always show it in navigation + * */ + visibilityInNavigation?: 'always' | 'never' | 'auto'; } export interface AppRouterConfig { diff --git a/src/features/side_bar/components/SideBar/SideBar.module.css b/src/features/side_bar/components/SideBar/SideBar.module.css index 747d22c62..0af42f323 100644 --- a/src/features/side_bar/components/SideBar/SideBar.module.css +++ b/src/features/side_bar/components/SideBar/SideBar.module.css @@ -13,6 +13,14 @@ user-select: none; } +.nestedRoute + .topLevelRoute { + margin-top: var(--unit); +} + +.topLevelRoute + .nestedRoute { + margin-top: 0; +} + .sidebar .controlButton { width: 100%; justify-content: left; diff --git a/src/features/side_bar/components/SideBar/SideBar.tsx b/src/features/side_bar/components/SideBar/SideBar.tsx index 6c91d6fc9..13a30b818 100644 --- a/src/features/side_bar/components/SideBar/SideBar.tsx +++ b/src/features/side_bar/components/SideBar/SideBar.tsx @@ -9,39 +9,13 @@ import { i18n } from '~core/localization'; import { currentTooltipAtom } from '~core/shared_state/currentTooltip'; import { searchStringAtom } from '~core/url_store/atoms/urlStore'; import { SidebarAppIcon } from '../AppIcon/AppIcon'; +import { SmallIconSlot } from '../SmallIconSlot/SmallIconSlot'; +import { routeVisibilityChecker } from './routeVisibilityChecker'; import s from './SideBar.module.css'; import type { AvailableRoutesAtom, CurrentRouteAtom, AppRoute } from '~core/router'; const wasClosed = 'sidebarClosed'; -/* We want to hide children routes if parent route and his children inactive */ -function routeVisibilityChecker(routes: AppRoute[]) { - type RoutesTree = { [key: string]: RoutesTree }; - const routesTree = routes.reduce((tree, route) => { - if (route.parentRoute) { - if (!tree[route.parentRoute]) tree[route.parentRoute] = {}; - tree[route.parentRoute][route.slug] = {}; - return tree; - } - tree[route.slug] = {}; - return tree; - }, {} as RoutesTree); - - return (route: AppRoute, currentRoute: AppRoute | null): boolean => { - if (route.hidden) return false; - if (!route.parentRoute) return true; // always show top level routes - if (currentRoute === null) return false; // hide nested routes if no selected routes - const isActive = route.slug === currentRoute.slug; - const haveActiveParentRoute = route.parentRoute - ? currentRoute?.slug === route.parentRoute - : false; - const neighbors = route.parentRoute ? Object.keys(routesTree[route.parentRoute]) : []; - const haveActiveNeighbor = neighbors.includes(currentRoute.slug); - - return isActive || haveActiveParentRoute || haveActiveNeighbor; - }; -} - export function SideBar({ currentRouteAtom, availableRoutesAtom, @@ -125,7 +99,10 @@ export function SideBar({ return checkRouteVisibility(route, currentRoute) ? ( {route.icon} + ) : ( + route.icon + ) + } value={route.slug} className={s.controlButton} > diff --git a/src/features/side_bar/components/SideBar/routeVisibilityChecker.test.ts b/src/features/side_bar/components/SideBar/routeVisibilityChecker.test.ts new file mode 100644 index 000000000..61d1237ed --- /dev/null +++ b/src/features/side_bar/components/SideBar/routeVisibilityChecker.test.ts @@ -0,0 +1,89 @@ +import React from 'react'; +import { test, expect, beforeEach, describe } from 'vitest'; +import { routeVisibilityChecker } from './routeVisibilityChecker'; +import type { AppRoute } from '~core/router'; + +declare module 'vitest' { + export interface TestContext { + checker: (route: AppRoute, currentRoute: AppRoute | null) => boolean; + routes: { + foo: AppRoute; + bar: AppRoute; + bar_child: AppRoute; + bar_child_neighbor: AppRoute; + }; + } +} + +/* defaultRouteValues */ +const defaults = { + icon: React.createElement('i'), + view: React.createElement('p'), + title: '', +}; + +beforeEach(async (context) => { + const foo = { + ...defaults, + slug: 'foo', + }; + + const bar = { + ...defaults, + slug: 'bar', + }; + + const bar_child = { + ...defaults, + slug: 'bar-child', + parentRoute: 'bar', + }; + + const bar_child_neighbor = { + ...defaults, + slug: 'bar-child-neighbor', + parentRoute: 'bar', + }; + + context.routes = { + foo, + bar, + bar_child, + bar_child_neighbor, + }; + + // extend context + context.checker = routeVisibilityChecker(Object.values(context.routes)); +}); + +describe('auto visibility', () => { + test('top level routes always visible', ({ checker, routes }) => { + expect( + checker( + routes.foo, // check route + routes.foo, // when what active + ), + 'in case it active', + ).toBe(true); + + expect( + checker( + routes.foo, // check route + routes.bar, // when what active + ), + 'in case it inactive', + ).toBe(true); + }); + + test('nested routes visible when parent active', ({ checker, routes }) => { + expect(checker(routes.bar_child, routes.bar)).toBe(true); + }); + + test('nested routes visible when neighbor active', ({ checker, routes }) => { + expect(checker(routes.bar_child, routes.bar_child_neighbor)).toBe(true); + }); + + test('nested hidden when no active neighbor and parent', ({ checker, routes }) => { + expect(checker(routes.bar_child, routes.foo)).toBe(false); + }); +}); diff --git a/src/features/side_bar/components/SideBar/routeVisibilityChecker.ts b/src/features/side_bar/components/SideBar/routeVisibilityChecker.ts new file mode 100644 index 000000000..dd86f51f1 --- /dev/null +++ b/src/features/side_bar/components/SideBar/routeVisibilityChecker.ts @@ -0,0 +1,41 @@ +import type { AppRoute } from '~core/router'; + +export function routeVisibilityChecker(routes: AppRoute[]) { + type RoutesTree = { [key: string]: RoutesTree }; + const routesTree = routes.reduce((tree, route) => { + if (route.parentRoute) { + if (!tree[route.parentRoute]) tree[route.parentRoute] = {}; + tree[route.parentRoute][route.slug] = {}; + return tree; + } + tree[route.slug] = {}; + return tree; + }, {} as RoutesTree); + + return (route: AppRoute, currentRoute: AppRoute | null): boolean => { + switch (route.visibilityInNavigation) { + case 'never': + return false; + + case 'always': + return true; + + case 'auto': + default: + // always show top level routes + // hide nested routes if no selected routes in same branch + if (!route.parentRoute) return true; + if (currentRoute === null) return false; + const isActive = route.slug === currentRoute.slug; + const haveActiveParentRoute = route.parentRoute + ? currentRoute?.slug === route.parentRoute + : false; + const neighbors = route.parentRoute + ? Object.keys(routesTree[route.parentRoute]) + : []; + const haveActiveNeighbor = neighbors.includes(currentRoute.slug); + + return isActive || haveActiveParentRoute || haveActiveNeighbor; + } + }; +} diff --git a/src/features/side_bar/components/SmallIconSlot/SmallIconSlot.module.css b/src/features/side_bar/components/SmallIconSlot/SmallIconSlot.module.css new file mode 100644 index 000000000..a67718ae4 --- /dev/null +++ b/src/features/side_bar/components/SmallIconSlot/SmallIconSlot.module.css @@ -0,0 +1,8 @@ +.smallIconSlot { + width: 24px; + padding-left: var(--unit); +} + +.smallIconSlot svg { + display: block; +} diff --git a/src/features/side_bar/components/SmallIconSlot/SmallIconSlot.tsx b/src/features/side_bar/components/SmallIconSlot/SmallIconSlot.tsx new file mode 100644 index 000000000..79fd357d1 --- /dev/null +++ b/src/features/side_bar/components/SmallIconSlot/SmallIconSlot.tsx @@ -0,0 +1,5 @@ +import s from './SmallIconSlot.module.css'; + +export const SmallIconSlot = ({ children }) => ( +
{children}
+); diff --git a/src/views/About/About.module.css b/src/views/About/About.module.css index 857e7830a..8a3e3b52f 100644 --- a/src/views/About/About.module.css +++ b/src/views/About/About.module.css @@ -1,51 +1,3 @@ -.mainWrap { - place-content: center; - flex: 1; - - padding-top: 80px; - padding-bottom: 80px; - overflow-y: auto; -} - -.content { - max-width: 800px; - margin-left: auto; - margin-right: auto; - font-size: 16px; - line-height: 24px; - box-sizing: content-box; - padding-left: 14px; - padding-right: 14px; -} - -.mainWrap blockquote { - margin-block-start: 2em; - margin-block-end: 2em; -} - -.mainWrap blockquote h3 { - margin-block-end: 0em; -} - -.mainWrap blockquote p { - margin-block-start: 0.3em; - padding-left: 1em; -} - -.pageTitle { - font-weight: 500; - font-size: 48px; - line-height: 62px; - display: flex; - margin: 0 0 40px 0; -} - -a, -.link { - color: var(--accent-strong); - text-decoration: none; -} - .linkToMain, .linkToMain:visited { font-weight: 600; diff --git a/src/views/About/About.tsx b/src/views/About/About.tsx index 951e70104..16428e485 100644 --- a/src/views/About/About.tsx +++ b/src/views/About/About.tsx @@ -1,5 +1,6 @@ import { useEffect } from 'react'; import { Trans } from 'react-i18next'; +import { Article } from '~components/Layout'; import { landUser } from '~core/auth'; import { i18n } from '~core/localization'; import s from './About.module.css'; @@ -9,98 +10,96 @@ export function AboutPage({ toHomePage }: { toHomePage: () => void }) { landUser(); }, []); return ( -
-
-

{i18n.t('about.title')}

+
+

{i18n.t('about.title')}

+

+ + Do you want to be notified about ongoing disasters? Are you interested in + instant population data and other analytics for any region in the world? + Disaster Ninja showcases some of{' '} + + Kontur + + ’s capabilities in addressing these needs. +
+
+ We initially designed it as a decision support tool for humanitarian mappers. + Now it has grown in functionality and use cases. Whether you work in disaster + management, build a smart city, or perform research on climate change, Disaster + Ninja can help you to: +
+

+ +
+

{i18n.t('about.l1')}

- - Do you want to be notified about ongoing disasters? Are you interested in - instant population data and other analytics for any region in the world? - Disaster Ninja showcases some of{' '} - - Kontur + + The Disasters panel continually refreshes to inform you about ongoing events. + It consumes data from the{' '} + + Kontur Event Feed - ’s capabilities in addressing these needs. -
-
- We initially designed it as a decision support tool for humanitarian mappers. - Now it has grown in functionality and use cases. Whether you work in disaster - management, build a smart city, or perform research on climate change, - Disaster Ninja can help you to: + , which you can also access via an API.

- -
-

{i18n.t('about.l1')}

-

- - The Disasters panel continually refreshes to inform you about ongoing - events. It consumes data from the{' '} - - Kontur Event Feed - - , which you can also access via an API. - -

-

{i18n.t('about.l2')}

-

{i18n.t('about.p2')}

-

{i18n.t('about.l3')}

-

- - The Analytics panel shows the number of people living in that area per{' '} - - Kontur Population - {' '} - and estimated mapping gaps in OpenStreetMap. Kontur’s customers have access - to hundreds of other indicators through Advanced Analytics. - -

-

{i18n.t('about.l4')}

-

- - The Layers panel gives you various options to display two indicators - simultaneously on a bivariate map, e.g., population density and distance to - the nearest fire station. Use the color legend to assess which areas require - attention.
- Hint: in general, green indicates low risk / few gaps, red — high risk / - many gaps. -
-

-
- -

{i18n.t('about.p5')}

- +

{i18n.t('about.l2')}

+

{i18n.t('about.p2')}

+

{i18n.t('about.l3')}

- - {i18n.t('about.goToMap')} ➜ - + + The Analytics panel shows the number of people living in that area per{' '} + + Kontur Population + {' '} + and estimated mapping gaps in OpenStreetMap. Kontur’s customers have access to + hundreds of other indicators through Advanced Analytics. +

- +

{i18n.t('about.l4')}

- - We hope you find this tool valuable. Use the chatbox on Disaster Ninja for any - questions about the functionality, and we will be happy to guide you. You can - also contact us by email at{' '} - hello@kontur.io if you have feedback or - suggestions on improving the tool. -
-
- Disaster Ninja is an open-source project. Find the code in{' '} - - Kontur’s GitHub account - - . + + The Layers panel gives you various options to display two indicators + simultaneously on a bivariate map, e.g., population density and distance to + the nearest fire station. Use the color legend to assess which areas require + attention.
+ Hint: in general, green indicates low risk / few gaps, red — high risk / many + gaps.

-
-
+ + +

{i18n.t('about.p5')}

+ +

+ + {i18n.t('about.goToMap')} ➜ + +

+ +

+ + We hope you find this tool valuable. Use the chatbox on Disaster Ninja for any + questions about the functionality, and we will be happy to guide you. You can + also contact us by email at + hello@kontur.io if you have feedback or + suggestions on improving the tool. +
+
+ Disaster Ninja is an open-source project. Find the code in{' '} + + Kontur’s GitHub account + + . +
+

+ ); } diff --git a/src/views/CommonView.tsx b/src/views/CommonView.tsx index b43ec254e..4bb6836c0 100644 --- a/src/views/CommonView.tsx +++ b/src/views/CommonView.tsx @@ -2,7 +2,7 @@ import { Suspense, useEffect } from 'react'; import { lazily } from 'react-lazily'; import { useAtom } from '@reatom/react'; import { AppFeature } from '~core/auth/types'; -import { Row } from '~components/Layout/Layout'; +import { Row } from '~components/Layout'; import { OriginalLogo } from '~components/KonturLogo/KonturLogo'; import { userResourceAtom } from '~core/auth'; import type { AvailableRoutesAtom, CurrentRouteAtom } from '~core/router'; diff --git a/src/views/Cookies/Cookies.tsx b/src/views/Cookies/Cookies.tsx new file mode 100644 index 000000000..45226d7ae --- /dev/null +++ b/src/views/Cookies/Cookies.tsx @@ -0,0 +1,56 @@ +import ReactMarkdown from 'react-markdown'; +import gfm from 'remark-gfm'; +import { Article } from '~components/Layout'; + +const md = `# Cookie files policy and operational data +| Name | Domain | Description | Duration | Type | +| ------------------------- | ----------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------- | ------------- | +| AnalyticsSyncHistory | .linkedin.com | Used to store information about the time of a successful sync using the lms_analytics cookie | 30 days | Other | +| UserMatchHistory | .linkedin.com | Used in the identity synchronization process. Stores the latest sync time so you don't have to repeat this process too often | 30 days | Other | +| \_fbp | .disaster.ninja | Used by Facebook to deliver advertising. The cookie contains an encrypted Facebook user ID and browser ID. It will receive information from this website to better target and optimise advertising. | 90 days | Advertisement | +| \_fbp | .kontur.io | Used by Facebook to deliver advertising. The cookie contains an encrypted Facebook user ID and browser ID. It will receive information from this website to better target and optimise advertising. | 81 day | Advertisement | +| \_ga | .kontur.io | Сalculates visitor, session and campaign data and also keeps track of site usage for the site's analytics report. Also stores information anonymously and assigns a randomly generated number to recognize unique visitors. | 391 day, 50 min | Analytics | +| \_ga | .disaster.ninja | Calculates visitor, session and campaign data and also keeps track of site usage for the site's analytics report. Also stores information anonymously and assigns a randomly generated number to recognize unique visitors. | 400 days | Analytics | +| \_gid | .kontur.io | Registers a unique ID that is used to generate statistical data on how the visitor uses the website. | | Analytics | +| \_gid | .disaster.ninja | Registers a unique ID that is used to generate statistical data on how the visitor uses the website. | 24 hour | Analytics | +| \_yasc | .yandex.ru | Collecting data about the user's interests and displaying relevant advertising on other sites. | 385 days, 10 hours, 21 min | Advertisement | +| \_ym_d | .yandex.ru | Yandex sets this cookie to store the date of the users first site session. | 349 days, 7 hours, 49 min | Analytics | +| \_ym_d | .kontur.io | Yandex sets this cookie to store the date of the users first site session. | 317 days, 23 hours, 36 min | Analytics | +| \_ym_d | .disaster.ninja | Yandex sets this cookie to store the date of the users first site session. | 315 days, 23 hours, 56 min | Analytics | +| \_ym_isad | .kontur.io | Yandex sets this cookie to determine if a visitor has ad blockers | | Analytics | +| \_ym_isad | .disaster.ninja | Yandex sets this cookie to determine if a visitor has ad blockers | 20 hours | Analytics | +| \_ym_uid | .kontur.io | Yandex sets this cookie to identify site users. | 317 days, 23 hours, 36 min | Analytics | +| ym_uid | .yandex.ru | Yandex sets this cookie to identify site users | 349 days, 7 hours, 49 min | Analytics | +| ym_uid | .disaster.ninja | Yandex sets this cookie to identify site users | 315 days, 23 hours, 56 min | Analytics | +| \_ym_visorc | .disaster.ninja | Allow the site's Session Replay to function correctly | 30 min | Performance | +| bcookie | .linkedin.com | Browser ID cookie to uniquely identify devices accessing LinkedIn for platform abuse detection | 310 days, 2 hours | Functional | +| fr | .facebook.com | Used to deliver, measure and improve the relevancy of ads | 35 days, 22 hours | Performance | +| gdpr | .yandex.ru | Determines whether the visitor has accepted the cookie consent box. This ensures that the cookie consent box will not be presented again upon re-entry. | Session | Functional | +| i | .yandex.ru | This cookie is set by OpenX to record anonymized user data, such as IP address, geographical location, websites visited, ads clicked by the user etc., for relevant advertising. | 345 days, 2 hours | Analytics | +| intercom-id-e59cl64z | .kontur.io | Anonymous visitor identifier cookie. As people visit your site they get this cookie | 261 day, 23 min | Other | +| intercom-id-e59cl64z | .disaster.ninja | Anonymous visitor identifier cookie. As people visit your site they get this cookie | 248 days, 20 hours, 48 min | Other | +| intercom-session-e59cl64z | .kontur.io | Identifier for each unique browser session. This session cookie is refreshed on each successful logged-in ping, extending it one week from that moment. | 7 days | Other | +| intercom-session-e59cl64z | .disaster.ninja | Identifier for each unique browser session. This session cookie is refreshed on each successful logged-in ping, extending it one week from that moment. | 7 days | Other | +| is_gdpr | .yandex.ru | | 379 days, 19 hours, 47 min | Analytics | +| is_gdpr_b | .yandex.ru | | 379 days, 19 hours, 47 min | Analytics | +| lang | .ads.linkedin.com | Used to remember the user's language settings so that LinkedIn.com appears in the language selected by the user in their settings. | session | Functional | +| lang | .linkedin.com | Used to remember the user's language settings so that LinkedIn.com appears in the language selected by the user in their settings. | session | Functional | +| li_sugr | .linkedin.com | Used to to store browser details | 90 days | Analytics | +| lidc | .linkedin.com | Used to simplify data center selection | 24 hours | Functional | +| ln_or | .disaster.ninja | Registers statistical data on users' behaviour on the website. Used for internal analytics by the website operator. | 24 hours | Analytics | +| muc_ads | .t.co | Advertising cookie | 345 days, 2 hours, 30 min | Advertisement | +| personalization_id | .twitter.com | Advertising cookie | 345 days, 2 hours, 30 min | Advertisement | +| yabs-sid | mc.yandex.ru | Yandex sets this cookie to store the session ID | session | Analytics | +| yandexuid | .yandex.ru | Allow to use additional features of the website and customize it according to users preferences | 345 days, 2 hours, 30 min | Analytics | +| yandexuid | .webvisor.org | Allow to use additional features of the website and customize it according to users preferences | 400 days | Analytics | +| ymex | .yandex.ru | Used to collect data about the user's interests and display relevant advertising for users on other sites | 310 days, 2 hours, 30 min | Performance | +| ys | .yandex.ru | | session | | +| yuidss | .yandex.ru | Yandex stores this cookie in the user's browser in order to recognize the visitor. | 345 days, 2 hours | Performance | +`; +export function CookiesPage() { + return ( +
+ {md} +
+ ); +} diff --git a/src/views/Privacy/Privacy.tsx b/src/views/Privacy/Privacy.tsx new file mode 100644 index 000000000..12a0e6ad6 --- /dev/null +++ b/src/views/Privacy/Privacy.tsx @@ -0,0 +1,181 @@ +import ReactMarkdown from 'react-markdown'; +import { Article } from '~components/Layout'; + +const md = ` +# Privacy Policy for EU/UK Residents + +## General Provisions + +1. This document, hereinafter referred to as “The Privacy Policy” sets forth the rules of personal data protection and processing regarding the [https://disaster.ninja](https://disaster.ninja) website, available under the domain, users, Clients and potential Clients. In case a user sets up an account at [https://disaster.ninja](https://disaster.ninja)  they are automatically provided with accounts at [https://www.kontur.io](https://www.kontur.io), [https://apps.kontur.io/global-fires](https://apps.kontur.io/global-fires), [https://apps.kontur.io/firebrigade/minsk/](https://apps.kontur.io/firebrigade/minsk/) to which the same Privacy Policy applies. The Privacy Policy also establishes the Cookie files usage regulations. +2. The hereby given document is of an informative purpose and character. +3. The data Controller of website’s users personal data, in compliance with the Polish Data Protection Bill (issued on the 10 th of May 2018) and the Regulation (EU) 2016/679 of the European Parliament and of the Council of 27 April 2016 on the protection of natural persons with regard to the processing of personal data and on the free movement of such data, and repealing Directive 95/46/EC General Data Protection Regulation (GDPR), is Mapy Konturowe spółka z ograniczoną odpowiedzialnością (Mapy Konturowe limited liability company) with its registered office in Warsaw, address: ul. Bitwy Warszawskiej 1920 r. 7, 02-366 Warszawa, registered in the Register of Entrepreneurs of the National Court Register kept by the District Court for the city of Warsaw in Warsaw, XII Commercial Division of the National Court Register under krs number: 0000909528, Tax ID: 7011042997, share capital: PLN 5,000, e mail address: hello@kontur.io, further referred to as the Controller and being at the same time the Service Provider +4. The Users’ personal data is being processed in accordance with Polish applicable laws, especially the Electronically Supplied Services Bill. +5. The personal data Controller makes every useful and necessary effort to protect the interests of the people whose personal data he collects and to ensure proper data protection in accordance with the aforementioned Personal Data Protection and Electronically Supplied Services Bills. The data is collected in an orderly manner for defined and legally available purposes, the Controller makes sure not to further process the collected data in any illegal or infringing towards the established data protection laws way. The Controller hereby states that the collected data is stored in a manner enabling to identify the person it regards, not longer than it needs to fulfill the data collection purpose. +6. The Privacy Policy aims to set forth and establish the data protection rules and actions by the personal data Controller, regarding data stored and collected by his website and the website’s associated services and tools used by the website’s Clients and other actions that take place while navigating the website infrastructure. +7. A Client using the website’s services and tools made available by the website confirms to accept the terms and regulations and Privacy Policy (clicking the right check boxes following the site’s feed and instructions) and if the purpose occurs, accepts his personal data being processed by the Controller within using the website’s infrastructure. +8. All the collected data is protected using reasonable technical means and measures as well as data protection programs and policies to ensure the data will not get breached, infringed or leaked. Every reasonable measure is taken to protect the collected data from an unauthorized access or illegal breach. +9. The Controller, within the rights and rules established in the terms and regulations and this Privacy Policy, has the sole access to data stored and collected by website. Access to the Clients personal data may be given to other entities, which collect, store and process the personal data within their own set of terms and regulations. This access is only given to the outside entities to a necessary extent and only to provide the Client with the proper set of services to process his order. Outside third parties process users personal data only based on a signed agreement entrusting data processing by such party. + +## Personal data collecting, storing, scope and purpose + +1. The Controller acquires user information for example via storing server logs through the hosting operator. +2. Data obtained via server logs is not associated with any specific person using the website and is not used to identify such people. +3. Server logs are only complementary and subsidiary material used to administer the website and it’s content is not disclosed to anyone but authorized staff. +4. The Controller informs that The Client may be asked to deliver the \ + following data: name, surname, company’s name, position, housing address, company’s address (company’s seat), telephone number, e-mail address. +5. The Controller may store within his website data containing information helpful in establishing contact with The Client, in order to send them notifications. Processing data with this intention is in accordance with the article 6 section 1 letter A of GDPR and article 6 section 1 letter f of GDPR. +6. Data collected using the newsletter service is being used only to distribute The Newsletter upon prior consent (article 6 section 1 letter a) of GDPR). +7. The Controller processes The Clients personal data necessary do properly implement the provided services and is authorized to use the collected and stored within his website data to: + 1. Place and order (Processing data with this intention is in accordance with the article 6 section 1 letter b) of GDPR) + 2. Enter into and execution of a sales agreement or enter into and execute an electronic service supply agreement (Processing data with this intention is in accordance with the article 6 section 1 letter b) and f) of GDPR) + 3. Direct marketing of the Controller’s products or services (Processing data with this intention is in accordance with the article 6 section 1 letter f) or a) of GDPR) + 4. Providing a full customer service, including establishing and managing user account, solving technical issues and sharing features (Processing data with this intention is in accordance with the article 6 section 1 letter b) or f) of GDPR) + 5. Adjusting the user’s offers and experiences, including advertisements in the website’s features (Processing data with this intention is in accordance with the article 6 section 1 letter f) of GDPR) + 6. To monitor all and each User’s activities within website (Processing data with this intention is in accordance with the article 6 section 1 letter B or F of GDPR) + 7. Contacting the Users particularly in terms of service providing purposes, customer service and permitted marketing and advertising actions (Processing data with this intention is in accordance with the article 6 section 1 letter b) or f) of GDPR) + 8. Perform exams and evaluations as well as analysis towards the available services improvement (Processing data with this intention is in accordance with the article 6 section 1 letter f) of GDPR) + 9. Execute the proper implementation and following of the Terms and Regulations (Processing data with this intention is in accordance with the article 6 section 1 letter b) or f) of GDPR) + 10. Sending out Newsletter service (Processing data with this intention is in accordance with the article 6 section 1 letter a) of GDPR) + 11. Prosecution of possible claims, for example when the Client acts against the law or regulations (Processing data with this intention is in accordance with the article 6 section 1 letter f) of GDPR) +8. The Controller is authorized to store the collected and followed in the website data only within the above mentioned scope. +9. The Controller has the exclusive right to filter and block messages sent through an internal messaging system, particularly if the messages are spam, contain illegal content or otherwise endanger the website’s User safety. +10. The Controller is authorized to automatically harvesting and register the data entering the website’s server through the internet browsers and Client’s devices (i.e. IP address, the software parameters, websites visited, the mobile device ID number and other data relevant to computer and mobile devices as well as using the system). The gathering of such data would occur while using the website. +11. The Controller may collect, processes and stores the following Client’s data: + 1. email address + 2. name and surname + 3. company’s name (in case of Entrepreneurs) and taxpayer ID number (NIP) + 4. position + 5. phone number. +12. The Controller states that entering the data in the abovementioned scope by The Client is voluntary. Submitting the afore mentioned data may as well be vital to enter into and execute the Sales Agreement or the Electronic Services Supply Agreement in the website. The scope of all the instrumental to enter into contract data is given on the website, as well as it’s Terms and Regulations. +13. The Controller may share the anonymous collected data with other entities, including the website’s partners in order to exam the advertisements effectiveness or other Client services provided by the website or it’s partners, or to enter a science trial/ opinion polls. +14. The Controller informs The Users that he entrusts the personal data processing with the following entities: + 1. The Constant Company LLC, 319 Clematis St, Suite 900, West Palm Beach, Florida 33401, USA to store personal data on the server, on which the website is installed, + 1. Rocket Science Group LLC, 675 Ponce de Leon Ave NE, Suite 5000, Atlanta, GA 30308, USA to use the mailing system required to send the website’s Newsletter (Mailchimp), + 1. FIBERY LIMITED, 28 Oktovrioy, 2, Floor 1, Flat 101, Egkomi, Makedonitissa, 2414, Nicosia, Cyprus; Google LLC 1600 Amphitheatre Parkway, Mountain View, California 94043, United States to store personal information collected from contact forms presented on the website. +15. The Controller informs that he uses the following tracking The User’s website activities technologies: + 1. Google Analytics tracking code to analyse the site’s statistics and for AdWords ads purposes. To learn more about this please visit: [https://support.google.com/analytics/answer/6004245](https://support.google.com/analytics/answer/6004245) + 2. Linkedin tracking code to analyse the site’s statistics. To learn more about this please visit: [https://www.linkedin.com/legal/privacy-policy](https://www.linkedin.com/legal/privacy-policy) + 3. Twitter tracking code to analyse the site’s statistics. To learn more about this please visit: [https://twitter.com/en/privacy](https://twitter.com/en/privacy) + 4. Facebook Pixel to follow actions related to the ads on the Facebook platform, the information collected via pixel is anonymous and prohibit the Controller to identify a specific person. To learn more about this please visit: [https://www.facebook.com/privacy/explanation](https://www.facebook.com/privacy/explanation). Additionally, the subscriber’s e mail may be disclosed to Facebook, to target and custom certain marketing techniques and enable to better customer – focused on line ads, + 5. Yandex.Metrica tracking code (Yandex Oy Limited Company – Moreenikatu 6, 04600 Mantsala, Finland i Yandex LLC – to analyse the site’s statistics. To learn more about this please visit: [https://yandex.com/support/metrica/general/opt-out.html](https://yandex.com/support/metrica/general/opt-out.html), [https://metrica.yandex.com/about/info/privacy-policy](https://metrica.yandex.com/about/info/privacy-policy) +16. The website uses social media plugins such as Facebook, Twitter, Instagram, Linkedin. Entering such a page the user’s browser establishes a direct connection with those services servers Controllers. The plugin content is transmitted directly to the user’s browser and integrated with the site. If the user is logged in to one of those social media services the service provider will be able to adjust such visit on a given site to the user’s profile on this social media service. The purpose and scope of data processing and further processing and use by the service providers as well as contact information and the user’s rights as well as the ability to change such settings is set forth and established In those services privacy policies respectively. + +## [Cookie files policy and operational data](./cookies) + +1. The Controller automatically collects the Cookie files information in order to store data surrounding the use of his webiste by its Clients. Cookie files comprise of a short text fragment which is sent by the on line service to the User’s browser and which is being send back in future entrances of the given website. They are mostly used to maintain the session i.e. through generating and sending back a temporary login ID. +2. The Controller uses the “session” Cookie files stored on the Client’s DTE until his logging out, the website’s shut down, or the browser’s shut down, as well as “permanent” Cookie files, stored on the Client’s DTE for a definite time period, established in the Cookie files parameters or as long as the Client does not erases them. +3. The Controller uses the following Cookie files types: 1. “vital” Cookie files, enabling to use the services available in website 2. Cookie files serving as protection 3. Cookie files, used to gain information on ways of using the website by the users 4. “session” cookies, are temporary cookies that memorize your online activities 5. “advertising” Cookie files, enabling to provide the Users with advertising \ + content more appropriate towards their interests 6. “function” Cookie files, enabling “to memorize” the User’s chosen settings and adjusting the website towards the Users needs and wishes. + + All Cookies files, other than “vital”, are processed by the Controller basing on a consent given by the Client. + +4. The Controller uses the exterior Cookie files for the following purposes: 1. To collect general and anonymous statistic data using the analytics tools: \ + Google Analytics (the cookies controller is Google Inc. based in USA), Yandex Metrica (the cookies controller is Yandex LLC based in USA or Yandex Oy Limited Company based in Finland). 2. To use the interactive features to popularize the website, on social \ + media platforms such as Facebook, Instagram, Twitter, Linkedin (the cookies Controller is Facebook Inc. based in USA or Facebook Ireland based in Ireland, Twitter Inc. Based in USA or Twitter International Company based in Ireland, LinkedIn Ireland Unlimited Company). +5. Google LLC, Facebook Inc, Twitter Inc., Rocket Science Group LLC, Yandex LLC, FIBERY LIMITED are entities established and operating from outside the EU USA and they rely on the EU standard contractual clauses, to ensure proper data protection measures matching those established by GDPR. +6. The Cookie files adjust and optimize the website and it’s offer towards the Customer’s wishes and needs through actions such as creating statistics of the website’s unique hits and providing protection to the site’s Users. Cookie files are also necessary to maintain the User’s session after he leaves the website. +7. The Client may at all times alter his Cookie files settings, he may also block the possibility to store and collect the Cookie files. +8. Blocking the Cookie files storage ability or entering other changes in the Cookie files settings on the Clients DTE may harm or worsen and sometimes even prevent to use the website’s services, including placing an order. +9. The Client who does not want the Cookie files to be used in all the above mentioned purposes may erase them manually at all times. To get to know the proper and whole instruction The Client is advised to enter the browser’s producer’s website, which the Client currently uses. More information regarding the Cookie files can be found in the help menu of every internet browser. For example, Cookie files operating browsers include Internet Explorer, Mozilla Firefox, Google Chrome, Opera. +10. The Controller may enable storing and collecting information using the above mentioned technology to outside entities, such as advertisement providers, or analytics providers directly on his website. The Cookie files stored that way are subject to those entities established privacy policies. +11. Some outside entities operating within the website enable Users to revoke their consent to store and collect data regarding advertising purposes based on the Client’s activity. More information regarding this topic, as well as the choosing rights, can be obtained from the www.youronlinechoices.com website. + +## The Controller’s and User’s rights and obligations + +1. The Controller has the right as well as a statutory obligation to transfer selected or all information regarding the website’s Clients to the public domain authorities or third parties, who submit such a demand to provide information in accordance with the applicable Polish legal system laws. +2. The Controller does not entrust data processing nor shares The Clients collected personal data to outside unrelated parties without their permission, unless: +3. The Controller uses the outside parties help to provide his services, as \ + long as those outside parties are not authorized to independently use the \ + personal data processed in the name of the website and all of their \ + actions are in accordance with the hereby given Privacy Policy and Terms and \ + Regulations. +4. The Controller maintains the right to share the data with public authorities \ + while they conduct an ongoing investigation or procedure regarding a possible \ + breach of law or fighting the possible breaches of the website’s Terms \ + and Regulations. +5. The Client gives The Controller his consent towards processing his personal data in order to execute the services provided via The website, by clicking checkboxes available on the website as an interactive form, such as the register form, the order form, the newsletter form. +6. By accepting the voluntary statements (additional check boxes) may give his permission to process his personal data for additional causes. +7. The Client’s voluntary consents to receive commercial information may be withdrawn at any time. +8. Personal data collect with purposes set forth and established by this Privacy Policy will be stored on the Controller’s server for the time period necessary to complete the order and execute the on line sales agreement. Personal data collect with purposes set forth and established by this Privacy Policy will be stored on the Controller’s server for the time period necessary to complete the order and execute the on line sales agreement. In the case when the processing of personal data is consent (the article 6 section 1 letter a) of GDPR), the User's personal data is processed by the Controller until the consent is revoked. After the consent is revoked, personal data are processed for a period of time corresponding to the period of limitation of claims that may be raised by the Controller that may be raised against him. Unless a special provision provides otherwise, the limitation period is six years, and for claims for periodic benefits and claims related to running a business - three years (Polish Civil Code). In the case when personal data are processing the performance of the contract (the article 6 section 1 letter b) of GDPR), the User's personal data is processed by the Controller as long as it is necessary to perform the contract. After this time for a period corresponding to the period of limitation of claims, unless a special provision provides otherwise, the limitation period is six years, and for claims for periodic benefits and claims related to running a business - three years (Polish Civil Code). \ + Furthermore, despite the request to erase personal data, in connection with the objection or withdrawal of consent, the Controller may retain certain personal data to the extent that processing is necessary to establish, assert or defend claims, as well as to fulfill a legal obligation requiring processing on under EU law or the law of the Member State to which the Controller is subject. This applies in particular to personal data including: name, surname, e-mail address, which data are kept for the purpose of considering complaints and claims related to the use of the Controller's services, or additionally the address of residence / correspondence address, order number, which data are are kept for the purpose of considering complaints and claims related to concluded sales contracts or the provision of services + +## The User’s rights on the grounds of GDPR + +1. Right of access by the data subject – Article 15 GDPR + + The Client has the right to access his personal data collected and stored by the Controller at any time. This right comprises of the possibility to: + + 1. Access to the own data subject. + + The data subject has the right to request the Controller to confirm if he is processing his or her personal data. If the processing of personal data takes place, the person has the right to request access to his personal data. + + 2. Receive the information + + The data subject has the right to get information about: the purposes of the processing; the categories of personal data concerned; the recipients or categories of recipient to whom the personal data have been or will be disclosed; how long the personal data will be processing; the legal rules established by GDPR; the right to lodge a complaint with a supervisory authority; source of the personal data; the existence of automated decision-making including profiling. \ + If the personal data will be transferring to a third country the data subject has the right to be informed of the appropriate safeguards. + + 3. Receive the copy the personal data. + +2. Right to rectification – Article 16 GDPR + + 1. The data subject has the right to demand from the Controller immediately corrects his or her personal data if there are wrong. Taking cognisance of the purposes of the processing the Client has right to refill incomplete his or her personal data, including by means of providing a supplementary statement by an email hello@kontur.io or contact address. + +3. Right to erasure ("right to be forgotten") - Article 17 GDPR. \ + \ + The data subject has the right to demand from the Controller to erase his or her personal data, especially when: + + 1. The personal data are no longer necessary for the purposes for which it was collected or processed; + 2. The Client withdraw his or her permission for keeping the personal data in the purposes for which is was collected or processed; + 3. The Client raise an objection to use his or her personal data for the marketing purpose; + 4. The personal data have been unlawfully processed; + 5. The personal data must been erase if there is a legal duty in Union or in Member State law to which the Controller is subject; + 6. The personal data have been gather to the offer of information society services. + +4. Right to restriction of processing – Article 18 GDPR \ + \ + The data subject has the right to demand from The Controller to limit the processing of his or her personal data, especially when: + + 1. dispute the correctness of his or her personal data; + 2. data processing is unlawful, and instead of deleting the data, the Client will request the restriction of their processing; + 3. personal data are no longer necessary for the purposes for which they were collected or used, but they are needed by the Client to establish, assert or defend claims; + 4. the Client objected to the use of his data - then the restriction takes place for the time needed to consider whether - due to the special situation - the protection of the interests, rights and freedoms of the User outweighs the interests that the Controller performs when processing the User's personal data. + +Erasing personal data or ceasing to process it by The Controller may cause the services to no longer be able to provide, or may result in a grave restriction of the services provided by the website. + +5. Right to data portability – Article 20 GDPR + + The personal subject has the right to receive his or her personal data, which he or she provided to the Controller. The Client has a right to send it to another personal data Controller of his or her choice. + + The personal subject can demand the Controller sends his or her personal data to another, where technically feasible. In this case the Controller will send personal data as file .csv, which is a commonly used and machine-readable format to transmit the personal data. + +6. Automated individual decision-making, including profiling – Article 22 GDPR + + The data subject has the right to raise an objection to processing his or her personal data, including profiling, if the Controller processes his data based on a legitimate interest, e.g. marketing of products and services, keeping statistics on the use of individual website functionalities and facilitating the use of the website, as well as satisfaction surveys. The right to raise an objection must to be relevant with special situation of Client. + + If the user sends a resignation in the form of an email from receiving marketing messages regarding products or services, this will be tantamount to the user's objection to the processing of personal data, including profiling for marketing purposes. + + If the resignation will be legitimate and the Controller will have no other legal basis to process personal data, the personal data will be erasing, within the scope of objection. + +7. The data subject has a right to lodge a complaint to The President of the Personal Data Protection Office when his or her personal data will be breaching by Controller or on the grounds of GDPR, appropriate for the place of residence of the data subject. +8. The address for Polish Clients it is: Urząd Ochrony Danych Osobowych ul. Stawki 2, 00-193 Warszawa, email: kancelaria@uodo.gov.pl . +9. In the purpose of executing his rights The Client may send a proper statement to The Controller’s contact address or via e mail. In the case that the data subject submits claims resulting from the indicated rights, the Controller fulfills the request or refuses to comply with it immediately, but not later than within one month after receiving it. + + The Controller provides information on action taken on data subject request without undue delay and in any event within one month of receipt of the request. That period may be extended by two further months where necessary, taking into account the complexity of case and number of the requests. The Controller informs data subject about extension within one month of receipt of the request with the reasons for the delay. The information can be send by email. + +## Privacy Policy changes + +1. The Controller’s offer may expand in the future. This means The Controller will be obliged or authorized to enter those changes into the Privacy Policy. +2. New Privacy Policy versions will occur on the website with a proper notification attached. +3. Every change to The Privacy Policy will be binding from the day it’s being published on the website with proper notification. All changes will be properly announced and marked/featured with a one month notice from the changes implementation within The Privacy Policy. + +In case of further questions surrounding The hereby given Privacy Policy, please contact The Controller using this email: hello@kontur.io or contact address. + +`; + +export function PrivacyPage() { + return ( +
+ {md} +
+ ); +} diff --git a/vite.config.ts b/vite.config.ts index d6c3ea28a..77a040990 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -9,7 +9,6 @@ import viteBuildInfoPlugin from './scripts/build-info-plugin'; import { selectConfig, useConfig } from './scripts/select-config.mjs'; // @ts-ignore import { buildScheme, validateConfig } from './scripts/build-config-scheme.mjs'; - import postcssConfig from './postcss.config'; import { proxyConfig } from './vite.proxy';