From 7733bd18f79ba55dfce49676ce47a89603a4ad78 Mon Sep 17 00:00:00 2001 From: Estrella Pan Date: Thu, 2 Jul 2026 17:05:50 +0200 Subject: [PATCH] fix(webui): setup loop, reactive selects, escape handler, axios/i18n and dep bumps - Clear needSetup after completion so the wizard stops bouncing back to itself - ab-select watches modelValue (config selects showed stale defaults); notification-type dropdown renders options - Search modal Escape handler no longer opens the modal from anywhere; ab-button defaults type=button (no double login) - axios surfaces 400/404/422; background polls suppress the network-error toast storm; calendar re-reads locally on activate - Search subscribe uses the active provider + i18n; provider settings go through axios; dead search-store code removed - Bump axios ^1.7 (CVE-2023-45857) and vue-i18n ^9.14.2 (XSS); add missing i18n keys Co-Authored-By: Claude Opus 4.8 Claude-Session: https://claude.ai/code/session_014w1Z6Nxy6XTRgkFXqPr9Zh --- webui/package.json | 4 +- webui/pnpm-lock.yaml | 217 ++++++++++++++---- webui/src/components/ab-add-rss.vue | 2 +- webui/src/components/ab-edit-rule.vue | 4 +- webui/src/components/basic/ab-button.vue | 5 + webui/src/components/basic/ab-select.vue | 33 ++- .../components/search/ab-search-confirm.vue | 3 +- .../src/components/search/ab-search-modal.vue | 12 +- .../setting/config-notification.vue | 20 +- .../setting/config-search-provider.vue | 27 +-- .../components/setup/wizard-step-review.vue | 3 + webui/src/hooks/useAppInfo.ts | 15 +- webui/src/i18n/en.json | 10 +- webui/src/i18n/zh-CN.json | 10 +- webui/src/pages/index/calendar.vue | 5 +- webui/src/router/index.ts | 7 + webui/src/store/search.ts | 180 +-------------- webui/src/utils/axios.ts | 34 ++- 18 files changed, 318 insertions(+), 273 deletions(-) diff --git a/webui/package.json b/webui/package.json index c721d817..2ff7857a 100644 --- a/webui/package.json +++ b/webui/package.json @@ -23,11 +23,11 @@ "@headlessui/vue": "^1.7.23", "@vueuse/components": "^10.11.1", "@vueuse/core": "^10.11.1", - "axios": "^0.27.2", + "axios": "^1.7.9", "naive-ui": "^2.39.0", "pinia": "^2.2.2", "vue": "^3.5.8", - "vue-i18n": "^9.14.0", + "vue-i18n": "^9.14.2", "vue-inline-svg": "^3.1.4", "vue-router": "^4.4.5", "vuedraggable": "^4.1.0" diff --git a/webui/pnpm-lock.yaml b/webui/pnpm-lock.yaml index dd5860d0..b0b7c735 100644 --- a/webui/pnpm-lock.yaml +++ b/webui/pnpm-lock.yaml @@ -18,8 +18,8 @@ importers: specifier: ^10.11.1 version: 10.11.1(vue@3.5.8(typescript@4.9.5)) axios: - specifier: ^0.27.2 - version: 0.27.2 + specifier: ^1.7.9 + version: 1.18.1 naive-ui: specifier: ^2.39.0 version: 2.39.0(vue@3.5.8(typescript@4.9.5)) @@ -30,8 +30,8 @@ importers: specifier: ^3.5.8 version: 3.5.8(typescript@4.9.5) vue-i18n: - specifier: ^9.14.0 - version: 9.14.0(vue@3.5.8(typescript@4.9.5)) + specifier: ^9.14.2 + version: 9.14.5(vue@3.5.8(typescript@4.9.5)) vue-inline-svg: specifier: ^3.1.4 version: 3.1.4(vue@3.5.8(typescript@4.9.5)) @@ -50,7 +50,7 @@ importers: version: 1.4.2(vue@3.5.8(typescript@4.9.5)) '@intlify/unplugin-vue-i18n': specifier: ^0.11.0 - version: 0.11.0(rollup@2.79.1)(vue-i18n@9.14.0(vue@3.5.8(typescript@4.9.5)))(webpack-sources@3.2.3) + version: 0.11.0(rollup@2.79.1)(vue-i18n@9.14.5(vue@3.5.8(typescript@4.9.5)))(webpack-sources@3.2.3) '@storybook/addon-essentials': specifier: ^7.6.20 version: 7.6.20(@types/react@18.3.8)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(webpack-sources@3.2.3) @@ -1057,20 +1057,20 @@ packages: vue-i18n: optional: true - '@intlify/core-base@9.14.0': - resolution: {integrity: sha512-zJn0imh9HIsZZUtt9v8T16PeVstPv6bP2YzlrYJwoF8F30gs4brZBwW2KK6EI5WYKFi3NeqX6+UU4gniz5TkGg==} + '@intlify/core-base@9.14.5': + resolution: {integrity: sha512-5ah5FqZG4pOoHjkvs8mjtv+gPKYU0zCISaYNjBNNqYiaITxW8ZtVih3GS/oTOqN8d9/mDLyrjD46GBApNxmlsA==} engines: {node: '>= 16'} - '@intlify/message-compiler@9.14.0': - resolution: {integrity: sha512-sXNsoMI0YsipSXW8SR75drmVK56tnJHoYbPXUv2Cf9lz6FzvwsosFm6JtC1oQZI/kU+n7qx0qRrEWkeYFTgETA==} + '@intlify/message-compiler@9.14.5': + resolution: {integrity: sha512-IHzgEu61/YIpQV5Pc3aRWScDcnFKWvQA9kigcINcCBXN8mbW+vk9SK+lDxA6STzKQsVJxUPg9ACC52pKKo3SVQ==} engines: {node: '>= 16'} '@intlify/message-compiler@9.3.0-beta.17': resolution: {integrity: sha512-i7hvVIRk1Ax2uKa9xLRJCT57to08OhFMhFXXjWN07rmx5pWQYQ23MfX1xgggv9drnWTNhqEiD+u4EJeHoS5+Ww==} engines: {node: '>= 14'} - '@intlify/shared@9.14.0': - resolution: {integrity: sha512-r+N8KRQL7LgN1TMTs1A2svfuAU0J94Wu9wWdJVJqYsoMMLIeJxrPjazihfHpmJqfgZq0ah3Y9Q4pgWV2O90Fyg==} + '@intlify/shared@9.14.5': + resolution: {integrity: sha512-9gB+E53BYuAEMhbCAxVgG38EZrk59sxBtv3jSizNL2hEWlgjBjAw1AwpLHtNaeda12pe6W20OGEa0TwuMSRbyQ==} engines: {node: '>= 16'} '@intlify/shared@9.3.0-beta.17': @@ -2307,6 +2307,10 @@ packages: resolution: {integrity: sha512-TMeqbNl2fMW0nMjTEPOwe3J/PRFP4vqeoNuQMG0HlMrtm5QxKqdvAkZ1pRBQ/ulIyDD5Yq0nJ7YbdD8ey0TO3g==} engines: {node: '>= 6.0.0'} + agent-base@6.0.2: + resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} + engines: {node: '>= 6.0.0'} + aggregate-error@3.1.0: resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} engines: {node: '>=8'} @@ -2436,8 +2440,8 @@ packages: resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} engines: {node: '>= 0.4'} - axios@0.27.2: - resolution: {integrity: sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==} + axios@1.18.1: + resolution: {integrity: sha512-3nTvFlvpn9Zu/RkHUqtc7/+al4UpRW5az71ap5zccp6e8RAYEzhMTecX8Dz1wWDYrPpUoB1HAQEGEAEvUr7S9g==} babel-core@7.0.0-bridge.0: resolution: {integrity: sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==} @@ -2557,6 +2561,10 @@ packages: resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} engines: {node: '>=8'} + call-bind-apply-helpers@1.0.2: + resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} + engines: {node: '>= 0.4'} + call-bind@1.0.7: resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} engines: {node: '>= 0.4'} @@ -2946,6 +2954,10 @@ packages: resolution: {integrity: sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==} engines: {node: '>=12'} + dunder-proto@1.0.1: + resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} + engines: {node: '>= 0.4'} + duplexer@0.1.2: resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} @@ -3008,6 +3020,10 @@ packages: resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} engines: {node: '>= 0.4'} + es-define-property@1.0.1: + resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} + engines: {node: '>= 0.4'} + es-errors@1.3.0: resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} engines: {node: '>= 0.4'} @@ -3022,10 +3038,18 @@ packages: resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==} engines: {node: '>= 0.4'} + es-object-atoms@1.1.2: + resolution: {integrity: sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==} + engines: {node: '>= 0.4'} + es-set-tostringtag@2.0.3: resolution: {integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==} engines: {node: '>= 0.4'} + es-set-tostringtag@2.1.0: + resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} + engines: {node: '>= 0.4'} + es-shim-unscopables@1.0.2: resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} @@ -3396,8 +3420,8 @@ packages: resolution: {integrity: sha512-WHRizzSrWFTcKo7cVcbP3wzZVhzsoYxoWqbnH4z+JXGqrjVmnsld6kBZWVlB200PwD5ur8r+HV3KUDxv3cHhOQ==} engines: {node: '>=0.4.0'} - follow-redirects@1.15.9: - resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==} + follow-redirects@1.16.0: + resolution: {integrity: sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==} engines: {node: '>=4.0'} peerDependencies: debug: '*' @@ -3416,6 +3440,10 @@ packages: resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} engines: {node: '>= 6'} + form-data@4.0.6: + resolution: {integrity: sha512-vKatAh4SlVfgbv+YtmhiRjhEMJsYpsG1Y2rMQtR+SVSbytsSD1YGzDIcrAJmdFec88u/+VoGmxnl+80gL1tRCQ==} + engines: {node: '>= 6'} + forwarded@0.2.0: resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} engines: {node: '>= 0.6'} @@ -3472,6 +3500,10 @@ packages: resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} engines: {node: '>= 0.4'} + get-intrinsic@1.3.0: + resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} + engines: {node: '>= 0.4'} + get-nonce@1.0.1: resolution: {integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==} engines: {node: '>=6'} @@ -3491,6 +3523,10 @@ packages: resolution: {integrity: sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==} engines: {node: '>=8'} + get-proto@1.0.1: + resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} + engines: {node: '>= 0.4'} + get-stream@6.0.1: resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} engines: {node: '>=10'} @@ -3548,6 +3584,10 @@ packages: gopd@1.0.1: resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + gopd@1.2.0: + resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} + engines: {node: '>= 0.4'} + graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} @@ -3592,6 +3632,10 @@ packages: resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} engines: {node: '>= 0.4'} + has-symbols@1.1.0: + resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} + engines: {node: '>= 0.4'} + has-tostringtag@1.0.2: resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} engines: {node: '>= 0.4'} @@ -3603,6 +3647,10 @@ packages: resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} engines: {node: '>= 0.4'} + hasown@2.0.4: + resolution: {integrity: sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==} + engines: {node: '>= 0.4'} + he@1.2.0: resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} hasBin: true @@ -3629,6 +3677,10 @@ packages: resolution: {integrity: sha512-zoDhWrkR3of1l9QAL8/scJZyLu8j/gBkcwcaQOZh7Gyh/+uJQzGVETdgT30akuwkpL8HTRfssqI3BZuV18teDg==} engines: {node: '>= 6.0.0'} + https-proxy-agent@5.0.1: + resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} + engines: {node: '>= 6'} + human-signals@2.1.0: resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} engines: {node: '>=10.17.0'} @@ -4161,6 +4213,10 @@ packages: peerDependencies: react: '>= 0.14.0' + math-intrinsics@1.1.0: + resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} + engines: {node: '>= 0.4'} + md5-hex@3.0.1: resolution: {integrity: sha512-BUiRtTtV39LIJwinWBjqVsU9xhdnz7/i889V859IBFpuqGAj6LuOvHv5XLbgZ2R7ptJoJaEcxkv88/h25T7Ciw==} engines: {node: '>=8'} @@ -4683,6 +4739,10 @@ packages: proxy-from-env@1.1.0: resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + proxy-from-env@2.1.0: + resolution: {integrity: sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==} + engines: {node: '>=10'} + pug-attrs@3.0.0: resolution: {integrity: sha512-azINV9dUtzPMFQktvTXciNAfAuVh/L/JCl0vtPCwvOA21uZrC08K/UnmrL+SXGEVc1FwzjW62+xw5S/uaLj6cA==} @@ -5797,8 +5857,8 @@ packages: vue-component-type-helpers@2.1.6: resolution: {integrity: sha512-ng11B8B/ZADUMMOsRbqv0arc442q7lifSubD0v8oDXIFoMg/mXwAPUunrroIDkY+mcD0dHKccdaznSVp8EoX3w==} - vue-component-type-helpers@3.2.5: - resolution: {integrity: sha512-tkvNr+bU8+xD/onAThIe7CHFvOJ/BO6XCOrxMzeytJq40nTfpGDJuVjyCM8ccGZKfAbGk2YfuZyDMXM56qheZQ==} + vue-component-type-helpers@3.3.6: + resolution: {integrity: sha512-FkljacAwJ9BUoSUdpFe3VDy0sGigNlTH9+2zcXUWmZOjN8swiCkl3t48wOJun0OsUd2cEIda1l04tsxMiKIIrQ==} vue-demi@0.14.10: resolution: {integrity: sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==} @@ -5822,9 +5882,10 @@ packages: peerDependencies: eslint: '>=6.0.0' - vue-i18n@9.14.0: - resolution: {integrity: sha512-LxmpRuCt2rI8gqU+kxeflRZMQn4D5+4M3oP3PWZdowW/ePJraHqhF7p4CuaME52mUxdw3Mmy2yAUKgfZYgCRjA==} + vue-i18n@9.14.5: + resolution: {integrity: sha512-0jQ9Em3ymWngyiIkj0+c/k7WgaPO+TNzjKSNq9BvBQaKJECqn9cd9fL4tkDhB5G1QBskGl9YxxbDAhgbFtpe2g==} engines: {node: '>= 16'} + deprecated: v9 and v10 no longer supported. please migrate to v11. about maintenance status, see https://vue-i18n.intlify.dev/guide/maintenance.html peerDependencies: vue: ^3.0.0 @@ -7173,7 +7234,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@intlify/bundle-utils@6.0.1(vue-i18n@9.14.0(vue@3.5.8(typescript@4.9.5)))': + '@intlify/bundle-utils@6.0.1(vue-i18n@9.14.5(vue@3.5.8(typescript@4.9.5)))': dependencies: '@intlify/message-compiler': 9.3.0-beta.17 '@intlify/shared': 9.3.0-beta.17 @@ -7186,16 +7247,16 @@ snapshots: source-map: 0.6.1 yaml-eslint-parser: 0.3.2 optionalDependencies: - vue-i18n: 9.14.0(vue@3.5.8(typescript@4.9.5)) + vue-i18n: 9.14.5(vue@3.5.8(typescript@4.9.5)) - '@intlify/core-base@9.14.0': + '@intlify/core-base@9.14.5': dependencies: - '@intlify/message-compiler': 9.14.0 - '@intlify/shared': 9.14.0 + '@intlify/message-compiler': 9.14.5 + '@intlify/shared': 9.14.5 - '@intlify/message-compiler@9.14.0': + '@intlify/message-compiler@9.14.5': dependencies: - '@intlify/shared': 9.14.0 + '@intlify/shared': 9.14.5 source-map-js: 1.2.1 '@intlify/message-compiler@9.3.0-beta.17': @@ -7203,13 +7264,13 @@ snapshots: '@intlify/shared': 9.3.0-beta.17 source-map: 0.6.1 - '@intlify/shared@9.14.0': {} + '@intlify/shared@9.14.5': {} '@intlify/shared@9.3.0-beta.17': {} - '@intlify/unplugin-vue-i18n@0.11.0(rollup@2.79.1)(vue-i18n@9.14.0(vue@3.5.8(typescript@4.9.5)))(webpack-sources@3.2.3)': + '@intlify/unplugin-vue-i18n@0.11.0(rollup@2.79.1)(vue-i18n@9.14.5(vue@3.5.8(typescript@4.9.5)))(webpack-sources@3.2.3)': dependencies: - '@intlify/bundle-utils': 6.0.1(vue-i18n@9.14.0(vue@3.5.8(typescript@4.9.5))) + '@intlify/bundle-utils': 6.0.1(vue-i18n@9.14.5(vue@3.5.8(typescript@4.9.5))) '@intlify/shared': 9.3.0-beta.17 '@rollup/pluginutils': 5.1.1(rollup@2.79.1) '@vue/compiler-sfc': 3.5.8 @@ -7222,7 +7283,7 @@ snapshots: source-map: 0.6.1 unplugin: 1.14.1(webpack-sources@3.2.3) optionalDependencies: - vue-i18n: 9.14.0(vue@3.5.8(typescript@4.9.5)) + vue-i18n: 9.14.5(vue@3.5.8(typescript@4.9.5)) transitivePeerDependencies: - rollup - supports-color @@ -8325,7 +8386,7 @@ snapshots: ts-dedent: 2.2.0 type-fest: 2.19.0 vue: 3.5.8(typescript@4.9.5) - vue-component-type-helpers: 3.2.5 + vue-component-type-helpers: 3.3.6 transitivePeerDependencies: - encoding - supports-color @@ -9009,6 +9070,12 @@ snapshots: agent-base@5.1.1: {} + agent-base@6.0.2: + dependencies: + debug: 4.3.7 + transitivePeerDependencies: + - supports-color + aggregate-error@3.1.0: dependencies: clean-stack: 2.2.0 @@ -9159,12 +9226,15 @@ snapshots: dependencies: possible-typed-array-names: 1.0.0 - axios@0.27.2: + axios@1.18.1: dependencies: - follow-redirects: 1.15.9 - form-data: 4.0.0 + follow-redirects: 1.16.0 + form-data: 4.0.6 + https-proxy-agent: 5.0.1 + proxy-from-env: 2.1.0 transitivePeerDependencies: - debug + - supports-color babel-core@7.0.0-bridge.0(@babel/core@7.25.2): dependencies: @@ -9304,6 +9374,11 @@ snapshots: cac@6.7.14: {} + call-bind-apply-helpers@1.0.2: + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + call-bind@1.0.7: dependencies: es-define-property: 1.0.0 @@ -9701,6 +9776,12 @@ snapshots: dotenv@16.4.5: {} + dunder-proto@1.0.1: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-errors: 1.3.0 + gopd: 1.2.0 + duplexer@0.1.2: {} duplexify@3.7.1: @@ -9800,6 +9881,8 @@ snapshots: dependencies: get-intrinsic: 1.2.4 + es-define-property@1.0.1: {} + es-errors@1.3.0: {} es-get-iterator@1.1.3: @@ -9820,12 +9903,23 @@ snapshots: dependencies: es-errors: 1.3.0 + es-object-atoms@1.1.2: + dependencies: + es-errors: 1.3.0 + es-set-tostringtag@2.0.3: dependencies: get-intrinsic: 1.2.4 has-tostringtag: 1.0.2 hasown: 2.0.2 + es-set-tostringtag@2.1.0: + dependencies: + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + has-tostringtag: 1.0.2 + hasown: 2.0.4 + es-shim-unscopables@1.0.2: dependencies: hasown: 2.0.2 @@ -10352,7 +10446,7 @@ snapshots: flow-parser@0.246.0: {} - follow-redirects@1.15.9: {} + follow-redirects@1.16.0: {} for-each@0.3.3: dependencies: @@ -10369,6 +10463,14 @@ snapshots: combined-stream: 1.0.8 mime-types: 2.1.35 + form-data@4.0.6: + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + es-set-tostringtag: 2.1.0 + hasown: 2.0.4 + mime-types: 2.1.35 + forwarded@0.2.0: {} fresh@0.5.2: {} @@ -10426,6 +10528,19 @@ snapshots: has-symbols: 1.0.3 hasown: 2.0.2 + get-intrinsic@1.3.0: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-define-property: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.2 + function-bind: 1.1.2 + get-proto: 1.0.1 + gopd: 1.2.0 + has-symbols: 1.1.0 + hasown: 2.0.4 + math-intrinsics: 1.1.0 + get-nonce@1.0.1: {} get-npm-tarball-url@2.1.0: {} @@ -10436,6 +10551,11 @@ snapshots: get-port@5.1.1: {} + get-proto@1.0.1: + dependencies: + dunder-proto: 1.0.1 + es-object-atoms: 1.1.2 + get-stream@6.0.1: {} get-stream@8.0.1: {} @@ -10511,6 +10631,8 @@ snapshots: dependencies: get-intrinsic: 1.2.4 + gopd@1.2.0: {} + graceful-fs@4.2.11: {} graphemer@1.4.0: {} @@ -10560,6 +10682,8 @@ snapshots: has-symbols@1.0.3: {} + has-symbols@1.1.0: {} + has-tostringtag@1.0.2: dependencies: has-symbols: 1.0.3 @@ -10570,6 +10694,10 @@ snapshots: dependencies: function-bind: 1.1.2 + hasown@2.0.4: + dependencies: + function-bind: 1.1.2 + he@1.2.0: {} highlight.js@11.10.0: {} @@ -10600,6 +10728,13 @@ snapshots: transitivePeerDependencies: - supports-color + https-proxy-agent@5.0.1: + dependencies: + agent-base: 6.0.2 + debug: 4.3.7 + transitivePeerDependencies: + - supports-color + human-signals@2.1.0: {} human-signals@5.0.0: {} @@ -11105,6 +11240,8 @@ snapshots: dependencies: react: 18.2.0 + math-intrinsics@1.1.0: {} + md5-hex@3.0.1: dependencies: blueimp-md5: 2.19.0 @@ -11605,6 +11742,8 @@ snapshots: proxy-from-env@1.1.0: {} + proxy-from-env@2.1.0: {} + pug-attrs@3.0.0: dependencies: constantinople: 4.0.1 @@ -12827,7 +12966,7 @@ snapshots: vue-component-type-helpers@2.1.6: {} - vue-component-type-helpers@3.2.5: {} + vue-component-type-helpers@3.3.6: {} vue-demi@0.14.10(vue@3.5.8(typescript@4.9.5)): dependencies: @@ -12862,10 +13001,10 @@ snapshots: transitivePeerDependencies: - supports-color - vue-i18n@9.14.0(vue@3.5.8(typescript@4.9.5)): + vue-i18n@9.14.5(vue@3.5.8(typescript@4.9.5)): dependencies: - '@intlify/core-base': 9.14.0 - '@intlify/shared': 9.14.0 + '@intlify/core-base': 9.14.5 + '@intlify/shared': 9.14.5 '@vue/devtools-api': 6.6.4 vue: 3.5.8(typescript@4.9.5) diff --git a/webui/src/components/ab-add-rss.vue b/webui/src/components/ab-add-rss.vue index 65280152..5203a2d4 100644 --- a/webui/src/components/ab-add-rss.vue +++ b/webui/src/components/ab-add-rss.vue @@ -175,7 +175,7 @@ async function autoDetectOffset() { offsetReason.value = result.reason; } catch (e) { console.error('Failed to detect offset:', e); - message.error('Failed to detect offset'); + message.error(t('offset.detect_failed')); } finally { offsetLoading.value = false; } diff --git a/webui/src/components/ab-edit-rule.vue b/webui/src/components/ab-edit-rule.vue index ce480428..fc3514ae 100644 --- a/webui/src/components/ab-edit-rule.vue +++ b/webui/src/components/ab-edit-rule.vue @@ -129,7 +129,7 @@ async function autoDetectOffset() { } } catch (e) { console.error('Failed to detect offset:', e); - message.error('Failed to detect offset'); + message.error(t('offset.detect_failed')); } finally { offsetLoading.value = false; } @@ -146,7 +146,7 @@ async function dismissReview() { message.success(t('offset.review_dismissed')); } catch (e) { console.error('Failed to dismiss review:', e); - message.error('Failed to dismiss review'); + message.error(t('offset.dismiss_failed')); } finally { dismissingReview.value = false; } diff --git a/webui/src/components/basic/ab-button.vue b/webui/src/components/basic/ab-button.vue index f50f067c..20317047 100644 --- a/webui/src/components/basic/ab-button.vue +++ b/webui/src/components/basic/ab-button.vue @@ -7,12 +7,16 @@ const props = withDefaults( size?: 'big' | 'normal' | 'small'; link?: string | null; loading?: boolean; + /** Native `type` attribute when rendered as a