diff --git a/.eslintrc.json b/.eslintrc.json index 33b18df99..c22a63d3c 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -9,7 +9,8 @@ "plugin:react-hooks/recommended", "plugin:@typescript-eslint/recommended", "plugin:@microsoft/eslint-plugin-sdl/recommended", - "prettier" + "prettier", + "plugin:react/jsx-runtime" ], "parser": "@typescript-eslint/parser", "parserOptions": { diff --git a/package-lock.json b/package-lock.json index 5ec592b75..b3dd60a25 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,7 +14,9 @@ "@emotion/styled": "^11.11.0", "@nylas/react": "^1.3.1", "@oneblink/sdk-core": "^8.11.1-beta.4", - "@react-google-maps/api": "2.19.2", + "@react-google-maps/api": "^2.20.8", + "@react-input/mask": "^2.0.4", + "@tanstack/react-table": "^8.21.3", "blueimp-load-image": "^5.16.0", "bulma": "^0.9.4", "bulma-slider": "2.0.4", @@ -32,24 +34,21 @@ "lodash.debounce": "^4.0.8", "lodash.throttle": "^4.1.1", "morph-expressions": "^1.1.1", - "qrcode.react": "^4.1.0", + "qrcode.react": "^4.2.0", "query-string": "^8.1.0", "react-google-recaptcha": "^3.1.0", "react-image-crop": "^11.0.10", - "react-input-mask": "^2.0.4", - "react-signature-canvas": "^1.0.6", - "react-table": "^7.8.0", + "react-signature-canvas": "^1.1.0-alpha.2", "sanitize-html": "^2.11.0", - "use-resize-observer": "^9.1.0", + "usehooks-ts": "^3.1.1", "uuid": "^9.0.1", "xml2js": "^0.6.2" }, "devDependencies": { "@babel/preset-env": "^7.23.9", "@microsoft/eslint-plugin-sdl": "^0.2.2", - "@mui/lab": "^5.0.0-alpha.152", - "@mui/material": "^5.15.6", - "@mui/x-date-pickers": "^6.20.2", + "@mui/material": "^7.3.6", + "@mui/x-date-pickers": "^8.22.1", "@oneblink/apps": "^23.7.0-beta.1", "@oneblink/release-cli": "^3.4.0-beta.1", "@oneblink/types": "github:oneblink/types", @@ -60,12 +59,10 @@ "@types/lodash.clonedeep": "^4.5.9", "@types/lodash.debounce": "^4.0.9", "@types/lodash.throttle": "^4.1.9", - "@types/react": "^17.0.73", + "@types/react": "^19.2.7", "@types/react-google-recaptcha": "^2.1.9", - "@types/react-input-mask": "^3.0.5", "@types/react-router-dom": "^5.3.3", "@types/react-signature-canvas": "^1.0.5", - "@types/react-table": "^7.7.19", "@types/sanitize-html": "^2.9.5", "@types/ua-parser-js": "^0.7.39", "@types/uuid": "^9.0.8", @@ -82,13 +79,13 @@ "jsdom": "^27.2.0", "prettier": "^3.2.4", "prettier-plugin-jsdoc": "^1.3.0", - "react": "^17.0.2", - "react-dom": "^17.0.2", + "react": "^19.2.3", + "react-dom": "^19.2.3", "react-router-dom": "^5.3.4", "sass": "^1.70.0", "tsc-watch": "^6.0.4", - "typedoc": "^0.26.9", - "typescript": "^5.6.3", + "typedoc": "^0.28.15", + "typescript": "^5.9.3", "vitest": "^4.0.9" }, "engines": { @@ -96,12 +93,11 @@ "npm": ">=10" }, "peerDependencies": { - "@mui/lab": "^5.0.0 || ^5.0.0-alpha.152", - "@mui/material": "^5.6.1", - "@mui/x-date-pickers": "^6.20.2", + "@mui/material": "^7.3.6", + "@mui/x-date-pickers": "^8.22.1", "@oneblink/apps": "*", - "react": "^17.0.0", - "react-dom": "^17.0.0", + "react": "^19.2.3", + "react-dom": "^19.2.3", "react-router-dom": "^5.2.0" } }, @@ -3448,13 +3444,10 @@ "dev": true }, "node_modules/@babel/runtime": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.0.tgz", - "integrity": "sha512-VtPOkrdPHZsKc/clNqyi9WUA8TINkZ4cGk63UUE3u4pmB2k+ZMQRDuIOagv8UVd6j7k0T3+RRIb7beKTebNbcw==", + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.4.tgz", + "integrity": "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==", "license": "MIT", - "dependencies": { - "regenerator-runtime": "^0.14.0" - }, "engines": { "node": ">=6.9.0" } @@ -3679,21 +3672,35 @@ } }, "node_modules/@emotion/cache": { - "version": "11.11.0", - "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.11.0.tgz", - "integrity": "sha512-P34z9ssTCBi3e9EI1ZsWpNHcfY1r09ZO0rZbRO2ob3ZQMnFI35jB536qoXbkdesr5EUhYi22anuEJuyxifaqAQ==", + "version": "11.14.0", + "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.14.0.tgz", + "integrity": "sha512-L/B1lc/TViYk4DcpGxtAVbx0ZyiKM5ktoIyafGkH6zg/tj+mA+NE//aPYKG0k8kCHSHVJrpLpcAlOBEXQ3SavA==", + "license": "MIT", "dependencies": { - "@emotion/memoize": "^0.8.1", - "@emotion/sheet": "^1.2.2", - "@emotion/utils": "^1.2.1", - "@emotion/weak-memoize": "^0.3.1", + "@emotion/memoize": "^0.9.0", + "@emotion/sheet": "^1.4.0", + "@emotion/utils": "^1.4.2", + "@emotion/weak-memoize": "^0.4.0", "stylis": "4.2.0" } }, + "node_modules/@emotion/cache/node_modules/@emotion/memoize": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.9.0.tgz", + "integrity": "sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ==", + "license": "MIT" + }, + "node_modules/@emotion/cache/node_modules/@emotion/weak-memoize": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.4.0.tgz", + "integrity": "sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg==", + "license": "MIT" + }, "node_modules/@emotion/hash": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.1.tgz", - "integrity": "sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ==" + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.2.tgz", + "integrity": "sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==", + "license": "MIT" }, "node_modules/@emotion/is-prop-valid": { "version": "1.2.1", @@ -3732,21 +3739,29 @@ } }, "node_modules/@emotion/serialize": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.1.3.tgz", - "integrity": "sha512-iD4D6QVZFDhcbH0RAG1uVu1CwVLMWUkCvAqqlewO/rxf8+87yIBAlt4+AxMiiKPLs5hFc0owNk/sLLAOROw3cA==", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.3.3.tgz", + "integrity": "sha512-EISGqt7sSNWHGI76hC7x1CksiXPahbxEOrC5RjmFRJTqLyEK9/9hZvBbiYn70dw4wuwMKiEMCUlR6ZXTSWQqxA==", + "license": "MIT", "dependencies": { - "@emotion/hash": "^0.9.1", - "@emotion/memoize": "^0.8.1", - "@emotion/unitless": "^0.8.1", - "@emotion/utils": "^1.2.1", + "@emotion/hash": "^0.9.2", + "@emotion/memoize": "^0.9.0", + "@emotion/unitless": "^0.10.0", + "@emotion/utils": "^1.4.2", "csstype": "^3.0.2" } }, + "node_modules/@emotion/serialize/node_modules/@emotion/memoize": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.9.0.tgz", + "integrity": "sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ==", + "license": "MIT" + }, "node_modules/@emotion/sheet": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.2.2.tgz", - "integrity": "sha512-0QBtGvaqtWi+nx6doRwDdBIzhNdZrXUppvTM4dtZZWEGTXL/XE/yJxLMGlDT1Gt+UHH5IX1n+jkXyytE/av7OA==" + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.4.0.tgz", + "integrity": "sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg==", + "license": "MIT" }, "node_modules/@emotion/styled": { "version": "11.11.0", @@ -3771,9 +3786,10 @@ } }, "node_modules/@emotion/unitless": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.1.tgz", - "integrity": "sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ==" + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.10.0.tgz", + "integrity": "sha512-dFoMUuQA20zvtVTuxZww6OHoJYgrzfKM1t52mVySDJnMSEa08ruEvdYQbhvyu6soU+NeLVd3yKfTfT0NeV6qGg==", + "license": "MIT" }, "node_modules/@emotion/use-insertion-effect-with-fallbacks": { "version": "1.0.1", @@ -3784,9 +3800,10 @@ } }, "node_modules/@emotion/utils": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.2.1.tgz", - "integrity": "sha512-Y2tGf3I+XVnajdItskUCn6LX+VUDmP6lTL4fcqsXAv43dnlbZiuW4MWQW38rW/BVWSE7Q/7+XQocmpnRYILUmg==" + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.4.2.tgz", + "integrity": "sha512-3vLclRofFziIa3J2wDh9jjbkUz9qk5Vi3IZ/FSTKViB0k+ef0fPV7dYrUIugbgupYDx7v9ud/SjrtEP8Y4xLoA==", + "license": "MIT" }, "node_modules/@emotion/weak-memoize": { "version": "0.3.1", @@ -4371,17 +4388,24 @@ "timezone-groups": "0.8.0" } }, + "node_modules/@esri/calcite-components/node_modules/dayjs": { + "version": "1.11.10", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.10.tgz", + "integrity": "sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==", + "license": "MIT" + }, "node_modules/@esri/calcite-components/node_modules/sortablejs": { "version": "1.15.1", "resolved": "https://registry.npmjs.org/sortablejs/-/sortablejs-1.15.1.tgz", "integrity": "sha512-P5Cjvb0UG1ZVNiDPj/n4V+DinttXG6K8n7vM/HQf0C25K3YKQTQY6fsr/sEGsJGpQ9exmPxluHxKBc0mLKU1lQ==" }, "node_modules/@floating-ui/core": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.0.tgz", - "integrity": "sha512-PcF++MykgmTj3CIyOQbKA/hDzOAiqI3mhuoN44WRCopIs1sgoDoU4oty4Jtqaj/y3oDU6fnVSm4QG0a3t5i0+g==", + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.3.tgz", + "integrity": "sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w==", + "license": "MIT", "dependencies": { - "@floating-ui/utils": "^0.2.1" + "@floating-ui/utils": "^0.2.10" } }, "node_modules/@floating-ui/dom": { @@ -4393,23 +4417,11 @@ "@floating-ui/utils": "^0.2.0" } }, - "node_modules/@floating-ui/react-dom": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.0.8.tgz", - "integrity": "sha512-HOdqOt3R3OGeTKidaLvJKcgg75S6tibQ3Tif4eyd91QnIJWr0NLvoXFpJA/j8HqkFSL68GDca9AuyWEHlhyClw==", - "dev": true, - "dependencies": { - "@floating-ui/dom": "^1.6.1" - }, - "peerDependencies": { - "react": ">=16.8.0", - "react-dom": ">=16.8.0" - } - }, "node_modules/@floating-ui/utils": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.1.tgz", - "integrity": "sha512-9TANp6GPoMtYzQdt54kfAyMmz1+osLlXdg2ENroU7zzrtflTLrrC/lgrIfaSe+Wu0b89GKccT7vxXA0MoAIO+Q==" + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.10.tgz", + "integrity": "sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==", + "license": "MIT" }, "node_modules/@fullcalendar/core": { "version": "6.1.8", @@ -4460,18 +4472,31 @@ "@fullcalendar/core": "~6.1.8" } }, - "node_modules/@googlemaps/js-api-loader": { - "version": "1.16.2", - "resolved": "https://registry.npmjs.org/@googlemaps/js-api-loader/-/js-api-loader-1.16.2.tgz", - "integrity": "sha512-psGw5u0QM6humao48Hn4lrChOM2/rA43ZCm3tKK9qQsEj1/VzqkCqnvGfEOshDbBQflydfaRovbKwZMF4AyqbA==", + "node_modules/@gerrit0/mini-shiki": { + "version": "3.20.0", + "resolved": "https://registry.npmjs.org/@gerrit0/mini-shiki/-/mini-shiki-3.20.0.tgz", + "integrity": "sha512-Wa57i+bMpK6PGJZ1f2myxo3iO+K/kZikcyvH8NIqNNZhQUbDav7V9LQmWOXhf946mz5c1NZ19WMsGYiDKTryzQ==", + "dev": true, + "license": "MIT", "dependencies": { - "fast-deep-equal": "^3.1.3" + "@shikijs/engine-oniguruma": "^3.20.0", + "@shikijs/langs": "^3.20.0", + "@shikijs/themes": "^3.20.0", + "@shikijs/types": "^3.20.0", + "@shikijs/vscode-textmate": "^10.0.2" } }, + "node_modules/@googlemaps/js-api-loader": { + "version": "1.16.8", + "resolved": "https://registry.npmjs.org/@googlemaps/js-api-loader/-/js-api-loader-1.16.8.tgz", + "integrity": "sha512-CROqqwfKotdO6EBjZO/gQGVTbeDps5V7Mt9+8+5Q+jTg5CRMi3Ii/L9PmV3USROrt2uWxtGzJHORmByxyo9pSQ==", + "license": "Apache-2.0" + }, "node_modules/@googlemaps/markerclusterer": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/@googlemaps/markerclusterer/-/markerclusterer-2.3.2.tgz", - "integrity": "sha512-zb9OQP8XscZp2Npt1uQUYnGKu1miuq4DPP28JyDuFd6HV17HCEcjV9MtBi4muG/iVRXXvuHW9bRCnHbao9ITfw==", + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/@googlemaps/markerclusterer/-/markerclusterer-2.5.3.tgz", + "integrity": "sha512-x7lX0R5yYOoiNectr10wLgCBasNcXFHiADIBdmn7jQllF2B5ENQw5XtZK+hIw4xnV0Df0xhN4LN98XqA5jaiOw==", + "license": "Apache-2.0", "dependencies": { "fast-deep-equal": "^3.1.3", "supercluster": "^8.0.1" @@ -4585,11 +4610,6 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "node_modules/@juggle/resize-observer": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/@juggle/resize-observer/-/resize-observer-3.4.0.tgz", - "integrity": "sha512-dfLbk+PwWvFzSxwk3n5ySL0hfBog779o8h68wK/7/APo/7cgyWp5jcXockbxdk5kFRkbeXWm4Fbi9FrdN381sA==" - }, "node_modules/@lit-labs/ssr-dom-shim": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@lit-labs/ssr-dom-shim/-/ssr-dom-shim-1.2.0.tgz", @@ -4707,110 +4727,39 @@ "integrity": "sha512-W6CLUJ2eBMw3Rec70qrsEW0jOm/3twwJv21mrmj2yORiaVmVYGS4sSS5yUwvQc1ZlDLYGPnClVWmUUMagKNsfA==", "license": "MIT" }, - "node_modules/@mui/base": { - "version": "5.0.0-beta.33", - "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-beta.33.tgz", - "integrity": "sha512-WcSpoJUw/UYHXpvgtl4HyMar2Ar97illUpqiS/X1gtSBp6sdDW6kB2BJ9OlVQ+Kk/RL2GDp/WHA9sbjAYV35ow==", - "dev": true, - "dependencies": { - "@babel/runtime": "^7.23.8", - "@floating-ui/react-dom": "^2.0.6", - "@mui/types": "^7.2.13", - "@mui/utils": "^5.15.6", - "@popperjs/core": "^2.11.8", - "clsx": "^2.1.0", - "prop-types": "^15.8.1" - }, - "engines": { - "node": ">=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mui-org" - }, - "peerDependencies": { - "@types/react": "^17.0.0 || ^18.0.0", - "react": "^17.0.0 || ^18.0.0", - "react-dom": "^17.0.0 || ^18.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, "node_modules/@mui/core-downloads-tracker": { - "version": "5.15.6", - "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.15.6.tgz", - "integrity": "sha512-0aoWS4qvk1uzm9JBs83oQmIMIQeTBUeqqu8u+3uo2tMznrB5fIKqQVCbCgq+4Tm4jG+5F7dIvnjvQ2aV7UKtdw==", + "version": "7.3.6", + "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-7.3.6.tgz", + "integrity": "sha512-QaYtTHlr8kDFN5mE1wbvVARRKH7Fdw1ZuOjBJcFdVpfNfRYKF3QLT4rt+WaB6CKJvpqxRsmEo0kpYinhH5GeHg==", "dev": true, + "license": "MIT", "funding": { "type": "opencollective", "url": "https://opencollective.com/mui-org" } }, - "node_modules/@mui/lab": { - "version": "5.0.0-alpha.162", - "resolved": "https://registry.npmjs.org/@mui/lab/-/lab-5.0.0-alpha.162.tgz", - "integrity": "sha512-nSdlhq1YVozKXn6mtItWmnU9b/gQ708RSWG6C+M/Y096MlQ7Mz1gdNWOEwcGw2HaNoNgDvuG0+0HKARAMIMaLg==", + "node_modules/@mui/material": { + "version": "7.3.6", + "resolved": "https://registry.npmjs.org/@mui/material/-/material-7.3.6.tgz", + "integrity": "sha512-R4DaYF3dgCQCUAkr4wW1w26GHXcf5rCmBRHVBuuvJvaGLmZdD8EjatP80Nz5JCw0KxORAzwftnHzXVnjR8HnFw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/runtime": "^7.23.8", - "@mui/base": "5.0.0-beta.33", - "@mui/system": "^5.15.6", - "@mui/types": "^7.2.13", - "@mui/utils": "^5.15.6", - "clsx": "^2.1.0", - "prop-types": "^15.8.1" - }, - "engines": { - "node": ">=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mui-org" - }, - "peerDependencies": { - "@emotion/react": "^11.5.0", - "@emotion/styled": "^11.3.0", - "@mui/material": ">=5.15.0", - "@types/react": "^17.0.0 || ^18.0.0", - "react": "^17.0.0 || ^18.0.0", - "react-dom": "^17.0.0 || ^18.0.0" - }, - "peerDependenciesMeta": { - "@emotion/react": { - "optional": true - }, - "@emotion/styled": { - "optional": true - }, - "@types/react": { - "optional": true - } - } - }, - "node_modules/@mui/material": { - "version": "5.15.6", - "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.15.6.tgz", - "integrity": "sha512-rw7bDdpi2kzfmcDN78lHp8swArJ5sBCKsn+4G3IpGfu44ycyWAWX0VdlvkjcR9Yrws2KIm7c+8niXpWHUDbWoA==", - "dev": true, - "dependencies": { - "@babel/runtime": "^7.23.8", - "@mui/base": "5.0.0-beta.33", - "@mui/core-downloads-tracker": "^5.15.6", - "@mui/system": "^5.15.6", - "@mui/types": "^7.2.13", - "@mui/utils": "^5.15.6", - "@types/react-transition-group": "^4.4.10", - "clsx": "^2.1.0", - "csstype": "^3.1.2", + "@babel/runtime": "^7.28.4", + "@mui/core-downloads-tracker": "^7.3.6", + "@mui/system": "^7.3.6", + "@mui/types": "^7.4.9", + "@mui/utils": "^7.3.6", + "@popperjs/core": "^2.11.8", + "@types/react-transition-group": "^4.4.12", + "clsx": "^2.1.1", + "csstype": "^3.1.3", "prop-types": "^15.8.1", - "react-is": "^18.2.0", + "react-is": "^19.2.0", "react-transition-group": "^4.4.5" }, "engines": { - "node": ">=12.0.0" + "node": ">=14.0.0" }, "funding": { "type": "opencollective", @@ -4819,9 +4768,10 @@ "peerDependencies": { "@emotion/react": "^11.5.0", "@emotion/styled": "^11.3.0", - "@types/react": "^17.0.0 || ^18.0.0", - "react": "^17.0.0 || ^18.0.0", - "react-dom": "^17.0.0 || ^18.0.0" + "@mui/material-pigment-css": "^7.3.6", + "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0" }, "peerDependenciesMeta": { "@emotion/react": { @@ -4830,31 +4780,35 @@ "@emotion/styled": { "optional": true }, + "@mui/material-pigment-css": { + "optional": true + }, "@types/react": { "optional": true } } }, "node_modules/@mui/private-theming": { - "version": "5.15.6", - "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.15.6.tgz", - "integrity": "sha512-ZBX9E6VNUSscUOtU8uU462VvpvBS7eFl5VfxAzTRVQBHflzL+5KtnGrebgf6Nd6cdvxa1o0OomiaxSKoN2XDmg==", + "version": "7.3.6", + "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-7.3.6.tgz", + "integrity": "sha512-Ws9wZpqM+FlnbZXaY/7yvyvWQo1+02Tbx50mVdNmzWEi51C51y56KAbaDCYyulOOBL6BJxuaqG8rNNuj7ivVyw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/runtime": "^7.23.8", - "@mui/utils": "^5.15.6", + "@babel/runtime": "^7.28.4", + "@mui/utils": "^7.3.6", "prop-types": "^15.8.1" }, "engines": { - "node": ">=12.0.0" + "node": ">=14.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/mui-org" }, "peerDependencies": { - "@types/react": "^17.0.0 || ^18.0.0", - "react": "^17.0.0 || ^18.0.0" + "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0" }, "peerDependenciesMeta": { "@types/react": { @@ -4863,18 +4817,21 @@ } }, "node_modules/@mui/styled-engine": { - "version": "5.15.6", - "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.15.6.tgz", - "integrity": "sha512-KAn8P8xP/WigFKMlEYUpU9z2o7jJnv0BG28Qu1dhNQVutsLVIFdRf5Nb+0ijp2qgtcmygQ0FtfRuXv5LYetZTg==", + "version": "7.3.6", + "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-7.3.6.tgz", + "integrity": "sha512-+wiYbtvj+zyUkmDB+ysH6zRjuQIJ+CM56w0fEXV+VDNdvOuSywG+/8kpjddvvlfMLsaWdQe5oTuYGBcodmqGzQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/runtime": "^7.23.8", - "@emotion/cache": "^11.11.0", - "csstype": "^3.1.2", + "@babel/runtime": "^7.28.4", + "@emotion/cache": "^11.14.0", + "@emotion/serialize": "^1.3.3", + "@emotion/sheet": "^1.4.0", + "csstype": "^3.1.3", "prop-types": "^15.8.1" }, "engines": { - "node": ">=12.0.0" + "node": ">=14.0.0" }, "funding": { "type": "opencollective", @@ -4883,7 +4840,7 @@ "peerDependencies": { "@emotion/react": "^11.4.1", "@emotion/styled": "^11.3.0", - "react": "^17.0.0 || ^18.0.0" + "react": "^17.0.0 || ^18.0.0 || ^19.0.0" }, "peerDependenciesMeta": { "@emotion/react": { @@ -4895,22 +4852,23 @@ } }, "node_modules/@mui/system": { - "version": "5.15.6", - "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.15.6.tgz", - "integrity": "sha512-J01D//u8IfXvaEHMBQX5aO2l7Q+P15nt96c4NskX7yp5/+UuZP8XCQJhtBtLuj+M2LLyXHYGmCPeblsmmscP2Q==", + "version": "7.3.6", + "resolved": "https://registry.npmjs.org/@mui/system/-/system-7.3.6.tgz", + "integrity": "sha512-8fehAazkHNP1imMrdD2m2hbA9sl7Ur6jfuNweh5o4l9YPty4iaZzRXqYvBCWQNwFaSHmMEj2KPbyXGp7Bt73Rg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/runtime": "^7.23.8", - "@mui/private-theming": "^5.15.6", - "@mui/styled-engine": "^5.15.6", - "@mui/types": "^7.2.13", - "@mui/utils": "^5.15.6", - "clsx": "^2.1.0", - "csstype": "^3.1.2", + "@babel/runtime": "^7.28.4", + "@mui/private-theming": "^7.3.6", + "@mui/styled-engine": "^7.3.6", + "@mui/types": "^7.4.9", + "@mui/utils": "^7.3.6", + "clsx": "^2.1.1", + "csstype": "^3.1.3", "prop-types": "^15.8.1" }, "engines": { - "node": ">=12.0.0" + "node": ">=14.0.0" }, "funding": { "type": "opencollective", @@ -4919,8 +4877,8 @@ "peerDependencies": { "@emotion/react": "^11.5.0", "@emotion/styled": "^11.3.0", - "@types/react": "^17.0.0 || ^18.0.0", - "react": "^17.0.0 || ^18.0.0" + "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0" }, "peerDependenciesMeta": { "@emotion/react": { @@ -4935,12 +4893,16 @@ } }, "node_modules/@mui/types": { - "version": "7.2.13", - "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.2.13.tgz", - "integrity": "sha512-qP9OgacN62s+l8rdDhSFRe05HWtLLJ5TGclC9I1+tQngbssu0m2dmFZs+Px53AcOs9fD7TbYd4gc9AXzVqO/+g==", + "version": "7.4.9", + "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.4.9.tgz", + "integrity": "sha512-dNO8Z9T2cujkSIaCnWwprfeKmTWh97cnjkgmpFJ2sbfXLx8SMZijCYHOtP/y5nnUb/Rm2omxbDMmtUoSaUtKaw==", "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.28.4" + }, "peerDependencies": { - "@types/react": "^17.0.0 || ^18.0.0" + "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0" }, "peerDependenciesMeta": { "@types/react": { @@ -4949,26 +4911,29 @@ } }, "node_modules/@mui/utils": { - "version": "5.15.6", - "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.15.6.tgz", - "integrity": "sha512-qfEhf+zfU9aQdbzo1qrSWlbPQhH1nCgeYgwhOVnj9Bn39shJQitEnXpSQpSNag8+uty5Od6PxmlNKPTnPySRKA==", + "version": "7.3.6", + "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-7.3.6.tgz", + "integrity": "sha512-jn+Ba02O6PiFs7nKva8R2aJJ9kJC+3kQ2R0BbKNY3KQQ36Qng98GnPRFTlbwYTdMD6hLEBKaMLUktyg/rTfd2w==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/runtime": "^7.23.8", - "@types/prop-types": "^15.7.11", + "@babel/runtime": "^7.28.4", + "@mui/types": "^7.4.9", + "@types/prop-types": "^15.7.15", + "clsx": "^2.1.1", "prop-types": "^15.8.1", - "react-is": "^18.2.0" + "react-is": "^19.2.0" }, "engines": { - "node": ">=12.0.0" + "node": ">=14.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/mui-org" }, "peerDependencies": { - "@types/react": "^17.0.0 || ^18.0.0", - "react": "^17.0.0 || ^18.0.0" + "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0" }, "peerDependenciesMeta": { "@types/react": { @@ -4977,17 +4942,17 @@ } }, "node_modules/@mui/x-date-pickers": { - "version": "6.20.2", - "resolved": "https://registry.npmjs.org/@mui/x-date-pickers/-/x-date-pickers-6.20.2.tgz", - "integrity": "sha512-x1jLg8R+WhvkmUETRfX2wC+xJreMii78EXKLl6r3G+ggcAZlPyt0myID1Amf6hvJb9CtR7CgUo8BwR+1Vx9Ggw==", + "version": "8.22.1", + "resolved": "https://registry.npmjs.org/@mui/x-date-pickers/-/x-date-pickers-8.22.1.tgz", + "integrity": "sha512-7tnUaKLllBYaliGeSP9vpN2Og33LYRfQW2Eq/F4xeNMQDUAa/6H2N822KW5NtdvW32KxjKkJiWZokgfBfVBtxg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/runtime": "^7.23.2", - "@mui/base": "^5.0.0-beta.22", - "@mui/utils": "^5.14.16", - "@types/react-transition-group": "^4.4.8", - "clsx": "^2.0.0", + "@babel/runtime": "^7.28.4", + "@mui/utils": "^7.3.5", + "@mui/x-internals": "8.22.0", + "@types/react-transition-group": "^4.4.12", + "clsx": "^2.1.1", "prop-types": "^15.8.1", "react-transition-group": "^4.4.5" }, @@ -4996,22 +4961,22 @@ }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/mui" + "url": "https://opencollective.com/mui-org" }, "peerDependencies": { "@emotion/react": "^11.9.0", "@emotion/styled": "^11.8.1", - "@mui/material": "^5.8.6", - "@mui/system": "^5.8.0", - "date-fns": "^2.25.0 || ^3.2.0", - "date-fns-jalali": "^2.13.0-0", + "@mui/material": "^5.15.14 || ^6.0.0 || ^7.0.0", + "@mui/system": "^5.15.14 || ^6.0.0 || ^7.0.0", + "date-fns": "^2.25.0 || ^3.2.0 || ^4.0.0", + "date-fns-jalali": "^2.13.0-0 || ^3.2.0-0 || ^4.0.0-0", "dayjs": "^1.10.7", "luxon": "^3.0.2", "moment": "^2.29.4", - "moment-hijri": "^2.1.2", + "moment-hijri": "^2.1.2 || ^3.0.0", "moment-jalaali": "^0.7.4 || ^0.8.0 || ^0.9.0 || ^0.10.0", - "react": "^17.0.0 || ^18.0.0", - "react-dom": "^17.0.0 || ^18.0.0" + "react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0" }, "peerDependenciesMeta": { "@emotion/react": { @@ -5043,6 +5008,29 @@ } } }, + "node_modules/@mui/x-internals": { + "version": "8.22.0", + "resolved": "https://registry.npmjs.org/@mui/x-internals/-/x-internals-8.22.0.tgz", + "integrity": "sha512-PA7jCKRLbS6aYvTSbGr3Id4CPUdTrUejHm31l8Vje7dw138gBBHrHeGsqWJh/S5foorpK8loiRejKrLlTZokyQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.28.4", + "@mui/utils": "^7.3.5", + "reselect": "^5.1.1", + "use-sync-external-store": "^1.6.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "react": "^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -5703,12 +5691,6 @@ "npm": ">=8" } }, - "node_modules/@oneblink/types/node_modules/@types/google.maps": { - "version": "3.55.9", - "resolved": "https://registry.npmjs.org/@types/google.maps/-/google.maps-3.55.9.tgz", - "integrity": "sha512-phaOMtezbT3NaXPKiI3m0OosUS7Nly0auw3Be5s/CgMWLVoDAUP1Yb/Ld0TRoRp8ibrlT4VqM5kmzfvUA0UNLQ==", - "dev": true - }, "node_modules/@open-wc/dedupe-mixin": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/@open-wc/dedupe-mixin/-/dedupe-mixin-1.4.0.tgz", @@ -5785,31 +5767,77 @@ } }, "node_modules/@react-google-maps/api": { - "version": "2.19.2", - "resolved": "https://registry.npmjs.org/@react-google-maps/api/-/api-2.19.2.tgz", - "integrity": "sha512-Vt57XWzCKfsUjKOmFUl2erVVfOePkPK5OigF/f+q7UuV/Nm9KDDy1PMFBx+wNahEqOd6a32BxfsykEhBnbU9wQ==", - "dependencies": { - "@googlemaps/js-api-loader": "1.16.2", - "@googlemaps/markerclusterer": "2.3.2", - "@react-google-maps/infobox": "2.19.2", - "@react-google-maps/marker-clusterer": "2.19.2", - "@types/google.maps": "3.53.5", + "version": "2.20.8", + "resolved": "https://registry.npmjs.org/@react-google-maps/api/-/api-2.20.8.tgz", + "integrity": "sha512-wtLYFtCGXK3qbIz1H5to3JxbosPnKsvjDKhqGylXUb859EskhzR7OpuNt0LqdLarXUtZCJTKzPn3BNaekNIahg==", + "license": "MIT", + "dependencies": { + "@googlemaps/js-api-loader": "1.16.8", + "@googlemaps/markerclusterer": "2.5.3", + "@react-google-maps/infobox": "2.20.0", + "@react-google-maps/marker-clusterer": "2.20.0", + "@types/google.maps": "3.58.1", "invariant": "2.2.4" }, "peerDependencies": { - "react": "^16.8 || ^17 || ^18", - "react-dom": "^16.8 || ^17 || ^18" + "react": "^16.8 || ^17 || ^18 || ^19", + "react-dom": "^16.8 || ^17 || ^18 || ^19" } }, "node_modules/@react-google-maps/infobox": { - "version": "2.19.2", - "resolved": "https://registry.npmjs.org/@react-google-maps/infobox/-/infobox-2.19.2.tgz", - "integrity": "sha512-6wvBqeJsQ/eFSvoxg+9VoncQvNoVCdmxzxRpLvmjPD+nNC6mHM0vJH1xSqaKijkMrfLJT0nfkTGpovrF896jwg==" + "version": "2.20.0", + "resolved": "https://registry.npmjs.org/@react-google-maps/infobox/-/infobox-2.20.0.tgz", + "integrity": "sha512-03PJHjohhaVLkX6+NHhlr8CIlvUxWaXhryqDjyaZ8iIqqix/nV8GFdz9O3m5OsjtxtNho09F/15j14yV0nuyLQ==", + "license": "MIT" }, "node_modules/@react-google-maps/marker-clusterer": { - "version": "2.19.2", - "resolved": "https://registry.npmjs.org/@react-google-maps/marker-clusterer/-/marker-clusterer-2.19.2.tgz", - "integrity": "sha512-x9ibmsP0ZVqzyCo1Pitbw+4b6iEXRw/r1TCy3vOUR3eKrzWLnHYZMR325BkZW2r8fnuWE/V3Fp4QZOP9qYORCw==" + "version": "2.20.0", + "resolved": "https://registry.npmjs.org/@react-google-maps/marker-clusterer/-/marker-clusterer-2.20.0.tgz", + "integrity": "sha512-tieX9Va5w1yP88vMgfH1pHTacDQ9TgDTjox3tLlisKDXRQWdjw+QeVVghhf5XqqIxXHgPdcGwBvKY6UP+SIvLw==", + "license": "MIT" + }, + "node_modules/@react-input/core": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@react-input/core/-/core-2.0.2.tgz", + "integrity": "sha512-xLLBueYFbant9308uv3cIJQz5NYSixeGspjP3Nt6jogRHTcHYMRmlVFUuSzQiP8Z8/5BdnPkudRSsN0/AJ1fbw==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/react-input" + }, + "peerDependencies": { + "@types/react": ">=16.8", + "react": ">=16.8 || ^19.0.0-rc", + "react-dom": ">=16.8 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@react-input/mask": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@react-input/mask/-/mask-2.0.4.tgz", + "integrity": "sha512-NOielvQSBOlGLVuEcxtkjaGneC0GJFXjC7KOF99ed9H9XSDruWnQirjht5uSbWqLeeiOup0VD2YjM+6FH+aWBg==", + "license": "MIT", + "dependencies": { + "@react-input/core": "^2.0.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/react-input" + }, + "peerDependencies": { + "@types/react": ">=16.8", + "react": ">=16.8 || ^19.0.0-rc", + "react-dom": ">=16.8 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } }, "node_modules/@rollup/plugin-replace": { "version": "5.0.7", @@ -6567,59 +6595,52 @@ "node": ">=8" } }, - "node_modules/@shikijs/core": { - "version": "1.22.0", - "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-1.22.0.tgz", - "integrity": "sha512-S8sMe4q71TJAW+qG93s5VaiihujRK6rqDFqBnxqvga/3LvqHEnxqBIOPkt//IdXVtHkQWKu4nOQNk0uBGicU7Q==", + "node_modules/@shikijs/engine-oniguruma": { + "version": "3.20.0", + "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-3.20.0.tgz", + "integrity": "sha512-Yx3gy7xLzM0ZOjqoxciHjA7dAt5tyzJE3L4uQoM83agahy+PlW244XJSrmJRSBvGYELDhYXPacD4R/cauV5bzQ==", "dev": true, "license": "MIT", "dependencies": { - "@shikijs/engine-javascript": "1.22.0", - "@shikijs/engine-oniguruma": "1.22.0", - "@shikijs/types": "1.22.0", - "@shikijs/vscode-textmate": "^9.3.0", - "@types/hast": "^3.0.4", - "hast-util-to-html": "^9.0.3" + "@shikijs/types": "3.20.0", + "@shikijs/vscode-textmate": "^10.0.2" } }, - "node_modules/@shikijs/engine-javascript": { - "version": "1.22.0", - "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-1.22.0.tgz", - "integrity": "sha512-AeEtF4Gcck2dwBqCFUKYfsCq0s+eEbCEbkUuFou53NZ0sTGnJnJ/05KHQFZxpii5HMXbocV9URYVowOP2wH5kw==", + "node_modules/@shikijs/langs": { + "version": "3.20.0", + "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-3.20.0.tgz", + "integrity": "sha512-le+bssCxcSHrygCWuOrYJHvjus6zhQ2K7q/0mgjiffRbkhM4o1EWu2m+29l0yEsHDbWaWPNnDUTRVVBvBBeKaA==", "dev": true, "license": "MIT", "dependencies": { - "@shikijs/types": "1.22.0", - "@shikijs/vscode-textmate": "^9.3.0", - "oniguruma-to-js": "0.4.3" + "@shikijs/types": "3.20.0" } }, - "node_modules/@shikijs/engine-oniguruma": { - "version": "1.22.0", - "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-1.22.0.tgz", - "integrity": "sha512-5iBVjhu/DYs1HB0BKsRRFipRrD7rqjxlWTj4F2Pf+nQSPqc3kcyqFFeZXnBMzDf0HdqaFVvhDRAGiYNvyLP+Mw==", + "node_modules/@shikijs/themes": { + "version": "3.20.0", + "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-3.20.0.tgz", + "integrity": "sha512-U1NSU7Sl26Q7ErRvJUouArxfM2euWqq1xaSrbqMu2iqa+tSp0D1Yah8216sDYbdDHw4C8b75UpE65eWorm2erQ==", "dev": true, "license": "MIT", "dependencies": { - "@shikijs/types": "1.22.0", - "@shikijs/vscode-textmate": "^9.3.0" + "@shikijs/types": "3.20.0" } }, "node_modules/@shikijs/types": { - "version": "1.22.0", - "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-1.22.0.tgz", - "integrity": "sha512-Fw/Nr7FGFhlQqHfxzZY8Cwtwk5E9nKDUgeLjZgt3UuhcM3yJR9xj3ZGNravZZok8XmEZMiYkSMTPlPkULB8nww==", + "version": "3.20.0", + "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-3.20.0.tgz", + "integrity": "sha512-lhYAATn10nkZcBQ0BlzSbJA3wcmL5MXUUF8d2Zzon6saZDlToKaiRX60n2+ZaHJCmXEcZRWNzn+k9vplr8Jhsw==", "dev": true, "license": "MIT", "dependencies": { - "@shikijs/vscode-textmate": "^9.3.0", + "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4" } }, "node_modules/@shikijs/vscode-textmate": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/@shikijs/vscode-textmate/-/vscode-textmate-9.3.0.tgz", - "integrity": "sha512-jn7/7ky30idSkd/O5yDBfAnVt+JJpepofP/POZ1iMOxK59cOfqIgg/Dj0eFsjOTMw+4ycJN0uhZH/Eb0bs/EUA==", + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/@shikijs/vscode-textmate/-/vscode-textmate-10.0.2.tgz", + "integrity": "sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==", "dev": true, "license": "MIT" }, @@ -7441,6 +7462,39 @@ "node": ">=14.16" } }, + "node_modules/@tanstack/react-table": { + "version": "8.21.3", + "resolved": "https://registry.npmjs.org/@tanstack/react-table/-/react-table-8.21.3.tgz", + "integrity": "sha512-5nNMTSETP4ykGegmVkhjcS8tTLW6Vl4axfEGQN3v0zdHYbK4UfoqfPChclTrJ4EoK9QynqAu9oUf8VEmrpZ5Ww==", + "license": "MIT", + "dependencies": { + "@tanstack/table-core": "8.21.3" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "peerDependencies": { + "react": ">=16.8", + "react-dom": ">=16.8" + } + }, + "node_modules/@tanstack/table-core": { + "version": "8.21.3", + "resolved": "https://registry.npmjs.org/@tanstack/table-core/-/table-core-8.21.3.tgz", + "integrity": "sha512-ldZXEhOBb8Is7xLs01fR3YEc3DERiz5silj8tnGkFZytt1abEvl/GhUmCE0PMLaMPTa3Jk4HbKmRlHmu+gCftg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + } + }, "node_modules/@types/blueimp-load-image": { "version": "5.16.6", "resolved": "https://registry.npmjs.org/@types/blueimp-load-image/-/blueimp-load-image-5.16.6.tgz", @@ -7523,9 +7577,10 @@ "dev": true }, "node_modules/@types/google.maps": { - "version": "3.53.5", - "resolved": "https://registry.npmjs.org/@types/google.maps/-/google.maps-3.53.5.tgz", - "integrity": "sha512-HoRq4Te8J6krH7hj+TfdYepqegoKZCj3kkaK5gf+ySFSHLvyqYkDvkrtbcVJXQ6QBphQ0h1TF7p4J6sOh4r/zg==" + "version": "3.58.1", + "resolved": "https://registry.npmjs.org/@types/google.maps/-/google.maps-3.58.1.tgz", + "integrity": "sha512-X9QTSvGJ0nCfMzYOnaVs/k6/4L+7F5uCS+4iUmkLEls6J9S/Phv+m/i3mDeyc49ZBgwab3EFO1HEoBY7k98EGQ==", + "license": "MIT" }, "node_modules/@types/hast": { "version": "3.0.4", @@ -7625,20 +7680,20 @@ "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==" }, "node_modules/@types/prop-types": { - "version": "15.7.11", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.11.tgz", - "integrity": "sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng==", - "dev": true + "version": "15.7.15", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.15.tgz", + "integrity": "sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==", + "devOptional": true, + "license": "MIT" }, "node_modules/@types/react": { - "version": "17.0.73", - "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.73.tgz", - "integrity": "sha512-6AcjgPIVsXTIsFDgsGW0iQhvg0xb2vt2qAWgXyncnVNRaW9ZXTTwAh7RQoh7PzK1AhjPoGDvUBkdAREih9n5oQ==", - "dev": true, + "version": "19.2.7", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.7.tgz", + "integrity": "sha512-MWtvHrGZLFttgeEj28VXHxpmwYbor/ATPYbBfSFZEIRK0ecCFLl2Qo55z52Hss+UV9CRN7trSeq1zbgx7YDWWg==", + "devOptional": true, + "license": "MIT", "dependencies": { - "@types/prop-types": "*", - "@types/scheduler": "*", - "csstype": "^3.0.2" + "csstype": "^3.2.2" } }, "node_modules/@types/react-google-recaptcha": { @@ -7650,15 +7705,6 @@ "@types/react": "*" } }, - "node_modules/@types/react-input-mask": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@types/react-input-mask/-/react-input-mask-3.0.5.tgz", - "integrity": "sha512-vQ1x6ykwjDrDrJZq1zw5/uQ+nqGHUV6bWscsVZJ/qsNwNXWxZm7KRBHLJ5k6TQt3MHjhpoYHzPH6FwjVSZODHA==", - "dev": true, - "dependencies": { - "@types/react": "*" - } - }, "node_modules/@types/react-router": { "version": "5.1.20", "resolved": "https://registry.npmjs.org/@types/react-router/-/react-router-5.1.20.tgz", @@ -7690,21 +7736,13 @@ "@types/signature_pad": "*" } }, - "node_modules/@types/react-table": { - "version": "7.7.19", - "resolved": "https://registry.npmjs.org/@types/react-table/-/react-table-7.7.19.tgz", - "integrity": "sha512-47jMa1Pai7ily6BXJCW33IL5ghqmCWs2VM9s+h1D4mCaK5P4uNkZOW3RMMg8MCXBvAJ0v9+sPqKjhid0PaJPQA==", - "dev": true, - "dependencies": { - "@types/react": "*" - } - }, "node_modules/@types/react-transition-group": { - "version": "4.4.10", - "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.10.tgz", - "integrity": "sha512-hT/+s0VQs2ojCX823m60m5f0sL5idt9SO6Tj6Dg+rdphGPIeJbJ6CxvBYkgkGKrYeDjvIpKTR38UzmtHJOGW3Q==", + "version": "4.4.12", + "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.12.tgz", + "integrity": "sha512-8TV6R3h2j7a91c+1DXdJi3Syo69zzIZbz7Lg5tORM5LEJG7X/E6a1V3drRyBRZq7/utz7A+c4OgYLiLcYGHG6w==", "dev": true, - "dependencies": { + "license": "MIT", + "peerDependencies": { "@types/react": "*" } }, @@ -7717,12 +7755,6 @@ "htmlparser2": "^8.0.0" } }, - "node_modules/@types/scheduler": { - "version": "0.16.8", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.8.tgz", - "integrity": "sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==", - "dev": true - }, "node_modules/@types/semver": { "version": "7.5.6", "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.6.tgz", @@ -7732,8 +7764,7 @@ "node_modules/@types/signature_pad": { "version": "2.3.6", "resolved": "https://registry.npmjs.org/@types/signature_pad/-/signature_pad-2.3.6.tgz", - "integrity": "sha512-v3j92gCQJoxomHhd+yaG4Vsf8tRS/XbzWKqDv85UsqjMGy4zhokuwKe4b6vhbgncKkh+thF+gpz6+fypTtnFqQ==", - "dev": true + "integrity": "sha512-v3j92gCQJoxomHhd+yaG4Vsf8tRS/XbzWKqDv85UsqjMGy4zhokuwKe4b6vhbgncKkh+thF+gpz6+fypTtnFqQ==" }, "node_modules/@types/trusted-types": { "version": "2.0.7", @@ -9042,17 +9073,6 @@ } ] }, - "node_modules/ccount": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", - "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, "node_modules/chai": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/chai/-/chai-6.2.1.tgz", @@ -9073,28 +9093,6 @@ "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/character-entities-html4": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz", - "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/character-entities-legacy": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", - "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, "node_modules/chokidar": { "version": "3.5.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", @@ -9279,9 +9277,10 @@ } }, "node_modules/clsx": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.0.tgz", - "integrity": "sha512-m3iNNWpd9rl3jvvcBnu70ylMdrXt8Vlq4HYadnU5fwcOtvkSQWPmj7amUcDT2qYI7risszBjI5AUIUox9D16pg==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "license": "MIT", "engines": { "node": ">=6" } @@ -9328,17 +9327,6 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, - "node_modules/comma-separated-tokens": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", - "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, "node_modules/commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", @@ -9561,9 +9549,10 @@ } }, "node_modules/csstype": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", - "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", + "license": "MIT" }, "node_modules/d3-array": { "version": "3.2.4", @@ -9619,9 +9608,13 @@ } }, "node_modules/dayjs": { - "version": "1.11.10", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.10.tgz", - "integrity": "sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==" + "version": "1.11.19", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.19.tgz", + "integrity": "sha512-t5EcLVS6QPBNqM2z8fakk/NKel+Xzshgt8FFKAn+qwlD1pzZWxh0nVCrvFK7ZDb6XucZeF9z8C7CBWTRIVApAw==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true }, "node_modules/debug": { "version": "4.4.3", @@ -9880,6 +9873,7 @@ "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/runtime": "^7.8.7", "csstype": "^3.0.2" @@ -11580,44 +11574,6 @@ "node": ">= 0.4" } }, - "node_modules/hast-util-to-html": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-9.0.3.tgz", - "integrity": "sha512-M17uBDzMJ9RPCqLMO92gNNUDuBSq10a25SDBI08iCCxmorf4Yy6sYHK57n9WAbRAAaU+DuR4W6GN9K4DFZesYg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0", - "@types/unist": "^3.0.0", - "ccount": "^2.0.0", - "comma-separated-tokens": "^2.0.0", - "hast-util-whitespace": "^3.0.0", - "html-void-elements": "^3.0.0", - "mdast-util-to-hast": "^13.0.0", - "property-information": "^6.0.0", - "space-separated-tokens": "^2.0.0", - "stringify-entities": "^4.0.0", - "zwitch": "^2.0.4" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-whitespace": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz", - "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, "node_modules/history": { "version": "4.10.1", "resolved": "https://registry.npmjs.org/history/-/history-4.10.1.tgz", @@ -11679,17 +11635,6 @@ "node": ">=18" } }, - "node_modules/html-void-elements": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-3.0.0.tgz", - "integrity": "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, "node_modules/html5-qrcode": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/html5-qrcode/-/html5-qrcode-2.3.8.tgz", @@ -12637,7 +12582,8 @@ "node_modules/kdbush": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/kdbush/-/kdbush-4.0.2.tgz", - "integrity": "sha512-WbCVYJ27Sz8zi9Q7Q0xHC+05iwkm3Znipc2XTlrnJbsHMYktW4hPhXUE8Ys1engBrvffoSCqbil1JQAa7clRpA==" + "integrity": "sha512-WbCVYJ27Sz8zi9Q7Q0xHC+05iwkm3Znipc2XTlrnJbsHMYktW4hPhXUE8Ys1engBrvffoSCqbil1JQAa7clRpA==", + "license": "ISC" }, "node_modules/keyv": { "version": "4.5.4", @@ -12933,28 +12879,6 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/mdast-util-to-hast": { - "version": "13.2.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.0.tgz", - "integrity": "sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0", - "@types/mdast": "^4.0.0", - "@ungap/structured-clone": "^1.0.0", - "devlop": "^1.0.0", - "micromark-util-sanitize-uri": "^2.0.0", - "trim-lines": "^3.0.0", - "unist-util-position": "^5.0.0", - "unist-util-visit": "^5.0.0", - "vfile": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, "node_modules/mdast-util-to-string": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", @@ -13823,19 +13747,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/oniguruma-to-js": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/oniguruma-to-js/-/oniguruma-to-js-0.4.3.tgz", - "integrity": "sha512-X0jWUcAlxORhOqqBREgPMgnshB7ZGYszBNspP+tS9hPD3l13CdaXcHbgImoHUHlrvGx/7AvFEkTRhAGYh+jzjQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "regex": "^4.3.2" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, "node_modules/open": { "version": "7.4.2", "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", @@ -14462,17 +14373,6 @@ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, - "node_modules/property-information": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.5.0.tgz", - "integrity": "sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, "node_modules/proto-list": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", @@ -14529,12 +14429,12 @@ } }, "node_modules/qrcode.react": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/qrcode.react/-/qrcode.react-4.1.0.tgz", - "integrity": "sha512-uqXVIIVD/IPgWLYxbOczCNAQw80XCM/LulYDADF+g2xDsPj5OoRwSWtIS4jGyp295wyjKstfG1qIv/I2/rNWpQ==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/qrcode.react/-/qrcode.react-4.2.0.tgz", + "integrity": "sha512-QpgqWi8rD9DsS9EP3z7BT+5lY5SFhsqGjpgW5DY/i3mK4M9DTBNz3ErMi8BWYEfI3L0d8GIbGmcdFAS1uIRGjA==", "license": "ISC", "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "node_modules/query-string": { @@ -14644,13 +14544,10 @@ } }, "node_modules/react": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz", - "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==", - "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - }, + "version": "19.2.3", + "resolved": "https://registry.npmjs.org/react/-/react-19.2.3.tgz", + "integrity": "sha512-Ku/hhYbVjOQnXDZFv2+RibmLFGwFdeeKHFcOTlrt7xplBnya5OGn/hIRDsqDiSUcfORsDC7MPxwork8jBwsIWA==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -14668,16 +14565,15 @@ } }, "node_modules/react-dom": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz", - "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==", + "version": "19.2.3", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.3.tgz", + "integrity": "sha512-yELu4WmLPw5Mr/lmeEpox5rw3RETacE++JgHqQzd2dg+YbJuat3jH4ingc+WPZhxaoFzdv9y33G+F7Nl5O0GBg==", + "license": "MIT", "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "scheduler": "^0.20.2" + "scheduler": "^0.27.0" }, "peerDependencies": { - "react": "17.0.2" + "react": "^19.2.3" } }, "node_modules/react-google-recaptcha": { @@ -14701,24 +14597,12 @@ "react": ">=16.13.1" } }, - "node_modules/react-input-mask": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/react-input-mask/-/react-input-mask-2.0.4.tgz", - "integrity": "sha512-1hwzMr/aO9tXfiroiVCx5EtKohKwLk/NT8QlJXHQ4N+yJJFyUuMT+zfTpLBwX/lK3PkuMlievIffncpMZ3HGRQ==", - "dependencies": { - "invariant": "^2.2.4", - "warning": "^4.0.2" - }, - "peerDependencies": { - "react": ">=0.14.0", - "react-dom": ">=0.14.0" - } - }, "node_modules/react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", - "dev": true + "version": "19.2.3", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-19.2.3.tgz", + "integrity": "sha512-qJNJfu81ByyabuG7hPFEbXqNcWSU3+eVus+KJs+0ncpGfMyYdvSmxiJxbWR65lYi1I+/0HBcliO029gc4F+PnA==", + "dev": true, + "license": "MIT" }, "node_modules/react-router": { "version": "5.3.4", @@ -14765,29 +14649,33 @@ "dev": true }, "node_modules/react-signature-canvas": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/react-signature-canvas/-/react-signature-canvas-1.0.6.tgz", - "integrity": "sha512-NoMHomYu9HxFeLjUGbIeV9abPdWSROfFxFNDekGdwmmaIx+w5ziOEiU2C34X0Ao4GxFnwqyUy/BpYlA4lCD1CA==", + "version": "1.1.0-alpha.2", + "resolved": "https://registry.npmjs.org/react-signature-canvas/-/react-signature-canvas-1.1.0-alpha.2.tgz", + "integrity": "sha512-tKUNk3Gmh04Ug4K8p5g8Is08BFUKvbXxi0PyetQ/f8OgCBzcx4vqNf9+OArY/TdNdfHtswXQNRwZD6tyELjkjQ==", + "license": "Apache-2.0", "dependencies": { + "@babel/runtime": "^7.17.9", + "@types/signature_pad": "^2.3.0", "signature_pad": "^2.3.2", "trim-canvas": "^0.1.0" }, - "peerDependencies": { - "prop-types": "^15.5.8", - "react": "0.14 - 18", - "react-dom": "0.14 - 18" - } - }, - "node_modules/react-table": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/react-table/-/react-table-7.8.0.tgz", - "integrity": "sha512-hNaz4ygkZO4bESeFfnfOft73iBUj8K5oKi1EcSHPAibEydfsX2MyU6Z8KCr3mv3C9Kqqh71U+DhZkFvibbnPbA==", "funding": { - "type": "github", - "url": "https://github.com/sponsors/tannerlinsley" + "url": "https://github.com/sponsors/agilgur5" }, "peerDependencies": { - "react": "^16.8.3 || ^17.0.0-0 || ^18.0.0" + "@types/prop-types": "^15.7.3", + "@types/react": "0.14 - 19", + "prop-types": "^15.5.8", + "react": "0.14 - 19", + "react-dom": "0.14 - 19" + }, + "peerDependenciesMeta": { + "@types/prop-types": { + "optional": true + }, + "@types/react": { + "optional": true + } } }, "node_modules/react-transition-group": { @@ -14795,6 +14683,7 @@ "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "@babel/runtime": "^7.5.5", "dom-helpers": "^5.0.1", @@ -14951,11 +14840,6 @@ "node": ">=4" } }, - "node_modules/regenerator-runtime": { - "version": "0.14.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", - "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" - }, "node_modules/regenerator-transform": { "version": "0.15.2", "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", @@ -14965,13 +14849,6 @@ "@babel/runtime": "^7.8.4" } }, - "node_modules/regex": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/regex/-/regex-4.3.3.tgz", - "integrity": "sha512-r/AadFO7owAq1QJVeZ/nq9jNS1vyZt+6t1p/E59B56Rn2GCya+gr1KSyOzNL/er+r+B7phv5jG2xU2Nz1YkmJg==", - "dev": true, - "license": "MIT" - }, "node_modules/regexp.prototype.flags": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz", @@ -15084,6 +14961,13 @@ "node": ">=0.10.0" } }, + "node_modules/reselect": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/reselect/-/reselect-5.1.1.tgz", + "integrity": "sha512-K/BG6eIky/SBpzfHZv/dd+9JBFiS4SWV7FIujVyJRux6e45+73RaUHXLmIR1f7WOMaQ0U1km6qwklRQxpJJY0w==", + "dev": true, + "license": "MIT" + }, "node_modules/resolve": { "version": "1.22.8", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", @@ -15533,13 +15417,10 @@ } }, "node_modules/scheduler": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz", - "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", - "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - } + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz", + "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==", + "license": "MIT" }, "node_modules/semver": { "version": "6.3.1", @@ -15649,21 +15530,6 @@ "node": ">=8" } }, - "node_modules/shiki": { - "version": "1.22.0", - "resolved": "https://registry.npmjs.org/shiki/-/shiki-1.22.0.tgz", - "integrity": "sha512-/t5LlhNs+UOKQCYBtl5ZsH/Vclz73GIqT2yQsCBygr8L/ppTdmpL4w3kPLoZJbMKVWtoG77Ue1feOjZfDxvMkw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@shikijs/core": "1.22.0", - "@shikijs/engine-javascript": "1.22.0", - "@shikijs/engine-oniguruma": "1.22.0", - "@shikijs/types": "1.22.0", - "@shikijs/vscode-textmate": "^9.3.0", - "@types/hast": "^3.0.4" - } - }, "node_modules/side-channel": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", @@ -15747,17 +15613,6 @@ "node": ">=0.10.0" } }, - "node_modules/space-separated-tokens": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", - "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, "node_modules/spdx-correct": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", @@ -16011,21 +15866,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/stringify-entities": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz", - "integrity": "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==", - "dev": true, - "license": "MIT", - "dependencies": { - "character-entities-html4": "^2.0.0", - "character-entities-legacy": "^3.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, "node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -16078,6 +15918,7 @@ "version": "8.0.1", "resolved": "https://registry.npmjs.org/supercluster/-/supercluster-8.0.1.tgz", "integrity": "sha512-IiOea5kJ9iqzD2t7QJq/cREyLHTtSmUT6gQsweojg9WH2sYJqZK9SswTu6jrscO6D1G5v5vYZ9ru/eq85lXeZQ==", + "license": "ISC", "dependencies": { "kdbush": "^4.0.2" } @@ -16349,17 +16190,6 @@ "resolved": "https://registry.npmjs.org/trim-canvas/-/trim-canvas-0.1.2.tgz", "integrity": "sha512-nd4Ga3iLFV94mdhW9JFMLpQbHUyCQuhFOD71PEAt1NjtMD5wbZctzhX8c3agHNybMR5zXD1XTGoIEWk995E6pQ==" }, - "node_modules/trim-lines": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz", - "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, "node_modules/ts-api-utils": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.0.3.tgz", @@ -16497,26 +16327,27 @@ } }, "node_modules/typedoc": { - "version": "0.26.9", - "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.26.9.tgz", - "integrity": "sha512-Rc7QpWL7EtmrT8yxV0GmhOR6xHgFnnhphbD9Suti3fz3um7ZOrou6q/g9d6+zC5PssTLZmjaW4Upmzv8T1rCcQ==", + "version": "0.28.15", + "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.28.15.tgz", + "integrity": "sha512-mw2/2vTL7MlT+BVo43lOsufkkd2CJO4zeOSuWQQsiXoV2VuEn7f6IZp2jsUDPmBMABpgR0R5jlcJ2OGEFYmkyg==", "dev": true, "license": "Apache-2.0", "dependencies": { + "@gerrit0/mini-shiki": "^3.17.0", "lunr": "^2.3.9", "markdown-it": "^14.1.0", "minimatch": "^9.0.5", - "shiki": "^1.16.2", - "yaml": "^2.5.1" + "yaml": "^2.8.1" }, "bin": { "typedoc": "bin/typedoc" }, "engines": { - "node": ">= 18" + "node": ">= 18", + "pnpm": ">= 10" }, "peerDependencies": { - "typescript": "4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x || 5.1.x || 5.2.x || 5.3.x || 5.4.x || 5.5.x || 5.6.x" + "typescript": "5.0.x || 5.1.x || 5.2.x || 5.3.x || 5.4.x || 5.5.x || 5.6.x || 5.7.x || 5.8.x || 5.9.x" } }, "node_modules/typedoc/node_modules/minimatch": { @@ -16536,22 +16367,25 @@ } }, "node_modules/typedoc/node_modules/yaml": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.6.0.tgz", - "integrity": "sha512-a6ae//JvKDEra2kdi1qzCyrJW/WZCgFi8ydDV+eXExl95t+5R+ijnqHJbz9tmMh8FUjx3iv2fCQ4dclAQlO2UQ==", + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.2.tgz", + "integrity": "sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A==", "dev": true, "license": "ISC", "bin": { "yaml": "bin.mjs" }, "engines": { - "node": ">= 14" + "node": ">= 14.6" + }, + "funding": { + "url": "https://github.com/sponsors/eemeli" } }, "node_modules/typescript": { - "version": "5.6.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.3.tgz", - "integrity": "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==", + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "dev": true, "license": "Apache-2.0", "bin": { @@ -16681,34 +16515,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/unist-util-is": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", - "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-position": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", - "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, "node_modules/unist-util-stringify-position": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", @@ -16722,37 +16528,6 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/unist-util-visit": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz", - "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-is": "^6.0.0", - "unist-util-visit-parents": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-visit-parents": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", - "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-is": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, "node_modules/universal-user-agent": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.1.tgz", @@ -16888,16 +16663,29 @@ "punycode": "^2.1.0" } }, - "node_modules/use-resize-observer": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/use-resize-observer/-/use-resize-observer-9.1.0.tgz", - "integrity": "sha512-R25VqO9Wb3asSD4eqtcxk8sJalvIOYBqS8MNZlpDSQ4l4xMQxC/J7Id9HoTqPq8FwULIn0PVW+OAqF2dyYbjow==", + "node_modules/use-sync-external-store": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.6.0.tgz", + "integrity": "sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/usehooks-ts": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/usehooks-ts/-/usehooks-ts-3.1.1.tgz", + "integrity": "sha512-I4diPp9Cq6ieSUH2wu+fDAVQO43xwtulo+fKEidHUwZPnYImbtkTjzIJYcDcJqxgmX31GVqNFURodvcgHcW0pA==", + "license": "MIT", "dependencies": { - "@juggle/resize-observer": "^3.3.1" + "lodash.debounce": "^4.0.8" + }, + "engines": { + "node": ">=16.15.0" }, "peerDependencies": { - "react": "16.8.0 - 18", - "react-dom": "16.8.0 - 18" + "react": "^16.8.0 || ^17 || ^18 || ^19 || ^19.0.0-rc" } }, "node_modules/util-deprecate": { @@ -16934,36 +16722,6 @@ "integrity": "sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw==", "dev": true }, - "node_modules/vfile": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz", - "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0", - "vfile-message": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/vfile-message": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", - "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-stringify-position": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, "node_modules/vitest": { "version": "4.0.9", "resolved": "https://registry.npmjs.org/vitest/-/vitest-4.0.9.tgz", @@ -17213,14 +16971,6 @@ "node": ">=18" } }, - "node_modules/warning": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz", - "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==", - "dependencies": { - "loose-envify": "^1.0.0" - } - }, "node_modules/webidl-conversions": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-8.0.0.tgz", @@ -17647,17 +17397,6 @@ "funding": { "url": "https://github.com/sponsors/sindresorhus" } - }, - "node_modules/zwitch": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", - "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } } } } diff --git a/package.json b/package.json index b02f7f0fc..5ac43aca2 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,9 @@ "@emotion/styled": "^11.11.0", "@nylas/react": "^1.3.1", "@oneblink/sdk-core": "^8.11.1-beta.4", - "@react-google-maps/api": "2.19.2", + "@react-google-maps/api": "^2.20.8", + "@react-input/mask": "^2.0.4", + "@tanstack/react-table": "^8.21.3", "blueimp-load-image": "^5.16.0", "bulma": "^0.9.4", "bulma-slider": "2.0.4", @@ -30,24 +32,21 @@ "lodash.debounce": "^4.0.8", "lodash.throttle": "^4.1.1", "morph-expressions": "^1.1.1", - "qrcode.react": "^4.1.0", + "qrcode.react": "^4.2.0", "query-string": "^8.1.0", "react-google-recaptcha": "^3.1.0", "react-image-crop": "^11.0.10", - "react-input-mask": "^2.0.4", - "react-signature-canvas": "^1.0.6", - "react-table": "^7.8.0", + "react-signature-canvas": "^1.1.0-alpha.2", "sanitize-html": "^2.11.0", - "use-resize-observer": "^9.1.0", + "usehooks-ts": "^3.1.1", "uuid": "^9.0.1", "xml2js": "^0.6.2" }, "devDependencies": { "@babel/preset-env": "^7.23.9", "@microsoft/eslint-plugin-sdl": "^0.2.2", - "@mui/lab": "^5.0.0-alpha.152", - "@mui/material": "^5.15.6", - "@mui/x-date-pickers": "^6.20.2", + "@mui/material": "^7.3.6", + "@mui/x-date-pickers": "^8.22.1", "@oneblink/apps": "^23.7.0-beta.1", "@oneblink/release-cli": "^3.4.0-beta.1", "@oneblink/types": "github:oneblink/types", @@ -58,12 +57,10 @@ "@types/lodash.clonedeep": "^4.5.9", "@types/lodash.debounce": "^4.0.9", "@types/lodash.throttle": "^4.1.9", - "@types/react": "^17.0.73", + "@types/react": "^19.2.7", "@types/react-google-recaptcha": "^2.1.9", - "@types/react-input-mask": "^3.0.5", "@types/react-router-dom": "^5.3.3", "@types/react-signature-canvas": "^1.0.5", - "@types/react-table": "^7.7.19", "@types/sanitize-html": "^2.9.5", "@types/ua-parser-js": "^0.7.39", "@types/uuid": "^9.0.8", @@ -80,13 +77,13 @@ "jsdom": "^27.2.0", "prettier": "^3.2.4", "prettier-plugin-jsdoc": "^1.3.0", - "react": "^17.0.2", - "react-dom": "^17.0.2", + "react": "^19.2.3", + "react-dom": "^19.2.3", "react-router-dom": "^5.3.4", "sass": "^1.70.0", "tsc-watch": "^6.0.4", - "typedoc": "^0.26.9", - "typescript": "^5.6.3", + "typedoc": "^0.28.15", + "typescript": "^5.9.3", "vitest": "^4.0.9" }, "directories": { @@ -104,12 +101,11 @@ "main": "./dist/index.js", "module": "./dist/index.js", "peerDependencies": { - "@mui/lab": "^5.0.0 || ^5.0.0-alpha.152", - "@mui/material": "^5.6.1", - "@mui/x-date-pickers": "^6.20.2", + "@mui/material": "^7.3.6", + "@mui/x-date-pickers": "^8.22.1", "@oneblink/apps": "*", - "react": "^17.0.0", - "react-dom": "^17.0.0", + "react": "^19.2.3", + "react-dom": "^19.2.3", "react-router-dom": "^5.2.0" }, "publishConfig": { diff --git a/src/OneBlinkFormBase.tsx b/src/OneBlinkFormBase.tsx index f10a5128e..e1f542ead 100644 --- a/src/OneBlinkFormBase.tsx +++ b/src/OneBlinkFormBase.tsx @@ -18,7 +18,7 @@ import { } from '@oneblink/types' import * as H from 'history' import { LocalizationProvider } from '@mui/x-date-pickers' -import { AdapterDateFns } from '@mui/x-date-pickers/AdapterDateFns' +import { AdapterDateFns } from '@mui/x-date-pickers/AdapterDateFnsV2' import Modal from './components/renderer/Modal' import cleanFormSubmissionModel from './services/cleanFormSubmissionModel' @@ -516,7 +516,7 @@ function OneBlinkFormBase({ // #region Validation const validationErrorToastFocusElementRef = - React.useRef(null) + React.useRef(null) const [isShowingValidationErrorsCard, setIsShowingValidationErrorsCard] = React.useState(false) const { validate } = useFormValidation(pages) diff --git a/src/components/ArcGISWebMap.tsx b/src/components/ArcGISWebMap.tsx index 5fa6043ce..5d7424144 100644 --- a/src/components/ArcGISWebMap.tsx +++ b/src/components/ArcGISWebMap.tsx @@ -41,11 +41,11 @@ type Props = { onChange: FormElementValueChangeHandler automatedSnapshotFileName: string 'aria-describedby'?: string - takeScreenShotRef: React.MutableRefObject< + takeScreenShotRef: React.RefObject< | ((view?: ArcGISTypes.ArcGISWebMapElementValue['view']) => Promise<{ dataUrl: string }>) - | undefined + | null > } @@ -120,14 +120,14 @@ function FormElementArcGISWebMap({ ...props }: Props) { const ref = React.useRef(null) - const layerPanelRef = React.useRef() - const mapGalleryPanelRef = React.useRef() - const sketchToolRef = React.useRef() - const drawingLayerRef = React.useRef() - const selectedGraphicForUpdate = React.useRef() - const mapViewRef = React.useRef() - const measurementLayerRef = React.useRef() - const defaultLayersRef = React.useRef() + const layerPanelRef = React.useRef(null) + const mapGalleryPanelRef = React.useRef(null) + const sketchToolRef = React.useRef(null) + const drawingLayerRef = React.useRef(null) + const selectedGraphicForUpdate = React.useRef(undefined) + const mapViewRef = React.useRef(null) + const measurementLayerRef = React.useRef(null) + const defaultLayersRef = React.useRef(null) const [loadError, setLoadError] = React.useState() const [isLoading, setIsLoading] = React.useState(false) diff --git a/src/components/ConfirmDialog.tsx b/src/components/ConfirmDialog.tsx index 4ef137bd3..623b7f5f8 100644 --- a/src/components/ConfirmDialog.tsx +++ b/src/components/ConfirmDialog.tsx @@ -8,7 +8,6 @@ import { Portal, DialogProps, } from '@mui/material' -import { LoadingButton } from '@mui/lab' import useIsMounted from '../hooks/useIsMounted' import ErrorSnackbar from './ErrorSnackbar' @@ -27,7 +26,7 @@ type Props = { error?: string title?: string } - TransitionProps?: DialogProps['TransitionProps'] + TransitionProps?: NonNullable['transition'] disabled?: boolean } @@ -71,9 +70,11 @@ export default function ConfirmDialog({ fullWidth onClose={!isConfirming ? onClose : undefined} data-cypress={cypress?.dialog} - TransitionProps={{ - onExiting: () => setError(null), - ...(TransitionProps ? TransitionProps : {}), + slotProps={{ + transition: { + onExiting: () => setError(null), + ...(TransitionProps ? TransitionProps : {}), + }, }} > {title} @@ -87,7 +88,7 @@ export default function ConfirmDialog({ Cancel - {confirmButtonText} - + diff --git a/src/components/ErrorSnackbar.tsx b/src/components/ErrorSnackbar.tsx index 9f8fd20c3..9a13428e0 100644 --- a/src/components/ErrorSnackbar.tsx +++ b/src/components/ErrorSnackbar.tsx @@ -8,11 +8,9 @@ import { } from '@mui/material' import MaterialIcon from './MaterialIcon' -const Alert = React.forwardRef( - function Alert(props, ref) { - return - }, -) +function Alert({ ref, ...props }: AlertProps) { + return +} const StyledIcon = styled(MaterialIcon)(() => ({ fontSize: 20, diff --git a/src/components/ImageCropper/index.tsx b/src/components/ImageCropper/index.tsx index f53c15d59..2476eb062 100644 --- a/src/components/ImageCropper/index.tsx +++ b/src/components/ImageCropper/index.tsx @@ -75,12 +75,12 @@ const ImageCropper = ({ outputAspectRatio ? undefined : defaultCrop, ) - const handleSetCrop = React.useCallback((_, c: PercentCrop) => { + const handleSetCrop = React.useCallback((_: unknown, c: PercentCrop) => { setCrop(c) }, []) const handleCropComplete = React.useCallback( - (_, c: PercentCrop) => { + (_: unknown, c: PercentCrop) => { onCropComplete(c) }, [onCropComplete], diff --git a/src/components/InputField.tsx b/src/components/InputField.tsx index 21e4020c6..088f94ee1 100644 --- a/src/components/InputField.tsx +++ b/src/components/InputField.tsx @@ -1,9 +1,10 @@ import * as React from 'react' -import { TextField } from '@mui/material' +import { TextField, TextFieldProps } from '@mui/material' import InputClear from './InputClear' -type Props = React.ComponentProps & { +type Props = TextFieldProps & { onClear?: () => void + InputProps?: NonNullable['input'] } const InputField = ({ @@ -33,7 +34,9 @@ const InputField = ({ diff --git a/src/components/LoadingWithMessage.tsx b/src/components/LoadingWithMessage.tsx index cc5a6b484..d440163fe 100644 --- a/src/components/LoadingWithMessage.tsx +++ b/src/components/LoadingWithMessage.tsx @@ -8,14 +8,13 @@ const Loading = ({ message }: Props) => { return ( - + {message && ( diff --git a/src/components/MaterialIcon.tsx b/src/components/MaterialIcon.tsx index d50d04c69..cfdd4d70b 100644 --- a/src/components/MaterialIcon.tsx +++ b/src/components/MaterialIcon.tsx @@ -2,10 +2,11 @@ import * as React from 'react' import { Icon } from '@mui/material' import clsx from 'clsx' -export default React.forwardRef< - HTMLSpanElement, - React.ComponentProps ->(function MaterialIcon({ className, ...props }, ref) { +export default function MaterialIcon({ + className, + ref, + ...props +}: React.ComponentProps) { return ( ) -}) +} diff --git a/src/components/NotificationGrid.tsx b/src/components/NotificationGrid.tsx index cb712f0ac..1293b059f 100644 --- a/src/components/NotificationGrid.tsx +++ b/src/components/NotificationGrid.tsx @@ -39,7 +39,6 @@ export function NotificationGridItem({ return ( ({ flexBasis: '100%', diff --git a/src/components/SuccessSnackbar.tsx b/src/components/SuccessSnackbar.tsx index 5b9dba252..6f5020d5a 100644 --- a/src/components/SuccessSnackbar.tsx +++ b/src/components/SuccessSnackbar.tsx @@ -30,12 +30,10 @@ function SuccessSnackbar({ sx={{ bgcolor: 'success.main' }} message={ - + check_circle - - {children} - + {children} } /> diff --git a/src/components/ValidationErrorsCard.tsx b/src/components/ValidationErrorsCard.tsx index b5e2a1b08..5f56645fb 100644 --- a/src/components/ValidationErrorsCard.tsx +++ b/src/components/ValidationErrorsCard.tsx @@ -148,7 +148,7 @@ const ValidationErrorsCard = ({ setPageId: ReturnType['setPageId'] navigationTopOffset: number | 'CALCULATE' scrollableContainerId?: string - validationErrorToastFocusElementRef: React.RefObject + validationErrorToastFocusElementRef: React.RefObject }) => { const [isExpanded, expand, contract] = useBooleanState(false) diff --git a/src/components/downloadable-files/resource-components.tsx b/src/components/downloadable-files/resource-components.tsx index f7d0fc640..37cb8da83 100644 --- a/src/components/downloadable-files/resource-components.tsx +++ b/src/components/downloadable-files/resource-components.tsx @@ -97,12 +97,12 @@ function DownloadableFilesDisplay({ > {pdfFileNodes && pdfFileNodes.map(({ node, key }) => ( - + {node} ))} {attachments.map((attachment, index) => ( - + ))} @@ -189,7 +189,7 @@ export const OnlyPDFDisplay = ({ justifyContent={children.length === 1 ? 'center' : undefined} > {children.map(({ node, key }) => ( - + {node} ))} diff --git a/src/components/formStore/FormStoreTableProvider.tsx b/src/components/formStore/FormStoreTableProvider.tsx index 992fc85e5..3d4d590ab 100644 --- a/src/components/formStore/FormStoreTableProvider.tsx +++ b/src/components/formStore/FormStoreTableProvider.tsx @@ -6,7 +6,6 @@ import { formStoreService } from '@oneblink/apps' import useInfiniteScrollDataLoad from '../../hooks/useInfiniteScrollDataLoad' import useFormStoreTable from './table/useFormStoreTable' import { Box, Button, Grid } from '@mui/material' -import { LoadingButton } from '@mui/lab' import { FormTypes } from '@oneblink/types' import useSubmissionIdValidationMessage, { validateIsUUID, @@ -145,10 +144,12 @@ export function FormStoreTableProvider({ onRefresh, }) + const visibleColumns = formStoreTable.getVisibleFlatColumns() + return ( {children} - {formStoreTable.visibleColumns.length ? ( + {visibleColumns?.length ? ( <> {!formStoreRecords.length && !isLoading && !loadError && ( - Load More - + )} diff --git a/src/components/formStore/OneBlinkFormStoreClearFiltersButton.tsx b/src/components/formStore/OneBlinkFormStoreClearFiltersButton.tsx index e2da31664..3246752c6 100644 --- a/src/components/formStore/OneBlinkFormStoreClearFiltersButton.tsx +++ b/src/components/formStore/OneBlinkFormStoreClearFiltersButton.tsx @@ -2,6 +2,7 @@ import * as React from 'react' import { Button } from '@mui/material' import useFormStoreTableContext from './useFormStoreTableContext' import MaterialIcon from '../MaterialIcon' +import { formStoreService } from '@oneblink/apps' function OneBlinkFormStoreClearFiltersButton( props: React.ComponentProps, @@ -17,7 +18,7 @@ function OneBlinkFormStoreClearFiltersButton( disabled={isDisabled} onClick={() => { onChangeParameters( - (currentParameters) => ({ + (currentParameters: formStoreService.FormStoreParameters) => ({ ...currentParameters, filters: undefined, }), diff --git a/src/components/formStore/OneBlinkFormStoreColumnsButton.tsx b/src/components/formStore/OneBlinkFormStoreColumnsButton.tsx index 2e0c42e78..ac7f50b37 100644 --- a/src/components/formStore/OneBlinkFormStoreColumnsButton.tsx +++ b/src/components/formStore/OneBlinkFormStoreColumnsButton.tsx @@ -26,10 +26,12 @@ function OneBlinkFormStoreColumnsButton( props: React.ComponentProps, ) { const { - getToggleHideAllColumnsProps, - allColumns, + getAllFlatColumns, parameters, onChangeParameters, + getToggleAllColumnsVisibilityHandler, + getIsAllColumnsVisible, + getVisibleFlatColumns, } = useFormStoreTableContext() const [ isConfiguringColumns, @@ -38,13 +40,15 @@ function OneBlinkFormStoreColumnsButton( ] = useBooleanState(false) const [isHelpOpen, , , toggleHelp] = useBooleanState(false) - const toggleHideAllColumnsProps = getToggleHideAllColumnsProps() + const allColumns = getAllFlatColumns() const hasRepeatableSets = React.useMemo( () => parameters.unwindRepeatableSets || - allColumns.some((c) => c.formElementType === 'repeatableSet'), - [allColumns, parameters.unwindRepeatableSets], + allColumns.some( + (c) => c.columnDef.meta?.formElementType === 'repeatableSet', + ), + [parameters.unwindRepeatableSets, allColumns], ) return ( @@ -53,10 +57,10 @@ function OneBlinkFormStoreColumnsButton( className="ob-form-store-columns-button" startIcon={settings} onClick={showColumnConfiguration} - // eslint-disable-next-line react/no-children-prop - children={<>Columns} {...props} - /> + > + Columns + - + - + help @@ -129,8 +133,9 @@ function OneBlinkFormStoreColumnsButton( 0} /> } label={Toggle All} @@ -139,14 +144,19 @@ function OneBlinkFormStoreColumnsButton( return ( } + control={ + + } label={ <> - {column.headerText} - {column.tooltip && ( + {column.columnDef.header} + {column.columnDef.meta?.tooltip && ( {' '} - ({column.tooltip}) + ({column.columnDef.meta?.tooltip}) )} diff --git a/src/components/formStore/OneBlinkFormStoreDownloadButton.tsx b/src/components/formStore/OneBlinkFormStoreDownloadButton.tsx index d3f1eb53c..47b3ee58c 100644 --- a/src/components/formStore/OneBlinkFormStoreDownloadButton.tsx +++ b/src/components/formStore/OneBlinkFormStoreDownloadButton.tsx @@ -8,18 +8,15 @@ import { DialogActions, Button, } from '@mui/material' -import { LoadingButton } from '@mui/lab' import ErrorSnackbar from '../ErrorSnackbar' -import { ColumnInstance } from 'react-table' -import { FormStoreRecord } from '@oneblink/types/typescript/submissions' import { formStoreService } from '@oneblink/apps' import useFormStoreTableContext from './useFormStoreTableContext' import MaterialIcon from '../MaterialIcon' function OneBlinkFormStoreDownloadButton( - props: React.ComponentProps, + props: React.ComponentProps, ) { - const { visibleColumns, parameters, form } = useFormStoreTableContext() + const { getVisibleFlatColumns, parameters, form } = useFormStoreTableContext() const [ { isDownloadingCsv, isPromptingDownloadCsv, downloadingCsvError }, setState, @@ -49,8 +46,8 @@ function OneBlinkFormStoreDownloadButton( try { await formStoreService.exportFormStoreRecords(form.name, { formId: form.id, - includeColumns: visibleColumns.map( - (visibleColumn: ColumnInstance) => visibleColumn.id, + includeColumns: getVisibleFlatColumns().map( + (visibleColumn) => visibleColumn.id, ), ...parameters, }) @@ -66,12 +63,14 @@ function OneBlinkFormStoreDownloadButton( downloadingCsvError: error as Error, })) } - }, [form, parameters, visibleColumns]) + }, [form, parameters, getVisibleFlatColumns]) const promptDownloadCsv = React.useCallback(() => { if ( !parameters.unwindRepeatableSets && - visibleColumns.some((c) => c.formElementType === 'repeatableSet') + getVisibleFlatColumns().some( + (c) => c.columnDef.meta?.formElementType === 'repeatableSet', + ) ) { setState((currentState) => ({ ...currentState, @@ -81,7 +80,7 @@ function OneBlinkFormStoreDownloadButton( return } downloadCsv() - }, [downloadCsv, parameters.unwindRepeatableSets, visibleColumns]) + }, [downloadCsv, parameters.unwindRepeatableSets, getVisibleFlatColumns]) const cancelPromptDownloadCsv = React.useCallback(() => { setState((currentState) => ({ @@ -93,17 +92,17 @@ function OneBlinkFormStoreDownloadButton( return ( <> - download} onClick={promptDownloadCsv} - // eslint-disable-next-line react/no-children-prop - children={<>Download} {...props} - /> + > + Download + diff --git a/src/components/formStore/OneBlinkFormStoreTable.tsx b/src/components/formStore/OneBlinkFormStoreTable.tsx index 38d08f84c..c42af2ff8 100644 --- a/src/components/formStore/OneBlinkFormStoreTable.tsx +++ b/src/components/formStore/OneBlinkFormStoreTable.tsx @@ -1,6 +1,8 @@ import * as React from 'react' import clsx from 'clsx' import { styled, Tooltip } from '@mui/material' +import { flexRender } from '@tanstack/react-table' +import { formStoreService } from '@oneblink/apps' import { IsHoveringProvider } from '../../hooks/useIsHovering' import HeaderCellMoreButton from './table/HeaderCellMoreButton' import useFormStoreTableContext from './useFormStoreTableContext' @@ -93,16 +95,52 @@ const Table = styled('div')(({ theme }) => ({ }, })) +const HeaderRow = styled('div')(() => ({ + display: 'flex', +})) + +const CellRow = styled('div')(() => ({ + display: 'flex', +})) + function OneBlinkFormStoreTable() { const { - getTableProps, - getTableBodyProps, - headerGroups: [parentHeaderGroup], - rows, - prepareRow, + getHeaderGroups, + getCoreRowModel, + getFlatHeaders, + getState, onChangeParameters, } = useFormStoreTableContext() + const [parentHeaderGroup] = getHeaderGroups() + const rows = getCoreRowModel().rows + + const columnSizingInfo = getState().columnSizingInfo + const columnSizing = getState().columnSizing + + /** + * Pinched from + * https://tanstack.com/table/latest/docs/framework/react/examples/column-resizing-performant + * Instead of calling `column.getSize()` on every render for every header and + * especially every data cell (very expensive), we will calculate all column + * sizes at once at the root table level in a useMemo and pass the column + * sizes down as CSS variables to the element. + */ + + const columnSizeVars = React.useMemo(() => { + // we want the memo to recalculate if these change, dropping them here so the linter doesn't complain about unused dependencies + columnSizingInfo + columnSizing + const headers = getFlatHeaders() + const colSizes: { [key: string]: number } = {} + for (let i = 0; i < headers.length; i++) { + const header = headers[i]! + colSizes[`--header-${header.id}-size`] = header.getSize() + colSizes[`--col-${header.column.id}-size`] = header.column.getSize() + } + return colSizes + }, [getFlatHeaders, columnSizingInfo, columnSizing]) + if (!parentHeaderGroup) { return null } @@ -111,26 +149,30 @@ function OneBlinkFormStoreTable() { return ( <> -
+
-
+ { // Loop over the headers in each row - parentHeaderGroup.headers.map((headerGroup) => { - const sortingProperty = headerGroup.sorting?.property - const sortingDirection = headerGroup.sorting?.direction + parentHeaderGroup.headers.map((header) => { + const sortingProperty = + header.column.columnDef.meta?.sorting?.property + const sortingDirection = header.column.getIsSorted() + + if (!header.column.getIsVisible()) { + return null + } return ( @@ -141,53 +183,69 @@ function OneBlinkFormStoreTable() { onClick={ sortingProperty ? () => { - onChangeParameters((currentParameters) => { - switch (sortingDirection) { - case 'ascending': { - return { - ...currentParameters, - sorting: [ - { - property: sortingProperty, - direction: 'descending', - }, - ], - } + onChangeParameters( + ( + currentParameters: formStoreService.FormStoreParameters, + ) => { + const sortingMeta = + header.column.columnDef.meta?.sorting + ?.property + if (!sortingMeta) { + return currentParameters } - case 'descending': { - return { - ...currentParameters, - sorting: undefined, + switch (sortingDirection) { + case 'asc': { + return { + ...currentParameters, + sorting: [ + { + property: sortingMeta, + direction: 'descending', + }, + ], + } } - } - default: { - return { - ...currentParameters, - sorting: [ - { - property: sortingProperty, - direction: 'ascending', - }, - ], + case 'desc': { + return { + ...currentParameters, + sorting: undefined, + } + } + default: { + return { + ...currentParameters, + sorting: [ + { + property: sortingMeta, + direction: 'ascending', + }, + ], + } } } - } - }, false) + }, + false, + ) } : undefined } - // Apply the header cell props - {...headerGroup.getHeaderProps()} + style={{ + width: `calc(var(--header-${header?.id}-size) * 1px)`, + }} >
- {headerGroup.headerText} + + {typeof header.column.columnDef?.header === 'string' + ? header.column.columnDef?.header + : ''} + {sortingDirection && ( )} - {headerGroup.filter?.isInvalid ? ( + + {header.column.columnDef.meta?.filter?.isInvalid ? ( - ) : headerGroup.filter?.value ? ( + ) : header.column.columnDef.meta?.filter?.value ? ( header.column.toggleVisibility()} />
{ event.stopPropagation() }} + onDoubleClick={() => header.column.resetSize()} + onMouseDown={header.getResizeHandler()} + onTouchStart={header.getResizeHandler()} />
@@ -241,9 +303,9 @@ function OneBlinkFormStoreTable() { ) }) } -
+
-
+
{ // Loop over the table rows rows.map((row, index) => { @@ -253,12 +315,9 @@ function OneBlinkFormStoreTable() { ) { alternateBackground = !alternateBackground } - // Prepare the row for display - prepareRow(row) return ( // Apply the row props -
{ // Loop over the rows cells - row.cells.map((cell) => { + row.getAllCells().map((cell) => { // Apply the cell props return ( { // Render the cell contents - cell.render('Cell') + flexRender( + cell.column.columnDef.cell, + cell.getContext(), + ) } ) }) } -
+ ) }) } diff --git a/src/components/formStore/display/ElementDisplay.tsx b/src/components/formStore/display/ElementDisplay.tsx index d40a9504d..e426860c4 100644 --- a/src/components/formStore/display/ElementDisplay.tsx +++ b/src/components/formStore/display/ElementDisplay.tsx @@ -111,7 +111,7 @@ export function FilesElementDataTableCellContent({ {value.map((file, index) => { return ( - + ) diff --git a/src/components/formStore/table/ColumnFilters.tsx b/src/components/formStore/table/ColumnFilters.tsx index 851017f3d..065a45036 100644 --- a/src/components/formStore/table/ColumnFilters.tsx +++ b/src/components/formStore/table/ColumnFilters.tsx @@ -1,7 +1,7 @@ import * as React from 'react' import { FormTypes } from '@oneblink/types' import { FormStoreRecord } from '@oneblink/types/typescript/submissions' -import { HeaderGroup } from 'react-table' +import { ColumnMeta } from '@tanstack/react-table' import { Checkbox, FormControl, @@ -23,7 +23,7 @@ const StyledTextField = styled(TextField)(() => ({ })) type Props = { - filter: NonNullable['filter']> + filter: NonNullable['filter']> } const shortDateFormat = localisationService.getDateFnsFormats().shortDate @@ -41,7 +41,7 @@ function ColumnFilters({ filter }: Props) { type="text" fullWidth value={filter.value?.$eq || ''} - onChange={(e) => { + onChange={(e: React.ChangeEvent) => { filter.onChange( e.target.value ? { @@ -65,7 +65,7 @@ function ColumnFilters({ filter }: Props) { type="text" fullWidth value={filter.value?.$regex || ''} - onChange={(e) => { + onChange={(e: React.ChangeEvent) => { filter.onChange( e.target.value ? { @@ -83,7 +83,7 @@ function ColumnFilters({ filter }: Props) { case 'NUMBER': { return ( - + - + - + - + - + - + { + renderValue: (selectedIds: unknown) => { return options .reduce((selectedLabels, option) => { if ((selectedIds as string[]).includes(option.value)) { @@ -354,7 +354,7 @@ function OptionsTextField({ }} fullWidth value={value || []} - onChange={(e) => { + onChange={(e: React.ChangeEvent) => { const newValue = e.target.value as unknown as string[] onChange(newValue) }} diff --git a/src/components/formStore/table/HeaderCellMoreButton.tsx b/src/components/formStore/table/HeaderCellMoreButton.tsx index d3a2cf896..989d4ea9d 100644 --- a/src/components/formStore/table/HeaderCellMoreButton.tsx +++ b/src/components/formStore/table/HeaderCellMoreButton.tsx @@ -1,9 +1,8 @@ import * as React from 'react' -import { HeaderGroup } from 'react-table' +import { Header } from '@tanstack/react-table' import { Box, Button, - Divider, Grid, IconButton, Popover, @@ -25,10 +24,10 @@ const paperStyles: SxProps = { } function HeaderCellMoreButton({ - headerGroup, + header, onHide, }: { - headerGroup: HeaderGroup + header: Header onHide: () => void }) { const isHovering = useIsHovering() @@ -39,7 +38,7 @@ function HeaderCellMoreButton({ { + onClick={(event: React.MouseEvent) => { event.stopPropagation() setAnchorEl(event.currentTarget) }} @@ -66,29 +65,36 @@ function HeaderCellMoreButton({ vertical: 'top', horizontal: 'right', }} - PaperProps={{ - sx: paperStyles, + slotProps={{ + paper: { + sx: paperStyles, + }, }} onClick={(event) => { event.stopPropagation() }} > - {headerGroup.filter && ( - <> - - - - - + {header.column.columnDef.meta?.filter && ( + + + )} + - {headerGroup.filter && ( - + {header.column.columnDef.meta?.filter && ( + )} - + - Save - + diff --git a/src/components/mfa/MultiFactorAuthentication.tsx b/src/components/mfa/MultiFactorAuthentication.tsx index 47ca8bebb..5067dd730 100644 --- a/src/components/mfa/MultiFactorAuthentication.tsx +++ b/src/components/mfa/MultiFactorAuthentication.tsx @@ -1,4 +1,3 @@ -import * as React from 'react' import { Box, Button, @@ -12,7 +11,6 @@ import { Typography, styled, } from '@mui/material' -import { LoadingButton } from '@mui/lab' import ConfirmDialog from '../ConfirmDialog' import MfaDialog from './MfaDialog' import ErrorSnackbar from '../ErrorSnackbar' @@ -104,7 +102,7 @@ function MfaSetup({ ssoSetupUrl }: { ssoSetupUrl: string }) { if (ssoSetupUrl) { return ( - + + - + Multi Factor Authentication{' '} | null>(null) + React.createContext | null>(null) export function ModalContainerProvider({ children, diff --git a/src/components/renderer/OneBlinkFormElements.tsx b/src/components/renderer/OneBlinkFormElements.tsx index 3f0df6b2f..5a69b8caa 100644 --- a/src/components/renderer/OneBlinkFormElements.tsx +++ b/src/components/renderer/OneBlinkFormElements.tsx @@ -937,7 +937,9 @@ const FormElementSwitch = React.memo(function OneBlinkFormElement({ ) } case 'pointAddressV3': { - const v = value as PointTypes.PointAddressV3GetAddressDetailsResponse | undefined + const v = value as + | PointTypes.PointAddressV3GetAddressDetailsResponse + | undefined return ( + {children} ) diff --git a/src/form-elements/FormElementABN.tsx b/src/form-elements/FormElementABN.tsx index 037944ab9..e271ddb70 100644 --- a/src/form-elements/FormElementABN.tsx +++ b/src/form-elements/FormElementABN.tsx @@ -1,6 +1,6 @@ import * as React from 'react' import clsx from 'clsx' -import InputMask from 'react-input-mask' +import { InputMask } from '@react-input/mask' import { parseString } from 'xml2js' import CopyToClipboardButton from '../components/renderer/CopyToClipboardButton' import useBooleanState from '../hooks/useBooleanState' @@ -225,8 +225,8 @@ function FormElementABN({ })} > {value?.licenceDetail?.licenceName && (
Promise<{ dataUrl: string }> - >() + >(null) const takeSnapshot = useCallback( async ( diff --git a/src/form-elements/FormElementBSB.tsx b/src/form-elements/FormElementBSB.tsx index 786d9d151..864231fc1 100644 --- a/src/form-elements/FormElementBSB.tsx +++ b/src/form-elements/FormElementBSB.tsx @@ -1,5 +1,5 @@ import * as React from 'react' -import InputMask from 'react-input-mask' +import { InputMask } from '@react-input/mask' import clsx from 'clsx' import CopyToClipboardButton from '../components/renderer/CopyToClipboardButton' import LookupButton from '../components/renderer/LookupButton' @@ -147,8 +147,8 @@ function FormElementBSB({ })} > { + (formSubmissionModel: SubmissionTypes.S3SubmissionData['submission']) => { if (!calculation) { return } diff --git a/src/form-elements/FormElementLookupButton.tsx b/src/form-elements/FormElementLookupButton.tsx index 06ef95b43..763b21a5e 100644 --- a/src/form-elements/FormElementLookupButton.tsx +++ b/src/form-elements/FormElementLookupButton.tsx @@ -1,4 +1,4 @@ -import React, { memo, useCallback, useContext, useEffect, useMemo } from 'react' +import { memo, useCallback, useContext, useEffect, useMemo } from 'react' import LookupButton from '../components/renderer/LookupButton' import { FormTypes, SubmissionTypes } from '@oneblink/types' import FormElementLabelContainer from '../components/renderer/FormElementLabelContainer' diff --git a/src/form-elements/FormElementSignature.tsx b/src/form-elements/FormElementSignature.tsx index 1d1f38365..9ba26c65e 100644 --- a/src/form-elements/FormElementSignature.tsx +++ b/src/form-elements/FormElementSignature.tsx @@ -1,6 +1,6 @@ import * as React from 'react' import SignatureCanvas from 'react-signature-canvas' -import useResizeObserver, { ObservedSize } from 'use-resize-observer' +import { useResizeObserver } from 'usehooks-ts' import { FormTypes } from '@oneblink/types' import scrollingService from '../services/scrolling-service' @@ -89,7 +89,9 @@ const SignatureDrawing = React.memo(function SignatureDrawing({ const canvasRef = React.useRef(null) const [isEmpty, setIsEmpty] = React.useState(true) - const [canvasDimensions, setCanvasDimensions] = React.useState({ + const [canvasDimensions, setCanvasDimensions] = React.useState< + React.CanvasHTMLAttributes + >({ width: undefined, height: undefined, }) @@ -123,7 +125,11 @@ const SignatureDrawing = React.memo(function SignatureDrawing({ } }, [isEmpty]) - const { ref } = useResizeObserver({ + const ref = React.useRef(null) + + useResizeObserver({ + // @ts-expect-error https://github.com/juliencrn/usehooks-ts/issues/663 + ref, onResize: setCanvasDimensions, }) diff --git a/src/form-elements/FormElementTextarea.tsx b/src/form-elements/FormElementTextarea.tsx index 89fd5e05d..c59698c44 100644 --- a/src/form-elements/FormElementTextarea.tsx +++ b/src/form-elements/FormElementTextarea.tsx @@ -61,7 +61,7 @@ function FormElementTextarea({ name={element.name} className="input ob-input cypress-textarea-control" value={text} - onChange={(e) => + onChange={(e: React.ChangeEvent) => onChange(element, { value: e.target.value || undefined, }) diff --git a/src/hooks/form-date-picker/useFormDatePickerProps.tsx b/src/hooks/form-date-picker/useFormDatePickerProps.tsx index cc23d9087..9cc3fa7f2 100644 --- a/src/hooks/form-date-picker/useFormDatePickerProps.tsx +++ b/src/hooks/form-date-picker/useFormDatePickerProps.tsx @@ -174,6 +174,7 @@ export default function useFormDatePickerProps({ value: valueMemo, disabled, desktopMediaQuery, + enableAccessibleFieldDOMStructure: false, }, openPicker, ] as const diff --git a/src/hooks/useDrafts.tsx b/src/hooks/useDrafts.tsx index adf6ccee9..d0e119120 100644 --- a/src/hooks/useDrafts.tsx +++ b/src/hooks/useDrafts.tsx @@ -142,7 +142,7 @@ export function DraftsContextProvider({ >(null) const deleteDraft = React.useCallback( - (draftId) => { + (draftId: string) => { return draftService.deleteDraft(draftId, formsAppId) }, [formsAppId], diff --git a/src/hooks/useDynamicOptionsLoaderState.tsx b/src/hooks/useDynamicOptionsLoaderState.tsx index 656ffb74b..ed6c54156 100644 --- a/src/hooks/useDynamicOptionsLoaderState.tsx +++ b/src/hooks/useDynamicOptionsLoaderState.tsx @@ -48,7 +48,9 @@ export function FormElementOptionsContextProvider({ }, [form.elements]) const loadFreshdeskFields = React.useCallback( - async (abortSignal): Promise => { + async ( + abortSignal: AbortSignal, + ): Promise => { if (hasFreshdeskFields && !formIsReadOnly) { return await formService.getFreshdeskFields(form.id, abortSignal) } @@ -74,7 +76,7 @@ export function FormElementOptionsContextProvider({ }, [form.elements]) const loadFormElementOptionsSets = React.useCallback( - async (abortSignal): Promise => { + async (abortSignal: AbortSignal): Promise => { if (!hasOptionsSets || formIsReadOnly) { return [] } diff --git a/src/hooks/useFormElementDateFromTo.ts b/src/hooks/useFormElementDateFromTo.ts index 1432cb407..091c367d2 100644 --- a/src/hooks/useFormElementDateFromTo.ts +++ b/src/hooks/useFormElementDateFromTo.ts @@ -19,6 +19,7 @@ export default function useFormElementDateFromTo( formSubmissionModel, ) }, [ + // prettier-ignore element.fromDate, element.fromDateDaysOffset, element.fromDateElementId, diff --git a/src/hooks/useIsHovering.tsx b/src/hooks/useIsHovering.tsx index af3774c72..791c942a2 100644 --- a/src/hooks/useIsHovering.tsx +++ b/src/hooks/useIsHovering.tsx @@ -3,10 +3,10 @@ import useBooleanState from './useBooleanState' const IsHoveringContext = React.createContext(false) -export const IsHoveringProvider = React.forwardRef< - HTMLDivElement, - React.ComponentProps<'div'> ->(function IsHoveringProvider(props: React.ComponentProps<'div'>, ref) { +export function IsHoveringProvider({ + ref, + ...props +}: React.ComponentProps<'div'>) { const [isHovering, startHovering, stopHovering] = useBooleanState(false) return ( @@ -19,7 +19,7 @@ export const IsHoveringProvider = React.forwardRef< /> ) -}) +} export function useIsHovering() { return React.useContext(IsHoveringContext) diff --git a/src/hooks/useReCAPTCHAProps.ts b/src/hooks/useReCAPTCHAProps.ts index c1a8bd2fb..27eaa9372 100644 --- a/src/hooks/useReCAPTCHAProps.ts +++ b/src/hooks/useReCAPTCHAProps.ts @@ -9,7 +9,7 @@ export default function useReCAPTCHAProps({ onCaptchaChange, }: { captchaSiteKey: string | undefined - captchaRef: RefObject + captchaRef: RefObject captchaType: CaptchaType | undefined onCaptchaChange: (token: string | null) => void }) { diff --git a/src/types/jsx.d.ts b/src/types/jsx.d.ts index 2a90e7163..57a499f86 100644 --- a/src/types/jsx.d.ts +++ b/src/types/jsx.d.ts @@ -1,6 +1,9 @@ -declare namespace JSX { - interface IntrinsicElements { - // eslint-disable-next-line @typescript-eslint/no-explicit-any - 'on-loading': any +import type { HTMLAttributes } from 'react' + +declare module 'react/jsx-runtime' { + namespace JSX { + interface IntrinsicElements { + 'on-loading': HTMLAttributes + } } } diff --git a/src/types/react-table.d.ts b/src/types/react-table.d.ts index cd1b2a3e7..226990872 100644 --- a/src/types/react-table.d.ts +++ b/src/types/react-table.d.ts @@ -1,18 +1,11 @@ import { FormTypes } from '@oneblink/types' -import { - UseResizeColumnsColumnProps, - UseResizeColumnsOptions, - UseResizeColumnsState, -} from 'react-table' import { formStoreService } from '@oneblink/apps' -declare module 'react-table' { - export interface UseTableColumnOptions< - // eslint-disable-next-line @typescript-eslint/no-unused-vars - D extends Record = Record, - > { - headerText: string +declare module '@tanstack/react-table' { + // eslint-disable-next-line @typescript-eslint/no-unused-vars + interface ColumnMeta { tooltip?: string + formElementType?: FormTypes.FormElementType sorting: | { property: string @@ -77,18 +70,11 @@ declare module 'react-table' { } } ) - formElementType?: FormTypes.FormElementType } - export interface ColumnInstance< - D extends Record = Record, - > extends UseResizeColumnsColumnProps {} - - export interface TableState< - D extends Record = Record, - > extends UseResizeColumnsState {} - - export interface TableOptions< - D extends Record = Record, - > extends UseResizeColumnsOptions {} + // eslint-disable-next-line @typescript-eslint/no-unused-vars + interface TableMeta { + defaultHiddenColumnsVersion?: string + formId + } } diff --git a/tsconfig.json b/tsconfig.json index 47128b98e..b442b1064 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -4,7 +4,7 @@ "module": "ES2020", "moduleResolution": "Node", "lib": ["ES2021", "webworker", "dom"], - "jsx": "react", + "jsx": "react-jsx", "allowJs": true, "declaration": true, "outDir": "./dist",