From 0677031ebb01c6795cb1f506482917c9efcea345 Mon Sep 17 00:00:00 2001 From: Zyronon Date: Fri, 28 Nov 2025 00:42:31 +0800 Subject: [PATCH] feat:add guide & dict test mode --- package.json | 4 +- pnpm-lock.yaml | 65 ++- src/assets/css/style.scss | 4 - src/components/Book.vue | 2 +- src/components/ConflictNotice.vue | 12 +- src/config/env.ts | 7 +- src/pages/article/ArticlesPage.vue | 53 +- src/pages/article/PracticeArticles.vue | 80 ++- .../article/components/TypingArticle.vue | 2 +- src/pages/layout.vue | 10 +- src/pages/setting/Setting.vue | 8 + src/pages/word/DictDetail.vue | 497 +++++++++--------- src/pages/word/DictList.vue | 70 +-- src/pages/word/PracticeWords.vue | 160 ++++-- src/pages/word/WordsPage.vue | 101 ++-- src/pages/word/components/Footer.vue | 2 +- .../word/components/PracticeSettingDialog.vue | 4 +- src/pages/word/components/TypeWord.vue | 2 +- 18 files changed, 632 insertions(+), 451 deletions(-) diff --git a/package.json b/package.json index 4e582c0e..a287bb29 100644 --- a/package.json +++ b/package.json @@ -18,16 +18,16 @@ "deploy-oss": "node scripts/deploy-oss.js" }, "dependencies": { + "@floating-ui/dom": "^1.7.4", "@imengyu/vue3-context-menu": "^1.5.1", "@vueuse/core": "14.0.0-alpha.0", "@zumer/snapdom": "^2.0.0", - "axios": "^1.10.0", + "axios": "^1.12.0", "compromise": "^14.14.4", "copy-to-clipboard": "^3.3.3", "dayjs": "^1.11.13", "file-saver": "^2.0.5", "idb-keyval": "^6.2.2", - "intro.js": "^8.3.2", "md5": "^2.2.1", "mitt": "^3.0.1", "nanoid": "^5.1.5", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5506673f..c5187ecd 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8,6 +8,9 @@ importers: .: dependencies: + '@floating-ui/dom': + specifier: ^1.7.4 + version: 1.7.4 '@imengyu/vue3-context-menu': specifier: ^1.5.1 version: 1.5.2 @@ -18,8 +21,8 @@ importers: specifier: ^2.0.0 version: 2.0.0 axios: - specifier: ^1.10.0 - version: 1.11.0 + specifier: ^1.12.0 + version: 1.13.2 compromise: specifier: ^14.14.4 version: 14.14.4 @@ -35,9 +38,6 @@ importers: idb-keyval: specifier: ^6.2.2 version: 6.2.2 - intro.js: - specifier: ^8.3.2 - version: 8.3.2 md5: specifier: ^2.2.1 version: 2.3.0 @@ -50,6 +50,9 @@ importers: pinia: specifier: ^3.0.3 version: 3.0.3(typescript@5.9.2)(vue@3.5.18(typescript@5.9.2)) + shepherd.js: + specifier: ^14.5.1 + version: 14.5.1 string-comparison: specifier: ^1.3.0 version: 1.3.0 @@ -520,6 +523,15 @@ packages: cpu: [x64] os: [win32] + '@floating-ui/core@1.7.3': + resolution: {integrity: sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w==} + + '@floating-ui/dom@1.7.4': + resolution: {integrity: sha512-OOchDgh4F2CchOX94cRVqhvy7b3AFb+/rQXyswmzmGakRfkMgoWVjfnLWkRirfLEfuD4ysVW16eXzwt3jHIzKA==} + + '@floating-ui/utils@0.2.10': + resolution: {integrity: sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==} + '@iconify-json/bx@1.2.2': resolution: {integrity: sha512-hZVx6LMEkYckScdRdUuQWcmv8Lm2au6Cnf799TLoR6YgiAfFvaJ4M5ElwcnExvCu8ntsS7jW89r0W5LwBAfZXQ==} @@ -854,6 +866,9 @@ packages: cpu: [x64] os: [win32] + '@scarf/scarf@1.4.0': + resolution: {integrity: sha512-xxeapPiUXdZAE3che6f3xogoJPeZgig6omHEy1rIY5WVsB3H2BHNnZH+gHG6x91SCWyQCzWGsuL2Hh3ClO5/qQ==} + '@tybys/wasm-util@0.10.0': resolution: {integrity: sha512-VyyPYFlOMNylG45GoAe0xDoLwWuowvf92F9kySqzYh8vmYm7D2u4iUJKa1tOUpS70Ku13ASrOkS4ScXFsTaCNQ==} @@ -1424,8 +1439,8 @@ packages: engines: {node: '>= 4.5.0'} hasBin: true - axios@1.11.0: - resolution: {integrity: sha512-1Lx3WLFQWm3ooKDYZD1eXmoGO9fxYQjrycfHFC8P0sCfQVXyROp0p9PFWBehewBOdCwHc+f/b8I0fMto5eSfwA==} + axios@1.13.2: + resolution: {integrity: sha512-VPk9ebNqPcy5lRGuSlKx752IlDatOjT9paPlm8A7yOuW2Fbvp4X3JznJtT4f0GzGLLiWE9W8onz51SqLYwzGaA==} bach@1.2.0: resolution: {integrity: sha512-bZOOfCb3gXBXbTFXq3OZtGR88LwGeJvzu6szttaIzymOTS4ZttBNOWSv7aLZja2EMycKtRYV0Oa8SNKH/zkxvg==} @@ -1792,6 +1807,10 @@ packages: dedent@0.7.0: resolution: {integrity: sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==} + deepmerge-ts@7.1.5: + resolution: {integrity: sha512-HOJkrhaYsweh+W+e74Yn7YStZOilkoPb6fycpwNLKzSPtruFs48nYis0zy5yJz1+ktUhHxoRDJ27RQAWLIJVJw==} + engines: {node: '>=16.0.0'} + default-compare@1.0.0: resolution: {integrity: sha512-QWfXlM0EkAbqOCbD/6HjdwT19j7WCkMyiRhWilc4H9/5h/RzTF9gv5LYh1+CmDV5d1rki6KAWLtQale0xt20eQ==} engines: {node: '>=0.10.0'} @@ -2343,9 +2362,6 @@ packages: resolution: {integrity: sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==} engines: {node: '>= 0.10'} - intro.js@8.3.2: - resolution: {integrity: sha512-+QsuU8P7Z/O7stAwZ8Uj6CPyKsY6xVx/7hKTVLjlIEPYHaT43XnEUUYHCln6Ehr7GlDuwczh6I8PD/HGf4EG0A==} - invert-kv@1.0.0: resolution: {integrity: sha512-xgs2NH9AE66ucSq4cNG1nhSFghr5l6tdL15Pk+jl46bmmBapgoaY/AacXyaDznAqmGL99TiLSQgO/XazFSKYeQ==} engines: {node: '>=0.10.0'} @@ -3208,6 +3224,10 @@ packages: resolution: {integrity: sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==} engines: {node: '>=0.10.0'} + shepherd.js@14.5.1: + resolution: {integrity: sha512-VuvPvLG1QjNOLP7AIm2HGyfmxEIz8QdskvWOHwUcxLDibYWjLRBmCWd8LSL5FlwhBW7D/GU+3gNVC/ASxAWdxg==} + engines: {node: 18.* || >= 20} + side-channel-list@1.0.0: resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} engines: {node: '>= 0.4'} @@ -4167,6 +4187,17 @@ snapshots: '@esbuild/win32-x64@0.25.9': optional: true + '@floating-ui/core@1.7.3': + dependencies: + '@floating-ui/utils': 0.2.10 + + '@floating-ui/dom@1.7.4': + dependencies: + '@floating-ui/core': 1.7.3 + '@floating-ui/utils': 0.2.10 + + '@floating-ui/utils@0.2.10': {} + '@iconify-json/bx@1.2.2': dependencies: '@iconify/types': 2.0.0 @@ -4461,6 +4492,8 @@ snapshots: '@rollup/rollup-win32-x64-msvc@4.46.2': optional: true + '@scarf/scarf@1.4.0': {} + '@tybys/wasm-util@0.10.0': dependencies: tslib: 2.8.1 @@ -5234,7 +5267,7 @@ snapshots: atob@2.1.2: {} - axios@1.11.0: + axios@1.13.2: dependencies: follow-redirects: 1.15.11 form-data: 4.0.4 @@ -5650,6 +5683,8 @@ snapshots: dedent@0.7.0: {} + deepmerge-ts@7.1.5: {} + default-compare@1.0.0: dependencies: kind-of: 5.1.0 @@ -6306,8 +6341,6 @@ snapshots: interpret@1.4.0: {} - intro.js@8.3.2: {} - invert-kv@1.0.0: {} is-absolute@1.0.0: @@ -7191,6 +7224,12 @@ snapshots: is-plain-object: 2.0.4 split-string: 3.1.0 + shepherd.js@14.5.1: + dependencies: + '@floating-ui/dom': 1.7.4 + '@scarf/scarf': 1.4.0 + deepmerge-ts: 7.1.5 + side-channel-list@1.0.0: dependencies: es-errors: 1.3.0 diff --git a/src/assets/css/style.scss b/src/assets/css/style.scss index 7f70bc45..37df52c9 100644 --- a/src/assets/css/style.scss +++ b/src/assets/css/style.scss @@ -1,10 +1,6 @@ @use "anim" as *; -//@use 'intro.js/minified/introjs.min.css'; @use 'shepherd.js/dist/css/shepherd.css'; -.shepherd-enabled.shepherd-element{ - transform: translateY(30px); -} :root { --color-reverse-white: white; --color-reverse-black: black; diff --git a/src/components/Book.vue b/src/components/Book.vue index 097826e3..4fe590cb 100644 --- a/src/components/Book.vue +++ b/src/components/Book.vue @@ -33,7 +33,7 @@ const studyProgress = $computed(() => {