diff --git a/package.json b/package.json index 300200f..7991b43 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,7 @@ "preview": "vite preview", "preinstall": "npx only-allow pnpm", "format": "prettier --write src/", - "type-check": "vue-tsc --build", + "type-check": "tsc --noEmit -p tsconfig.app.json", "deploy": "./scripts/deploy.sh" }, "dependencies": { @@ -24,7 +24,6 @@ "@radix-ui/react-label": "^2.1.11", "@radix-ui/react-separator": "^1.1.11", "@radix-ui/react-slot": "^1.3.0", - "@radix-ui/react-tooltip": "^1.2.11", "@tailwindcss/vite": "^4.3.2", "@tanstack/react-query": "^5.101.2", "@tanstack/react-router": "^1.170.17", @@ -64,7 +63,6 @@ "eslint": "^9.39.4", "eslint-config-prettier": "^10.1.8", "eslint-plugin-prettier": "^5.5.6", - "eslint-plugin-react": "^7.37.5", "eslint-plugin-react-hooks": "^5.2.0", "eslint-plugin-react-refresh": "^0.4.26", "globals": "^16.5.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0be2bf0..9660d67 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -35,9 +35,6 @@ importers: '@radix-ui/react-slot': specifier: ^1.3.0 version: 1.3.0(@types/react@19.2.17)(react@19.2.7) - '@radix-ui/react-tooltip': - specifier: ^1.2.11 - version: 1.2.11(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) '@tailwindcss/vite': specifier: ^4.3.2 version: 4.3.2(vite@7.3.6(@types/node@25.9.4)(jiti@2.7.0)(lightningcss@1.32.0)) @@ -150,9 +147,6 @@ importers: eslint-plugin-prettier: specifier: ^5.5.6 version: 5.5.6(eslint-config-prettier@10.1.8(eslint@9.39.4(jiti@2.7.0)))(eslint@9.39.4(jiti@2.7.0))(prettier@3.9.4) - eslint-plugin-react: - specifier: ^7.37.5 - version: 7.37.5(eslint@9.39.4(jiti@2.7.0)) eslint-plugin-react-hooks: specifier: ^5.2.0 version: 5.2.0(eslint@9.39.4(jiti@2.7.0)) @@ -1826,45 +1820,9 @@ packages: resolution: {integrity: sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA==} engines: {node: '>=10'} - array-buffer-byte-length@1.0.2: - resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==} - engines: {node: '>= 0.4'} - - array-includes@3.1.9: - resolution: {integrity: sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==} - engines: {node: '>= 0.4'} - - array.prototype.findlast@1.2.5: - resolution: {integrity: sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==} - engines: {node: '>= 0.4'} - - array.prototype.flat@1.3.3: - resolution: {integrity: sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==} - engines: {node: '>= 0.4'} - - array.prototype.flatmap@1.3.3: - resolution: {integrity: sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==} - engines: {node: '>= 0.4'} - - array.prototype.tosorted@1.1.4: - resolution: {integrity: sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==} - engines: {node: '>= 0.4'} - - arraybuffer.prototype.slice@1.0.4: - resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==} - engines: {node: '>= 0.4'} - - async-function@1.0.0: - resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==} - engines: {node: '>= 0.4'} - asynckit@0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} - available-typed-arrays@1.0.7: - resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} - engines: {node: '>= 0.4'} - axios@1.18.1: resolution: {integrity: sha512-3nTvFlvpn9Zu/RkHUqtc7/+al4UpRW5az71ap5zccp6e8RAYEzhMTecX8Dz1wWDYrPpUoB1HAQEGEAEvUr7S9g==} @@ -1886,14 +1844,6 @@ packages: resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} engines: {node: '>= 0.4'} - call-bind@1.0.9: - resolution: {integrity: sha512-a/hy+pNsFUTR+Iz8TCJvXudKVLAnz/DyeSUo10I5yvFDQJBFU2s9uqQpoSrJlroHUKoKqzg+epxyP9lqFdzfBQ==} - engines: {node: '>= 0.4'} - - call-bound@1.0.4: - resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} - engines: {node: '>= 0.4'} - callsites@3.1.0: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} @@ -1950,18 +1900,6 @@ packages: resolution: {integrity: sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw==} engines: {node: '>=0.12'} - data-view-buffer@1.0.2: - resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==} - engines: {node: '>= 0.4'} - - data-view-byte-length@1.0.2: - resolution: {integrity: sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==} - engines: {node: '>= 0.4'} - - data-view-byte-offset@1.0.1: - resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==} - engines: {node: '>= 0.4'} - date-fns@4.4.0: resolution: {integrity: sha512-+1UMbeh68lH1SegH83CGWwpb6OHHbpSgr3+s5Eww5M4CAgswBpoWS0AjTOfEJ33HiYKz1hdj/KTFprzXHmq/6w==} @@ -1980,14 +1918,6 @@ packages: deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} - define-data-property@1.1.4: - resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} - engines: {node: '>= 0.4'} - - define-properties@1.2.1: - resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} - engines: {node: '>= 0.4'} - delayed-stream@1.0.0: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} engines: {node: '>=0.4.0'} @@ -1999,10 +1929,6 @@ packages: detect-node-es@1.1.0: resolution: {integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==} - doctrine@2.1.0: - resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} - engines: {node: '>=0.10.0'} - dom7@4.0.6: resolution: {integrity: sha512-emjdpPLhpNubapLFdjNL9tP06Sr+GZkrIHEXLWvOGsytACUrkbeIdjO5g77m00BrHTznnlcNqgmn7pCN192TBA==} @@ -2014,14 +1940,6 @@ packages: resolution: {integrity: sha512-aNnGCvbJ/RIyWo1IuhNdVjnNF+EjH9wpzpNHt+ci/m9He9LJvUN8wrCcXjp9cWsGNAuvSpVFTx/vraAFQ8qGjQ==} engines: {node: '>=10.13.0'} - es-abstract-get@1.0.0: - resolution: {integrity: sha512-6PMWXpdhshVvFp+FoWYs1EvG1Nj0tvk0dZM+XcK0xMEM1czRVcP6ohqPWHy6qPagSpC8j4+p89WXlT+xXJs/fg==} - engines: {node: '>= 0.4'} - - es-abstract@1.24.2: - resolution: {integrity: sha512-2FpH9Q5i2RRwyEP1AylXe6nYLR5OhaJTZwmlcP0dL/+JCbgg7yyEo/sEK6HeGZRf3dFpWwThaRHVApXSkW3xeg==} - engines: {node: '>= 0.4'} - es-define-property@1.0.1: resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} engines: {node: '>= 0.4'} @@ -2030,10 +1948,6 @@ packages: resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} engines: {node: '>= 0.4'} - es-iterator-helpers@1.3.3: - resolution: {integrity: sha512-0PuBxFi+4uPanB97iDxCLWuHeYud2FALrw5HFZGtAF38UpJDbDC8frwp2cnDyae692CQ0dou60UwWfhgsa4U/g==} - engines: {node: '>= 0.4'} - es-object-atoms@1.1.2: resolution: {integrity: sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==} engines: {node: '>= 0.4'} @@ -2042,14 +1956,6 @@ packages: resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} engines: {node: '>= 0.4'} - es-shim-unscopables@1.1.0: - resolution: {integrity: sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==} - engines: {node: '>= 0.4'} - - es-to-primitive@1.3.4: - resolution: {integrity: sha512-yPDz7wqpg1/mmHLmS3tcfTfbw5f1eryXvyghYBffGdERwe+mV7ZcWzTR8LR17Kvqt3qfPurjlonmnq3MKXIOXw==} - engines: {node: '>= 0.4'} - es5-ext@0.10.64: resolution: {integrity: sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==} engines: {node: '>=0.10'} @@ -2101,12 +2007,6 @@ packages: peerDependencies: eslint: '>=8.40' - eslint-plugin-react@7.37.5: - resolution: {integrity: sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA==} - engines: {node: '>=4'} - peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7 - eslint-scope@8.4.0: resolution: {integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -2208,10 +2108,6 @@ packages: debug: optional: true - for-each@0.3.5: - resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==} - engines: {node: '>= 0.4'} - form-data@4.0.6: resolution: {integrity: sha512-vKatAh4SlVfgbv+YtmhiRjhEMJsYpsG1Y2rMQtR+SVSbytsSD1YGzDIcrAJmdFec88u/+VoGmxnl+80gL1tRCQ==} engines: {node: '>= 6'} @@ -2224,17 +2120,6 @@ packages: function-bind@1.1.2: resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} - function.prototype.name@1.2.0: - resolution: {integrity: sha512-jObKIik1P2QjPHP5nz5BaOtUlfgS0fWo8IUByNXkM+o+02sJOi94em77GwJKQSJ3gfPHdgzLNrHc1uokV4P/ew==} - engines: {node: '>= 0.4'} - - functions-have-names@1.2.3: - resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} - - generator-function@2.0.1: - resolution: {integrity: sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==} - engines: {node: '>= 0.4'} - get-intrinsic@1.3.0: resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} engines: {node: '>= 0.4'} @@ -2247,10 +2132,6 @@ packages: resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} engines: {node: '>= 0.4'} - get-symbol-description@1.1.0: - resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==} - engines: {node: '>= 0.4'} - glob-parent@6.0.2: resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} engines: {node: '>=10.13.0'} @@ -2263,10 +2144,6 @@ packages: resolution: {integrity: sha512-c/c15i26VrJ4IRt5Z89DnIzCGDn9EcebibhAOjw5ibqEHsE1wLUgkPn9RDmNcUKyU87GeaL633nyJ+pplFR2ZQ==} engines: {node: '>=18'} - globalthis@1.0.4: - resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} - engines: {node: '>= 0.4'} - globrex@0.1.2: resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==} @@ -2282,21 +2159,10 @@ packages: graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - has-bigints@1.1.0: - resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==} - engines: {node: '>= 0.4'} - has-flag@4.0.0: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} - has-property-descriptors@1.0.2: - resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} - - has-proto@1.2.0: - resolution: {integrity: sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==} - engines: {node: '>= 0.4'} - has-symbols@1.1.0: resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} engines: {node: '>= 0.4'} @@ -2335,58 +2201,10 @@ packages: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} - internal-slot@1.1.0: - resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} - engines: {node: '>= 0.4'} - - is-array-buffer@3.0.5: - resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==} - engines: {node: '>= 0.4'} - - is-async-function@2.1.1: - resolution: {integrity: sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==} - engines: {node: '>= 0.4'} - - is-bigint@1.1.0: - resolution: {integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==} - engines: {node: '>= 0.4'} - - is-boolean-object@1.2.2: - resolution: {integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==} - engines: {node: '>= 0.4'} - - is-callable@1.2.7: - resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} - engines: {node: '>= 0.4'} - - is-core-module@2.16.2: - resolution: {integrity: sha512-evOr8xfXKxE6qSR0hSXL2r3sd7ALj8+7jQEUvPYcm5sgZFdJ+AYzT6yNmJenvIYQBgIGwfwz08sL8zoL7yq2BA==} - engines: {node: '>= 0.4'} - - is-data-view@1.0.2: - resolution: {integrity: sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==} - engines: {node: '>= 0.4'} - - is-date-object@1.1.0: - resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==} - engines: {node: '>= 0.4'} - - is-document.all@1.0.0: - resolution: {integrity: sha512-+XSoyS05OdBbhFuELhgTCpFNHkpBOJqtsZfUFFpe5QTw+9Sjbh8zitxhQkYAo6wV7e1Vb8cAPvpCk9jGam/82g==} - engines: {node: '>= 0.4'} - is-extglob@2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} - is-finalizationregistry@1.1.1: - resolution: {integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==} - engines: {node: '>= 0.4'} - - is-generator-function@1.1.2: - resolution: {integrity: sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==} - engines: {node: '>= 0.4'} - is-glob@4.0.3: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} @@ -2394,64 +2212,13 @@ packages: is-hotkey@0.2.0: resolution: {integrity: sha512-UknnZK4RakDmTgz4PI1wIph5yxSs/mvChWs9ifnlXsKuXgWmOkY/hAE0H/k2MIqH0RlRye0i1oC07MCRSD28Mw==} - is-map@2.0.3: - resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} - engines: {node: '>= 0.4'} - - is-negative-zero@2.0.3: - resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} - engines: {node: '>= 0.4'} - is-network-error@1.3.2: resolution: {integrity: sha512-PhBY86zaxNZUuWP6h13Vu5oFe0XY6/UlKzQnYFELzGVHygP3MxmvTfYSG7GN3aIab/iWudSMgjSnG9Dq+nHrgA==} engines: {node: '>=16'} - is-number-object@1.1.1: - resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==} - engines: {node: '>= 0.4'} - - is-regex@1.2.1: - resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} - engines: {node: '>= 0.4'} - - is-set@2.0.3: - resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} - engines: {node: '>= 0.4'} - - is-shared-array-buffer@1.0.4: - resolution: {integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==} - engines: {node: '>= 0.4'} - - is-string@1.1.1: - resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==} - engines: {node: '>= 0.4'} - - is-symbol@1.1.1: - resolution: {integrity: sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==} - engines: {node: '>= 0.4'} - - is-typed-array@1.1.15: - resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} - engines: {node: '>= 0.4'} - is-url@1.2.4: resolution: {integrity: sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==} - is-weakmap@2.0.2: - resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} - engines: {node: '>= 0.4'} - - is-weakref@1.1.1: - resolution: {integrity: sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==} - engines: {node: '>= 0.4'} - - is-weakset@2.0.4: - resolution: {integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==} - engines: {node: '>= 0.4'} - - isarray@2.0.5: - resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} - isbot@5.1.44: resolution: {integrity: sha512-PGEHtwMnKbZpeSEXW2Utx+/JWed7dp6DiH0WWg33vGSDA7RUvpUeJSVlLrVkQ1RCpvDOUc/eH9ql7VsdbBZ8pA==} engines: {node: '>=18'} @@ -2459,10 +2226,6 @@ packages: isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - iterator.prototype@1.1.5: - resolution: {integrity: sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==} - engines: {node: '>= 0.4'} - jiti@2.7.0: resolution: {integrity: sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==} hasBin: true @@ -2488,10 +2251,6 @@ packages: json-stable-stringify-without-jsonify@1.0.1: resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} - jsx-ast-utils@3.3.5: - resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} - engines: {node: '>=4.0'} - keyv@4.5.4: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} @@ -2597,10 +2356,6 @@ packages: lodash@4.18.1: resolution: {integrity: sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==} - loose-envify@1.4.0: - resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} - hasBin: true - lucide-react@1.25.0: resolution: {integrity: sha512-/mdJTRbiwcLOQ1NZZK1amZF9rIZyvO18D6r9TngE6TG1NmqHgFuT4eE7Xrkm9UsXMbBJD1NlfwHVltCDWHrOTw==} peerDependencies: @@ -2659,10 +2414,6 @@ packages: next-tick@1.1.0: resolution: {integrity: sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==} - node-exports-info@1.6.2: - resolution: {integrity: sha512-kXs9Go0cah0qHVV2v389IXQLdLCeE1xfFtjOAF+iobu0OIoG1pje8At2vMHyaPMiPMnG/LWP50twML21eMcAag==} - engines: {node: '>= 0.4'} - npm-run-path@6.0.0: resolution: {integrity: sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA==} engines: {node: '>=18'} @@ -2670,42 +2421,10 @@ packages: nprogress@0.2.0: resolution: {integrity: sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA==} - object-assign@4.1.1: - resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} - engines: {node: '>=0.10.0'} - - object-inspect@1.13.4: - resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} - engines: {node: '>= 0.4'} - - object-keys@1.1.1: - resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} - engines: {node: '>= 0.4'} - - object.assign@4.1.7: - resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==} - engines: {node: '>= 0.4'} - - object.entries@1.1.9: - resolution: {integrity: sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==} - engines: {node: '>= 0.4'} - - object.fromentries@2.0.8: - resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==} - engines: {node: '>= 0.4'} - - object.values@1.2.1: - resolution: {integrity: sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==} - engines: {node: '>= 0.4'} - optionator@0.9.4: resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} engines: {node: '>= 0.8.0'} - own-keys@1.0.1: - resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==} - engines: {node: '>= 0.4'} - p-limit@3.1.0: resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} engines: {node: '>=10'} @@ -2734,9 +2453,6 @@ packages: resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} engines: {node: '>=12'} - path-parse@1.0.7: - resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} @@ -2744,10 +2460,6 @@ packages: resolution: {integrity: sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==} engines: {node: '>=12'} - possible-typed-array-names@1.1.0: - resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} - engines: {node: '>= 0.4'} - postcss@8.5.16: resolution: {integrity: sha512-vuwillviilfKZsg0VGj5R/YwwcHx4SLsIOI/7K6mQkWx+l5cUHTjj5g0AasTBcyXsbfTgrwsUNmVUb5xVwyPwg==} engines: {node: ^10 || ^12 || >=14} @@ -2772,9 +2484,6 @@ packages: resolution: {integrity: sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==} engines: {node: '>=6'} - prop-types@15.8.1: - resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} - proxy-from-env@2.1.0: resolution: {integrity: sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==} engines: {node: '>=10'} @@ -2817,9 +2526,6 @@ packages: peerDependencies: react: ^16.8.0 || ^17 || ^18 || ^19 - react-is@16.13.1: - resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} - react-remove-scroll-bar@2.3.8: resolution: {integrity: sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==} engines: {node: '>=10'} @@ -2858,14 +2564,6 @@ packages: resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} engines: {node: '>= 14.18.0'} - reflect.getprototypeof@1.0.10: - resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==} - engines: {node: '>= 0.4'} - - regexp.prototype.flags@1.5.4: - resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==} - engines: {node: '>= 0.4'} - reselect@5.2.0: resolution: {integrity: sha512-AgZ3UOZm3YndfrJ4OYjgrT7bmCm/1iqkjvEfH/oYjzh6PD2qw4QuT3jjnXIrpdt4MTpMXclMT3lXbmRY+XRakw==} @@ -2873,11 +2571,6 @@ packages: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} - resolve@2.0.0-next.7: - resolution: {integrity: sha512-tqt+NBWwyaMgw3zDsnygx4CByWjQEJHOPMdslYhppaQSJUtL/D4JO9CcBBlhPoI8lz9oJIDXkwXfhF4aWqP8xQ==} - engines: {node: '>= 0.4'} - hasBin: true - retry@0.13.1: resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==} engines: {node: '>= 4'} @@ -2887,28 +2580,12 @@ packages: engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true - safe-array-concat@1.1.4: - resolution: {integrity: sha512-wtZlHyOje6OZTGqAoaDKxFkgRtkF9CnHAVnCHKfuj200wAgL+bSJhdsCD2l0Qx/2ekEXjPWcyKkfGb5CPboslg==} - engines: {node: '>=0.4'} - - safe-push-apply@1.0.0: - resolution: {integrity: sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==} - engines: {node: '>= 0.4'} - - safe-regex-test@1.1.0: - resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==} - engines: {node: '>= 0.4'} - scheduler@0.27.0: resolution: {integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==} scroll-into-view-if-needed@3.1.0: resolution: {integrity: sha512-49oNpRjWRvnU8NyGVmUaYG4jtTkNonFZI86MmGRDqBphEK2EXT9gdEUoQPZhuBM8yWHxCWbobltqYO5M4XrUvQ==} - semver@6.3.1: - resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} - hasBin: true - semver@7.8.5: resolution: {integrity: sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==} engines: {node: '>=10'} @@ -2924,18 +2601,6 @@ packages: resolution: {integrity: sha512-46uFvgrXTVxZcUorgSSRZ4y+ieqLLQRMlG4bnCZKW3qI6BZm7Rg4ntMW4p1mILEEBZWrFlcpp0AyIIlM6jD9iw==} engines: {node: '>=10'} - set-function-length@1.2.2: - resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} - engines: {node: '>= 0.4'} - - set-function-name@2.0.2: - resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} - engines: {node: '>= 0.4'} - - set-proto@1.0.0: - resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==} - engines: {node: '>= 0.4'} - shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} engines: {node: '>=8'} @@ -2944,22 +2609,6 @@ packages: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} - side-channel-list@1.0.1: - resolution: {integrity: sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==} - engines: {node: '>= 0.4'} - - side-channel-map@1.0.1: - resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==} - engines: {node: '>= 0.4'} - - side-channel-weakmap@1.0.2: - resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} - engines: {node: '>= 0.4'} - - side-channel@1.1.1: - resolution: {integrity: sha512-6x6dK6zJdpTzF4sQeNYxwtvBzf6Eg4GtlesS94HOvTudUeyK2WXAaIfmDgsyslYrRBeFIlsi54AYsFGUuhmvrQ==} - engines: {node: '>= 0.4'} - slate-history@0.115.0: resolution: {integrity: sha512-QdUm9aVyQFz6JG4a84Z6Um+tJpZJmsh9bjXwTVTvYiN4rdKbqL6+/4HT94on1WYxe10Q4vY6mA6BCpoYxgF3tQ==} peerDependencies: @@ -2985,29 +2634,6 @@ packages: ssr-window@4.0.2: resolution: {integrity: sha512-ISv/Ch+ig7SOtw7G2+qkwfVASzazUnvlDTwypdLoPoySv+6MqlOV10VwPSE6EWkGjhW50lUmghPmpYZXMu/+AQ==} - stop-iteration-iterator@1.1.0: - resolution: {integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==} - engines: {node: '>= 0.4'} - - string.prototype.matchall@4.0.12: - resolution: {integrity: sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==} - engines: {node: '>= 0.4'} - - string.prototype.repeat@1.0.0: - resolution: {integrity: sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==} - - string.prototype.trim@1.2.11: - resolution: {integrity: sha512-PwvK7BU+CMTJGYQCTZb5RWXIML92lftJLhQz1tBzgKiqGxJaMlBAa48POXaNAC2s4y8jr3EFqrkF9+44neS46w==} - engines: {node: '>= 0.4'} - - string.prototype.trimend@1.0.10: - resolution: {integrity: sha512-2+3aDAOmPTmuFwjDnmJG2ctEkQKVki7vOSqaxkv42Mowj1V6PnvuwFCRrR5lChUux1TBskPjfkeTOhqczDMxTw==} - engines: {node: '>= 0.4'} - - string.prototype.trimstart@1.0.8: - resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} - engines: {node: '>= 0.4'} - strip-ansi@7.2.0: resolution: {integrity: sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==} engines: {node: '>=12'} @@ -3020,10 +2646,6 @@ packages: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} engines: {node: '>=8'} - supports-preserve-symlinks-flag@1.0.0: - resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} - engines: {node: '>= 0.4'} - synckit@0.11.13: resolution: {integrity: sha512-eNRKgb3z66Yp3D2CixVujOUvXLFUTij/zVnV8KRyvFdQwpz7I5DS8UfRkTeLzb64u+dkzDSdelE24izu+zSSUg==} engines: {node: ^14.18.0 || >=16.0.0} @@ -3075,22 +2697,6 @@ packages: type@2.7.3: resolution: {integrity: sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ==} - typed-array-buffer@1.0.3: - resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==} - engines: {node: '>= 0.4'} - - typed-array-byte-length@1.0.3: - resolution: {integrity: sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==} - engines: {node: '>= 0.4'} - - typed-array-byte-offset@1.0.4: - resolution: {integrity: sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==} - engines: {node: '>= 0.4'} - - typed-array-length@1.0.8: - resolution: {integrity: sha512-phPGCwqr2+Qo0fwniCE8e4pKnGu/yFb5nD5Y8bf0EEeiI5GklnACYA9GFy/DrAeRrKHXvHn+1SUsOWgJp6RO+g==} - engines: {node: '>= 0.4'} - typescript-eslint@8.62.1: resolution: {integrity: sha512-vymnnM5g0AKQDSAyfP12nMIBvgwgA42syg74kkuZ4x1VuTzwQKwc5h9rGxeShCjny5o+zWAb6OEoz7XLgrIkIw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -3103,10 +2709,6 @@ packages: engines: {node: '>=14.17'} hasBin: true - unbox-primitive@1.1.0: - resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} - engines: {node: '>= 0.4'} - undici-types@7.24.6: resolution: {integrity: sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg==} @@ -3227,22 +2829,6 @@ packages: vscode-uri@3.1.0: resolution: {integrity: sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==} - which-boxed-primitive@1.1.1: - resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==} - engines: {node: '>= 0.4'} - - which-builtin-type@1.2.1: - resolution: {integrity: sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==} - engines: {node: '>= 0.4'} - - which-collection@1.0.2: - resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} - engines: {node: '>= 0.4'} - - which-typed-array@1.1.22: - resolution: {integrity: sha512-fvO4ExWMFsqyhG3AiPAObMuY1lxaqgYcxbc49CNdWDDECOJNgQyvsOWVwbZc+qf3rzRtxojBK+CMEv0Ld5CYpw==} - engines: {node: '>= 0.4'} - which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} engines: {node: '>= 8'} @@ -4860,71 +4446,8 @@ snapshots: dependencies: tslib: 2.8.1 - array-buffer-byte-length@1.0.2: - dependencies: - call-bound: 1.0.4 - is-array-buffer: 3.0.5 - - array-includes@3.1.9: - dependencies: - call-bind: 1.0.9 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-abstract: 1.24.2 - es-object-atoms: 1.1.2 - get-intrinsic: 1.3.0 - is-string: 1.1.1 - math-intrinsics: 1.1.0 - - array.prototype.findlast@1.2.5: - dependencies: - call-bind: 1.0.9 - define-properties: 1.2.1 - es-abstract: 1.24.2 - es-errors: 1.3.0 - es-object-atoms: 1.1.2 - es-shim-unscopables: 1.1.0 - - array.prototype.flat@1.3.3: - dependencies: - call-bind: 1.0.9 - define-properties: 1.2.1 - es-abstract: 1.24.2 - es-shim-unscopables: 1.1.0 - - array.prototype.flatmap@1.3.3: - dependencies: - call-bind: 1.0.9 - define-properties: 1.2.1 - es-abstract: 1.24.2 - es-shim-unscopables: 1.1.0 - - array.prototype.tosorted@1.1.4: - dependencies: - call-bind: 1.0.9 - define-properties: 1.2.1 - es-abstract: 1.24.2 - es-errors: 1.3.0 - es-shim-unscopables: 1.1.0 - - arraybuffer.prototype.slice@1.0.4: - dependencies: - array-buffer-byte-length: 1.0.2 - call-bind: 1.0.9 - define-properties: 1.2.1 - es-abstract: 1.24.2 - es-errors: 1.3.0 - get-intrinsic: 1.3.0 - is-array-buffer: 3.0.5 - - async-function@1.0.0: {} - asynckit@0.4.0: {} - available-typed-arrays@1.0.7: - dependencies: - possible-typed-array-names: 1.1.0 - axios@1.18.1: dependencies: follow-redirects: 1.16.0 @@ -4953,18 +4476,6 @@ snapshots: es-errors: 1.3.0 function-bind: 1.1.2 - call-bind@1.0.9: - dependencies: - call-bind-apply-helpers: 1.0.2 - es-define-property: 1.0.1 - get-intrinsic: 1.3.0 - set-function-length: 1.2.2 - - call-bound@1.0.4: - dependencies: - call-bind-apply-helpers: 1.0.2 - get-intrinsic: 1.3.0 - callsites@3.1.0: {} chalk@4.1.2: @@ -5023,24 +4534,6 @@ snapshots: es5-ext: 0.10.64 type: 2.7.3 - data-view-buffer@1.0.2: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - is-data-view: 1.0.2 - - data-view-byte-length@1.0.2: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - is-data-view: 1.0.2 - - data-view-byte-offset@1.0.1: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - is-data-view: 1.0.2 - date-fns@4.4.0: {} dayjs@1.11.21: {} @@ -5051,28 +4544,12 @@ snapshots: deep-is@0.1.4: {} - define-data-property@1.1.4: - dependencies: - es-define-property: 1.0.1 - es-errors: 1.3.0 - gopd: 1.2.0 - - define-properties@1.2.1: - dependencies: - define-data-property: 1.1.4 - has-property-descriptors: 1.0.2 - object-keys: 1.1.1 - delayed-stream@1.0.0: {} detect-libc@2.1.2: {} detect-node-es@1.1.0: {} - doctrine@2.1.0: - dependencies: - esutils: 2.0.3 - dom7@4.0.6: dependencies: ssr-window: 4.0.2 @@ -5088,93 +4565,10 @@ snapshots: graceful-fs: 4.2.11 tapable: 2.3.3 - es-abstract-get@1.0.0: - dependencies: - es-errors: 1.3.0 - es-object-atoms: 1.1.2 - is-callable: 1.2.7 - object-inspect: 1.13.4 - - es-abstract@1.24.2: - dependencies: - array-buffer-byte-length: 1.0.2 - arraybuffer.prototype.slice: 1.0.4 - available-typed-arrays: 1.0.7 - call-bind: 1.0.9 - call-bound: 1.0.4 - data-view-buffer: 1.0.2 - data-view-byte-length: 1.0.2 - data-view-byte-offset: 1.0.1 - es-define-property: 1.0.1 - es-errors: 1.3.0 - es-object-atoms: 1.1.2 - es-set-tostringtag: 2.1.0 - es-to-primitive: 1.3.4 - function.prototype.name: 1.2.0 - get-intrinsic: 1.3.0 - get-proto: 1.0.1 - get-symbol-description: 1.1.0 - globalthis: 1.0.4 - gopd: 1.2.0 - has-property-descriptors: 1.0.2 - has-proto: 1.2.0 - has-symbols: 1.1.0 - hasown: 2.0.4 - internal-slot: 1.1.0 - is-array-buffer: 3.0.5 - is-callable: 1.2.7 - is-data-view: 1.0.2 - is-negative-zero: 2.0.3 - is-regex: 1.2.1 - is-set: 2.0.3 - is-shared-array-buffer: 1.0.4 - is-string: 1.1.1 - is-typed-array: 1.1.15 - is-weakref: 1.1.1 - math-intrinsics: 1.1.0 - object-inspect: 1.13.4 - object-keys: 1.1.1 - object.assign: 4.1.7 - own-keys: 1.0.1 - regexp.prototype.flags: 1.5.4 - safe-array-concat: 1.1.4 - safe-push-apply: 1.0.0 - safe-regex-test: 1.1.0 - set-proto: 1.0.0 - stop-iteration-iterator: 1.1.0 - string.prototype.trim: 1.2.11 - string.prototype.trimend: 1.0.10 - string.prototype.trimstart: 1.0.8 - typed-array-buffer: 1.0.3 - typed-array-byte-length: 1.0.3 - typed-array-byte-offset: 1.0.4 - typed-array-length: 1.0.8 - unbox-primitive: 1.1.0 - which-typed-array: 1.1.22 - es-define-property@1.0.1: {} es-errors@1.3.0: {} - es-iterator-helpers@1.3.3: - dependencies: - call-bind: 1.0.9 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-abstract: 1.24.2 - es-errors: 1.3.0 - es-set-tostringtag: 2.1.0 - function-bind: 1.1.2 - get-intrinsic: 1.3.0 - globalthis: 1.0.4 - gopd: 1.2.0 - has-property-descriptors: 1.0.2 - has-proto: 1.2.0 - has-symbols: 1.1.0 - internal-slot: 1.1.0 - iterator.prototype: 1.1.5 - math-intrinsics: 1.1.0 - es-object-atoms@1.1.2: dependencies: es-errors: 1.3.0 @@ -5186,19 +4580,6 @@ snapshots: has-tostringtag: 1.0.2 hasown: 2.0.4 - es-shim-unscopables@1.1.0: - dependencies: - hasown: 2.0.4 - - es-to-primitive@1.3.4: - dependencies: - es-abstract-get: 1.0.0 - es-define-property: 1.0.1 - es-errors: 1.3.0 - is-callable: 1.2.7 - is-date-object: 1.1.0 - is-symbol: 1.1.1 - es5-ext@0.10.64: dependencies: es6-iterator: 2.0.3 @@ -5269,28 +4650,6 @@ snapshots: dependencies: eslint: 9.39.4(jiti@2.7.0) - eslint-plugin-react@7.37.5(eslint@9.39.4(jiti@2.7.0)): - dependencies: - array-includes: 3.1.9 - array.prototype.findlast: 1.2.5 - array.prototype.flatmap: 1.3.3 - array.prototype.tosorted: 1.1.4 - doctrine: 2.1.0 - es-iterator-helpers: 1.3.3 - eslint: 9.39.4(jiti@2.7.0) - estraverse: 5.3.0 - hasown: 2.0.4 - jsx-ast-utils: 3.3.5 - minimatch: 3.1.5 - object.entries: 1.1.9 - object.fromentries: 2.0.8 - object.values: 1.2.1 - prop-types: 15.8.1 - resolve: 2.0.0-next.7 - semver: 6.3.1 - string.prototype.matchall: 4.0.12 - string.prototype.repeat: 1.0.0 - eslint-scope@8.4.0: dependencies: esrecurse: 4.3.0 @@ -5407,10 +4766,6 @@ snapshots: follow-redirects@1.16.0: {} - for-each@0.3.5: - dependencies: - is-callable: 1.2.7 - form-data@4.0.6: dependencies: asynckit: 0.4.0 @@ -5424,22 +4779,6 @@ snapshots: function-bind@1.1.2: {} - function.prototype.name@1.2.0: - dependencies: - call-bind: 1.0.9 - call-bound: 1.0.4 - es-define-property: 1.0.1 - es-errors: 1.3.0 - functions-have-names: 1.2.3 - has-property-descriptors: 1.0.2 - hasown: 2.0.4 - is-callable: 1.2.7 - is-document.all: 1.0.0 - - functions-have-names@1.2.3: {} - - generator-function@2.0.1: {} - get-intrinsic@1.3.0: dependencies: call-bind-apply-helpers: 1.0.2 @@ -5460,12 +4799,6 @@ snapshots: dunder-proto: 1.0.1 es-object-atoms: 1.1.2 - get-symbol-description@1.1.0: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - get-intrinsic: 1.3.0 - glob-parent@6.0.2: dependencies: is-glob: 4.0.3 @@ -5474,11 +4807,6 @@ snapshots: globals@16.5.0: {} - globalthis@1.0.4: - dependencies: - define-properties: 1.2.1 - gopd: 1.2.0 - globrex@0.1.2: {} goober@2.1.19(csstype@3.2.3): @@ -5489,18 +4817,8 @@ snapshots: graceful-fs@4.2.11: {} - has-bigints@1.1.0: {} - has-flag@4.0.0: {} - has-property-descriptors@1.0.2: - dependencies: - es-define-property: 1.0.1 - - has-proto@1.2.0: - dependencies: - dunder-proto: 1.0.1 - has-symbols@1.1.0: {} has-tostringtag@1.0.2: @@ -5535,143 +4853,22 @@ snapshots: imurmurhash@0.1.4: {} - internal-slot@1.1.0: - dependencies: - es-errors: 1.3.0 - hasown: 2.0.4 - side-channel: 1.1.1 - - is-array-buffer@3.0.5: - dependencies: - call-bind: 1.0.9 - call-bound: 1.0.4 - get-intrinsic: 1.3.0 - - is-async-function@2.1.1: - dependencies: - async-function: 1.0.0 - call-bound: 1.0.4 - get-proto: 1.0.1 - has-tostringtag: 1.0.2 - safe-regex-test: 1.1.0 - - is-bigint@1.1.0: - dependencies: - has-bigints: 1.1.0 - - is-boolean-object@1.2.2: - dependencies: - call-bound: 1.0.4 - has-tostringtag: 1.0.2 - - is-callable@1.2.7: {} - - is-core-module@2.16.2: - dependencies: - hasown: 2.0.4 - - is-data-view@1.0.2: - dependencies: - call-bound: 1.0.4 - get-intrinsic: 1.3.0 - is-typed-array: 1.1.15 - - is-date-object@1.1.0: - dependencies: - call-bound: 1.0.4 - has-tostringtag: 1.0.2 - - is-document.all@1.0.0: - dependencies: - call-bound: 1.0.4 - is-extglob@2.1.1: {} - is-finalizationregistry@1.1.1: - dependencies: - call-bound: 1.0.4 - - is-generator-function@1.1.2: - dependencies: - call-bound: 1.0.4 - generator-function: 2.0.1 - get-proto: 1.0.1 - has-tostringtag: 1.0.2 - safe-regex-test: 1.1.0 - is-glob@4.0.3: dependencies: is-extglob: 2.1.1 is-hotkey@0.2.0: {} - is-map@2.0.3: {} - - is-negative-zero@2.0.3: {} - is-network-error@1.3.2: {} - is-number-object@1.1.1: - dependencies: - call-bound: 1.0.4 - has-tostringtag: 1.0.2 - - is-regex@1.2.1: - dependencies: - call-bound: 1.0.4 - gopd: 1.2.0 - has-tostringtag: 1.0.2 - hasown: 2.0.4 - - is-set@2.0.3: {} - - is-shared-array-buffer@1.0.4: - dependencies: - call-bound: 1.0.4 - - is-string@1.1.1: - dependencies: - call-bound: 1.0.4 - has-tostringtag: 1.0.2 - - is-symbol@1.1.1: - dependencies: - call-bound: 1.0.4 - has-symbols: 1.1.0 - safe-regex-test: 1.1.0 - - is-typed-array@1.1.15: - dependencies: - which-typed-array: 1.1.22 - is-url@1.2.4: {} - is-weakmap@2.0.2: {} - - is-weakref@1.1.1: - dependencies: - call-bound: 1.0.4 - - is-weakset@2.0.4: - dependencies: - call-bound: 1.0.4 - get-intrinsic: 1.3.0 - - isarray@2.0.5: {} - isbot@5.1.44: {} isexe@2.0.0: {} - iterator.prototype@1.1.5: - dependencies: - define-data-property: 1.1.4 - es-object-atoms: 1.1.2 - get-intrinsic: 1.3.0 - get-proto: 1.0.1 - has-symbols: 1.1.0 - set-function-name: 2.0.2 - jiti@2.7.0: {} js-tokens@4.0.0: {} @@ -5688,13 +4885,6 @@ snapshots: json-stable-stringify-without-jsonify@1.0.1: {} - jsx-ast-utils@3.3.5: - dependencies: - array-includes: 3.1.9 - array.prototype.flat: 1.3.3 - object.assign: 4.1.7 - object.values: 1.2.1 - keyv@4.5.4: dependencies: json-buffer: 3.0.1 @@ -5773,10 +4963,6 @@ snapshots: lodash@4.18.1: {} - loose-envify@1.4.0: - dependencies: - js-tokens: 4.0.0 - lucide-react@1.25.0(react@19.2.7): dependencies: react: 19.2.7 @@ -5822,13 +5008,6 @@ snapshots: next-tick@1.1.0: {} - node-exports-info@1.6.2: - dependencies: - array.prototype.flatmap: 1.3.3 - es-errors: 1.3.0 - object.entries: 1.1.9 - semver: 6.3.1 - npm-run-path@6.0.0: dependencies: path-key: 4.0.0 @@ -5836,42 +5015,6 @@ snapshots: nprogress@0.2.0: {} - object-assign@4.1.1: {} - - object-inspect@1.13.4: {} - - object-keys@1.1.1: {} - - object.assign@4.1.7: - dependencies: - call-bind: 1.0.9 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-object-atoms: 1.1.2 - has-symbols: 1.1.0 - object-keys: 1.1.1 - - object.entries@1.1.9: - dependencies: - call-bind: 1.0.9 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-object-atoms: 1.1.2 - - object.fromentries@2.0.8: - dependencies: - call-bind: 1.0.9 - define-properties: 1.2.1 - es-abstract: 1.24.2 - es-object-atoms: 1.1.2 - - object.values@1.2.1: - dependencies: - call-bind: 1.0.9 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-object-atoms: 1.1.2 - optionator@0.9.4: dependencies: deep-is: 0.1.4 @@ -5881,12 +5024,6 @@ snapshots: type-check: 0.4.0 word-wrap: 1.2.5 - own-keys@1.0.1: - dependencies: - get-intrinsic: 1.3.0 - object-keys: 1.1.1 - safe-push-apply: 1.0.0 - p-limit@3.1.0: dependencies: yocto-queue: 0.1.0 @@ -5911,14 +5048,10 @@ snapshots: path-key@4.0.0: {} - path-parse@1.0.7: {} - picocolors@1.1.1: {} picomatch@4.0.5: {} - possible-typed-array-names@1.1.0: {} - postcss@8.5.16: dependencies: nanoid: 3.3.15 @@ -5937,12 +5070,6 @@ snapshots: prismjs@1.30.0: {} - prop-types@15.8.1: - dependencies: - loose-envify: 1.4.0 - object-assign: 4.1.1 - react-is: 16.13.1 - proxy-from-env@2.1.0: {} punycode@2.3.1: {} @@ -6027,8 +5154,6 @@ snapshots: dependencies: react: 19.2.7 - react-is@16.13.1: {} - react-remove-scroll-bar@2.3.8(@types/react@19.2.17)(react@19.2.7): dependencies: react: 19.2.7 @@ -6060,39 +5185,10 @@ snapshots: readdirp@4.1.2: {} - reflect.getprototypeof@1.0.10: - dependencies: - call-bind: 1.0.9 - define-properties: 1.2.1 - es-abstract: 1.24.2 - es-errors: 1.3.0 - es-object-atoms: 1.1.2 - get-intrinsic: 1.3.0 - get-proto: 1.0.1 - which-builtin-type: 1.2.1 - - regexp.prototype.flags@1.5.4: - dependencies: - call-bind: 1.0.9 - define-properties: 1.2.1 - es-errors: 1.3.0 - get-proto: 1.0.1 - gopd: 1.2.0 - set-function-name: 2.0.2 - reselect@5.2.0: {} resolve-from@4.0.0: {} - resolve@2.0.0-next.7: - dependencies: - es-errors: 1.3.0 - is-core-module: 2.16.2 - node-exports-info: 1.6.2 - object-keys: 1.1.1 - path-parse: 1.0.7 - supports-preserve-symlinks-flag: 1.0.0 - retry@0.13.1: {} rollup@4.62.2: @@ -6126,33 +5222,12 @@ snapshots: '@rollup/rollup-win32-x64-msvc': 4.62.2 fsevents: 2.3.3 - safe-array-concat@1.1.4: - dependencies: - call-bind: 1.0.9 - call-bound: 1.0.4 - get-intrinsic: 1.3.0 - has-symbols: 1.1.0 - isarray: 2.0.5 - - safe-push-apply@1.0.0: - dependencies: - es-errors: 1.3.0 - isarray: 2.0.5 - - safe-regex-test@1.1.0: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - is-regex: 1.2.1 - scheduler@0.27.0: {} scroll-into-view-if-needed@3.1.0: dependencies: compute-scroll-into-view: 3.1.1 - semver@6.3.1: {} - semver@7.8.5: {} seroval-plugins@1.5.4(seroval@1.5.4): @@ -6161,62 +5236,12 @@ snapshots: seroval@1.5.4: {} - set-function-length@1.2.2: - dependencies: - define-data-property: 1.1.4 - es-errors: 1.3.0 - function-bind: 1.1.2 - get-intrinsic: 1.3.0 - gopd: 1.2.0 - has-property-descriptors: 1.0.2 - - set-function-name@2.0.2: - dependencies: - define-data-property: 1.1.4 - es-errors: 1.3.0 - functions-have-names: 1.2.3 - has-property-descriptors: 1.0.2 - - set-proto@1.0.0: - dependencies: - dunder-proto: 1.0.1 - es-errors: 1.3.0 - es-object-atoms: 1.1.2 - shebang-command@2.0.0: dependencies: shebang-regex: 3.0.0 shebang-regex@3.0.0: {} - side-channel-list@1.0.1: - dependencies: - es-errors: 1.3.0 - object-inspect: 1.13.4 - - side-channel-map@1.0.1: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - get-intrinsic: 1.3.0 - object-inspect: 1.13.4 - - side-channel-weakmap@1.0.2: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - get-intrinsic: 1.3.0 - object-inspect: 1.13.4 - side-channel-map: 1.0.1 - - side-channel@1.1.1: - dependencies: - es-errors: 1.3.0 - object-inspect: 1.13.4 - side-channel-list: 1.0.1 - side-channel-map: 1.0.1 - side-channel-weakmap: 1.0.2 - slate-history@0.115.0(slate@0.124.1): dependencies: slate: 0.124.1 @@ -6234,56 +5259,6 @@ snapshots: ssr-window@4.0.2: {} - stop-iteration-iterator@1.1.0: - dependencies: - es-errors: 1.3.0 - internal-slot: 1.1.0 - - string.prototype.matchall@4.0.12: - dependencies: - call-bind: 1.0.9 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-abstract: 1.24.2 - es-errors: 1.3.0 - es-object-atoms: 1.1.2 - get-intrinsic: 1.3.0 - gopd: 1.2.0 - has-symbols: 1.1.0 - internal-slot: 1.1.0 - regexp.prototype.flags: 1.5.4 - set-function-name: 2.0.2 - side-channel: 1.1.1 - - string.prototype.repeat@1.0.0: - dependencies: - define-properties: 1.2.1 - es-abstract: 1.24.2 - - string.prototype.trim@1.2.11: - dependencies: - call-bind: 1.0.9 - call-bound: 1.0.4 - define-data-property: 1.1.4 - define-properties: 1.2.1 - es-abstract: 1.24.2 - es-object-atoms: 1.1.2 - has-property-descriptors: 1.0.2 - safe-regex-test: 1.1.0 - - string.prototype.trimend@1.0.10: - dependencies: - call-bind: 1.0.9 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-object-atoms: 1.1.2 - - string.prototype.trimstart@1.0.8: - dependencies: - call-bind: 1.0.9 - define-properties: 1.2.1 - es-object-atoms: 1.1.2 - strip-ansi@7.2.0: dependencies: ansi-regex: 6.2.2 @@ -6294,8 +5269,6 @@ snapshots: dependencies: has-flag: 4.0.0 - supports-preserve-symlinks-flag@1.0.0: {} - synckit@0.11.13: dependencies: '@pkgr/core': 0.3.6 @@ -6331,39 +5304,6 @@ snapshots: type@2.7.3: {} - typed-array-buffer@1.0.3: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - is-typed-array: 1.1.15 - - typed-array-byte-length@1.0.3: - dependencies: - call-bind: 1.0.9 - for-each: 0.3.5 - gopd: 1.2.0 - has-proto: 1.2.0 - is-typed-array: 1.1.15 - - typed-array-byte-offset@1.0.4: - dependencies: - available-typed-arrays: 1.0.7 - call-bind: 1.0.9 - for-each: 0.3.5 - gopd: 1.2.0 - has-proto: 1.2.0 - is-typed-array: 1.1.15 - reflect.getprototypeof: 1.0.10 - - typed-array-length@1.0.8: - dependencies: - call-bind: 1.0.9 - for-each: 0.3.5 - gopd: 1.2.0 - is-typed-array: 1.1.15 - possible-typed-array-names: 1.1.0 - reflect.getprototypeof: 1.0.10 - typescript-eslint@8.62.1(eslint@9.39.4(jiti@2.7.0))(typescript@5.8.3): dependencies: '@typescript-eslint/eslint-plugin': 8.62.1(@typescript-eslint/parser@8.62.1(eslint@9.39.4(jiti@2.7.0))(typescript@5.8.3))(eslint@9.39.4(jiti@2.7.0))(typescript@5.8.3) @@ -6377,13 +5317,6 @@ snapshots: typescript@5.8.3: {} - unbox-primitive@1.1.0: - dependencies: - call-bound: 1.0.4 - has-bigints: 1.1.0 - has-symbols: 1.1.0 - which-boxed-primitive: 1.1.1 - undici-types@7.24.6: {} unicorn-magic@0.3.0: {} @@ -6455,47 +5388,6 @@ snapshots: vscode-uri@3.1.0: {} - which-boxed-primitive@1.1.1: - dependencies: - is-bigint: 1.1.0 - is-boolean-object: 1.2.2 - is-number-object: 1.1.1 - is-string: 1.1.1 - is-symbol: 1.1.1 - - which-builtin-type@1.2.1: - dependencies: - call-bound: 1.0.4 - function.prototype.name: 1.2.0 - has-tostringtag: 1.0.2 - is-async-function: 2.1.1 - is-date-object: 1.1.0 - is-finalizationregistry: 1.1.1 - is-generator-function: 1.1.2 - is-regex: 1.2.1 - is-weakref: 1.1.1 - isarray: 2.0.5 - which-boxed-primitive: 1.1.1 - which-collection: 1.0.2 - which-typed-array: 1.1.22 - - which-collection@1.0.2: - dependencies: - is-map: 2.0.3 - is-set: 2.0.3 - is-weakmap: 2.0.2 - is-weakset: 2.0.4 - - which-typed-array@1.1.22: - dependencies: - available-typed-arrays: 1.0.7 - call-bind: 1.0.9 - call-bound: 1.0.4 - for-each: 0.3.5 - get-proto: 1.0.1 - gopd: 1.2.0 - has-tostringtag: 1.0.2 - which@2.0.2: dependencies: isexe: 2.0.0 diff --git a/scripts/deploy.sh b/scripts/deploy.sh deleted file mode 100755 index 5e506ce..0000000 --- a/scripts/deploy.sh +++ /dev/null @@ -1,31 +0,0 @@ -#!/bin/bash -set -euo pipefail - -PROJECT_ROOT=$(cd -- "$(dirname "${BASH_SOURCE[0]}")/.." &> /dev/null && pwd) -REMOTE_SERVER="01" -REMOTE_DIR="/srv/docker/nginx/www/admin" - -cd "${PROJECT_ROOT}" - -pnpm run build - -echo $PWD - -tar -czf dist.tar.gz ./dist >/dev/null 2>&1 - -scp dist.tar.gz "${REMOTE_SERVER}:${REMOTE_DIR}" - -ssh "$REMOTE_SERVER" bash -s -- "${REMOTE_DIR}" << 'EOF' - REMOTE_DIR="$1" - - set -euo pipefail - - cd "${REMOTE_DIR}" - rm -rf dist - tar -xzf dist.tar.gz - rm dist.tar.gz -EOF - -rm -rf dist -rm -f dist.tar.gz -echo "部署完成" diff --git a/src/api/blog/category.ts b/src/api/blog/category.ts index 38e99cb..48baa73 100644 --- a/src/api/blog/category.ts +++ b/src/api/blog/category.ts @@ -1,22 +1,22 @@ import { http } from '@/lib' import type { Category, CategoryForm, PageParams } from '@/schemas' -export const getCategories = (params: PageParams) => { - return http.get>('/category', { params }) +export const listCategories = (params: PageParams) => { + return http.get>('/categories', { params }) } export const createCategory = (data: CategoryForm) => { - return http.post('/category', data) + return http.post('/categories', data) } export const updateCategory = (id: number, data: CategoryForm) => { - return http.patch(`/category/${id}`, data) + return http.patch(`/categories/${id}`, data) } export const deleteCategory = (id: number) => { - return http.delete(`/category/${id}`) + return http.delete(`/categories/${id}`) } export const listAllCategories = () => { - return http.get('/category/all') + return http.get('/categories/all') } diff --git a/src/api/blog/post.ts b/src/api/blog/post.ts index 0a1c265..c35c567 100644 --- a/src/api/blog/post.ts +++ b/src/api/blog/post.ts @@ -1,22 +1,22 @@ import { http } from '@/lib' import type { PageParams, Post, PostFormOutput } from '@/schemas' -export const getPosts = (params: PageParams) => { - return http.get>('/post', { params }) +export const listPosts = (params: PageParams) => { + return http.get>('/posts', { params }) } export const createPost = (data: PostFormOutput) => { - return http.post<{ post_id: number }>('/post', data) + return http.post<{ post_id: number }>('/posts', data) } export const updatePost = (id: number, data: PostFormOutput) => { - return http.patch(`/post/${id}`, data) + return http.patch(`/posts/${id}`, data) } export const getPost = (id: number) => { - return http.get(`/post/${id}`) + return http.get(`/posts/${id}`) } export const deletePost = (id: number) => { - return http.delete(`/post/${id}`) + return http.delete(`/posts/${id}`) } diff --git a/src/api/blog/tag.ts b/src/api/blog/tag.ts index 02b0040..5f8d0ef 100644 --- a/src/api/blog/tag.ts +++ b/src/api/blog/tag.ts @@ -1,22 +1,22 @@ import { http } from '@/lib' import type { PageParams, Tag, TagForm } from '@/schemas' -export const getTags = (params: PageParams) => { - return http.get>('/tag', { params }) +export const listTags = (params: PageParams) => { + return http.get>('/tags', { params }) } export const createTag = (data: TagForm) => { - return http.post('/tag', data) + return http.post('/tags', data) } export const updateTag = (id: number, data: TagForm) => { - return http.patch(`/tag/${id}`, data) + return http.patch(`/tags/${id}`, data) } export const deleteTag = (id: number) => { - return http.delete(`/tag/${id}`) + return http.delete(`/tags/${id}`) } export const listAllTags = () => { - return http.get('/tag/all') + return http.get('/tags/all') } diff --git a/src/api/system/api.ts b/src/api/system/api.ts index 797ff47..5aea53e 100644 --- a/src/api/system/api.ts +++ b/src/api/system/api.ts @@ -1,30 +1,30 @@ import { http } from '@/lib' -import type { PageParams, SearchSysApiParams, SysApi, SysApiForm } from '@/schemas' +import type { Api, ApiForm, PageParams, SearchApiParams } from '@/schemas' -export const getSysApis = (params: PageParams & SearchSysApiParams) => { - return http.get>('/api', { params }) +export const listApis = (params: PageParams & SearchApiParams) => { + return http.get>('/apis', { params }) } -export const getSysApiGroups = () => { - return http.get('/api/group-names') +export const listApiGroups = () => { + return http.get('/apis/groups') } -export const getAllSysApi = () => { - return http.get('/api/all') +export const listAllApi = () => { + return http.get('/apis/all') } export const getRoleApis = (roleId: number) => { - return http.get(`/role/${roleId}/apis`) + return http.get(`/roles/${roleId}/apis`) } -export const updateSysApi = (id: number, data: SysApiForm) => { - return http.patch('/api/' + id, data) +export const updateApi = (id: number, data: ApiForm) => { + return http.patch('/apis/' + id, data) } -export const createSysApi = (data: SysApiForm) => { - return http.post('/api', data) +export const createApi = (data: ApiForm) => { + return http.post('/apis', data) } -export const deleteSysApi = (id: number) => { - return http.delete(`/api/${id}`) +export const deleteApi = (id: number) => { + return http.delete(`/apis/${id}`) } diff --git a/src/api/system/file.ts b/src/api/system/file.ts index 9ac9aba..bec4830 100644 --- a/src/api/system/file.ts +++ b/src/api/system/file.ts @@ -1,14 +1,14 @@ import { http } from '@/lib' -import type { PageParams, SysFile, SysFileForm } from '@/schemas' +import type { File, FileForm, PageParams } from '@/schemas' -export const getSysFiles = (params: PageParams) => { - return http.get>('/file', { params }) +export const listFiles = (params: PageParams) => { + return http.get>('/files', { params }) } -export const uploadFile = (file: File, onProgress?: (percent: number) => void) => { +export const uploadFile = (file: globalThis.File, onProgress?: (percent: number) => void) => { const formData = new FormData() formData.append('file', file) - return http.post('/file', formData, { + return http.post('/files', formData, { headers: { 'Content-Type': 'multipart/form-data' }, onUploadProgress: (progressEvent) => { if (onProgress && progressEvent.total) { diff --git a/src/api/system/menu.ts b/src/api/system/menu.ts index 93a39f1..4a16151 100644 --- a/src/api/system/menu.ts +++ b/src/api/system/menu.ts @@ -1,26 +1,26 @@ import { http } from '@/lib' -import type { SysMenu, SysMenuForm } from '@/schemas' +import type { Menu, MenuForm } from '@/schemas' -export const getAllSysMenus = () => { - return http.get('/menu/all') +export const getAllMenus = () => { + return http.get('/menus/all') } -export const getSysRoleMenus = (roleId: number) => { - return http.get(`/role/${roleId}/menus`) +export const getRoleMenus = (roleId: number) => { + return http.get(`/roles/${roleId}/menus`) } -export const assignSysRoleMenus = (id: number, menu_ids: number[]) => { - return http.put(`role/${id}/menus`, { menu_ids }) +export const assignRoleMenus = (id: number, menu_ids: number[]) => { + return http.put(`roles/${id}/menus`, { menu_ids }) } -export const createSysMenu = (data: SysMenuForm) => { - return http.post('/menu', data) +export const createMenu = (data: MenuForm) => { + return http.post('/menus', data) } -export const updateSysMenu = (id: number, data: SysMenuForm) => { - return http.patch('/menu/' + id, data) +export const updateMenu = (id: number, data: MenuForm) => { + return http.patch('/menus/' + id, data) } -export const deleteSysMenu = (id: number) => { - return http.delete(`/menu/${id}`) +export const deleteMenu = (id: number) => { + return http.delete(`/menus/${id}`) } diff --git a/src/api/system/role.ts b/src/api/system/role.ts index a4c61fe..41e8a47 100644 --- a/src/api/system/role.ts +++ b/src/api/system/role.ts @@ -1,27 +1,27 @@ import { http } from '@/lib' -import type { SysRole, SysRoleForm } from '@/schemas' +import type { Role, RoleForm } from '@/schemas' import { type PageParams } from '@/schemas' -export const getSysRoles = (params: PageParams) => { - return http.get>('/role', { params }) +export const listRoles = (params: PageParams) => { + return http.get>('/roles', { params }) } -export const getAllSysRoles = () => { - return http.get('/role/all') +export const listAllRoles = () => { + return http.get('/roles/all') } -export const updateSysRole = (id: number, data: SysRoleForm) => { - return http.patch('/role/' + id, data) +export const updateRole = (id: number, data: RoleForm) => { + return http.patch('/roles/' + id, data) } -export const createSysRole = (data: SysRoleForm) => { - return http.post('/role', data) +export const createRole = (data: RoleForm) => { + return http.post('/roles', data) } -export const deleteSysRole = (id: number) => { - return http.delete(`/role/${id}`) +export const deleteRole = (id: number) => { + return http.delete(`/roles/${id}`) } -export const assignSysRoleApis = (id: number, api_ids: number[]) => { - return http.put(`role/${id}/apis`, { api_ids }) +export const assignRoleApis = (id: number, api_ids: number[]) => { + return http.put(`roles/${id}/apis`, { api_ids }) } diff --git a/src/api/system/user.ts b/src/api/system/user.ts index b0b9805..1c6b869 100644 --- a/src/api/system/user.ts +++ b/src/api/system/user.ts @@ -1,41 +1,35 @@ import { http } from '@/lib' -import type { - SearchSysUserParams, - SysRole, - SysUser, - SysUserFormOutput, - SysUserInfo, -} from '@/schemas' +import type { Role, SearchUserParams, User, UserFormOutput, UserInfo } from '@/schemas' import { type PageParams } from '@/schemas' -export const getSysUsers = (params: PageParams & SearchSysUserParams) => { - return http.get>('/user', { params }) +export const listUsers = (params: PageParams & SearchUserParams) => { + return http.get>('/users', { params }) } -export const getSysUserRoles = (id: number) => { - return http.get(`/user/${id}/roles`) +export const listUserRoles = (id: number) => { + return http.get(`/users/${id}/roles`) } -export const getSysUserInfo = () => { - return http.get('/user/info') +export const getUserInfo = () => { + return http.get('/users/me') } -export const updateSysUser = (id: number, data: SysUserFormOutput) => { - return http.patch('/user/' + id, data) +export const updateUser = (id: number, data: UserFormOutput) => { + return http.patch('/users/' + id, data) } -export const createSysUser = (data: SysUserFormOutput) => { - return http.post('/user', data) +export const createUser = (data: UserFormOutput) => { + return http.post('/users', data) } -export const deleteSysUser = (id: number) => { - return http.delete(`/user/${id}`) +export const deleteUser = (id: number) => { + return http.delete(`/users/${id}`) } -export const assignSysUserRoles = (id: number, role_ids: number[]) => { - return http.put(`user/${id}/roles`, { role_ids }) +export const assignUserRoles = (id: number, role_ids: number[]) => { + return http.put(`users/${id}/roles`, { role_ids }) } -export const changeSysUserPassword = (id: number, password: string) => { - return http.patch(`/user/${id}/password`, { password }) +export const updateUserPassword = (id: number, password: string) => { + return http.patch(`/users/${id}/password`, { password }) } diff --git a/src/components/editor/index.tsx b/src/components/editor/index.tsx index 8ae1fe3..be6e5d0 100644 --- a/src/components/editor/index.tsx +++ b/src/components/editor/index.tsx @@ -74,7 +74,7 @@ export const WEditor = ({ defaultValues, onChange }: Props) => { uploadImage: { async customUpload(file: File, insertFn: InsertFnType) { const { data } = await uploadFile(file) - insertFn(data.file_path, data.file_path, data.file_path) + insertFn(data.file_url, data.file_url, data.file_url) }, }, }, diff --git a/src/components/file-upload/file-upload.tsx b/src/components/file-upload/file-upload.tsx index e0a8646..30af254 100644 --- a/src/components/file-upload/file-upload.tsx +++ b/src/components/file-upload/file-upload.tsx @@ -15,7 +15,7 @@ import { } from '@/components/ui/attachment.tsx' import { Input } from '@/components/ui/input.tsx' import { Spinner } from '@/components/ui/spinner.tsx' -import type { SysFileForm } from '@/schemas' +import type { FileForm } from '@/schemas' type State = 'idle' | 'uploading' | 'processing' | 'error' | 'done' @@ -27,8 +27,8 @@ type UploadFile = { } export interface FileUploadProps { - defaultFiles?: SysFileForm[] - onChange?: (files: SysFileForm[]) => void + defaultFiles?: FileForm[] + onChange?: (files: FileForm[]) => void } export const FileUpload = ({ defaultFiles, onChange }: FileUploadProps) => { @@ -37,7 +37,7 @@ export const FileUpload = ({ defaultFiles, onChange }: FileUploadProps) => { id: item.id, uid: nanoid(), state: 'done', - file_name: item.file_path, + file_name: item.file_url, })), ) @@ -46,7 +46,7 @@ export const FileUpload = ({ defaultFiles, onChange }: FileUploadProps) => { .filter((item) => item.id) .map((item) => ({ id: item.id as number, - file_path: item.file_name, + file_url: item.file_name, })) onChange?.(_files) diff --git a/src/layout/components/app-sidebar.tsx b/src/layout/components/app-sidebar.tsx index 1974b2e..419dbf8 100644 --- a/src/layout/components/app-sidebar.tsx +++ b/src/layout/components/app-sidebar.tsx @@ -18,11 +18,11 @@ import { } from '@/components/ui/sidebar' import { MenuType } from '@/enum' import { generateMenus } from '@/lib' -import type { SysMenuTree } from '@/schemas' +import type { MenuTree } from '@/schemas' import { siteConfig } from '@/siteConfig.ts' import { useStore } from '@/store' -const isMenuActive = (menu: SysMenuTree, pathname: string): boolean => { +const isMenuActive = (menu: MenuTree, pathname: string): boolean => { if (menu.path === pathname) { return true } @@ -30,7 +30,7 @@ const isMenuActive = (menu: SysMenuTree, pathname: string): boolean => { return menu.children?.some((item) => isMenuActive(item, pathname)) ?? false } -const MenuTreeItem = ({ menu, depth = 0 }: { menu: SysMenuTree; depth?: number }) => { +const MenuTreeItem = ({ menu, depth = 0 }: { menu: MenuTree; depth?: number }) => { const { expandedMenus, toggleMenu } = useStore() const pathname = useRouterState({ select: (state) => state.location.pathname }) const active = isMenuActive(menu, pathname) diff --git a/src/lib/menus.ts b/src/lib/menus.ts index 6715d5a..2287353 100644 --- a/src/lib/menus.ts +++ b/src/lib/menus.ts @@ -1,5 +1,5 @@ import { MenuType } from '@/enum' -import type { SysMenu, SysMenuTree } from '@/schemas' +import type { Menu, MenuTree } from '@/schemas' // 生成树状菜单 用于菜单渲染 export const generateMenus = ({ @@ -8,11 +8,11 @@ export const generateMenus = ({ showHidden = false, showButton = false, }: { - menus: SysMenu[] + menus: Menu[] parent_id?: number | null showHidden?: boolean showButton?: boolean -}): SysMenuTree[] => { +}): MenuTree[] => { return menus .filter( (item) => @@ -27,7 +27,7 @@ export const generateMenus = ({ })) } -export const generateBreadcrumbs = (list: SysMenu[], path: string) => { +export const generateBreadcrumbs = (list: Menu[], path: string) => { const breadcrumbs: string[] = [] const findNodeId = list.find((item) => item.path === path) if (!findNodeId) return breadcrumbs @@ -45,7 +45,7 @@ export const generateBreadcrumbs = (list: SysMenu[], path: string) => { return breadcrumbs } -export const getExpandedMenus = (menus: SysMenu[]) => { +export const getExpandedMenus = (menus: Menu[]) => { const expandedMenus: number[] = [] const path = location.pathname const findNodeId = menus.find((item) => item.path === path) diff --git a/src/pages/blog/category/index.tsx b/src/pages/blog/category/index.tsx index d2adcb3..9959537 100644 --- a/src/pages/blog/category/index.tsx +++ b/src/pages/blog/category/index.tsx @@ -3,7 +3,7 @@ import { useMemo, useState } from 'react' import { useQuery } from '@tanstack/react-query' import { getCoreRowModel, useReactTable } from '@tanstack/react-table' -import { getCategories } from '@/api' +import { listCategories } from '@/api' import { hasPermission } from '@/lib' import { type Category } from '@/schemas' @@ -22,7 +22,7 @@ export default function CrudPage() { const { data, isFetching, refetch } = useQuery({ queryKey: [QUERY_KEY, pagination.pageIndex, pagination.pageSize], queryFn: () => - getCategories({ + listCategories({ page: pagination.pageIndex + 1, page_size: pagination.pageSize, }), diff --git a/src/pages/blog/post-edit/components/cover-upload.tsx b/src/pages/blog/post-edit/components/cover-upload.tsx index 6e171b6..1036fae 100644 --- a/src/pages/blog/post-edit/components/cover-upload.tsx +++ b/src/pages/blog/post-edit/components/cover-upload.tsx @@ -3,17 +3,17 @@ import { useEffect, useRef, useState } from 'react' import { ImagePlus } from 'lucide-react' import { uploadFile } from '@/api' -import type { SysFileForm } from '@/schemas' +import type { FileForm } from '@/schemas' interface Props { - value: SysFileForm | undefined - onChange?: (file: SysFileForm) => void + value: FileForm | undefined + onChange?: (file: FileForm) => void invalid?: boolean } export const CoverUpload = ({ value, onChange, invalid }: Props) => { const fileInputRef = useRef(null) - const [initialFile, setInitialFile] = useState() + const [initialFile, setInitialFile] = useState() useEffect(() => { setInitialFile(value) @@ -54,7 +54,7 @@ export const CoverUpload = ({ value, onChange, invalid }: Props) => { > {initialFile ? (
- +
) : (
- getPosts({ + listPosts({ page: pagination.pageIndex + 1, page_size: pagination.pageSize, }), diff --git a/src/pages/blog/tag/index.tsx b/src/pages/blog/tag/index.tsx index 6cd7068..0c5a3c4 100644 --- a/src/pages/blog/tag/index.tsx +++ b/src/pages/blog/tag/index.tsx @@ -3,7 +3,7 @@ import { useMemo, useState } from 'react' import { useQuery } from '@tanstack/react-query' import { getCoreRowModel, useReactTable } from '@tanstack/react-table' -import { getTags } from '@/api' +import { listTags } from '@/api' import { hasPermission } from '@/lib' import { type Tag } from '@/schemas' @@ -22,7 +22,7 @@ export default function CrudPage() { const { data, isFetching, refetch } = useQuery({ queryKey: [QUERY_KEY, pagination.pageIndex, pagination.pageSize], queryFn: () => - getTags({ + listTags({ page: pagination.pageIndex + 1, page_size: pagination.pageSize, }), diff --git a/src/pages/system/api/components/action-dialog.tsx b/src/pages/system/api/components/action-dialog.tsx index 9c24899..133778f 100644 --- a/src/pages/system/api/components/action-dialog.tsx +++ b/src/pages/system/api/components/action-dialog.tsx @@ -5,7 +5,7 @@ import { Controller, useForm } from 'react-hook-form' import { toast } from 'sonner' import z from 'zod' -import { createSysApi, updateSysApi } from '@/api' +import { createApi, updateApi } from '@/api' import { Badge } from '@/components/ui/badge.tsx' import { Button } from '@/components/ui/button.tsx' import { @@ -29,10 +29,10 @@ import { } from '@/components/ui/select.tsx' import { Spinner } from '@/components/ui/spinner.tsx' import { HttpMethod, HttpMethodClass } from '@/enum' -import { SysApiFormSchema, type SysApi, type SysApiForm } from '@/schemas' +import { apiFormSchema, type Api, type ApiForm } from '@/schemas' interface Props { - currentRow?: SysApi | null + currentRow?: Api | null onClose: () => void onConfirm: () => void open: boolean @@ -45,8 +45,8 @@ export function ActionsDialog({ open, currentRow, onClose, onConfirm }: Props) { const [loading, setLoading] = useState(false) - const form = useForm>({ - resolver: zodResolver(SysApiFormSchema), + const form = useForm>({ + resolver: zodResolver(apiFormSchema), defaultValues: currentRow ? { ...currentRow } : { @@ -58,13 +58,13 @@ export function ActionsDialog({ open, currentRow, onClose, onConfirm }: Props) { }, }) - const onSubmit = async (values: SysApiForm) => { + const onSubmit = async (values: ApiForm) => { try { setLoading(true) if (values.id) { - await updateSysApi(values.id, values) + await updateApi(values.id, values) } else { - await createSysApi(values) + await createApi(values) } toast('操作成功!') onConfirm() diff --git a/src/pages/system/api/components/api-table.tsx b/src/pages/system/api/components/api-table.tsx index e355347..18453b0 100644 --- a/src/pages/system/api/components/api-table.tsx +++ b/src/pages/system/api/components/api-table.tsx @@ -4,14 +4,14 @@ import { Plus } from 'lucide-react' import { Auth } from '@/components/auth' import { DataTable } from '@/components/data-table' import { Button } from '@/components/ui/button.tsx' -import type { SearchSysApiParams } from '@/schemas' +import type { SearchApiParams } from '@/schemas' import { useCrud } from './crud-provider.tsx' import { SearchForm } from './search-form.tsx' interface Props { table: Table - onSearch?: (params: SearchSysApiParams) => void + onSearch?: (params: SearchApiParams) => void } export function ApiTable({ table, onSearch }: Props) { diff --git a/src/pages/system/api/components/columns.tsx b/src/pages/system/api/components/columns.tsx index 578c6c0..de0a421 100644 --- a/src/pages/system/api/components/columns.tsx +++ b/src/pages/system/api/components/columns.tsx @@ -3,14 +3,14 @@ import type { ColumnDef } from '@tanstack/react-table' import { Badge } from '@/components/ui/badge' import { HttpMethodClass, type HttpMethodValues } from '@/enum' import { formatDate, hasPermission } from '@/lib' -import type { SysApi } from '@/schemas' +import type { Api } from '@/schemas' import { RowActions } from './row-actions' -export const createColumns = (): ColumnDef[] => { +export const createColumns = (): ColumnDef[] => { const showAction = hasPermission(['api:update', 'api:delete'], 'any') - const columns: ColumnDef[] = [ + const columns: ColumnDef[] = [ { accessorKey: 'name', header: '接口名称', diff --git a/src/pages/system/api/components/crud-provider.tsx b/src/pages/system/api/components/crud-provider.tsx index c957b21..56b3518 100644 --- a/src/pages/system/api/components/crud-provider.tsx +++ b/src/pages/system/api/components/crud-provider.tsx @@ -1,6 +1,6 @@ import { createContext, useContext, useState, type ReactNode } from 'react' -import { type SysApi } from '@/schemas' +import { type Api } from '@/schemas' import type { Action } from '../constants' @@ -11,11 +11,11 @@ type CrudContextType = { setCurrentRow: (row: T | null) => void } -export const CrudContext = createContext | null>(null) +export const CrudContext = createContext | null>(null) export const CrudProvider = ({ children }: { children: ReactNode }) => { const [action, setAction] = useState(null) - const [currentRow, setCurrentRow] = useState(null) + const [currentRow, setCurrentRow] = useState(null) return ( {children} diff --git a/src/pages/system/api/components/delete-dialog.tsx b/src/pages/system/api/components/delete-dialog.tsx index c9e28c0..b260139 100644 --- a/src/pages/system/api/components/delete-dialog.tsx +++ b/src/pages/system/api/components/delete-dialog.tsx @@ -2,7 +2,7 @@ import { useState } from 'react' import { toast } from 'sonner' -import { deleteSysApi } from '@/api' +import { deleteApi } from '@/api' import { AlertDialog, AlertDialogCancel, @@ -14,10 +14,10 @@ import { } from '@/components/ui/alert-dialog' import { Button } from '@/components/ui/button.tsx' import { Spinner } from '@/components/ui/spinner.tsx' -import { type SysApi } from '@/schemas' +import { type Api } from '@/schemas' interface Props { - currentRow: SysApi + currentRow: Api onClose: () => void onConfirm: () => void open: boolean @@ -29,7 +29,7 @@ export function DeleteDialog({ open, onClose, currentRow, onConfirm }: Props) { const onDelete = async () => { try { setLoading(true) - await deleteSysApi(currentRow.id) + await deleteApi(currentRow.id) toast('操作成功!') onConfirm() } finally { diff --git a/src/pages/system/api/components/row-actions.tsx b/src/pages/system/api/components/row-actions.tsx index c98a848..5ad7d63 100644 --- a/src/pages/system/api/components/row-actions.tsx +++ b/src/pages/system/api/components/row-actions.tsx @@ -11,12 +11,12 @@ import { DropdownMenuSeparator, DropdownMenuTrigger, } from '@/components/ui/dropdown-menu.tsx' -import { type SysApi } from '@/schemas' +import { type Api } from '@/schemas' import { useCrud } from './crud-provider' type Props = { - row: Row + row: Row } export function RowActions({ row }: Props) { diff --git a/src/pages/system/api/components/search-form.tsx b/src/pages/system/api/components/search-form.tsx index d111566..0d8b8b7 100644 --- a/src/pages/system/api/components/search-form.tsx +++ b/src/pages/system/api/components/search-form.tsx @@ -17,24 +17,25 @@ import { SelectValue, } from '@/components/ui/select.tsx' import { HttpMethod, HttpMethodClass } from '@/enum' -import { searchSysApiSchema, type SearchSysApiParams } from '@/schemas' +import { searchApiSchema, type SearchApiParams } from '@/schemas' interface SearchFormProps { - onSearch?: (params: SearchSysApiParams) => void + onSearch?: (params: SearchApiParams) => void } export function SearchForm({ onSearch }: SearchFormProps) { const formId = useId() - const form = useForm({ - resolver: zodResolver(searchSysApiSchema), + const form = useForm({ + resolver: zodResolver(searchApiSchema), defaultValues: { + name: '', method: undefined, group_name: '', }, }) - const handleSubmit = (values: SearchSysApiParams) => { + const handleSubmit = (values: SearchApiParams) => { onSearch?.(values) } @@ -45,6 +46,25 @@ export function SearchForm({ onSearch }: SearchFormProps) { return (
+ ( + + + 接口名称 + + + {fieldState.invalid && } + + )} + /> ({}) + const [searchParams, setSearchParams] = useState({}) const { data, isFetching, refetch } = useQuery({ queryKey: [QUERY_KEY, pagination.pageIndex, pagination.pageSize, searchParams], queryFn: () => - getSysApis({ + listApis({ page: pagination.pageIndex + 1, page_size: pagination.pageSize, ...searchParams, @@ -33,11 +33,11 @@ export default function CrudPage() { enabled: hasPermission('api:list'), }) - const tableData = useMemo(() => data?.list ?? [], [data]) + const tableData = useMemo(() => data?.list ?? [], [data]) const columns = useMemo(() => createColumns(), []) - const table = useReactTable({ + const table = useReactTable({ data: tableData, columns, getCoreRowModel: getCoreRowModel(), @@ -51,7 +51,7 @@ export default function CrudPage() { }, }) - const handleSearch = (params: SearchSysApiParams) => { + const handleSearch = (params: SearchApiParams) => { const isSameParams = JSON.stringify(params) === JSON.stringify(searchParams) setSearchParams(params) diff --git a/src/pages/system/file/components/columns.tsx b/src/pages/system/file/components/columns.tsx index e5a3acc..21d57c9 100644 --- a/src/pages/system/file/components/columns.tsx +++ b/src/pages/system/file/components/columns.tsx @@ -2,16 +2,16 @@ import type { ColumnDef } from '@tanstack/react-table' import { Button } from '@/components/ui/button' import { formatDate, formatFileSize } from '@/lib' -import type { SysFile } from '@/schemas' +import type { File } from '@/schemas' -export const createColumns = (): ColumnDef[] => { +export const createColumns = (): ColumnDef[] => { return [ { - accessorKey: 'file_path', + accessorKey: 'file_url', header: '文件路径', meta: { className: ' max-w-24' }, cell: ({ row }) => ( - ), diff --git a/src/pages/system/file/components/crud-provider.tsx b/src/pages/system/file/components/crud-provider.tsx index 8b8c05e..444ffdd 100644 --- a/src/pages/system/file/components/crud-provider.tsx +++ b/src/pages/system/file/components/crud-provider.tsx @@ -1,6 +1,6 @@ import { createContext, useContext, useState, type ReactNode } from 'react' -import { type SysRole } from '@/schemas' +import { type Role } from '@/schemas' import type { Action } from '../constants' @@ -11,11 +11,11 @@ type CrudContextType = { setCurrentRow: (row: T | null) => void } -export const CrudContext = createContext | null>(null) +export const CrudContext = createContext | null>(null) export const CrudProvider = ({ children }: { children: ReactNode }) => { const [action, setAction] = useState(null) - const [currentRow, setCurrentRow] = useState(null) + const [currentRow, setCurrentRow] = useState(null) return ( {children} diff --git a/src/pages/system/file/index.tsx b/src/pages/system/file/index.tsx index 2f42251..e187e92 100644 --- a/src/pages/system/file/index.tsx +++ b/src/pages/system/file/index.tsx @@ -3,9 +3,9 @@ import { useMemo, useState } from 'react' import { useQuery } from '@tanstack/react-query' import { getCoreRowModel, useReactTable } from '@tanstack/react-table' -import { getSysFiles } from '@/api' +import { listFiles } from '@/api' import { hasPermission } from '@/lib' -import type { SysFile } from '@/schemas' +import type { File } from '@/schemas' import { createColumns } from './components/columns.tsx' import { CrudProvider } from './components/crud-provider.tsx' @@ -21,7 +21,7 @@ export default function CrudPage() { const { data, isFetching, refetch } = useQuery({ queryKey: [QUERY_KEY, pagination.pageIndex, pagination.pageSize], queryFn: () => - getSysFiles({ + listFiles({ page: pagination.pageIndex + 1, page_size: pagination.pageSize, }), @@ -29,11 +29,11 @@ export default function CrudPage() { enabled: hasPermission('file:list'), }) - const tableData = useMemo(() => data?.list ?? [], [data]) + const tableData = useMemo(() => data?.list ?? [], [data]) const columns = useMemo(() => createColumns(), []) - const table = useReactTable({ + const table = useReactTable({ data: tableData, columns, getCoreRowModel: getCoreRowModel(), diff --git a/src/pages/system/menu/components/action-dialog.tsx b/src/pages/system/menu/components/action-dialog.tsx index 7844ac7..686c5a8 100644 --- a/src/pages/system/menu/components/action-dialog.tsx +++ b/src/pages/system/menu/components/action-dialog.tsx @@ -4,7 +4,7 @@ import { zodResolver } from '@hookform/resolvers/zod' import { Controller, useForm } from 'react-hook-form' import { toast } from 'sonner' -import { createSysMenu, getAllSysMenus, updateSysMenu } from '@/api' +import { createMenu, getAllMenus, updateMenu } from '@/api' import { MenuIcon } from '@/components/menu-icon' import { TreeSelect, type TreeSelectNode } from '@/components/tree-select' import { Button } from '@/components/ui/button.tsx' @@ -30,10 +30,10 @@ import { import { Spinner } from '@/components/ui/spinner.tsx' import { Switch } from '@/components/ui/switch' import { MenuIconOptions, MenuType, menuTypeOptions, Status, statusOptions } from '@/enum' -import { sysMenuFormSchema, type SysMenu, type SysMenuForm, type SysMenuTree } from '@/schemas' +import { menuFormSchema, type Menu, type MenuForm, type MenuTree } from '@/schemas' interface Props { - currentRow?: SysMenuTree | null + currentRow?: MenuTree | null onClose: () => void onConfirm: () => void open: boolean @@ -43,7 +43,7 @@ const ROOT_PARENT_VALUE = '__no_parent__' const NO_ICON_VALUE = '__no_icon__' const generateMenuOptions = ( - data: SysMenu[], + data: Menu[], parent_id: number | null = null, currentId: number | null = null, ): TreeSelectNode[] => { @@ -63,8 +63,8 @@ export function ActionsDialog({ open, currentRow, onClose, onConfirm }: Props) { const formId = useId() const [loading, setLoading] = useState(false) - const form = useForm({ - resolver: zodResolver(sysMenuFormSchema), + const form = useForm({ + resolver: zodResolver(menuFormSchema), defaultValues: currentRow ? { ...currentRow } : { @@ -87,7 +87,7 @@ export function ActionsDialog({ open, currentRow, onClose, onConfirm }: Props) { if (!open) return const fetchOptions = async () => { - const { data } = await getAllSysMenus() + const { data } = await getAllMenus() const options = generateMenuOptions(data, null, currentRow?.id) setMenuOptions([{ id: ROOT_PARENT_VALUE, label: '无父级' }, ...options]) } @@ -95,13 +95,13 @@ export function ActionsDialog({ open, currentRow, onClose, onConfirm }: Props) { fetchOptions() }, [open, currentRow?.id]) - const onSubmit = async (values: SysMenuForm) => { + const onSubmit = async (values: MenuForm) => { try { setLoading(true) if (values.id) { - await updateSysMenu(values.id, values) + await updateMenu(values.id, values) } else { - await createSysMenu(values) + await createMenu(values) } toast('操作成功!') onConfirm() diff --git a/src/pages/system/menu/components/columns.tsx b/src/pages/system/menu/components/columns.tsx index 9ec0626..ba7d7ae 100644 --- a/src/pages/system/menu/components/columns.tsx +++ b/src/pages/system/menu/components/columns.tsx @@ -4,14 +4,14 @@ import { StatusLabel } from '@/components/label' import { MenuIcon } from '@/components/menu-icon' import { menuTypeDict, type MenuTypeValues, type StatusValues } from '@/enum' import { formatDate, hasPermission } from '@/lib' -import type { SysMenuTree } from '@/schemas' +import type { MenuTree } from '@/schemas' import { RowActions } from './row-actions.tsx' -export const createColumns = (): ColumnDef[] => { +export const createColumns = (): ColumnDef[] => { const showAction = hasPermission(['menu:update', 'menu:delete'], 'any') - const columns: ColumnDef[] = [ + const columns: ColumnDef[] = [ { accessorKey: 'name', header: '菜单名称', diff --git a/src/pages/system/menu/components/crud-provider.tsx b/src/pages/system/menu/components/crud-provider.tsx index be3075d..798402e 100644 --- a/src/pages/system/menu/components/crud-provider.tsx +++ b/src/pages/system/menu/components/crud-provider.tsx @@ -1,6 +1,6 @@ import { createContext, useContext, useState, type ReactNode } from 'react' -import { type SysMenuTree } from '@/schemas' +import { type MenuTree } from '@/schemas' import type { Action } from '../constants' @@ -11,11 +11,11 @@ type CrudContextType = { setCurrentRow: (row: T | null) => void } -export const CrudContext = createContext | null>(null) +export const CrudContext = createContext | null>(null) export const CrudProvider = ({ children }: { children: ReactNode }) => { const [action, setAction] = useState(null) - const [currentRow, setCurrentRow] = useState(null) + const [currentRow, setCurrentRow] = useState(null) return ( {children} diff --git a/src/pages/system/menu/components/delete-dialog.tsx b/src/pages/system/menu/components/delete-dialog.tsx index 877c06e..852fc91 100644 --- a/src/pages/system/menu/components/delete-dialog.tsx +++ b/src/pages/system/menu/components/delete-dialog.tsx @@ -2,7 +2,7 @@ import { useState } from 'react' import { toast } from 'sonner' -import { deleteSysMenu } from '@/api' +import { deleteMenu } from '@/api' import { AlertDialog, AlertDialogCancel, @@ -14,10 +14,10 @@ import { } from '@/components/ui/alert-dialog' import { Button } from '@/components/ui/button.tsx' import { Spinner } from '@/components/ui/spinner.tsx' -import { type SysMenuTree } from '@/schemas' +import { type MenuTree } from '@/schemas' interface Props { - currentRow: SysMenuTree + currentRow: MenuTree onClose: () => void onConfirm: () => void open: boolean @@ -29,7 +29,7 @@ export function DeleteDialog({ open, onClose, currentRow, onConfirm }: Props) { const onDelete = async () => { try { setLoading(true) - await deleteSysMenu(currentRow.id) + await deleteMenu(currentRow.id) toast('操作成功!') onConfirm() } finally { diff --git a/src/pages/system/menu/components/row-actions.tsx b/src/pages/system/menu/components/row-actions.tsx index c57356b..196e26d 100644 --- a/src/pages/system/menu/components/row-actions.tsx +++ b/src/pages/system/menu/components/row-actions.tsx @@ -11,12 +11,12 @@ import { DropdownMenuSeparator, DropdownMenuTrigger, } from '@/components/ui/dropdown-menu.tsx' -import { type SysMenuTree } from '@/schemas' +import { type MenuTree } from '@/schemas' import { useCrud } from './crud-provider' type Props = { - row: Row + row: Row } export function RowActions({ row }: Props) { diff --git a/src/pages/system/menu/index.tsx b/src/pages/system/menu/index.tsx index 82692fd..94fd166 100644 --- a/src/pages/system/menu/index.tsx +++ b/src/pages/system/menu/index.tsx @@ -3,9 +3,9 @@ import { useMemo } from 'react' import { useQuery } from '@tanstack/react-query' import { getCoreRowModel, getExpandedRowModel, useReactTable } from '@tanstack/react-table' -import { getAllSysMenus } from '@/api' +import { getAllMenus } from '@/api' import { generateMenus, hasPermission } from '@/lib' -import { type SysMenuTree } from '@/schemas' +import { type MenuTree } from '@/schemas' import { ActionDialogs } from './components/action-dialogs.tsx' import { createColumns } from './components/columns.tsx' @@ -16,19 +16,19 @@ import { QUERY_KEY } from './constants.ts' export default function CrudPage() { const { data, isFetching, refetch } = useQuery({ queryKey: [QUERY_KEY], - queryFn: () => getAllSysMenus(), + queryFn: () => getAllMenus(), placeholderData: (prev) => prev, enabled: hasPermission('menu:list'), }) - const tableData = useMemo( + const tableData = useMemo( () => generateMenus({ menus: data?.data ?? [], showHidden: true, showButton: true }), [data], ) const columns = useMemo(() => createColumns(), []) - const table = useReactTable({ + const table = useReactTable({ data: tableData, columns, getCoreRowModel: getCoreRowModel(), diff --git a/src/pages/system/role/components/action-dialog.tsx b/src/pages/system/role/components/action-dialog.tsx index 96abc0c..0a73441 100644 --- a/src/pages/system/role/components/action-dialog.tsx +++ b/src/pages/system/role/components/action-dialog.tsx @@ -5,7 +5,7 @@ import { Controller, useForm } from 'react-hook-form' import { toast } from 'sonner' import z from 'zod' -import { createSysRole, updateSysRole } from '@/api' +import { createRole, updateRole } from '@/api' import { Button } from '@/components/ui/button.tsx' import { Dialog, @@ -28,10 +28,10 @@ import { } from '@/components/ui/select.tsx' import { Spinner } from '@/components/ui/spinner.tsx' import { Status, statusOptions } from '@/enum' -import { sysRoleFormSchema, type SysRole, type SysRoleForm } from '@/schemas' +import { roleFormSchema, type Role, type RoleForm } from '@/schemas' interface Props { - currentRow?: SysRole | null + currentRow?: Role | null onClose: () => void onConfirm: () => void open: boolean @@ -42,8 +42,8 @@ export function ActionsDialog({ open, currentRow, onClose, onConfirm }: Props) { const formId = useId() const [loading, setLoading] = useState(false) - const form = useForm>({ - resolver: zodResolver(sysRoleFormSchema), + const form = useForm>({ + resolver: zodResolver(roleFormSchema), defaultValues: currentRow ? { ...currentRow } : { @@ -53,13 +53,13 @@ export function ActionsDialog({ open, currentRow, onClose, onConfirm }: Props) { }, }) - const onSubmit = async (values: SysRoleForm) => { + const onSubmit = async (values: RoleForm) => { try { setLoading(true) if (values.id) { - await updateSysRole(values.id, values) + await updateRole(values.id, values) } else { - await createSysRole(values) + await createRole(values) } toast('操作成功!') onConfirm() diff --git a/src/pages/system/role/components/assign-apis-dialog.tsx b/src/pages/system/role/components/assign-apis-dialog.tsx index aa23fcb..e45f10f 100644 --- a/src/pages/system/role/components/assign-apis-dialog.tsx +++ b/src/pages/system/role/components/assign-apis-dialog.tsx @@ -2,7 +2,7 @@ import { useEffect, useState } from 'react' import { toast } from 'sonner' -import { assignSysRoleApis, getAllSysApi, getRoleApis, getSysApiGroups } from '@/api' +import { assignRoleApis, getRoleApis, listAllApi, listApiGroups } from '@/api' import { CheckboxTree, useCheckboxTree, type CheckboxTreeNode } from '@/components/checkbox-tree' import { DialogSkeleton } from '@/components/dialog-skeleton' import { Badge } from '@/components/ui/badge' @@ -18,10 +18,10 @@ import { } from '@/components/ui/dialog.tsx' import { Spinner } from '@/components/ui/spinner.tsx' import { HttpMethodClass, type HttpMethodValues } from '@/enum' -import type { SysRole } from '@/schemas' +import type { Role } from '@/schemas' interface Props { - currentRow?: SysRole | null + currentRow?: Role | null onClose: () => void onConfirm: () => void open: boolean @@ -38,8 +38,8 @@ export function AssignApisDialog({ open, onClose, onConfirm, currentRow }: Props const fetchApis = async () => { setSkeletonLoading(true) - const { data: groups } = await getSysApiGroups() - const { data: apis } = await getAllSysApi() + const { data: groups } = await listApiGroups() + const { data: apis } = await listAllApi() const { data: checkedApi } = await getRoleApis(currentRow?.id as number) const ids: string[] = checkedApi.map((api) => api.id.toString()) @@ -80,7 +80,7 @@ export function AssignApisDialog({ open, onClose, onConfirm, currentRow }: Props .filter((item) => !item.startsWith('group_names_')) .map((item) => parseInt(item)) - await assignSysRoleApis(currentRow?.id as number, ids) + await assignRoleApis(currentRow?.id as number, ids) toast('操作成功!') onConfirm() } finally { diff --git a/src/pages/system/role/components/assign-menus-dialog.tsx b/src/pages/system/role/components/assign-menus-dialog.tsx index 571fbe4..b7f7f63 100644 --- a/src/pages/system/role/components/assign-menus-dialog.tsx +++ b/src/pages/system/role/components/assign-menus-dialog.tsx @@ -2,7 +2,7 @@ import { useEffect, useState } from 'react' import { toast } from 'sonner' -import { assignSysRoleMenus, getAllSysMenus, getSysRoleMenus } from '@/api' +import { assignRoleMenus, getAllMenus, getRoleMenus } from '@/api' import { CheckboxTree, useCheckboxTree, type CheckboxTreeNode } from '@/components/checkbox-tree' import { DialogSkeleton } from '@/components/dialog-skeleton' import { Button } from '@/components/ui/button.tsx' @@ -16,16 +16,16 @@ import { DialogTitle, } from '@/components/ui/dialog.tsx' import { Spinner } from '@/components/ui/spinner.tsx' -import type { SysMenu, SysRole } from '@/schemas' +import type { Menu, Role } from '@/schemas' interface Props { - currentRow?: SysRole | null + currentRow?: Role | null onClose: () => void onConfirm: () => void open: boolean } -const buildTreeData = (data: SysMenu[], parentId: string | null = null): CheckboxTreeNode[] => { +const buildTreeData = (data: Menu[], parentId: string | null = null): CheckboxTreeNode[] => { return data .filter((item) => (item.parent_id?.toString() ?? null) === parentId) .map((item) => { @@ -52,8 +52,8 @@ export function AssignMenusDialog({ open, onClose, onConfirm, currentRow }: Prop const fetchMenus = async () => { setSkeletonLoading(true) - const { data: menus } = await getAllSysMenus() - const { data: checkedMenus } = await getSysRoleMenus(currentRow?.id as number) + const { data: menus } = await getAllMenus() + const { data: checkedMenus } = await getRoleMenus(currentRow?.id as number) setTreeData(buildTreeData(menus)) setCheckedIds(checkedMenus.map((item) => item.id.toString())) @@ -66,7 +66,7 @@ export function AssignMenusDialog({ open, onClose, onConfirm, currentRow }: Prop const handleConfirm = async () => { try { setLoading(true) - await assignSysRoleMenus( + await assignRoleMenus( currentRow?.id as number, getCheckedIdsWithParents().map((item) => parseInt(item)), ) diff --git a/src/pages/system/role/components/columns.tsx b/src/pages/system/role/components/columns.tsx index 24e408b..286cea9 100644 --- a/src/pages/system/role/components/columns.tsx +++ b/src/pages/system/role/components/columns.tsx @@ -3,17 +3,17 @@ import type { ColumnDef } from '@tanstack/react-table' import { StatusLabel } from '@/components/label' import { type StatusValues } from '@/enum' import { formatDate, hasPermission } from '@/lib' -import type { SysRole } from '@/schemas' +import type { Role } from '@/schemas' import { RowActions } from './row-actions' -export const createColumns = (): ColumnDef[] => { +export const createColumns = (): ColumnDef[] => { const showAction = hasPermission( ['role:update', 'role:delete', 'role:assign-menus', 'role:assign-apis'], 'any', ) - const columns: ColumnDef[] = [ + const columns: ColumnDef[] = [ { accessorKey: 'name', header: '角色名称', diff --git a/src/pages/system/role/components/crud-provider.tsx b/src/pages/system/role/components/crud-provider.tsx index 4839a0f..f419854 100644 --- a/src/pages/system/role/components/crud-provider.tsx +++ b/src/pages/system/role/components/crud-provider.tsx @@ -1,6 +1,6 @@ import { createContext, useContext, useState, type ReactNode } from 'react' -import { type SysRole } from '@/schemas' +import { type Role } from '@/schemas' import type { Action } from '../constants' @@ -11,11 +11,11 @@ type CrudContextType = { setCurrentRow: (row: T | null) => void } -export const CrudContext = createContext | null>(null) +export const CrudContext = createContext | null>(null) export const CrudProvider = ({ children }: { children: ReactNode }) => { const [action, setAction] = useState(null) - const [currentRow, setCurrentRow] = useState(null) + const [currentRow, setCurrentRow] = useState(null) return ( {children} diff --git a/src/pages/system/role/components/delete-dialog.tsx b/src/pages/system/role/components/delete-dialog.tsx index 2f0ac6a..d98dd9f 100644 --- a/src/pages/system/role/components/delete-dialog.tsx +++ b/src/pages/system/role/components/delete-dialog.tsx @@ -2,7 +2,7 @@ import { useState } from 'react' import { toast } from 'sonner' -import { deleteSysRole } from '@/api' +import { deleteRole } from '@/api' import { AlertDialog, AlertDialogCancel, @@ -14,10 +14,10 @@ import { } from '@/components/ui/alert-dialog' import { Button } from '@/components/ui/button.tsx' import { Spinner } from '@/components/ui/spinner.tsx' -import { type SysRole } from '@/schemas' +import { type Role } from '@/schemas' interface Props { - currentRow: SysRole + currentRow: Role onClose: () => void onConfirm: () => void open: boolean @@ -29,7 +29,7 @@ export function DeleteDialog({ open, onClose, currentRow, onConfirm }: Props) { const onDelete = async () => { try { setLoading(true) - await deleteSysRole(currentRow.id) + await deleteRole(currentRow.id) toast('操作成功!') onConfirm() } finally { diff --git a/src/pages/system/role/components/row-actions.tsx b/src/pages/system/role/components/row-actions.tsx index 1a3adb6..4e165f3 100644 --- a/src/pages/system/role/components/row-actions.tsx +++ b/src/pages/system/role/components/row-actions.tsx @@ -11,12 +11,12 @@ import { DropdownMenuSeparator, DropdownMenuTrigger, } from '@/components/ui/dropdown-menu.tsx' -import { type SysRole } from '@/schemas' +import { type Role } from '@/schemas' import { useCrud } from './crud-provider' type Props = { - row: Row + row: Row } export function RowActions({ row }: Props) { diff --git a/src/pages/system/role/index.tsx b/src/pages/system/role/index.tsx index 90ac5a0..1fa1b66 100644 --- a/src/pages/system/role/index.tsx +++ b/src/pages/system/role/index.tsx @@ -3,9 +3,9 @@ import { useMemo, useState } from 'react' import { useQuery } from '@tanstack/react-query' import { getCoreRowModel, useReactTable } from '@tanstack/react-table' -import { getSysRoles } from '@/api' +import { listRoles } from '@/api' import { hasPermission } from '@/lib' -import { type SysRole } from '@/schemas' +import { type Role } from '@/schemas' import { ActionDialogs } from './components/action-dialogs.tsx' import { createColumns } from './components/columns.tsx' @@ -22,7 +22,7 @@ export default function CrudPage() { const { data, isFetching, refetch } = useQuery({ queryKey: [QUERY_KEY, pagination.pageIndex, pagination.pageSize], queryFn: () => - getSysRoles({ + listRoles({ page: pagination.pageIndex + 1, page_size: pagination.pageSize, }), @@ -30,11 +30,11 @@ export default function CrudPage() { enabled: hasPermission('role:list'), }) - const tableData = useMemo(() => data?.list ?? [], [data]) + const tableData = useMemo(() => data?.list ?? [], [data]) const columns = useMemo(() => createColumns(), []) - const table = useReactTable({ + const table = useReactTable({ data: tableData, columns, getCoreRowModel: getCoreRowModel(), diff --git a/src/pages/system/user/components/action-dialog.tsx b/src/pages/system/user/components/action-dialog.tsx index 6cf314a..23fa2cd 100644 --- a/src/pages/system/user/components/action-dialog.tsx +++ b/src/pages/system/user/components/action-dialog.tsx @@ -4,7 +4,7 @@ import { zodResolver } from '@hookform/resolvers/zod' import { Controller, useForm } from 'react-hook-form' import { toast } from 'sonner' -import { createSysUser, updateSysUser } from '@/api' +import { createUser, updateUser } from '@/api' import { FileUpload } from '@/components/file-upload' import { Button } from '@/components/ui/button.tsx' import { @@ -28,15 +28,10 @@ import { } from '@/components/ui/select.tsx' import { Spinner } from '@/components/ui/spinner.tsx' import { Status, statusOptions } from '@/enum' -import { - sysUserFormSchema, - type SysUser, - type SysUserFormInput, - type SysUserFormOutput, -} from '@/schemas' +import { userFormSchema, type User, type UserFormInput, type UserFormOutput } from '@/schemas' interface Props { - currentRow?: SysUser | null + currentRow?: User | null onClose: () => void onConfirm: () => void open: boolean @@ -47,13 +42,13 @@ export function ActionsDialog({ open, currentRow, onClose, onConfirm }: Props) { const formId = useId() const [loading, setLoading] = useState(false) - const form = useForm({ - resolver: zodResolver(sysUserFormSchema), + const form = useForm({ + resolver: zodResolver(userFormSchema), defaultValues: currentRow ? { ...currentRow, avatar: currentRow.avatar_id - ? [{ id: currentRow.avatar_id, file_path: currentRow.avatar_url }] + ? [{ id: currentRow.avatar_id, file_url: currentRow.avatar_url }] : [], } : { @@ -66,14 +61,14 @@ export function ActionsDialog({ open, currentRow, onClose, onConfirm }: Props) { }, }) - const onSubmit = async (values: SysUserFormOutput) => { + const onSubmit = async (values: UserFormOutput) => { try { setLoading(true) if (values.id) { - await updateSysUser(values.id, values) + await updateUser(values.id, values) } else { - await createSysUser(values) + await createUser(values) } toast('操作成功!') diff --git a/src/pages/system/user/components/assign-roles-dialog.tsx b/src/pages/system/user/components/assign-roles-dialog.tsx index 94a0985..36752c3 100644 --- a/src/pages/system/user/components/assign-roles-dialog.tsx +++ b/src/pages/system/user/components/assign-roles-dialog.tsx @@ -2,7 +2,7 @@ import { useEffect, useState } from 'react' import { toast } from 'sonner' -import { assignSysUserRoles, getAllSysRoles, getSysUserRoles } from '@/api' +import { assignUserRoles, listAllRoles, listUserRoles } from '@/api' import { DialogSkeleton } from '@/components/dialog-skeleton' import { Button } from '@/components/ui/button.tsx' import { Checkbox } from '@/components/ui/checkbox' @@ -24,17 +24,17 @@ import { FieldSet, } from '@/components/ui/field.tsx' import { Spinner } from '@/components/ui/spinner.tsx' -import type { SysRole, SysUser } from '@/schemas' +import type { Role, User } from '@/schemas' interface Props { - currentRow?: SysUser | null + currentRow?: User | null onClose: () => void onConfirm: () => void open: boolean } export function AssignRolesDialog({ open, onClose, onConfirm, currentRow }: Props) { - const [roles, setRoles] = useState([]) + const [roles, setRoles] = useState([]) const [checkedIds, setCheckedIds] = useState([]) const [loading, setLoading] = useState(false) const [skeletonLoading, setSkeletonLoading] = useState(true) @@ -42,7 +42,7 @@ export function AssignRolesDialog({ open, onClose, onConfirm, currentRow }: Prop const handleConfirm = async () => { try { setLoading(true) - await assignSysUserRoles(currentRow!.id, checkedIds) + await assignUserRoles(currentRow!.id, checkedIds) onConfirm() toast('操作成功!') } finally { @@ -58,8 +58,8 @@ export function AssignRolesDialog({ open, onClose, onConfirm, currentRow }: Prop const fetchUserRoles = async () => { setSkeletonLoading(true) - const { data } = await getAllSysRoles() - const { data: userRoles } = await getSysUserRoles(currentRow!.id) + const { data } = await listAllRoles() + const { data: userRoles } = await listUserRoles(currentRow!.id) setRoles(data) setCheckedIds(userRoles.map((role) => role.id)) diff --git a/src/pages/system/user/components/change-password-dialog.tsx b/src/pages/system/user/components/change-password-dialog.tsx index b6f405a..fcec01c 100644 --- a/src/pages/system/user/components/change-password-dialog.tsx +++ b/src/pages/system/user/components/change-password-dialog.tsx @@ -5,7 +5,7 @@ import { Controller, useForm } from 'react-hook-form' import { toast } from 'sonner' import { z } from 'zod' -import { changeSysUserPassword } from '@/api' +import { updateUserPassword } from '@/api' import { Button } from '@/components/ui/button.tsx' import { Dialog, @@ -19,10 +19,10 @@ import { import { Field, FieldError, FieldGroup, FieldLabel } from '@/components/ui/field' import { Input } from '@/components/ui/input' import { Spinner } from '@/components/ui/spinner.tsx' -import { changePasswordFormSchema, type ChangePasswordForm, type SysUser } from '@/schemas' +import { changePasswordFormSchema, type ChangePasswordForm, type User } from '@/schemas' interface Props { - currentRow?: SysUser | null + currentRow?: User | null onClose: () => void onConfirm: () => void open: boolean @@ -42,7 +42,7 @@ export function ChangePasswordDialog({ open, currentRow, onClose, onConfirm }: P try { setLoading(true) - await changeSysUserPassword(currentRow.id, values.password) + await updateUserPassword(currentRow.id, values.password) toast('操作成功!') onConfirm() } finally { diff --git a/src/pages/system/user/components/columns.tsx b/src/pages/system/user/components/columns.tsx index b7c5900..867a1dc 100644 --- a/src/pages/system/user/components/columns.tsx +++ b/src/pages/system/user/components/columns.tsx @@ -4,17 +4,17 @@ import { StatusLabel } from '@/components/label' import { Avatar, AvatarFallback, AvatarImage } from '@/components/ui/avatar' import { type StatusValues } from '@/enum' import { formatDate, hasPermission } from '@/lib' -import type { SysUser } from '@/schemas' +import type { User } from '@/schemas' import { RowActions } from './row-actions' -export const createColumns = (): ColumnDef[] => { +export const createColumns = (): ColumnDef[] => { const showAction = hasPermission( ['user:update', 'user:assign-roles', 'user:update-password', 'user:delete'], 'any', ) - const columns: ColumnDef[] = [ + const columns: ColumnDef[] = [ { accessorKey: 'avatar_url', header: '用户头像', diff --git a/src/pages/system/user/components/crud-provider.tsx b/src/pages/system/user/components/crud-provider.tsx index 9889ffb..3d07626 100644 --- a/src/pages/system/user/components/crud-provider.tsx +++ b/src/pages/system/user/components/crud-provider.tsx @@ -1,6 +1,6 @@ import { createContext, useContext, useState, type ReactNode } from 'react' -import { type SysUser } from '@/schemas' +import { type User } from '@/schemas' import type { Action } from '../constants' @@ -11,11 +11,11 @@ type CrudContextType = { setCurrentRow: (row: T | null) => void } -export const CrudContext = createContext | null>(null) +export const CrudContext = createContext | null>(null) export const CrudProvider = ({ children }: { children: ReactNode }) => { const [action, setAction] = useState(null) - const [currentRow, setCurrentRow] = useState(null) + const [currentRow, setCurrentRow] = useState(null) return ( {children} diff --git a/src/pages/system/user/components/delete-dialog.tsx b/src/pages/system/user/components/delete-dialog.tsx index a2cce68..b6d22a0 100644 --- a/src/pages/system/user/components/delete-dialog.tsx +++ b/src/pages/system/user/components/delete-dialog.tsx @@ -2,7 +2,7 @@ import { useState } from 'react' import { toast } from 'sonner' -import { deleteSysUser } from '@/api' +import { deleteUser } from '@/api' import { AlertDialog, AlertDialogCancel, @@ -14,10 +14,10 @@ import { } from '@/components/ui/alert-dialog' import { Button } from '@/components/ui/button.tsx' import { Spinner } from '@/components/ui/spinner.tsx' -import { type SysUser } from '@/schemas' +import { type User } from '@/schemas' interface Props { - currentRow: SysUser + currentRow: User onClose: () => void onConfirm: () => void open: boolean @@ -29,7 +29,7 @@ export function DeleteDialog({ open, onClose, currentRow, onConfirm }: Props) { const onDelete = async () => { try { setLoading(true) - await deleteSysUser(currentRow.id) + await deleteUser(currentRow.id) toast('操作成功!') onConfirm() } finally { diff --git a/src/pages/system/user/components/row-actions.tsx b/src/pages/system/user/components/row-actions.tsx index d326463..15a0bf2 100644 --- a/src/pages/system/user/components/row-actions.tsx +++ b/src/pages/system/user/components/row-actions.tsx @@ -11,12 +11,12 @@ import { DropdownMenuSeparator, DropdownMenuTrigger, } from '@/components/ui/dropdown-menu.tsx' -import { type SysUser } from '@/schemas' +import { type User } from '@/schemas' import { useCrud } from './crud-provider' type Props = { - row: Row + row: Row } export function RowActions({ row }: Props) { diff --git a/src/pages/system/user/components/search-form.tsx b/src/pages/system/user/components/search-form.tsx index 6bca02e..74c3fc4 100644 --- a/src/pages/system/user/components/search-form.tsx +++ b/src/pages/system/user/components/search-form.tsx @@ -7,23 +7,23 @@ import { Controller, useForm } from 'react-hook-form' import { Button } from '@/components/ui/button' import { Field, FieldError, FieldGroup, FieldLabel } from '@/components/ui/field.tsx' import { Input } from '@/components/ui/input.tsx' -import { searchSysUserSchema, type SearchSysUserParams } from '@/schemas' +import { searchUserSchema, type SearchUserParams } from '@/schemas' interface SearchFormProps { - onSearch?: (params: SearchSysUserParams) => void + onSearch?: (params: SearchUserParams) => void } export function SearchForm({ onSearch }: SearchFormProps) { const formId = useId() - const form = useForm({ - resolver: zodResolver(searchSysUserSchema), + const form = useForm({ + resolver: zodResolver(searchUserSchema), defaultValues: { username: '', }, }) - const handleSubmit = (values: SearchSysUserParams) => { + const handleSubmit = (values: SearchUserParams) => { onSearch?.(values) } diff --git a/src/pages/system/user/components/user-table.tsx b/src/pages/system/user/components/user-table.tsx index f5fa56a..4dec517 100644 --- a/src/pages/system/user/components/user-table.tsx +++ b/src/pages/system/user/components/user-table.tsx @@ -4,14 +4,14 @@ import { Plus } from 'lucide-react' import { Auth } from '@/components/auth' import { DataTable } from '@/components/data-table' import { Button } from '@/components/ui/button.tsx' -import type { SearchSysUserParams } from '@/schemas' +import type { SearchUserParams } from '@/schemas' import { useCrud } from './crud-provider.tsx' import { SearchForm } from './search-form.tsx' interface Props { table: Table - onSearch?: (params: SearchSysUserParams) => void + onSearch?: (params: SearchUserParams) => void } export function UserTable({ table, onSearch }: Props) { diff --git a/src/pages/system/user/index.tsx b/src/pages/system/user/index.tsx index de1ae98..f3a8255 100644 --- a/src/pages/system/user/index.tsx +++ b/src/pages/system/user/index.tsx @@ -3,9 +3,9 @@ import { useMemo, useState } from 'react' import { useQuery } from '@tanstack/react-query' import { getCoreRowModel, useReactTable } from '@tanstack/react-table' -import { getSysUsers } from '@/api' +import { listUsers } from '@/api' import { hasPermission } from '@/lib' -import { type SearchSysUserParams, type SysUser } from '@/schemas' +import { type SearchUserParams, type User } from '@/schemas' import { ActionDialogs } from './components/action-dialogs.tsx' import { createColumns } from './components/columns.tsx' @@ -19,12 +19,12 @@ export default function CrudPage() { pageSize: 10, }) - const [searchParams, setSearchParams] = useState({}) + const [searchParams, setSearchParams] = useState({}) const { data, isFetching, refetch } = useQuery({ queryKey: [QUERY_KEY, pagination.pageIndex, pagination.pageSize, searchParams], queryFn: () => - getSysUsers({ + listUsers({ page: pagination.pageIndex + 1, page_size: pagination.pageSize, ...searchParams, @@ -33,11 +33,11 @@ export default function CrudPage() { enabled: hasPermission('user:list'), }) - const tableData = useMemo(() => data?.list ?? [], [data]) + const tableData = useMemo(() => data?.list ?? [], [data]) const columns = useMemo(() => createColumns(), []) - const table = useReactTable({ + const table = useReactTable({ data: tableData, columns, getCoreRowModel: getCoreRowModel(), @@ -51,7 +51,7 @@ export default function CrudPage() { }, }) - const handleSearch = (params: SearchSysUserParams) => { + const handleSearch = (params: SearchUserParams) => { setSearchParams(params) setPagination((prev) => ({ ...prev, pageIndex: 0 })) } diff --git a/src/routes/index.tsx b/src/routes/index.tsx index e027912..d9e9958 100644 --- a/src/routes/index.tsx +++ b/src/routes/index.tsx @@ -12,7 +12,7 @@ import { import { TanStackRouterDevtools } from '@tanstack/react-router-devtools' import NotFound from '@/pages/404/index' -import { type SysMenu } from '@/schemas' +import { type Menu } from '@/schemas' import { siteConfig } from '@/siteConfig.ts' import { useStore } from '@/store' @@ -65,7 +65,7 @@ const getComponent = (fileName: string) => { return lazyRouteComponent(importer) } -export const setupRouter = (menus: SysMenu[]) => { +export const setupRouter = (menus: Menu[]) => { const rootChildren: AnyRoute[] = [] const layoutChildren: AnyRoute[] = [] diff --git a/src/schemas/blog/post.ts b/src/schemas/blog/post.ts index ce1f185..e743882 100644 --- a/src/schemas/blog/post.ts +++ b/src/schemas/blog/post.ts @@ -1,6 +1,6 @@ import { z } from 'zod' -import { sysFileFormSchema } from '@/schemas' +import { fileFormSchema } from '@/schemas' export const postSchema = z.object({ id: z.number().int(), @@ -34,7 +34,7 @@ export const postFormSchema = z summary: z.string(), status: z.number().int(), published_at: z.string().min(1, '请选择发布日期!'), - cover: sysFileFormSchema, + cover: fileFormSchema, sort: z.coerce.number().int().min(0, '排序值不能小于0'), content: z.string().optional(), category_id: z diff --git a/src/schemas/system/api.ts b/src/schemas/system/api.ts index 809389b..d584b0d 100644 --- a/src/schemas/system/api.ts +++ b/src/schemas/system/api.ts @@ -2,7 +2,7 @@ import { z } from 'zod' import { HttpMethodSchema } from '@/enum' -export const SysApiSchema = z.object({ +export const ApiSchema = z.object({ id: z.number().int(), name: z.string(), group_name: z.string(), @@ -11,17 +11,18 @@ export const SysApiSchema = z.object({ sort: z.number(), }) -export type SysApi = z.infer +export type Api = z.infer // 搜索参数 -export const searchSysApiSchema = z.object({ +export const searchApiSchema = z.object({ + name: z.string().optional(), group_name: z.string().optional(), method: HttpMethodSchema.optional(), }) -export type SearchSysApiParams = z.infer +export type SearchApiParams = z.infer -export const SysApiFormSchema = z.object({ +export const apiFormSchema = z.object({ id: z.number().optional(), name: z.string().min(2, '接口名称至少2个字符').max(16, '接口名称不能超过16个字符'), group_name: z.string().min(2, '分组名称至少2个字符').max(16, '分组名称不能超过16个字符'), @@ -30,4 +31,4 @@ export const SysApiFormSchema = z.object({ sort: z.coerce.number().int().min(0, '排序值不能小于0'), }) -export type SysApiForm = z.infer +export type ApiForm = z.infer diff --git a/src/schemas/system/file.ts b/src/schemas/system/file.ts index e8231da..81aad9c 100644 --- a/src/schemas/system/file.ts +++ b/src/schemas/system/file.ts @@ -1,9 +1,10 @@ import { z } from 'zod' -export const sysFileSchema = z.object({ +export const fileSchema = z.object({ id: z.number().int(), file_name: z.string(), file_path: z.string(), + file_url: z.string(), original_name: z.string(), folder_name: z.string(), mime_type: z.string(), @@ -12,11 +13,11 @@ export const sysFileSchema = z.object({ updated_at: z.string(), }) -export type SysFile = z.infer +export type File = z.infer -export const sysFileFormSchema = z.object({ +export const fileFormSchema = z.object({ id: z.number().int(), - file_path: z.string(), + file_url: z.string(), }) -export type SysFileForm = z.infer +export type FileForm = z.infer diff --git a/src/schemas/system/menu.ts b/src/schemas/system/menu.ts index 8ae61d2..84dafce 100644 --- a/src/schemas/system/menu.ts +++ b/src/schemas/system/menu.ts @@ -9,7 +9,7 @@ const MenuIconKeySchema = z.custom( }, ) -export const sysMenuSchema = z.object({ +export const menuSchema = z.object({ id: z.number().int(), name: z.string(), path: z.string(), @@ -25,13 +25,13 @@ export const sysMenuSchema = z.object({ updated_at: z.string(), }) -export type SysMenu = z.infer +export type Menu = z.infer -export interface SysMenuTree extends SysMenu { - children?: SysMenuTree[] +export interface MenuTree extends Menu { + children?: MenuTree[] } -export const sysMenuFormSchema = z +export const menuFormSchema = z .object({ id: z.number().optional(), name: z.string().min(1, '菜单名称不能为空').max(16, '菜单名称不能超过16个字符'), @@ -63,4 +63,4 @@ export const sysMenuFormSchema = z return data }) -export type SysMenuForm = z.infer +export type MenuForm = z.infer diff --git a/src/schemas/system/role.ts b/src/schemas/system/role.ts index 19074d9..c3899cc 100644 --- a/src/schemas/system/role.ts +++ b/src/schemas/system/role.ts @@ -2,7 +2,7 @@ import { z } from 'zod' import { StatusSchema } from '@/enum' -export const sysRoleSchema = z.object({ +export const roleSchema = z.object({ id: z.number().int(), name: z.string(), code: z.string(), @@ -11,9 +11,9 @@ export const sysRoleSchema = z.object({ updated_at: z.string(), }) -export type SysRole = z.infer +export type Role = z.infer -export const sysRoleFormSchema = z +export const roleFormSchema = z .object({ id: z.number().optional(), name: z.string().min(2, '角色名称至少2个字符').max(16, '角色名称不能超过16个字符'), @@ -33,4 +33,4 @@ export const sysRoleFormSchema = z } }) -export type SysRoleForm = z.infer +export type RoleForm = z.infer diff --git a/src/schemas/system/user.ts b/src/schemas/system/user.ts index 8581af8..db42d49 100644 --- a/src/schemas/system/user.ts +++ b/src/schemas/system/user.ts @@ -2,10 +2,10 @@ import { z } from 'zod' import { StatusSchema } from '@/enum' -import { sysFileFormSchema } from './file' -import { sysMenuSchema } from './menu' +import { fileFormSchema } from './file' +import { menuSchema } from './menu' -export const sysUserSchema = z.object({ +export const userSchema = z.object({ id: z.number().int(), account: z.string(), username: z.string(), @@ -16,15 +16,15 @@ export const sysUserSchema = z.object({ avatar_id: z.number().int().optional(), }) -export type SysUser = z.infer +export type User = z.infer // 搜索参数 -export const searchSysUserSchema = z.object({ +export const searchUserSchema = z.object({ username: z.string().optional(), }) -export type SearchSysUserParams = z.infer +export type SearchUserParams = z.infer -export const sysUserInfoSchema = sysUserSchema +export const userInfoSchema = userSchema .pick({ id: true, account: true, @@ -34,11 +34,11 @@ export const sysUserInfoSchema = sysUserSchema }) .extend({ roles: z.array(z.string()), - menus: z.array(sysMenuSchema), + menus: z.array(menuSchema), permissions: z.array(z.string()), }) -export type SysUserInfo = z.infer +export type UserInfo = z.infer const passwordRegex = /^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d]{5,16}$/ @@ -58,7 +58,7 @@ export const changePasswordFormSchema = z export type ChangePasswordForm = z.infer -export const sysUserFormSchema = z +export const userFormSchema = z .object({ id: z.number().optional(), account: z @@ -75,7 +75,7 @@ export const sysUserFormSchema = z message: '请选择状态', }), confirmPassword: z.string().optional(), - avatar: z.array(sysFileFormSchema).optional(), + avatar: z.array(fileFormSchema).optional(), }) .superRefine((data, ctx) => { if (!data.id) { @@ -100,6 +100,6 @@ export const sysUserFormSchema = z } }) -export type SysUserFormInput = z.input +export type UserFormInput = z.input -export type SysUserFormOutput = z.output +export type UserFormOutput = z.output diff --git a/src/store/index.ts b/src/store/index.ts index a59e066..32709f8 100644 --- a/src/store/index.ts +++ b/src/store/index.ts @@ -1,16 +1,16 @@ import { toast } from 'sonner' import { create } from 'zustand' -import { getSysUserInfo, logout } from '@/api' +import { getUserInfo, logout } from '@/api' import { getExpandedMenus, sleep } from '@/lib' -import type { SysUserInfo } from '@/schemas' +import type { UserInfo } from '@/schemas' const IS_LOGIN_KEY = 'is_login' interface Store { token: string | null tokenExp: string | null - userInfo: SysUserInfo | null + userInfo: UserInfo | null expandedMenus: number[] isLogin: boolean setToken: (token: string | null, tokenExp?: string | null) => void @@ -66,7 +66,7 @@ export const useStore = create((set) => { } try { - const [{ data }] = await Promise.all([getSysUserInfo(), sleep(500)]) + const [{ data }] = await Promise.all([getUserInfo(), sleep(500)]) set({ userInfo: data, expandedMenus: getExpandedMenus(data.menus), diff --git a/vite.config.ts b/vite.config.ts index 11097f8..377d7c8 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -15,7 +15,9 @@ export default defineConfig(({ mode }) => { tailwindcss(), tsconfigPaths(), checker({ - typescript: true, + typescript: { + tsconfigPath: './tsconfig.app.json', + }, eslint: { lintCommand: 'eslint "./src/**/*.{ts,tsx}"', useFlatConfig: true,