diff --git a/package-lock.json b/package-lock.json index 88c37a5998e..bc74da4e4d4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -69,7 +69,6 @@ "@storybook/react": "^7.0.26", "@storybook/react-vite": "^7.0.26", "@storybook/testing-library": "^0.2.0", - "@tailwindcss/aspect-ratio": "^0.4.2", "@tailwindcss/container-queries": "^0.1.1", "@tailwindcss/forms": "^0.5.3", "@tailwindcss/typography": "^0.5.9", @@ -122,7 +121,7 @@ "rescript": "^10.1.4", "snyk": "^1.1187.0", "storybook": "^7.0.26", - "tailwindcss": "^3.3.2", + "tailwindcss": "^3.3.3", "typescript": "^5.1.6", "vite": "^4.4.0", "vite-plugin-pwa": "^0.16.4" @@ -5171,15 +5170,6 @@ "node": ">=10" } }, - "node_modules/@tailwindcss/aspect-ratio": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/@tailwindcss/aspect-ratio/-/aspect-ratio-0.4.2.tgz", - "integrity": "sha512-8QPrypskfBa7QIMuKHg2TA7BqES6vhBrDLOv8Unb6FcFyd3TjKbc6lcmb9UPQHxfl24sXoJ41ux/H7qQQvfaSQ==", - "dev": true, - "peerDependencies": { - "tailwindcss": ">=2.0.0 || >=3.0.0 || >=3.0.0-alpha.1" - } - }, "node_modules/@tailwindcss/container-queries": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/@tailwindcss/container-queries/-/container-queries-0.1.1.tgz", @@ -13752,6 +13742,8 @@ }, "node_modules/npm/node_modules/@colors/colors": { "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", + "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", "dev": true, "inBundle": true, "license": "MIT", @@ -13762,6 +13754,8 @@ }, "node_modules/npm/node_modules/@isaacs/cliui": { "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", "dev": true, "inBundle": true, "license": "ISC", @@ -13779,6 +13773,8 @@ }, "node_modules/npm/node_modules/@isaacs/cliui/node_modules/ansi-regex": { "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", "dev": true, "inBundle": true, "license": "MIT", @@ -13791,12 +13787,16 @@ }, "node_modules/npm/node_modules/@isaacs/cliui/node_modules/emoji-regex": { "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/@isaacs/cliui/node_modules/string-width": { "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", "dev": true, "inBundle": true, "license": "MIT", @@ -13814,6 +13814,8 @@ }, "node_modules/npm/node_modules/@isaacs/cliui/node_modules/strip-ansi": { "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dev": true, "inBundle": true, "license": "MIT", @@ -14066,6 +14068,8 @@ }, "node_modules/npm/node_modules/@pkgjs/parseargs": { "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", "dev": true, "inBundle": true, "license": "MIT", @@ -14150,6 +14154,8 @@ }, "node_modules/npm/node_modules/agent-base": { "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", "dev": true, "inBundle": true, "license": "MIT", @@ -14176,6 +14182,8 @@ }, "node_modules/npm/node_modules/aggregate-error": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", "dev": true, "inBundle": true, "license": "MIT", @@ -14189,6 +14197,8 @@ }, "node_modules/npm/node_modules/ansi-regex": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, "inBundle": true, "license": "MIT", @@ -14198,6 +14208,8 @@ }, "node_modules/npm/node_modules/ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "inBundle": true, "license": "MIT", @@ -14213,6 +14225,8 @@ }, "node_modules/npm/node_modules/aproba": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", "dev": true, "inBundle": true, "license": "ISC" @@ -14238,12 +14252,16 @@ }, "node_modules/npm/node_modules/balanced-match": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/base64-js": { "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", "dev": true, "funding": [ { @@ -14288,6 +14306,8 @@ }, "node_modules/npm/node_modules/brace-expansion": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, "inBundle": true, "license": "MIT", @@ -14365,6 +14385,8 @@ }, "node_modules/npm/node_modules/chownr": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", "dev": true, "inBundle": true, "license": "ISC", @@ -14401,6 +14423,8 @@ }, "node_modules/npm/node_modules/clean-stack": { "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", "dev": true, "inBundle": true, "license": "MIT", @@ -14438,6 +14462,8 @@ }, "node_modules/npm/node_modules/clone": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", "dev": true, "inBundle": true, "license": "MIT", @@ -14456,6 +14482,8 @@ }, "node_modules/npm/node_modules/color-convert": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "inBundle": true, "license": "MIT", @@ -14468,6 +14496,8 @@ }, "node_modules/npm/node_modules/color-name": { "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true, "inBundle": true, "license": "MIT" @@ -14502,18 +14532,24 @@ }, "node_modules/npm/node_modules/concat-map": { "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/console-control-strings": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/npm/node_modules/cross-spawn": { "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "dev": true, "inBundle": true, "license": "MIT", @@ -14543,6 +14579,8 @@ }, "node_modules/npm/node_modules/cssesc": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", "dev": true, "inBundle": true, "license": "MIT", @@ -14555,6 +14593,8 @@ }, "node_modules/npm/node_modules/debug": { "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, "inBundle": true, "license": "MIT", @@ -14572,12 +14612,16 @@ }, "node_modules/npm/node_modules/debug/node_modules/ms": { "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/defaults": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", "dev": true, "inBundle": true, "license": "MIT", @@ -14590,6 +14634,8 @@ }, "node_modules/npm/node_modules/delegates": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", "dev": true, "inBundle": true, "license": "MIT" @@ -14614,12 +14660,16 @@ }, "node_modules/npm/node_modules/eastasianwidth": { "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/emoji-regex": { "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true, "inBundle": true, "license": "MIT" @@ -14660,6 +14710,8 @@ }, "node_modules/npm/node_modules/events": { "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", "dev": true, "inBundle": true, "license": "MIT", @@ -14684,6 +14736,8 @@ }, "node_modules/npm/node_modules/foreground-child": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", + "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", "dev": true, "inBundle": true, "license": "ISC", @@ -14712,12 +14766,16 @@ }, "node_modules/npm/node_modules/fs.realpath": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/npm/node_modules/function-bind": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", "dev": true, "inBundle": true, "license": "MIT" @@ -14771,6 +14829,8 @@ }, "node_modules/npm/node_modules/has": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", "dev": true, "inBundle": true, "license": "MIT", @@ -14783,6 +14843,8 @@ }, "node_modules/npm/node_modules/has-unicode": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", "dev": true, "inBundle": true, "license": "ISC" @@ -14821,6 +14883,8 @@ }, "node_modules/npm/node_modules/https-proxy-agent": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", "dev": true, "inBundle": true, "license": "MIT", @@ -14888,6 +14952,8 @@ }, "node_modules/npm/node_modules/imurmurhash": { "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "dev": true, "inBundle": true, "license": "MIT", @@ -14897,6 +14963,8 @@ }, "node_modules/npm/node_modules/indent-string": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", "dev": true, "inBundle": true, "license": "MIT", @@ -14906,6 +14974,8 @@ }, "node_modules/npm/node_modules/inflight": { "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", "dev": true, "inBundle": true, "license": "ISC", @@ -14916,6 +14986,8 @@ }, "node_modules/npm/node_modules/inherits": { "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true, "inBundle": true, "license": "ISC" @@ -14949,6 +15021,8 @@ }, "node_modules/npm/node_modules/ip": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", + "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", "dev": true, "inBundle": true, "license": "MIT" @@ -14988,6 +15062,8 @@ }, "node_modules/npm/node_modules/is-fullwidth-code-point": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, "inBundle": true, "license": "MIT", @@ -15003,6 +15079,8 @@ }, "node_modules/npm/node_modules/isexe": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "dev": true, "inBundle": true, "license": "ISC" @@ -15269,6 +15347,8 @@ }, "node_modules/npm/node_modules/minimatch": { "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", "dev": true, "inBundle": true, "license": "ISC", @@ -15305,6 +15385,8 @@ }, "node_modules/npm/node_modules/minipass-collect/node_modules/minipass": { "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dev": true, "inBundle": true, "license": "ISC", @@ -15346,6 +15428,8 @@ }, "node_modules/npm/node_modules/minipass-flush/node_modules/minipass": { "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dev": true, "inBundle": true, "license": "ISC", @@ -15368,6 +15452,8 @@ }, "node_modules/npm/node_modules/minipass-json-stream/node_modules/minipass": { "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dev": true, "inBundle": true, "license": "ISC", @@ -15392,6 +15478,8 @@ }, "node_modules/npm/node_modules/minipass-pipeline/node_modules/minipass": { "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dev": true, "inBundle": true, "license": "ISC", @@ -15416,6 +15504,8 @@ }, "node_modules/npm/node_modules/minipass-sized/node_modules/minipass": { "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dev": true, "inBundle": true, "license": "ISC", @@ -15428,6 +15518,8 @@ }, "node_modules/npm/node_modules/minizlib": { "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", "dev": true, "inBundle": true, "license": "MIT", @@ -15441,6 +15533,8 @@ }, "node_modules/npm/node_modules/minizlib/node_modules/minipass": { "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dev": true, "inBundle": true, "license": "ISC", @@ -15453,6 +15547,8 @@ }, "node_modules/npm/node_modules/mkdirp": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", "dev": true, "inBundle": true, "license": "MIT", @@ -15533,6 +15629,8 @@ }, "node_modules/npm/node_modules/node-gyp/node_modules/brace-expansion": { "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "inBundle": true, "license": "MIT", @@ -15562,6 +15660,8 @@ }, "node_modules/npm/node_modules/node-gyp/node_modules/glob": { "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dev": true, "inBundle": true, "license": "ISC", @@ -15582,6 +15682,8 @@ }, "node_modules/npm/node_modules/node-gyp/node_modules/minimatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "inBundle": true, "license": "ISC", @@ -15624,6 +15726,8 @@ }, "node_modules/npm/node_modules/node-gyp/node_modules/readable-stream": { "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, "inBundle": true, "license": "MIT", @@ -15638,6 +15742,8 @@ }, "node_modules/npm/node_modules/node-gyp/node_modules/signal-exit": { "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true, "inBundle": true, "license": "ISC" @@ -15828,6 +15934,8 @@ }, "node_modules/npm/node_modules/once": { "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "dev": true, "inBundle": true, "license": "ISC", @@ -15837,6 +15945,8 @@ }, "node_modules/npm/node_modules/p-map": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", "dev": true, "inBundle": true, "license": "MIT", @@ -15898,6 +16008,8 @@ }, "node_modules/npm/node_modules/path-is-absolute": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", "dev": true, "inBundle": true, "license": "MIT", @@ -15907,6 +16019,8 @@ }, "node_modules/npm/node_modules/path-key": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true, "inBundle": true, "license": "MIT", @@ -15963,6 +16077,8 @@ }, "node_modules/npm/node_modules/process": { "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", "dev": true, "inBundle": true, "license": "MIT", @@ -16102,6 +16218,8 @@ }, "node_modules/npm/node_modules/rimraf": { "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dev": true, "inBundle": true, "license": "ISC", @@ -16117,6 +16235,8 @@ }, "node_modules/npm/node_modules/rimraf/node_modules/brace-expansion": { "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "inBundle": true, "license": "MIT", @@ -16127,6 +16247,8 @@ }, "node_modules/npm/node_modules/rimraf/node_modules/glob": { "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dev": true, "inBundle": true, "license": "ISC", @@ -16147,6 +16269,8 @@ }, "node_modules/npm/node_modules/rimraf/node_modules/minimatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "inBundle": true, "license": "ISC", @@ -16159,6 +16283,8 @@ }, "node_modules/npm/node_modules/safe-buffer": { "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "dev": true, "funding": [ { @@ -16186,6 +16312,8 @@ }, "node_modules/npm/node_modules/semver": { "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, "inBundle": true, "license": "ISC", @@ -16201,6 +16329,8 @@ }, "node_modules/npm/node_modules/semver/node_modules/lru-cache": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "inBundle": true, "license": "ISC", @@ -16213,12 +16343,16 @@ }, "node_modules/npm/node_modules/set-blocking": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/npm/node_modules/shebang-command": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, "inBundle": true, "license": "MIT", @@ -16231,6 +16365,8 @@ }, "node_modules/npm/node_modules/shebang-regex": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true, "inBundle": true, "license": "MIT", @@ -16240,6 +16376,8 @@ }, "node_modules/npm/node_modules/signal-exit": { "version": "4.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.0.2.tgz", + "integrity": "sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q==", "dev": true, "inBundle": true, "license": "ISC", @@ -16307,6 +16445,8 @@ }, "node_modules/npm/node_modules/spdx-correct": { "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", "dev": true, "inBundle": true, "license": "Apache-2.0", @@ -16317,12 +16457,16 @@ }, "node_modules/npm/node_modules/spdx-exceptions": { "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", "dev": true, "inBundle": true, "license": "CC-BY-3.0" }, "node_modules/npm/node_modules/spdx-expression-parse": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", "dev": true, "inBundle": true, "license": "MIT", @@ -16333,6 +16477,8 @@ }, "node_modules/npm/node_modules/spdx-license-ids": { "version": "3.0.13", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz", + "integrity": "sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==", "dev": true, "inBundle": true, "license": "CC0-1.0" @@ -16351,6 +16497,8 @@ }, "node_modules/npm/node_modules/string_decoder": { "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "dev": true, "inBundle": true, "license": "MIT", @@ -16360,6 +16508,8 @@ }, "node_modules/npm/node_modules/string-width": { "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "inBundle": true, "license": "MIT", @@ -16375,6 +16525,8 @@ "node_modules/npm/node_modules/string-width-cjs": { "name": "string-width", "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "inBundle": true, "license": "MIT", @@ -16389,6 +16541,8 @@ }, "node_modules/npm/node_modules/strip-ansi": { "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "inBundle": true, "license": "MIT", @@ -16402,6 +16556,8 @@ "node_modules/npm/node_modules/strip-ansi-cjs": { "name": "strip-ansi", "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "inBundle": true, "license": "MIT", @@ -16443,6 +16599,8 @@ }, "node_modules/npm/node_modules/tar/node_modules/fs-minipass": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", "dev": true, "inBundle": true, "license": "ISC", @@ -16455,6 +16613,8 @@ }, "node_modules/npm/node_modules/tar/node_modules/fs-minipass/node_modules/minipass": { "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dev": true, "inBundle": true, "license": "ISC", @@ -16628,6 +16788,8 @@ }, "node_modules/npm/node_modules/wrap-ansi/node_modules/ansi-regex": { "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", "dev": true, "inBundle": true, "license": "MIT", @@ -16640,6 +16802,8 @@ }, "node_modules/npm/node_modules/wrap-ansi/node_modules/ansi-styles": { "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", "dev": true, "inBundle": true, "license": "MIT", @@ -16652,12 +16816,16 @@ }, "node_modules/npm/node_modules/wrap-ansi/node_modules/emoji-regex": { "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/wrap-ansi/node_modules/string-width": { "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", "dev": true, "inBundle": true, "license": "MIT", @@ -16675,6 +16843,8 @@ }, "node_modules/npm/node_modules/wrap-ansi/node_modules/strip-ansi": { "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dev": true, "inBundle": true, "license": "MIT", diff --git a/package.json b/package.json index 2c85ecc8145..a06ba30f38d 100644 --- a/package.json +++ b/package.json @@ -109,7 +109,6 @@ "@storybook/react": "^7.0.26", "@storybook/react-vite": "^7.0.26", "@storybook/testing-library": "^0.2.0", - "@tailwindcss/aspect-ratio": "^0.4.2", "@tailwindcss/container-queries": "^0.1.1", "@tailwindcss/forms": "^0.5.3", "@tailwindcss/typography": "^0.5.9", @@ -162,7 +161,7 @@ "rescript": "^10.1.4", "snyk": "^1.1187.0", "storybook": "^7.0.26", - "tailwindcss": "^3.3.2", + "tailwindcss": "^3.3.3", "typescript": "^5.1.6", "vite": "^4.4.0", "vite-plugin-pwa": "^0.16.4" diff --git a/src/CAREUI/display/SubHeading.tsx b/src/CAREUI/display/SubHeading.tsx new file mode 100644 index 00000000000..75d8710fdef --- /dev/null +++ b/src/CAREUI/display/SubHeading.tsx @@ -0,0 +1,33 @@ +import { ReactNode } from "react"; +import CareIcon from "../icons/CareIcon"; +import RecordMeta from "./RecordMeta"; + +interface Props { + title: ReactNode; + lastModified?: string; + className?: string; + options?: ReactNode; +} + +export default function SubHeading(props: Props) { + return ( +
+
+ + {props.title} + + {props.lastModified && ( +
+ + +
+ )} +
+ {props.options && ( +
+ {props.options} +
+ )} +
+ ); +} diff --git a/src/Common/hooks/useRangePagination.ts b/src/Common/hooks/useRangePagination.ts new file mode 100644 index 00000000000..7652ae546c1 --- /dev/null +++ b/src/Common/hooks/useRangePagination.ts @@ -0,0 +1,112 @@ +import { useEffect, useMemo, useState } from "react"; + +interface DateRange { + start: Date; + end: Date; +} + +interface Props { + bounds: DateRange; + perPage: number; + slots?: number; + defaultEnd?: boolean; +} + +const useRangePagination = ({ bounds, perPage, ...props }: Props) => { + const [currentRange, setCurrentRange] = useState( + getInitialBounds(bounds, perPage, props.defaultEnd) + ); + + useEffect(() => { + setCurrentRange(getInitialBounds(bounds, perPage, props.defaultEnd)); + }, [bounds, perPage, props.defaultEnd]); + + const next = () => { + const { end } = currentRange; + const deltaBounds = bounds.end.valueOf() - bounds.start.valueOf(); + const deltaCurrent = end.valueOf() - bounds.start.valueOf(); + + if (deltaCurrent + perPage > deltaBounds) { + setCurrentRange({ + start: new Date(bounds.end.valueOf() - perPage), + end: bounds.end, + }); + } else { + setCurrentRange({ + start: new Date(end.valueOf()), + end: new Date(end.valueOf() + perPage), + }); + } + }; + + const previous = () => { + const { start } = currentRange; + const deltaCurrent = start.valueOf() - bounds.start.valueOf(); + + if (deltaCurrent - perPage < 0) { + setCurrentRange({ + start: bounds.start, + end: new Date(bounds.start.valueOf() + perPage), + }); + } else { + setCurrentRange({ + start: new Date(start.valueOf() - perPage), + end: new Date(start.valueOf()), + }); + } + }; + + const slots = useMemo(() => { + if (!props.slots) { + return []; + } + + const slots: DateRange[] = []; + const { start } = currentRange; + const delta = perPage / props.slots; + + for (let i = 0; i < props.slots; i++) { + slots.push({ + start: new Date(start.valueOf() + delta * i), + end: new Date(start.valueOf() + delta * (i + 1)), + }); + } + + return slots; + }, [currentRange, props.slots, perPage]); + + return { + currentRange, + hasNext: currentRange.end < bounds.end, + hasPrevious: currentRange.start > bounds.start, + previous, + next, + slots, + }; +}; + +export default useRangePagination; + +const getInitialBounds = ( + bounds: DateRange, + perPage: number, + defaultEnd?: boolean +) => { + const deltaBounds = bounds.end.valueOf() - bounds.start.valueOf(); + + if (deltaBounds < perPage) { + return bounds; + } + + if (defaultEnd) { + return { + start: new Date(bounds.end.valueOf() - perPage), + end: bounds.end, + }; + } + + return { + start: bounds.start, + end: new Date(bounds.start.valueOf() + perPage), + }; +}; diff --git a/src/Components/ABDM/ConfigureHealthFacility.tsx b/src/Components/ABDM/ConfigureHealthFacility.tsx index bae09123633..c0a74ccf106 100644 --- a/src/Components/ABDM/ConfigureHealthFacility.tsx +++ b/src/Components/ABDM/ConfigureHealthFacility.tsx @@ -6,7 +6,6 @@ import * as Notification from "../../Utils/Notifications.js"; import { navigate } from "raviger"; import { Cancel, Submit } from "../Common/components/ButtonV2"; import TextFormField from "../Form/FormFields/TextFormField"; -import Page from "../Common/components/Page"; const Loading = lazy(() => import("../Common/Loading")); const initForm = { @@ -121,33 +120,25 @@ export const ConfigureHealthFacility = (props: any) => { } return ( - -
-
handleSubmit(e)}> -
-
- handleChange(e)} - error={state.errors?.hf_id} - /> -
+
+ handleSubmit(e)}> +
+
+ handleChange(e)} + error={state.errors?.hf_id} + />
-
- navigate(`/facility/${facilityId}`)} /> - -
- -
- +
+
+ navigate(`/facility/${facilityId}`)} /> + +
+ +
); }; diff --git a/src/Components/Assets/AssetImportModal.tsx b/src/Components/Assets/AssetImportModal.tsx index a3e1b06e758..b5b0110096a 100644 --- a/src/Components/Assets/AssetImportModal.tsx +++ b/src/Components/Assets/AssetImportModal.tsx @@ -27,7 +27,8 @@ interface Props { const AssetImportModal = ({ open, onClose, facility }: Props) => { const [isImporting, setIsUploading] = useState(false); const [selectedFile, setSelectedFile] = useState(); - const [preview, setPreview] = useState(); + const [preview, setPreview] = + useState<(AssetData & { notes?: string; last_serviced_on?: string })[]>(); const [location, setLocation] = useState(""); const [locations, setLocations] = useState([]); const dispatchAction: any = useDispatch(); @@ -64,6 +65,7 @@ const AssetImportModal = ({ open, onClose, facility }: Props) => { msg: `Please check the row ${error.row} of column ${error.column}`, }); }); + setSelectedFile(undefined); } else { setPreview(parsedData.rows as AssetData[]); } @@ -89,6 +91,7 @@ const AssetImportModal = ({ open, onClose, facility }: Props) => { Notification.Error({ msg: "Invalid file", }); + setSelectedFile(undefined); } }; readFile(); @@ -127,8 +130,8 @@ const AssetImportModal = ({ open, onClose, facility }: Props) => { manufacturer: asset.manufacturer, meta: { ...asset.meta }, warranty_amc_end_of_validity: asset.warranty_amc_end_of_validity, - last_serviced_on: asset.last_service.serviced_on, - note: asset.last_service.note, + last_serviced_on: asset.last_serviced_on, + note: asset.notes, cancelToken: { promise: {} }, }); @@ -166,8 +169,14 @@ const AssetImportModal = ({ open, onClose, facility }: Props) => { e.preventDefault(); dragProps.setDragOver(false); const dropedFile = e?.dataTransfer?.files[0]; - if (dropedFile.type.split("/")[1] !== "json") - return dragProps.setFileDropError("Please drop a JSON file to upload!"); + if ( + !["xlsx", "csv", "json"].includes( + dropedFile?.name?.split(".")?.pop() || "" + ) + ) + return dragProps.setFileDropError( + "Please drop a JSON / Excel file to upload!" + ); setSelectedFile(dropedFile); }; @@ -233,7 +242,7 @@ const AssetImportModal = ({ open, onClose, facility }: Props) => { />
-
+
#
Name
@@ -327,7 +336,10 @@ const AssetImportModal = ({ open, onClose, facility }: Props) => { }} disabled={isImporting} /> - + {isImporting ? ( ) : ( diff --git a/src/Components/Assets/AssetServiceEditModal.tsx b/src/Components/Assets/AssetServiceEditModal.tsx index 8bb8bfe4d67..75c9dd9fc60 100644 --- a/src/Components/Assets/AssetServiceEditModal.tsx +++ b/src/Components/Assets/AssetServiceEditModal.tsx @@ -2,7 +2,7 @@ import { useEffect, useState } from "react"; import { useDispatch } from "react-redux"; import { updateAssetService } from "../../Redux/actions"; import * as Notification from "../../Utils/Notifications.js"; -import ButtonV2 from "../Common/components/ButtonV2"; +import ButtonV2, { Cancel, Submit } from "../Common/components/ButtonV2"; import DialogModal from "../Common/Dialog"; import { AssetData, AssetService, AssetServiceEdit } from "./AssetTypes"; import dayjs from "dayjs"; @@ -199,18 +199,13 @@ export const AssetServiceEditModal = (props: {
-
- + - {isLoading ? "Updating" : "Update"} - - - Cancel - + /> +
diff --git a/src/Components/Assets/AssetTypes.tsx b/src/Components/Assets/AssetTypes.tsx index b6108aea510..52c7e45003c 100644 --- a/src/Components/Assets/AssetTypes.tsx +++ b/src/Components/Assets/AssetTypes.tsx @@ -86,7 +86,6 @@ export interface AssetData { manufacturer: string; warranty_amc_end_of_validity: string; last_service: AssetService; - note: string; meta?: { [key: string]: any; }; diff --git a/src/Components/Common/SkillSelect.tsx b/src/Components/Common/SkillSelect.tsx index 501a349f128..5ec97974879 100644 --- a/src/Components/Common/SkillSelect.tsx +++ b/src/Components/Common/SkillSelect.tsx @@ -1,6 +1,6 @@ import { useCallback } from "react"; import { useDispatch } from "react-redux"; -import { getAllSkills } from "../../Redux/actions"; +import { getAllSkills, getUserListSkills } from "../../Redux/actions"; import AutoCompleteAsync from "../Form/AutoCompleteAsync"; import { SkillObjectModel } from "../Users/models"; @@ -15,6 +15,7 @@ interface SkillSelectProps { disabled?: boolean; selected: SkillObjectModel | SkillObjectModel[] | null; setSelected: (selected: SkillObjectModel) => void; + username?: string; } export const SkillSelect = (props: SkillSelectProps) => { @@ -29,6 +30,7 @@ export const SkillSelect = (props: SkillSelectProps) => { disabled = false, className = "", errors = "", + username, } = props; const dispatchAction: any = useDispatch(); @@ -44,7 +46,18 @@ export const SkillSelect = (props: SkillSelectProps) => { const res = await dispatchAction(getAllSkills(params)); - return res?.data?.results; + const linkedSkills = await dispatchAction( + getUserListSkills({ username: username }) + ); + + const skillsList = linkedSkills?.data?.results; + const skillsID: string[] = []; + skillsList.map((skill: any) => skillsID.push(skill.skill_object.id)); + const skills = res?.data?.results.filter( + (skill: any) => !skillsID.includes(skill.id) + ); + + return skills; }, [dispatchAction, searchAll, showAll] ); diff --git a/src/Components/Facility/ConsultationDetails.tsx b/src/Components/Facility/ConsultationDetails.tsx index ecd811eadbb..257d3712544 100644 --- a/src/Components/Facility/ConsultationDetails.tsx +++ b/src/Components/Facility/ConsultationDetails.tsx @@ -35,7 +35,6 @@ import { FileUpload } from "../Patient/FileUpload"; import HL7PatientVitalsMonitor from "../VitalsMonitor/HL7PatientVitalsMonitor"; import InvestigationTab from "./Investigations/investigationsTab"; import { make as Link } from "../Common/components/Link.bs"; -import MedicineAdministrationsTable from "../Medicine/MedicineAdministrationsTable"; import { NeurologicalTable } from "./Consultations/NeurologicalTables"; import { NonReadOnlyUsers } from "../../Utils/AuthorizeFor"; import { NursingPlot } from "./Consultations/NursingPlot"; @@ -57,13 +56,13 @@ import { useTranslation } from "react-i18next"; import { triggerGoal } from "../Common/Plausible"; import useVitalsAspectRatioConfig from "../VitalsMonitor/useVitalsAspectRatioConfig"; import useAuthUser from "../../Common/hooks/useAuthUser"; +import PrescriptionAdministrationsTable from "../Medicine/PrescriptionAdministrationsTable"; const Loading = lazy(() => import("../Common/Loading")); const PageTitle = lazy(() => import("../Common/PageTitle")); const symptomChoices = [...SYMPTOM_CHOICES]; export const ConsultationDetails = (props: any) => { - const [medicinesKey, setMedicinesKey] = useState(0); const { t } = useTranslation(); const { facilityId, patientId, consultationId } = props; const tab = props.tab.toUpperCase(); @@ -856,7 +855,7 @@ export const ConsultationDetails = (props: any) => { )} - {consultationData.prescribed_medication && ( + {consultationData.treatment_plan && (

@@ -864,7 +863,7 @@ export const ConsultationDetails = (props: any) => {

@@ -1150,30 +1149,17 @@ export const ConsultationDetails = (props: any) => {
)} {tab === "MEDICINES" && ( -
-
- setMedicinesKey((k) => k + 1)} - readonly={!!consultationData.discharge_date} - /> -
-
- setMedicinesKey((k) => k + 1)} - readonly={!!consultationData.discharge_date} - /> -
-
- -
+
+ +
)} {tab === "FILES" && ( diff --git a/src/Components/Facility/ConsultationForm.tsx b/src/Components/Facility/ConsultationForm.tsx index a1830329b7a..ed7fd7b57b6 100644 --- a/src/Components/Facility/ConsultationForm.tsx +++ b/src/Components/Facility/ConsultationForm.tsx @@ -85,7 +85,7 @@ type FormDetails = { kasp_enabled_date: null; examination_details: string; history_of_present_illness: string; - prescribed_medication: string; + treatment_plan: string; consultation_notes: string; patient_no: string; procedure: ProcedureType[]; @@ -129,7 +129,7 @@ const initForm: FormDetails = { kasp_enabled_date: null, examination_details: "", history_of_present_illness: "", - prescribed_medication: "", + treatment_plan: "", consultation_notes: "", patient_no: "", procedure: [], @@ -607,7 +607,7 @@ export const ConsultationForm = (props: any) => { kasp_enabled_date: JSON.parse(state.form.is_kasp) ? new Date() : null, examination_details: state.form.examination_details, history_of_present_illness: state.form.history_of_present_illness, - prescribed_medication: state.form.prescribed_medication, + treatment_plan: state.form.treatment_plan, discharge_date: state.form.discharge_date, patient_no: state.form.patient_no, icd11_diagnoses: state.form.icd11_diagnoses_object.map( @@ -1182,10 +1182,10 @@ export const ConsultationForm = (props: any) => {
diff --git a/src/Components/Facility/Consultations/LiveFeed.tsx b/src/Components/Facility/Consultations/LiveFeed.tsx index 8678de8966a..d2954009ba6 100644 --- a/src/Components/Facility/Consultations/LiveFeed.tsx +++ b/src/Components/Facility/Consultations/LiveFeed.tsx @@ -555,7 +555,7 @@ const LiveFeed = (props: any) => {
{/* ADD VIDEO PLAYER HERE */} -
+
+ {config.enable_abdm ? ( + + ) : ( + <> + )} ); }; diff --git a/src/Components/Facility/models.tsx b/src/Components/Facility/models.tsx index 05cdd8cde7d..5c24c80687a 100644 --- a/src/Components/Facility/models.tsx +++ b/src/Components/Facility/models.tsx @@ -100,7 +100,7 @@ export interface ConsultationModel { modified_date?: string; other_symptoms?: string; patient?: string; - prescribed_medication?: string; + treatment_plan?: string; referred_to?: number | null; referred_to_object?: FacilityModel; referred_to_external?: string; diff --git a/src/Components/Form/AutoCompleteAsync.tsx b/src/Components/Form/AutoCompleteAsync.tsx index 97468d96390..d06067af957 100644 --- a/src/Components/Form/AutoCompleteAsync.tsx +++ b/src/Components/Form/AutoCompleteAsync.tsx @@ -3,7 +3,10 @@ import { Combobox } from "@headlessui/react"; import { debounce } from "lodash"; import { DropdownTransition } from "../Common/components/HelperComponents"; import CareIcon from "../../CAREUI/icons/CareIcon"; -import { dropdownOptionClassNames } from "./MultiSelectMenuV2"; +import { + MultiSelectOptionChip, + dropdownOptionClassNames, +} from "./MultiSelectMenuV2"; interface Props { name?: string; @@ -143,19 +146,14 @@ const AutoCompleteAsync = (props: Props) => { {multiple && selected?.length > 0 && (
{selected?.map((option: any) => ( - - {optionLabel(option)} - { - onChange( - selected.filter((item: any) => item.id !== option.id) - ); - }} - > - - - + + onChange( + selected.filter((item: any) => item.id !== option.id) + ) + } + /> ))}
)} diff --git a/src/Components/Medicine/AdministerMedicine.tsx b/src/Components/Medicine/AdministerMedicine.tsx index ec749e7a535..0159bc4b7a8 100644 --- a/src/Components/Medicine/AdministerMedicine.tsx +++ b/src/Components/Medicine/AdministerMedicine.tsx @@ -53,7 +53,7 @@ export default function AdministerMedicine({ prescription, ...props }: Props) { setIsLoading(false); props.onClose(true); }} - className="w-full max-w-4xl" + className="w-full md:max-w-4xl" >
(); + const { t } = useTranslation(); + + const [state, setState] = useState(); + const pagination = useRangePagination({ + bounds: state?.administrationsTimeBounds ?? { + start: new Date(), + end: new Date(), + }, + perPage: 24 * 60 * 60 * 1000, + slots: 24, + defaultEnd: true, + }); + const [showBulkAdminister, setShowBulkAdminister] = useState(false); + + const { list, prescription } = useMemo( + () => PrescriptionActions(consultation_id), + [consultation_id] + ); + + const refetch = useCallback(async () => { + const res = await dispatch( + list({ is_prn: prn, prescription_type: "REGULAR" }) + ); + + setState({ + prescriptions: (res.data.results as Prescription[]).sort( + (a, b) => (a.discontinued ? 1 : 0) - (b.discontinued ? 1 : 0) + ), + administrationsTimeBounds: getAdministrationBounds(res.data.results), + }); + }, [consultation_id, dispatch]); + + useEffect(() => { + refetch(); + }, [refetch]); + + return ( +
+ {state?.prescriptions && ( + + { + setShowBulkAdminister(false); + refetch(); + }} + /> + + )} + + + + + + {t("edit_prescriptions")} + + {t("edit")} + + setShowBulkAdminister(true)} + className="w-full" + > + + + {t("administer_medicines")} + + {t("administer")} + + + ) + } + /> + +
+ + + + + + + + + {state === undefined + ? Array.from({ length: 24 }, (_, i) => i).map((i) => ( + + )) + : pagination.slots?.map(({ start, end }, index) => ( + + ))} + + + + + + + + {state?.prescriptions?.map((item) => ( + + ))} + {state?.prescriptions.length === 0 && ( +
+ +

+ {prn + ? "No PRN Prescriptions Prescribed" + : "No Prescriptions Prescribed"} +

+
+ )} +
+
{t("medicine")} +

Dosage &

+

+ {!state?.prescriptions[0]?.is_prn ? "Frequency" : "Indicator"} +

+
+ + + + +

+

+

{formatDateTime(start, "DD/MM")}

+

{formatDateTime(start, "HH:mm")}

+ + + Administration(s) between +
+ {formatTime(start)} and{" "} + {formatTime(end)} +
+ on {formatDate(start)} +
+
+ + + +
+
+
+ ); +} + +interface PrescriptionRowProps { + prescription: Prescription; + intervals: DateRange[]; + actions: ReturnType["prescription"]>; + refetch: () => void; +} + +const PrescriptionRow = ({ prescription, ...props }: PrescriptionRowProps) => { + const dispatch = useDispatch(); + const { t } = useTranslation(); + // const [showActions, setShowActions] = useState(false); + const [showDetails, setShowDetails] = useState(false); + const [showAdminister, setShowAdminister] = useState(false); + const [showDiscontinue, setShowDiscontinue] = useState(false); + const [administrations, setAdministrations] = + useState(); + + useEffect(() => { + setAdministrations(undefined); + + const getAdministrations = async () => { + const res = await dispatch( + props.actions.listAdministrations({ + administered_date_after: formatDateTime( + props.intervals[0].start, + "YYYY-MM-DD" + ), + administered_date_before: formatDateTime( + props.intervals[props.intervals.length - 1].end, + "YYYY-MM-DD" + ), + }) + ); + + setAdministrations(res.data.results); + }; + + getAdministrations(); + }, [prescription.id, dispatch, props.intervals]); + + return ( + + {showDiscontinue && ( + { + setShowDiscontinue(false); + if (success) { + props.refetch(); + } + }} + /> + )} + {showAdminister && ( + { + setShowAdminister(false); + if (success) { + props.refetch(); + } + }} + /> + )} + {showDetails && ( + setShowDetails(false)} + className="w-full md:max-w-4xl" + show + > +
+ +
+ setShowDetails(false)} + label={t("close")} + /> + setShowDiscontinue(true)} + > + + {t("discontinue")} + + setShowAdminister(true)} + > + + {t("administer")} + +
+
+
+ )} + setShowDetails(true)} + > +
+ + {prescription.medicine_object?.name ?? prescription.medicine_old} + + + {prescription.discontinued && ( + + {t("discontinued")} + + )} + + {prescription.route && ( + + {t(prescription.route)} + + )} +
+ + + +

{prescription.dosage}

+

+ {!prescription.is_prn + ? t("PRESCRIPTION_FREQUENCY_" + prescription.frequency) + : prescription.indicator} +

+ + + + {/* Administration Cells */} + {props.intervals.map(({ start, end }, index) => ( + + {administrations === undefined ? ( + + ) : ( + + )} + + ))} + + + {/* Action Buttons */} + + setShowAdminister(true)} + > + {t("administer")} + + + + ); +}; + +interface AdministrationCellProps { + administrations: MedicineAdministrationRecord[]; + interval: DateRange; + prescription: Prescription; +} + +const AdministrationCell = ({ + administrations, + interval: { start, end }, + prescription, +}: AdministrationCellProps) => { + // Check if cell belongs to an administered prescription + const administered = administrations.filter((administration) => + dayjs(administration.administered_date).isBetween(start, end) + ); + + if (administered.length) { + return ( +
+
+ + {administered.length > 1 && ( + + {administered.length} + + )} +
+ +

+ Administered on{" "} + {formatDateTime(administered[0].administered_date)} +

+

+ {administered.length > 1 + ? `Administered ${administered.length} times` + : `Administered ${formatTime(administered[0].administered_date)}`} +

+
+
+ ); + } + + // Check if cell belongs to a discontinued prescription + if ( + prescription.discontinued && + dayjs(end).isAfter(prescription.discontinued_date) + ) { + if (!dayjs(prescription.discontinued_date).isBetween(start, end)) return; + + return ( +
+ + +

+ Discontinued on{" "} + {formatDateTime(prescription.discontinued_date)} +

+

+ Reason:{" "} + {prescription.discontinued_reason ? ( + {prescription.discontinued_reason} + ) : ( + Not specified + )} +

+
+
+ ); + } + + // Check if cell belongs to after prescription.created_date + if (dayjs(start).isAfter(prescription.created_date)) { + return ; + } + + // Check if prescription.created_date is between start and end + // if (dayjs(prescription.created_date).isBetween(start, end)) { + // return ( + //
+ // + // + //

+ // Prescribed on{" "} + // {formatDateTime(prescription.created_date)} + //

+ //
+ //
+ // ); + // } +}; + +function getAdministrationBounds(prescriptions: Prescription[]) { + // get start by finding earliest of all presciption's created_date + const start = new Date( + prescriptions.reduce( + (earliest, curr) => + earliest < curr.created_date ? earliest : curr.created_date, + prescriptions[0]?.created_date ?? new Date() + ) + ); + + // get end by finding latest of all presciption's last_administered_on + const end = new Date( + prescriptions + .filter((prescription) => prescription.last_administered_on) + .reduce( + (latest, curr) => + curr.last_administered_on && curr.last_administered_on > latest + ? curr.last_administered_on + : latest, + prescriptions[0].created_date ?? new Date() + ) + ); + + // floor start to previous hour + start.setMinutes(0, 0, 0); + + // ceil end to next hour + end.setMinutes(0, 0, 0); + end.setHours(end.getHours() + 1); + + return { start, end }; +} diff --git a/src/Components/Medicine/models.ts b/src/Components/Medicine/models.ts index 21c52b4a6ec..cb48e9cc174 100644 --- a/src/Components/Medicine/models.ts +++ b/src/Components/Medicine/models.ts @@ -12,12 +12,12 @@ interface BasePrescription { readonly prescription_type?: "DISCHARGE" | "REGULAR"; readonly discontinued?: boolean; discontinued_reason?: string; - readonly prescribed_by?: PerformedByModel; + readonly prescribed_by: PerformedByModel; readonly discontinued_date: string; readonly last_administered_on?: string; - readonly is_migrated?: boolean; - readonly created_date?: string; - readonly modified_date?: string; + readonly is_migrated: boolean; + readonly created_date: string; + readonly modified_date: string; } export interface NormalPrescription extends BasePrescription { diff --git a/src/Components/Patient/PatientRegister.tsx b/src/Components/Patient/PatientRegister.tsx index 268934b10d0..d52ce840090 100644 --- a/src/Components/Patient/PatientRegister.tsx +++ b/src/Components/Patient/PatientRegister.tsx @@ -132,7 +132,7 @@ const initForm: any = { test_id: "", srf_id: "", test_type: testType[0], - prescribed_medication: false, + treatment_plan: false, ongoing_medication: "", designation_of_health_care_worker: "", instituion_of_health_care_worker: "", diff --git a/src/Components/Shifting/ShiftDetails.tsx b/src/Components/Shifting/ShiftDetails.tsx index 46f8c2f6af7..8215bd21e31 100644 --- a/src/Components/Shifting/ShiftDetails.tsx +++ b/src/Components/Shifting/ShiftDetails.tsx @@ -497,7 +497,7 @@ export default function ShiftDetails(props: { id: string }) { {t("treatment_summary")}:{" "} - {consultation.prescribed_medication || "-"} + {consultation.treatment_plan || "-"}
diff --git a/src/Components/Users/SkillsSlideOver.tsx b/src/Components/Users/SkillsSlideOver.tsx index 49de110fd86..cf43b738181 100644 --- a/src/Components/Users/SkillsSlideOver.tsx +++ b/src/Components/Users/SkillsSlideOver.tsx @@ -120,19 +120,19 @@ export default ({ show, setShow, username }: IProps) => { selected={selectedSkill} setSelected={setSelectedSkill} errors="" + username={username} /> - addSkill(username, selectedSkill)} - className="w-6rem" - > - {/* Replace "Add" in button with CircularProgress */} - {isLoading ? ( - - ) : ( - t("add") - )} - + {isLoading ? ( + + ) : ( + addSkill(username, selectedSkill)} + className="w-6rem" + > + {t("add")} + + )} {!authorizeForAddSkill && ( {t("contact_your_admin_to_add_skills")} diff --git a/src/Redux/actions.tsx b/src/Redux/actions.tsx index b15e76f7177..e00fd33bec6 100644 --- a/src/Redux/actions.tsx +++ b/src/Redux/actions.tsx @@ -1027,6 +1027,18 @@ export const PrescriptionActions = (consultation_external_id: string) => { `administer-medicine-${external_id}` ), + listAdministrations: (query?: { + administered_date_after?: string; + administered_date_before?: string; + }) => + fireRequest( + "listAdministrations", + [], + { prescription: external_id, ...query }, + pathParams, + `list-administrations-${external_id}` + ), + /** Discontinue a prescription */ discontinue: (discontinued_reason: string | undefined) => fireRequest( diff --git a/src/Router/AppRouter.tsx b/src/Router/AppRouter.tsx index 6c2ea6a4e8d..24b24cfdf09 100644 --- a/src/Router/AppRouter.tsx +++ b/src/Router/AppRouter.tsx @@ -73,10 +73,9 @@ import { handleSignOut } from "../Utils/utils"; import SessionExpired from "../Components/ErrorPages/SessionExpired"; import ManagePrescriptions from "../Components/Medicine/ManagePrescriptions"; import CentralNursingStation from "../Components/Facility/CentralNursingStation"; -import { ConfigureHealthFacility } from "../Components/ABDM/ConfigureHealthFacility"; export default function AppRouter() { - const { main_logo, enable_hcx, enable_abdm } = useConfig(); + const { main_logo, enable_hcx } = useConfig(); const routes = { "/": () => , @@ -99,15 +98,6 @@ export default function AppRouter() { "/facility/:facilityId/update": ({ facilityId }: any) => ( ), - ...(enable_abdm - ? { - "/facility/:facilityId/health_facility": ({ - facilityId, - }: { - facilityId: string; - }) => , - } - : {}), "/facility/:facilityId/middleware/update": ({ facilityId }: any) => ( ), diff --git a/src/Utils/dayjs.ts b/src/Utils/dayjs.ts index f883229b45e..b70c2fc044b 100644 --- a/src/Utils/dayjs.ts +++ b/src/Utils/dayjs.ts @@ -2,9 +2,11 @@ import dayjs from "dayjs"; import relativeTime from "dayjs/plugin/relativeTime"; import duration from "dayjs/plugin/duration"; import customParseFormat from "dayjs/plugin/customParseFormat"; +import isBetween from "dayjs/plugin/isBetween"; dayjs.extend(relativeTime); dayjs.extend(duration); dayjs.extend(customParseFormat); +dayjs.extend(isBetween); export default dayjs; diff --git a/src/style/index.css b/src/style/index.css index 6b06aacef6d..103b2ef04ce 100644 --- a/src/style/index.css +++ b/src/style/index.css @@ -446,19 +446,6 @@ button:disabled, } -/* .player-wrapper { - width: auto; - height: auto; -} -.react-player { - aspect-ratio: 16/9; - position: relative; -} - -.react-player > div { - position: absolute; -} */ - @media print { body * { visibility: hidden; @@ -523,116 +510,6 @@ button:disabled, 100% {opacity: 0;} } -.main-content { - margin-top: 64px; - border-bottom: solid 50px #f1f1f1; - background: #f1f1f1; - min-height: 100vh; -} - -@media only screen and (min-width: 601px) { - .main-content { - margin-left: 240px; - } -} - -.app-footer { - width: 100%; - background: #ffffff no-repeat; - background-size: 100% 100%; - min-height: 80px; - z-index: 1202; - display: flex; - flex-direction: row; - margin-top: auto; -} - -@media (max-width: 768px) { - .app-footer { - flex-direction: column; - } -} - -.appBar { - background-color: white !important; -} - -.vertical-align { - display: flex; - align-items: center; - justify-content: center; -} - -.add-item-card { - background: #ffffff; - border: dashed 1px #333; - cursor: pointer; - min-height: 120px; - line-height: 120px; -} - -.stats-cards .stats-card-item { - padding: 10px; - margin: 16px; -} - -@media only screen and (max-width: 601px) { - .createBtn { - position: relative !important; - right: 20px; - top: 0px; - } -} - -.cursor-pointer { - cursor: pointer; -} - -.description-text { - overflow: hidden; - text-overflow: ellipsis; - padding: 5px 0px; -} - -.wrap-text { - white-space: pre-wrap; -} - -.no-wrap-text { - white-space: nowrap; -} - -.non-clickable { - cursor: not-allowed; -} - -.pagination { - margin: auto; -} - -.error-text { - font-size: 0.75rem; - line-height: 1rem; - font-weight: 500; - letter-spacing: 0.025em; -} - -.hometext { - margin: 10px 35px !important; -} - -@media (max-width: 768px) { - .hometext { - margin: 10px 15px !important; - } -} - -@media (min-width: 768px) { - .hometitle { - margin-top: 15px !important; - } -} - .badge { display: inline-block; padding: 0.25em 0.4em; @@ -690,28 +567,6 @@ button:disabled, border-color: #28a745; } -.react-tel-input .form-control+div:before { - content: ""; -} - -.react-tel-input { - margin-top: 8px; - margin-bottom: 4px; -} - -.react-tel-input .form-control { - padding-top: 6px; - padding-bottom: 6px; - width: 100%; - border-radius: 4px; - height: 38px; -} - -.react-tel-input .form-control:focus { - border-color: #28a745; - box-shadow: 0 0 0 1px #28a745; -} - .form-input { padding-top: 6px; padding-bottom: 6px; @@ -725,15 +580,6 @@ button:disabled, box-shadow: 0 0 0 1px #28a745 !important; } -@media (min-width:770px) { - .title-text { - position: absolute; - top: 0; - right: 0; - margin-top: -3rem; - } -} - .copied-to-cb { color: #28a745; font-size: 13px; diff --git a/tailwind.config.js b/tailwind.config.js index afb60c951a6..7c889ea5d16 100644 --- a/tailwind.config.js +++ b/tailwind.config.js @@ -83,14 +83,10 @@ module.exports = { }, }, }, - corePlugins: { - aspectRatio: false, - }, content: ["./src/**/*.{html,md,js,jsx,ts,tsx,res}", "./index.html"], plugins: [ require("@tailwindcss/forms"), require("@tailwindcss/typography"), - require("@tailwindcss/aspect-ratio"), require("@tailwindcss/container-queries"), ], };