diff --git a/README.md b/README.md index 04a886c5b932c5a88747c8f377e409d8f2da624c..eeaab28a2f23e976ce37fff5fd19a28b7bc14072 100644 --- a/README.md +++ b/README.md @@ -84,7 +84,8 @@ npm -i @types/react-simple-maps yarn add react-grid-gallery yarn add react-select - +yarn add react-pdf +npm install --save react-grid-gallery Argument of type 'ImageExtendedRow<T>[]' is not assignable to parameter of type 'ConcatArray<never>[]'. diff --git a/package-lock.json b/package-lock.json index 2f3f843cdda97a7d841206476d95bfbf088b2c00..a3b7d12d9d402774fed2371914e973ddaa0de261 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17,7 +17,10 @@ "react": "^18.2.0", "react-bootstrap": "^2.10.2", "react-dom": "^18.2.0", + "react-grid-gallery": "^1.0.1", + "react-pdf": "^9.0.0", "react-router-dom": "^6.23.0", + "react-select": "^5.8.0", "react-simple-maps": "^3.0.0" }, "devDependencies": { @@ -864,6 +867,26 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, + "node_modules/@mapbox/node-pre-gyp": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz", + "integrity": "sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==", + "optional": true, + "dependencies": { + "detect-libc": "^2.0.0", + "https-proxy-agent": "^5.0.0", + "make-dir": "^3.1.0", + "node-fetch": "^2.6.7", + "nopt": "^5.0.0", + "npmlog": "^5.0.1", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.11" + }, + "bin": { + "node-pre-gyp": "bin/node-pre-gyp" + } + }, "node_modules/@mui/base": { "version": "5.0.0-beta.40", "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-beta.40.tgz", @@ -1716,6 +1739,12 @@ "vite": "^4.2.0 || ^5.0.0" } }, + "node_modules/abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "optional": true + }, "node_modules/acorn": { "version": "8.11.3", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", @@ -1739,6 +1768,18 @@ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "optional": true, + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, "node_modules/ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", @@ -1760,7 +1801,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=8" @@ -1782,6 +1823,26 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/aproba": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", + "optional": true + }, + "node_modules/are-we-there-yet": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", + "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", + "deprecated": "This package is no longer supported.", + "optional": true, + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", @@ -1817,7 +1878,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/bootstrap": { @@ -1843,7 +1904,7 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", @@ -1925,6 +1986,21 @@ ], "license": "CC-BY-4.0" }, + "node_modules/canvas": { + "version": "2.11.2", + "resolved": "https://registry.npmjs.org/canvas/-/canvas-2.11.2.tgz", + "integrity": "sha512-ItanGBMrmRV7Py2Z+Xhs7cT+FNt5K0vPL4p9EZ/UX/Mu7hFbkxSjKF2KVtPwX7UYWp7dRKnrTvReflgrItJbdw==", + "hasInstallScript": true, + "optional": true, + "dependencies": { + "@mapbox/node-pre-gyp": "^1.0.0", + "nan": "^2.17.0", + "simple-get": "^3.0.3" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -1942,6 +2018,15 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, + "node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "optional": true, + "engines": { + "node": ">=10" + } + }, "node_modules/classnames": { "version": "2.5.1", "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.5.1.tgz", @@ -1976,6 +2061,15 @@ "dev": true, "license": "MIT" }, + "node_modules/color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "optional": true, + "bin": { + "color-support": "bin.js" + } + }, "node_modules/commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", @@ -1985,9 +2079,15 @@ "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true, + "devOptional": true, "license": "MIT" }, + "node_modules/console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", + "optional": true + }, "node_modules/convert-source-map": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", @@ -2120,7 +2220,7 @@ "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "ms": "2.1.2" @@ -2134,6 +2234,18 @@ } } }, + "node_modules/decompress-response": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz", + "integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==", + "optional": true, + "dependencies": { + "mimic-response": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", @@ -2141,6 +2253,12 @@ "dev": true, "license": "MIT" }, + "node_modules/delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", + "optional": true + }, "node_modules/dequal": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", @@ -2150,6 +2268,15 @@ "node": ">=6" } }, + "node_modules/detect-libc": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", + "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==", + "optional": true, + "engines": { + "node": ">=8" + } + }, "node_modules/dir-glob": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", @@ -2193,6 +2320,12 @@ "dev": true, "license": "ISC" }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "optional": true + }, "node_modules/error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -2565,11 +2698,35 @@ "dev": true, "license": "ISC" }, + "node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "optional": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/fs-minipass/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "optional": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true, + "devOptional": true, "license": "ISC" }, "node_modules/function-bind": { @@ -2580,6 +2737,27 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/gauge": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", + "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", + "deprecated": "This package is no longer supported.", + "optional": true, + "dependencies": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.2", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.1", + "object-assign": "^4.1.1", + "signal-exit": "^3.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.2" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", @@ -2594,7 +2772,7 @@ "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, + "devOptional": true, "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", @@ -2678,6 +2856,12 @@ "node": ">=8" } }, + "node_modules/has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", + "optional": true + }, "node_modules/hasown": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", @@ -2697,6 +2881,19 @@ "react-is": "^16.7.0" } }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "optional": true, + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/ignore": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", @@ -2737,7 +2934,7 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, + "devOptional": true, "license": "ISC", "dependencies": { "once": "^1.3.0", @@ -2748,7 +2945,7 @@ "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true, + "devOptional": true, "license": "ISC" }, "node_modules/internmap": { @@ -2794,6 +2991,15 @@ "node": ">=0.10.0" } }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "optional": true, + "engines": { + "node": ">=8" + } + }, "node_modules/is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", @@ -2972,7 +3178,7 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, + "devOptional": true, "license": "ISC", "dependencies": { "yallist": "^4.0.0" @@ -2981,6 +3187,67 @@ "node": ">=10" } }, + "node_modules/make-cancellable-promise": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/make-cancellable-promise/-/make-cancellable-promise-1.3.2.tgz", + "integrity": "sha512-GCXh3bq/WuMbS+Ky4JBPW1hYTOU+znU+Q5m9Pu+pI8EoUqIHk9+tviOKC6/qhHh8C4/As3tzJ69IF32kdz85ww==", + "funding": { + "url": "https://github.com/wojtekmaj/make-cancellable-promise?sponsor=1" + } + }, + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "optional": true, + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "optional": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/make-event-props": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/make-event-props/-/make-event-props-1.6.2.tgz", + "integrity": "sha512-iDwf7mA03WPiR8QxvcVHmVWEPfMY1RZXerDVNCRYW7dUr2ppH3J58Rwb39/WG39yTZdRSxr3x+2v22tvI0VEvA==", + "funding": { + "url": "https://github.com/wojtekmaj/make-event-props?sponsor=1" + } + }, + "node_modules/memoize-one": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-6.0.0.tgz", + "integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==" + }, + "node_modules/merge-refs": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/merge-refs/-/merge-refs-1.3.0.tgz", + "integrity": "sha512-nqXPXbso+1dcKDpPCXvwZyJILz+vSLqGGOnDrYHQYE+B8n9JTCekVLC65AfCpR4ggVyA/45Y0iR9LDyS2iI+zA==", + "funding": { + "url": "https://github.com/wojtekmaj/merge-refs?sponsor=1" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, "node_modules/merge2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", @@ -3005,11 +3272,23 @@ "node": ">=8.6" } }, + "node_modules/mimic-response": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz", + "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==", + "optional": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, + "devOptional": true, "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" @@ -3018,13 +3297,65 @@ "node": "*" } }, + "node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "optional": true, + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minizlib/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "optional": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "optional": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true, + "devOptional": true, "license": "MIT" }, + "node_modules/nan": { + "version": "2.20.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.20.0.tgz", + "integrity": "sha512-bk3gXBZDGILuuo/6sKtr0DQmSThYHLtNCdSdXk9YkxD/jK6X2vmCyyXBBxyqZ4XcnzTyYEAThfX3DCEnLf6igw==", + "optional": true + }, "node_modules/nanoid": { "version": "3.3.7", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", @@ -3051,6 +3382,26 @@ "dev": true, "license": "MIT" }, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "optional": true, + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, "node_modules/node-releases": { "version": "2.0.14", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", @@ -3058,6 +3409,34 @@ "dev": true, "license": "MIT" }, + "node_modules/nopt": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "optional": true, + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/npmlog": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", + "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", + "deprecated": "This package is no longer supported.", + "optional": true, + "dependencies": { + "are-we-there-yet": "^2.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^3.0.0", + "set-blocking": "^2.0.0" + } + }, "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -3071,7 +3450,7 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, + "devOptional": true, "license": "ISC", "dependencies": { "wrappy": "1" @@ -3170,7 +3549,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -3200,6 +3579,27 @@ "node": ">=8" } }, + "node_modules/path2d": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/path2d/-/path2d-0.2.1.tgz", + "integrity": "sha512-Fl2z/BHvkTNvkuBzYTpTuirHZg6wW9z8+4SND/3mDTEcYbbNKWAy21dz9D3ePNNwrrK8pqZO5vLPZ1hLF6T7XA==", + "optional": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/pdfjs-dist": { + "version": "4.3.136", + "resolved": "https://registry.npmjs.org/pdfjs-dist/-/pdfjs-dist-4.3.136.tgz", + "integrity": "sha512-gzfnt1qc4yA+U46golPGYtU4WM2ssqP2MvFjKga8GEKOrEnzRPrA/9jogLLPYHiA3sGBPJ+p7BdAq+ytmw3jEg==", + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "canvas": "^2.11.2", + "path2d": "^0.2.0" + } + }, "node_modules/picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", @@ -3384,6 +3784,14 @@ "react": "^18.3.1" } }, + "node_modules/react-grid-gallery": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/react-grid-gallery/-/react-grid-gallery-1.0.1.tgz", + "integrity": "sha512-+fVd6fH9tm0W+UMgzRHET/gmzSs2/l2sGOuELLaHXMto6UhuZdscj9ILHOYe7hn0GBRUJiczMllsEs7OJz9uPA==", + "peerDependencies": { + "react": ">=16.14.0" + } + }, "node_modules/react-is": { "version": "16.13.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", @@ -3396,6 +3804,34 @@ "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==", "license": "MIT" }, + "node_modules/react-pdf": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/react-pdf/-/react-pdf-9.0.0.tgz", + "integrity": "sha512-J+pza8R2p9oNEOJOHIQJI4o5rFK7ji7bBl2IvsHvz1OOyphvuzVDo5tOJwWAFAbxYauCH3Kt8jOvcMJUOpxYZQ==", + "dependencies": { + "clsx": "^2.0.0", + "dequal": "^2.0.3", + "make-cancellable-promise": "^1.3.1", + "make-event-props": "^1.6.0", + "merge-refs": "^1.3.0", + "pdfjs-dist": "4.3.136", + "tiny-invariant": "^1.0.0", + "warning": "^4.0.0" + }, + "funding": { + "url": "https://github.com/wojtekmaj/react-pdf?sponsor=1" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, "node_modules/react-refresh": { "version": "0.14.2", "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.2.tgz", @@ -3438,6 +3874,26 @@ "react-dom": ">=16.8" } }, + "node_modules/react-select": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/react-select/-/react-select-5.8.0.tgz", + "integrity": "sha512-TfjLDo58XrhP6VG5M/Mi56Us0Yt8X7xD6cDybC7yoRMUNm7BGO7qk8J0TLQOua/prb8vUOtsfnXZwfm30HGsAA==", + "dependencies": { + "@babel/runtime": "^7.12.0", + "@emotion/cache": "^11.4.0", + "@emotion/react": "^11.8.1", + "@floating-ui/dom": "^1.0.1", + "@types/react-transition-group": "^4.4.0", + "memoize-one": "^6.0.0", + "prop-types": "^15.6.0", + "react-transition-group": "^4.3.0", + "use-isomorphic-layout-effect": "^1.1.2" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, "node_modules/react-simple-maps": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/react-simple-maps/-/react-simple-maps-3.0.0.tgz", @@ -3470,6 +3926,20 @@ "react-dom": ">=16.6.0" } }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "optional": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/regenerator-runtime": { "version": "0.14.1", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", @@ -3516,7 +3986,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, + "devOptional": true, "license": "ISC", "dependencies": { "glob": "^7.1.3" @@ -3588,6 +4058,26 @@ "queue-microtask": "^1.2.2" } }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "optional": true + }, "node_modules/scheduler": { "version": "0.23.2", "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", @@ -3601,7 +4091,7 @@ "version": "7.6.0", "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", - "dev": true, + "devOptional": true, "license": "ISC", "dependencies": { "lru-cache": "^6.0.0" @@ -3613,6 +4103,12 @@ "node": ">=10" } }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", + "optional": true + }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -3636,6 +4132,43 @@ "node": ">=8" } }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "optional": true + }, + "node_modules/simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "optional": true + }, + "node_modules/simple-get": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.1.tgz", + "integrity": "sha512-CQ5LTKGfCpvE1K0n2us+kuMPbk/q0EKl82s4aheV9oXjFEz6W/Y7oQFVJuU6QG77hRT4Ghb5RURteF5vnWjupA==", + "optional": true, + "dependencies": { + "decompress-response": "^4.2.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, "node_modules/slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", @@ -3664,11 +4197,34 @@ "node": ">=0.10.0" } }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "optional": true, + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "optional": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" @@ -3719,6 +4275,23 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/tar": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", + "optional": true, + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", @@ -3726,6 +4299,11 @@ "dev": true, "license": "MIT" }, + "node_modules/tiny-invariant": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz", + "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==" + }, "node_modules/to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", @@ -3760,6 +4338,12 @@ "topoquantize": "bin/topoquantize" } }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "optional": true + }, "node_modules/ts-api-utils": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz", @@ -3882,6 +4466,25 @@ "punycode": "^2.1.0" } }, + "node_modules/use-isomorphic-layout-effect": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.2.tgz", + "integrity": "sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "optional": true + }, "node_modules/vite": { "version": "5.2.11", "resolved": "https://registry.npmjs.org/vite/-/vite-5.2.11.tgz", @@ -3947,6 +4550,22 @@ "loose-envify": "^1.0.0" } }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "optional": true + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "optional": true, + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -3963,6 +4582,15 @@ "node": ">= 8" } }, + "node_modules/wide-align": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "optional": true, + "dependencies": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, "node_modules/word-wrap": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", @@ -3977,14 +4605,14 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true, + "devOptional": true, "license": "ISC" }, "node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true, + "devOptional": true, "license": "ISC" }, "node_modules/yaml": { diff --git a/package.json b/package.json index 8b6979d36a04810cc62781ff55649056fc74667f..4738175a5d7bdac85c161eb309ffab6f6c9159df 100644 --- a/package.json +++ b/package.json @@ -16,10 +16,11 @@ "@mui/lab": "^5.0.0-alpha.170", "@mui/material": "^5.15.21", "bootstrap": "^5.3.3", - "react": "^18.2.0", + "react": "^16.13.0", "react-bootstrap": "^2.10.2", - "react-dom": "^18.2.0", + "react-dom": "^16.13.0", "react-grid-gallery": "^1.0.1", + "react-pdf": "^9.0.0", "react-router-dom": "^6.23.0", "react-select": "^5.8.0", "react-simple-maps": "^3.0.0" diff --git a/src/components/pdfs.tsx b/src/components/pdfs.tsx index d046061868e8a2f630af585307a48cd57ab8abd3..b0c8dd29fc2e3cd701224f1c7a1db2c1b6876b94 100644 --- a/src/components/pdfs.tsx +++ b/src/components/pdfs.tsx @@ -1,7 +1,6 @@ -import 'react-pdf/dist/esm/Page/AnnotationLayer.css'; -import 'react-pdf/dist/esm/Page/TextLayer.css'; import { DownloadLink } from './DownloadButton'; + export function PDF({link, name}: {link: string, name:string}){ return( <div className='row align-items-center'> diff --git a/src/components/photo-grid.tsx b/src/components/photo-grid.tsx index 3b6e9f806f9e23781e91a1db1e130c03ebaf8b96..22613e0b1f1062154a00e8cc640e4442fbb122b8 100644 --- a/src/components/photo-grid.tsx +++ b/src/components/photo-grid.tsx @@ -1,6 +1,6 @@ /* */ -import { Gallery } from './react-grid-gallery/dist/react-grid-gallery'; -import { ThumbnailImageProps } from './react-grid-gallery/dist/react-grid-gallery'; + +import { Gallery } from 'react-grid-gallery'; const images = [ {src:"https://static.igem.wiki/teams/5247/photos/meetup/badges.jpeg", width: 320, height: 212}, {src:"https://static.igem.wiki/teams/5247/photos/meetup/joern.jpeg", width: 320, height: 212}, @@ -42,16 +42,9 @@ export default function BFHGallery(){ - <Gallery images={images} enableImageSelection={false} thumbnailImageComponent={ImageComponent}/> + <Gallery images={images} enableImageSelection={false}/> </div> ) } -const ImageComponent = (props: ThumbnailImageProps) => { - - return ( - <div id={props.imageProps.alt}> <img {...props.imageProps} /> </div> - ) - -}; diff --git a/src/components/react-grid-gallery/LICENSE b/src/components/react-grid-gallery/LICENSE deleted file mode 100755 index f908db52914afc48ceb9500ef1e88099ee2034b9..0000000000000000000000000000000000000000 --- a/src/components/react-grid-gallery/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2016-2018 Ben Howell - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/src/components/react-grid-gallery/README.md b/src/components/react-grid-gallery/README.md deleted file mode 100755 index 446725d82948e37fe622c50cac72121197b10cfb..0000000000000000000000000000000000000000 --- a/src/components/react-grid-gallery/README.md +++ /dev/null @@ -1,162 +0,0 @@ -# React Grid Gallery - -Justified image gallery component for [React](http://facebook.github.io/react/) inspired by [Google Photos](https://photos.google.com/). - -### :tada: v1.0.0 is out! - -There are breaking changes with v0.5.x, check out the [migration guide](https://github.com/benhowell/react-grid-gallery/blob/master/UPGRADE_GUIDE.md) to learn more. Documentation for v0.5.x is [here](https://github.com/benhowell/react-grid-gallery/tree/v0.5.6). - -## Live Demo & Examples - -https://benhowell.github.io/react-grid-gallery/ -* [Image Selection](https://benhowell.github.io/react-grid-gallery/examples/selection) -* [Custom Overlay](https://benhowell.github.io/react-grid-gallery/examples/custom-overlay) -* [Thumbnail Captions](https://benhowell.github.io/react-grid-gallery/examples/captions) -* [Custom Image Component](https://benhowell.github.io/react-grid-gallery/examples/custom-image-component) -* [Lightbox integration `react-image-lightbox`](https://benhowell.github.io/react-grid-gallery/examples/with-react-image-lightbox) -* [Lightbox integration `yet-another-react-lightbox`](https://benhowell.github.io/react-grid-gallery/examples/with-yet-another-react-lightbox) - - -## Installation - -Using [npm](https://www.npmjs.com/): - -```shell -npm install --save react-grid-gallery -``` - -## Quick Start - -```jsx -import { Gallery } from "react-grid-gallery"; - -const images = [ - { - src: "https://c2.staticflickr.com/9/8817/28973449265_07e3aa5d2e_b.jpg", - width: 320, - height: 174, - isSelected: true, - caption: "After Rain (Jeshu John - designerspics.com)", - }, - { - src: "https://c2.staticflickr.com/9/8356/28897120681_3b2c0f43e0_b.jpg", - width: 320, - height: 212, - tags: [ - { value: "Ocean", title: "Ocean" }, - { value: "People", title: "People" }, - ], - alt: "Boats (Jeshu John - designerspics.com)", - }, - { - src: "https://c4.staticflickr.com/9/8887/28897124891_98c4fdd82b_b.jpg", - width: 320, - height: 212, - }, -]; - -<Gallery images={images} /> -``` - -## Image Options - -| Property | Type | Description | -|:-----------------|:------------------------|:-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| src | string | Required. A string referring to any valid image resource (file, url, etc). | -| width | number | Required. Width of the image. | -| height | number | Required. Height of the image. | -| nano | string:base64 | Optional. Thumbnail Base64 image will be injected to background under the main image. This provides a base64, 4x4 generated image whilst the image is being loaded. | -| alt | string | Optional. Image alt attribute. | -| tags | array | Optional. An array of objects containing tag attributes (value, title and key if value is element). e.g. `{value: "foo", title: "bar"}` or `{value: <a href={tag.url}>{tag.name}</a>, title: tag.title, key: tag.key}` | -| isSelected | bool | Optional. The selected state of the image. | -| caption | string | ReactNode | Optional. Image caption. | -| customOverlay | element | Optional. A custom element to be rendered as a thumbnail overlay on hover. | -| thumbnailCaption | string | ReactNode | Optional. A thumbnail caption shown below thumbnail. | -| orientation | number | Optional. Orientation of the image. Many newer digital cameras (both dSLR and Point & Shoot digicams) have a built-in orientation sensor. The output of this sensor is used to set the EXIF orientation flag in the image file's metatdata to reflect the positioning of the camera with respect to the ground (See [EXIF Orientation Page](http://jpegclub.org/exif_orientation.html) for more info). | - -## Gallery Options - -| Property | Type | Description | -|:------------------------|:--------------------------|:---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| images | array | Required. An array of objects containing image properties (see Image Options above). | -| id | string | Optional, default `ReactGridGallery`. `id` attribute for `<Gallery>` tag. This prop may be useful for those who wish to discriminate between multiple galleries. | -| enableImageSelection | bool | Optional, default `true`. Allow images to be selectable. Setting this option to `false` whilst supplying images with `isSelected: true` will result in those images being permanently selected. | -| onSelect | func | Optional. Function to execute when an image is selected. Optional args: `index` (index of selected image in images array), `image` (the selected image), `event`. This function is only executable when `enableImageSelection: true`. | -| rowHeight | number | Optional, default `180`. The height of each row in the gallery. | -| maxRows | number | Optional. The maximum number of rows to show in the gallery. | -| margin | number | Optional, default `2`. The margin around each image in the gallery. | -| onClick | func | Optional. Function to execute when gallery image clicked. Optional args: `index` (index of selected image in images array), `image` (the clicked image), event (the click event). | -| tagStyle | func | CSSProperties | Optional. Style or function that returns style to pass to tag elements. Optional args: `item` (the image item in `images`). Overrides internal tag style. | -| tileViewportStyle | func | CSSProperties | Optional. Style or function to style the image tile viewport. Optional args: `item` (the image item in `images`). Overrides internal tileViewportStyle function. | -| thumbnailStyle | func | CSSProperties | Optional. Style or function to style the image thumbnail. Optional args: `item` (the image item in `images`). Overrides internal thumbnailStyle function. | -| thumbnailImageComponent | React component | Optional. Substitute in a React component that would get passed `imageProps` (the props that would have been passed to the `<img>` tag) and `item` (the original item in `images`) to be used to render thumbnails; useful for lazy loading. | -| defaultContainerWidth | number | Optional. Set default width for the container. This option is useful during server-side rendering when we want to generate an initial markup before we can detect the actual container width. | - - -### General Notes - - * [react-grid-gallery](https://github.com/benhowell/react-grid-gallery) is built for modern browsers and therefore IE support is limited to IE 11 and newer. - - * As the inspiration for this component comes from [Google Photos](https://photos.google.com/), very small thumbnails may not be the most aesthetically pleasing due to the border size applied when selected. A sensible rowHeight default of 180px has been chosen, but rowHeights down to 100px are still reasonable. - - * Gallery width is determined by the containing element. Therefore your containing element must have a width (%, em, px, whatever) **_before_** the gallery is loaded! - - * If you don't know your `width` and `height` values, you can find these out using any number of [javascript hacks](http://stackoverflow.com/a/1944298), bearing in mind the load penalty associated with these methods. - - -### Contributing -All contributions to [react-grid-gallery](https://github.com/benhowell/react-grid-gallery) are very welcome. Feature requests, issue reports and pull requests are greatly appreciated. Please follow the [contribution guidelines](https://github.com/benhowell/react-grid-gallery/blob/master/.github/contributing.md) - - -### License -React Grid Gallery is free to use for personal and commercial projects under the [MIT License](https://github.com/benhowell/react-grid-gallery/blob/master/LICENSE). Attribution is not required, but appreciated. - - -### Acknowledgements - * [itoldya](https://github.com/itoldya) for the large overhaul of the code base to bring the library to its v1 release. - - * Visual design inspired by [Google Photos](https://photos.google.com/). - - * Thumbnail viewport implementation inspired by [GPlusGallery](http://fmaul.de/gallery-grid-example/) by Florian Maul. - - * Backend lightbox functionality via [React Images](https://github.com/jossmac/react-images) by [jossmac](https://github.com/jossmac). - - * The following gallery functions were obtained from the [React Images example](https://github.com/jossmac/react-images/blob/b85bd83ae651d0fd373bb495ac88670ee4dfadab/examples/src/components/Gallery.js) demo: closeLightbox, gotoNext, gotoPrevious, handleClickImage, openLightbox. - - * [cust0dian](https://github.com/cust0dian) for critical bug fixes in [PR 6](https://github.com/benhowell/react-grid-gallery/pull/6) and [PR 7](https://github.com/benhowell/react-grid-gallery/pull/7). - - * [ValYouW](https://github.com/ValYouW) for lightboxWillOpen and lightBoxWillClose functionality [PR 20](https://github.com/benhowell/react-grid-gallery/pull/20) and customOverlay option: [PR 22](https://github.com/benhowell/react-grid-gallery/pull/22). - - * [danalloway](https://github.com/danalloway) for theme pass-through prop [PR 27](https://github.com/benhowell/react-grid-gallery/pull/27) - - * [SimeonC](https://github.com/SimeonC) for _update thumbnails when maxRows changes_ [PR 35](https://github.com/benhowell/react-grid-gallery/pull/35) and _resize on scrollbar presence change_ [PR 40](https://github.com/benhowell/react-grid-gallery/pull/40) - - * [jakub-tucek](https://github.com/jakub-tucek) for thumbnailCaption functionality [PR 42](https://github.com/benhowell/react-grid-gallery/pull/42) - - * [mis94](https://github.com/mis94) for EXIF image rotation functionality [PR 67](https://github.com/benhowell/react-grid-gallery/pull/67) - - * [forforf](https://github.com/forforf) for contentWindow check [PR 77](https://github.com/benhowell/react-grid-gallery/pull/77) - -* [ScottMRafferty](https://github.com/ScottMRafferty) for preloadNextImage not propagating to Lightbox fix [PR 78](https://github.com/benhowell/react-grid-gallery/pull/78) - -* [Approximator](https://github.com/approximator) for currentImageWillChange (Function to execute before lightbox image change) [PR 97](https://github.com/benhowell/react-grid-gallery/pull/97). - -* [Vadimuz](https://github.com/vadimuz) for nano image props and functionality [PR 101](https://github.com/benhowell/react-grid-gallery/pull/101). - -* [pxpeterxu](https://github.com/pxpeterxu) for adding functionality to inject a custom thumbnail image component (for lazy-loading) [PR 104](https://github.com/benhowell/react-grid-gallery/pull/104). - -* [lryta](https://github.com/lryta) for fixing crash when this.props.images.length - 1 < this.state.currentImage [PR #111](https://github.com/benhowell/react-grid-gallery/pull/111). - -* [jimishf](https://github.com/JimishF) for lightBoxProps option to assign any prop directly to lightbox [PR #121](https://github.com/benhowell/react-grid-gallery/pull/121). - -* [kym6464](https://github.com/kym6464) for replacing deprecated defaultProps and for clearing of rollup cache on build [PR #298](https://github.com/benhowell/react-grid-gallery/pull/298) - - - * Demo stock photos: - * [Jeshu John - designerspics.com](https://designerspics.com) - * [Gratisography](https://gratisography.com) - * [Tom Eversley - isorepublic.com](https://isorepublic.com) - * [Jan Vasek - jeshoots.com](https://unsplash.com/) - * [moveast.me](https://moveast.me) - * [è´èŽ‰å„¿ NG. - unsplash.com](https://unsplash.com/) - * [Matthew Wiebe. - unsplash.com](https://unsplash.com/) diff --git a/src/components/react-grid-gallery/dist/react-grid-gallery.cjs.js b/src/components/react-grid-gallery/dist/react-grid-gallery.cjs.js deleted file mode 100644 index aab8a1587e132a9473f2f8eae01a3e252e9d4832..0000000000000000000000000000000000000000 --- a/src/components/react-grid-gallery/dist/react-grid-gallery.cjs.js +++ /dev/null @@ -1,317 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, '__esModule', { value: true }); - -var jsxRuntime = require('react/jsx-runtime'); -var react = require('react'); - -const getStyle = (styleProp, fallback, context) => { - if (typeof styleProp === "function") { - return styleProp(context); - } - if (typeof styleProp === "object") { - return styleProp; - } - return fallback(context); -}; -const rotationTransformMap = { - 3: "rotate(180deg)", - 2: "rotateY(180deg)", - 4: "rotate(180deg) rotateY(180deg)", - 5: "rotate(270deg) rotateY(180deg)", - 6: "rotate(90deg)", - 7: "rotate(90deg) rotateY(180deg)", - 8: "rotate(270deg)", -}; -const SELECTION_MARGIN = 16; -const gallery = { - display: "flex", - flexWrap: "wrap", -}; -const thumbnail = ({ item }) => { - const rotationTransformValue = rotationTransformMap[item.orientation]; - const style = { - cursor: "pointer", - maxWidth: "none", - width: item.scaledWidth, - height: item.scaledHeight, - marginLeft: item.marginLeft, - marginTop: 0, - transform: rotationTransformValue, - }; - if (item.isSelected) { - const ratio = item.scaledWidth / item.scaledHeight; - const viewportHeight = item.scaledHeight - SELECTION_MARGIN * 2; - const viewportWidth = item.viewportWidth - SELECTION_MARGIN * 2; - let height, width; - if (item.scaledWidth > item.scaledHeight) { - width = item.scaledWidth - SELECTION_MARGIN * 2; - height = Math.floor(width / ratio); - } - else { - height = item.scaledHeight - SELECTION_MARGIN * 2; - width = Math.floor(height * ratio); - } - const marginTop = Math.abs(Math.floor((viewportHeight - height) / 2)); - const marginLeft = Math.abs(Math.floor((viewportWidth - width) / 2)); - style.width = width; - style.height = height; - style.marginLeft = marginLeft === 0 ? 0 : -marginLeft; - style.marginTop = marginTop === 0 ? 0 : -marginTop; - } - return style; -}; -const tileViewport = ({ item, }) => { - const styles = { - width: item.viewportWidth, - height: item.scaledHeight, - overflow: "hidden", - }; - if (item.nano) { - styles.background = `url(${item.nano})`; - styles.backgroundSize = "cover"; - styles.backgroundPosition = "center center"; - } - if (item.isSelected) { - styles.width = item.viewportWidth - SELECTION_MARGIN * 2; - styles.height = item.scaledHeight - SELECTION_MARGIN * 2; - styles.margin = SELECTION_MARGIN; - } - return styles; -}; -const customOverlay = ({ hover, }) => ({ - pointerEvents: "none", - opacity: hover ? 1 : 0, - position: "absolute", - height: "100%", - width: "100%", -}); -const galleryItem = ({ margin }) => ({ - margin, - WebkitUserSelect: "none", - position: "relative", - background: "#eee", - padding: "0px", -}); -const tileOverlay = ({ showOverlay, }) => ({ - pointerEvents: "none", - opacity: 1, - position: "absolute", - height: "100%", - width: "100%", - background: showOverlay - ? "linear-gradient(to bottom,rgba(0,0,0,0.26),transparent 56px,transparent)" - : "none", -}); -const tileIconBar = { - pointerEvents: "none", - opacity: 1, - position: "absolute", - height: "36px", - width: "100%", -}; -const tileDescription = { - background: "white", - width: "100%", - margin: 0, - userSelect: "text", - WebkitUserSelect: "text", - MozUserSelect: "text", - overflow: "hidden", -}; -const bottomBar = { - padding: "2px", - pointerEvents: "none", - position: "absolute", - minHeight: "0px", - maxHeight: "160px", - width: "100%", - bottom: "0px", - overflow: "hidden", -}; -const tagItemBlock = { - display: "inline-block", - cursor: "pointer", - pointerEvents: "visible", - margin: "2px", -}; -const tagItem = () => ({ - display: "inline", - padding: ".2em .6em .3em", - fontSize: "75%", - fontWeight: "600", - lineHeight: "1", - color: "yellow", - background: "rgba(0,0,0,0.65)", - textAlign: "center", - whiteSpace: "nowrap", - verticalAlign: "baseline", - borderRadius: ".25em", -}); - - - -const Image = ({ item, thumbnailImageComponent: ThumbnailImageComponent, isSelectable = true, thumbnailStyle, tagStyle, tileViewportStyle, margin, index, onSelect, onClick, }) => { - const styleContext = { item }; - const [hover, setHover] = react.useState(false); - const thumbnailProps = { - key: index, - "data-testid": "grid-gallery-item_thumbnail", - src: item.src, - alt: item.alt ? item.alt : "", - style: getStyle(thumbnailStyle, thumbnail, styleContext), - }; - const handleCheckButtonClick = (event) => { - if (!isSelectable) { - return; - } - onSelect(index, event); - }; - const handleViewportClick = (event) => { - onClick(index, event); - }; - const thumbnailImageProps = { - item, - index, - margin, - onSelect, - onClick, - isSelectable, - tileViewportStyle, - thumbnailStyle, - tagStyle, - }; - return (jsxRuntime.jsxs("div", { className: "ReactGridGallery_tile", "data-testid": "grid-gallery-item", onMouseEnter: () => setHover(true), onMouseLeave: () => setHover(false), style: galleryItem({ margin }), children: [jsxRuntime.jsx("div", { className: "ReactGridGallery_tile-icon-bar", style: tileIconBar, children: jsxRuntime.jsx(CheckButton, { isSelected: item.isSelected, isVisible: item.isSelected || (isSelectable && hover), onClick: handleCheckButtonClick }) }), !!item.tags && (jsxRuntime.jsx("div", { className: "ReactGridGallery_tile-bottom-bar", style: bottomBar, children: item.tags.map((tag, index) => (jsxRuntime.jsx("div", { style: tagItemBlock, children: jsxRuntime.jsx("span", { style: getStyle(tagStyle, tagItem, styleContext), children: tag.value }) }, tag.key || index))) })), !!item.customOverlay && (jsxRuntime.jsx("div", { className: "ReactGridGallery_custom-overlay", style: customOverlay({ hover }), children: item.customOverlay })), jsxRuntime.jsx("div", { className: "ReactGridGallery_tile-overlay", style: tileOverlay({ - showOverlay: hover && !item.isSelected && isSelectable, - }) }), jsxRuntime.jsx("div", { className: "ReactGridGallery_tile-viewport", "data-testid": "grid-gallery-item_viewport", style: getStyle(tileViewportStyle, tileViewport, styleContext), onClick: handleViewportClick, children: ThumbnailImageComponent ? (jsxRuntime.jsx(ThumbnailImageComponent, { ...thumbnailImageProps, imageProps: thumbnailProps })) : (jsxRuntime.jsx("img", { ...thumbnailProps })) }), item.thumbnailCaption && (jsxRuntime.jsx("div", { className: "ReactGridGallery_tile-description", style: tileDescription, children: item.thumbnailCaption }))] })); -}; - -function useContainerWidth(defaultContainerWidth) { - const ref = react.useRef(null); - const observerRef = react.useRef(); - const [containerWidth, setContainerWidth] = react.useState(defaultContainerWidth); - const containerRef = react.useCallback((node) => { - var _a; - (_a = observerRef.current) === null || _a === void 0 ? void 0 : _a.disconnect(); - observerRef.current = undefined; - ref.current = node; - const updateWidth = () => { - if (!ref.current) { - return; - } - let width = ref.current.clientWidth; - try { - width = ref.current.getBoundingClientRect().width; - } - catch (err) { } - setContainerWidth(Math.floor(width)); - }; - updateWidth(); - if (node && typeof ResizeObserver !== "undefined") { - observerRef.current = new ResizeObserver(updateWidth); - observerRef.current.observe(node); - } - }, []); - return { containerRef, containerWidth }; -} - -const calculateCutOff = (items, totalRowWidth, protrudingWidth) => { - const cutOff = []; - let cutSum = 0; - for (let i in items) { - const item = items[i]; - const fractionOfWidth = item.scaledWidth / totalRowWidth; - cutOff[i] = Math.floor(fractionOfWidth * protrudingWidth); - cutSum += cutOff[i]; - } - let stillToCutOff = protrudingWidth - cutSum; - while (stillToCutOff > 0) { - for (let i in cutOff) { - cutOff[i]++; - stillToCutOff--; - if (stillToCutOff < 0) - break; - } - } - return cutOff; -}; -const getRow = (images, { containerWidth, rowHeight, margin }) => { - const row = []; - const imgMargin = 2 * margin; - const items = [...images]; - let totalRowWidth = 0; - while (items.length > 0 && totalRowWidth < containerWidth) { - const item = items.shift(); - const scaledWidth = Math.floor(rowHeight * (item.width / item.height)); - const extendedItem = { - ...item, - scaledHeight: rowHeight, - scaledWidth, - viewportWidth: scaledWidth, - marginLeft: 0, - }; - row.push(extendedItem); - totalRowWidth += extendedItem.scaledWidth + imgMargin; - } - const protrudingWidth = totalRowWidth - containerWidth; - if (row.length > 0 && protrudingWidth > 0) { - const cutoff = calculateCutOff(row, totalRowWidth, protrudingWidth); - for (const i in row) { - const pixelsToRemove = cutoff[i]; - const item = row[i]; - item.marginLeft = -Math.abs(Math.floor(pixelsToRemove / 2)); - item.viewportWidth = item.scaledWidth - pixelsToRemove; - } - } - return [row, items]; -}; -const getRows = (images, options, rows = []) => { - const [row, imagesLeft] = getRow(images, options); - const nextRows = [...rows, row]; - if (options.maxRows && nextRows.length >= options.maxRows) { - return nextRows; - } - if (imagesLeft.length) { - return getRows(imagesLeft, options, nextRows); - } - return nextRows; -}; -const buildLayout = (images, { containerWidth, maxRows, rowHeight, margin }) => { - rowHeight = typeof rowHeight === "undefined" ? 180 : rowHeight; - margin = typeof margin === "undefined" ? 2 : margin; - if (!images) - return []; - if (!containerWidth) - return []; - const options = { containerWidth, maxRows, rowHeight, margin }; - return getRows(images, options); -}; -const buildLayoutFlat = (images, options) => { - const rows = buildLayout(images, options); - return [].concat.apply([], rows); -}; - -const Gallery = ({ images, id = "ReactGridGallery", enableImageSelection = true, onSelect = () => { }, rowHeight = 180, maxRows, margin = 2, defaultContainerWidth = 0, onClick = () => { }, tileViewportStyle, thumbnailStyle, tagStyle, thumbnailImageComponent, }) => { - const { containerRef, containerWidth } = useContainerWidth(defaultContainerWidth); - const thumbnails = buildLayoutFlat(images, { - containerWidth, - maxRows, - rowHeight, - margin, - }); - const handleSelect = (index, event) => { - event.preventDefault(); - onSelect(index, images[index], event); - }; - const handleClick = (index, event) => { - onClick(index, images[index], event); - }; - return (jsxRuntime.jsx("div", { id: id, className: "ReactGridGallery", ref: containerRef, children: jsxRuntime.jsx("div", { style: gallery, children: thumbnails.map((item, index) => (jsxRuntime.jsx(Image, { item: item, index: index, margin: margin, height: rowHeight, isSelectable: enableImageSelection, onClick: handleClick, onSelect: handleSelect, tagStyle: tagStyle, tileViewportStyle: tileViewportStyle, thumbnailStyle: thumbnailStyle, thumbnailImageComponent: thumbnailImageComponent }, item.key || index))) }) })); -}; -Gallery.displayName = "Gallery"; - -exports.CheckButton = CheckButton; -exports.Gallery = Gallery; -exports.buildLayout = buildLayout; -exports.buildLayoutFlat = buildLayoutFlat; -//# sourceMappingURL=react-grid-gallery.cjs.js.map diff --git a/src/components/react-grid-gallery/dist/react-grid-gallery.cjs.js.map b/src/components/react-grid-gallery/dist/react-grid-gallery.cjs.js.map deleted file mode 100644 index d4fc1c021ebdc4ef50b3df0d54008742f274a671..0000000000000000000000000000000000000000 --- a/src/components/react-grid-gallery/dist/react-grid-gallery.cjs.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"react-grid-gallery.cjs.js","sources":["../src/styles.ts","../src/CheckButton.tsx","../src/Image.tsx","../src/useContainerWidth.ts","../src/buildLayout.ts","../src/Gallery.tsx"],"sourcesContent":["import { CSSProperties } from \"react\";\nimport {\n ImageExtended,\n StyleFunction,\n StyleFunctionContext,\n StyleProp,\n} from \"./types\";\n\nexport const getStyle = (\n styleProp: StyleProp | undefined,\n fallback: StyleFunction,\n context: StyleFunctionContext\n): CSSProperties => {\n if (typeof styleProp === \"function\") {\n return styleProp(context);\n }\n if (typeof styleProp === \"object\") {\n return styleProp;\n }\n return fallback(context);\n};\n\nconst rotationTransformMap: Record<number, string> = {\n 3: \"rotate(180deg)\",\n 2: \"rotateY(180deg)\",\n 4: \"rotate(180deg) rotateY(180deg)\",\n 5: \"rotate(270deg) rotateY(180deg)\",\n 6: \"rotate(90deg)\",\n 7: \"rotate(90deg) rotateY(180deg)\",\n 8: \"rotate(270deg)\",\n};\n\nconst SELECTION_MARGIN = 16;\n\nexport const gallery: CSSProperties = {\n display: \"flex\",\n flexWrap: \"wrap\",\n};\n\nexport const thumbnail = ({ item }: { item: ImageExtended }): CSSProperties => {\n const rotationTransformValue = rotationTransformMap[item.orientation];\n\n const style = {\n cursor: \"pointer\",\n maxWidth: \"none\",\n width: item.scaledWidth,\n height: item.scaledHeight,\n marginLeft: item.marginLeft,\n marginTop: 0,\n transform: rotationTransformValue,\n };\n\n if (item.isSelected) {\n const ratio = item.scaledWidth / item.scaledHeight;\n const viewportHeight = item.scaledHeight - SELECTION_MARGIN * 2;\n const viewportWidth = item.viewportWidth - SELECTION_MARGIN * 2;\n\n let height, width;\n if (item.scaledWidth > item.scaledHeight) {\n width = item.scaledWidth - SELECTION_MARGIN * 2;\n height = Math.floor(width / ratio);\n } else {\n height = item.scaledHeight - SELECTION_MARGIN * 2;\n width = Math.floor(height * ratio);\n }\n\n const marginTop = Math.abs(Math.floor((viewportHeight - height) / 2));\n const marginLeft = Math.abs(Math.floor((viewportWidth - width) / 2));\n\n style.width = width;\n style.height = height;\n style.marginLeft = marginLeft === 0 ? 0 : -marginLeft;\n style.marginTop = marginTop === 0 ? 0 : -marginTop;\n }\n\n return style;\n};\n\nexport const tileViewport = ({\n item,\n}: {\n item: ImageExtended;\n}): CSSProperties => {\n const styles: CSSProperties = {\n width: item.viewportWidth,\n height: item.scaledHeight,\n overflow: \"hidden\",\n };\n if (item.nano) {\n styles.background = `url(${item.nano})`;\n styles.backgroundSize = \"cover\";\n styles.backgroundPosition = \"center center\";\n }\n if (item.isSelected) {\n styles.width = item.viewportWidth - SELECTION_MARGIN * 2;\n styles.height = item.scaledHeight - SELECTION_MARGIN * 2;\n styles.margin = SELECTION_MARGIN;\n }\n return styles;\n};\n\nexport const customOverlay = ({\n hover,\n}: {\n hover: boolean;\n}): CSSProperties => ({\n pointerEvents: \"none\",\n opacity: hover ? 1 : 0,\n position: \"absolute\",\n height: \"100%\",\n width: \"100%\",\n});\n\nexport const galleryItem = ({ margin }: { margin: number }): CSSProperties => ({\n margin,\n WebkitUserSelect: \"none\",\n position: \"relative\",\n background: \"#eee\",\n padding: \"0px\",\n});\n\nexport const tileOverlay = ({\n showOverlay,\n}: {\n showOverlay: boolean;\n}): CSSProperties => ({\n pointerEvents: \"none\",\n opacity: 1,\n position: \"absolute\",\n height: \"100%\",\n width: \"100%\",\n background: showOverlay\n ? \"linear-gradient(to bottom,rgba(0,0,0,0.26),transparent 56px,transparent)\"\n : \"none\",\n});\n\nexport const tileIconBar: CSSProperties = {\n pointerEvents: \"none\",\n opacity: 1,\n position: \"absolute\",\n height: \"36px\",\n width: \"100%\",\n};\n\nexport const tileDescription: CSSProperties = {\n background: \"white\",\n width: \"100%\",\n margin: 0,\n userSelect: \"text\",\n WebkitUserSelect: \"text\",\n MozUserSelect: \"text\",\n overflow: \"hidden\",\n};\n\nexport const bottomBar: CSSProperties = {\n padding: \"2px\",\n pointerEvents: \"none\",\n position: \"absolute\",\n minHeight: \"0px\",\n maxHeight: \"160px\",\n width: \"100%\",\n bottom: \"0px\",\n overflow: \"hidden\",\n};\n\nexport const tagItemBlock: CSSProperties = {\n display: \"inline-block\",\n cursor: \"pointer\",\n pointerEvents: \"visible\",\n margin: \"2px\",\n};\n\nexport const tagItem = (): CSSProperties => ({\n display: \"inline\",\n padding: \".2em .6em .3em\",\n fontSize: \"75%\",\n fontWeight: \"600\",\n lineHeight: \"1\",\n color: \"yellow\",\n background: \"rgba(0,0,0,0.65)\",\n textAlign: \"center\",\n whiteSpace: \"nowrap\",\n verticalAlign: \"baseline\",\n borderRadius: \".25em\",\n});\n\nexport const checkButton = ({\n isVisible,\n}: {\n isVisible: boolean;\n}): CSSProperties => ({\n visibility: isVisible ? \"visible\" : \"hidden\",\n background: \"none\",\n float: \"left\",\n width: 36,\n height: 36,\n border: \"none\",\n padding: 6,\n cursor: \"pointer\",\n pointerEvents: \"visible\",\n});\n","import { useState } from \"react\";\nimport * as styles from \"./styles\";\nimport { CheckButtonProps } from \"./types\";\n\nexport const CheckButton = ({\n isSelected = false,\n isVisible = true,\n onClick,\n color = \"#FFFFFFB2\",\n selectedColor = \"#4285F4FF\",\n hoverColor = \"#FFFFFFFF\",\n}: CheckButtonProps): JSX.Element => {\n const [hover, setHover] = useState(false);\n\n const circleStyle = { display: isSelected ? \"block\" : \"none\" };\n const fillColor = isSelected ? selectedColor : hover ? hoverColor : color;\n\n const handleMouseOver = () => setHover(true);\n const handleMouseOut = () => setHover(false);\n\n return (\n <div\n data-testid=\"grid-gallery-item_check-button\"\n title=\"Select\"\n style={styles.checkButton({ isVisible })}\n onClick={onClick}\n onMouseOver={handleMouseOver}\n onMouseOut={handleMouseOut}\n >\n <svg\n fill={fillColor}\n height=\"24\"\n viewBox=\"0 0 24 24\"\n width=\"24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <radialGradient\n id=\"shadow\"\n cx=\"38\"\n cy=\"95.488\"\n r=\"10.488\"\n gradientTransform=\"matrix(1 0 0 -1 -26 109)\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop offset=\".832\" stopColor=\"#010101\"></stop>\n <stop offset=\"1\" stopColor=\"#010101\" stopOpacity=\"0\"></stop>\n </radialGradient>\n\n <circle\n style={circleStyle}\n opacity=\".26\"\n fill=\"url(#shadow)\"\n cx=\"12\"\n cy=\"13.512\"\n r=\"10.488\"\n />\n <circle style={circleStyle} fill=\"#FFF\" cx=\"12\" cy=\"12.2\" r=\"8.292\" />\n <path d=\"M0 0h24v24H0z\" fill=\"none\" />\n <path d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-2 15l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z\" />\n </svg>\n </div>\n );\n};\n","import { useState, MouseEvent } from \"react\";\nimport { CheckButton } from \"./CheckButton\";\nimport { ImageExtended, ImageProps } from \"./types\";\nimport * as styles from \"./styles\";\nimport { getStyle } from \"./styles\";\n\nexport const Image = <T extends ImageExtended>({\n item,\n thumbnailImageComponent: ThumbnailImageComponent,\n isSelectable = true,\n thumbnailStyle,\n tagStyle,\n tileViewportStyle,\n margin,\n index,\n onSelect,\n onClick,\n}: ImageProps<T>): JSX.Element => {\n const styleContext = { item };\n\n const [hover, setHover] = useState(false);\n\n const thumbnailProps = {\n key: index,\n \"data-testid\": \"grid-gallery-item_thumbnail\",\n src: item.src,\n alt: item.alt ? item.alt : \"\",\n title: typeof item.caption === \"string\" ? item.caption : null,\n style: getStyle(thumbnailStyle, styles.thumbnail, styleContext),\n };\n\n const handleCheckButtonClick = (event: MouseEvent<HTMLElement>) => {\n if (!isSelectable) {\n return;\n }\n onSelect(index, event);\n };\n\n const handleViewportClick = (event: MouseEvent<HTMLElement>) => {\n onClick(index, event);\n };\n\n const thumbnailImageProps = {\n item,\n index,\n margin,\n onSelect,\n onClick,\n isSelectable,\n tileViewportStyle,\n thumbnailStyle,\n tagStyle,\n };\n\n return (\n <div\n className=\"ReactGridGallery_tile\"\n data-testid=\"grid-gallery-item\"\n onMouseEnter={() => setHover(true)}\n onMouseLeave={() => setHover(false)}\n style={styles.galleryItem({ margin })}\n >\n <div\n className=\"ReactGridGallery_tile-icon-bar\"\n style={styles.tileIconBar}\n >\n <CheckButton\n isSelected={item.isSelected}\n isVisible={item.isSelected || (isSelectable && hover)}\n onClick={handleCheckButtonClick}\n />\n </div>\n\n {!!item.tags && (\n <div\n className=\"ReactGridGallery_tile-bottom-bar\"\n style={styles.bottomBar}\n >\n {item.tags.map((tag, index) => (\n <div\n key={tag.key || index}\n title={tag.title}\n style={styles.tagItemBlock}\n >\n <span style={getStyle(tagStyle, styles.tagItem, styleContext)}>\n {tag.value}\n </span>\n </div>\n ))}\n </div>\n )}\n\n {!!item.customOverlay && (\n <div\n className=\"ReactGridGallery_custom-overlay\"\n style={styles.customOverlay({ hover })}\n >\n {item.customOverlay}\n </div>\n )}\n\n <div\n className=\"ReactGridGallery_tile-overlay\"\n style={styles.tileOverlay({\n showOverlay: hover && !item.isSelected && isSelectable,\n })}\n />\n\n <div\n className=\"ReactGridGallery_tile-viewport\"\n data-testid=\"grid-gallery-item_viewport\"\n style={getStyle(tileViewportStyle, styles.tileViewport, styleContext)}\n onClick={handleViewportClick}\n >\n {ThumbnailImageComponent ? (\n <ThumbnailImageComponent\n {...thumbnailImageProps}\n imageProps={thumbnailProps}\n />\n ) : (\n <img {...thumbnailProps} />\n )}\n </div>\n {item.thumbnailCaption && (\n <div\n className=\"ReactGridGallery_tile-description\"\n style={styles.tileDescription}\n >\n {item.thumbnailCaption}\n </div>\n )}\n </div>\n );\n};\n","import { useRef, useCallback, useState } from \"react\";\n\nexport function useContainerWidth(defaultContainerWidth: number) {\n const ref = useRef<HTMLElement | null>(null);\n const observerRef = useRef<ResizeObserver>();\n\n const [containerWidth, setContainerWidth] = useState(defaultContainerWidth);\n\n const containerRef = useCallback((node: HTMLElement | null) => {\n observerRef.current?.disconnect();\n observerRef.current = undefined;\n\n ref.current = node;\n\n const updateWidth = () => {\n if (!ref.current) {\n return;\n }\n let width = ref.current.clientWidth;\n try {\n width = ref.current.getBoundingClientRect().width;\n } catch (err) {}\n setContainerWidth(Math.floor(width));\n };\n\n updateWidth();\n\n if (node && typeof ResizeObserver !== \"undefined\") {\n observerRef.current = new ResizeObserver(updateWidth);\n observerRef.current.observe(node);\n }\n }, []);\n\n return { containerRef, containerWidth };\n}\n","import {\n ImageExtended,\n Image,\n BuildLayoutOptions,\n ImageExtendedRow,\n} from \"./types\";\n\nconst calculateCutOff = <T extends ImageExtended = ImageExtended>(\n items: T[],\n totalRowWidth: number,\n protrudingWidth: number\n) => {\n const cutOff: number[] = [];\n let cutSum = 0;\n for (let i in items) {\n const item = items[i];\n const fractionOfWidth = item.scaledWidth / totalRowWidth;\n cutOff[i] = Math.floor(fractionOfWidth * protrudingWidth);\n cutSum += cutOff[i];\n }\n\n let stillToCutOff = protrudingWidth - cutSum;\n while (stillToCutOff > 0) {\n for (let i in cutOff) {\n cutOff[i]++;\n stillToCutOff--;\n if (stillToCutOff < 0) break;\n }\n }\n return cutOff;\n};\n\nconst getRow = <T extends Image = Image>(\n images: T[],\n { containerWidth, rowHeight, margin }: BuildLayoutOptions\n): [ImageExtendedRow<T>, T[]] => {\n const row: ImageExtendedRow<T> = [];\n const imgMargin = 2 * margin;\n const items = [...images];\n\n let totalRowWidth = 0;\n while (items.length > 0 && totalRowWidth < containerWidth) {\n const item = items.shift();\n const scaledWidth = Math.floor(rowHeight * (item.width / item.height));\n const extendedItem: ImageExtended<T> = {\n ...item,\n scaledHeight: rowHeight,\n scaledWidth,\n viewportWidth: scaledWidth,\n marginLeft: 0,\n };\n row.push(extendedItem);\n totalRowWidth += extendedItem.scaledWidth + imgMargin;\n }\n\n const protrudingWidth = totalRowWidth - containerWidth;\n if (row.length > 0 && protrudingWidth > 0) {\n const cutoff = calculateCutOff(row, totalRowWidth, protrudingWidth);\n for (const i in row) {\n const pixelsToRemove = cutoff[i];\n const item = row[i];\n item.marginLeft = -Math.abs(Math.floor(pixelsToRemove / 2));\n item.viewportWidth = item.scaledWidth - pixelsToRemove;\n }\n }\n\n return [row, items];\n};\n\nconst getRows = <T extends Image = Image>(\n images: T[],\n options: BuildLayoutOptions,\n rows: ImageExtendedRow<T>[] = []\n): ImageExtendedRow<T>[] => {\n const [row, imagesLeft] = getRow(images, options);\n const nextRows = [...rows, row];\n\n if (options.maxRows && nextRows.length >= options.maxRows) {\n return nextRows;\n }\n if (imagesLeft.length) {\n return getRows(imagesLeft, options, nextRows);\n }\n return nextRows;\n};\n\nexport const buildLayout = <T extends Image = Image>(\n images: T[],\n { containerWidth, maxRows, rowHeight, margin }: BuildLayoutOptions\n): ImageExtendedRow<T>[] => {\n rowHeight = typeof rowHeight === \"undefined\" ? 180 : rowHeight;\n margin = typeof margin === \"undefined\" ? 2 : margin;\n\n if (!images) return [];\n if (!containerWidth) return [];\n\n const options = { containerWidth, maxRows, rowHeight, margin };\n return getRows(images, options);\n};\n\nexport const buildLayoutFlat = <T extends Image = Image>(\n images: T[],\n options: BuildLayoutOptions\n): ImageExtendedRow<T> => {\n const rows = buildLayout(images, options);\n return [].concat.apply([], rows);\n};\n","import { MouseEvent } from \"react\";\nimport { Image } from \"./Image\";\nimport { useContainerWidth } from \"./useContainerWidth\";\nimport { buildLayoutFlat } from \"./buildLayout\";\nimport { Image as ImageInterface, GalleryProps } from \"./types\";\nimport * as styles from \"./styles\";\n\nexport const Gallery = <T extends ImageInterface>({\n images,\n id = \"ReactGridGallery\",\n enableImageSelection = true,\n onSelect = () => {},\n rowHeight = 180,\n maxRows,\n margin = 2,\n defaultContainerWidth = 0,\n onClick = () => {},\n tileViewportStyle,\n thumbnailStyle,\n tagStyle,\n thumbnailImageComponent,\n}: GalleryProps<T>): JSX.Element => {\n const { containerRef, containerWidth } = useContainerWidth(\n defaultContainerWidth\n );\n\n const thumbnails = buildLayoutFlat<T>(images, {\n containerWidth,\n maxRows,\n rowHeight,\n margin,\n });\n\n const handleSelect = (index: number, event: MouseEvent<HTMLElement>) => {\n event.preventDefault();\n onSelect(index, images[index], event);\n };\n\n const handleClick = (index: number, event: MouseEvent<HTMLElement>) => {\n onClick(index, images[index], event);\n };\n\n return (\n <div id={id} className=\"ReactGridGallery\" ref={containerRef}>\n <div style={styles.gallery}>\n {thumbnails.map((item, index) => (\n <Image\n key={item.key || index}\n item={item}\n index={index}\n margin={margin}\n height={rowHeight}\n isSelectable={enableImageSelection}\n onClick={handleClick}\n onSelect={handleSelect}\n tagStyle={tagStyle}\n tileViewportStyle={tileViewportStyle}\n thumbnailStyle={thumbnailStyle}\n thumbnailImageComponent={thumbnailImageComponent}\n />\n ))}\n </div>\n </div>\n );\n};\n\nGallery.displayName = \"Gallery\";\n"],"names":["useState","_jsx","styles.checkButton","_jsxs","styles.thumbnail","styles.galleryItem","styles.tileIconBar","styles.bottomBar","styles.tagItemBlock","styles.tagItem","styles.customOverlay","styles.tileOverlay","styles.tileViewport","styles.tileDescription","useRef","useCallback","styles.gallery"],"mappings":"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"} \ No newline at end of file diff --git a/src/components/react-grid-gallery/dist/react-grid-gallery.d.ts b/src/components/react-grid-gallery/dist/react-grid-gallery.d.ts deleted file mode 100644 index d955cf70c654683be8b085885072483a623d87f8..0000000000000000000000000000000000000000 --- a/src/components/react-grid-gallery/dist/react-grid-gallery.d.ts +++ /dev/null @@ -1,97 +0,0 @@ -import { ReactNode, MouseEvent, CSSProperties, ComponentType } from 'react'; - -type Key = string | number; -interface ImageTag { - value: ReactNode; - key?: Key; -} -interface Image { - key?: Key; - src: string; - width: number; - height: number; - nano?: string; - alt?: string; - tags?: ImageTag[]; - isSelected?: boolean; - caption?: ReactNode; - customOverlay?: ReactNode; - thumbnailCaption?: ReactNode; - orientation?: number; -} -type ImageExtended<T extends Image = Image> = T & { - scaledWidth: number; - scaledHeight: number; - viewportWidth: number; - marginLeft: number; -}; -interface BuildLayoutOptions { - containerWidth: number; - maxRows?: number; - rowHeight?: number; - margin?: number; -} -type ImageExtendedRow<T extends Image = Image> = ImageExtended<T>[]; -type EventHandler<T extends Image = Image> = (index: number, item: T, event: MouseEvent<HTMLElement>) => void; -type StyleFunctionContext<T extends Image = Image> = { - item: T; -}; -type StyleFunction<T extends Image = Image> = (context: StyleFunctionContext) => CSSProperties; -type StyleProp<T extends Image = Image> = CSSProperties | StyleFunction<T>; -interface ImageProps<T extends ImageExtended = ImageExtended> { - item: T; - index: number; - margin: number; - isSelectable: boolean; - onClick: (index: number, event: MouseEvent<HTMLElement>) => void; - onSelect: (index: number, event: MouseEvent<HTMLElement>) => void; - tileViewportStyle: StyleProp<T>; - thumbnailStyle: StyleProp<T>; - tagStyle: StyleProp<T>; - height?: number; - thumbnailImageComponent?: ComponentType<ThumbnailImageProps>; -} -interface ThumbnailImageComponentImageProps { - key: string | number; - src: string; - alt: string; - style: CSSProperties; -} -type ThumbnailImageProps<T extends ImageExtended = ImageExtended> = ImageProps<T> & { - imageProps: ThumbnailImageComponentImageProps; -}; -interface GalleryProps<T extends Image = Image> { - images: T[]; - id?: string; - enableImageSelection?: boolean; - onSelect?: EventHandler<T>; - rowHeight?: number; - maxRows?: number; - margin?: number; - defaultContainerWidth?: number; - onClick?: EventHandler<T>; - tileViewportStyle?: StyleProp<T>; - thumbnailStyle?: StyleProp<T>; - tagStyle?: StyleProp<T>; - thumbnailImageComponent?: ComponentType<ThumbnailImageProps>; -} -interface CheckButtonProps { - isSelected: boolean; - isVisible: boolean; - onClick: (event: MouseEvent<HTMLElement>) => void; - color?: string; - selectedColor?: string; - hoverColor?: string; -} - -declare const Gallery: { - <T extends Image>({ images, id, enableImageSelection, onSelect, rowHeight, maxRows, margin, defaultContainerWidth, onClick, tileViewportStyle, thumbnailStyle, tagStyle, thumbnailImageComponent, }: GalleryProps<T>): JSX.Element; - displayName: string; -}; - -declare const CheckButton: ({ isSelected, isVisible, onClick, color, selectedColor, hoverColor, }: CheckButtonProps) => JSX.Element; - -declare const buildLayout: <T extends Image = Image>(images: T[], { containerWidth, maxRows, rowHeight, margin }: BuildLayoutOptions) => ImageExtendedRow<T>[]; -declare const buildLayoutFlat: <T extends Image = Image>(images: T[], options: BuildLayoutOptions) => ImageExtendedRow<T>; - -export { BuildLayoutOptions, CheckButton, CheckButtonProps, EventHandler, Gallery, GalleryProps, Image, ImageExtended, ImageExtendedRow, ImageProps, ImageTag, StyleFunction, StyleFunctionContext, StyleProp, ThumbnailImageComponentImageProps, ThumbnailImageProps, buildLayout, buildLayoutFlat }; diff --git a/src/components/react-grid-gallery/dist/react-grid-gallery.esm.js b/src/components/react-grid-gallery/dist/react-grid-gallery.esm.js deleted file mode 100644 index d94a204e627e85e1dadc06c5a50800555f8045a3..0000000000000000000000000000000000000000 --- a/src/components/react-grid-gallery/dist/react-grid-gallery.esm.js +++ /dev/null @@ -1,310 +0,0 @@ -import { jsx, jsxs } from 'react/jsx-runtime'; -import { useState, useRef, useCallback } from 'react'; - -const getStyle = (styleProp, fallback, context) => { - if (typeof styleProp === "function") { - return styleProp(context); - } - if (typeof styleProp === "object") { - return styleProp; - } - return fallback(context); -}; -const rotationTransformMap = { - 3: "rotate(180deg)", - 2: "rotateY(180deg)", - 4: "rotate(180deg) rotateY(180deg)", - 5: "rotate(270deg) rotateY(180deg)", - 6: "rotate(90deg)", - 7: "rotate(90deg) rotateY(180deg)", - 8: "rotate(270deg)", -}; -const SELECTION_MARGIN = 16; -const gallery = { - display: "flex", - flexWrap: "wrap", -}; -const thumbnail = ({ item }) => { - const rotationTransformValue = rotationTransformMap[item.orientation]; - const style = { - cursor: "pointer", - maxWidth: "none", - width: item.scaledWidth, - height: item.scaledHeight, - marginLeft: item.marginLeft, - marginTop: 0, - transform: rotationTransformValue, - }; - if (item.isSelected) { - const ratio = item.scaledWidth / item.scaledHeight; - const viewportHeight = item.scaledHeight - SELECTION_MARGIN * 2; - const viewportWidth = item.viewportWidth - SELECTION_MARGIN * 2; - let height, width; - if (item.scaledWidth > item.scaledHeight) { - width = item.scaledWidth - SELECTION_MARGIN * 2; - height = Math.floor(width / ratio); - } - else { - height = item.scaledHeight - SELECTION_MARGIN * 2; - width = Math.floor(height * ratio); - } - const marginTop = Math.abs(Math.floor((viewportHeight - height) / 2)); - const marginLeft = Math.abs(Math.floor((viewportWidth - width) / 2)); - style.width = width; - style.height = height; - style.marginLeft = marginLeft === 0 ? 0 : -marginLeft; - style.marginTop = marginTop === 0 ? 0 : -marginTop; - } - return style; -}; -const tileViewport = ({ item, }) => { - const styles = { - width: item.viewportWidth, - height: item.scaledHeight, - overflow: "hidden", - }; - if (item.nano) { - styles.background = `url(${item.nano})`; - styles.backgroundSize = "cover"; - styles.backgroundPosition = "center center"; - } - if (item.isSelected) { - styles.width = item.viewportWidth - SELECTION_MARGIN * 2; - styles.height = item.scaledHeight - SELECTION_MARGIN * 2; - styles.margin = SELECTION_MARGIN; - } - return styles; -}; -const customOverlay = ({ hover, }) => ({ - pointerEvents: "none", - opacity: hover ? 1 : 0, - position: "absolute", - height: "100%", - width: "100%", -}); -const galleryItem = ({ margin }) => ({ - margin, - WebkitUserSelect: "none", - position: "relative", - background: "#eee", - padding: "0px", -}); -const tileOverlay = ({ showOverlay, }) => ({ - pointerEvents: "none", - opacity: 1, - position: "absolute", - height: "100%", - width: "100%", - background: showOverlay - ? "linear-gradient(to bottom,rgba(0,0,0,0.26),transparent 56px,transparent)" - : "none", -}); -const tileIconBar = { - pointerEvents: "none", - opacity: 1, - position: "absolute", - height: "36px", - width: "100%", -}; -const tileDescription = { - background: "white", - width: "100%", - margin: 0, - userSelect: "text", - WebkitUserSelect: "text", - MozUserSelect: "text", - overflow: "hidden", -}; -const bottomBar = { - padding: "2px", - pointerEvents: "none", - position: "absolute", - minHeight: "0px", - maxHeight: "160px", - width: "100%", - bottom: "0px", - overflow: "hidden", -}; -const tagItemBlock = { - display: "inline-block", - cursor: "pointer", - pointerEvents: "visible", - margin: "2px", -}; -const tagItem = () => ({ - display: "inline", - padding: ".2em .6em .3em", - fontSize: "75%", - fontWeight: "600", - lineHeight: "1", - color: "yellow", - background: "rgba(0,0,0,0.65)", - textAlign: "center", - whiteSpace: "nowrap", - verticalAlign: "baseline", - borderRadius: ".25em", -}); -c - - -const Image = ({ item, thumbnailImageComponent: ThumbnailImageComponent, isSelectable = true, thumbnailStyle, tagStyle, tileViewportStyle, margin, index, onSelect, onClick, }) => { - const styleContext = { item }; - const [hover, setHover] = useState(false); - const thumbnailProps = { - key: index, - "data-testid": "grid-gallery-item_thumbnail", - src: item.src, - alt: item.alt ? item.alt : "", - style: getStyle(thumbnailStyle, thumbnail, styleContext), - }; - const handleCheckButtonClick = (event) => { - if (!isSelectable) { - return; - } - onSelect(index, event); - }; - const handleViewportClick = (event) => { - onClick(index, event); - }; - const thumbnailImageProps = { - item, - index, - margin, - onSelect, - onClick, - isSelectable, - tileViewportStyle, - thumbnailStyle, - tagStyle, - }; - return (jsxs("div", { className: "ReactGridGallery_tile", "data-testid": "grid-gallery-item", onMouseEnter: () => setHover(true), onMouseLeave: () => setHover(false), style: galleryItem({ margin }), children: [jsx("div", { className: "ReactGridGallery_tile-icon-bar", style: tileIconBar, children: jsx(CheckButton, { isSelected: item.isSelected, isVisible: item.isSelected || (isSelectable && hover), onClick: handleCheckButtonClick }) }), !!item.tags && (jsx("div", { className: "ReactGridGallery_tile-bottom-bar", style: bottomBar, children: item.tags.map((tag, index) => (jsx("div", { style: tagItemBlock, children: jsx("span", { style: getStyle(tagStyle, tagItem, styleContext), children: tag.value }) }, tag.key || index))) })), !!item.customOverlay && (jsx("div", { className: "ReactGridGallery_custom-overlay", style: customOverlay({ hover }), children: item.customOverlay })), jsx("div", { className: "ReactGridGallery_tile-overlay", style: tileOverlay({ - showOverlay: hover && !item.isSelected && isSelectable, - }) }), jsx("div", { className: "ReactGridGallery_tile-viewport", "data-testid": "grid-gallery-item_viewport", style: getStyle(tileViewportStyle, tileViewport, styleContext), onClick: handleViewportClick, children: ThumbnailImageComponent ? (jsx(ThumbnailImageComponent, { ...thumbnailImageProps, imageProps: thumbnailProps })) : (jsx("img", { ...thumbnailProps })) }), item.thumbnailCaption && (jsx("div", { className: "ReactGridGallery_tile-description", style: tileDescription, children: item.thumbnailCaption }))] })); -}; - -function useContainerWidth(defaultContainerWidth) { - const ref = useRef(null); - const observerRef = useRef(); - const [containerWidth, setContainerWidth] = useState(defaultContainerWidth); - const containerRef = useCallback((node) => { - var _a; - (_a = observerRef.current) === null || _a === void 0 ? void 0 : _a.disconnect(); - observerRef.current = undefined; - ref.current = node; - const updateWidth = () => { - if (!ref.current) { - return; - } - let width = ref.current.clientWidth; - try { - width = ref.current.getBoundingClientRect().width; - } - catch (err) { } - setContainerWidth(Math.floor(width)); - }; - updateWidth(); - if (node && typeof ResizeObserver !== "undefined") { - observerRef.current = new ResizeObserver(updateWidth); - observerRef.current.observe(node); - } - }, []); - return { containerRef, containerWidth }; -} - -const calculateCutOff = (items, totalRowWidth, protrudingWidth) => { - const cutOff = []; - let cutSum = 0; - for (let i in items) { - const item = items[i]; - const fractionOfWidth = item.scaledWidth / totalRowWidth; - cutOff[i] = Math.floor(fractionOfWidth * protrudingWidth); - cutSum += cutOff[i]; - } - let stillToCutOff = protrudingWidth - cutSum; - while (stillToCutOff > 0) { - for (let i in cutOff) { - cutOff[i]++; - stillToCutOff--; - if (stillToCutOff < 0) - break; - } - } - return cutOff; -}; -const getRow = (images, { containerWidth, rowHeight, margin }) => { - const row = []; - const imgMargin = 2 * margin; - const items = [...images]; - let totalRowWidth = 0; - while (items.length > 0 && totalRowWidth < containerWidth) { - const item = items.shift(); - const scaledWidth = Math.floor(rowHeight * (item.width / item.height)); - const extendedItem = { - ...item, - scaledHeight: rowHeight, - scaledWidth, - viewportWidth: scaledWidth, - marginLeft: 0, - }; - row.push(extendedItem); - totalRowWidth += extendedItem.scaledWidth + imgMargin; - } - const protrudingWidth = totalRowWidth - containerWidth; - if (row.length > 0 && protrudingWidth > 0) { - const cutoff = calculateCutOff(row, totalRowWidth, protrudingWidth); - for (const i in row) { - const pixelsToRemove = cutoff[i]; - const item = row[i]; - item.marginLeft = -Math.abs(Math.floor(pixelsToRemove / 2)); - item.viewportWidth = item.scaledWidth - pixelsToRemove; - } - } - return [row, items]; -}; -const getRows = (images, options, rows = []) => { - const [row, imagesLeft] = getRow(images, options); - const nextRows = [...rows, row]; - if (options.maxRows && nextRows.length >= options.maxRows) { - return nextRows; - } - if (imagesLeft.length) { - return getRows(imagesLeft, options, nextRows); - } - return nextRows; -}; -const buildLayout = (images, { containerWidth, maxRows, rowHeight, margin }) => { - rowHeight = typeof rowHeight === "undefined" ? 180 : rowHeight; - margin = typeof margin === "undefined" ? 2 : margin; - if (!images) - return []; - if (!containerWidth) - return []; - const options = { containerWidth, maxRows, rowHeight, margin }; - return getRows(images, options); -}; -const buildLayoutFlat = (images, options) => { - const rows = buildLayout(images, options); - return [].concat.apply([], rows); -}; - -const Gallery = ({ images, id = "ReactGridGallery", enableImageSelection = true, onSelect = () => { }, rowHeight = 180, maxRows, margin = 2, defaultContainerWidth = 0, onClick = () => { }, tileViewportStyle, thumbnailStyle, tagStyle, thumbnailImageComponent, }) => { - const { containerRef, containerWidth } = useContainerWidth(defaultContainerWidth); - const thumbnails = buildLayoutFlat(images, { - containerWidth, - maxRows, - rowHeight, - margin, - }); - const handleSelect = (index, event) => { - event.preventDefault(); - onSelect(index, images[index], event); - }; - const handleClick = (index, event) => { - onClick(index, images[index], event); - }; - return (jsx("div", { id: id, className: "ReactGridGallery", ref: containerRef, children: jsx("div", { style: gallery, children: thumbnails.map((item, index) => (jsx(Image, { item: item, index: index, margin: margin, height: rowHeight, isSelectable: enableImageSelection, onClick: handleClick, onSelect: handleSelect, tagStyle: tagStyle, tileViewportStyle: tileViewportStyle, thumbnailStyle: thumbnailStyle, thumbnailImageComponent: thumbnailImageComponent }, item.key || index))) }) })); -}; -Gallery.displayName = "Gallery"; - -export { CheckButton, Gallery, buildLayout, buildLayoutFlat }; -//# sourceMappingURL=react-grid-gallery.esm.js.map diff --git a/src/components/react-grid-gallery/dist/react-grid-gallery.esm.js.map b/src/components/react-grid-gallery/dist/react-grid-gallery.esm.js.map deleted file mode 100644 index d64388d47a578216f9ef01ce570bafa8f416b659..0000000000000000000000000000000000000000 --- a/src/components/react-grid-gallery/dist/react-grid-gallery.esm.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"react-grid-gallery.esm.js","sources":["../src/styles.ts","../src/CheckButton.tsx","../src/Image.tsx","../src/useContainerWidth.ts","../src/buildLayout.ts","../src/Gallery.tsx"],"sourcesContent":["import { CSSProperties } from \"react\";\nimport {\n ImageExtended,\n StyleFunction,\n StyleFunctionContext,\n StyleProp,\n} from \"./types\";\n\nexport const getStyle = (\n styleProp: StyleProp | undefined,\n fallback: StyleFunction,\n context: StyleFunctionContext\n): CSSProperties => {\n if (typeof styleProp === \"function\") {\n return styleProp(context);\n }\n if (typeof styleProp === \"object\") {\n return styleProp;\n }\n return fallback(context);\n};\n\nconst rotationTransformMap: Record<number, string> = {\n 3: \"rotate(180deg)\",\n 2: \"rotateY(180deg)\",\n 4: \"rotate(180deg) rotateY(180deg)\",\n 5: \"rotate(270deg) rotateY(180deg)\",\n 6: \"rotate(90deg)\",\n 7: \"rotate(90deg) rotateY(180deg)\",\n 8: \"rotate(270deg)\",\n};\n\nconst SELECTION_MARGIN = 16;\n\nexport const gallery: CSSProperties = {\n display: \"flex\",\n flexWrap: \"wrap\",\n};\n\nexport const thumbnail = ({ item }: { item: ImageExtended }): CSSProperties => {\n const rotationTransformValue = rotationTransformMap[item.orientation];\n\n const style = {\n cursor: \"pointer\",\n maxWidth: \"none\",\n width: item.scaledWidth,\n height: item.scaledHeight,\n marginLeft: item.marginLeft,\n marginTop: 0,\n transform: rotationTransformValue,\n };\n\n if (item.isSelected) {\n const ratio = item.scaledWidth / item.scaledHeight;\n const viewportHeight = item.scaledHeight - SELECTION_MARGIN * 2;\n const viewportWidth = item.viewportWidth - SELECTION_MARGIN * 2;\n\n let height, width;\n if (item.scaledWidth > item.scaledHeight) {\n width = item.scaledWidth - SELECTION_MARGIN * 2;\n height = Math.floor(width / ratio);\n } else {\n height = item.scaledHeight - SELECTION_MARGIN * 2;\n width = Math.floor(height * ratio);\n }\n\n const marginTop = Math.abs(Math.floor((viewportHeight - height) / 2));\n const marginLeft = Math.abs(Math.floor((viewportWidth - width) / 2));\n\n style.width = width;\n style.height = height;\n style.marginLeft = marginLeft === 0 ? 0 : -marginLeft;\n style.marginTop = marginTop === 0 ? 0 : -marginTop;\n }\n\n return style;\n};\n\nexport const tileViewport = ({\n item,\n}: {\n item: ImageExtended;\n}): CSSProperties => {\n const styles: CSSProperties = {\n width: item.viewportWidth,\n height: item.scaledHeight,\n overflow: \"hidden\",\n };\n if (item.nano) {\n styles.background = `url(${item.nano})`;\n styles.backgroundSize = \"cover\";\n styles.backgroundPosition = \"center center\";\n }\n if (item.isSelected) {\n styles.width = item.viewportWidth - SELECTION_MARGIN * 2;\n styles.height = item.scaledHeight - SELECTION_MARGIN * 2;\n styles.margin = SELECTION_MARGIN;\n }\n return styles;\n};\n\nexport const customOverlay = ({\n hover,\n}: {\n hover: boolean;\n}): CSSProperties => ({\n pointerEvents: \"none\",\n opacity: hover ? 1 : 0,\n position: \"absolute\",\n height: \"100%\",\n width: \"100%\",\n});\n\nexport const galleryItem = ({ margin }: { margin: number }): CSSProperties => ({\n margin,\n WebkitUserSelect: \"none\",\n position: \"relative\",\n background: \"#eee\",\n padding: \"0px\",\n});\n\nexport const tileOverlay = ({\n showOverlay,\n}: {\n showOverlay: boolean;\n}): CSSProperties => ({\n pointerEvents: \"none\",\n opacity: 1,\n position: \"absolute\",\n height: \"100%\",\n width: \"100%\",\n background: showOverlay\n ? \"linear-gradient(to bottom,rgba(0,0,0,0.26),transparent 56px,transparent)\"\n : \"none\",\n});\n\nexport const tileIconBar: CSSProperties = {\n pointerEvents: \"none\",\n opacity: 1,\n position: \"absolute\",\n height: \"36px\",\n width: \"100%\",\n};\n\nexport const tileDescription: CSSProperties = {\n background: \"white\",\n width: \"100%\",\n margin: 0,\n userSelect: \"text\",\n WebkitUserSelect: \"text\",\n MozUserSelect: \"text\",\n overflow: \"hidden\",\n};\n\nexport const bottomBar: CSSProperties = {\n padding: \"2px\",\n pointerEvents: \"none\",\n position: \"absolute\",\n minHeight: \"0px\",\n maxHeight: \"160px\",\n width: \"100%\",\n bottom: \"0px\",\n overflow: \"hidden\",\n};\n\nexport const tagItemBlock: CSSProperties = {\n display: \"inline-block\",\n cursor: \"pointer\",\n pointerEvents: \"visible\",\n margin: \"2px\",\n};\n\nexport const tagItem = (): CSSProperties => ({\n display: \"inline\",\n padding: \".2em .6em .3em\",\n fontSize: \"75%\",\n fontWeight: \"600\",\n lineHeight: \"1\",\n color: \"yellow\",\n background: \"rgba(0,0,0,0.65)\",\n textAlign: \"center\",\n whiteSpace: \"nowrap\",\n verticalAlign: \"baseline\",\n borderRadius: \".25em\",\n});\n\nexport const checkButton = ({\n isVisible,\n}: {\n isVisible: boolean;\n}): CSSProperties => ({\n visibility: isVisible ? \"visible\" : \"hidden\",\n background: \"none\",\n float: \"left\",\n width: 36,\n height: 36,\n border: \"none\",\n padding: 6,\n cursor: \"pointer\",\n pointerEvents: \"visible\",\n});\n","import { useState } from \"react\";\nimport * as styles from \"./styles\";\nimport { CheckButtonProps } from \"./types\";\n\nexport const CheckButton = ({\n isSelected = false,\n isVisible = true,\n onClick,\n color = \"#FFFFFFB2\",\n selectedColor = \"#4285F4FF\",\n hoverColor = \"#FFFFFFFF\",\n}: CheckButtonProps): JSX.Element => {\n const [hover, setHover] = useState(false);\n\n const circleStyle = { display: isSelected ? \"block\" : \"none\" };\n const fillColor = isSelected ? selectedColor : hover ? hoverColor : color;\n\n const handleMouseOver = () => setHover(true);\n const handleMouseOut = () => setHover(false);\n\n return (\n <div\n data-testid=\"grid-gallery-item_check-button\"\n title=\"Select\"\n style={styles.checkButton({ isVisible })}\n onClick={onClick}\n onMouseOver={handleMouseOver}\n onMouseOut={handleMouseOut}\n >\n <svg\n fill={fillColor}\n height=\"24\"\n viewBox=\"0 0 24 24\"\n width=\"24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <radialGradient\n id=\"shadow\"\n cx=\"38\"\n cy=\"95.488\"\n r=\"10.488\"\n gradientTransform=\"matrix(1 0 0 -1 -26 109)\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop offset=\".832\" stopColor=\"#010101\"></stop>\n <stop offset=\"1\" stopColor=\"#010101\" stopOpacity=\"0\"></stop>\n </radialGradient>\n\n <circle\n style={circleStyle}\n opacity=\".26\"\n fill=\"url(#shadow)\"\n cx=\"12\"\n cy=\"13.512\"\n r=\"10.488\"\n />\n <circle style={circleStyle} fill=\"#FFF\" cx=\"12\" cy=\"12.2\" r=\"8.292\" />\n <path d=\"M0 0h24v24H0z\" fill=\"none\" />\n <path d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-2 15l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z\" />\n </svg>\n </div>\n );\n};\n","import { useState, MouseEvent } from \"react\";\nimport { CheckButton } from \"./CheckButton\";\nimport { ImageExtended, ImageProps } from \"./types\";\nimport * as styles from \"./styles\";\nimport { getStyle } from \"./styles\";\n\nexport const Image = <T extends ImageExtended>({\n item,\n thumbnailImageComponent: ThumbnailImageComponent,\n isSelectable = true,\n thumbnailStyle,\n tagStyle,\n tileViewportStyle,\n margin,\n index,\n onSelect,\n onClick,\n}: ImageProps<T>): JSX.Element => {\n const styleContext = { item };\n\n const [hover, setHover] = useState(false);\n\n const thumbnailProps = {\n key: index,\n \"data-testid\": \"grid-gallery-item_thumbnail\",\n src: item.src,\n alt: item.alt ? item.alt : \"\",\n title: typeof item.caption === \"string\" ? item.caption : null,\n style: getStyle(thumbnailStyle, styles.thumbnail, styleContext),\n };\n\n const handleCheckButtonClick = (event: MouseEvent<HTMLElement>) => {\n if (!isSelectable) {\n return;\n }\n onSelect(index, event);\n };\n\n const handleViewportClick = (event: MouseEvent<HTMLElement>) => {\n onClick(index, event);\n };\n\n const thumbnailImageProps = {\n item,\n index,\n margin,\n onSelect,\n onClick,\n isSelectable,\n tileViewportStyle,\n thumbnailStyle,\n tagStyle,\n };\n\n return (\n <div\n className=\"ReactGridGallery_tile\"\n data-testid=\"grid-gallery-item\"\n onMouseEnter={() => setHover(true)}\n onMouseLeave={() => setHover(false)}\n style={styles.galleryItem({ margin })}\n >\n <div\n className=\"ReactGridGallery_tile-icon-bar\"\n style={styles.tileIconBar}\n >\n <CheckButton\n isSelected={item.isSelected}\n isVisible={item.isSelected || (isSelectable && hover)}\n onClick={handleCheckButtonClick}\n />\n </div>\n\n {!!item.tags && (\n <div\n className=\"ReactGridGallery_tile-bottom-bar\"\n style={styles.bottomBar}\n >\n {item.tags.map((tag, index) => (\n <div\n key={tag.key || index}\n title={tag.title}\n style={styles.tagItemBlock}\n >\n <span style={getStyle(tagStyle, styles.tagItem, styleContext)}>\n {tag.value}\n </span>\n </div>\n ))}\n </div>\n )}\n\n {!!item.customOverlay && (\n <div\n className=\"ReactGridGallery_custom-overlay\"\n style={styles.customOverlay({ hover })}\n >\n {item.customOverlay}\n </div>\n )}\n\n <div\n className=\"ReactGridGallery_tile-overlay\"\n style={styles.tileOverlay({\n showOverlay: hover && !item.isSelected && isSelectable,\n })}\n />\n\n <div\n className=\"ReactGridGallery_tile-viewport\"\n data-testid=\"grid-gallery-item_viewport\"\n style={getStyle(tileViewportStyle, styles.tileViewport, styleContext)}\n onClick={handleViewportClick}\n >\n {ThumbnailImageComponent ? (\n <ThumbnailImageComponent\n {...thumbnailImageProps}\n imageProps={thumbnailProps}\n />\n ) : (\n <img {...thumbnailProps} />\n )}\n </div>\n {item.thumbnailCaption && (\n <div\n className=\"ReactGridGallery_tile-description\"\n style={styles.tileDescription}\n >\n {item.thumbnailCaption}\n </div>\n )}\n </div>\n );\n};\n","import { useRef, useCallback, useState } from \"react\";\n\nexport function useContainerWidth(defaultContainerWidth: number) {\n const ref = useRef<HTMLElement | null>(null);\n const observerRef = useRef<ResizeObserver>();\n\n const [containerWidth, setContainerWidth] = useState(defaultContainerWidth);\n\n const containerRef = useCallback((node: HTMLElement | null) => {\n observerRef.current?.disconnect();\n observerRef.current = undefined;\n\n ref.current = node;\n\n const updateWidth = () => {\n if (!ref.current) {\n return;\n }\n let width = ref.current.clientWidth;\n try {\n width = ref.current.getBoundingClientRect().width;\n } catch (err) {}\n setContainerWidth(Math.floor(width));\n };\n\n updateWidth();\n\n if (node && typeof ResizeObserver !== \"undefined\") {\n observerRef.current = new ResizeObserver(updateWidth);\n observerRef.current.observe(node);\n }\n }, []);\n\n return { containerRef, containerWidth };\n}\n","import {\n ImageExtended,\n Image,\n BuildLayoutOptions,\n ImageExtendedRow,\n} from \"./types\";\n\nconst calculateCutOff = <T extends ImageExtended = ImageExtended>(\n items: T[],\n totalRowWidth: number,\n protrudingWidth: number\n) => {\n const cutOff: number[] = [];\n let cutSum = 0;\n for (let i in items) {\n const item = items[i];\n const fractionOfWidth = item.scaledWidth / totalRowWidth;\n cutOff[i] = Math.floor(fractionOfWidth * protrudingWidth);\n cutSum += cutOff[i];\n }\n\n let stillToCutOff = protrudingWidth - cutSum;\n while (stillToCutOff > 0) {\n for (let i in cutOff) {\n cutOff[i]++;\n stillToCutOff--;\n if (stillToCutOff < 0) break;\n }\n }\n return cutOff;\n};\n\nconst getRow = <T extends Image = Image>(\n images: T[],\n { containerWidth, rowHeight, margin }: BuildLayoutOptions\n): [ImageExtendedRow<T>, T[]] => {\n const row: ImageExtendedRow<T> = [];\n const imgMargin = 2 * margin;\n const items = [...images];\n\n let totalRowWidth = 0;\n while (items.length > 0 && totalRowWidth < containerWidth) {\n const item = items.shift();\n const scaledWidth = Math.floor(rowHeight * (item.width / item.height));\n const extendedItem: ImageExtended<T> = {\n ...item,\n scaledHeight: rowHeight,\n scaledWidth,\n viewportWidth: scaledWidth,\n marginLeft: 0,\n };\n row.push(extendedItem);\n totalRowWidth += extendedItem.scaledWidth + imgMargin;\n }\n\n const protrudingWidth = totalRowWidth - containerWidth;\n if (row.length > 0 && protrudingWidth > 0) {\n const cutoff = calculateCutOff(row, totalRowWidth, protrudingWidth);\n for (const i in row) {\n const pixelsToRemove = cutoff[i];\n const item = row[i];\n item.marginLeft = -Math.abs(Math.floor(pixelsToRemove / 2));\n item.viewportWidth = item.scaledWidth - pixelsToRemove;\n }\n }\n\n return [row, items];\n};\n\nconst getRows = <T extends Image = Image>(\n images: T[],\n options: BuildLayoutOptions,\n rows: ImageExtendedRow<T>[] = []\n): ImageExtendedRow<T>[] => {\n const [row, imagesLeft] = getRow(images, options);\n const nextRows = [...rows, row];\n\n if (options.maxRows && nextRows.length >= options.maxRows) {\n return nextRows;\n }\n if (imagesLeft.length) {\n return getRows(imagesLeft, options, nextRows);\n }\n return nextRows;\n};\n\nexport const buildLayout = <T extends Image = Image>(\n images: T[],\n { containerWidth, maxRows, rowHeight, margin }: BuildLayoutOptions\n): ImageExtendedRow<T>[] => {\n rowHeight = typeof rowHeight === \"undefined\" ? 180 : rowHeight;\n margin = typeof margin === \"undefined\" ? 2 : margin;\n\n if (!images) return [];\n if (!containerWidth) return [];\n\n const options = { containerWidth, maxRows, rowHeight, margin };\n return getRows(images, options);\n};\n\nexport const buildLayoutFlat = <T extends Image = Image>(\n images: T[],\n options: BuildLayoutOptions\n): ImageExtendedRow<T> => {\n const rows = buildLayout(images, options);\n return [].concat.apply([], rows);\n};\n","import { MouseEvent } from \"react\";\nimport { Image } from \"./Image\";\nimport { useContainerWidth } from \"./useContainerWidth\";\nimport { buildLayoutFlat } from \"./buildLayout\";\nimport { Image as ImageInterface, GalleryProps } from \"./types\";\nimport * as styles from \"./styles\";\n\nexport const Gallery = <T extends ImageInterface>({\n images,\n id = \"ReactGridGallery\",\n enableImageSelection = true,\n onSelect = () => {},\n rowHeight = 180,\n maxRows,\n margin = 2,\n defaultContainerWidth = 0,\n onClick = () => {},\n tileViewportStyle,\n thumbnailStyle,\n tagStyle,\n thumbnailImageComponent,\n}: GalleryProps<T>): JSX.Element => {\n const { containerRef, containerWidth } = useContainerWidth(\n defaultContainerWidth\n );\n\n const thumbnails = buildLayoutFlat<T>(images, {\n containerWidth,\n maxRows,\n rowHeight,\n margin,\n });\n\n const handleSelect = (index: number, event: MouseEvent<HTMLElement>) => {\n event.preventDefault();\n onSelect(index, images[index], event);\n };\n\n const handleClick = (index: number, event: MouseEvent<HTMLElement>) => {\n onClick(index, images[index], event);\n };\n\n return (\n <div id={id} className=\"ReactGridGallery\" ref={containerRef}>\n <div style={styles.gallery}>\n {thumbnails.map((item, index) => (\n <Image\n key={item.key || index}\n item={item}\n index={index}\n margin={margin}\n height={rowHeight}\n isSelectable={enableImageSelection}\n onClick={handleClick}\n onSelect={handleSelect}\n tagStyle={tagStyle}\n tileViewportStyle={tileViewportStyle}\n thumbnailStyle={thumbnailStyle}\n thumbnailImageComponent={thumbnailImageComponent}\n />\n ))}\n </div>\n </div>\n );\n};\n\nGallery.displayName = \"Gallery\";\n"],"names":["_jsx","styles.checkButton","_jsxs","styles.thumbnail","styles.galleryItem","styles.tileIconBar","styles.bottomBar","styles.tagItemBlock","styles.tagItem","styles.customOverlay","styles.tileOverlay","styles.tileViewport","styles.tileDescription","styles.gallery"],"mappings":"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"} \ No newline at end of file diff --git a/src/components/react-grid-gallery/dist/react-grid-gallery.umd.js b/src/components/react-grid-gallery/dist/react-grid-gallery.umd.js deleted file mode 100644 index 3a4a5f37bc442f2d63d38b08428d690c2f9f898b..0000000000000000000000000000000000000000 --- a/src/components/react-grid-gallery/dist/react-grid-gallery.umd.js +++ /dev/null @@ -1,405 +0,0 @@ -(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('react')) : - typeof define === 'function' && define.amd ? define(['exports', 'react'], factory) : - (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.ReactGridGallery = {}, global.React)); -})(this, (function (exports, require$$0) { 'use strict'; - - function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; } - - var require$$0__default = /*#__PURE__*/_interopDefaultLegacy(require$$0); - - /****************************************************************************** - Copyright (c) Microsoft Corporation. - - Permission to use, copy, modify, and/or distribute this software for any - purpose with or without fee is hereby granted. - - THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY - AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, - INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM - LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR - OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - ***************************************************************************** */ - - var __assign = function() { - __assign = Object.assign || function __assign(t) { - for (var s, i = 1, n = arguments.length; i < n; i++) { - s = arguments[i]; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; - } - return t; - }; - return __assign.apply(this, arguments); - }; - - function __spreadArray(to, from, pack) { - if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { - if (ar || !(i in from)) { - if (!ar) ar = Array.prototype.slice.call(from, 0, i); - ar[i] = from[i]; - } - } - return to.concat(ar || Array.prototype.slice.call(from)); - } - - typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) { - var e = new Error(message); - return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e; - }; - - var jsxRuntime = {exports: {}}; - - var reactJsxRuntime_production_min = {}; - - /** - * @license React - * react-jsx-runtime.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - - var hasRequiredReactJsxRuntime_production_min; - - function requireReactJsxRuntime_production_min () { - if (hasRequiredReactJsxRuntime_production_min) return reactJsxRuntime_production_min; - hasRequiredReactJsxRuntime_production_min = 1; - var f=require$$0__default["default"],k=Symbol.for("react.element"),l=Symbol.for("react.fragment"),m=Object.prototype.hasOwnProperty,n=f.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,p={key:!0,ref:!0,__self:!0,__source:!0}; - function q(c,a,g){var b,d={},e=null,h=null;void 0!==g&&(e=""+g);void 0!==a.key&&(e=""+a.key);void 0!==a.ref&&(h=a.ref);for(b in a)m.call(a,b)&&!p.hasOwnProperty(b)&&(d[b]=a[b]);if(c&&c.defaultProps)for(b in a=c.defaultProps,a)void 0===d[b]&&(d[b]=a[b]);return {$$typeof:k,type:c,key:e,ref:h,props:d,_owner:n.current}}reactJsxRuntime_production_min.Fragment=l;reactJsxRuntime_production_min.jsx=q;reactJsxRuntime_production_min.jsxs=q; - return reactJsxRuntime_production_min; - } - - { - jsxRuntime.exports = requireReactJsxRuntime_production_min(); - } - - var jsxRuntimeExports = jsxRuntime.exports; - - var getStyle = function (styleProp, fallback, context) { - if (typeof styleProp === "function") { - return styleProp(context); - } - if (typeof styleProp === "object") { - return styleProp; - } - return fallback(context); - }; - var rotationTransformMap = { - 3: "rotate(180deg)", - 2: "rotateY(180deg)", - 4: "rotate(180deg) rotateY(180deg)", - 5: "rotate(270deg) rotateY(180deg)", - 6: "rotate(90deg)", - 7: "rotate(90deg) rotateY(180deg)", - 8: "rotate(270deg)", - }; - var SELECTION_MARGIN = 16; - var gallery = { - display: "flex", - flexWrap: "wrap", - }; - var thumbnail = function (_a) { - var item = _a.item; - var rotationTransformValue = rotationTransformMap[item.orientation]; - var style = { - cursor: "pointer", - maxWidth: "none", - width: item.scaledWidth, - height: item.scaledHeight, - marginLeft: item.marginLeft, - marginTop: 0, - transform: rotationTransformValue, - }; - if (item.isSelected) { - var ratio = item.scaledWidth / item.scaledHeight; - var viewportHeight = item.scaledHeight - SELECTION_MARGIN * 2; - var viewportWidth = item.viewportWidth - SELECTION_MARGIN * 2; - var height = void 0, width = void 0; - if (item.scaledWidth > item.scaledHeight) { - width = item.scaledWidth - SELECTION_MARGIN * 2; - height = Math.floor(width / ratio); - } - else { - height = item.scaledHeight - SELECTION_MARGIN * 2; - width = Math.floor(height * ratio); - } - var marginTop = Math.abs(Math.floor((viewportHeight - height) / 2)); - var marginLeft = Math.abs(Math.floor((viewportWidth - width) / 2)); - style.width = width; - style.height = height; - style.marginLeft = marginLeft === 0 ? 0 : -marginLeft; - style.marginTop = marginTop === 0 ? 0 : -marginTop; - } - return style; - }; - var tileViewport = function (_a) { - var item = _a.item; - var styles = { - width: item.viewportWidth, - height: item.scaledHeight, - overflow: "hidden", - }; - if (item.nano) { - styles.background = "url(".concat(item.nano, ")"); - styles.backgroundSize = "cover"; - styles.backgroundPosition = "center center"; - } - if (item.isSelected) { - styles.width = item.viewportWidth - SELECTION_MARGIN * 2; - styles.height = item.scaledHeight - SELECTION_MARGIN * 2; - styles.margin = SELECTION_MARGIN; - } - return styles; - }; - var customOverlay = function (_a) { - var hover = _a.hover; - return ({ - pointerEvents: "none", - opacity: hover ? 1 : 0, - position: "absolute", - height: "100%", - width: "100%", - }); - }; - var galleryItem = function (_a) { - var margin = _a.margin; - return ({ - margin: margin, - WebkitUserSelect: "none", - position: "relative", - background: "#eee", - padding: "0px", - }); - }; - var tileOverlay = function (_a) { - var showOverlay = _a.showOverlay; - return ({ - pointerEvents: "none", - opacity: 1, - position: "absolute", - height: "100%", - width: "100%", - background: showOverlay - ? "linear-gradient(to bottom,rgba(0,0,0,0.26),transparent 56px,transparent)" - : "none", - }); - }; - var tileIconBar = { - pointerEvents: "none", - opacity: 1, - position: "absolute", - height: "36px", - width: "100%", - }; - var tileDescription = { - background: "white", - width: "100%", - margin: 0, - userSelect: "text", - WebkitUserSelect: "text", - MozUserSelect: "text", - overflow: "hidden", - }; - var bottomBar = { - padding: "2px", - pointerEvents: "none", - position: "absolute", - minHeight: "0px", - maxHeight: "160px", - width: "100%", - bottom: "0px", - overflow: "hidden", - }; - var tagItemBlock = { - display: "inline-block", - cursor: "pointer", - pointerEvents: "visible", - margin: "2px", - }; - var tagItem = function () { return ({ - display: "inline", - padding: ".2em .6em .3em", - fontSize: "75%", - fontWeight: "600", - lineHeight: "1", - color: "yellow", - background: "rgba(0,0,0,0.65)", - textAlign: "center", - whiteSpace: "nowrap", - verticalAlign: "baseline", - borderRadius: ".25em", - }); }; - - - - var Image = function (_a) { - var item = _a.item, ThumbnailImageComponent = _a.thumbnailImageComponent, _b = _a.isSelectable, isSelectable = _b === void 0 ? true : _b, thumbnailStyle = _a.thumbnailStyle, tagStyle = _a.tagStyle, tileViewportStyle = _a.tileViewportStyle, margin = _a.margin, index = _a.index, onSelect = _a.onSelect, onClick = _a.onClick; - var styleContext = { item: item }; - var _c = require$$0.useState(false), hover = _c[0], setHover = _c[1]; - var thumbnailProps = { - key: index, - "data-testid": "grid-gallery-item_thumbnail", - src: item.src, - alt: item.alt ? item.alt : "", - style: getStyle(thumbnailStyle, thumbnail, styleContext), - }; - var handleCheckButtonClick = function (event) { - if (!isSelectable) { - return; - } - onSelect(index, event); - }; - var handleViewportClick = function (event) { - onClick(index, event); - }; - var thumbnailImageProps = { - item: item, - index: index, - margin: margin, - onSelect: onSelect, - onClick: onClick, - isSelectable: isSelectable, - tileViewportStyle: tileViewportStyle, - thumbnailStyle: thumbnailStyle, - tagStyle: tagStyle, - }; - return (jsxRuntimeExports.jsxs("div", __assign({ className: "ReactGridGallery_tile", "data-testid": "grid-gallery-item", onMouseEnter: function () { return setHover(true); }, onMouseLeave: function () { return setHover(false); }, style: galleryItem({ margin: margin }) }, { children: [jsxRuntimeExports.jsx("div", __assign({ className: "ReactGridGallery_tile-icon-bar", style: tileIconBar }, { children: jsxRuntimeExports.jsx(CheckButton, { isSelected: item.isSelected, isVisible: item.isSelected || (isSelectable && hover), onClick: handleCheckButtonClick }) })), !!item.tags && (jsxRuntimeExports.jsx("div", __assign({ className: "ReactGridGallery_tile-bottom-bar", style: bottomBar }, { children: item.tags.map(function (tag, index) { return (jsxRuntimeExports.jsx("div", __assign({ style: tagItemBlock }, { children: jsxRuntimeExports.jsx("span", __assign({ style: getStyle(tagStyle, tagItem, styleContext) }, { children: tag.value })) }), tag.key || index)); }) }))), !!item.customOverlay && (jsxRuntimeExports.jsx("div", __assign({ className: "ReactGridGallery_custom-overlay", style: customOverlay({ hover: hover }) }, { children: item.customOverlay }))), jsxRuntimeExports.jsx("div", { className: "ReactGridGallery_tile-overlay", style: tileOverlay({ - showOverlay: hover && !item.isSelected && isSelectable, - }) }), jsxRuntimeExports.jsx("div", __assign({ className: "ReactGridGallery_tile-viewport", "data-testid": "grid-gallery-item_viewport", style: getStyle(tileViewportStyle, tileViewport, styleContext), onClick: handleViewportClick }, { children: ThumbnailImageComponent ? (jsxRuntimeExports.jsx(ThumbnailImageComponent, __assign({}, thumbnailImageProps, { imageProps: thumbnailProps }))) : (jsxRuntimeExports.jsx("img", __assign({}, thumbnailProps))) })), item.thumbnailCaption && (jsxRuntimeExports.jsx("div", __assign({ className: "ReactGridGallery_tile-description", style: tileDescription }, { children: item.thumbnailCaption })))] }))); - }; - - function useContainerWidth(defaultContainerWidth) { - var ref = require$$0.useRef(null); - var observerRef = require$$0.useRef(); - var _a = require$$0.useState(defaultContainerWidth), containerWidth = _a[0], setContainerWidth = _a[1]; - var containerRef = require$$0.useCallback(function (node) { - var _a; - (_a = observerRef.current) === null || _a === void 0 ? void 0 : _a.disconnect(); - observerRef.current = undefined; - ref.current = node; - var updateWidth = function () { - if (!ref.current) { - return; - } - var width = ref.current.clientWidth; - try { - width = ref.current.getBoundingClientRect().width; - } - catch (err) { } - setContainerWidth(Math.floor(width)); - }; - updateWidth(); - if (node && typeof ResizeObserver !== "undefined") { - observerRef.current = new ResizeObserver(updateWidth); - observerRef.current.observe(node); - } - }, []); - return { containerRef: containerRef, containerWidth: containerWidth }; - } - - var calculateCutOff = function (items, totalRowWidth, protrudingWidth) { - var cutOff = []; - var cutSum = 0; - for (var i in items) { - var item = items[i]; - var fractionOfWidth = item.scaledWidth / totalRowWidth; - cutOff[i] = Math.floor(fractionOfWidth * protrudingWidth); - cutSum += cutOff[i]; - } - var stillToCutOff = protrudingWidth - cutSum; - while (stillToCutOff > 0) { - for (var i in cutOff) { - cutOff[i]++; - stillToCutOff--; - if (stillToCutOff < 0) - break; - } - } - return cutOff; - }; - var getRow = function (images, _a) { - var containerWidth = _a.containerWidth, rowHeight = _a.rowHeight, margin = _a.margin; - var row = []; - var imgMargin = 2 * margin; - var items = __spreadArray([], images, true); - var totalRowWidth = 0; - while (items.length > 0 && totalRowWidth < containerWidth) { - var item = items.shift(); - var scaledWidth = Math.floor(rowHeight * (item.width / item.height)); - var extendedItem = __assign(__assign({}, item), { scaledHeight: rowHeight, scaledWidth: scaledWidth, viewportWidth: scaledWidth, marginLeft: 0 }); - row.push(extendedItem); - totalRowWidth += extendedItem.scaledWidth + imgMargin; - } - var protrudingWidth = totalRowWidth - containerWidth; - if (row.length > 0 && protrudingWidth > 0) { - var cutoff = calculateCutOff(row, totalRowWidth, protrudingWidth); - for (var i in row) { - var pixelsToRemove = cutoff[i]; - var item = row[i]; - item.marginLeft = -Math.abs(Math.floor(pixelsToRemove / 2)); - item.viewportWidth = item.scaledWidth - pixelsToRemove; - } - } - return [row, items]; - }; - var getRows = function (images, options, rows) { - if (rows === void 0) { rows = []; } - var _a = getRow(images, options), row = _a[0], imagesLeft = _a[1]; - var nextRows = __spreadArray(__spreadArray([], rows, true), [row], false); - if (options.maxRows && nextRows.length >= options.maxRows) { - return nextRows; - } - if (imagesLeft.length) { - return getRows(imagesLeft, options, nextRows); - } - return nextRows; - }; - var buildLayout = function (images, _a) { - var containerWidth = _a.containerWidth, maxRows = _a.maxRows, rowHeight = _a.rowHeight, margin = _a.margin; - rowHeight = typeof rowHeight === "undefined" ? 180 : rowHeight; - margin = typeof margin === "undefined" ? 2 : margin; - if (!images) - return []; - if (!containerWidth) - return []; - var options = { containerWidth: containerWidth, maxRows: maxRows, rowHeight: rowHeight, margin: margin }; - return getRows(images, options); - }; - var buildLayoutFlat = function (images, options) { - var rows = buildLayout(images, options); - return [].concat.apply([], rows); - }; - - var Gallery = function (_a) { - var images = _a.images, _b = _a.id, id = _b === void 0 ? "ReactGridGallery" : _b, _c = _a.enableImageSelection, enableImageSelection = _c === void 0 ? true : _c, _d = _a.onSelect, onSelect = _d === void 0 ? function () { } : _d, _e = _a.rowHeight, rowHeight = _e === void 0 ? 180 : _e, maxRows = _a.maxRows, _f = _a.margin, margin = _f === void 0 ? 2 : _f, _g = _a.defaultContainerWidth, defaultContainerWidth = _g === void 0 ? 0 : _g, _h = _a.onClick, onClick = _h === void 0 ? function () { } : _h, tileViewportStyle = _a.tileViewportStyle, thumbnailStyle = _a.thumbnailStyle, tagStyle = _a.tagStyle, thumbnailImageComponent = _a.thumbnailImageComponent; - var _j = useContainerWidth(defaultContainerWidth), containerRef = _j.containerRef, containerWidth = _j.containerWidth; - var thumbnails = buildLayoutFlat(images, { - containerWidth: containerWidth, - maxRows: maxRows, - rowHeight: rowHeight, - margin: margin, - }); - var handleSelect = function (index, event) { - event.preventDefault(); - onSelect(index, images[index], event); - }; - var handleClick = function (index, event) { - onClick(index, images[index], event); - }; - return (jsxRuntimeExports.jsx("div", __assign({ id: id, className: "ReactGridGallery", ref: containerRef }, { children: jsxRuntimeExports.jsx("div", __assign({ style: gallery }, { children: thumbnails.map(function (item, index) { return (jsxRuntimeExports.jsx(Image, { item: item, index: index, margin: margin, height: rowHeight, isSelectable: enableImageSelection, onClick: handleClick, onSelect: handleSelect, tagStyle: tagStyle, tileViewportStyle: tileViewportStyle, thumbnailStyle: thumbnailStyle, thumbnailImageComponent: thumbnailImageComponent }, item.key || index)); }) })) }))); - }; - Gallery.displayName = "Gallery"; - - exports.CheckButton = CheckButton; - exports.Gallery = Gallery; - exports.buildLayout = buildLayout; - exports.buildLayoutFlat = buildLayoutFlat; - - Object.defineProperty(exports, '__esModule', { value: true }); - -})); -//# sourceMappingURL=react-grid-gallery.umd.js.map diff --git a/src/components/react-grid-gallery/dist/react-grid-gallery.umd.js.map b/src/components/react-grid-gallery/dist/react-grid-gallery.umd.js.map deleted file mode 100644 index 6da36a9e48ea6ccf3c58c783d7141406a7c4c206..0000000000000000000000000000000000000000 --- a/src/components/react-grid-gallery/dist/react-grid-gallery.umd.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"react-grid-gallery.umd.js","sources":["../node_modules/react/cjs/react-jsx-runtime.production.min.js","../node_modules/react/jsx-runtime.js","../src/styles.ts","../src/CheckButton.tsx","../src/Image.tsx","../src/useContainerWidth.ts","../src/buildLayout.ts","../src/Gallery.tsx"],"sourcesContent":["/**\n * @license React\n * react-jsx-runtime.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var f=require(\"react\"),k=Symbol.for(\"react.element\"),l=Symbol.for(\"react.fragment\"),m=Object.prototype.hasOwnProperty,n=f.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,p={key:!0,ref:!0,__self:!0,__source:!0};\nfunction q(c,a,g){var b,d={},e=null,h=null;void 0!==g&&(e=\"\"+g);void 0!==a.key&&(e=\"\"+a.key);void 0!==a.ref&&(h=a.ref);for(b in a)m.call(a,b)&&!p.hasOwnProperty(b)&&(d[b]=a[b]);if(c&&c.defaultProps)for(b in a=c.defaultProps,a)void 0===d[b]&&(d[b]=a[b]);return{$$typeof:k,type:c,key:e,ref:h,props:d,_owner:n.current}}exports.Fragment=l;exports.jsx=q;exports.jsxs=q;\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-jsx-runtime.production.min.js');\n} else {\n module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n","import { CSSProperties } from \"react\";\nimport {\n ImageExtended,\n StyleFunction,\n StyleFunctionContext,\n StyleProp,\n} from \"./types\";\n\nexport const getStyle = (\n styleProp: StyleProp | undefined,\n fallback: StyleFunction,\n context: StyleFunctionContext\n): CSSProperties => {\n if (typeof styleProp === \"function\") {\n return styleProp(context);\n }\n if (typeof styleProp === \"object\") {\n return styleProp;\n }\n return fallback(context);\n};\n\nconst rotationTransformMap: Record<number, string> = {\n 3: \"rotate(180deg)\",\n 2: \"rotateY(180deg)\",\n 4: \"rotate(180deg) rotateY(180deg)\",\n 5: \"rotate(270deg) rotateY(180deg)\",\n 6: \"rotate(90deg)\",\n 7: \"rotate(90deg) rotateY(180deg)\",\n 8: \"rotate(270deg)\",\n};\n\nconst SELECTION_MARGIN = 16;\n\nexport const gallery: CSSProperties = {\n display: \"flex\",\n flexWrap: \"wrap\",\n};\n\nexport const thumbnail = ({ item }: { item: ImageExtended }): CSSProperties => {\n const rotationTransformValue = rotationTransformMap[item.orientation];\n\n const style = {\n cursor: \"pointer\",\n maxWidth: \"none\",\n width: item.scaledWidth,\n height: item.scaledHeight,\n marginLeft: item.marginLeft,\n marginTop: 0,\n transform: rotationTransformValue,\n };\n\n if (item.isSelected) {\n const ratio = item.scaledWidth / item.scaledHeight;\n const viewportHeight = item.scaledHeight - SELECTION_MARGIN * 2;\n const viewportWidth = item.viewportWidth - SELECTION_MARGIN * 2;\n\n let height, width;\n if (item.scaledWidth > item.scaledHeight) {\n width = item.scaledWidth - SELECTION_MARGIN * 2;\n height = Math.floor(width / ratio);\n } else {\n height = item.scaledHeight - SELECTION_MARGIN * 2;\n width = Math.floor(height * ratio);\n }\n\n const marginTop = Math.abs(Math.floor((viewportHeight - height) / 2));\n const marginLeft = Math.abs(Math.floor((viewportWidth - width) / 2));\n\n style.width = width;\n style.height = height;\n style.marginLeft = marginLeft === 0 ? 0 : -marginLeft;\n style.marginTop = marginTop === 0 ? 0 : -marginTop;\n }\n\n return style;\n};\n\nexport const tileViewport = ({\n item,\n}: {\n item: ImageExtended;\n}): CSSProperties => {\n const styles: CSSProperties = {\n width: item.viewportWidth,\n height: item.scaledHeight,\n overflow: \"hidden\",\n };\n if (item.nano) {\n styles.background = `url(${item.nano})`;\n styles.backgroundSize = \"cover\";\n styles.backgroundPosition = \"center center\";\n }\n if (item.isSelected) {\n styles.width = item.viewportWidth - SELECTION_MARGIN * 2;\n styles.height = item.scaledHeight - SELECTION_MARGIN * 2;\n styles.margin = SELECTION_MARGIN;\n }\n return styles;\n};\n\nexport const customOverlay = ({\n hover,\n}: {\n hover: boolean;\n}): CSSProperties => ({\n pointerEvents: \"none\",\n opacity: hover ? 1 : 0,\n position: \"absolute\",\n height: \"100%\",\n width: \"100%\",\n});\n\nexport const galleryItem = ({ margin }: { margin: number }): CSSProperties => ({\n margin,\n WebkitUserSelect: \"none\",\n position: \"relative\",\n background: \"#eee\",\n padding: \"0px\",\n});\n\nexport const tileOverlay = ({\n showOverlay,\n}: {\n showOverlay: boolean;\n}): CSSProperties => ({\n pointerEvents: \"none\",\n opacity: 1,\n position: \"absolute\",\n height: \"100%\",\n width: \"100%\",\n background: showOverlay\n ? \"linear-gradient(to bottom,rgba(0,0,0,0.26),transparent 56px,transparent)\"\n : \"none\",\n});\n\nexport const tileIconBar: CSSProperties = {\n pointerEvents: \"none\",\n opacity: 1,\n position: \"absolute\",\n height: \"36px\",\n width: \"100%\",\n};\n\nexport const tileDescription: CSSProperties = {\n background: \"white\",\n width: \"100%\",\n margin: 0,\n userSelect: \"text\",\n WebkitUserSelect: \"text\",\n MozUserSelect: \"text\",\n overflow: \"hidden\",\n};\n\nexport const bottomBar: CSSProperties = {\n padding: \"2px\",\n pointerEvents: \"none\",\n position: \"absolute\",\n minHeight: \"0px\",\n maxHeight: \"160px\",\n width: \"100%\",\n bottom: \"0px\",\n overflow: \"hidden\",\n};\n\nexport const tagItemBlock: CSSProperties = {\n display: \"inline-block\",\n cursor: \"pointer\",\n pointerEvents: \"visible\",\n margin: \"2px\",\n};\n\nexport const tagItem = (): CSSProperties => ({\n display: \"inline\",\n padding: \".2em .6em .3em\",\n fontSize: \"75%\",\n fontWeight: \"600\",\n lineHeight: \"1\",\n color: \"yellow\",\n background: \"rgba(0,0,0,0.65)\",\n textAlign: \"center\",\n whiteSpace: \"nowrap\",\n verticalAlign: \"baseline\",\n borderRadius: \".25em\",\n});\n\nexport const checkButton = ({\n isVisible,\n}: {\n isVisible: boolean;\n}): CSSProperties => ({\n visibility: isVisible ? \"visible\" : \"hidden\",\n background: \"none\",\n float: \"left\",\n width: 36,\n height: 36,\n border: \"none\",\n padding: 6,\n cursor: \"pointer\",\n pointerEvents: \"visible\",\n});\n","import { useState } from \"react\";\nimport * as styles from \"./styles\";\nimport { CheckButtonProps } from \"./types\";\n\nexport const CheckButton = ({\n isSelected = false,\n isVisible = true,\n onClick,\n color = \"#FFFFFFB2\",\n selectedColor = \"#4285F4FF\",\n hoverColor = \"#FFFFFFFF\",\n}: CheckButtonProps): JSX.Element => {\n const [hover, setHover] = useState(false);\n\n const circleStyle = { display: isSelected ? \"block\" : \"none\" };\n const fillColor = isSelected ? selectedColor : hover ? hoverColor : color;\n\n const handleMouseOver = () => setHover(true);\n const handleMouseOut = () => setHover(false);\n\n return (\n <div\n data-testid=\"grid-gallery-item_check-button\"\n title=\"Select\"\n style={styles.checkButton({ isVisible })}\n onClick={onClick}\n onMouseOver={handleMouseOver}\n onMouseOut={handleMouseOut}\n >\n <svg\n fill={fillColor}\n height=\"24\"\n viewBox=\"0 0 24 24\"\n width=\"24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <radialGradient\n id=\"shadow\"\n cx=\"38\"\n cy=\"95.488\"\n r=\"10.488\"\n gradientTransform=\"matrix(1 0 0 -1 -26 109)\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop offset=\".832\" stopColor=\"#010101\"></stop>\n <stop offset=\"1\" stopColor=\"#010101\" stopOpacity=\"0\"></stop>\n </radialGradient>\n\n <circle\n style={circleStyle}\n opacity=\".26\"\n fill=\"url(#shadow)\"\n cx=\"12\"\n cy=\"13.512\"\n r=\"10.488\"\n />\n <circle style={circleStyle} fill=\"#FFF\" cx=\"12\" cy=\"12.2\" r=\"8.292\" />\n <path d=\"M0 0h24v24H0z\" fill=\"none\" />\n <path d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-2 15l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z\" />\n </svg>\n </div>\n );\n};\n","import { useState, MouseEvent } from \"react\";\nimport { CheckButton } from \"./CheckButton\";\nimport { ImageExtended, ImageProps } from \"./types\";\nimport * as styles from \"./styles\";\nimport { getStyle } from \"./styles\";\n\nexport const Image = <T extends ImageExtended>({\n item,\n thumbnailImageComponent: ThumbnailImageComponent,\n isSelectable = true,\n thumbnailStyle,\n tagStyle,\n tileViewportStyle,\n margin,\n index,\n onSelect,\n onClick,\n}: ImageProps<T>): JSX.Element => {\n const styleContext = { item };\n\n const [hover, setHover] = useState(false);\n\n const thumbnailProps = {\n key: index,\n \"data-testid\": \"grid-gallery-item_thumbnail\",\n src: item.src,\n alt: item.alt ? item.alt : \"\",\n title: typeof item.caption === \"string\" ? item.caption : null,\n style: getStyle(thumbnailStyle, styles.thumbnail, styleContext),\n };\n\n const handleCheckButtonClick = (event: MouseEvent<HTMLElement>) => {\n if (!isSelectable) {\n return;\n }\n onSelect(index, event);\n };\n\n const handleViewportClick = (event: MouseEvent<HTMLElement>) => {\n onClick(index, event);\n };\n\n const thumbnailImageProps = {\n item,\n index,\n margin,\n onSelect,\n onClick,\n isSelectable,\n tileViewportStyle,\n thumbnailStyle,\n tagStyle,\n };\n\n return (\n <div\n className=\"ReactGridGallery_tile\"\n data-testid=\"grid-gallery-item\"\n onMouseEnter={() => setHover(true)}\n onMouseLeave={() => setHover(false)}\n style={styles.galleryItem({ margin })}\n >\n <div\n className=\"ReactGridGallery_tile-icon-bar\"\n style={styles.tileIconBar}\n >\n <CheckButton\n isSelected={item.isSelected}\n isVisible={item.isSelected || (isSelectable && hover)}\n onClick={handleCheckButtonClick}\n />\n </div>\n\n {!!item.tags && (\n <div\n className=\"ReactGridGallery_tile-bottom-bar\"\n style={styles.bottomBar}\n >\n {item.tags.map((tag, index) => (\n <div\n key={tag.key || index}\n title={tag.title}\n style={styles.tagItemBlock}\n >\n <span style={getStyle(tagStyle, styles.tagItem, styleContext)}>\n {tag.value}\n </span>\n </div>\n ))}\n </div>\n )}\n\n {!!item.customOverlay && (\n <div\n className=\"ReactGridGallery_custom-overlay\"\n style={styles.customOverlay({ hover })}\n >\n {item.customOverlay}\n </div>\n )}\n\n <div\n className=\"ReactGridGallery_tile-overlay\"\n style={styles.tileOverlay({\n showOverlay: hover && !item.isSelected && isSelectable,\n })}\n />\n\n <div\n className=\"ReactGridGallery_tile-viewport\"\n data-testid=\"grid-gallery-item_viewport\"\n style={getStyle(tileViewportStyle, styles.tileViewport, styleContext)}\n onClick={handleViewportClick}\n >\n {ThumbnailImageComponent ? (\n <ThumbnailImageComponent\n {...thumbnailImageProps}\n imageProps={thumbnailProps}\n />\n ) : (\n <img {...thumbnailProps} />\n )}\n </div>\n {item.thumbnailCaption && (\n <div\n className=\"ReactGridGallery_tile-description\"\n style={styles.tileDescription}\n >\n {item.thumbnailCaption}\n </div>\n )}\n </div>\n );\n};\n","import { useRef, useCallback, useState } from \"react\";\n\nexport function useContainerWidth(defaultContainerWidth: number) {\n const ref = useRef<HTMLElement | null>(null);\n const observerRef = useRef<ResizeObserver>();\n\n const [containerWidth, setContainerWidth] = useState(defaultContainerWidth);\n\n const containerRef = useCallback((node: HTMLElement | null) => {\n observerRef.current?.disconnect();\n observerRef.current = undefined;\n\n ref.current = node;\n\n const updateWidth = () => {\n if (!ref.current) {\n return;\n }\n let width = ref.current.clientWidth;\n try {\n width = ref.current.getBoundingClientRect().width;\n } catch (err) {}\n setContainerWidth(Math.floor(width));\n };\n\n updateWidth();\n\n if (node && typeof ResizeObserver !== \"undefined\") {\n observerRef.current = new ResizeObserver(updateWidth);\n observerRef.current.observe(node);\n }\n }, []);\n\n return { containerRef, containerWidth };\n}\n","import {\n ImageExtended,\n Image,\n BuildLayoutOptions,\n ImageExtendedRow,\n} from \"./types\";\n\nconst calculateCutOff = <T extends ImageExtended = ImageExtended>(\n items: T[],\n totalRowWidth: number,\n protrudingWidth: number\n) => {\n const cutOff: number[] = [];\n let cutSum = 0;\n for (let i in items) {\n const item = items[i];\n const fractionOfWidth = item.scaledWidth / totalRowWidth;\n cutOff[i] = Math.floor(fractionOfWidth * protrudingWidth);\n cutSum += cutOff[i];\n }\n\n let stillToCutOff = protrudingWidth - cutSum;\n while (stillToCutOff > 0) {\n for (let i in cutOff) {\n cutOff[i]++;\n stillToCutOff--;\n if (stillToCutOff < 0) break;\n }\n }\n return cutOff;\n};\n\nconst getRow = <T extends Image = Image>(\n images: T[],\n { containerWidth, rowHeight, margin }: BuildLayoutOptions\n): [ImageExtendedRow<T>, T[]] => {\n const row: ImageExtendedRow<T> = [];\n const imgMargin = 2 * margin;\n const items = [...images];\n\n let totalRowWidth = 0;\n while (items.length > 0 && totalRowWidth < containerWidth) {\n const item = items.shift();\n const scaledWidth = Math.floor(rowHeight * (item.width / item.height));\n const extendedItem: ImageExtended<T> = {\n ...item,\n scaledHeight: rowHeight,\n scaledWidth,\n viewportWidth: scaledWidth,\n marginLeft: 0,\n };\n row.push(extendedItem);\n totalRowWidth += extendedItem.scaledWidth + imgMargin;\n }\n\n const protrudingWidth = totalRowWidth - containerWidth;\n if (row.length > 0 && protrudingWidth > 0) {\n const cutoff = calculateCutOff(row, totalRowWidth, protrudingWidth);\n for (const i in row) {\n const pixelsToRemove = cutoff[i];\n const item = row[i];\n item.marginLeft = -Math.abs(Math.floor(pixelsToRemove / 2));\n item.viewportWidth = item.scaledWidth - pixelsToRemove;\n }\n }\n\n return [row, items];\n};\n\nconst getRows = <T extends Image = Image>(\n images: T[],\n options: BuildLayoutOptions,\n rows: ImageExtendedRow<T>[] = []\n): ImageExtendedRow<T>[] => {\n const [row, imagesLeft] = getRow(images, options);\n const nextRows = [...rows, row];\n\n if (options.maxRows && nextRows.length >= options.maxRows) {\n return nextRows;\n }\n if (imagesLeft.length) {\n return getRows(imagesLeft, options, nextRows);\n }\n return nextRows;\n};\n\nexport const buildLayout = <T extends Image = Image>(\n images: T[],\n { containerWidth, maxRows, rowHeight, margin }: BuildLayoutOptions\n): ImageExtendedRow<T>[] => {\n rowHeight = typeof rowHeight === \"undefined\" ? 180 : rowHeight;\n margin = typeof margin === \"undefined\" ? 2 : margin;\n\n if (!images) return [];\n if (!containerWidth) return [];\n\n const options = { containerWidth, maxRows, rowHeight, margin };\n return getRows(images, options);\n};\n\nexport const buildLayoutFlat = <T extends Image = Image>(\n images: T[],\n options: BuildLayoutOptions\n): ImageExtendedRow<T> => {\n const rows = buildLayout(images, options);\n return [].concat.apply([], rows);\n};\n","import { MouseEvent } from \"react\";\nimport { Image } from \"./Image\";\nimport { useContainerWidth } from \"./useContainerWidth\";\nimport { buildLayoutFlat } from \"./buildLayout\";\nimport { Image as ImageInterface, GalleryProps } from \"./types\";\nimport * as styles from \"./styles\";\n\nexport const Gallery = <T extends ImageInterface>({\n images,\n id = \"ReactGridGallery\",\n enableImageSelection = true,\n onSelect = () => {},\n rowHeight = 180,\n maxRows,\n margin = 2,\n defaultContainerWidth = 0,\n onClick = () => {},\n tileViewportStyle,\n thumbnailStyle,\n tagStyle,\n thumbnailImageComponent,\n}: GalleryProps<T>): JSX.Element => {\n const { containerRef, containerWidth } = useContainerWidth(\n defaultContainerWidth\n );\n\n const thumbnails = buildLayoutFlat<T>(images, {\n containerWidth,\n maxRows,\n rowHeight,\n margin,\n });\n\n const handleSelect = (index: number, event: MouseEvent<HTMLElement>) => {\n event.preventDefault();\n onSelect(index, images[index], event);\n };\n\n const handleClick = (index: number, event: MouseEvent<HTMLElement>) => {\n onClick(index, images[index], event);\n };\n\n return (\n <div id={id} className=\"ReactGridGallery\" ref={containerRef}>\n <div style={styles.gallery}>\n {thumbnails.map((item, index) => (\n <Image\n key={item.key || index}\n item={item}\n index={index}\n margin={margin}\n height={rowHeight}\n isSelectable={enableImageSelection}\n onClick={handleClick}\n onSelect={handleSelect}\n tagStyle={tagStyle}\n tileViewportStyle={tileViewportStyle}\n thumbnailStyle={thumbnailStyle}\n thumbnailImageComponent={thumbnailImageComponent}\n />\n ))}\n </div>\n </div>\n );\n};\n\nGallery.displayName = \"Gallery\";\n"],"names":["require$$0","jsxRuntimeModule","useState","_jsx","styles.checkButton","_jsxs","styles.thumbnail","styles.galleryItem","styles.tileIconBar","styles.bottomBar","styles.tagItemBlock","styles.tagItem","styles.customOverlay","styles.tileOverlay","styles.tileViewport","styles.tileDescription","useRef","useCallback","styles.gallery"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IASa,IAAI,CAAC,CAACA,8BAAgB,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,kDAAkD,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IACpP,CAAA,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,uCAAgB,CAAC,CAAC,CAAC,8BAAW,CAAA,GAAA,CAAC,CAAC,CAAC,8BAAA,CAAA,IAAY,CAAC,CAAC,CAAA;;;;ICRhU;IAC3C,EAAEC,UAAA,CAAA,OAAc,GAAGD,qCAAA,EAAoD,CAAC;IACxE,CAEA;;;;ICEO,IAAM,QAAQ,GAAG,UACtB,SAAgC,EAChC,QAAuB,EACvB,OAA6B,EAAA;IAE7B,IAAA,IAAI,OAAO,SAAS,KAAK,UAAU,EAAE;IACnC,QAAA,OAAO,SAAS,CAAC,OAAO,CAAC,CAAC;IAC3B,KAAA;IACD,IAAA,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE;IACjC,QAAA,OAAO,SAAS,CAAC;IAClB,KAAA;IACD,IAAA,OAAO,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC3B,CAAC,CAAC;IAEF,IAAM,oBAAoB,GAA2B;IACnD,IAAA,CAAC,EAAE,gBAAgB;IACnB,IAAA,CAAC,EAAE,iBAAiB;IACpB,IAAA,CAAC,EAAE,gCAAgC;IACnC,IAAA,CAAC,EAAE,gCAAgC;IACnC,IAAA,CAAC,EAAE,eAAe;IAClB,IAAA,CAAC,EAAE,+BAA+B;IAClC,IAAA,CAAC,EAAE,gBAAgB;KACpB,CAAC;IAEF,IAAM,gBAAgB,GAAG,EAAE,CAAC;IAErB,IAAM,OAAO,GAAkB;IACpC,IAAA,OAAO,EAAE,MAAM;IACf,IAAA,QAAQ,EAAE,MAAM;KACjB,CAAC;IAEK,IAAM,SAAS,GAAG,UAAC,EAAiC,EAAA;IAA/B,IAAA,IAAA,IAAI,GAAA,EAAA,CAAA,IAAA,CAAA;QAC9B,IAAM,sBAAsB,GAAG,oBAAoB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAEtE,IAAA,IAAM,KAAK,GAAG;IACZ,QAAA,MAAM,EAAE,SAAS;IACjB,QAAA,QAAQ,EAAE,MAAM;YAChB,KAAK,EAAE,IAAI,CAAC,WAAW;YACvB,MAAM,EAAE,IAAI,CAAC,YAAY;YACzB,UAAU,EAAE,IAAI,CAAC,UAAU;IAC3B,QAAA,SAAS,EAAE,CAAC;IACZ,QAAA,SAAS,EAAE,sBAAsB;SAClC,CAAC;QAEF,IAAI,IAAI,CAAC,UAAU,EAAE;YACnB,IAAM,KAAK,GAAG,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC;YACnD,IAAM,cAAc,GAAG,IAAI,CAAC,YAAY,GAAG,gBAAgB,GAAG,CAAC,CAAC;YAChE,IAAM,aAAa,GAAG,IAAI,CAAC,aAAa,GAAG,gBAAgB,GAAG,CAAC,CAAC;IAEhE,QAAA,IAAI,MAAM,GAAA,KAAA,CAAA,EAAE,KAAK,SAAA,CAAC;IAClB,QAAA,IAAI,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,YAAY,EAAE;gBACxC,KAAK,GAAG,IAAI,CAAC,WAAW,GAAG,gBAAgB,GAAG,CAAC,CAAC;gBAChD,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC;IACpC,SAAA;IAAM,aAAA;gBACL,MAAM,GAAG,IAAI,CAAC,YAAY,GAAG,gBAAgB,GAAG,CAAC,CAAC;gBAClD,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC;IACpC,SAAA;IAED,QAAA,IAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,cAAc,GAAG,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC;IACtE,QAAA,IAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,aAAa,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC;IAErE,QAAA,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC;IACpB,QAAA,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;IACtB,QAAA,KAAK,CAAC,UAAU,GAAG,UAAU,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC;IACtD,QAAA,KAAK,CAAC,SAAS,GAAG,SAAS,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC;IACpD,KAAA;IAED,IAAA,OAAO,KAAK,CAAC;IACf,CAAC,CAAC;IAEK,IAAM,YAAY,GAAG,UAAC,EAI5B,EAAA;IAHC,IAAA,IAAA,IAAI,GAAA,EAAA,CAAA,IAAA,CAAA;IAIJ,IAAA,IAAM,MAAM,GAAkB;YAC5B,KAAK,EAAE,IAAI,CAAC,aAAa;YACzB,MAAM,EAAE,IAAI,CAAC,YAAY;IACzB,QAAA,QAAQ,EAAE,QAAQ;SACnB,CAAC;QACF,IAAI,IAAI,CAAC,IAAI,EAAE;YACb,MAAM,CAAC,UAAU,GAAG,MAAA,CAAA,MAAA,CAAO,IAAI,CAAC,IAAI,MAAG,CAAC;IACxC,QAAA,MAAM,CAAC,cAAc,GAAG,OAAO,CAAC;IAChC,QAAA,MAAM,CAAC,kBAAkB,GAAG,eAAe,CAAC;IAC7C,KAAA;QACD,IAAI,IAAI,CAAC,UAAU,EAAE;YACnB,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,aAAa,GAAG,gBAAgB,GAAG,CAAC,CAAC;YACzD,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,YAAY,GAAG,gBAAgB,GAAG,CAAC,CAAC;IACzD,QAAA,MAAM,CAAC,MAAM,GAAG,gBAAgB,CAAC;IAClC,KAAA;IACD,IAAA,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC;IAEK,IAAM,aAAa,GAAG,UAAC,EAI7B,EAAA;IAHC,IAAA,IAAA,KAAK,GAAA,EAAA,CAAA,KAAA,CAAA;IAGc,IAAA,QAAC;IACpB,QAAA,aAAa,EAAE,MAAM;YACrB,OAAO,EAAE,KAAK,GAAG,CAAC,GAAG,CAAC;IACtB,QAAA,QAAQ,EAAE,UAAU;IACpB,QAAA,MAAM,EAAE,MAAM;IACd,QAAA,KAAK,EAAE,MAAM;SACd,EAAC;IANmB,CAMnB,CAAC;IAEI,IAAM,WAAW,GAAG,UAAC,EAA8B,EAAA;IAA5B,IAAA,IAAA,MAAM,GAAA,EAAA,CAAA,MAAA,CAAA;IAA0C,IAAA,QAAC;IAC7E,QAAA,MAAM,EAAA,MAAA;IACN,QAAA,gBAAgB,EAAE,MAAM;IACxB,QAAA,QAAQ,EAAE,UAAU;IACpB,QAAA,UAAU,EAAE,MAAM;IAClB,QAAA,OAAO,EAAE,KAAK;SACf,EAAC;IAN4E,CAM5E,CAAC;IAEI,IAAM,WAAW,GAAG,UAAC,EAI3B,EAAA;IAHC,IAAA,IAAA,WAAW,GAAA,EAAA,CAAA,WAAA,CAAA;IAGQ,IAAA,QAAC;IACpB,QAAA,aAAa,EAAE,MAAM;IACrB,QAAA,OAAO,EAAE,CAAC;IACV,QAAA,QAAQ,EAAE,UAAU;IACpB,QAAA,MAAM,EAAE,MAAM;IACd,QAAA,KAAK,EAAE,MAAM;IACb,QAAA,UAAU,EAAE,WAAW;IACrB,cAAE,0EAA0E;IAC5E,cAAE,MAAM;SACX,EAAC;IATmB,CASnB,CAAC;IAEI,IAAM,WAAW,GAAkB;IACxC,IAAA,aAAa,EAAE,MAAM;IACrB,IAAA,OAAO,EAAE,CAAC;IACV,IAAA,QAAQ,EAAE,UAAU;IACpB,IAAA,MAAM,EAAE,MAAM;IACd,IAAA,KAAK,EAAE,MAAM;KACd,CAAC;IAEK,IAAM,eAAe,GAAkB;IAC5C,IAAA,UAAU,EAAE,OAAO;IACnB,IAAA,KAAK,EAAE,MAAM;IACb,IAAA,MAAM,EAAE,CAAC;IACT,IAAA,UAAU,EAAE,MAAM;IAClB,IAAA,gBAAgB,EAAE,MAAM;IACxB,IAAA,aAAa,EAAE,MAAM;IACrB,IAAA,QAAQ,EAAE,QAAQ;KACnB,CAAC;IAEK,IAAM,SAAS,GAAkB;IACtC,IAAA,OAAO,EAAE,KAAK;IACd,IAAA,aAAa,EAAE,MAAM;IACrB,IAAA,QAAQ,EAAE,UAAU;IACpB,IAAA,SAAS,EAAE,KAAK;IAChB,IAAA,SAAS,EAAE,OAAO;IAClB,IAAA,KAAK,EAAE,MAAM;IACb,IAAA,MAAM,EAAE,KAAK;IACb,IAAA,QAAQ,EAAE,QAAQ;KACnB,CAAC;IAEK,IAAM,YAAY,GAAkB;IACzC,IAAA,OAAO,EAAE,cAAc;IACvB,IAAA,MAAM,EAAE,SAAS;IACjB,IAAA,aAAa,EAAE,SAAS;IACxB,IAAA,MAAM,EAAE,KAAK;KACd,CAAC;IAEK,IAAM,OAAO,GAAG,YAAA,EAAqB,QAAC;IAC3C,IAAA,OAAO,EAAE,QAAQ;IACjB,IAAA,OAAO,EAAE,gBAAgB;IACzB,IAAA,QAAQ,EAAE,KAAK;IACf,IAAA,UAAU,EAAE,KAAK;IACjB,IAAA,UAAU,EAAE,GAAG;IACf,IAAA,KAAK,EAAE,QAAQ;IACf,IAAA,UAAU,EAAE,kBAAkB;IAC9B,IAAA,SAAS,EAAE,QAAQ;IACnB,IAAA,UAAU,EAAE,QAAQ;IACpB,IAAA,aAAa,EAAE,UAAU;IACzB,IAAA,YAAY,EAAE,OAAO;KACtB,EAAC,EAAA,CAAC;IAEI,IAAM,WAAW,GAAG,UAAC,EAI3B,EAAA;IAHC,IAAA,IAAA,SAAS,GAAA,EAAA,CAAA,SAAA,CAAA;IAGU,IAAA,QAAC;YACpB,UAAU,EAAE,SAAS,GAAG,SAAS,GAAG,QAAQ;IAC5C,QAAA,UAAU,EAAE,MAAM;IAClB,QAAA,KAAK,EAAE,MAAM;IACb,QAAA,KAAK,EAAE,EAAE;IACT,QAAA,MAAM,EAAE,EAAE;IACV,QAAA,MAAM,EAAE,MAAM;IACd,QAAA,OAAO,EAAE,CAAC;IACV,QAAA,MAAM,EAAE,SAAS;IACjB,QAAA,aAAa,EAAE,SAAS;SACzB,EAAC;IAVmB,CAUnB;;ACpMK,QAAM,WAAW,GAAG,UAAC,EAOT,EAAA;IANjB,IAAA,IAAA,EAAA,GAAA,EAAA,CAAA,UAAkB,EAAlB,UAAU,GAAG,EAAA,KAAA,KAAA,CAAA,GAAA,KAAK,KAAA,EAClB,EAAA,GAAA,EAAA,CAAA,SAAgB,EAAhB,SAAS,mBAAG,IAAI,GAAA,EAAA,EAChB,OAAO,aAAA,EACP,EAAA,GAAA,EAAA,CAAA,KAAmB,EAAnB,KAAK,mBAAG,WAAW,GAAA,EAAA,EACnB,EAAA,GAAA,EAAA,CAAA,aAA2B,EAA3B,aAAa,GAAA,EAAA,KAAA,KAAA,CAAA,GAAG,WAAW,GAAA,EAAA,EAC3B,EAAwB,GAAA,EAAA,CAAA,UAAA,EAAxB,UAAU,GAAA,EAAA,KAAA,KAAA,CAAA,GAAG,WAAW,GAAA,EAAA,CAAA;QAElB,IAAA,EAAA,GAAoBE,mBAAQ,CAAC,KAAK,CAAC,EAAlC,KAAK,GAAA,EAAA,CAAA,CAAA,CAAA,EAAE,QAAQ,GAAA,EAAA,CAAA,CAAA,CAAmB,CAAC;IAE1C,IAAA,IAAM,WAAW,GAAG,EAAE,OAAO,EAAE,UAAU,GAAG,OAAO,GAAG,MAAM,EAAE,CAAC;IAC/D,IAAA,IAAM,SAAS,GAAG,UAAU,GAAG,aAAa,GAAG,KAAK,GAAG,UAAU,GAAG,KAAK,CAAC;QAE1E,IAAM,eAAe,GAAG,YAAA,EAAM,OAAA,QAAQ,CAAC,IAAI,CAAC,CAAd,EAAc,CAAC;QAC7C,IAAM,cAAc,GAAG,YAAA,EAAM,OAAA,QAAQ,CAAC,KAAK,CAAC,CAAf,EAAe,CAAC;IAE7C,IAAA,QACEC,qBACc,CAAA,KAAA,EAAA,QAAA,CAAA,EAAA,aAAA,EAAA,gCAAgC,EAC5C,KAAK,EAAC,QAAQ,EACd,KAAK,EAAEC,WAAkB,CAAC,EAAE,SAAS,WAAA,EAAE,CAAC,EACxC,OAAO,EAAE,OAAO,EAChB,WAAW,EAAE,eAAe,EAC5B,UAAU,EAAE,cAAc,EAAA,EAAA,EAAA,QAAA,EAE1BC,yCACE,IAAI,EAAE,SAAS,EACf,MAAM,EAAC,IAAI,EACX,OAAO,EAAC,WAAW,EACnB,KAAK,EAAC,IAAI,EACV,KAAK,EAAC,4BAA4B,EAAA,EAAA,EAAA,QAAA,EAAA,CAElCA,oDACE,EAAE,EAAC,QAAQ,EACX,EAAE,EAAC,IAAI,EACP,EAAE,EAAC,QAAQ,EACX,CAAC,EAAC,QAAQ,EACV,iBAAiB,EAAC,0BAA0B,EAC5C,aAAa,EAAC,gBAAgB,EAAA,EAAA,EAAA,QAAA,EAAA,CAE9BF,gCAAM,MAAM,EAAC,MAAM,EAAC,SAAS,EAAC,SAAS,GAAQ,EAC/CA,qBAAA,CAAA,MAAA,EAAA,EAAM,MAAM,EAAC,GAAG,EAAC,SAAS,EAAC,SAAS,EAAC,WAAW,EAAC,GAAG,EAAQ,CAAA,CAAA,EAAA,CAAA,CAC7C,EAEjBA,qBACE,CAAA,QAAA,EAAA,EAAA,KAAK,EAAE,WAAW,EAClB,OAAO,EAAC,KAAK,EACb,IAAI,EAAC,cAAc,EACnB,EAAE,EAAC,IAAI,EACP,EAAE,EAAC,QAAQ,EACX,CAAC,EAAC,QAAQ,EACV,CAAA,EACFA,kCAAQ,KAAK,EAAE,WAAW,EAAE,IAAI,EAAC,MAAM,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,MAAM,EAAC,CAAC,EAAC,OAAO,EAAG,CAAA,EACtEA,gCAAM,CAAC,EAAC,eAAe,EAAC,IAAI,EAAC,MAAM,EAAA,CAAG,EACtCA,qBAAA,CAAA,MAAA,EAAA,EAAM,CAAC,EAAC,uHAAuH,GAAG,CAC9H,EAAA,CAAA,CAAA,EAAA,CAAA,CACF,EACN;IACJ;;ICxDO,IAAM,KAAK,GAAG,UAA0B,EAW/B,EAAA;IAVd,IAAA,IAAA,IAAI,GAAA,EAAA,CAAA,IAAA,EACqB,uBAAuB,GAAA,EAAA,CAAA,uBAAA,EAChD,EAAA,GAAA,EAAA,CAAA,YAAmB,EAAnB,YAAY,GAAG,EAAA,KAAA,KAAA,CAAA,GAAA,IAAI,GAAA,EAAA,EACnB,cAAc,GAAA,EAAA,CAAA,cAAA,EACd,QAAQ,GAAA,EAAA,CAAA,QAAA,EACR,iBAAiB,GAAA,EAAA,CAAA,iBAAA,EACjB,MAAM,GAAA,EAAA,CAAA,MAAA,EACN,KAAK,GAAA,EAAA,CAAA,KAAA,EACL,QAAQ,GAAA,EAAA,CAAA,QAAA,EACR,OAAO,GAAA,EAAA,CAAA,OAAA,CAAA;IAEP,IAAA,IAAM,YAAY,GAAG,EAAE,IAAI,EAAA,IAAA,EAAE,CAAC;QAExB,IAAA,EAAA,GAAoBD,mBAAQ,CAAC,KAAK,CAAC,EAAlC,KAAK,GAAA,EAAA,CAAA,CAAA,CAAA,EAAE,QAAQ,GAAA,EAAA,CAAA,CAAA,CAAmB,CAAC;IAE1C,IAAA,IAAM,cAAc,GAAG;IACrB,QAAA,GAAG,EAAE,KAAK;IACV,QAAA,aAAa,EAAE,6BAA6B;YAC5C,GAAG,EAAE,IAAI,CAAC,GAAG;IACb,QAAA,GAAG,EAAE,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,EAAE;IAC7B,QAAA,KAAK,EAAE,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI;YAC7D,KAAK,EAAE,QAAQ,CAAC,cAAc,EAAEI,SAAgB,EAAE,YAAY,CAAC;SAChE,CAAC;QAEF,IAAM,sBAAsB,GAAG,UAAC,KAA8B,EAAA;YAC5D,IAAI,CAAC,YAAY,EAAE;gBACjB,OAAO;IACR,SAAA;IACD,QAAA,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IACzB,KAAC,CAAC;QAEF,IAAM,mBAAmB,GAAG,UAAC,KAA8B,EAAA;IACzD,QAAA,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IACxB,KAAC,CAAC;IAEF,IAAA,IAAM,mBAAmB,GAAG;IAC1B,QAAA,IAAI,EAAA,IAAA;IACJ,QAAA,KAAK,EAAA,KAAA;IACL,QAAA,MAAM,EAAA,MAAA;IACN,QAAA,QAAQ,EAAA,QAAA;IACR,QAAA,OAAO,EAAA,OAAA;IACP,QAAA,YAAY,EAAA,YAAA;IACZ,QAAA,iBAAiB,EAAA,iBAAA;IACjB,QAAA,cAAc,EAAA,cAAA;IACd,QAAA,QAAQ,EAAA,QAAA;SACT,CAAC;QAEF,QACED,yCACE,SAAS,EAAC,uBAAuB,EACrB,aAAA,EAAA,mBAAmB,EAC/B,YAAY,EAAE,cAAM,OAAA,QAAQ,CAAC,IAAI,CAAC,GAAA,EAClC,YAAY,EAAE,YAAM,EAAA,OAAA,QAAQ,CAAC,KAAK,CAAC,CAAf,EAAe,EACnC,KAAK,EAAEE,WAAkB,CAAC,EAAE,MAAM,QAAA,EAAE,CAAC,iBAErCJ,qBACE,CAAA,KAAA,EAAA,QAAA,CAAA,EAAA,SAAS,EAAC,gCAAgC,EAC1C,KAAK,EAAEK,WAAkB,EAEzB,EAAA,EAAA,QAAA,EAAAL,qBAAA,CAAC,WAAW,EACV,EAAA,UAAU,EAAE,IAAI,CAAC,UAAU,EAC3B,SAAS,EAAE,IAAI,CAAC,UAAU,KAAK,YAAY,IAAI,KAAK,CAAC,EACrD,OAAO,EAAE,sBAAsB,EAC/B,CAAA,EAAA,CAAA,CACE,EAEL,CAAC,CAAC,IAAI,CAAC,IAAI,KACVA,qBAAA,CAAA,KAAA,EAAA,QAAA,CAAA,EACE,SAAS,EAAC,kCAAkC,EAC5C,KAAK,EAAEM,SAAgB,EAAA,EAAA,EAAA,QAAA,EAEtB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,UAAC,GAAG,EAAE,KAAK,EAAK,EAAA,QAC7BN,qBAEE,CAAA,KAAA,EAAA,QAAA,CAAA,EAAA,KAAK,EAAE,GAAG,CAAC,KAAK,EAChB,KAAK,EAAEO,YAAmB,gBAE1BP,qBAAM,CAAA,MAAA,EAAA,QAAA,CAAA,EAAA,KAAK,EAAE,QAAQ,CAAC,QAAQ,EAAEQ,OAAc,EAAE,YAAY,CAAC,EAAA,EAAA,EAAA,QAAA,EAC1D,GAAG,CAAC,KAAK,IACL,EANF,CAAA,EAAA,GAAG,CAAC,GAAG,IAAI,KAAK,CAOjB,EACP,EAAA,CAAC,EAAA,CAAA,CACE,CACP,EAEA,CAAC,CAAC,IAAI,CAAC,aAAa,KACnBR,wCACE,SAAS,EAAC,iCAAiC,EAC3C,KAAK,EAAES,aAAoB,CAAC,EAAE,KAAK,OAAA,EAAE,CAAC,gBAErC,IAAI,CAAC,aAAa,EACf,CAAA,CAAA,CACP,EAEDT,qBACE,CAAA,KAAA,EAAA,EAAA,SAAS,EAAC,+BAA+B,EACzC,KAAK,EAAEU,WAAkB,CAAC;wBACxB,WAAW,EAAE,KAAK,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,YAAY;IACvD,iBAAA,CAAC,EACF,CAAA,EAEFV,qBACE,CAAA,KAAA,EAAA,QAAA,CAAA,EAAA,SAAS,EAAC,gCAAgC,EAAA,aAAA,EAC9B,4BAA4B,EACxC,KAAK,EAAE,QAAQ,CAAC,iBAAiB,EAAEW,YAAmB,EAAE,YAAY,CAAC,EACrE,OAAO,EAAE,mBAAmB,EAE3B,EAAA,EAAA,QAAA,EAAA,uBAAuB,IACtBX,qBAAA,CAAC,uBAAuB,EAAA,QAAA,CAAA,EAAA,EAClB,mBAAmB,EACvB,EAAA,UAAU,EAAE,cAAc,EAC1B,CAAA,CAAA,KAEFA,qBAAA,CAAA,KAAA,EAAA,QAAA,CAAA,EAAA,EAAS,cAAc,CAAA,CAAI,CAC5B,EACG,CAAA,CAAA,EACL,IAAI,CAAC,gBAAgB,KACpBA,qBACE,CAAA,KAAA,EAAA,QAAA,CAAA,EAAA,SAAS,EAAC,mCAAmC,EAC7C,KAAK,EAAEY,eAAsB,EAE5B,EAAA,EAAA,QAAA,EAAA,IAAI,CAAC,gBAAgB,EAAA,CAAA,CAClB,CACP,CAAA,EAAA,CAAA,CACG,EACN;IACJ,CAAC;;ICnIK,SAAU,iBAAiB,CAAC,qBAA6B,EAAA;IAC7D,IAAA,IAAM,GAAG,GAAGC,iBAAM,CAAqB,IAAI,CAAC,CAAC;IAC7C,IAAA,IAAM,WAAW,GAAGA,iBAAM,EAAkB,CAAC;QAEvC,IAAA,EAAA,GAAsCd,mBAAQ,CAAC,qBAAqB,CAAC,EAApE,cAAc,GAAA,EAAA,CAAA,CAAA,CAAA,EAAE,iBAAiB,GAAA,EAAA,CAAA,CAAA,CAAmC,CAAC;IAE5E,IAAA,IAAM,YAAY,GAAGe,sBAAW,CAAC,UAAC,IAAwB,EAAA;;IACxD,QAAA,CAAA,EAAA,GAAA,WAAW,CAAC,OAAO,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,UAAU,EAAE,CAAC;IAClC,QAAA,WAAW,CAAC,OAAO,GAAG,SAAS,CAAC;IAEhC,QAAA,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC;IAEnB,QAAA,IAAM,WAAW,GAAG,YAAA;IAClB,YAAA,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE;oBAChB,OAAO;IACR,aAAA;IACD,YAAA,IAAI,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC;gBACpC,IAAI;oBACF,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,qBAAqB,EAAE,CAAC,KAAK,CAAC;IACnD,aAAA;gBAAC,OAAO,GAAG,EAAE,GAAE;gBAChB,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;IACvC,SAAC,CAAC;IAEF,QAAA,WAAW,EAAE,CAAC;IAEd,QAAA,IAAI,IAAI,IAAI,OAAO,cAAc,KAAK,WAAW,EAAE;gBACjD,WAAW,CAAC,OAAO,GAAG,IAAI,cAAc,CAAC,WAAW,CAAC,CAAC;IACtD,YAAA,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC,SAAA;SACF,EAAE,EAAE,CAAC,CAAC;IAEP,IAAA,OAAO,EAAE,YAAY,EAAA,YAAA,EAAE,cAAc,EAAA,cAAA,EAAE,CAAC;IAC1C;;IC3BA,IAAM,eAAe,GAAG,UACtB,KAAU,EACV,aAAqB,EACrB,eAAuB,EAAA;QAEvB,IAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,IAAA,KAAK,IAAI,CAAC,IAAI,KAAK,EAAE;IACnB,QAAA,IAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IACtB,QAAA,IAAM,eAAe,GAAG,IAAI,CAAC,WAAW,GAAG,aAAa,CAAC;IACzD,QAAA,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,GAAG,eAAe,CAAC,CAAC;IAC1D,QAAA,MAAM,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC;IACrB,KAAA;IAED,IAAA,IAAI,aAAa,GAAG,eAAe,GAAG,MAAM,CAAC;QAC7C,OAAO,aAAa,GAAG,CAAC,EAAE;IACxB,QAAA,KAAK,IAAI,CAAC,IAAI,MAAM,EAAE;IACpB,YAAA,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;IACZ,YAAA,aAAa,EAAE,CAAC;gBAChB,IAAI,aAAa,GAAG,CAAC;oBAAE,MAAM;IAC9B,SAAA;IACF,KAAA;IACD,IAAA,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC;IAEF,IAAM,MAAM,GAAG,UACb,MAAW,EACX,EAAyD,EAAA;IAAvD,IAAA,IAAA,cAAc,oBAAA,EAAE,SAAS,GAAA,EAAA,CAAA,SAAA,EAAE,MAAM,GAAA,EAAA,CAAA,MAAA,CAAA;QAEnC,IAAM,GAAG,GAAwB,EAAE,CAAC;IACpC,IAAA,IAAM,SAAS,GAAG,CAAC,GAAG,MAAM,CAAC;IAC7B,IAAA,IAAM,KAAK,GAAA,aAAA,CAAA,EAAA,EAAO,MAAM,EAAA,IAAA,CAAC,CAAC;QAE1B,IAAI,aAAa,GAAG,CAAC,CAAC;QACtB,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,aAAa,GAAG,cAAc,EAAE;IACzD,QAAA,IAAM,IAAI,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;IAC3B,QAAA,IAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,IAAI,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IACvE,QAAA,IAAM,YAAY,GACb,QAAA,CAAA,QAAA,CAAA,EAAA,EAAA,IAAI,KACP,YAAY,EAAE,SAAS,EACvB,WAAW,aAAA,EACX,aAAa,EAAE,WAAW,EAC1B,UAAU,EAAE,CAAC,GACd,CAAC;IACF,QAAA,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACvB,QAAA,aAAa,IAAI,YAAY,CAAC,WAAW,GAAG,SAAS,CAAC;IACvD,KAAA;IAED,IAAA,IAAM,eAAe,GAAG,aAAa,GAAG,cAAc,CAAC;QACvD,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,eAAe,GAAG,CAAC,EAAE;YACzC,IAAM,MAAM,GAAG,eAAe,CAAC,GAAG,EAAE,aAAa,EAAE,eAAe,CAAC,CAAC;IACpE,QAAA,KAAK,IAAM,CAAC,IAAI,GAAG,EAAE;IACnB,YAAA,IAAM,cAAc,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IACjC,YAAA,IAAM,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;IACpB,YAAA,IAAI,CAAC,UAAU,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC,CAAC;gBAC5D,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,WAAW,GAAG,cAAc,CAAC;IACxD,SAAA;IACF,KAAA;IAED,IAAA,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACtB,CAAC,CAAC;IAEF,IAAM,OAAO,GAAG,UACd,MAAW,EACX,OAA2B,EAC3B,IAAgC,EAAA;IAAhC,IAAA,IAAA,IAAA,KAAA,KAAA,CAAA,EAAA,EAAA,IAAgC,GAAA,EAAA,CAAA,EAAA;IAE1B,IAAA,IAAA,EAAoB,GAAA,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAA1C,GAAG,GAAA,EAAA,CAAA,CAAA,CAAA,EAAE,UAAU,QAA2B,CAAC;IAClD,IAAA,IAAM,QAAQ,GAAO,aAAA,CAAA,aAAA,CAAA,EAAA,EAAA,IAAI,EAAE,IAAA,CAAA,EAAA,CAAA,GAAG,SAAC,CAAC;QAEhC,IAAI,OAAO,CAAC,OAAO,IAAI,QAAQ,CAAC,MAAM,IAAI,OAAO,CAAC,OAAO,EAAE;IACzD,QAAA,OAAO,QAAQ,CAAC;IACjB,KAAA;QACD,IAAI,UAAU,CAAC,MAAM,EAAE;YACrB,OAAO,OAAO,CAAC,UAAU,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;IAC/C,KAAA;IACD,IAAA,OAAO,QAAQ,CAAC;IAClB,CAAC,CAAC;AAEW,QAAA,WAAW,GAAG,UACzB,MAAW,EACX,EAAkE,EAAA;YAAhE,cAAc,GAAA,EAAA,CAAA,cAAA,EAAE,OAAO,GAAA,EAAA,CAAA,OAAA,EAAE,SAAS,GAAA,EAAA,CAAA,SAAA,EAAE,MAAM,GAAA,EAAA,CAAA,MAAA,CAAA;IAE5C,IAAA,SAAS,GAAG,OAAO,SAAS,KAAK,WAAW,GAAG,GAAG,GAAG,SAAS,CAAC;IAC/D,IAAA,MAAM,GAAG,OAAO,MAAM,KAAK,WAAW,GAAG,CAAC,GAAG,MAAM,CAAC;IAEpD,IAAA,IAAI,CAAC,MAAM;IAAE,QAAA,OAAO,EAAE,CAAC;IACvB,IAAA,IAAI,CAAC,cAAc;IAAE,QAAA,OAAO,EAAE,CAAC;IAE/B,IAAA,IAAM,OAAO,GAAG,EAAE,cAAc,gBAAA,EAAE,OAAO,EAAA,OAAA,EAAE,SAAS,EAAA,SAAA,EAAE,MAAM,EAAA,MAAA,EAAE,CAAC;IAC/D,IAAA,OAAO,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,EAAE;AAEW,QAAA,eAAe,GAAG,UAC7B,MAAW,EACX,OAA2B,EAAA;QAE3B,IAAM,IAAI,GAAG,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC1C,OAAO,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;IACnC;;ACnGO,QAAM,OAAO,GAAG,UAA2B,EAchC,EAAA;IAbhB,IAAA,IAAA,MAAM,GAAA,EAAA,CAAA,MAAA,EACN,EAAuB,GAAA,EAAA,CAAA,EAAA,EAAvB,EAAE,GAAA,EAAA,KAAA,KAAA,CAAA,GAAG,kBAAkB,GAAA,EAAA,EACvB,EAAA,GAAA,EAAA,CAAA,oBAA2B,EAA3B,oBAAoB,mBAAG,IAAI,GAAA,EAAA,EAC3B,EAAA,GAAA,EAAA,CAAA,QAAmB,EAAnB,QAAQ,GAAG,EAAA,KAAA,KAAA,CAAA,GAAA,YAAA,GAAQ,GAAA,EAAA,EACnB,EAAe,GAAA,EAAA,CAAA,SAAA,EAAf,SAAS,GAAA,EAAA,KAAA,KAAA,CAAA,GAAG,GAAG,GAAA,EAAA,EACf,OAAO,GAAA,EAAA,CAAA,OAAA,EACP,EAAA,GAAA,EAAA,CAAA,MAAU,EAAV,MAAM,GAAG,EAAA,KAAA,KAAA,CAAA,GAAA,CAAC,GAAA,EAAA,EACV,EAAyB,GAAA,EAAA,CAAA,qBAAA,EAAzB,qBAAqB,GAAA,EAAA,KAAA,KAAA,CAAA,GAAG,CAAC,GAAA,EAAA,EACzB,EAAkB,GAAA,EAAA,CAAA,OAAA,EAAlB,OAAO,GAAA,EAAA,KAAA,KAAA,CAAA,GAAG,YAAO,GAAC,GAAA,EAAA,EAClB,iBAAiB,GAAA,EAAA,CAAA,iBAAA,EACjB,cAAc,GAAA,EAAA,CAAA,cAAA,EACd,QAAQ,GAAA,EAAA,CAAA,QAAA,EACR,uBAAuB,GAAA,EAAA,CAAA,uBAAA,CAAA;QAEjB,IAAA,EAAA,GAAmC,iBAAiB,CACxD,qBAAqB,CACtB,EAFO,YAAY,GAAA,EAAA,CAAA,YAAA,EAAE,cAAc,GAAA,EAAA,CAAA,cAEnC,CAAC;IAEF,IAAA,IAAM,UAAU,GAAG,eAAe,CAAI,MAAM,EAAE;IAC5C,QAAA,cAAc,EAAA,cAAA;IACd,QAAA,OAAO,EAAA,OAAA;IACP,QAAA,SAAS,EAAA,SAAA;IACT,QAAA,MAAM,EAAA,MAAA;IACP,KAAA,CAAC,CAAC;IAEH,IAAA,IAAM,YAAY,GAAG,UAAC,KAAa,EAAE,KAA8B,EAAA;YACjE,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC;IACxC,KAAC,CAAC;IAEF,IAAA,IAAM,WAAW,GAAG,UAAC,KAAa,EAAE,KAA8B,EAAA;YAChE,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC;IACvC,KAAC,CAAC;QAEF,QACEd,wCAAK,EAAE,EAAE,EAAE,EAAE,SAAS,EAAC,kBAAkB,EAAC,GAAG,EAAE,YAAY,gBACzDA,qBAAK,CAAA,KAAA,EAAA,QAAA,CAAA,EAAA,KAAK,EAAEe,OAAc,EACvB,EAAA,EAAA,QAAA,EAAA,UAAU,CAAC,GAAG,CAAC,UAAC,IAAI,EAAE,KAAK,EAAK,EAAA,QAC/Bf,qBAAC,CAAA,KAAK,IAEJ,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,SAAS,EACjB,YAAY,EAAE,oBAAoB,EAClC,OAAO,EAAE,WAAW,EACpB,QAAQ,EAAE,YAAY,EACtB,QAAQ,EAAE,QAAQ,EAClB,iBAAiB,EAAE,iBAAiB,EACpC,cAAc,EAAE,cAAc,EAC9B,uBAAuB,EAAE,uBAAuB,EAAA,EAX3C,IAAI,CAAC,GAAG,IAAI,KAAK,CAYtB,EAd6B,EAehC,CAAC,EACE,CAAA,CAAA,EAAA,CAAA,CACF,EACN;IACJ,EAAE;IAEF,OAAO,CAAC,WAAW,GAAG,SAAS;;;;;;;;;;;;;"} \ No newline at end of file diff --git a/src/components/react-grid-gallery/package.json b/src/components/react-grid-gallery/package.json deleted file mode 100644 index 87dbf72127b625ac4b32d553cd8659956f6ef1e3..0000000000000000000000000000000000000000 --- a/src/components/react-grid-gallery/package.json +++ /dev/null @@ -1,90 +0,0 @@ -{ - "name": "react-grid-gallery", - "version": "1.0.1", - "description": "Justified gallery component for React.", - "types": "dist/react-grid-gallery.d.ts", - "main": "dist/react-grid-gallery.cjs.js", - "module": "dist/react-grid-gallery.esm.js", - "browser": "dist/react-grid-gallery.umd.js", - "files": [ - "dist", - "src" - ], - "exports": { - "types": "./dist/react-grid-gallery.d.ts", - "browser": "./dist/react-grid-gallery.umd.js", - "import": "./dist/react-grid-gallery.esm.js", - "require": "./dist/react-grid-gallery.cjs.js" - }, - "sideEffects": false, - "scripts": { - "prepublishOnly": "npm run build", - "clean": "rimraf dist && rimraf node_modules/.cache", - "rollup:build": "rollup -c", - "watch": "rollup -c -w", - "build": "npm run clean && npm run rollup:build", - "test": "jest", - "test:unit": "jest --testPathIgnorePatterns=\\.e2e\\.test\\.js", - "test:e2e": "jest --testPathPattern=\\.e2e\\.test\\.js" - }, - "peerDependencies": { - "react": ">=16.14.0" - }, - "devDependencies": { - "@babel/core": "^7.23.2", - "@babel/preset-env": "^7.23.2", - "@babel/preset-react": "^7.22.15", - "@babel/preset-typescript": "^7.23.2", - "@rollup/plugin-babel": "^6.0.4", - "@rollup/plugin-commonjs": "^25.0.5", - "@rollup/plugin-node-resolve": "^15.2.3", - "@rollup/plugin-replace": "^5.0.3", - "@testing-library/jest-dom": "^6.1.4", - "@testing-library/react": "^14.0.0", - "@types/jest": "^29.5.5", - "@types/jest-environment-puppeteer": "^5.0.4", - "@types/jest-image-snapshot": "^6.2.1", - "@types/react": "^18.2.28", - "jest": "^29.7.0", - "jest-environment-jsdom": "^29.7.0", - "jest-image-snapshot": "^6.2.0", - "jest-puppeteer": "^9.0.1", - "puppeteer": "^21.3.8", - "react": "^18.2.0", - "react-dom": "^18.2.0", - "rimraf": "^5.0.5", - "rollup": "^2.79.1", - "rollup-plugin-dts": "^4.2.2", - "rollup-plugin-peer-deps-external": "^2.2.4", - "rollup-plugin-sourcemaps": "^0.6.3", - "rollup-plugin-typescript2": "^0.36.0", - "typescript": "^4.8.2" - }, - "repository": { - "type": "git", - "url": "https://github.com/benhowell/react-grid-gallery.git" - }, - "keywords": [ - "react", - "react-component", - "image", - "images", - "photo", - "photos", - "gallery", - "select", - "selectable", - "justified", - "tags", - "tagging", - "EXIF", - "image gallery", - "photo gallery" - ], - "author": "Ben Howell", - "license": "MIT", - "bugs": { - "url": "https://github.com/benhowell/react-grid-gallery/issues" - }, - "homepage": "https://benhowell.github.io/react-grid-gallery/" -} diff --git a/src/components/react-grid-gallery/src/Gallery.tsx b/src/components/react-grid-gallery/src/Gallery.tsx deleted file mode 100755 index b23b703e1db9a622c3eb483d69f70bd4340074af..0000000000000000000000000000000000000000 --- a/src/components/react-grid-gallery/src/Gallery.tsx +++ /dev/null @@ -1,67 +0,0 @@ -import { MouseEvent } from "react"; -import { Image } from "./Image"; -import { useContainerWidth } from "./useContainerWidth"; -import { buildLayoutFlat } from "./buildLayout"; -import { Image as ImageInterface, GalleryProps } from "./types"; -import * as styles from "./styles"; - -export const Gallery = <T extends ImageInterface>({ - images, - id = "ReactGridGallery", - enableImageSelection = true, - onSelect = () => {}, - rowHeight = 180, - maxRows, - margin = 2, - defaultContainerWidth = 0, - onClick = () => {}, - tileViewportStyle, - thumbnailStyle, - tagStyle, - thumbnailImageComponent, -}: GalleryProps<T>): JSX.Element => { - const { containerRef, containerWidth } = useContainerWidth( - defaultContainerWidth - ); - - const thumbnails = buildLayoutFlat<T>(images, { - containerWidth, - maxRows, - rowHeight, - margin, - }); - - const handleSelect = (index: number, event: MouseEvent<HTMLElement>) => { - event.preventDefault(); - onSelect(index, images[index], event); - }; - - const handleClick = (index: number, event: MouseEvent<HTMLElement>) => { - onClick(index, images[index], event); - }; - - return ( - <div id={id} className="ReactGridGallery" ref={containerRef}> - <div style={styles.gallery}> - {thumbnails.map((item, index) => ( - <Image - key={item.key || index} - item={item} - index={index} - margin={margin} - height={rowHeight} - isSelectable={enableImageSelection} - onClick={handleClick} - onSelect={handleSelect} - tagStyle={tagStyle} - tileViewportStyle={tileViewportStyle} - thumbnailStyle={thumbnailStyle} - thumbnailImageComponent={thumbnailImageComponent} - /> - ))} - </div> - </div> - ); -}; - -Gallery.displayName = "Gallery"; diff --git a/src/components/react-grid-gallery/src/Image.tsx b/src/components/react-grid-gallery/src/Image.tsx deleted file mode 100755 index e768b79507b4a12ff28ab5137bbbb89bffd75791..0000000000000000000000000000000000000000 --- a/src/components/react-grid-gallery/src/Image.tsx +++ /dev/null @@ -1,119 +0,0 @@ -import { useState, MouseEvent } from "react"; -import { ImageExtended, ImageProps } from "./types"; -import * as styles from "./styles"; - -export const Image = <T extends ImageExtended>({ - item, - thumbnailImageComponent: ThumbnailImageComponent, - isSelectable = true, - thumbnailStyle, - tagStyle, - tileViewportStyle, - margin, - index, - onSelect, - onClick, -}: ImageProps<T>): JSX.Element => { - - const [hover, setHover] = useState(false); - - const thumbnailProps = { - key: index, - "data-testid": "grid-gallery-item_thumbnail", - src: item.src, - alt: item.alt ? item.alt : "", - }; - - - - const handleViewportClick = (event: MouseEvent<HTMLElement>) => { - onClick(index, event); - }; - - const thumbnailImageProps = { - item, - index, - margin, - onSelect, - onClick, - isSelectable, - tileViewportStyle, - thumbnailStyle, - tagStyle, - }; - - return ( - <div - className="ReactGridGallery_tile" - data-testid="grid-gallery-item" - onMouseEnter={() => setHover(true)} - onMouseLeave={() => setHover(false)} - style={styles.galleryItem({ margin })} - > - <div - className="ReactGridGallery_tile-icon-bar" - style={styles.tileIconBar} - > - - </div> - - {!!item.tags && ( - <div - className="ReactGridGallery_tile-bottom-bar" - style={styles.bottomBar} - > - {item.tags.map((tag, index) => ( - <div - key={tag.key || index} - - style={styles.tagItemBlock} - > - <span> - {tag.value} - </span> - </div> - ))} - </div> - )} - - {!!item.customOverlay && ( - <div - className="ReactGridGallery_custom-overlay" - style={styles.customOverlay({ hover })} - > - {item.customOverlay} - </div> - )} - - <div - className="ReactGridGallery_tile-overlay" - style={styles.tileOverlay({ - showOverlay: hover && !item.isSelected && isSelectable, - })} - /> - - <div - className="ReactGridGallery_tile-viewport" - data-testid="grid-gallery-item_viewport" - onClick={handleViewportClick} - > - {ThumbnailImageComponent ? ( - <ThumbnailImageComponent - {...thumbnailImageProps} - imageProps={thumbnailProps} - /> - ) : ( - <img {...thumbnailProps} /> - )} - </div> - {item.thumbnailCaption && ( - <div - className="ReactGridGallery_tile-description" - style={styles.tileDescription} - > - {item.thumbnailCaption} - </div> - )} - </div> - ); -}; diff --git a/src/components/react-grid-gallery/src/buildLayout.ts b/src/components/react-grid-gallery/src/buildLayout.ts deleted file mode 100644 index 532983bd7986bf55025b33f4d02df2962c791b8b..0000000000000000000000000000000000000000 --- a/src/components/react-grid-gallery/src/buildLayout.ts +++ /dev/null @@ -1,110 +0,0 @@ -import { - ImageExtended, - Image, - BuildLayoutOptions, - ImageExtendedRow, -} from "./types"; - -const calculateCutOff = <T extends ImageExtended>( - items: T[], - totalRowWidth: number, - protrudingWidth: number -) => { - const cutOff: number[] = []; - let cutSum = 0; - for (let i in items) { - const item = items[i]; - const fractionOfWidth = item.scaledWidth / totalRowWidth; - cutOff[i] = Math.floor(fractionOfWidth * protrudingWidth); - cutSum += cutOff[i]; - } - - let stillToCutOff = protrudingWidth - cutSum; - while (stillToCutOff > 0) { - for (let i in cutOff) { - cutOff[i]++; - stillToCutOff--; - if (stillToCutOff < 0) break; - } - } - return cutOff; -}; - -const getRow = <T extends Image = Image>( - images: T[], - { containerWidth, rowHeight, margin }: BuildLayoutOptions -): [ImageExtendedRow<Image>, T[]] => { - const row: ImageExtendedRow<Image> = []; - const imgMargin = 2 * margin!; - const items = [...images]; - - let totalRowWidth = 0; - while (items.length > 0 && totalRowWidth < containerWidth) { - const item = items.shift(); - const scaledWidth = Math.floor(rowHeight! * (item!.width / item!.height)); - const extendedItem: ImageExtended<Image> = { - src: item!.src, - width: item!.width, - height: item!.height, - scaledHeight: rowHeight!, - scaledWidth, - viewportWidth: scaledWidth, - marginLeft: 0, - }; - row.push(extendedItem); - totalRowWidth += extendedItem.scaledWidth + imgMargin; - } - - const protrudingWidth = totalRowWidth - containerWidth; - if (row.length > 0 && protrudingWidth > 0) { - const cutoff = calculateCutOff(row, totalRowWidth, protrudingWidth); - for (const i in row) { - const pixelsToRemove = cutoff[i]; - const item = row[i]; - item.marginLeft = -Math.abs(Math.floor(pixelsToRemove / 2)); - item.viewportWidth = item.scaledWidth - pixelsToRemove; - } - } - - return [row, items]; -}; - -const getRows = <T extends Image = Image>( - images: Image[], - options: BuildLayoutOptions, - rows: ImageExtendedRow<Image>[] = [] -): ImageExtendedRow<Image>[] => { - const [row, imagesLeft] = getRow(images, options); - const nextRows = [...rows, row]; - - if (options.maxRows && nextRows.length >= options.maxRows) { - return nextRows; - } - if (imagesLeft.length) { - return getRows(imagesLeft, options, nextRows); - } - return nextRows; -}; - -export const buildLayout = <T extends Image = Image>( - images: Image[], - { containerWidth, maxRows, rowHeight, margin }: BuildLayoutOptions -): ImageExtendedRow<Image>[] => { - rowHeight = typeof rowHeight === "undefined" ? 180 : rowHeight; - margin = typeof margin === "undefined" ? 2 : margin; - - if (!images) return []; - if (!containerWidth) return []; - - const options = { containerWidth, maxRows, rowHeight, margin }; - return getRows(images, options); -}; - -export const buildLayoutFlat = <T extends Image = Image>( - images: T[], - options: BuildLayoutOptions -): ImageExtendedRow<Image>[] => { - const rows = buildLayout(images, options); - return rows; - -} diff --git a/src/components/react-grid-gallery/src/index.ts b/src/components/react-grid-gallery/src/index.ts deleted file mode 100644 index 798c683f248763ba098baea6bef1694755279954..0000000000000000000000000000000000000000 --- a/src/components/react-grid-gallery/src/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -export * from "./types"; -export { Gallery } from "./Gallery"; -export { buildLayout, buildLayoutFlat } from "./buildLayout"; diff --git a/src/components/react-grid-gallery/src/styles.ts b/src/components/react-grid-gallery/src/styles.ts deleted file mode 100644 index fe09b602441b38f2969cd2fd28f4bedb430fbaf0..0000000000000000000000000000000000000000 --- a/src/components/react-grid-gallery/src/styles.ts +++ /dev/null @@ -1,201 +0,0 @@ -import { CSSProperties } from "react"; -import { - ImageExtended, - StyleFunction, - StyleFunctionContext, - StyleProp, -} from "./types"; - -export const getStyle = ( - styleProp: StyleProp, - fallback: StyleFunction, - context: StyleFunctionContext -): CSSProperties => { - if (typeof styleProp === "function") { - return styleProp(context); - } - if (typeof styleProp === "object") { - return styleProp; - } - return fallback! (context); -}; - -const rotationTransformMap: Record<number, string> = { - 3: "rotate(180deg)", - 2: "rotateY(180deg)", - 4: "rotate(180deg) rotateY(180deg)", - 5: "rotate(270deg) rotateY(180deg)", - 6: "rotate(90deg)", - 7: "rotate(90deg) rotateY(180deg)", - 8: "rotate(270deg)", -}; - -const SELECTION_MARGIN = 16; - -export const gallery: CSSProperties = { - display: "flex", - flexWrap: "wrap", -}; - -export const thumbnail = ({ item }: { item: ImageExtended }): CSSProperties => { - const rotationTransformValue = rotationTransformMap[item.orientation!]; - - const style = { - cursor: "pointer", - maxWidth: "none", - width: item.scaledWidth, - height: item.scaledHeight, - marginLeft: item.marginLeft, - marginTop: 0, - transform: rotationTransformValue, - }; - - if (item.isSelected) { - const ratio = item.scaledWidth / item.scaledHeight; - const viewportHeight = item.scaledHeight - SELECTION_MARGIN * 2; - const viewportWidth = item.viewportWidth - SELECTION_MARGIN * 2; - - let height, width; - if (item.scaledWidth > item.scaledHeight) { - width = item.scaledWidth - SELECTION_MARGIN * 2; - height = Math.floor(width / ratio); - } else { - height = item.scaledHeight - SELECTION_MARGIN * 2; - width = Math.floor(height * ratio); - } - - const marginTop = Math.abs(Math.floor((viewportHeight - height) / 2)); - const marginLeft = Math.abs(Math.floor((viewportWidth - width) / 2)); - - style.width = width; - style.height = height; - style.marginLeft = marginLeft === 0 ? 0 : -marginLeft; - style.marginTop = marginTop === 0 ? 0 : -marginTop; - } - - return style; -}; - -export const tileViewport = ({ - item, -}: { - item: ImageExtended; -}): CSSProperties => { - const styles: CSSProperties = { - width: item.viewportWidth, - height: item.scaledHeight, - overflow: "hidden", - }; - if (item.nano) { - styles.background = `url(${item.nano})`; - styles.backgroundSize = "cover"; - styles.backgroundPosition = "center center"; - } - if (item.isSelected) { - styles.width = item.viewportWidth - SELECTION_MARGIN * 2; - styles.height = item.scaledHeight - SELECTION_MARGIN * 2; - styles.margin = SELECTION_MARGIN; - } - return styles; -}; - -export const customOverlay = ({ - hover, -}: { - hover: boolean; -}): CSSProperties => ({ - pointerEvents: "none", - opacity: hover ? 1 : 0, - position: "absolute", - height: "100%", - width: "100%", -}); - -export const galleryItem = ({ margin }: { margin: number }): CSSProperties => ({ - margin, - WebkitUserSelect: "none", - position: "relative", - background: "#eee", - padding: "0px", -}); - -export const tileOverlay = ({ - showOverlay, -}: { - showOverlay: boolean; -}): CSSProperties => ({ - pointerEvents: "none", - opacity: 1, - position: "absolute", - height: "100%", - width: "100%", - background: showOverlay - ? "linear-gradient(to bottom,rgba(0,0,0,0.26),transparent 56px,transparent)" - : "none", -}); - -export const tileIconBar: CSSProperties = { - pointerEvents: "none", - opacity: 1, - position: "absolute", - height: "36px", - width: "100%", -}; - -export const tileDescription: CSSProperties = { - background: "white", - width: "100%", - margin: 0, - userSelect: "text", - WebkitUserSelect: "text", - MozUserSelect: "text", - overflow: "hidden", -}; - -export const bottomBar: CSSProperties = { - padding: "2px", - pointerEvents: "none", - position: "absolute", - minHeight: "0px", - maxHeight: "160px", - width: "100%", - bottom: "0px", - overflow: "hidden", -}; - -export const tagItemBlock: CSSProperties = { - display: "inline-block", - cursor: "pointer", - pointerEvents: "visible", - margin: "2px", -}; - -export const tagItem = (): CSSProperties => ({ - display: "inline", - padding: ".2em .6em .3em", - fontSize: "75%", - fontWeight: "600", - lineHeight: "1", - color: "yellow", - background: "rgba(0,0,0,0.65)", - textAlign: "center", - whiteSpace: "nowrap", - verticalAlign: "baseline", - borderRadius: ".25em", -}); - -export const checkButton = ({ - isVisible, -}: { - isVisible: boolean; -}): CSSProperties => ({ - visibility: isVisible ? "visible" : "hidden", - background: "none", - float: "left", - width: 36, - height: 36, - border: "none", - padding: 6, - cursor: "pointer", - pointerEvents: "visible", -}); diff --git a/src/components/react-grid-gallery/src/types.ts b/src/components/react-grid-gallery/src/types.ts deleted file mode 100644 index 06a2f2f26e0b4d82d12dc9f600e273355508bfa8..0000000000000000000000000000000000000000 --- a/src/components/react-grid-gallery/src/types.ts +++ /dev/null @@ -1,107 +0,0 @@ -import { MouseEvent, CSSProperties, ReactNode, ComponentType } from "react"; - -type Key = string | number; - -export interface ImageTag { - value: ReactNode; - key?: Key; -} - -export interface Image { - key?: Key; - src: string; - width: number; - height: number; - nano?: string; - alt?: string; - tags?: ImageTag[]; - isSelected?: boolean; - caption?: ReactNode; - customOverlay?: ReactNode; - thumbnailCaption?: ReactNode; - orientation?: number; -} - -export type ImageExtended<T extends Image = Image> = T & { - scaledWidth: number; - scaledHeight: number; - viewportWidth: number; - marginLeft: number; -}; - -export interface BuildLayoutOptions { - containerWidth: number; - maxRows?: number; - rowHeight?: number; - margin?: number; -} - -export type ImageExtendedRow<T extends Image = Image> = ImageExtended<T>[]; - -export type EventHandler<T extends Image = Image> = ( - index: number, - item: T, - event: MouseEvent<HTMLElement> -) => void; - -export type StyleFunctionContext<T extends Image = Image> = { - item: T; -}; - -export type StyleFunction<T extends Image = Image> = ( - context: StyleFunctionContext -) => CSSProperties; - -export type StyleProp<T extends Image = Image> = - | CSSProperties - | StyleFunction<T>; - -export interface ImageProps<T extends ImageExtended = ImageExtended> { - item: Image; - index: number; - margin: number; - isSelectable: boolean; - onClick: (index: number, event: MouseEvent<HTMLElement>) => void; - onSelect: (index: number, event: MouseEvent<HTMLElement>) => void; - tileViewportStyle: StyleProp<T>; - thumbnailStyle: StyleProp<T>; - tagStyle: StyleProp<T>; - height?: number; - thumbnailImageComponent?: ComponentType<ThumbnailImageProps>; -} - -export interface ThumbnailImageComponentImageProps { - key: string | number; - src: string; - alt: string; -} - -export type ThumbnailImageProps<T extends ImageExtended = ImageExtended> = - ImageProps<T> & { - imageProps: ThumbnailImageComponentImageProps; - }; - -export interface GalleryProps<T extends Image = Image> { - images: T[]; - id?: string; - enableImageSelection?: boolean; - onSelect?: EventHandler<T>; - rowHeight?: number; - maxRows?: number; - margin?: number; - defaultContainerWidth?: number; - onClick?: EventHandler<T>; - tileViewportStyle?: StyleProp<T>; - thumbnailStyle?: StyleProp<T>; - tagStyle?: StyleProp<T>; - thumbnailImageComponent?: ComponentType<ThumbnailImageProps>; -} - -export interface CheckButtonProps { - isSelected: boolean; - isVisible: boolean; - onClick: (event: MouseEvent<HTMLElement>) => void; - color?: string; - selectedColor?: string; - hoverColor?: string; -} diff --git a/src/components/react-grid-gallery/src/useContainerWidth.ts b/src/components/react-grid-gallery/src/useContainerWidth.ts deleted file mode 100644 index 7a53f17a7b631a43890650bf8ab70650e7e5351d..0000000000000000000000000000000000000000 --- a/src/components/react-grid-gallery/src/useContainerWidth.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { useRef, useCallback, useState } from "react"; - -export function useContainerWidth(defaultContainerWidth: number) { - const ref = useRef<HTMLElement | null>(null); - const observerRef = useRef<ResizeObserver>(); - - const [containerWidth, setContainerWidth] = useState(defaultContainerWidth); - - const containerRef = useCallback((node: HTMLElement | null) => { - observerRef.current?.disconnect(); - observerRef.current = undefined; - - ref.current = node; - - const updateWidth = () => { - if (!ref.current) { - return; - } - let width = ref.current.clientWidth; - try { - width = ref.current.getBoundingClientRect().width; - } catch (err) {} - setContainerWidth(Math.floor(width)); - }; - - updateWidth(); - - if (node && typeof ResizeObserver !== "undefined") { - observerRef.current = new ResizeObserver(updateWidth); - observerRef.current.observe(node); - } - }, []); - - return { containerRef, containerWidth }; -} diff --git a/src/components/seclarations.d.ts b/src/components/seclarations.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..98424fc350d7c1a3d67cc408a6a304e5a3debce2 --- /dev/null +++ b/src/components/seclarations.d.ts @@ -0,0 +1,34 @@ +export * from './comps'; +export * from './Villagebuttons.tsx'; +export * from './headings.tsx'; +export * from './Sidebar.tsx'; +export * from './Pensioniert/timeline-bfh.tsx'; +export * from './Videoboxes.tsx'; +export * from './Timeline.tsx'; + + +export * from '../Button.js'; +export * from '../UrlButton.js'; +export * from '../Events.js'; +export * from './components/Timeline.js'; +export * from './themes/index.js'; +export * from './constants/layouts'; +export * from './utils/themes/defaultTheme'; + +export * from '../ImageAtom.js'; +export * from './components/atoms/MarkdownAtom.js'; + +export * from './components/events/Events'; +export * from '../Card.js'; +export * from './components/events/ImageEvent.js'; +export * from './components/events/TextEvent.js'; +export * from './components/events/TweetEvent'; +export * from './components/events/YouTubeEvent.js'; +export *from './components/events/EventDate.js'; +export * from './Marker.js'; + + +export * from './My-Timeline.tsx' + +export * from './Maps.js' + diff --git a/src/contents/bfh.tsx b/src/contents/Bfh.tsx similarity index 100% rename from src/contents/bfh.tsx rename to src/contents/Bfh.tsx diff --git a/src/contents/index.tsx b/src/contents/index.tsx index 5dde45ae4d890e68f8428c4ed0583e16862637bd..2172d42c590b51eae94cd827f59876c042d14d9c 100644 --- a/src/contents/index.tsx +++ b/src/contents/index.tsx @@ -1 +1,28 @@ -export * from "./Home.tsx"; \ No newline at end of file +export * from "./Home.tsx"; +// Team +export * from "./team.tsx"; +export * from "./attributions.tsx"; +// Project +export * from "./contribution.tsx"; +export * from "./description.tsx"; +/* export * from "./engineering.tsx"; */ +export * from "./experiments.tsx"; +export * from "./notebook.tsx"; +export * from "./results.tsx"; +// Safety +export * from "./safety.tsx"; +// Human Practices +export * from "./human-practices.tsx"; +// Awards +/* export * from "./education.tsx"; +export * from "./entrepreneurship.tsx"; +export * from "./hardware.tsx"; +export * from "./inclusivity.tsx"; +export * from "./measurement.tsx"; +export * from "./model.tsx"; +export * from "./plant.tsx"; +export * from "./software.tsx"; +export * from "./sustainable.tsx"; */ +// Contribution +export * from "./Bfh.tsx"; +export * from "./wiki.tsx"; \ No newline at end of file diff --git a/src/pages.ts b/src/pages.ts index fe199294175571e17a2b3e6abcb314dc5af771e4..9796cb9f21827601a3e6db492658df2fa61f6d09 100644 --- a/src/pages.ts +++ b/src/pages.ts @@ -1,19 +1,18 @@ import { - /* Attributions, Contribution, Description, - Engineering, - Experiments, */ + /* Engineering, */ + Experiments, Home, - /* HumanPractices, + Bfh, + Attributions, + HumanPractices, Notebook, Results, Safety, Team, - - Sustainable, - Bfh, - Wiki */ + /* Sustainable, */ + Wiki } from "./contents"; interface Base { @@ -42,7 +41,7 @@ const Pages: (Page | Folder)[] = [ component: Home, lead: "Precision with every breath", navlist: [""], - },/* + }, { name: "Team", folder: [ @@ -83,14 +82,14 @@ const Pages: (Page | Folder)[] = [ lead: "", navlist: ["Abstract", "Cystic Fibrosis", "Our motivation", "Approach", "Delivery", "Our vision", "References"] }, - { + /* { name: "Engineering", title: "Engineering Success", path: "/engineering", component: Engineering, lead: "Demonstrate engineering success in a technical aspect of your project by going through at least one iteration of the engineering design cycle. This achievement should be distinct from your Contribution for Bronze.", navlist: [""], - }, + }, */ { name: "Experiments", title: "Experiments", @@ -133,7 +132,7 @@ const Pages: (Page | Folder)[] = [ lead: "We ask every team to think deeply and creatively about whether their project is responsible and good for the world. Consider how the world affects your work and how your work affects the world.", navlist: [""], }, - { + /* { name: "Awards", folder: [ @@ -146,7 +145,7 @@ const Pages: (Page | Folder)[] = [ navlist: [""], }, ], - }, + }, */ { name: "Contribution", folder: [ @@ -167,7 +166,7 @@ const Pages: (Page | Folder)[] = [ navlist: [""], }, ] - }, */ + }, ]; export default Pages; \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 9b6ddf82001671b66acd1e0bdf0c52306491409c..55b210e4b74e4b37ca4de51b7268556b1e588ae5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -175,14 +175,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.24.0" -"@babel/runtime@^7.12.0": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.24.7.tgz#f4f0d5530e8dbdf59b3451b9b3e594b6ba082e12" - integrity sha512-UwgBRMjJP+xv857DCngvqXI3Iq6J4v0wXmwc6sapg+zyhbwmQX67LUEFrkK5tbyJ30jGuG3ZvWpBiB9LCy1kWw== - dependencies: - regenerator-runtime "^0.14.0" - -"@babel/runtime@^7.12.5", "@babel/runtime@^7.18.3", "@babel/runtime@^7.21.0", "@babel/runtime@^7.22.5", "@babel/runtime@^7.23.9", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.3", "@babel/runtime@^7.8.7": +"@babel/runtime@^7.12.0", "@babel/runtime@^7.12.5", "@babel/runtime@^7.18.3", "@babel/runtime@^7.21.0", "@babel/runtime@^7.22.5", "@babel/runtime@^7.23.9", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.3", "@babel/runtime@^7.8.7": version "7.24.5" resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.5.tgz" integrity sha512-Nms86NXrsaeU9vbBJKni6gXiEXZ4CVpYVzEjDH9Sb8vmZ3UljyA1GSOJl/6LGPO8EHLuSF9H+IxNXHPX8QHJ4g== @@ -555,6 +548,21 @@ "@jridgewell/resolve-uri" "^3.1.0" "@jridgewell/sourcemap-codec" "^1.4.14" +"@mapbox/node-pre-gyp@^1.0.0": + version "1.0.11" + resolved "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz" + integrity sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ== + dependencies: + detect-libc "^2.0.0" + https-proxy-agent "^5.0.0" + make-dir "^3.1.0" + node-fetch "^2.6.7" + nopt "^5.0.0" + npmlog "^5.0.1" + rimraf "^3.0.2" + semver "^7.3.5" + tar "^6.1.11" + "@mui/base@5.0.0-beta.40": version "5.0.0-beta.40" resolved "https://registry.npmjs.org/@mui/base/-/base-5.0.0-beta.40.tgz" @@ -1040,6 +1048,11 @@ "@types/babel__core" "^7.20.5" react-refresh "^0.14.0" +abbrev@1: + version "1.1.1" + resolved "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz" + integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== + acorn-jsx@^5.3.2: version "5.3.2" resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz" @@ -1050,6 +1063,13 @@ acorn@^8.9.0: resolved "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz" integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg== +agent-base@6: + version "6.0.2" + resolved "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz" + integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== + dependencies: + debug "4" + ajv@^6.12.4: version "6.12.6" resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" @@ -1079,6 +1099,19 @@ ansi-styles@^4.1.0: dependencies: color-convert "^2.0.1" +"aproba@^1.0.3 || ^2.0.0": + version "2.0.0" + resolved "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz" + integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== + +are-we-there-yet@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz" + integrity sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw== + dependencies: + delegates "^1.0.0" + readable-stream "^3.6.0" + argparse@^2.0.1: version "2.0.1" resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" @@ -1150,6 +1183,15 @@ caniuse-lite@^1.0.30001587: resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001616.tgz" integrity sha512-RHVYKov7IcdNjVHJFNY/78RdG4oGVjbayxv8u5IO74Wv7Hlq4PnJE6mo/OjFijjVFNy5ijnCt6H3IIo4t+wfEw== +canvas@^2.11.2: + version "2.11.2" + resolved "https://registry.npmjs.org/canvas/-/canvas-2.11.2.tgz" + integrity sha512-ItanGBMrmRV7Py2Z+Xhs7cT+FNt5K0vPL4p9EZ/UX/Mu7hFbkxSjKF2KVtPwX7UYWp7dRKnrTvReflgrItJbdw== + dependencies: + "@mapbox/node-pre-gyp" "^1.0.0" + nan "^2.17.0" + simple-get "^3.0.3" + chalk@^2.4.2: version "2.4.2" resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" @@ -1167,12 +1209,17 @@ chalk@^4.0.0: ansi-styles "^4.1.0" supports-color "^7.1.0" +chownr@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz" + integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== + classnames@^2.3.2: version "2.5.1" resolved "https://registry.npmjs.org/classnames/-/classnames-2.5.1.tgz" integrity sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow== -clsx@^2.1.0: +clsx@^2.0.0, clsx@^2.1.0: version "2.1.1" resolved "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz" integrity sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA== @@ -1201,6 +1248,11 @@ color-name@~1.1.4: resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== +color-support@^1.1.2: + version "1.1.3" + resolved "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz" + integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== + commander@2: version "2.20.3" resolved "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz" @@ -1211,6 +1263,11 @@ concat-map@0.0.1: resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== +console-control-strings@^1.0.0, console-control-strings@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz" + integrity sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ== + convert-source-map@^1.5.0: version "1.9.0" resolved "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz" @@ -1322,23 +1379,40 @@ d3-zoom@^2.0.0: d3-selection "2" d3-transition "2" -debug@^4.1.0, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4: +debug@4, debug@^4.1.0, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4: version "4.3.4" resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== dependencies: ms "2.1.2" +decompress-response@^4.2.0: + version "4.2.1" + resolved "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz" + integrity sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw== + dependencies: + mimic-response "^2.0.0" + deep-is@^0.1.3: version "0.1.4" resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz" integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== +delegates@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz" + integrity sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ== + dequal@^2.0.3: version "2.0.3" resolved "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz" integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA== +detect-libc@^2.0.0: + version "2.0.3" + resolved "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz" + integrity sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw== + dir-glob@^3.0.1: version "3.0.1" resolved "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz" @@ -1366,6 +1440,11 @@ electron-to-chromium@^1.4.668: resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.757.tgz" integrity sha512-jftDaCknYSSt/+KKeXzH3LX5E2CvRLm75P3Hj+J/dv3CL0qUYcOt13d5FN1NiL5IJbbhzHrb3BomeG2tkSlZmw== +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + error-ex@^1.3.1: version "1.3.2" resolved "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz" @@ -1591,6 +1670,13 @@ flatted@^3.2.9: resolved "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz" integrity sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw== +fs-minipass@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz" + integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== + dependencies: + minipass "^3.0.0" + fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" @@ -1606,6 +1692,21 @@ function-bind@^1.1.2: resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz" integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== +gauge@^3.0.0: + version "3.0.2" + resolved "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz" + integrity sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q== + dependencies: + aproba "^1.0.3 || ^2.0.0" + color-support "^1.1.2" + console-control-strings "^1.0.0" + has-unicode "^2.0.1" + object-assign "^4.1.1" + signal-exit "^3.0.0" + string-width "^4.2.3" + strip-ansi "^6.0.1" + wide-align "^1.1.2" + gensync@^1.0.0-beta.2: version "1.0.0-beta.2" resolved "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz" @@ -1676,6 +1777,11 @@ has-flag@^4.0.0: resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== +has-unicode@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz" + integrity sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ== + hasown@^2.0.2: version "2.0.2" resolved "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz" @@ -1690,6 +1796,14 @@ hoist-non-react-statics@^3.3.1: dependencies: react-is "^16.7.0" +https-proxy-agent@^5.0.0: + version "5.0.1" + resolved "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz" + integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== + dependencies: + agent-base "6" + debug "4" + ignore@^5.2.0, ignore@^5.3.1: version "5.3.1" resolved "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz" @@ -1716,7 +1830,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2: +inherits@2, inherits@^2.0.3: version "2.0.4" resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -1750,6 +1864,11 @@ is-extglob@^2.1.1: resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3: version "4.0.3" resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" @@ -1867,11 +1986,33 @@ lru-cache@^6.0.0: dependencies: yallist "^4.0.0" +make-cancellable-promise@^1.3.1: + version "1.3.2" + resolved "https://registry.npmjs.org/make-cancellable-promise/-/make-cancellable-promise-1.3.2.tgz" + integrity sha512-GCXh3bq/WuMbS+Ky4JBPW1hYTOU+znU+Q5m9Pu+pI8EoUqIHk9+tviOKC6/qhHh8C4/As3tzJ69IF32kdz85ww== + +make-dir@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz" + integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== + dependencies: + semver "^6.0.0" + +make-event-props@^1.6.0: + version "1.6.2" + resolved "https://registry.npmjs.org/make-event-props/-/make-event-props-1.6.2.tgz" + integrity sha512-iDwf7mA03WPiR8QxvcVHmVWEPfMY1RZXerDVNCRYW7dUr2ppH3J58Rwb39/WG39yTZdRSxr3x+2v22tvI0VEvA== + memoize-one@^6.0.0: version "6.0.0" - resolved "https://registry.yarnpkg.com/memoize-one/-/memoize-one-6.0.0.tgz#b2591b871ed82948aee4727dc6abceeeac8c1045" + resolved "https://registry.npmjs.org/memoize-one/-/memoize-one-6.0.0.tgz" integrity sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw== +merge-refs@^1.3.0: + version "1.3.0" + resolved "https://registry.npmjs.org/merge-refs/-/merge-refs-1.3.0.tgz" + integrity sha512-nqXPXbso+1dcKDpPCXvwZyJILz+vSLqGGOnDrYHQYE+B8n9JTCekVLC65AfCpR4ggVyA/45Y0iR9LDyS2iI+zA== + merge2@^1.3.0, merge2@^1.4.1: version "1.4.1" resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz" @@ -1885,6 +2026,11 @@ micromatch@^4.0.4: braces "^3.0.2" picomatch "^2.3.1" +mimic-response@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz" + integrity sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA== + minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: version "3.1.2" resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" @@ -1899,11 +2045,41 @@ minimatch@^9.0.4: dependencies: brace-expansion "^2.0.1" +minipass@^3.0.0: + version "3.3.6" + resolved "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz" + integrity sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw== + dependencies: + yallist "^4.0.0" + +minipass@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz" + integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ== + +minizlib@^2.1.1: + version "2.1.2" + resolved "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz" + integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== + dependencies: + minipass "^3.0.0" + yallist "^4.0.0" + +mkdirp@^1.0.3: + version "1.0.4" + resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== + ms@2.1.2: version "2.1.2" resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== +nan@^2.17.0: + version "2.20.0" + resolved "https://registry.npmjs.org/nan/-/nan-2.20.0.tgz" + integrity sha512-bk3gXBZDGILuuo/6sKtr0DQmSThYHLtNCdSdXk9YkxD/jK6X2vmCyyXBBxyqZ4XcnzTyYEAThfX3DCEnLf6igw== + nanoid@^3.3.7: version "3.3.7" resolved "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz" @@ -1914,17 +2090,41 @@ natural-compare@^1.4.0: resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== +node-fetch@^2.6.7: + version "2.7.0" + resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz" + integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== + dependencies: + whatwg-url "^5.0.0" + node-releases@^2.0.14: version "2.0.14" resolved "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz" integrity sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw== +nopt@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz" + integrity sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ== + dependencies: + abbrev "1" + +npmlog@^5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz" + integrity sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw== + dependencies: + are-we-there-yet "^2.0.0" + console-control-strings "^1.1.0" + gauge "^3.0.0" + set-blocking "^2.0.0" + object-assign@^4.1.1: version "4.1.1" resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== -once@^1.3.0: +once@^1.3.0, once@^1.3.1: version "1.4.0" resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz" integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== @@ -1999,6 +2199,19 @@ path-type@^4.0.0: resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz" integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== +path2d@^0.2.0: + version "0.2.1" + resolved "https://registry.npmjs.org/path2d/-/path2d-0.2.1.tgz" + integrity sha512-Fl2z/BHvkTNvkuBzYTpTuirHZg6wW9z8+4SND/3mDTEcYbbNKWAy21dz9D3ePNNwrrK8pqZO5vLPZ1hLF6T7XA== + +pdfjs-dist@4.3.136: + version "4.3.136" + resolved "https://registry.npmjs.org/pdfjs-dist/-/pdfjs-dist-4.3.136.tgz" + integrity sha512-gzfnt1qc4yA+U46golPGYtU4WM2ssqP2MvFjKga8GEKOrEnzRPrA/9jogLLPYHiA3sGBPJ+p7BdAq+ytmw3jEg== + optionalDependencies: + canvas "^2.11.2" + path2d "^0.2.0" + picocolors@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz" @@ -2073,17 +2286,19 @@ react-bootstrap@^2.10.2: uncontrollable "^7.2.1" warning "^4.0.3" -react-dom@^18.2.0: - version "18.3.1" - resolved "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz" - integrity sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw== +react-dom@^16.13.0: + version "16.14.0" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.14.0.tgz#7ad838ec29a777fb3c75c3a190f661cf92ab8b89" + integrity sha512-1gCeQXDLoIqMgqD3IO2Ah9bnf0w9kzhwN5q4FGnHZ67hBm9yePzB5JJAIQCc8x3pFnNlwFq4RidZggNAAkzWWw== dependencies: loose-envify "^1.1.0" - scheduler "^0.23.2" + object-assign "^4.1.1" + prop-types "^15.6.2" + scheduler "^0.19.1" react-grid-gallery@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/react-grid-gallery/-/react-grid-gallery-1.0.1.tgz#51e9e920cb83df6c61fbd1f2c7eed7db3b6e5a1b" + resolved "https://registry.npmjs.org/react-grid-gallery/-/react-grid-gallery-1.0.1.tgz" integrity sha512-+fVd6fH9tm0W+UMgzRHET/gmzSs2/l2sGOuELLaHXMto6UhuZdscj9ILHOYe7hn0GBRUJiczMllsEs7OJz9uPA== react-is@^16.13.1, react-is@^16.3.2, react-is@^16.7.0: @@ -2101,6 +2316,20 @@ react-lifecycles-compat@^3.0.4: resolved "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz" integrity sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA== +react-pdf@^9.0.0: + version "9.0.0" + resolved "https://registry.npmjs.org/react-pdf/-/react-pdf-9.0.0.tgz" + integrity sha512-J+pza8R2p9oNEOJOHIQJI4o5rFK7ji7bBl2IvsHvz1OOyphvuzVDo5tOJwWAFAbxYauCH3Kt8jOvcMJUOpxYZQ== + dependencies: + clsx "^2.0.0" + dequal "^2.0.3" + make-cancellable-promise "^1.3.1" + make-event-props "^1.6.0" + merge-refs "^1.3.0" + pdfjs-dist "4.3.136" + tiny-invariant "^1.0.0" + warning "^4.0.0" + react-refresh@^0.14.0: version "0.14.2" resolved "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.2.tgz" @@ -2123,7 +2352,7 @@ react-router@6.23.0: react-select@^5.8.0: version "5.8.0" - resolved "https://registry.yarnpkg.com/react-select/-/react-select-5.8.0.tgz#bd5c467a4df223f079dd720be9498076a3f085b5" + resolved "https://registry.npmjs.org/react-select/-/react-select-5.8.0.tgz" integrity sha512-TfjLDo58XrhP6VG5M/Mi56Us0Yt8X7xD6cDybC7yoRMUNm7BGO7qk8J0TLQOua/prb8vUOtsfnXZwfm30HGsAA== dependencies: "@babel/runtime" "^7.12.0" @@ -2156,12 +2385,23 @@ react-transition-group@^4.3.0, react-transition-group@^4.4.5: loose-envify "^1.4.0" prop-types "^15.6.2" -react@^18.2.0: - version "18.3.1" - resolved "https://registry.npmjs.org/react/-/react-18.3.1.tgz" - integrity sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ== +react@^16.13.0: + version "16.14.0" + resolved "https://registry.yarnpkg.com/react/-/react-16.14.0.tgz#94d776ddd0aaa37da3eda8fc5b6b18a4c9a3114d" + integrity sha512-0X2CImDkJGApiAlcf0ODKIneSwBPhqJawOa5wCtKbu7ZECrmS26NvtSILynQ66cgkT/RJ4LidJOc3bUESwmU8g== dependencies: loose-envify "^1.1.0" + object-assign "^4.1.1" + prop-types "^15.6.2" + +readable-stream@^3.6.0: + version "3.6.2" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz" + integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" regenerator-runtime@^0.14.0: version "0.14.1" @@ -2226,25 +2466,36 @@ run-parallel@^1.1.9: dependencies: queue-microtask "^1.2.2" -scheduler@^0.23.2: - version "0.23.2" - resolved "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz" - integrity sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ== +safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +scheduler@^0.19.1: + version "0.19.1" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.19.1.tgz#4f3e2ed2c1a7d65681f4c854fa8c5a1ccb40f196" + integrity sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA== dependencies: loose-envify "^1.1.0" + object-assign "^4.1.1" -semver@^6.3.1: +semver@^6.0.0, semver@^6.3.1: version "6.3.1" resolved "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -semver@^7.6.0: +semver@^7.3.5, semver@^7.6.0: version "7.6.0" resolved "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz" integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg== dependencies: lru-cache "^6.0.0" +set-blocking@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz" + integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== + shebang-command@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" @@ -2257,6 +2508,25 @@ shebang-regex@^3.0.0: resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== +signal-exit@^3.0.0: + version "3.0.7" + resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz" + integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== + +simple-concat@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz" + integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q== + +simple-get@^3.0.3: + version "3.1.1" + resolved "https://registry.npmjs.org/simple-get/-/simple-get-3.1.1.tgz" + integrity sha512-CQ5LTKGfCpvE1K0n2us+kuMPbk/q0EKl82s4aheV9oXjFEz6W/Y7oQFVJuU6QG77hRT4Ghb5RURteF5vnWjupA== + dependencies: + decompress-response "^4.2.0" + once "^1.3.1" + simple-concat "^1.0.0" + slash@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz" @@ -2272,6 +2542,22 @@ source-map@^0.5.7: resolved "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz" integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ== +"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.2.3: + version "4.2.3" + resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + strip-ansi@^6.0.1: version "6.0.1" resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" @@ -2308,11 +2594,28 @@ supports-preserve-symlinks-flag@^1.0.0: resolved "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz" integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== +tar@^6.1.11: + version "6.2.1" + resolved "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz" + integrity sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A== + dependencies: + chownr "^2.0.0" + fs-minipass "^2.0.0" + minipass "^5.0.0" + minizlib "^2.1.1" + mkdirp "^1.0.3" + yallist "^4.0.0" + text-table@^0.2.0: version "0.2.0" resolved "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz" integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== +tiny-invariant@^1.0.0: + version "1.3.3" + resolved "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz" + integrity sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg== + to-fast-properties@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz" @@ -2332,6 +2635,11 @@ topojson-client@^3.1.0: dependencies: commander "2" +tr46@~0.0.3: + version "0.0.3" + resolved "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz" + integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== + ts-api-utils@^1.3.0: version "1.3.0" resolved "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz" @@ -2396,9 +2704,14 @@ uri-js@^4.2.2: use-isomorphic-layout-effect@^1.1.2: version "1.1.2" - resolved "https://registry.yarnpkg.com/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.2.tgz#497cefb13d863d687b08477d9e5a164ad8c1a6fb" + resolved "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.2.tgz" integrity sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA== +util-deprecate@^1.0.1: + version "1.0.2" + resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== + vite@^5.2.0: version "5.2.11" resolved "https://registry.npmjs.org/vite/-/vite-5.2.11.tgz" @@ -2417,6 +2730,19 @@ warning@^4.0.0, warning@^4.0.3: dependencies: loose-envify "^1.0.0" +webidl-conversions@^3.0.0: + version "3.0.1" + resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz" + integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== + +whatwg-url@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz" + integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== + dependencies: + tr46 "~0.0.3" + webidl-conversions "^3.0.0" + which@^2.0.1: version "2.0.2" resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz" @@ -2424,6 +2750,13 @@ which@^2.0.1: dependencies: isexe "^2.0.0" +wide-align@^1.1.2: + version "1.1.5" + resolved "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz" + integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg== + dependencies: + string-width "^1.0.2 || 2 || 3 || 4" + word-wrap@^1.2.5: version "1.2.5" resolved "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz"