From 7b46d92d4f992584c813cc2d7e99813f53a8b72e Mon Sep 17 00:00:00 2001 From: "homarr-renovate[bot]" <158783068+homarr-renovate[bot]@users.noreply.github.com> Date: Fri, 24 May 2024 23:44:38 +0200 Subject: [PATCH 01/30] fix(deps): update dependency glob to v10.4.1 (#544) Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com> --- pnpm-lock.yaml | 270 ++++++++++++++++--------------------------------- 1 file changed, 86 insertions(+), 184 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4a1ca322b..a3312147b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -167,7 +167,7 @@ importers: version: 7.2.2 glob: specifier: ^10.3.15 - version: 10.3.15 + version: 10.4.1 jotai: specifier: ^2.8.1 version: 2.8.1(@types/react@18.3.2)(react@18.3.1) @@ -1887,12 +1887,6 @@ packages: '@remirror/core-constants@2.0.2': resolution: {integrity: sha512-dyHY+sMF0ihPus3O27ODd4+agdHMEmuRdyiZJ2CCWjPV5UFmn17ZbElvk6WOGVE4rdCJKZQCrPV2BcikOMLUGQ==} - '@remirror/core-helpers@3.0.0': - resolution: {integrity: sha512-tusEgQJIqg4qKj6HSBUFcyRnWnziw3neh4T9wOmsPGHFC3w9kl5KSrDb9UAgE8uX6y32FnS7vJ955mWOl3n50A==} - - '@remirror/types@1.0.1': - resolution: {integrity: sha512-VlZQxwGnt1jtQ18D6JqdIF+uFZo525WEqrfp9BOc3COPpK4+AWCgdnAWL+ho6imWcoINlGjR/+3b6y5C1vBVEA==} - '@rollup/rollup-android-arm-eabi@4.13.0': resolution: {integrity: sha512-5ZYPOuaAqEH/W3gYsRkxQATBW3Ii1MfaT4EQstTnLKViLi2gLSQmlmtTpGucNP3sXEpOiI5tdGhjdE111ekyEg==} cpu: [arm] @@ -2373,12 +2367,6 @@ packages: '@types/node@20.12.12': resolution: {integrity: sha512-eWLDGF/FOSPtAvEqeRAQ4C8LSA7M1I7i0ky1I8U7kD1J5ITyW3AsRhQrKVoWf5pFKZ2kILsEGJhsI9r93PYnOw==} - '@types/object.omit@3.0.3': - resolution: {integrity: sha512-xrq4bQTBGYY2cw+gV4PzoG2Lv3L0pjZ1uXStRRDQoATOYW1lCsFQHhQ+OkPhIcQoqLjAq7gYif7D14Qaa6Zbew==} - - '@types/object.pick@1.3.4': - resolution: {integrity: sha512-5PjwB0uP2XDp3nt5u5NJAG2DORHIRClPzWT/TTZhJ2Ekwe8M5bA9tvPdi9NO/n2uvu2/ictat8kgqvLfcIE1SA==} - '@types/prismjs@1.26.4': resolution: {integrity: sha512-rlAnzkW2sZOjbqZ743IHUhFcvzaGbqijwOu8QZnZCjfQzBqFE3s4lOTJEsxikImav9uzz/42I+O7YUs1mWgMlg==} @@ -2403,9 +2391,6 @@ packages: '@types/serve-static@1.15.5': resolution: {integrity: sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ==} - '@types/throttle-debounce@2.1.0': - resolution: {integrity: sha512-5eQEtSCoESnh2FsiLTxE121IiE60hnMqcb435fShf4bpLRjEu1Eoekht23y6zXS9Ts3l+Szu3TARnTsA0GkOkQ==} - '@types/through@0.0.33': resolution: {integrity: sha512-HsJ+z3QuETzP3cswwtzt2vEIiHBk/dCcHGhbmG5X3ecnwFD/lPrMpliGXxSCg03L9AhrdwA4Oz/qfspkDW+xGQ==} @@ -2780,10 +2765,6 @@ packages: caniuse-lite@1.0.30001587: resolution: {integrity: sha512-HMFNotUmLXn71BQxg8cijvqxnIAofforZOwGsxyXJ0qugTdspUF4sPSJ2vhgprHCB996tIDzEq1ubumPDV8ULA==} - case-anything@2.1.13: - resolution: {integrity: sha512-zlOQ80VrQ2Ue+ymH5OuM/DlDq64mEm+B9UTdHULv5osUMD6HalNTblf2b1u/m6QecjsnOkBpqVZ+XPwIVsy7Ng==} - engines: {node: '>=12.13'} - chai@4.4.1: resolution: {integrity: sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==} engines: {node: '>=4'} @@ -2965,9 +2946,6 @@ packages: damerau-levenshtein@1.0.8: resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} - dash-get@1.0.2: - resolution: {integrity: sha512-4FbVrHDwfOASx7uQVxeiCTo7ggSdYZbqs8lH+WU6ViypPlDbe9y6IP5VVUDQBv9DcnyaiPT5XT0UWHgJ64zLeQ==} - data-uri-to-buffer@6.0.2: resolution: {integrity: sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==} engines: {node: '>= 14'} @@ -3018,10 +2996,6 @@ packages: deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} - deepmerge@4.3.1: - resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} - engines: {node: '>=0.10.0'} - defaults@1.0.4: resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} @@ -3600,8 +3574,8 @@ packages: engines: {node: '>=16 || 14 >=14.17'} hasBin: true - glob@10.3.15: - resolution: {integrity: sha512-0c6RlJt1TICLyvJYIApxb8GsXoai0KUP7AxKKAtsYXdgJR1mGEUa7DgwShbdk1nly0PYoZj01xd4hzbq3fsjpw==} + glob@10.4.1: + resolution: {integrity: sha512-2jelhlq3E4ho74ZyVLN03oKdAZVUa6UDZzFLVH1H7dnoax+y9qyaq8zBkfDIggjniU19z0wU18y16jMB2eyVIw==} engines: {node: '>=16 || 14 >=14.18'} hasBin: true @@ -3760,6 +3734,7 @@ packages: inflight@1.0.6: resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} @@ -3826,10 +3801,6 @@ packages: resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} engines: {node: '>= 0.4'} - is-extendable@1.0.1: - resolution: {integrity: sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==} - engines: {node: '>=0.10.0'} - is-extglob@2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} @@ -3882,10 +3853,6 @@ packages: resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} engines: {node: '>=8'} - is-plain-object@2.0.4: - resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==} - engines: {node: '>=0.10.0'} - is-potential-custom-element-name@1.0.1: resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} @@ -3955,10 +3922,6 @@ packages: isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - isobject@3.0.1: - resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==} - engines: {node: '>=0.10.0'} - istanbul-lib-coverage@3.2.2: resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} engines: {node: '>=8'} @@ -3982,6 +3945,10 @@ packages: resolution: {integrity: sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==} engines: {node: '>=14'} + jackspeak@3.1.2: + resolution: {integrity: sha512-kWmLKn2tRtfYMF/BakihVVRzBKOxz4gJMiL2Rj91WnAB5TPZumSH99R/Yf1qE1u4uRimvCSJfm6hnxohXeEXjQ==} + engines: {node: '>=14'} + jose@5.2.2: resolution: {integrity: sha512-/WByRr4jDcsKlvMd1dRJnPfS1GVO3WuKyaurJ/vvXcOaUQO8rnNObCQMlv/5uCceVQIq5Q4WLF44ohsdiTohdg==} @@ -4144,8 +4111,8 @@ packages: lower-case@1.1.4: resolution: {integrity: sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==} - lru-cache@10.2.0: - resolution: {integrity: sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==} + lru-cache@10.2.2: + resolution: {integrity: sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==} engines: {node: 14 || >=16.14} lru-cache@5.1.1: @@ -4200,8 +4167,8 @@ packages: react: '>=18.0' react-dom: '>=18.0' - markdown-it@14.0.0: - resolution: {integrity: sha512-seFjF0FIcPt4P9U39Bq1JYblX0KZCjDLFFQPHpL5AzHpqPEKtosxmdq/LTVZnjfH7tjt9BxStm+wXcDBNuYmzw==} + markdown-it@14.1.0: + resolution: {integrity: sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==} hasBin: true mdurl@2.0.0: @@ -4266,8 +4233,8 @@ packages: resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==} engines: {node: '>=8'} - minipass@7.0.4: - resolution: {integrity: sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==} + minipass@7.1.2: + resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} engines: {node: '>=16 || 14 >=14.17'} minizlib@2.1.2: @@ -4463,14 +4430,6 @@ packages: object.hasown@1.1.3: resolution: {integrity: sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA==} - object.omit@3.0.0: - resolution: {integrity: sha512-EO+BCv6LJfu+gBIF3ggLicFebFLN5zqzz/WWJlMFfkMyGth+oBkhxzDl0wx2W4GkLzuQs/FsSkXZb2IMWQqmBQ==} - engines: {node: '>=0.10.0'} - - object.pick@1.3.0: - resolution: {integrity: sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==} - engines: {node: '>=0.10.0'} - object.values@1.1.7: resolution: {integrity: sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==} engines: {node: '>= 0.4'} @@ -4567,9 +4526,9 @@ packages: path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - path-scurry@1.11.0: - resolution: {integrity: sha512-LNHTaVkzaYaLGlO+0u3rQTz7QrHTFOuKyba9JMTQutkmtNew8dw8wOD7mTU/5fCPZzCWpfW0XnQKzY61P0aTaw==} - engines: {node: '>=16 || 14 >=14.17'} + path-scurry@1.11.1: + resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} + engines: {node: '>=16 || 14 >=14.18'} path-type@4.0.0: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} @@ -4691,8 +4650,8 @@ packages: prosemirror-gapcursor@1.3.2: resolution: {integrity: sha512-wtjswVBd2vaQRrnYZaBCbyDqr232Ed4p2QPtRIUK5FuqHYKGWkEwl08oQM4Tw7DOR0FsasARV5uJFvMZWxdNxQ==} - prosemirror-history@1.3.2: - resolution: {integrity: sha512-/zm0XoU/N/+u7i5zepjmZAEnpvjDtzoPWW6VmKptcAnPadN/SStsBjMImdCEbb3seiNTpveziPTIrXQbHLtU1g==} + prosemirror-history@1.4.0: + resolution: {integrity: sha512-UUiGzDVcqo1lovOPdi9YxxUps3oBFWAIYkXLu3Ot+JPv1qzVogRbcizxK3LhHmtaUxclohgiOVesRw5QSlMnbQ==} prosemirror-inputrules@1.4.0: resolution: {integrity: sha512-6ygpPRuTJ2lcOXs9JkefieMst63wVJBgHZGl5QOytN7oSZs3Co/BYbc3Yx9zm9H37Bxw8kVzCnDsihsVsL4yEg==} @@ -4700,14 +4659,14 @@ packages: prosemirror-keymap@1.2.2: resolution: {integrity: sha512-EAlXoksqC6Vbocqc0GtzCruZEzYgrn+iiGnNjsJsH4mrnIGex4qbLdWWNza3AW5W36ZRrlBID0eM6bdKH4OStQ==} - prosemirror-markdown@1.12.0: - resolution: {integrity: sha512-6F5HS8Z0HDYiS2VQDZzfZP6A0s/I0gbkJy8NCzzDMtcsz3qrfqyroMMeoSjAmOhDITyon11NbXSzztfKi+frSQ==} + prosemirror-markdown@1.13.0: + resolution: {integrity: sha512-UziddX3ZYSYibgx8042hfGKmukq5Aljp2qoBiJRejD/8MH70siQNz5RB1TrdTPheqLMy4aCe4GYNF10/3lQS5g==} prosemirror-menu@1.2.4: resolution: {integrity: sha512-S/bXlc0ODQup6aiBbWVsX/eM+xJgCTAfMq/nLqaO5ID/am4wS0tTCIkzwytmao7ypEtjj39i7YbJjAgO20mIqA==} - prosemirror-model@1.19.4: - resolution: {integrity: sha512-RPmVXxUfOhyFdayHawjuZCxiROsm9L4FCUA6pWI+l7n2yCBsWy9VpdE1hpDHUS8Vad661YLY9AzqfjLhAKQ4iQ==} + prosemirror-model@1.21.0: + resolution: {integrity: sha512-zLpS1mVCZLA7VTp82P+BfMiYVPcX1/z0Mf3gsjKZtzMWubwn2pN7CceMV0DycjlgE5JeXPR7UF4hJPbBV98oWA==} prosemirror-schema-basic@1.2.2: resolution: {integrity: sha512-/dT4JFEGyO7QnNTe9UaKUhjDXbTNkiWTq/N4VpKaF79bBjSExVV2NXmJpcM7z/gD7mbqNjxbmWW5nf1iNSSGnw==} @@ -4721,18 +4680,18 @@ packages: prosemirror-tables@1.3.7: resolution: {integrity: sha512-oEwX1wrziuxMtwFvdDWSFHVUWrFJWt929kVVfHvtTi8yvw+5ppxjXZkMG/fuTdFo+3DXyIPSKfid+Be1npKXDA==} - prosemirror-trailing-node@2.0.7: - resolution: {integrity: sha512-8zcZORYj/8WEwsGo6yVCRXFMOfBo0Ub3hCUvmoWIZYfMP26WqENU0mpEP27w7mt8buZWuGrydBewr0tOArPb1Q==} + prosemirror-trailing-node@2.0.8: + resolution: {integrity: sha512-ujRYhSuhQb1Jsarh1IHqb2KoSnRiD7wAMDGucP35DN7j5af6X7B18PfdPIrbwsPTqIAj0fyOvxbuPsWhNvylmA==} peerDependencies: prosemirror-model: ^1.19.0 prosemirror-state: ^1.4.2 prosemirror-view: ^1.31.2 - prosemirror-transform@1.8.0: - resolution: {integrity: sha512-BaSBsIMv52F1BVVMvOmp1yzD3u65uC3HTzCBQV1WDPqJRQ2LuHKcyfn0jwqodo8sR9vVzMzZyI+Dal5W9E6a9A==} + prosemirror-transform@1.9.0: + resolution: {integrity: sha512-5UXkr1LIRx3jmpXXNKDhv8OyAOeLTGuXNwdVfg8x27uASna/wQkr9p6fD3eupGOi4PLJfbezxTyi/7fSJypXHg==} - prosemirror-view@1.33.1: - resolution: {integrity: sha512-62qkYgSJIkwIMMCpuGuPzc52DiK1Iod6TWoIMxP4ja6BTD4yO8kCUL64PZ/WhH/dJ9fW0CDO39FhH1EMyhUFEg==} + prosemirror-view@1.33.6: + resolution: {integrity: sha512-zRLUNgLIQfd8IfGprsXxWTjdA8xEAFJe8cDNrOptj6Mop9sj+BMeVbJvceyAYCm5G2dOdT2prctH7K9dfnpIMw==} proxy-agent@6.4.0: resolution: {integrity: sha512-u0piLU+nCOHMgGjRbimiXmA9kM/L9EHh3zL81xCdp7m+Y2pHIsnmbdDoEDoAz5geaonNR6q6+yOPQs6n4T6sBQ==} @@ -5221,10 +5180,6 @@ packages: text-table@0.2.0: resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} - throttle-debounce@3.0.1: - resolution: {integrity: sha512-dTEWWNu6JmeVXY0ZYoPuH5cRIwc0MeGbJwah9KUNYSJwommQpCzTySTpEe8Gs1J23aeWEuAobe4Ag7EHVt/LOg==} - engines: {node: '>=10'} - through@2.3.8: resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} @@ -5390,10 +5345,6 @@ packages: resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} engines: {node: '>=10'} - type-fest@2.19.0: - resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} - engines: {node: '>=12.20'} - type-fest@4.12.0: resolution: {integrity: sha512-5Y2/pp2wtJk8o08G0CMkuFPCO354FGwk/vbidxrdhRGZfd0tFnb4Qb8anp9XxXriwBgVPjdWbKpGl4J9lJY2jQ==} engines: {node: '>=16'} @@ -6487,26 +6438,6 @@ snapshots: '@remirror/core-constants@2.0.2': {} - '@remirror/core-helpers@3.0.0': - dependencies: - '@remirror/core-constants': 2.0.2 - '@remirror/types': 1.0.1 - '@types/object.omit': 3.0.3 - '@types/object.pick': 1.3.4 - '@types/throttle-debounce': 2.1.0 - case-anything: 2.1.13 - dash-get: 1.0.2 - deepmerge: 4.3.1 - fast-deep-equal: 3.1.3 - make-error: 1.3.6 - object.omit: 3.0.0 - object.pick: 1.3.0 - throttle-debounce: 3.0.1 - - '@remirror/types@1.0.1': - dependencies: - type-fest: 2.19.0 - '@rollup/rollup-android-arm-eabi@4.13.0': optional: true @@ -6773,19 +6704,19 @@ snapshots: prosemirror-commands: 1.5.2 prosemirror-dropcursor: 1.8.1 prosemirror-gapcursor: 1.3.2 - prosemirror-history: 1.3.2 + prosemirror-history: 1.4.0 prosemirror-inputrules: 1.4.0 prosemirror-keymap: 1.2.2 - prosemirror-markdown: 1.12.0 + prosemirror-markdown: 1.13.0 prosemirror-menu: 1.2.4 - prosemirror-model: 1.19.4 + prosemirror-model: 1.21.0 prosemirror-schema-basic: 1.2.2 prosemirror-schema-list: 1.3.0 prosemirror-state: 1.4.3 prosemirror-tables: 1.3.7 - prosemirror-trailing-node: 2.0.7(prosemirror-model@1.19.4)(prosemirror-state@1.4.3)(prosemirror-view@1.33.1) - prosemirror-transform: 1.8.0 - prosemirror-view: 1.33.1 + prosemirror-trailing-node: 2.0.8(prosemirror-model@1.21.0)(prosemirror-state@1.4.3)(prosemirror-view@1.33.6) + prosemirror-transform: 1.9.0 + prosemirror-view: 1.33.6 '@tiptap/react@2.4.0(@tiptap/core@2.4.0(@tiptap/pm@2.2.4))(@tiptap/pm@2.2.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: @@ -6992,10 +6923,6 @@ snapshots: dependencies: undici-types: 5.26.5 - '@types/object.omit@3.0.3': {} - - '@types/object.pick@1.3.4': {} - '@types/prismjs@1.26.4': {} '@types/prop-types@15.7.11': {} @@ -7024,8 +6951,6 @@ snapshots: '@types/mime': 3.0.4 '@types/node': 20.12.12 - '@types/throttle-debounce@2.1.0': {} - '@types/through@0.0.33': dependencies: '@types/node': 20.12.12 @@ -7505,8 +7430,6 @@ snapshots: caniuse-lite@1.0.30001587: {} - case-anything@2.1.13: {} - chai@4.4.1: dependencies: assertion-error: 1.1.0 @@ -7712,8 +7635,6 @@ snapshots: damerau-levenshtein@1.0.8: {} - dash-get@1.0.2: {} - data-uri-to-buffer@6.0.2: {} data-urls@5.0.0: @@ -7749,8 +7670,6 @@ snapshots: deep-is@0.1.4: {} - deepmerge@4.3.1: {} - defaults@1.0.4: dependencies: clone: 1.0.4 @@ -8486,16 +8405,16 @@ snapshots: foreground-child: 3.1.1 jackspeak: 2.3.6 minimatch: 9.0.4 - minipass: 7.0.4 - path-scurry: 1.11.0 + minipass: 7.1.2 + path-scurry: 1.11.1 - glob@10.3.15: + glob@10.4.1: dependencies: foreground-child: 3.1.1 - jackspeak: 2.3.6 + jackspeak: 3.1.2 minimatch: 9.0.4 - minipass: 7.0.4 - path-scurry: 1.11.0 + minipass: 7.1.2 + path-scurry: 1.11.1 glob@7.2.3: dependencies: @@ -8773,10 +8692,6 @@ snapshots: dependencies: has-tostringtag: 1.0.2 - is-extendable@1.0.1: - dependencies: - is-plain-object: 2.0.4 - is-extglob@2.1.1: {} is-finalizationregistry@1.0.2: @@ -8815,10 +8730,6 @@ snapshots: is-path-inside@3.0.3: {} - is-plain-object@2.0.4: - dependencies: - isobject: 3.0.1 - is-potential-custom-element-name@1.0.1: {} is-promise@2.2.2: {} @@ -8877,8 +8788,6 @@ snapshots: isexe@2.0.0: {} - isobject@3.0.1: {} - istanbul-lib-coverage@3.2.2: {} istanbul-lib-report@3.0.1: @@ -8914,6 +8823,12 @@ snapshots: optionalDependencies: '@pkgjs/parseargs': 0.11.0 + jackspeak@3.1.2: + dependencies: + '@isaacs/cliui': 8.0.2 + optionalDependencies: + '@pkgjs/parseargs': 0.11.0 + jose@5.2.2: {} jotai@2.8.1(@types/react@18.3.2)(react@18.3.1): @@ -9080,7 +8995,7 @@ snapshots: lower-case@1.1.4: {} - lru-cache@10.2.0: {} + lru-cache@10.2.2: {} lru-cache@5.1.1: dependencies: @@ -9138,7 +9053,7 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - markdown-it@14.0.0: + markdown-it@14.1.0: dependencies: argparse: 2.0.1 entities: 4.5.0 @@ -9205,7 +9120,7 @@ snapshots: minipass@5.0.0: {} - minipass@7.0.4: {} + minipass@7.1.2: {} minizlib@2.1.2: dependencies: @@ -9409,14 +9324,6 @@ snapshots: define-properties: 1.2.1 es-abstract: 1.22.4 - object.omit@3.0.0: - dependencies: - is-extendable: 1.0.1 - - object.pick@1.3.0: - dependencies: - isobject: 3.0.1 - object.values@1.1.7: dependencies: call-bind: 1.0.7 @@ -9540,10 +9447,10 @@ snapshots: path-parse@1.0.7: {} - path-scurry@1.11.0: + path-scurry@1.11.1: dependencies: - lru-cache: 10.2.0 - minipass: 7.0.4 + lru-cache: 10.2.2 + minipass: 7.1.2 path-type@4.0.0: {} @@ -9656,7 +9563,7 @@ snapshots: prosemirror-changeset@2.2.1: dependencies: - prosemirror-transform: 1.8.0 + prosemirror-transform: 1.9.0 prosemirror-collab@1.3.1: dependencies: @@ -9664,98 +9571,97 @@ snapshots: prosemirror-commands@1.5.2: dependencies: - prosemirror-model: 1.19.4 + prosemirror-model: 1.21.0 prosemirror-state: 1.4.3 - prosemirror-transform: 1.8.0 + prosemirror-transform: 1.9.0 prosemirror-dropcursor@1.8.1: dependencies: prosemirror-state: 1.4.3 - prosemirror-transform: 1.8.0 - prosemirror-view: 1.33.1 + prosemirror-transform: 1.9.0 + prosemirror-view: 1.33.6 prosemirror-gapcursor@1.3.2: dependencies: prosemirror-keymap: 1.2.2 - prosemirror-model: 1.19.4 + prosemirror-model: 1.21.0 prosemirror-state: 1.4.3 - prosemirror-view: 1.33.1 + prosemirror-view: 1.33.6 - prosemirror-history@1.3.2: + prosemirror-history@1.4.0: dependencies: prosemirror-state: 1.4.3 - prosemirror-transform: 1.8.0 - prosemirror-view: 1.33.1 + prosemirror-transform: 1.9.0 + prosemirror-view: 1.33.6 rope-sequence: 1.3.4 prosemirror-inputrules@1.4.0: dependencies: prosemirror-state: 1.4.3 - prosemirror-transform: 1.8.0 + prosemirror-transform: 1.9.0 prosemirror-keymap@1.2.2: dependencies: prosemirror-state: 1.4.3 w3c-keyname: 2.2.8 - prosemirror-markdown@1.12.0: + prosemirror-markdown@1.13.0: dependencies: - markdown-it: 14.0.0 - prosemirror-model: 1.19.4 + markdown-it: 14.1.0 + prosemirror-model: 1.21.0 prosemirror-menu@1.2.4: dependencies: crelt: 1.0.6 prosemirror-commands: 1.5.2 - prosemirror-history: 1.3.2 + prosemirror-history: 1.4.0 prosemirror-state: 1.4.3 - prosemirror-model@1.19.4: + prosemirror-model@1.21.0: dependencies: orderedmap: 2.1.1 prosemirror-schema-basic@1.2.2: dependencies: - prosemirror-model: 1.19.4 + prosemirror-model: 1.21.0 prosemirror-schema-list@1.3.0: dependencies: - prosemirror-model: 1.19.4 + prosemirror-model: 1.21.0 prosemirror-state: 1.4.3 - prosemirror-transform: 1.8.0 + prosemirror-transform: 1.9.0 prosemirror-state@1.4.3: dependencies: - prosemirror-model: 1.19.4 - prosemirror-transform: 1.8.0 - prosemirror-view: 1.33.1 + prosemirror-model: 1.21.0 + prosemirror-transform: 1.9.0 + prosemirror-view: 1.33.6 prosemirror-tables@1.3.7: dependencies: prosemirror-keymap: 1.2.2 - prosemirror-model: 1.19.4 + prosemirror-model: 1.21.0 prosemirror-state: 1.4.3 - prosemirror-transform: 1.8.0 - prosemirror-view: 1.33.1 + prosemirror-transform: 1.9.0 + prosemirror-view: 1.33.6 - prosemirror-trailing-node@2.0.7(prosemirror-model@1.19.4)(prosemirror-state@1.4.3)(prosemirror-view@1.33.1): + prosemirror-trailing-node@2.0.8(prosemirror-model@1.21.0)(prosemirror-state@1.4.3)(prosemirror-view@1.33.6): dependencies: '@remirror/core-constants': 2.0.2 - '@remirror/core-helpers': 3.0.0 escape-string-regexp: 4.0.0 - prosemirror-model: 1.19.4 + prosemirror-model: 1.21.0 prosemirror-state: 1.4.3 - prosemirror-view: 1.33.1 + prosemirror-view: 1.33.6 - prosemirror-transform@1.8.0: + prosemirror-transform@1.9.0: dependencies: - prosemirror-model: 1.19.4 + prosemirror-model: 1.21.0 - prosemirror-view@1.33.1: + prosemirror-view@1.33.6: dependencies: - prosemirror-model: 1.19.4 + prosemirror-model: 1.21.0 prosemirror-state: 1.4.3 - prosemirror-transform: 1.8.0 + prosemirror-transform: 1.9.0 proxy-agent@6.4.0: dependencies: @@ -10281,8 +10187,6 @@ snapshots: text-table@0.2.0: {} - throttle-debounce@3.0.1: {} - through@2.3.8: {} timers-ext@0.1.7: @@ -10428,8 +10332,6 @@ snapshots: type-fest@0.21.3: {} - type-fest@2.19.0: {} - type-fest@4.12.0: {} type@1.2.0: {} From 4ef668c5eac97a52418c0ba277b966a9a14c0750 Mon Sep 17 00:00:00 2001 From: Manuel <30572287+manuel-rw@users.noreply.github.com> Date: Sat, 25 May 2024 19:56:02 +0200 Subject: [PATCH 02/30] ci: use semver workflow action (#548) --- .github/workflows/docker-image.yml | 35 +++++++++++++++++------------- 1 file changed, 20 insertions(+), 15 deletions(-) diff --git a/.github/workflows/docker-image.yml b/.github/workflows/docker-image.yml index 94bfba67a..046523358 100644 --- a/.github/workflows/docker-image.yml +++ b/.github/workflows/docker-image.yml @@ -30,8 +30,20 @@ jobs: DISCORD_WEBHOOK: ${{ secrets.DISCORD_WEBHOOK }} uses: Ilshidur/action-discord@master with: - args: "Deployment of an image has been triggered" + args: "Deployment of an image has been triggered: [run ${{ github.run_number }}](${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }})" - uses: actions/checkout@v4 + - name: Get Next Version + id: semver + uses: ietf-tools/semver-action@v1 + with: + token: ${{ github.token }} + branch: master + - name: Discord notification + env: + DISCORD_WEBHOOK: ${{ secrets.DISCORD_WEBHOOK }} + uses: Ilshidur/action-discord@master + with: + args: "Semver computed next tag to be ${{ steps.semver.outputs.next }}. Current is ${{ steps.semver.outputs.current }}" - uses: pnpm/action-setup@v2 with: version: 8 @@ -44,23 +56,16 @@ jobs: run: pnpm install - name: Build artifacts run: pnpm build - - name: Set up QEMU - uses: docker/setup-qemu-action@v3 - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 - - name: Bump version and push tag - id: githubTagAction - uses: anothrNick/github-tag-action@1.69.0 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - WITH_V: false - DRY_RUN: true - name: Discord notification env: DISCORD_WEBHOOK: ${{ secrets.DISCORD_WEBHOOK }} uses: Ilshidur/action-discord@master with: - args: "Image has been tagged as ${{ steps.githubTagAction.outputs.new_tag }}" + args: "Built application artifacts. Building images..." + - name: Set up QEMU + uses: docker/setup-qemu-action@v3 + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 - name: Docker meta id: meta uses: docker/metadata-action@v5 @@ -68,7 +73,7 @@ jobs: images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} tags: | type=raw,value=latest - type=raw,value=${{ steps.githubTagAction.outputs.new_tag }} + type=raw,value=${{ steps.semver.outputs.next }} - name: Build and push id: buildPushAction uses: docker/build-push-action@v5 @@ -86,4 +91,4 @@ jobs: DISCORD_WEBHOOK: ${{ secrets.DISCORD_WEBHOOK }} uses: Ilshidur/action-discord@master with: - args: "Image built with ID ${{ steps.buildPushAction.outputs.imageid }}" + args: "Deployment of image has completed. Image ID is '${{ steps.buildPushAction.outputs.imageid }}'. This was a dry run." From b678d4f95123479e61cbedf281daefcece033fa8 Mon Sep 17 00:00:00 2001 From: Manuel <30572287+manuel-rw@users.noreply.github.com> Date: Sat, 25 May 2024 19:56:11 +0200 Subject: [PATCH 03/30] ci: validate pr title (#550) --- .github/workflows/pr-conventional-commits.yml | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 .github/workflows/pr-conventional-commits.yml diff --git a/.github/workflows/pr-conventional-commits.yml b/.github/workflows/pr-conventional-commits.yml new file mode 100644 index 000000000..e3dfb587b --- /dev/null +++ b/.github/workflows/pr-conventional-commits.yml @@ -0,0 +1,20 @@ +name: "Lint PR" + +on: + pull_request_target: + types: + - opened + - edited + - synchronize + +permissions: + pull-requests: read + +jobs: + main: + name: Validate PR title + runs-on: ubuntu-latest + steps: + - uses: amannn/action-semantic-pull-request@v5 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file From b76fa9d72290988ac2c4cfa370f760e7ca683d29 Mon Sep 17 00:00:00 2001 From: Manuel <30572287+manuel-rw@users.noreply.github.com> Date: Sat, 25 May 2024 19:56:24 +0200 Subject: [PATCH 04/30] ci: report vitest code coverage (#549) --- .github/workflows/code-quality.yml | 6 ++++++ vitest.config.ts | 1 + 2 files changed, 7 insertions(+) diff --git a/.github/workflows/code-quality.yml b/.github/workflows/code-quality.yml index 44846a959..228dd9989 100644 --- a/.github/workflows/code-quality.yml +++ b/.github/workflows/code-quality.yml @@ -66,3 +66,9 @@ jobs: - name: Test run: pnpm test + + - name: 'Report Coverage' + # Set if: always() to also generate the report if tests are failing + # Only works if you set `reportOnFailure: true` in your vite config as specified above + if: always() + uses: davelosert/vitest-coverage-report-action@v2 diff --git a/vitest.config.ts b/vitest.config.ts index 9d5aec73d..5a9efb391 100644 --- a/vitest.config.ts +++ b/vitest.config.ts @@ -18,6 +18,7 @@ export default defineConfig({ reporter: ["html", "json-summary", "json"], all: true, exclude: ["apps/nextjs/.next/"], + reportOnFailure: true }, exclude: [...configDefaults.exclude, "apps/nextjs/.next"], From a029abe6f3fa762e879717bd66bc4e8bbde3558b Mon Sep 17 00:00:00 2001 From: "homarr-renovate[bot]" <158783068+homarr-renovate[bot]@users.noreply.github.com> Date: Sat, 25 May 2024 19:56:55 +0200 Subject: [PATCH 05/30] fix(deps): update tanstack-query monorepo to v5.38.0 (#551) Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com> --- pnpm-lock.yaml | 48 ++++++++++++++++++++++++------------------------ 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a3312147b..2d5c91e1c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -125,22 +125,22 @@ importers: version: 0.10.1(typescript@5.4.5)(zod@3.23.8) '@tanstack/react-query': specifier: ^5.37.1 - version: 5.37.1(react@18.3.1) + version: 5.38.0(react@18.3.1) '@tanstack/react-query-devtools': specifier: ^5.37.1 - version: 5.37.1(@tanstack/react-query@5.37.1(react@18.3.1))(react@18.3.1) + version: 5.38.0(@tanstack/react-query@5.38.0(react@18.3.1))(react@18.3.1) '@tanstack/react-query-next-experimental': specifier: 5.37.1 - version: 5.37.1(@tanstack/react-query@5.37.1(react@18.3.1))(next@14.2.3(@babel/core@7.23.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.2))(react@18.3.1) + version: 5.37.1(@tanstack/react-query@5.38.0(react@18.3.1))(next@14.2.3(@babel/core@7.23.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.2))(react@18.3.1) '@trpc/client': specifier: 11.0.0-rc.374 version: 11.0.0-rc.374(@trpc/server@11.0.0-rc.374) '@trpc/next': specifier: next - version: 11.0.0-rc.374(@tanstack/react-query@5.37.1(react@18.3.1))(@trpc/client@11.0.0-rc.374(@trpc/server@11.0.0-rc.374))(@trpc/react-query@11.0.0-rc.374(@tanstack/react-query@5.37.1(react@18.3.1))(@trpc/client@11.0.0-rc.374(@trpc/server@11.0.0-rc.374))(@trpc/server@11.0.0-rc.374)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@trpc/server@11.0.0-rc.374)(next@14.2.3(@babel/core@7.23.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.2))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 11.0.0-rc.374(@tanstack/react-query@5.38.0(react@18.3.1))(@trpc/client@11.0.0-rc.374(@trpc/server@11.0.0-rc.374))(@trpc/react-query@11.0.0-rc.374(@tanstack/react-query@5.38.0(react@18.3.1))(@trpc/client@11.0.0-rc.374(@trpc/server@11.0.0-rc.374))(@trpc/server@11.0.0-rc.374)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@trpc/server@11.0.0-rc.374)(next@14.2.3(@babel/core@7.23.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.2))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@trpc/react-query': specifier: next - version: 11.0.0-rc.374(@tanstack/react-query@5.37.1(react@18.3.1))(@trpc/client@11.0.0-rc.374(@trpc/server@11.0.0-rc.374))(@trpc/server@11.0.0-rc.374)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 11.0.0-rc.374(@tanstack/react-query@5.38.0(react@18.3.1))(@trpc/client@11.0.0-rc.374(@trpc/server@11.0.0-rc.374))(@trpc/server@11.0.0-rc.374)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@trpc/server': specifier: next version: 11.0.0-rc.374 @@ -1991,16 +1991,16 @@ packages: resolution: {integrity: sha512-PnVV3d2poenUM31ZbZi/yXkBu3J7kd5k2u51CGwwNojag451AjTH9N6n41yjXz2fpLeewleyLBmNS6+HcGDlXw==} engines: {node: '>=12'} - '@tanstack/query-core@5.36.1': - resolution: {integrity: sha512-BteWYEPUcucEu3NBcDAgKuI4U25R9aPrHSP6YSf2NvaD2pSlIQTdqOfLRsxH9WdRYg7k0Uom35Uacb6nvbIMJg==} + '@tanstack/query-core@5.38.0': + resolution: {integrity: sha512-QtkoxvFcu52mNpp3+qOo9H265m3rt83Dgbw5WnNyJvr83cegrQ7zT8haHhL4Rul6ZQkeovxyWbXVW9zI0WYx6g==} '@tanstack/query-devtools@5.37.1': resolution: {integrity: sha512-XcG4IIHIv0YQKrexTqo2zogQWR1Sz672tX2KsfE9kzB+9zhx44vRKH5si4WDILE1PIWQpStFs/NnrDQrBAUQpg==} - '@tanstack/react-query-devtools@5.37.1': - resolution: {integrity: sha512-fWL3rV/avL9HsHt3RVYxuLCqSHghBwSGPIUMDZ9hfg9PDjQaeI9d8kJj6yLoCBWUhTue5/rQbISvFtr+yxyYyA==} + '@tanstack/react-query-devtools@5.38.0': + resolution: {integrity: sha512-jEgraQ1gxMPBYgmhcrvaAvksSY9Wz949ZHID+YXkV3t5jhXzoGwawAMYNDurpRjsNzzHEyuu/GwThkgXgTZj6Q==} peerDependencies: - '@tanstack/react-query': ^5.37.1 + '@tanstack/react-query': ^5.38.0 react: ^18.0.0 '@tanstack/react-query-next-experimental@5.37.1': @@ -2010,8 +2010,8 @@ packages: next: ^13 || ^14 react: ^18.0.0 - '@tanstack/react-query@5.37.1': - resolution: {integrity: sha512-EhtBNA8GL3XFeSx6VYUjXQ96n44xe3JGKZCzBINrCYlxbZP6UwBafv7ti4eSRWc2Fy+fybQre0w17gR6lMzULA==} + '@tanstack/react-query@5.38.0': + resolution: {integrity: sha512-LzMSPS2zSd6KUQfSqYxHBMuB3N0k3tZRNPCXeWXgLMGdrscgleRhE8Ni3QNkxGYvLW+qxuu8RKpuewsCiCKg3g==} peerDependencies: react: ^18.0.0 @@ -6510,25 +6510,25 @@ snapshots: dependencies: remove-accents: 0.5.0 - '@tanstack/query-core@5.36.1': {} + '@tanstack/query-core@5.38.0': {} '@tanstack/query-devtools@5.37.1': {} - '@tanstack/react-query-devtools@5.37.1(@tanstack/react-query@5.37.1(react@18.3.1))(react@18.3.1)': + '@tanstack/react-query-devtools@5.38.0(@tanstack/react-query@5.38.0(react@18.3.1))(react@18.3.1)': dependencies: '@tanstack/query-devtools': 5.37.1 - '@tanstack/react-query': 5.37.1(react@18.3.1) + '@tanstack/react-query': 5.38.0(react@18.3.1) react: 18.3.1 - '@tanstack/react-query-next-experimental@5.37.1(@tanstack/react-query@5.37.1(react@18.3.1))(next@14.2.3(@babel/core@7.23.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.2))(react@18.3.1)': + '@tanstack/react-query-next-experimental@5.37.1(@tanstack/react-query@5.38.0(react@18.3.1))(next@14.2.3(@babel/core@7.23.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.2))(react@18.3.1)': dependencies: - '@tanstack/react-query': 5.37.1(react@18.3.1) + '@tanstack/react-query': 5.38.0(react@18.3.1) next: 14.2.3(@babel/core@7.23.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.2) react: 18.3.1 - '@tanstack/react-query@5.37.1(react@18.3.1)': + '@tanstack/react-query@5.38.0(react@18.3.1)': dependencies: - '@tanstack/query-core': 5.36.1 + '@tanstack/query-core': 5.38.0 react: 18.3.1 '@tanstack/react-table@8.16.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': @@ -6757,7 +6757,7 @@ snapshots: dependencies: '@trpc/server': 11.0.0-rc.374 - '@trpc/next@11.0.0-rc.374(@tanstack/react-query@5.37.1(react@18.3.1))(@trpc/client@11.0.0-rc.374(@trpc/server@11.0.0-rc.374))(@trpc/react-query@11.0.0-rc.374(@tanstack/react-query@5.37.1(react@18.3.1))(@trpc/client@11.0.0-rc.374(@trpc/server@11.0.0-rc.374))(@trpc/server@11.0.0-rc.374)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@trpc/server@11.0.0-rc.374)(next@14.2.3(@babel/core@7.23.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.2))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@trpc/next@11.0.0-rc.374(@tanstack/react-query@5.38.0(react@18.3.1))(@trpc/client@11.0.0-rc.374(@trpc/server@11.0.0-rc.374))(@trpc/react-query@11.0.0-rc.374(@tanstack/react-query@5.38.0(react@18.3.1))(@trpc/client@11.0.0-rc.374(@trpc/server@11.0.0-rc.374))(@trpc/server@11.0.0-rc.374)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@trpc/server@11.0.0-rc.374)(next@14.2.3(@babel/core@7.23.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.2))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@trpc/client': 11.0.0-rc.374(@trpc/server@11.0.0-rc.374) '@trpc/server': 11.0.0-rc.374 @@ -6765,12 +6765,12 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@tanstack/react-query': 5.37.1(react@18.3.1) - '@trpc/react-query': 11.0.0-rc.374(@tanstack/react-query@5.37.1(react@18.3.1))(@trpc/client@11.0.0-rc.374(@trpc/server@11.0.0-rc.374))(@trpc/server@11.0.0-rc.374)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@tanstack/react-query': 5.38.0(react@18.3.1) + '@trpc/react-query': 11.0.0-rc.374(@tanstack/react-query@5.38.0(react@18.3.1))(@trpc/client@11.0.0-rc.374(@trpc/server@11.0.0-rc.374))(@trpc/server@11.0.0-rc.374)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@trpc/react-query@11.0.0-rc.374(@tanstack/react-query@5.37.1(react@18.3.1))(@trpc/client@11.0.0-rc.374(@trpc/server@11.0.0-rc.374))(@trpc/server@11.0.0-rc.374)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@trpc/react-query@11.0.0-rc.374(@tanstack/react-query@5.38.0(react@18.3.1))(@trpc/client@11.0.0-rc.374(@trpc/server@11.0.0-rc.374))(@trpc/server@11.0.0-rc.374)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@tanstack/react-query': 5.37.1(react@18.3.1) + '@tanstack/react-query': 5.38.0(react@18.3.1) '@trpc/client': 11.0.0-rc.374(@trpc/server@11.0.0-rc.374) '@trpc/server': 11.0.0-rc.374 react: 18.3.1 From cd09d541637e96e621845a77d3ddec3695bfea78 Mon Sep 17 00:00:00 2001 From: "homarr-renovate[bot]" <158783068+homarr-renovate[bot]@users.noreply.github.com> Date: Sat, 25 May 2024 19:57:09 +0200 Subject: [PATCH 06/30] chore(deps): update dependency @types/react to v18.3.3 (#546) Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com> --- pnpm-lock.yaml | 120 ++++++++++++++++++++++++------------------------- 1 file changed, 60 insertions(+), 60 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2d5c91e1c..80f05f160 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -10,16 +10,16 @@ importers: dependencies: '@mantine/core': specifier: ^7.9.2 - version: 7.9.2(@mantine/hooks@7.9.2(react@18.3.1))(@types/react@18.3.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 7.9.2(@mantine/hooks@7.9.2(react@18.3.1))(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@mantine/dates': specifier: ^7.9.2 - version: 7.9.2(@mantine/core@7.9.2(@mantine/hooks@7.9.2(react@18.3.1))(@types/react@18.3.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mantine/hooks@7.9.2(react@18.3.1))(dayjs@1.11.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 7.9.2(@mantine/core@7.9.2(@mantine/hooks@7.9.2(react@18.3.1))(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mantine/hooks@7.9.2(react@18.3.1))(dayjs@1.11.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@tabler/icons-react': specifier: ^3.5.0 version: 3.5.0(react@18.3.1) mantine-react-table: specifier: 2.0.0-beta.3 - version: 2.0.0-beta.3(@mantine/core@7.9.2(@mantine/hooks@7.9.2(react@18.3.1))(@types/react@18.3.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mantine/dates@7.9.2(@mantine/core@7.9.2(@mantine/hooks@7.9.2(react@18.3.1))(@types/react@18.3.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mantine/hooks@7.9.2(react@18.3.1))(dayjs@1.11.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mantine/hooks@7.9.2(react@18.3.1))(@tabler/icons-react@3.5.0(react@18.3.1))(clsx@2.1.0)(dayjs@1.11.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 2.0.0-beta.3(@mantine/core@7.9.2(@mantine/hooks@7.9.2(react@18.3.1))(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mantine/dates@7.9.2(@mantine/core@7.9.2(@mantine/hooks@7.9.2(react@18.3.1))(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mantine/hooks@7.9.2(react@18.3.1))(dayjs@1.11.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mantine/hooks@7.9.2(react@18.3.1))(@tabler/icons-react@3.5.0(react@18.3.1))(clsx@2.1.0)(dayjs@1.11.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) devDependencies: '@homarr/prettier-config': specifier: workspace:^0.1.0 @@ -116,10 +116,10 @@ importers: version: 7.9.2(react@18.3.1) '@mantine/modals': specifier: ^7.9.2 - version: 7.9.2(@mantine/core@7.9.2(@mantine/hooks@7.9.2(react@18.3.1))(@types/react@18.3.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mantine/hooks@7.9.2(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 7.9.2(@mantine/core@7.9.2(@mantine/hooks@7.9.2(react@18.3.1))(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mantine/hooks@7.9.2(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@mantine/tiptap': specifier: ^7.9.2 - version: 7.9.2(@mantine/core@7.9.2(@mantine/hooks@7.9.2(react@18.3.1))(@types/react@18.3.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mantine/hooks@7.9.2(react@18.3.1))(@tiptap/extension-link@2.4.0(@tiptap/core@2.4.0(@tiptap/pm@2.2.4))(@tiptap/pm@2.2.4))(@tiptap/react@2.4.0(@tiptap/core@2.4.0(@tiptap/pm@2.2.4))(@tiptap/pm@2.2.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 7.9.2(@mantine/core@7.9.2(@mantine/hooks@7.9.2(react@18.3.1))(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mantine/hooks@7.9.2(react@18.3.1))(@tiptap/extension-link@2.4.0(@tiptap/core@2.4.0(@tiptap/pm@2.2.4))(@tiptap/pm@2.2.4))(@tiptap/react@2.4.0(@tiptap/core@2.4.0(@tiptap/pm@2.2.4))(@tiptap/pm@2.2.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@t3-oss/env-nextjs': specifier: ^0.10.1 version: 0.10.1(typescript@5.4.5)(zod@3.23.8) @@ -170,7 +170,7 @@ importers: version: 10.4.1 jotai: specifier: ^2.8.1 - version: 2.8.1(@types/react@18.3.2)(react@18.3.1) + version: 2.8.1(@types/react@18.3.3)(react@18.3.1) next: specifier: ^14.2.3 version: 14.2.3(@babel/core@7.23.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.2) @@ -210,7 +210,7 @@ importers: version: 20.12.12 '@types/react': specifier: ^18.3.2 - version: 18.3.2 + version: 18.3.3 '@types/react-dom': specifier: ^18.3.0 version: 18.3.0 @@ -514,7 +514,7 @@ importers: version: 0.21.2 drizzle-orm: specifier: ^0.30.10 - version: 0.30.10(@types/better-sqlite3@7.6.10)(@types/react@18.3.2)(better-sqlite3@10.0.0)(mysql2@3.9.7)(react@18.3.1) + version: 0.30.10(@types/better-sqlite3@7.6.10)(@types/react@18.3.3)(better-sqlite3@10.0.0)(mysql2@3.9.7)(react@18.3.1) mysql2: specifier: 3.9.7 version: 3.9.7 @@ -676,7 +676,7 @@ importers: version: link:../ui '@mantine/notifications': specifier: ^7.9.2 - version: 7.9.2(@mantine/core@7.9.2(@mantine/hooks@7.9.2(react@18.3.1))(@types/react@18.3.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mantine/hooks@7.9.2(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 7.9.2(@mantine/core@7.9.2(@mantine/hooks@7.9.2(react@18.3.1))(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mantine/hooks@7.9.2(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) devDependencies: '@homarr/eslint-config': specifier: workspace:^0.2.0 @@ -753,7 +753,7 @@ importers: version: link:../ui '@mantine/spotlight': specifier: ^7.9.2 - version: 7.9.2(@mantine/core@7.9.2(@mantine/hooks@7.9.2(react@18.3.1))(@types/react@18.3.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mantine/hooks@7.9.2(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 7.9.2(@mantine/core@7.9.2(@mantine/hooks@7.9.2(react@18.3.1))(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mantine/hooks@7.9.2(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) devDependencies: '@homarr/eslint-config': specifier: workspace:^0.2.0 @@ -2370,8 +2370,8 @@ packages: '@types/prismjs@1.26.4': resolution: {integrity: sha512-rlAnzkW2sZOjbqZ743IHUhFcvzaGbqijwOu8QZnZCjfQzBqFE3s4lOTJEsxikImav9uzz/42I+O7YUs1mWgMlg==} - '@types/prop-types@15.7.11': - resolution: {integrity: sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng==} + '@types/prop-types@15.7.12': + resolution: {integrity: sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==} '@types/qs@6.9.11': resolution: {integrity: sha512-oGk0gmhnEJK4Yyk+oI7EfXsLayXatCWPHary1MtcmbAifkobT9cM9yutG/hZKIseOU0MqbIwQ/u2nn/Gb+ltuQ==} @@ -2382,8 +2382,8 @@ packages: '@types/react-dom@18.3.0': resolution: {integrity: sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg==} - '@types/react@18.3.2': - resolution: {integrity: sha512-Btgg89dAnqD4vV7R3hlwOxgqobUQKgx3MmrQRi0yYbs/P0ym8XozIAlkqVilPqHQwXs4e9Tf63rrCgl58BcO4w==} + '@types/react@18.3.3': + resolution: {integrity: sha512-hti/R0pS0q1/xx+TsI73XIqk26eBsISZ2R0wUijXIngRK9R/e7Xw/cXVxQK7R5JjW+SV4zGcn5hXjudkN/pLIw==} '@types/send@0.17.4': resolution: {integrity: sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==} @@ -6291,7 +6291,7 @@ snapshots: dependencies: chroma-js: 2.4.2 - '@mantine/core@7.9.2(@mantine/hooks@7.9.2(react@18.3.1))(@types/react@18.3.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@mantine/core@7.9.2(@mantine/hooks@7.9.2(react@18.3.1))(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@floating-ui/react': 0.26.9(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@mantine/hooks': 7.9.2(react@18.3.1) @@ -6299,15 +6299,15 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) react-number-format: 5.3.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - react-remove-scroll: 2.5.7(@types/react@18.3.2)(react@18.3.1) - react-textarea-autosize: 8.5.3(@types/react@18.3.2)(react@18.3.1) + react-remove-scroll: 2.5.7(@types/react@18.3.3)(react@18.3.1) + react-textarea-autosize: 8.5.3(@types/react@18.3.3)(react@18.3.1) type-fest: 4.12.0 transitivePeerDependencies: - '@types/react' - '@mantine/dates@7.9.2(@mantine/core@7.9.2(@mantine/hooks@7.9.2(react@18.3.1))(@types/react@18.3.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mantine/hooks@7.9.2(react@18.3.1))(dayjs@1.11.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@mantine/dates@7.9.2(@mantine/core@7.9.2(@mantine/hooks@7.9.2(react@18.3.1))(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mantine/hooks@7.9.2(react@18.3.1))(dayjs@1.11.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@mantine/core': 7.9.2(@mantine/hooks@7.9.2(react@18.3.1))(@types/react@18.3.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@mantine/core': 7.9.2(@mantine/hooks@7.9.2(react@18.3.1))(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@mantine/hooks': 7.9.2(react@18.3.1) clsx: 2.1.0 dayjs: 1.11.11 @@ -6324,25 +6324,25 @@ snapshots: dependencies: react: 18.3.1 - '@mantine/modals@7.9.2(@mantine/core@7.9.2(@mantine/hooks@7.9.2(react@18.3.1))(@types/react@18.3.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mantine/hooks@7.9.2(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@mantine/modals@7.9.2(@mantine/core@7.9.2(@mantine/hooks@7.9.2(react@18.3.1))(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mantine/hooks@7.9.2(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@mantine/core': 7.9.2(@mantine/hooks@7.9.2(react@18.3.1))(@types/react@18.3.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@mantine/core': 7.9.2(@mantine/hooks@7.9.2(react@18.3.1))(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@mantine/hooks': 7.9.2(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@mantine/notifications@7.9.2(@mantine/core@7.9.2(@mantine/hooks@7.9.2(react@18.3.1))(@types/react@18.3.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mantine/hooks@7.9.2(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@mantine/notifications@7.9.2(@mantine/core@7.9.2(@mantine/hooks@7.9.2(react@18.3.1))(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mantine/hooks@7.9.2(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@mantine/core': 7.9.2(@mantine/hooks@7.9.2(react@18.3.1))(@types/react@18.3.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@mantine/core': 7.9.2(@mantine/hooks@7.9.2(react@18.3.1))(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@mantine/hooks': 7.9.2(react@18.3.1) '@mantine/store': 7.9.2(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) react-transition-group: 4.4.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@mantine/spotlight@7.9.2(@mantine/core@7.9.2(@mantine/hooks@7.9.2(react@18.3.1))(@types/react@18.3.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mantine/hooks@7.9.2(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@mantine/spotlight@7.9.2(@mantine/core@7.9.2(@mantine/hooks@7.9.2(react@18.3.1))(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mantine/hooks@7.9.2(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@mantine/core': 7.9.2(@mantine/hooks@7.9.2(react@18.3.1))(@types/react@18.3.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@mantine/core': 7.9.2(@mantine/hooks@7.9.2(react@18.3.1))(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@mantine/hooks': 7.9.2(react@18.3.1) '@mantine/store': 7.9.2(react@18.3.1) react: 18.3.1 @@ -6352,9 +6352,9 @@ snapshots: dependencies: react: 18.3.1 - '@mantine/tiptap@7.9.2(@mantine/core@7.9.2(@mantine/hooks@7.9.2(react@18.3.1))(@types/react@18.3.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mantine/hooks@7.9.2(react@18.3.1))(@tiptap/extension-link@2.4.0(@tiptap/core@2.4.0(@tiptap/pm@2.2.4))(@tiptap/pm@2.2.4))(@tiptap/react@2.4.0(@tiptap/core@2.4.0(@tiptap/pm@2.2.4))(@tiptap/pm@2.2.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@mantine/tiptap@7.9.2(@mantine/core@7.9.2(@mantine/hooks@7.9.2(react@18.3.1))(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mantine/hooks@7.9.2(react@18.3.1))(@tiptap/extension-link@2.4.0(@tiptap/core@2.4.0(@tiptap/pm@2.2.4))(@tiptap/pm@2.2.4))(@tiptap/react@2.4.0(@tiptap/core@2.4.0(@tiptap/pm@2.2.4))(@tiptap/pm@2.2.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@mantine/core': 7.9.2(@mantine/hooks@7.9.2(react@18.3.1))(@types/react@18.3.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@mantine/core': 7.9.2(@mantine/hooks@7.9.2(react@18.3.1))(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@mantine/hooks': 7.9.2(react@18.3.1) '@tiptap/extension-link': 2.4.0(@tiptap/core@2.4.0(@tiptap/pm@2.2.4))(@tiptap/pm@2.2.4) '@tiptap/react': 2.4.0(@tiptap/core@2.4.0(@tiptap/pm@2.2.4))(@tiptap/pm@2.2.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -6925,7 +6925,7 @@ snapshots: '@types/prismjs@1.26.4': {} - '@types/prop-types@15.7.11': {} + '@types/prop-types@15.7.12': {} '@types/qs@6.9.11': {} @@ -6933,11 +6933,11 @@ snapshots: '@types/react-dom@18.3.0': dependencies: - '@types/react': 18.3.2 + '@types/react': 18.3.3 - '@types/react@18.3.2': + '@types/react@18.3.3': dependencies: - '@types/prop-types': 15.7.11 + '@types/prop-types': 15.7.12 csstype: 3.1.3 '@types/send@0.17.4': @@ -7779,10 +7779,10 @@ snapshots: transitivePeerDependencies: - supports-color - drizzle-orm@0.30.10(@types/better-sqlite3@7.6.10)(@types/react@18.3.2)(better-sqlite3@10.0.0)(mysql2@3.9.7)(react@18.3.1): + drizzle-orm@0.30.10(@types/better-sqlite3@7.6.10)(@types/react@18.3.3)(better-sqlite3@10.0.0)(mysql2@3.9.7)(react@18.3.1): optionalDependencies: '@types/better-sqlite3': 7.6.10 - '@types/react': 18.3.2 + '@types/react': 18.3.3 better-sqlite3: 10.0.0 mysql2: 3.9.7 react: 18.3.1 @@ -8831,9 +8831,9 @@ snapshots: jose@5.2.2: {} - jotai@2.8.1(@types/react@18.3.2)(react@18.3.1): + jotai@2.8.1(@types/react@18.3.3)(react@18.3.1): optionalDependencies: - '@types/react': 18.3.2 + '@types/react': 18.3.3 react: 18.3.1 js-tokens@4.0.0: {} @@ -9039,10 +9039,10 @@ snapshots: make-error@1.3.6: {} - mantine-react-table@2.0.0-beta.3(@mantine/core@7.9.2(@mantine/hooks@7.9.2(react@18.3.1))(@types/react@18.3.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mantine/dates@7.9.2(@mantine/core@7.9.2(@mantine/hooks@7.9.2(react@18.3.1))(@types/react@18.3.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mantine/hooks@7.9.2(react@18.3.1))(dayjs@1.11.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mantine/hooks@7.9.2(react@18.3.1))(@tabler/icons-react@3.5.0(react@18.3.1))(clsx@2.1.0)(dayjs@1.11.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + mantine-react-table@2.0.0-beta.3(@mantine/core@7.9.2(@mantine/hooks@7.9.2(react@18.3.1))(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mantine/dates@7.9.2(@mantine/core@7.9.2(@mantine/hooks@7.9.2(react@18.3.1))(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mantine/hooks@7.9.2(react@18.3.1))(dayjs@1.11.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mantine/hooks@7.9.2(react@18.3.1))(@tabler/icons-react@3.5.0(react@18.3.1))(clsx@2.1.0)(dayjs@1.11.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@mantine/core': 7.9.2(@mantine/hooks@7.9.2(react@18.3.1))(@types/react@18.3.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@mantine/dates': 7.9.2(@mantine/core@7.9.2(@mantine/hooks@7.9.2(react@18.3.1))(@types/react@18.3.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mantine/hooks@7.9.2(react@18.3.1))(dayjs@1.11.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@mantine/core': 7.9.2(@mantine/hooks@7.9.2(react@18.3.1))(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@mantine/dates': 7.9.2(@mantine/core@7.9.2(@mantine/hooks@7.9.2(react@18.3.1))(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mantine/hooks@7.9.2(react@18.3.1))(dayjs@1.11.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@mantine/hooks': 7.9.2(react@18.3.1) '@tabler/icons-react': 3.5.0(react@18.3.1) '@tanstack/match-sorter-utils': 8.15.1 @@ -9718,45 +9718,45 @@ snapshots: react-refresh@0.14.0: {} - react-remove-scroll-bar@2.3.4(@types/react@18.3.2)(react@18.3.1): + react-remove-scroll-bar@2.3.4(@types/react@18.3.3)(react@18.3.1): dependencies: react: 18.3.1 - react-style-singleton: 2.2.1(@types/react@18.3.2)(react@18.3.1) + react-style-singleton: 2.2.1(@types/react@18.3.3)(react@18.3.1) tslib: 2.6.2 optionalDependencies: - '@types/react': 18.3.2 + '@types/react': 18.3.3 - react-remove-scroll@2.5.7(@types/react@18.3.2)(react@18.3.1): + react-remove-scroll@2.5.7(@types/react@18.3.3)(react@18.3.1): dependencies: react: 18.3.1 - react-remove-scroll-bar: 2.3.4(@types/react@18.3.2)(react@18.3.1) - react-style-singleton: 2.2.1(@types/react@18.3.2)(react@18.3.1) + react-remove-scroll-bar: 2.3.4(@types/react@18.3.3)(react@18.3.1) + react-style-singleton: 2.2.1(@types/react@18.3.3)(react@18.3.1) tslib: 2.6.2 - use-callback-ref: 1.3.1(@types/react@18.3.2)(react@18.3.1) - use-sidecar: 1.1.2(@types/react@18.3.2)(react@18.3.1) + use-callback-ref: 1.3.1(@types/react@18.3.3)(react@18.3.1) + use-sidecar: 1.1.2(@types/react@18.3.3)(react@18.3.1) optionalDependencies: - '@types/react': 18.3.2 + '@types/react': 18.3.3 react-simple-code-editor@0.13.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - react-style-singleton@2.2.1(@types/react@18.3.2)(react@18.3.1): + react-style-singleton@2.2.1(@types/react@18.3.3)(react@18.3.1): dependencies: get-nonce: 1.0.1 invariant: 2.2.4 react: 18.3.1 tslib: 2.6.2 optionalDependencies: - '@types/react': 18.3.2 + '@types/react': 18.3.3 - react-textarea-autosize@8.5.3(@types/react@18.3.2)(react@18.3.1): + react-textarea-autosize@8.5.3(@types/react@18.3.3)(react@18.3.1): dependencies: '@babel/runtime': 7.23.9 react: 18.3.1 use-composed-ref: 1.3.0(react@18.3.1) - use-latest: 1.2.1(@types/react@18.3.2)(react@18.3.1) + use-latest: 1.2.1(@types/react@18.3.3)(react@18.3.1) transitivePeerDependencies: - '@types/react' @@ -10415,12 +10415,12 @@ snapshots: url-toolkit@2.2.5: {} - use-callback-ref@1.3.1(@types/react@18.3.2)(react@18.3.1): + use-callback-ref@1.3.1(@types/react@18.3.3)(react@18.3.1): dependencies: react: 18.3.1 tslib: 2.6.2 optionalDependencies: - '@types/react': 18.3.2 + '@types/react': 18.3.3 use-composed-ref@1.3.0(react@18.3.1): dependencies: @@ -10432,26 +10432,26 @@ snapshots: dequal: 2.0.3 react: 18.3.1 - use-isomorphic-layout-effect@1.1.2(@types/react@18.3.2)(react@18.3.1): + use-isomorphic-layout-effect@1.1.2(@types/react@18.3.3)(react@18.3.1): dependencies: react: 18.3.1 optionalDependencies: - '@types/react': 18.3.2 + '@types/react': 18.3.3 - use-latest@1.2.1(@types/react@18.3.2)(react@18.3.1): + use-latest@1.2.1(@types/react@18.3.3)(react@18.3.1): dependencies: react: 18.3.1 - use-isomorphic-layout-effect: 1.1.2(@types/react@18.3.2)(react@18.3.1) + use-isomorphic-layout-effect: 1.1.2(@types/react@18.3.3)(react@18.3.1) optionalDependencies: - '@types/react': 18.3.2 + '@types/react': 18.3.3 - use-sidecar@1.1.2(@types/react@18.3.2)(react@18.3.1): + use-sidecar@1.1.2(@types/react@18.3.3)(react@18.3.1): dependencies: detect-node-es: 1.1.0 react: 18.3.1 tslib: 2.6.2 optionalDependencies: - '@types/react': 18.3.2 + '@types/react': 18.3.3 util-deprecate@1.0.2: {} From 1569862baf77b3a8475c4aacc6f7ae5774be09cd Mon Sep 17 00:00:00 2001 From: "homarr-renovate[bot]" <158783068+homarr-renovate[bot]@users.noreply.github.com> Date: Sat, 25 May 2024 19:08:36 +0000 Subject: [PATCH 07/30] fix(deps): update dependency @homarr/gridstack to v1.0.2 (#542) Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com> --- pnpm-lock.yaml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 80f05f160..51f1c8454 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -80,7 +80,7 @@ importers: version: link:../../packages/form '@homarr/gridstack': specifier: ^1.0.0 - version: 1.0.0 + version: 1.0.2 '@homarr/log': specifier: workspace:^ version: link:../../packages/log @@ -1659,8 +1659,8 @@ packages: '@floating-ui/utils@0.2.1': resolution: {integrity: sha512-9TANp6GPoMtYzQdt54kfAyMmz1+osLlXdg2ENroU7zzrtflTLrrC/lgrIfaSe+Wu0b89GKccT7vxXA0MoAIO+Q==} - '@homarr/gridstack@1.0.0': - resolution: {integrity: sha512-KM9024BipLD9BmtM6jHI8OKLZ1Iy4vZdTfU53ww4qEda/330XQYhIC2SBcQgkNnDB2MTkn/laNSO5gTy+lJg9Q==} + '@homarr/gridstack@1.0.2': + resolution: {integrity: sha512-YL9oF9SwAhioto4QNaowHdMNEhjy2G6v22aN3BlGtumiAWPayo3Ni9P37ZQ7Zv/1s8qKmC2t3GZAp+IsCPjgUA==} '@humanwhocodes/config-array@0.11.14': resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} @@ -6222,7 +6222,7 @@ snapshots: '@floating-ui/utils@0.2.1': {} - '@homarr/gridstack@1.0.0': {} + '@homarr/gridstack@1.0.2': {} '@humanwhocodes/config-array@0.11.14': dependencies: From 96c71aed6e6bc7173c4237d5bda9e3975445e8b7 Mon Sep 17 00:00:00 2001 From: "homarr-renovate[bot]" <158783068+homarr-renovate[bot]@users.noreply.github.com> Date: Sat, 25 May 2024 19:19:26 +0000 Subject: [PATCH 08/30] chore(deps): update dependency @vitejs/plugin-react to v4.3.0 (#545) Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com> --- pnpm-lock.yaml | 383 +++++++++++++++++++++++++++++++++++-------------- 1 file changed, 275 insertions(+), 108 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 51f1c8454..1043fd3a9 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -29,7 +29,7 @@ importers: version: 1.13.3(@types/node@20.12.12)(typescript@5.4.5) '@vitejs/plugin-react': specifier: ^4.2.1 - version: 4.2.1(vite@5.2.6(@types/node@20.12.12)(sass@1.77.2)(sugarss@4.0.1)) + version: 4.3.0(vite@5.2.6(@types/node@20.12.12)(sass@1.77.2)(sugarss@4.0.1)) '@vitest/coverage-v8': specifier: ^1.6.0 version: 1.6.0(vitest@1.6.0(@types/node@20.12.12)(@vitest/ui@1.6.0)(jsdom@24.0.0)(sass@1.77.2)(sugarss@4.0.1)) @@ -131,13 +131,13 @@ importers: version: 5.38.0(@tanstack/react-query@5.38.0(react@18.3.1))(react@18.3.1) '@tanstack/react-query-next-experimental': specifier: 5.37.1 - version: 5.37.1(@tanstack/react-query@5.38.0(react@18.3.1))(next@14.2.3(@babel/core@7.23.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.2))(react@18.3.1) + version: 5.37.1(@tanstack/react-query@5.38.0(react@18.3.1))(next@14.2.3(@babel/core@7.24.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.2))(react@18.3.1) '@trpc/client': specifier: 11.0.0-rc.374 version: 11.0.0-rc.374(@trpc/server@11.0.0-rc.374) '@trpc/next': specifier: next - version: 11.0.0-rc.374(@tanstack/react-query@5.38.0(react@18.3.1))(@trpc/client@11.0.0-rc.374(@trpc/server@11.0.0-rc.374))(@trpc/react-query@11.0.0-rc.374(@tanstack/react-query@5.38.0(react@18.3.1))(@trpc/client@11.0.0-rc.374(@trpc/server@11.0.0-rc.374))(@trpc/server@11.0.0-rc.374)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@trpc/server@11.0.0-rc.374)(next@14.2.3(@babel/core@7.23.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.2))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 11.0.0-rc.374(@tanstack/react-query@5.38.0(react@18.3.1))(@trpc/client@11.0.0-rc.374(@trpc/server@11.0.0-rc.374))(@trpc/react-query@11.0.0-rc.374(@tanstack/react-query@5.38.0(react@18.3.1))(@trpc/client@11.0.0-rc.374(@trpc/server@11.0.0-rc.374))(@trpc/server@11.0.0-rc.374)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@trpc/server@11.0.0-rc.374)(next@14.2.3(@babel/core@7.24.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.2))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@trpc/react-query': specifier: next version: 11.0.0-rc.374(@tanstack/react-query@5.38.0(react@18.3.1))(@trpc/client@11.0.0-rc.374(@trpc/server@11.0.0-rc.374))(@trpc/server@11.0.0-rc.374)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -173,7 +173,7 @@ importers: version: 2.8.1(@types/react@18.3.3)(react@18.3.1) next: specifier: ^14.2.3 - version: 14.2.3(@babel/core@7.23.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.2) + version: 14.2.3(@babel/core@7.24.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.2) postcss-preset-mantine: specifier: ^1.15.0 version: 1.15.0(postcss@8.4.38) @@ -432,10 +432,10 @@ importers: version: 0.9.1 next: specifier: ^14.2.3 - version: 14.2.3(@babel/core@7.23.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.2) + version: 14.2.3(@babel/core@7.24.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.2) next-auth: specifier: 5.0.0-beta.18 - version: 5.0.0-beta.18(next@14.2.3(@babel/core@7.23.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.2))(react@18.3.1) + version: 5.0.0-beta.18(next@14.2.3(@babel/core@7.24.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.2))(react@18.3.1) react: specifier: 18.3.1 version: 18.3.1 @@ -1039,6 +1039,10 @@ packages: resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} engines: {node: '>=6.0.0'} + '@ampproject/remapping@2.3.0': + resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} + engines: {node: '>=6.0.0'} + '@auth/core@0.31.0': resolution: {integrity: sha512-UKk3psvA1cRbk4/c9CkpWB8mdWrkKvzw0DmEYRsWolUQytQ2cRqx+hYuV6ZCsngw/xbj9hpmkZmAZEyq2g4fMg==} peerDependencies: @@ -1060,102 +1064,164 @@ packages: resolution: {integrity: sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==} engines: {node: '>=6.9.0'} + '@babel/code-frame@7.24.6': + resolution: {integrity: sha512-ZJhac6FkEd1yhG2AHOmfcXG4ceoLltoCVJjN5XsWN9BifBQr+cHJbWi0h68HZuSORq+3WtJ2z0hwF2NG1b5kcA==} + engines: {node: '>=6.9.0'} + '@babel/compat-data@7.23.5': resolution: {integrity: sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==} engines: {node: '>=6.9.0'} - '@babel/core@7.23.9': - resolution: {integrity: sha512-5q0175NOjddqpvvzU+kDiSOAk4PfdO6FvwCWoQ6RO7rTzEe8vlo+4HVfcnAREhD4npMs0e9uZypjTwzZPCf/cw==} + '@babel/compat-data@7.24.6': + resolution: {integrity: sha512-aC2DGhBq5eEdyXWqrDInSqQjO0k8xtPRf5YylULqx8MCd6jBtzqfta/3ETMRpuKIc5hyswfO80ObyA1MvkCcUQ==} engines: {node: '>=6.9.0'} '@babel/core@7.24.0': resolution: {integrity: sha512-fQfkg0Gjkza3nf0c7/w6Xf34BW4YvzNfACRLmmb7XRLa6XHdR+K9AlJlxneFfWYf6uhOzuzZVTjF/8KfndZANw==} engines: {node: '>=6.9.0'} + '@babel/core@7.24.6': + resolution: {integrity: sha512-qAHSfAdVyFmIvl0VHELib8xar7ONuSHrE2hLnsaWkYNTI68dmi1x8GYDhJjMI/e7XWal9QBlZkwbOnkcw7Z8gQ==} + engines: {node: '>=6.9.0'} + '@babel/generator@7.23.6': resolution: {integrity: sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==} engines: {node: '>=6.9.0'} + '@babel/generator@7.24.6': + resolution: {integrity: sha512-S7m4eNa6YAPJRHmKsLHIDJhNAGNKoWNiWefz1MBbpnt8g9lvMDl1hir4P9bo/57bQEmuwEhnRU/AMWsD0G/Fbg==} + engines: {node: '>=6.9.0'} + '@babel/helper-compilation-targets@7.23.6': resolution: {integrity: sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==} engines: {node: '>=6.9.0'} + '@babel/helper-compilation-targets@7.24.6': + resolution: {integrity: sha512-VZQ57UsDGlX/5fFA7GkVPplZhHsVc+vuErWgdOiysI9Ksnw0Pbbd6pnPiR/mmJyKHgyIW0c7KT32gmhiF+cirg==} + engines: {node: '>=6.9.0'} + '@babel/helper-environment-visitor@7.22.20': resolution: {integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==} engines: {node: '>=6.9.0'} + '@babel/helper-environment-visitor@7.24.6': + resolution: {integrity: sha512-Y50Cg3k0LKLMjxdPjIl40SdJgMB85iXn27Vk/qbHZCFx/o5XO3PSnpi675h1KEmmDb6OFArfd5SCQEQ5Q4H88g==} + engines: {node: '>=6.9.0'} + '@babel/helper-function-name@7.23.0': resolution: {integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==} engines: {node: '>=6.9.0'} + '@babel/helper-function-name@7.24.6': + resolution: {integrity: sha512-xpeLqeeRkbxhnYimfr2PC+iA0Q7ljX/d1eZ9/inYbmfG2jpl8Lu3DyXvpOAnrS5kxkfOWJjioIMQsaMBXFI05w==} + engines: {node: '>=6.9.0'} + '@babel/helper-hoist-variables@7.22.5': resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} engines: {node: '>=6.9.0'} + '@babel/helper-hoist-variables@7.24.6': + resolution: {integrity: sha512-SF/EMrC3OD7dSta1bLJIlrsVxwtd0UpjRJqLno6125epQMJ/kyFmpTT4pbvPbdQHzCHg+biQ7Syo8lnDtbR+uA==} + engines: {node: '>=6.9.0'} + '@babel/helper-module-imports@7.22.15': resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==} engines: {node: '>=6.9.0'} + '@babel/helper-module-imports@7.24.6': + resolution: {integrity: sha512-a26dmxFJBF62rRO9mmpgrfTLsAuyHk4e1hKTUkD/fcMfynt8gvEKwQPQDVxWhca8dHoDck+55DFt42zV0QMw5g==} + engines: {node: '>=6.9.0'} + '@babel/helper-module-transforms@7.23.3': resolution: {integrity: sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/helper-plugin-utils@7.22.5': - resolution: {integrity: sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==} + '@babel/helper-module-transforms@7.24.6': + resolution: {integrity: sha512-Y/YMPm83mV2HJTbX1Qh2sjgjqcacvOlhbzdCCsSlblOKjSYmQqEbO6rUniWQyRo9ncyfjT8hnUjlG06RXDEmcA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-plugin-utils@7.24.6': + resolution: {integrity: sha512-MZG/JcWfxybKwsA9N9PmtF2lOSFSEMVCpIRrbxccZFLJPrJciJdG/UhSh5W96GEteJI2ARqm5UAHxISwRDLSNg==} engines: {node: '>=6.9.0'} '@babel/helper-simple-access@7.22.5': resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} engines: {node: '>=6.9.0'} + '@babel/helper-simple-access@7.24.6': + resolution: {integrity: sha512-nZzcMMD4ZhmB35MOOzQuiGO5RzL6tJbsT37Zx8M5L/i9KSrukGXWTjLe1knIbb/RmxoJE9GON9soq0c0VEMM5g==} + engines: {node: '>=6.9.0'} + '@babel/helper-split-export-declaration@7.22.6': resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} engines: {node: '>=6.9.0'} + '@babel/helper-split-export-declaration@7.24.6': + resolution: {integrity: sha512-CvLSkwXGWnYlF9+J3iZUvwgAxKiYzK3BWuo+mLzD/MDGOZDj7Gq8+hqaOkMxmJwmlv0iu86uH5fdADd9Hxkymw==} + engines: {node: '>=6.9.0'} + '@babel/helper-string-parser@7.23.4': resolution: {integrity: sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==} engines: {node: '>=6.9.0'} + '@babel/helper-string-parser@7.24.6': + resolution: {integrity: sha512-WdJjwMEkmBicq5T9fm/cHND3+UlFa2Yj8ALLgmoSQAJZysYbBjw+azChSGPN4DSPLXOcooGRvDwZWMcF/mLO2Q==} + engines: {node: '>=6.9.0'} + '@babel/helper-validator-identifier@7.22.20': resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} engines: {node: '>=6.9.0'} + '@babel/helper-validator-identifier@7.24.6': + resolution: {integrity: sha512-4yA7s865JHaqUdRbnaxarZREuPTHrjpDT+pXoAZ1yhyo6uFnIEpS8VMu16siFOHDpZNKYv5BObhsB//ycbICyw==} + engines: {node: '>=6.9.0'} + '@babel/helper-validator-option@7.23.5': resolution: {integrity: sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==} engines: {node: '>=6.9.0'} - '@babel/helpers@7.23.9': - resolution: {integrity: sha512-87ICKgU5t5SzOT7sBMfCOZQ2rHjRU+Pcb9BoILMYz600W6DkVRLFBPwQ18gwUVvggqXivaUakpnxWQGbpywbBQ==} + '@babel/helper-validator-option@7.24.6': + resolution: {integrity: sha512-Jktc8KkF3zIkePb48QO+IapbXlSapOW9S+ogZZkcO6bABgYAxtZcjZ/O005111YLf+j4M84uEgwYoidDkXbCkQ==} engines: {node: '>=6.9.0'} '@babel/helpers@7.24.0': resolution: {integrity: sha512-ulDZdc0Aj5uLc5nETsa7EPx2L7rM0YJM8r7ck7U73AXi7qOV44IHHRAYZHY6iU1rr3C5N4NtTmMRUJP6kwCWeA==} engines: {node: '>=6.9.0'} + '@babel/helpers@7.24.6': + resolution: {integrity: sha512-V2PI+NqnyFu1i0GyTd/O/cTpxzQCYioSkUIRmgo7gFEHKKCg5w46+r/A6WeUR1+P3TeQ49dspGPNd/E3n9AnnA==} + engines: {node: '>=6.9.0'} + '@babel/highlight@7.23.4': resolution: {integrity: sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==} engines: {node: '>=6.9.0'} - '@babel/parser@7.23.9': - resolution: {integrity: sha512-9tcKgqKbs3xGJ+NtKF2ndOBBLVwPjl1SHxPQkd36r3Dlirw3xWUeGaTbqr7uGZcTaxkVNwc+03SVP7aCdWrTlA==} - engines: {node: '>=6.0.0'} - hasBin: true + '@babel/highlight@7.24.6': + resolution: {integrity: sha512-2YnuOp4HAk2BsBrJJvYCbItHx0zWscI1C3zgWkz+wDyD9I7GIVrfnLyrR4Y1VR+7p+chAEcrgRQYZAGIKMV7vQ==} + engines: {node: '>=6.9.0'} '@babel/parser@7.24.0': resolution: {integrity: sha512-QuP/FxEAzMSjXygs8v4N9dvdXzEHN4W1oF3PxuWAtPo08UdM17u89RDMgjLn/mlc56iM0HlLmVkO/wgR+rDgHg==} engines: {node: '>=6.0.0'} hasBin: true - '@babel/plugin-transform-react-jsx-self@7.23.3': - resolution: {integrity: sha512-qXRvbeKDSfwnlJnanVRp0SfuWE5DQhwQr5xtLBzp56Wabyo+4CMosF6Kfp+eOD/4FYpql64XVJ2W0pVLlJZxOQ==} + '@babel/parser@7.24.6': + resolution: {integrity: sha512-eNZXdfU35nJC2h24RznROuOpO94h6x8sg9ju0tT9biNtLZ2vuP8SduLqqV+/8+cebSLV9SJEAN5Z3zQbJG/M+Q==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/plugin-transform-react-jsx-self@7.24.6': + resolution: {integrity: sha512-FfZfHXtQ5jYPQsCRyLpOv2GeLIIJhs8aydpNh39vRDjhD411XcfWDni5i7OjP/Rs8GAtTn7sWFFELJSHqkIxYg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-react-jsx-source@7.23.3': - resolution: {integrity: sha512-91RS0MDnAWDNvGC6Wio5XYkyWI39FMFO+JK9+4AlgaTH+yWwVTsw7/sn6LK0lH7c5F+TFkpv/3LfCJ1Ydwof/g==} + '@babel/plugin-transform-react-jsx-source@7.24.6': + resolution: {integrity: sha512-BQTBCXmFRreU3oTUXcGKuPOfXAGb1liNY4AvvFKsOBAJ89RKcTsIrSsnMYkj59fNa66OFKnSa4AJZfy5Y4B9WA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1176,14 +1242,18 @@ packages: resolution: {integrity: sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==} engines: {node: '>=6.9.0'} - '@babel/traverse@7.23.9': - resolution: {integrity: sha512-I/4UJ9vs90OkBtY6iiiTORVMyIhJ4kAVmsKo9KFc8UOxMeUfi2hvtIBsET5u9GizXE6/GFSuKCTNfgCswuEjRg==} + '@babel/template@7.24.6': + resolution: {integrity: sha512-3vgazJlLwNXi9jhrR1ef8qiB65L1RK90+lEQwv4OxveHnqC3BfmnHdgySwRLzf6akhlOYenT+b7AfWq+a//AHw==} engines: {node: '>=6.9.0'} '@babel/traverse@7.24.0': resolution: {integrity: sha512-HfuJlI8qq3dEDmNU5ChzzpZRWq+oxCZQyMzIMEqLho+AQnhMnKQUzH6ydo3RBl/YjPCuk68Y6s0Gx0AeyULiWw==} engines: {node: '>=6.9.0'} + '@babel/traverse@7.24.6': + resolution: {integrity: sha512-OsNjaJwT9Zn8ozxcfoBc+RaHdj3gFmCmYoQLUII1o6ZrUwku0BMg80FoOTPx+Gi6XhcQxAYE4xyjPTo4SxEQqw==} + engines: {node: '>=6.9.0'} + '@babel/types@7.23.9': resolution: {integrity: sha512-dQjSq/7HaSjRM43FFGnv5keM2HsxpmyV1PfaSVm0nzzjwwTmjOe6J4bC8e3+pTEIgHaHj+1ZlLThRJ2auc/w1Q==} engines: {node: '>=6.9.0'} @@ -1192,6 +1262,10 @@ packages: resolution: {integrity: sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==} engines: {node: '>=6.9.0'} + '@babel/types@7.24.6': + resolution: {integrity: sha512-WaMsgi6Q8zMgMth93GvWPXkhAIEobfsIkLTacoVZoK1J0CevIPGYY2Vo5YvJGqyHqXM6P4ppOYGsIRU8MM9pFQ==} + engines: {node: '>=6.9.0'} + '@bcoe/v8-coverage@0.2.3': resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} @@ -1701,6 +1775,10 @@ packages: resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} engines: {node: '>=6.0.0'} + '@jridgewell/gen-mapping@0.3.5': + resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} + engines: {node: '>=6.0.0'} + '@jridgewell/resolve-uri@3.1.2': resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} engines: {node: '>=6.0.0'} @@ -1709,6 +1787,10 @@ packages: resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} engines: {node: '>=6.0.0'} + '@jridgewell/set-array@1.2.1': + resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} + engines: {node: '>=6.0.0'} + '@jridgewell/sourcemap-codec@1.4.15': resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} @@ -2295,8 +2377,8 @@ packages: '@types/babel__template@7.4.4': resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} - '@types/babel__traverse@7.20.5': - resolution: {integrity: sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ==} + '@types/babel__traverse@7.20.6': + resolution: {integrity: sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==} '@types/bcrypt@5.0.2': resolution: {integrity: sha512-6atioO8Y75fNcbmj0G7UjI9lXN2pQ/IGJ2FWT4a/btd0Lk9lQalHLKhkgKVZ3r+spnmWUKfbMi1GEe9wyHQfNQ==} @@ -2484,8 +2566,8 @@ packages: '@videojs/xhr@2.6.0': resolution: {integrity: sha512-7J361GiN1tXpm+gd0xz2QWr3xNWBE+rytvo8J3KuggFaLg+U37gZQ2BuPLcnkfGffy2e+ozY70RHC8jt7zjA6Q==} - '@vitejs/plugin-react@4.2.1': - resolution: {integrity: sha512-oojO9IDc4nCUUi8qIR11KoQm0XFFLIwsRBwHRR4d/88IWghn1y6ckz/bJ8GHDCsYEJee8mDzqtJxh15/cisJNQ==} + '@vitejs/plugin-react@4.3.0': + resolution: {integrity: sha512-KcEbMsn4Dpk+LIbHMj7gDPRKaTMStxxWRkRmxsg/jVdFdJCZWt1SchZcf0M4t8lIKdwwMsEyzhrcOXRrDPtOBw==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: vite: ^4.2.0 || ^5.0.0 @@ -4543,6 +4625,9 @@ packages: picocolors@1.0.0: resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} + picocolors@1.0.1: + resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==} + picomatch@2.3.1: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} @@ -4741,8 +4826,8 @@ packages: react: ^0.14 || ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 react-dom: ^0.14 || ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 - react-refresh@0.14.0: - resolution: {integrity: sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==} + react-refresh@0.14.2: + resolution: {integrity: sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==} engines: {node: '>=0.10.0'} react-remove-scroll-bar@2.3.4: @@ -5714,6 +5799,11 @@ snapshots: '@jridgewell/gen-mapping': 0.3.3 '@jridgewell/trace-mapping': 0.3.25 + '@ampproject/remapping@2.3.0': + dependencies: + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 + '@auth/core@0.31.0': dependencies: '@panva/hkdf': 1.1.1 @@ -5737,27 +5827,14 @@ snapshots: '@babel/highlight': 7.23.4 chalk: 2.4.2 + '@babel/code-frame@7.24.6': + dependencies: + '@babel/highlight': 7.24.6 + picocolors: 1.0.1 + '@babel/compat-data@7.23.5': {} - '@babel/core@7.23.9': - dependencies: - '@ampproject/remapping': 2.2.1 - '@babel/code-frame': 7.23.5 - '@babel/generator': 7.23.6 - '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.9) - '@babel/helpers': 7.23.9 - '@babel/parser': 7.23.9 - '@babel/template': 7.23.9 - '@babel/traverse': 7.23.9 - '@babel/types': 7.23.9 - convert-source-map: 2.0.0 - debug: 4.3.4 - gensync: 1.0.0-beta.2 - json5: 2.2.3 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color + '@babel/compat-data@7.24.6': {} '@babel/core@7.24.0': dependencies: @@ -5779,6 +5856,26 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/core@7.24.6': + dependencies: + '@ampproject/remapping': 2.3.0 + '@babel/code-frame': 7.24.6 + '@babel/generator': 7.24.6 + '@babel/helper-compilation-targets': 7.24.6 + '@babel/helper-module-transforms': 7.24.6(@babel/core@7.24.6) + '@babel/helpers': 7.24.6 + '@babel/parser': 7.24.6 + '@babel/template': 7.24.6 + '@babel/traverse': 7.24.6 + '@babel/types': 7.24.6 + convert-source-map: 2.0.0 + debug: 4.3.4 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + '@babel/generator@7.23.6': dependencies: '@babel/types': 7.23.9 @@ -5786,6 +5883,13 @@ snapshots: '@jridgewell/trace-mapping': 0.3.25 jsesc: 2.5.2 + '@babel/generator@7.24.6': + dependencies: + '@babel/types': 7.24.6 + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 + jsesc: 2.5.2 + '@babel/helper-compilation-targets@7.23.6': dependencies: '@babel/compat-data': 7.23.5 @@ -5794,29 +5898,43 @@ snapshots: lru-cache: 5.1.1 semver: 6.3.1 + '@babel/helper-compilation-targets@7.24.6': + dependencies: + '@babel/compat-data': 7.24.6 + '@babel/helper-validator-option': 7.24.6 + browserslist: 4.23.0 + lru-cache: 5.1.1 + semver: 6.3.1 + '@babel/helper-environment-visitor@7.22.20': {} + '@babel/helper-environment-visitor@7.24.6': {} + '@babel/helper-function-name@7.23.0': dependencies: '@babel/template': 7.23.9 '@babel/types': 7.24.0 + '@babel/helper-function-name@7.24.6': + dependencies: + '@babel/template': 7.24.6 + '@babel/types': 7.24.6 + '@babel/helper-hoist-variables@7.22.5': dependencies: '@babel/types': 7.23.9 + '@babel/helper-hoist-variables@7.24.6': + dependencies: + '@babel/types': 7.24.6 + '@babel/helper-module-imports@7.22.15': dependencies: '@babel/types': 7.24.0 - '@babel/helper-module-transforms@7.23.3(@babel/core@7.23.9)': + '@babel/helper-module-imports@7.24.6': dependencies: - '@babel/core': 7.23.9 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-module-imports': 7.22.15 - '@babel/helper-simple-access': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.6 - '@babel/helper-validator-identifier': 7.22.20 + '@babel/types': 7.24.6 '@babel/helper-module-transforms@7.23.3(@babel/core@7.24.0)': dependencies: @@ -5827,29 +5945,44 @@ snapshots: '@babel/helper-split-export-declaration': 7.22.6 '@babel/helper-validator-identifier': 7.22.20 - '@babel/helper-plugin-utils@7.22.5': {} + '@babel/helper-module-transforms@7.24.6(@babel/core@7.24.6)': + dependencies: + '@babel/core': 7.24.6 + '@babel/helper-environment-visitor': 7.24.6 + '@babel/helper-module-imports': 7.24.6 + '@babel/helper-simple-access': 7.24.6 + '@babel/helper-split-export-declaration': 7.24.6 + '@babel/helper-validator-identifier': 7.24.6 + + '@babel/helper-plugin-utils@7.24.6': {} '@babel/helper-simple-access@7.22.5': dependencies: '@babel/types': 7.24.0 + '@babel/helper-simple-access@7.24.6': + dependencies: + '@babel/types': 7.24.6 + '@babel/helper-split-export-declaration@7.22.6': dependencies: '@babel/types': 7.23.9 + '@babel/helper-split-export-declaration@7.24.6': + dependencies: + '@babel/types': 7.24.6 + '@babel/helper-string-parser@7.23.4': {} + '@babel/helper-string-parser@7.24.6': {} + '@babel/helper-validator-identifier@7.22.20': {} + '@babel/helper-validator-identifier@7.24.6': {} + '@babel/helper-validator-option@7.23.5': {} - '@babel/helpers@7.23.9': - dependencies: - '@babel/template': 7.23.9 - '@babel/traverse': 7.23.9 - '@babel/types': 7.24.0 - transitivePeerDependencies: - - supports-color + '@babel/helper-validator-option@7.24.6': {} '@babel/helpers@7.24.0': dependencies: @@ -5859,29 +5992,41 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/helpers@7.24.6': + dependencies: + '@babel/template': 7.24.6 + '@babel/types': 7.24.6 + '@babel/highlight@7.23.4': dependencies: '@babel/helper-validator-identifier': 7.22.20 chalk: 2.4.2 js-tokens: 4.0.0 - '@babel/parser@7.23.9': + '@babel/highlight@7.24.6': dependencies: - '@babel/types': 7.24.0 + '@babel/helper-validator-identifier': 7.24.6 + chalk: 2.4.2 + js-tokens: 4.0.0 + picocolors: 1.0.1 '@babel/parser@7.24.0': dependencies: '@babel/types': 7.24.0 - '@babel/plugin-transform-react-jsx-self@7.23.3(@babel/core@7.23.9)': + '@babel/parser@7.24.6': dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/types': 7.24.6 - '@babel/plugin-transform-react-jsx-source@7.23.3(@babel/core@7.23.9)': + '@babel/plugin-transform-react-jsx-self@7.24.6(@babel/core@7.24.6)': dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.6 + '@babel/helper-plugin-utils': 7.24.6 + + '@babel/plugin-transform-react-jsx-source@7.24.6(@babel/core@7.24.6)': + dependencies: + '@babel/core': 7.24.6 + '@babel/helper-plugin-utils': 7.24.6 '@babel/runtime-corejs3@7.23.9': dependencies: @@ -5904,20 +6049,11 @@ snapshots: '@babel/parser': 7.24.0 '@babel/types': 7.24.0 - '@babel/traverse@7.23.9': + '@babel/template@7.24.6': dependencies: - '@babel/code-frame': 7.23.5 - '@babel/generator': 7.23.6 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-function-name': 7.23.0 - '@babel/helper-hoist-variables': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.6 - '@babel/parser': 7.24.0 - '@babel/types': 7.24.0 - debug: 4.3.4 - globals: 11.12.0 - transitivePeerDependencies: - - supports-color + '@babel/code-frame': 7.24.6 + '@babel/parser': 7.24.6 + '@babel/types': 7.24.6 '@babel/traverse@7.24.0': dependencies: @@ -5934,6 +6070,21 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/traverse@7.24.6': + dependencies: + '@babel/code-frame': 7.24.6 + '@babel/generator': 7.24.6 + '@babel/helper-environment-visitor': 7.24.6 + '@babel/helper-function-name': 7.24.6 + '@babel/helper-hoist-variables': 7.24.6 + '@babel/helper-split-export-declaration': 7.24.6 + '@babel/parser': 7.24.6 + '@babel/types': 7.24.6 + debug: 4.3.4 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + '@babel/types@7.23.9': dependencies: '@babel/helper-string-parser': 7.23.4 @@ -5946,6 +6097,12 @@ snapshots: '@babel/helper-validator-identifier': 7.22.20 to-fast-properties: 2.0.0 + '@babel/types@7.24.6': + dependencies: + '@babel/helper-string-parser': 7.24.6 + '@babel/helper-validator-identifier': 7.24.6 + to-fast-properties: 2.0.0 + '@bcoe/v8-coverage@0.2.3': {} '@colors/colors@1.6.0': {} @@ -6271,10 +6428,18 @@ snapshots: '@jridgewell/sourcemap-codec': 1.4.15 '@jridgewell/trace-mapping': 0.3.25 + '@jridgewell/gen-mapping@0.3.5': + dependencies: + '@jridgewell/set-array': 1.2.1 + '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/trace-mapping': 0.3.25 + '@jridgewell/resolve-uri@3.1.2': {} '@jridgewell/set-array@1.1.2': {} + '@jridgewell/set-array@1.2.1': {} + '@jridgewell/sourcemap-codec@1.4.15': {} '@jridgewell/trace-mapping@0.3.25': @@ -6520,10 +6685,10 @@ snapshots: '@tanstack/react-query': 5.38.0(react@18.3.1) react: 18.3.1 - '@tanstack/react-query-next-experimental@5.37.1(@tanstack/react-query@5.38.0(react@18.3.1))(next@14.2.3(@babel/core@7.23.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.2))(react@18.3.1)': + '@tanstack/react-query-next-experimental@5.37.1(@tanstack/react-query@5.38.0(react@18.3.1))(next@14.2.3(@babel/core@7.24.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.2))(react@18.3.1)': dependencies: '@tanstack/react-query': 5.38.0(react@18.3.1) - next: 14.2.3(@babel/core@7.23.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.2) + next: 14.2.3(@babel/core@7.24.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.2) react: 18.3.1 '@tanstack/react-query@5.38.0(react@18.3.1)': @@ -6757,11 +6922,11 @@ snapshots: dependencies: '@trpc/server': 11.0.0-rc.374 - '@trpc/next@11.0.0-rc.374(@tanstack/react-query@5.38.0(react@18.3.1))(@trpc/client@11.0.0-rc.374(@trpc/server@11.0.0-rc.374))(@trpc/react-query@11.0.0-rc.374(@tanstack/react-query@5.38.0(react@18.3.1))(@trpc/client@11.0.0-rc.374(@trpc/server@11.0.0-rc.374))(@trpc/server@11.0.0-rc.374)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@trpc/server@11.0.0-rc.374)(next@14.2.3(@babel/core@7.23.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.2))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@trpc/next@11.0.0-rc.374(@tanstack/react-query@5.38.0(react@18.3.1))(@trpc/client@11.0.0-rc.374(@trpc/server@11.0.0-rc.374))(@trpc/react-query@11.0.0-rc.374(@tanstack/react-query@5.38.0(react@18.3.1))(@trpc/client@11.0.0-rc.374(@trpc/server@11.0.0-rc.374))(@trpc/server@11.0.0-rc.374)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@trpc/server@11.0.0-rc.374)(next@14.2.3(@babel/core@7.24.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.2))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@trpc/client': 11.0.0-rc.374(@trpc/server@11.0.0-rc.374) '@trpc/server': 11.0.0-rc.374 - next: 14.2.3(@babel/core@7.23.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.2) + next: 14.2.3(@babel/core@7.24.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.2) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: @@ -6823,24 +6988,24 @@ snapshots: '@types/babel__core@7.20.5': dependencies: - '@babel/parser': 7.23.9 - '@babel/types': 7.23.9 + '@babel/parser': 7.24.6 + '@babel/types': 7.24.6 '@types/babel__generator': 7.6.8 '@types/babel__template': 7.4.4 - '@types/babel__traverse': 7.20.5 + '@types/babel__traverse': 7.20.6 '@types/babel__generator@7.6.8': dependencies: - '@babel/types': 7.24.0 + '@babel/types': 7.24.6 '@types/babel__template@7.4.4': dependencies: - '@babel/parser': 7.24.0 - '@babel/types': 7.24.0 + '@babel/parser': 7.24.6 + '@babel/types': 7.24.6 - '@types/babel__traverse@7.20.5': + '@types/babel__traverse@7.20.6': dependencies: - '@babel/types': 7.24.0 + '@babel/types': 7.24.6 '@types/bcrypt@5.0.2': dependencies: @@ -7077,13 +7242,13 @@ snapshots: global: 4.4.0 is-function: 1.0.2 - '@vitejs/plugin-react@4.2.1(vite@5.2.6(@types/node@20.12.12)(sass@1.77.2)(sugarss@4.0.1))': + '@vitejs/plugin-react@4.3.0(vite@5.2.6(@types/node@20.12.12)(sass@1.77.2)(sugarss@4.0.1))': dependencies: - '@babel/core': 7.23.9 - '@babel/plugin-transform-react-jsx-self': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-react-jsx-source': 7.23.3(@babel/core@7.23.9) + '@babel/core': 7.24.6 + '@babel/plugin-transform-react-jsx-self': 7.24.6(@babel/core@7.24.6) + '@babel/plugin-transform-react-jsx-source': 7.24.6(@babel/core@7.24.6) '@types/babel__core': 7.20.5 - react-refresh: 0.14.0 + react-refresh: 0.14.2 vite: 5.2.6(@types/node@20.12.12)(sass@1.77.2)(sugarss@4.0.1) transitivePeerDependencies: - supports-color @@ -9187,10 +9352,10 @@ snapshots: netmask@2.0.2: {} - next-auth@5.0.0-beta.18(next@14.2.3(@babel/core@7.23.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.2))(react@18.3.1): + next-auth@5.0.0-beta.18(next@14.2.3(@babel/core@7.24.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.2))(react@18.3.1): dependencies: '@auth/core': 0.31.0 - next: 14.2.3(@babel/core@7.23.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.2) + next: 14.2.3(@babel/core@7.24.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.2) react: 18.3.1 next-international@1.2.4: @@ -9201,7 +9366,7 @@ snapshots: next-tick@1.1.0: {} - next@14.2.3(@babel/core@7.23.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.2): + next@14.2.3(@babel/core@7.24.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.2): dependencies: '@next/env': 14.2.3 '@swc/helpers': 0.5.5 @@ -9211,7 +9376,7 @@ snapshots: postcss: 8.4.31 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - styled-jsx: 5.1.1(@babel/core@7.23.9)(react@18.3.1) + styled-jsx: 5.1.1(@babel/core@7.24.6)(react@18.3.1) optionalDependencies: '@next/swc-darwin-arm64': 14.2.3 '@next/swc-darwin-x64': 14.2.3 @@ -9460,6 +9625,8 @@ snapshots: picocolors@1.0.0: {} + picocolors@1.0.1: {} + picomatch@2.3.1: {} pkcs7@1.0.4: @@ -9716,7 +9883,7 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - react-refresh@0.14.0: {} + react-refresh@0.14.2: {} react-remove-scroll-bar@2.3.4(@types/react@18.3.3)(react@18.3.1): dependencies: @@ -10115,12 +10282,12 @@ snapshots: dependencies: js-tokens: 8.0.3 - styled-jsx@5.1.1(@babel/core@7.23.9)(react@18.3.1): + styled-jsx@5.1.1(@babel/core@7.24.6)(react@18.3.1): dependencies: client-only: 0.0.1 react: 18.3.1 optionalDependencies: - '@babel/core': 7.23.9 + '@babel/core': 7.24.6 sugarss@4.0.1(postcss@8.4.38): dependencies: @@ -10391,7 +10558,7 @@ snapshots: dependencies: browserslist: 4.23.0 escalade: 3.1.2 - picocolors: 1.0.0 + picocolors: 1.0.1 update-check@1.5.4: dependencies: From d57b771a177511b878c0eada1d3002b52acdc6fb Mon Sep 17 00:00:00 2001 From: Meier Lukas Date: Sun, 26 May 2024 17:13:34 +0200 Subject: [PATCH 09/30] feat: add pi hole summary integration (#521) * feat: add pi hole summary integration * feat: add pi hole summary widget * fix: type issues with integrations and integrationIds * feat: add middleware for integrations and improve cache redis channel * feat: add error boundary for widgets * fix: broken lock file * fix: format format issues * fix: typecheck issue * fix: deepsource issues * fix: widget sandbox without error boundary * chore: address pull request feedback * chore: remove todo comment and created issue * fix: format issues * fix: deepsource issue --- apps/nextjs/package.json | 2 + .../app/[locale]/widgets/[kind]/_content.tsx | 40 +++-- .../components/board/items/item-actions.tsx | 8 +- .../src/components/board/sections/content.tsx | 67 ++++++-- packages/api/package.json | 1 + packages/api/src/middlewares/integration.ts | 76 +++++++++ packages/api/src/router/board.ts | 17 +- packages/api/src/router/integration.ts | 4 +- packages/api/src/router/test/board.spec.ts | 17 +- packages/api/src/router/widgets/dns-hole.ts | 32 ++++ packages/api/src/router/widgets/index.ts | 2 + packages/common/src/index.ts | 1 + packages/common/src/number.ts | 17 ++ packages/definitions/src/widget.ts | 2 +- packages/integrations/index.ts | 1 + packages/integrations/package.json | 41 +++++ packages/integrations/src/base/integration.ts | 22 +++ packages/integrations/src/base/types.ts | 6 + packages/integrations/src/index.ts | 1 + .../dns-hole-summary-integration.ts | 5 + .../dns-hole-summary-types.ts | 6 + .../src/pi-hole/pi-hole-integration.ts | 31 ++++ .../integrations/src/pi-hole/pi-hole-types.ts | 9 ++ packages/integrations/src/types.ts | 1 + packages/integrations/tsconfig.json | 8 + packages/redis/src/index.ts | 2 + packages/redis/src/lib/channel.ts | 55 ++++++- packages/translation/src/lang/en.ts | 40 ++++- packages/validation/src/shared.ts | 2 +- packages/widgets/package.json | 4 +- .../src/_inputs/widget-multiselect-input.tsx | 12 +- .../src/_inputs/widget-select-input.tsx | 22 ++- packages/widgets/src/definition.ts | 29 ++-- .../src/dns-hole/summary/component.tsx | 146 ++++++++++++++++++ .../widgets/src/dns-hole/summary/index.ts | 29 ++++ .../src/dns-hole/summary/serverData.ts | 24 +++ .../widgets/src/errors/base-component.tsx | 36 +++++ packages/widgets/src/errors/base.ts | 11 ++ packages/widgets/src/errors/component.tsx | 42 +++++ packages/widgets/src/errors/index.ts | 2 + .../src/errors/no-integration-selected.tsx | 19 +++ packages/widgets/src/index.tsx | 2 + .../widgets/src/modals/widget-edit-modal.tsx | 5 +- .../widgets/src/widget-integration-select.tsx | 15 +- pnpm-lock.yaml | 112 ++++++++++---- 45 files changed, 902 insertions(+), 124 deletions(-) create mode 100644 packages/api/src/middlewares/integration.ts create mode 100644 packages/api/src/router/widgets/dns-hole.ts create mode 100644 packages/common/src/number.ts create mode 100644 packages/integrations/index.ts create mode 100644 packages/integrations/package.json create mode 100644 packages/integrations/src/base/integration.ts create mode 100644 packages/integrations/src/base/types.ts create mode 100644 packages/integrations/src/index.ts create mode 100644 packages/integrations/src/interfaces/dns-hole-summary/dns-hole-summary-integration.ts create mode 100644 packages/integrations/src/interfaces/dns-hole-summary/dns-hole-summary-types.ts create mode 100644 packages/integrations/src/pi-hole/pi-hole-integration.ts create mode 100644 packages/integrations/src/pi-hole/pi-hole-types.ts create mode 100644 packages/integrations/src/types.ts create mode 100644 packages/integrations/tsconfig.json create mode 100644 packages/widgets/src/dns-hole/summary/component.tsx create mode 100644 packages/widgets/src/dns-hole/summary/index.ts create mode 100644 packages/widgets/src/dns-hole/summary/serverData.ts create mode 100644 packages/widgets/src/errors/base-component.tsx create mode 100644 packages/widgets/src/errors/base.ts create mode 100644 packages/widgets/src/errors/component.tsx create mode 100644 packages/widgets/src/errors/index.ts create mode 100644 packages/widgets/src/errors/no-integration-selected.tsx diff --git a/apps/nextjs/package.json b/apps/nextjs/package.json index 5c78e7643..529e259ca 100644 --- a/apps/nextjs/package.json +++ b/apps/nextjs/package.json @@ -21,6 +21,7 @@ "@homarr/definitions": "workspace:^0.1.0", "@homarr/form": "workspace:^0.1.0", "@homarr/gridstack": "^1.0.0", + "@homarr/integrations": "workspace:^0.1.0", "@homarr/log": "workspace:^", "@homarr/modals": "workspace:^0.1.0", "@homarr/notifications": "workspace:^0.1.0", @@ -55,6 +56,7 @@ "postcss-preset-mantine": "^1.15.0", "react": "18.3.1", "react-dom": "18.3.1", + "react-error-boundary": "^4.0.13", "sass": "^1.77.2", "superjson": "2.2.1", "use-deep-compare-effect": "^1.8.1" diff --git a/apps/nextjs/src/app/[locale]/widgets/[kind]/_content.tsx b/apps/nextjs/src/app/[locale]/widgets/[kind]/_content.tsx index 9a2a1f100..d38c868a2 100644 --- a/apps/nextjs/src/app/[locale]/widgets/[kind]/_content.tsx +++ b/apps/nextjs/src/app/[locale]/widgets/[kind]/_content.tsx @@ -3,21 +3,24 @@ import { useCallback, useMemo, useState } from "react"; import { ActionIcon, Affix, Card } from "@mantine/core"; import { IconDimensions, IconPencil, IconToggleLeft, IconToggleRight } from "@tabler/icons-react"; +import { QueryErrorResetBoundary } from "@tanstack/react-query"; +import { ErrorBoundary } from "react-error-boundary"; import type { IntegrationKind, WidgetKind } from "@homarr/definitions"; import { useModalAction } from "@homarr/modals"; import { showSuccessNotification } from "@homarr/notifications"; import { useScopedI18n } from "@homarr/translation/client"; -import type { BoardItemAdvancedOptions, BoardItemIntegration } from "@homarr/validation"; +import type { BoardItemAdvancedOptions } from "@homarr/validation"; import { loadWidgetDynamic, reduceWidgetOptionsWithDefaultValues, WidgetEditModal, widgetImports, } from "@homarr/widgets"; +import { WidgetError } from "@homarr/widgets/errors"; -import { PreviewDimensionsModal } from "./_dimension-modal"; import type { Dimensions } from "./_dimension-modal"; +import { PreviewDimensionsModal } from "./_dimension-modal"; interface WidgetPreviewPageContentProps { kind: WidgetKind; @@ -41,11 +44,11 @@ export const WidgetPreviewPageContent = ({ kind, integrationData }: WidgetPrevie }); const [state, setState] = useState<{ options: Record; - integrations: BoardItemIntegration[]; + integrationIds: string[]; advancedOptions: BoardItemAdvancedOptions; }>({ options: reduceWidgetOptionsWithDefaultValues(kind, {}), - integrations: [], + integrationIds: [], advancedOptions: { customCssClasses: [], }, @@ -86,17 +89,26 @@ export const WidgetPreviewPageContent = ({ kind, integrationData }: WidgetPrevie return ( <> = 96 ? undefined : 4}> - integrationData.find((integration) => integration.id === stateIntegration.id)!, + + {({ reset }) => ( + ( + + )} + > + + )} - width={dimensions.width} - height={dimensions.height} - isEditMode={editMode} - boardId={undefined} - itemId={undefined} - /> + diff --git a/apps/nextjs/src/components/board/items/item-actions.tsx b/apps/nextjs/src/components/board/items/item-actions.tsx index 309dab8bd..2246853ea 100644 --- a/apps/nextjs/src/components/board/items/item-actions.tsx +++ b/apps/nextjs/src/components/board/items/item-actions.tsx @@ -2,7 +2,7 @@ import { useCallback } from "react"; import { createId } from "@homarr/db/client"; import type { WidgetKind } from "@homarr/definitions"; -import type { BoardItemAdvancedOptions, BoardItemIntegration } from "@homarr/validation"; +import type { BoardItemAdvancedOptions } from "@homarr/validation"; import type { EmptySection, Item } from "~/app/[locale]/boards/_types"; import { useUpdateBoard } from "~/app/[locale]/boards/(content)/_client"; @@ -38,7 +38,7 @@ interface UpdateItemAdvancedOptions { interface UpdateItemIntegrations { itemId: string; - newIntegrations: BoardItemIntegration[]; + newIntegrations: string[]; } interface CreateItem { @@ -63,7 +63,7 @@ export const useItemActions = () => { options: {}, width: 1, height: 1, - integrations: [], + integrationIds: [], advancedOptions: { customCssClasses: [], }, @@ -157,7 +157,7 @@ export const useItemActions = () => { if (item.id !== itemId) return item; return { ...item, - ...("integrations" in item ? { integrations: newIntegrations } : {}), + ...("integrationIds" in item ? { integrationIds: newIntegrations } : {}), }; }), }; diff --git a/apps/nextjs/src/components/board/sections/content.tsx b/apps/nextjs/src/components/board/sections/content.tsx index cdd71266f..487207eb4 100644 --- a/apps/nextjs/src/components/board/sections/content.tsx +++ b/apps/nextjs/src/components/board/sections/content.tsx @@ -2,11 +2,13 @@ // Ignored because of gridstack attributes import type { RefObject } from "react"; -import { useMemo } from "react"; +import { useEffect, useMemo, useRef } from "react"; import { ActionIcon, Card, Menu } from "@mantine/core"; import { useElementSize } from "@mantine/hooks"; import { IconDotsVertical, IconLayoutKanban, IconPencil, IconTrash } from "@tabler/icons-react"; +import { QueryErrorResetBoundary } from "@tanstack/react-query"; import combineClasses from "clsx"; +import { ErrorBoundary } from "react-error-boundary"; import { clientApi } from "@homarr/api/client"; import { useConfirmModal, useModalAction } from "@homarr/modals"; @@ -18,6 +20,7 @@ import { WidgetEditModal, widgetImports, } from "@homarr/widgets"; +import { WidgetError } from "@homarr/widgets/errors"; import type { Item } from "~/app/[locale]/boards/_types"; import { useEditMode, useRequiredBoard } from "~/app/[locale]/boards/(content)/_context"; @@ -104,22 +107,43 @@ const BoardItemContent = ({ item, ...dimensions }: ItemContentProps) => { if (!serverData?.isReady) return null; return ( - <> - - - + + {({ reset }) => ( + ( + <> + + + + )} + > + + + + )} + ); }; -const ItemMenu = ({ offset, item }: { offset: number; item: Item }) => { +const ItemMenu = ({ + offset, + item, + resetErrorBoundary, +}: { + offset: number; + item: Item; + resetErrorBoundary?: () => void; +}) => { + const refResetErrorBoundaryOnNextRender = useRef(false); const tItem = useScopedI18n("item"); const t = useI18n(); const { openModal } = useModalAction(WidgetEditModal); @@ -129,6 +153,14 @@ const ItemMenu = ({ offset, item }: { offset: number; item: Item }) => { const { data: integrationData, isPending } = clientApi.integration.all.useQuery(); const currentDefinition = useMemo(() => widgetImports[item.kind].definition, [item.kind]); + // Reset error boundary on next render if item has been edited + useEffect(() => { + if (refResetErrorBoundaryOnNextRender.current) { + resetErrorBoundary?.(); + refResetErrorBoundaryOnNextRender.current = false; + } + }, [item, resetErrorBoundary]); + if (!isEditMode || isPending) return null; const openEditModal = () => { @@ -137,9 +169,9 @@ const ItemMenu = ({ offset, item }: { offset: number; item: Item }) => { value: { advancedOptions: item.advancedOptions, options: item.options, - integrations: item.integrations, + integrationIds: item.integrationIds, }, - onSuccessfulEdit: ({ options, integrations, advancedOptions }) => { + onSuccessfulEdit: ({ options, integrationIds, advancedOptions }) => { updateItemOptions({ itemId: item.id, newOptions: options, @@ -150,8 +182,9 @@ const ItemMenu = ({ offset, item }: { offset: number; item: Item }) => { }); updateItemIntegrations({ itemId: item.id, - newIntegrations: integrations, + newIntegrations: integrationIds, }); + refResetErrorBoundaryOnNextRender.current = true; }, integrationData: (integrationData ?? []).filter( (integration) => diff --git a/packages/api/package.json b/packages/api/package.json index 52fd9fb21..3fad704f3 100644 --- a/packages/api/package.json +++ b/packages/api/package.json @@ -23,6 +23,7 @@ "@homarr/common": "workspace:^0.1.0", "@homarr/db": "workspace:^0.1.0", "@homarr/definitions": "workspace:^0.1.0", + "@homarr/integrations": "workspace:^0.1.0", "@homarr/log": "workspace:^", "@homarr/redis": "workspace:^0.1.0", "@homarr/tasks": "workspace:^0.1.0", diff --git a/packages/api/src/middlewares/integration.ts b/packages/api/src/middlewares/integration.ts new file mode 100644 index 000000000..8f23903fc --- /dev/null +++ b/packages/api/src/middlewares/integration.ts @@ -0,0 +1,76 @@ +import { TRPCError } from "@trpc/server"; + +import { and, eq, inArray } from "@homarr/db"; +import { integrations } from "@homarr/db/schema/sqlite"; +import type { IntegrationKind } from "@homarr/definitions"; +import { z } from "@homarr/validation"; + +import { decryptSecret } from "../router/integration"; +import { publicProcedure } from "../trpc"; + +export const createOneIntegrationMiddleware = (...kinds: TKind[]) => { + return publicProcedure.input(z.object({ integrationId: z.string() })).use(async ({ input, ctx, next }) => { + const integration = await ctx.db.query.integrations.findFirst({ + where: and(eq(integrations.id, input.integrationId), inArray(integrations.kind, kinds)), + with: { + secrets: true, + }, + }); + + if (!integration) { + throw new TRPCError({ + code: "NOT_FOUND", + message: `Integration with id ${input.integrationId} not found or not of kinds ${kinds.join(",")}`, + }); + } + + const { secrets, kind, ...rest } = integration; + + return next({ + ctx: { + integration: { + ...rest, + kind: kind as TKind, + decryptedSecrets: secrets.map((secret) => ({ + ...secret, + value: decryptSecret(secret.value), + })), + }, + }, + }); + }); +}; + +export const createManyIntegrationMiddleware = (...kinds: TKind[]) => { + return publicProcedure + .input(z.object({ integrationIds: z.array(z.string()).min(1) })) + .use(async ({ ctx, input, next }) => { + const dbIntegrations = await ctx.db.query.integrations.findMany({ + where: and(inArray(integrations.id, input.integrationIds), inArray(integrations.kind, kinds)), + with: { + secrets: true, + }, + }); + + const offset = input.integrationIds.length - dbIntegrations.length; + if (offset !== 0) { + throw new TRPCError({ + code: "NOT_FOUND", + message: `${offset} of the specified integrations not found or not of kinds ${kinds.join(",")}`, + }); + } + + return next({ + ctx: { + integrations: dbIntegrations.map(({ secrets, kind, ...rest }) => ({ + ...rest, + kind: kind as TKind, + decryptedSecrets: secrets.map((secret) => ({ + ...secret, + value: decryptSecret(secret.value), + })), + })), + }, + }); + }); +}; diff --git a/packages/api/src/router/board.ts b/packages/api/src/router/board.ts index c37e92c57..0776fcb41 100644 --- a/packages/api/src/router/board.ts +++ b/packages/api/src/router/board.ts @@ -236,15 +236,15 @@ export const boardRouter = createTRPCRouter({ ); } - const inputIntegrationRelations = inputItems.flatMap(({ integrations, id: itemId }) => - integrations.map((integration) => ({ - integrationId: integration.id, + const inputIntegrationRelations = inputItems.flatMap(({ integrationIds, id: itemId }) => + integrationIds.map((integrationId) => ({ + integrationId, itemId, })), ); - const dbIntegrationRelations = dbItems.flatMap(({ integrations, id: itemId }) => - integrations.map((integration) => ({ - integrationId: integration.id, + const dbIntegrationRelations = dbItems.flatMap(({ integrationIds, id: itemId }) => + integrationIds.map((integrationId) => ({ + integrationId, itemId, })), ); @@ -277,6 +277,7 @@ export const boardRouter = createTRPCRouter({ xOffset: item.xOffset, yOffset: item.yOffset, options: superjson.stringify(item.options), + advancedOptions: superjson.stringify(item.advancedOptions), sectionId: item.sectionId, }) .where(eq(items.id, item.id)); @@ -514,9 +515,9 @@ const getFullBoardWithWhereAsync = async (db: Database, where: SQL, use sections: sections.map((section) => parseSection({ ...section, - items: section.items.map((item) => ({ + items: section.items.map(({ integrations: itemIntegrations, ...item }) => ({ ...item, - integrations: item.integrations.map((item) => item.integration), + integrationIds: itemIntegrations.map((item) => item.integration.id), advancedOptions: superjson.parse(item.advancedOptions), options: superjson.parse>(item.options), })), diff --git a/packages/api/src/router/integration.ts b/packages/api/src/router/integration.ts index ae807ef97..92fb2fcb9 100644 --- a/packages/api/src/router/integration.ts +++ b/packages/api/src/router/integration.ts @@ -210,7 +210,6 @@ export const integrationRouter = createTRPCRouter({ const algorithm = "aes-256-cbc"; //Using AES encryption const key = Buffer.from("1d71cceced68159ba59a277d056a66173613052cbeeccbfbd15ab1c909455a4d", "hex"); // TODO: generate with const data = crypto.randomBytes(32).toString('hex') -//Encrypting text export function encryptSecret(text: string): `${string}.${string}` { const initializationVector = crypto.randomBytes(16); const cipher = crypto.createCipheriv(algorithm, Buffer.from(key), initializationVector); @@ -219,8 +218,7 @@ export function encryptSecret(text: string): `${string}.${string}` { return `${encrypted.toString("hex")}.${initializationVector.toString("hex")}`; } -// Decrypting text -function decryptSecret(value: `${string}.${string}`) { +export function decryptSecret(value: `${string}.${string}`) { const [data, dataIv] = value.split(".") as [string, string]; const initializationVector = Buffer.from(dataIv, "hex"); const encryptedText = Buffer.from(data, "hex"); diff --git a/packages/api/src/router/test/board.spec.ts b/packages/api/src/router/test/board.spec.ts index 11ac8c913..e5afca76e 100644 --- a/packages/api/src/router/test/board.spec.ts +++ b/packages/api/src/router/test/board.spec.ts @@ -659,7 +659,7 @@ describe("saveBoard should save full board", () => { id: createId(), kind: "clock", options: { is24HourFormat: true }, - integrations: [], + integrationIds: [], height: 1, width: 1, xOffset: 0, @@ -720,7 +720,7 @@ describe("saveBoard should save full board", () => { id: itemId, kind: "clock", options: { is24HourFormat: true }, - integrations: [anotherIntegration], + integrationIds: [anotherIntegration.id], height: 1, width: 1, xOffset: 0, @@ -834,7 +834,7 @@ describe("saveBoard should save full board", () => { id: newItemId, kind: "clock", options: { is24HourFormat: true }, - integrations: [], + integrationIds: [], height: 1, width: 1, xOffset: 3, @@ -903,7 +903,7 @@ describe("saveBoard should save full board", () => { id: itemId, kind: "clock", options: { is24HourFormat: true }, - integrations: [integration], + integrationIds: [integration.id], height: 1, width: 1, xOffset: 0, @@ -1017,7 +1017,7 @@ describe("saveBoard should save full board", () => { id: itemId, kind: "clock", options: { is24HourFormat: false }, - integrations: [], + integrationIds: [], height: 3, width: 2, xOffset: 7, @@ -1245,10 +1245,9 @@ const expectInputToBeFullBoardWithName = ( if (firstItem.kind === "clock") { expect(firstItem.options.is24HourFormat).toBe(true); } - expect(firstItem.integrations.length).toBe(1); - const firstIntegration = expectToBeDefined(firstItem.integrations[0]); - expect(firstIntegration.id).toBe(props.integrationId); - expect(firstIntegration.kind).toBe("adGuardHome"); + expect(firstItem.integrationIds.length).toBe(1); + const firstIntegration = expectToBeDefined(firstItem.integrationIds[0]); + expect(firstIntegration).toBe(props.integrationId); }; const createFullBoardAsync = async (db: Database, name: string) => { diff --git a/packages/api/src/router/widgets/dns-hole.ts b/packages/api/src/router/widgets/dns-hole.ts new file mode 100644 index 000000000..a163713c3 --- /dev/null +++ b/packages/api/src/router/widgets/dns-hole.ts @@ -0,0 +1,32 @@ +import { TRPCError } from "@trpc/server"; + +import { PiHoleIntegration } from "@homarr/integrations"; +import type { DnsHoleSummary } from "@homarr/integrations/types"; +import { logger } from "@homarr/log"; +import { createCacheChannel } from "@homarr/redis"; + +import { createOneIntegrationMiddleware } from "../../middlewares/integration"; +import { createTRPCRouter, publicProcedure } from "../../trpc"; + +export const dnsHoleRouter = createTRPCRouter({ + summary: publicProcedure.unstable_concat(createOneIntegrationMiddleware("piHole")).query(async ({ ctx }) => { + const cache = createCacheChannel(`dns-hole-summary:${ctx.integration.id}`); + + const { data } = await cache.consumeAsync(async () => { + const client = new PiHoleIntegration(ctx.integration); + + return await client.getSummaryAsync().catch((err) => { + logger.error("dns-hole router - ", err); + throw new TRPCError({ + code: "INTERNAL_SERVER_ERROR", + message: `Failed to fetch DNS Hole summary for ${ctx.integration.name} (${ctx.integration.id})`, + }); + }); + }); + + return { + ...data, + integrationId: ctx.integration.id, + }; + }), +}); diff --git a/packages/api/src/router/widgets/index.ts b/packages/api/src/router/widgets/index.ts index ecd39a0a8..f2bd45078 100644 --- a/packages/api/src/router/widgets/index.ts +++ b/packages/api/src/router/widgets/index.ts @@ -1,8 +1,10 @@ import { createTRPCRouter } from "../../trpc"; +import { dnsHoleRouter } from "./dns-hole"; import { notebookRouter } from "./notebook"; import { weatherRouter } from "./weather"; export const widgetRouter = createTRPCRouter({ notebook: notebookRouter, weather: weatherRouter, + dnsHole: dnsHoleRouter, }); diff --git a/packages/common/src/index.ts b/packages/common/src/index.ts index 1089f3537..5ee205da0 100644 --- a/packages/common/src/index.ts +++ b/packages/common/src/index.ts @@ -3,3 +3,4 @@ export * from "./string"; export * from "./cookie"; export * from "./array"; export * from "./stopwatch"; +export * from "./number"; diff --git a/packages/common/src/number.ts b/packages/common/src/number.ts new file mode 100644 index 000000000..5341e5004 --- /dev/null +++ b/packages/common/src/number.ts @@ -0,0 +1,17 @@ +const ranges = [ + { divider: 1e18, suffix: "E" }, + { divider: 1e15, suffix: "P" }, + { divider: 1e12, suffix: "T" }, + { divider: 1e9, suffix: "G" }, + { divider: 1e6, suffix: "M" }, + { divider: 1e3, suffix: "k" }, +]; + +export const formatNumber = (value: number, decimalPlaces: number) => { + for (const range of ranges) { + if (value < range.divider) continue; + + return (value / range.divider).toFixed(decimalPlaces) + range.suffix; + } + return value.toFixed(decimalPlaces); +}; diff --git a/packages/definitions/src/widget.ts b/packages/definitions/src/widget.ts index a095f01f1..6c50ba23b 100644 --- a/packages/definitions/src/widget.ts +++ b/packages/definitions/src/widget.ts @@ -1,2 +1,2 @@ -export const widgetKinds = ["clock", "weather", "app", "iframe", "video", "notebook"] as const; +export const widgetKinds = ["clock", "weather", "app", "iframe", "video", "notebook", "dnsHoleSummary"] as const; export type WidgetKind = (typeof widgetKinds)[number]; diff --git a/packages/integrations/index.ts b/packages/integrations/index.ts new file mode 100644 index 000000000..3bd16e178 --- /dev/null +++ b/packages/integrations/index.ts @@ -0,0 +1 @@ +export * from "./src"; diff --git a/packages/integrations/package.json b/packages/integrations/package.json new file mode 100644 index 000000000..5df87673e --- /dev/null +++ b/packages/integrations/package.json @@ -0,0 +1,41 @@ +{ + "name": "@homarr/integrations", + "private": true, + "version": "0.1.0", + "exports": { + ".": "./index.ts", + "./types": "./src/types.ts" + }, + "typesVersions": { + "*": { + "*": [ + "src/*" + ] + } + }, + "license": "MIT", + "type": "module", + "scripts": { + "clean": "rm -rf .turbo node_modules", + "lint": "eslint .", + "format": "prettier --check . --ignore-path ../../.gitignore", + "typecheck": "tsc --noEmit" + }, + "devDependencies": { + "@homarr/eslint-config": "workspace:^0.2.0", + "@homarr/prettier-config": "workspace:^0.1.0", + "@homarr/tsconfig": "workspace:^0.1.0", + "eslint": "^8.57.0", + "typescript": "^5.4.5" + }, + "dependencies": { + "@homarr/definitions": "workspace:^0.1.0", + "@homarr/validation": "workspace:^0.1.0" + }, + "eslintConfig": { + "extends": [ + "@homarr/eslint-config/base" + ] + }, + "prettier": "@homarr/prettier-config" +} diff --git a/packages/integrations/src/base/integration.ts b/packages/integrations/src/base/integration.ts new file mode 100644 index 000000000..e8612736a --- /dev/null +++ b/packages/integrations/src/base/integration.ts @@ -0,0 +1,22 @@ +import type { IntegrationSecretKind } from "@homarr/definitions"; + +import type { IntegrationSecret } from "./types"; + +export abstract class Integration { + constructor( + protected integration: { + id: string; + name: string; + url: string; + decryptedSecrets: IntegrationSecret[]; + }, + ) {} + + protected getSecretValue(kind: IntegrationSecretKind) { + const secret = this.integration.decryptedSecrets.find((secret) => secret.kind === kind); + if (!secret) { + throw new Error(`No secret of kind ${kind} was found`); + } + return secret.value; + } +} diff --git a/packages/integrations/src/base/types.ts b/packages/integrations/src/base/types.ts new file mode 100644 index 000000000..f466508ca --- /dev/null +++ b/packages/integrations/src/base/types.ts @@ -0,0 +1,6 @@ +import type { IntegrationSecretKind } from "@homarr/definitions"; + +export interface IntegrationSecret { + kind: IntegrationSecretKind; + value: string; +} diff --git a/packages/integrations/src/index.ts b/packages/integrations/src/index.ts new file mode 100644 index 000000000..4740f40bd --- /dev/null +++ b/packages/integrations/src/index.ts @@ -0,0 +1 @@ +export { PiHoleIntegration } from "./pi-hole/pi-hole-integration"; diff --git a/packages/integrations/src/interfaces/dns-hole-summary/dns-hole-summary-integration.ts b/packages/integrations/src/interfaces/dns-hole-summary/dns-hole-summary-integration.ts new file mode 100644 index 000000000..d25be7fd0 --- /dev/null +++ b/packages/integrations/src/interfaces/dns-hole-summary/dns-hole-summary-integration.ts @@ -0,0 +1,5 @@ +import type { DnsHoleSummary } from "./dns-hole-summary-types"; + +export interface DnsHoleSummaryIntegration { + getSummaryAsync(): Promise; +} diff --git a/packages/integrations/src/interfaces/dns-hole-summary/dns-hole-summary-types.ts b/packages/integrations/src/interfaces/dns-hole-summary/dns-hole-summary-types.ts new file mode 100644 index 000000000..2295f9079 --- /dev/null +++ b/packages/integrations/src/interfaces/dns-hole-summary/dns-hole-summary-types.ts @@ -0,0 +1,6 @@ +export interface DnsHoleSummary { + domainsBeingBlocked: number; + adsBlockedToday: number; + adsBlockedTodayPercentage: number; + dnsQueriesToday: number; +} diff --git a/packages/integrations/src/pi-hole/pi-hole-integration.ts b/packages/integrations/src/pi-hole/pi-hole-integration.ts new file mode 100644 index 000000000..4b309c07b --- /dev/null +++ b/packages/integrations/src/pi-hole/pi-hole-integration.ts @@ -0,0 +1,31 @@ +import { Integration } from "../base/integration"; +import type { DnsHoleSummaryIntegration } from "../interfaces/dns-hole-summary/dns-hole-summary-integration"; +import type { DnsHoleSummary } from "../interfaces/dns-hole-summary/dns-hole-summary-types"; +import { summaryResponseSchema } from "./pi-hole-types"; + +export class PiHoleIntegration extends Integration implements DnsHoleSummaryIntegration { + async getSummaryAsync(): Promise { + const apiKey = super.getSecretValue("apiKey"); + const response = await fetch(`${this.integration.url}/admin/api.php?summaryRaw&auth=${apiKey}`); + if (!response.ok) { + throw new Error( + `Failed to fetch summary for ${this.integration.name} (${this.integration.id}): ${response.statusText}`, + ); + } + + const result = summaryResponseSchema.safeParse(await response.json()); + + if (!result.success) { + throw new Error( + `Failed to parse summary for ${this.integration.name} (${this.integration.id}), most likely your api key is wrong: ${result.error.message}`, + ); + } + + return { + adsBlockedToday: result.data.ads_blocked_today, + adsBlockedTodayPercentage: result.data.ads_percentage_today, + domainsBeingBlocked: result.data.domains_being_blocked, + dnsQueriesToday: result.data.dns_queries_today, + }; + } +} diff --git a/packages/integrations/src/pi-hole/pi-hole-types.ts b/packages/integrations/src/pi-hole/pi-hole-types.ts new file mode 100644 index 000000000..6b2a28a95 --- /dev/null +++ b/packages/integrations/src/pi-hole/pi-hole-types.ts @@ -0,0 +1,9 @@ +import { z } from "@homarr/validation"; + +export const summaryResponseSchema = z.object({ + status: z.enum(["enabled", "disabled"]), + domains_being_blocked: z.number(), + ads_blocked_today: z.number(), + dns_queries_today: z.number(), + ads_percentage_today: z.number(), +}); diff --git a/packages/integrations/src/types.ts b/packages/integrations/src/types.ts new file mode 100644 index 000000000..981a5fcb0 --- /dev/null +++ b/packages/integrations/src/types.ts @@ -0,0 +1 @@ +export * from "./interfaces/dns-hole-summary/dns-hole-summary-types"; diff --git a/packages/integrations/tsconfig.json b/packages/integrations/tsconfig.json new file mode 100644 index 000000000..cbe8483d9 --- /dev/null +++ b/packages/integrations/tsconfig.json @@ -0,0 +1,8 @@ +{ + "extends": "@homarr/tsconfig/base.json", + "compilerOptions": { + "tsBuildInfoFile": "node_modules/.cache/tsbuildinfo.json" + }, + "include": ["*.ts", "src"], + "exclude": ["node_modules"] +} diff --git a/packages/redis/src/index.ts b/packages/redis/src/index.ts index 06ec8006b..beb5f1c70 100644 --- a/packages/redis/src/index.ts +++ b/packages/redis/src/index.ts @@ -1,5 +1,7 @@ import { createQueueChannel, createSubPubChannel } from "./lib/channel"; +export { createCacheChannel } from "./lib/channel"; + export const exampleChannel = createSubPubChannel<{ message: string }>("example"); export const queueChannel = createQueueChannel<{ name: string; diff --git a/packages/redis/src/lib/channel.ts b/packages/redis/src/lib/channel.ts index eeb4d13ba..270b3c6ce 100644 --- a/packages/redis/src/lib/channel.ts +++ b/packages/redis/src/lib/channel.ts @@ -58,23 +58,70 @@ const cacheClient = createRedisConnection(); * @param name name of the channel * @returns cache channel object */ -export const createCacheChannel = (name: string) => { +export const createCacheChannel = (name: string, cacheDurationSeconds: number = 5 * 60 * 1000) => { const cacheChannelName = `cache:${name}`; + return { /** * Get the data from the cache channel. - * @returns data or undefined if not found + * @returns data or null if not found or expired */ getAsync: async () => { const data = await cacheClient.get(cacheChannelName); - return data ? superjson.parse(data) : undefined; + if (!data) return null; + + const parsedData = superjson.parse<{ data: TData; timestamp: Date }>(data); + const now = new Date(); + const diff = now.getTime() - parsedData.timestamp.getTime(); + if (diff > cacheDurationSeconds) return null; + + return parsedData; + }, + /** + * Consume the data from the cache channel, if not present or expired, it will call the callback to get new data. + * @param callback callback function to get new data if not present or expired + * @returns data or new data if not present or expired + */ + consumeAsync: async (callback: () => Promise) => { + const data = await cacheClient.get(cacheChannelName); + + const getNewDataAsync = async () => { + logger.debug(`Cache miss for channel '${cacheChannelName}'`); + const newData = await callback(); + const result = { data: newData, timestamp: new Date() }; + await cacheClient.set(cacheChannelName, superjson.stringify(result)); + logger.debug(`Cache updated for channel '${cacheChannelName}'`); + return result; + }; + + if (!data) { + return await getNewDataAsync(); + } + + const parsedData = superjson.parse<{ data: TData; timestamp: Date }>(data); + const now = new Date(); + const diff = now.getTime() - parsedData.timestamp.getTime(); + + if (diff > cacheDurationSeconds) { + return await getNewDataAsync(); + } + + logger.debug(`Cache hit for channel '${cacheChannelName}'`); + + return parsedData; + }, + /** + * Invalidate the cache channels data. + */ + invalidateAsync: async () => { + await cacheClient.del(cacheChannelName); }, /** * Set the data in the cache channel. * @param data data to be stored in the cache channel */ setAsync: async (data: TData) => { - await cacheClient.set(cacheChannelName, superjson.stringify(data)); + await cacheClient.set(cacheChannelName, superjson.stringify({ data, timestamp: new Date() })); }, }; }; diff --git a/packages/translation/src/lang/en.ts b/packages/translation/src/lang/en.ts index 3ba679d51..fa5d56756 100644 --- a/packages/translation/src/lang/en.ts +++ b/packages/translation/src/lang/en.ts @@ -447,6 +447,7 @@ export default { previous: "Previous", next: "Next", checkoutDocs: "Check out the documentation", + tryAgain: "Try again", }, iconPicker: { header: "Type name or objects to filter for icons... Homarr will search through {countIcons} icons for you.", @@ -531,7 +532,6 @@ export default { custom: { passwordsDoNotMatch: "Passwords do not match", boardAlreadyExists: "A board with this name already exists", - // TODO: Add custom error messages }, }, }, @@ -641,6 +641,38 @@ export default { }, }, }, + dnsHoleSummary: { + name: "DNS Hole Summary", + description: "Displays the summary of your DNS Hole", + option: { + layout: { + label: "Layout", + option: { + row: { + label: "Horizontal", + }, + column: { + label: "Vertical", + }, + grid: { + label: "Grid", + }, + }, + }, + usePiHoleColors: { + label: "Use Pi-Hole colors", + }, + }, + error: { + internalServerError: "Failed to fetch DNS Hole Summary", + }, + data: { + adsBlockedToday: "blocked today", + adsBlockedTodayPercentage: "blocked today", + dnsQueriesToday: "Queries today", + domainsBeingBlocked: "Domains on blocklist", + }, + }, clock: { name: "Date and time", description: "Displays the current date and time.", @@ -834,6 +866,12 @@ export default { }, }, }, + error: { + action: { + logs: "Check logs for more details", + }, + noIntegration: "No integration selected", + }, }, video: { name: "Video Stream", diff --git a/packages/validation/src/shared.ts b/packages/validation/src/shared.ts index 46b2de2c1..b524f3716 100644 --- a/packages/validation/src/shared.ts +++ b/packages/validation/src/shared.ts @@ -25,7 +25,7 @@ export const sharedItemSchema = z.object({ yOffset: z.number(), height: z.number(), width: z.number(), - integrations: z.array(integrationSchema), + integrationIds: z.array(z.string()), advancedOptions: itemAdvancedOptionsSchema, }); diff --git a/packages/widgets/package.json b/packages/widgets/package.json index a31e97954..42ffa2132 100644 --- a/packages/widgets/package.json +++ b/packages/widgets/package.json @@ -3,7 +3,8 @@ "private": true, "version": "0.1.0", "exports": { - ".": "./index.ts" + ".": "./index.ts", + "./errors": "./src/errors/component.tsx" }, "typesVersions": { "*": { @@ -39,6 +40,7 @@ "@homarr/common": "workspace:^0.1.0", "@homarr/definitions": "workspace:^0.1.0", "@homarr/form": "workspace:^0.1.0", + "@homarr/integrations": "workspace:^0.1.0", "@homarr/modals": "workspace:^0.1.0", "@homarr/notifications": "workspace:^0.1.0", "@homarr/redis": "workspace:^0.1.0", diff --git a/packages/widgets/src/_inputs/widget-multiselect-input.tsx b/packages/widgets/src/_inputs/widget-multiselect-input.tsx index 282ae5c2f..9f3db9e92 100644 --- a/packages/widgets/src/_inputs/widget-multiselect-input.tsx +++ b/packages/widgets/src/_inputs/widget-multiselect-input.tsx @@ -2,10 +2,11 @@ import { MultiSelect } from "@mantine/core"; +import { translateIfNecessary } from "@homarr/translation"; + import type { CommonWidgetInputProps } from "./common"; import { useWidgetInputTranslation } from "./common"; import { useFormContext } from "./form"; -import type { SelectOption } from "./widget-select-input"; export const WidgetMultiSelectInput = ({ property, kind, options }: CommonWidgetInputProps<"multiSelect">) => { const t = useWidgetInputTranslation(kind, property); @@ -14,7 +15,14 @@ export const WidgetMultiSelectInput = ({ property, kind, options }: CommonWidget return ( + typeof option === "string" + ? option + : { + value: option.value, + label: translateIfNecessary(t, option.label)!, + }, + )} description={options.withDescription ? t("description") : undefined} searchable={options.searchable} {...form.getInputProps(`options.${property}`)} diff --git a/packages/widgets/src/_inputs/widget-select-input.tsx b/packages/widgets/src/_inputs/widget-select-input.tsx index aa855dbf8..fd1df1d8f 100644 --- a/packages/widgets/src/_inputs/widget-select-input.tsx +++ b/packages/widgets/src/_inputs/widget-select-input.tsx @@ -2,6 +2,10 @@ import { Select } from "@mantine/core"; +import { translateIfNecessary } from "@homarr/translation"; +import type { stringOrTranslation } from "@homarr/translation"; +import { useI18n } from "@homarr/translation/client"; + import type { CommonWidgetInputProps } from "./common"; import { useWidgetInputTranslation } from "./common"; import { useFormContext } from "./form"; @@ -9,7 +13,7 @@ import { useFormContext } from "./form"; export type SelectOption = | { value: string; - label: string; + label: stringOrTranslation; } | string; @@ -20,14 +24,22 @@ export type inferSelectOptionValue = TOption exten : TOption; export const WidgetSelectInput = ({ property, kind, options }: CommonWidgetInputProps<"select">) => { - const t = useWidgetInputTranslation(kind, property); + const t = useI18n(); + const tWidget = useWidgetInputTranslation(kind, property); const form = useFormContext(); return (