From 3371ded656647b35fdc855b46b2a2a29c2f0ed06 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 29 Jul 2026 12:11:13 +0000 Subject: [PATCH 1/2] chore(deps): update devdependency @rhapsodic/eslint-config to v4 --- package.json | 2 +- pnpm-lock.yaml | 442 ++++++++++++++++++++++++++++++++----------------- 2 files changed, 287 insertions(+), 157 deletions(-) diff --git a/package.json b/package.json index 0737581..d39a1f6 100644 --- a/package.json +++ b/package.json @@ -83,7 +83,7 @@ "devDependencies": { "@commitlint/cli": "^21.2.1", "@commitlint/config-conventional": "^21.2.0", - "@rhapsodic/eslint-config": "^1.0.5", + "@rhapsodic/eslint-config": "^4.0.0", "@rhapsodic/stylelint-config": "^1.0.1", "@types/node": "^25.9.5", "@vitejs/plugin-vue": "^6.0.8", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a50fcf4..cb35b62 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -19,8 +19,8 @@ importers: specifier: ^21.2.0 version: 21.2.0 '@rhapsodic/eslint-config': - specifier: ^1.0.5 - version: 1.0.5(@typescript-eslint/utils@8.60.1(eslint@10.7.0(jiti@2.6.1))(typescript@6.0.3))(@vue/compiler-sfc@3.5.39)(eslint-plugin-vuejs-accessibility@2.5.0(eslint@10.7.0(jiti@2.6.1))(globals@17.7.0))(eslint@10.7.0(jiti@2.6.1))(typescript@6.0.3)(vue@3.5.39(typescript@6.0.3)) + specifier: ^4.0.0 + version: 4.0.0(@typescript-eslint/utils@8.65.0(eslint@10.7.0(jiti@2.6.1))(typescript@6.0.3))(@vue/compiler-sfc@3.5.39)(eslint-plugin-vuejs-accessibility@2.5.0(eslint@10.7.0(jiti@2.6.1))(globals@17.7.0))(eslint@10.7.0(jiti@2.6.1))(typescript@6.0.3)(vue@3.5.39(typescript@6.0.3)) '@rhapsodic/stylelint-config': specifier: ^1.0.1 version: 1.0.1(postcss@8.5.15)(stylelint@17.14.0(typescript@6.0.3)) @@ -86,10 +86,6 @@ packages: resolution: {integrity: sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-identifier@7.28.5': - resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==} - engines: {node: '>=6.9.0'} - '@babel/helper-validator-identifier@7.29.7': resolution: {integrity: sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==} engines: {node: '>=6.9.0'} @@ -109,12 +105,12 @@ packages: '@cacheable/utils@2.4.1': resolution: {integrity: sha512-eiFgzCbIneyMlLOmNG4g9xzF7Hv3Mga4LjxjcSC/ues6VYq2+gUbQI8JqNuw/ZM8tJIeIaBGpswAsqV2V7ApgA==} - '@clack/core@1.4.1': - resolution: {integrity: sha512-FILJa1gGKEFTGZAJE9RpVhrjKz3c3h4ar60dSv6cGuDqufQ84YEIS3GAGvZiN+H6yaLbbvTFNejjCC4tXpZEuw==} + '@clack/core@1.4.3': + resolution: {integrity: sha512-/kr3UWNtdJfxZtPgDqUOmG2pvwlmcLGheex5yiZKdwbzZJxhV+HMNR9QNmyY5cGwTNV6LrR7Jtp+KjhUAP1qBQ==} engines: {node: '>= 20.12.0'} - '@clack/prompts@1.5.1': - resolution: {integrity: sha512-zccHj2z2oCCO4yrDiRSlFOxWerGqRiysP7a5jPK6uoI9URKAquwY42Dd/iUP8JWHxEzdRe4TlbvZCo8z1/mhrw==} + '@clack/prompts@1.7.0': + resolution: {integrity: sha512-y7/yvZ2TPAnR9+jnc00klvNNLkJiXFFrQA/hlLCcxA9a2A4zQIOimyFQ9XfwYKiGD1fb5GY8vbKIIgO8d5Tb2A==} engines: {node: '>= 20.12.0'} '@commitlint/cli@21.2.1': @@ -354,9 +350,6 @@ packages: '@oxc-project/types@0.139.0': resolution: {integrity: sha512-r9gHphtCs+1M7J0pw6Sn/hh/Wpa/iQrOOkrNAlVLF/gHq+/CJmHIWKKUUhdWjcD6CIa8idarspCsASiXCXvFUw==} - '@package-json/types@0.0.12': - resolution: {integrity: sha512-uu43FGU34B5VM9mCNjXCwLaGHYjXdNincqKLaraaCW+7S2+SmiBg1Nv8bPnmschrIfZmfKNY9f3fC376MRrObw==} - '@parcel/watcher-android-arm64@2.5.6': resolution: {integrity: sha512-YQxSS34tPF/6ZG7r/Ih9xy+kP/WwediEUsqmtf0cuCV5TPPKw/PQHRhueUo6JdeFJaqV3pyjm0GdYjZotbRt/A==} engines: {node: '>= 10.0.0'} @@ -448,10 +441,11 @@ packages: '@quansync/fs@1.0.0': resolution: {integrity: sha512-4TJ3DFtlf1L5LDMaM6CanJ/0lckGNtJcMjQ1NAV6zDmA0tEHKZtxNKin8EgPaVX1YzljbxckyT2tJrpQKAtngQ==} - '@rhapsodic/eslint-config@1.0.5': - resolution: {integrity: sha512-f3EcZKw6cDJgrFa59dWssBHyedFWAgf7DuN5Yq9idCyCNKPnHyAvrCj+py9MF4PNe8gxnKcx5jzZSCieAovC/w==} + '@rhapsodic/eslint-config@4.0.0': + resolution: {integrity: sha512-9w2yD+b2Uwi2nO4f8paT93At94/aQCZqd4RAGafkOWmNpKbImpWD7uJqvjIRn4WGwEpGocGKgmklnpy9vYTexg==} + engines: {node: '>=22'} peerDependencies: - eslint: ^9.35.0 || ^10.0.0 + eslint: ^10.4.0 eslint-plugin-vuejs-accessibility: ^2.4.1 vue: ^3.0.0 peerDependenciesMeta: @@ -604,9 +598,6 @@ packages: peerDependencies: stylelint: ^17.6.0 - '@tybys/wasm-util@0.10.1': - resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==} - '@tybys/wasm-util@0.10.3': resolution: {integrity: sha512-F3fo1MYrRJYL3zER0OUOmkutjr1Vp23m7OsSgp7nq4SP6OqX6C/56XFIPAl5bt3zaBRjmW7SGz3u/6LwFpYcOg==} @@ -631,67 +622,67 @@ packages: '@types/web-bluetooth@0.0.21': resolution: {integrity: sha512-oIQLCGWtcFZy2JW77j9k8nHzAOpqMHLQejDA48XXMWH6tjCQHz5RCFz1bzsmROyL6PUm+LLnUiI4BCn221inxA==} - '@typescript-eslint/eslint-plugin@8.60.1': - resolution: {integrity: sha512-JQ4S5GB0tfjO8BuJ4fcX+HodkzJjYBV+7OJ+wLygaX7OGQ7FudyHL4NSCA6ob+w3Yn+5MkKIozOwQhXeM7opVg==} + '@typescript-eslint/eslint-plugin@8.65.0': + resolution: {integrity: sha512-IEgob78X12rHpUmtcwFsXhZdVGJtwTVP8FiCLZkR6GlYVrl2PcuB+KhCE5BlVC/eQpQnu8WXRtkHZuPar+gCRA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': ^8.60.1 + '@typescript-eslint/parser': ^8.65.0 eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/parser@8.60.1': - resolution: {integrity: sha512-A0M6ua6H252bVjPvvtSgl2QA4+ET9S5Mtkb2GDyTxIhH/C4qDItT7RQNO5PhMC6NXGYXOR9dIalcDDgBKT7oFA==} + '@typescript-eslint/parser@8.65.0': + resolution: {integrity: sha512-CZ4nMxWwgu1HEEFNkeaCptra9QCtkmKdgf3sWh1rl1trIhmxLilgTV4cwcbQ4wemnT4sWQN8CaKOmdYx+g2gMA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/project-service@8.60.1': - resolution: {integrity: sha512-eXkTH2bxmXlqD1RnOPmLZ9ZM9D3VwSx04JOwBnP9RQ+yUA5a2Mu7SfW8uaV2Aon53NJzZlZYuX7tn91Izf+xaw==} + '@typescript-eslint/project-service@8.65.0': + resolution: {integrity: sha512-SxnPhbTsGahizDgbu7oqFH/xVtzIqMd/s+WtnSxNxJZJpLbdT5IPdzg8EZxO3+PoKahXmwJLeNQOpKJb3/bi7Q==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/scope-manager@8.60.1': - resolution: {integrity: sha512-gvI5OQoptnxQnchOirukCuQ55svJSTuD/4k5+pC267xyBtYry748R9/c3tYUzb/iE6RZfllRz2lVulLCHkTm4w==} + '@typescript-eslint/scope-manager@8.65.0': + resolution: {integrity: sha512-Esbl8OSYiVxBokYgWPf7VVWg/BE798wXhimnn9ML9Pt5qoDf8bfQlgjlKXR/k98+AcNzlLKYrpCcrcuZ9DZLgg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/tsconfig-utils@8.60.1': - resolution: {integrity: sha512-nh8w4qAteiKuZu3pSSzG/yGKpw0OlkrKnzFmbVRenKaD4qc+7i1GrmZaLVkr8rk4uipiPGMOW4YsM6WmKZ5CvA==} + '@typescript-eslint/tsconfig-utils@8.65.0': + resolution: {integrity: sha512-j6GzGqCiRdA7Qhur2VVmKZAkBLfnHFQfx4TaJGL9RMveZqCo48jSHHO0DTgizEnGhtWnqmbtCUSrqSkdiY/0Hg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/type-utils@8.60.1': - resolution: {integrity: sha512-sdwTrpjosW7ANQYJ39ZBF1ZyEMEGVB2UsikrserVM/30a/F1dTLnu9bGxEdosugyu5caigjLrR2qiD11asjI1A==} + '@typescript-eslint/type-utils@8.65.0': + resolution: {integrity: sha512-YjaZ7PRI5qY7ax2L3PbvX0rRyGtipAReCWs0mhhDBHjH/vl0g0BonaGXrKdKpMbIIsMIwDgbk/xzkBTyAltS5g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/types@8.58.1': - resolution: {integrity: sha512-io/dV5Aw5ezwzfPBBWLoT+5QfVtP8O7q4Kftjn5azJ88bYyp/ZMCsyW1lpKK46EXJcaYMZ1JtYj+s/7TdzmQMw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/types@8.60.1': resolution: {integrity: sha512-4h0tY8ppCkdCzcrl2YM5M3my0xsE1Tf8om3owEu5oPWmXwkKRmk0j0LGDzYBGUcAlesEbxBhazqu/K4cu3Ug7w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@8.60.1': - resolution: {integrity: sha512-alpRkfG8hlVE5kdJW2GkfgDgXxold3e8e4l6EnmhRmRLbekgAPCCGDVD++sABy9FcgPFroq+uFcCSM1vR57Cew==} + '@typescript-eslint/types@8.65.0': + resolution: {integrity: sha512-JSSwWNy+H0E/01jJEM+hrX6N0OFDzFzeIhHFSAS01tlVaevpG8cFyYRPhS5yjGOvBUx3sqQHVMjCL1CAZZMxBg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/typescript-estree@8.65.0': + resolution: {integrity: sha512-JboAE2swaYt4tb1fHhHTABE2K+OLy09XfcTbhnk4Pw96f9dd2e9iYsJ28gBggHlo5z5x1rkyWvcPoTuNTd4oGg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/utils@8.60.1': - resolution: {integrity: sha512-h2MPBLoNtjc3qZWfY3Tl51yPorQ2McHn8pJfcMNTcIvrrZrr90Ykffit0yjrPFWQcRcUxzH20+6OcVdW4yHtUg==} + '@typescript-eslint/utils@8.65.0': + resolution: {integrity: sha512-gXiwIHsYreboxeJucHKPvgwl7dXt50mF8s1/c00cP/WoVTyWKFdtfhRWwZiXYFU5H2O8vVoSLNrexFZjYS/SGA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/visitor-keys@8.60.1': - resolution: {integrity: sha512-EbGRQg4FhrmwLodl+t3JNAnXHWVr9Vp+Zl1QBZVPY4ByfkzIT8cX3K6QWODHtkIZqqJVEWvhHSx3v5PDHsaQag==} + '@typescript-eslint/visitor-keys@8.65.0': + resolution: {integrity: sha512-8C71BQkGjiMmXtop7pHVJu1l2NNShFdkCyD6a2ezzs5vU/L3LRtb69EtcteFwz0mYMPzIgOw0n6OV4VBUWZd7A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@unrs/resolver-binding-android-arm-eabi@1.11.1': @@ -953,6 +944,11 @@ packages: engines: {node: '>=6.0.0'} hasBin: true + baseline-browser-mapping@2.11.5: + resolution: {integrity: sha512-xJo6a6YZnwZfnyGmQKWMbVOcii7XRibjOskRh+WJ9UHQoX16xrQrcIgAMQOzfvs8XiLMx6ih/fsLPF73iY2D1A==} + engines: {node: '>=6.0.0'} + hasBin: true + boolbase@1.0.0: resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} @@ -969,6 +965,11 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true + browserslist@4.28.7: + resolution: {integrity: sha512-JxV13hNrFxqjOc8alRbq9dK1MM79NEXYpma2B2J4wAtpWS5zIEIKqWPGCl7N4o7Uc7B7itylh7SuDujATRyyTw==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + builtin-modules@5.1.0: resolution: {integrity: sha512-c5JxaDrzwRjq3WyJkI1AGR5xy6Gr6udlt7sQPbl09+3ckB+Zo2qqQ2KhCTBr7Q8dHB43bENGYEk4xddrFH/b7A==} engines: {node: '>=18.20'} @@ -992,6 +993,9 @@ packages: caniuse-lite@1.0.30001787: resolution: {integrity: sha512-mNcrMN9KeI68u7muanUpEejSLghOKlVhRqS/Za2IeyGllJ9I9otGpR9g3nsw7n4W378TE/LyIteA0+/FOZm4Kg==} + caniuse-lite@1.0.30001806: + resolution: {integrity: sha512-72Cuvd95zbSYPKq6Fhg8eDJRlzgWDf7/mtoZv6Qe/DYNCEBdNxoA3+rZAU2ZhGCpZlns3EssFavaZomckT5Uuw==} + chai@6.2.2: resolution: {integrity: sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==} engines: {node: '>=18'} @@ -1007,10 +1011,6 @@ packages: resolution: {integrity: sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg==} engines: {node: '>=8'} - clean-regexp@1.0.0: - resolution: {integrity: sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==} - engines: {node: '>=4'} - cli-cursor@5.0.0: resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==} engines: {node: '>=18'} @@ -1059,6 +1059,10 @@ packages: engines: {node: '>=22'} hasBin: true + convert-hrtime@5.0.0: + resolution: {integrity: sha512-lOETlkIeYSJWcbbcvjRKGxVMXJR+8+OQb/mTPbA4ObPMytYIsUbuOE0Jzy60hjARYszq1id0j8KgVhC+WGZVTg==} + engines: {node: '>=12'} + convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} @@ -1117,6 +1121,10 @@ packages: defu@6.1.7: resolution: {integrity: sha512-7z22QmUWiQ/2d0KkdYmANbRUVABpZ9SNYyH5vx6PZ+nE5bcC0l7uFvEfHlyld/HcGBFTL536ClDt3DEcSlEJAQ==} + detect-indent@7.0.2: + resolution: {integrity: sha512-y+8xyqdGLL+6sh0tVeHcfP/QDd8gUgbasolJJpY7NgeQGSZ739bDtSiaiDgtoicy+mtYB81dKLxO9xRhCyIB3A==} + engines: {node: '>=12.20'} + detect-libc@2.1.2: resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} engines: {node: '>=8'} @@ -1137,6 +1145,9 @@ packages: electron-to-chromium@1.5.335: resolution: {integrity: sha512-q9n5T4BR4Xwa2cwbrwcsDJtHD/enpQ5S1xF1IAtdqf5AAgqDFmR/aakqH3ChFdqd/QXJhS3rnnXFtexU7rax6Q==} + electron-to-chromium@1.5.397: + resolution: {integrity: sha512-khGTy9U9x02KEtsKM8vx5A62BsRmcOsIgDpWr1ImE32Ax8GxHGPHZf+Eu9H8zOOyHJnB0jTbseyTHbq2XCT8yw==} + emoji-regex@10.6.0: resolution: {integrity: sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==} @@ -1172,10 +1183,6 @@ packages: resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} engines: {node: '>=6'} - escape-string-regexp@1.0.5: - resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} - engines: {node: '>=0.8.0'} - escape-string-regexp@4.0.0: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} @@ -1197,8 +1204,8 @@ packages: peerDependencies: eslint: '*' - eslint-plugin-import-x@4.16.2: - resolution: {integrity: sha512-rM9K8UBHcWKpzQzStn1YRN2T5NvdeIfSVoKu/lKF41znQXHAUcBbYXe5wd6GNjZjTrP7viQ49n1D83x/2gYgIw==} + eslint-plugin-import-x@4.17.1: + resolution: {integrity: sha512-4cdstYkKCyjumM2Q9NSI03K8D2a9F4Ssz33K2lv2hQa4KmR9jPLwk3uWGtNvclfqBrPGfGuMBwsGMbe6dMRbfg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: '@typescript-eslint/utils': ^8.56.0 @@ -1210,11 +1217,11 @@ packages: eslint-import-resolver-node: optional: true - eslint-plugin-unicorn@64.0.0: - resolution: {integrity: sha512-rNZwalHh8i0UfPlhNwg5BTUO1CMdKNmjqe+TgzOTZnpKoi8VBgsW7u9qCHIdpxEzZ1uwrJrPF0uRb7l//K38gA==} - engines: {node: ^20.10.0 || >=21.0.0} + eslint-plugin-unicorn@71.1.0: + resolution: {integrity: sha512-dn3YmR3qLLUeYyo/os3ubZ7UHQJ1WbBAgC9cIhnLTyMj9J6kivuc2U1fCmYetLexUlTDVYtBqhjSj/VaebTe6Q==} + engines: {node: '>=22'} peerDependencies: - eslint: '>=9.38.0' + eslint: '>=10.4' eslint-plugin-vue@10.9.2: resolution: {integrity: sha512-4g7ZP3pYcuqd7Zp0pzUKcos0W+RkjBz4EGdhJ92FcYk6v03Ti/GK5NwjgsjxHK+98eXDbHeK7VtX1az7/8doZA==} @@ -1384,6 +1391,10 @@ packages: engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] + function-timeout@1.0.2: + resolution: {integrity: sha512-939eZS4gJ3htTHAldmyyuzlrD58P03fHG49v2JfFXbV6OhvZKRC9j2yAtdHw/zrp2zXHuv05zMIy40F0ge7spA==} + engines: {node: '>=18'} + get-caller-file@2.0.5: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} @@ -1447,6 +1458,10 @@ packages: htmlparser2@8.0.2: resolution: {integrity: sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==} + identifier-regex@1.1.0: + resolution: {integrity: sha512-SLX4H/vtcYlYnL7XqnuJKHU7Z8517TgsW9nmQiGOgMCjQ8V/deLYu6bEmbGoXe7WMMhc9+EUGyFFneHja8KabA==} + engines: {node: '>=18'} + ignore@5.3.2: resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} @@ -1503,6 +1518,10 @@ packages: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} + is-identifier@1.1.0: + resolution: {integrity: sha512-NhOds0mDx9lJu+1lBRO0xbwFo5nobA7GCk/0e5xjr6+6XugX985+0OyGX35BNrTkPAsdLcIKg02HUQJOK8D8kw==} + engines: {node: '>=18'} + is-number@7.0.0: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} @@ -1669,6 +1688,10 @@ packages: resolution: {integrity: sha512-arhlxbFRmoQHl33a0Zkle/YWlmNwoyt6QNZEIJcqNbdrsix5Lvc4HyyI3EnwxTYlZYc32EbYrQ8SzEZ7dqgg9A==} engines: {node: '>=14'} + local-pkg@1.2.1: + resolution: {integrity: sha512-++gUqRDEvcnN6Zhqrr+y/CkVEHhlrR96vZn3nZZPYzMcBUyBtTKzB9NadClFIsIVSsu+3i9tfk/erqy9kAmt7Q==} + engines: {node: '>=14'} + locate-path@6.0.0: resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} engines: {node: '>=10'} @@ -1683,6 +1706,10 @@ packages: magic-string@0.30.21: resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} + make-asynchronous@1.1.0: + resolution: {integrity: sha512-ayF7iT+44LXdxJLTrTd3TLQpFDDvPCBxXxbv+pMUSuHA5Q8zyAfwkRP6aHHwNVFBUFWtxAHqwNJxF8vMZLAbVg==} + engines: {node: '>=18'} + mathml-tag-names@4.0.0: resolution: {integrity: sha512-aa6AU2Pcx0VP/XWnh8IGL0SYSgQHDT6Ucror2j2mXeFAlN3ahaNs8EZtG1YiticMkSLj3Gt6VPFfZogt7G5iFQ==} @@ -1742,6 +1769,10 @@ packages: node-releases@2.0.37: resolution: {integrity: sha512-1h5gKZCF+pO/o3Iqt5Jp7wc9rH3eJJ0+nh/CIoiRwjRxde/hAHyLPXYN4V3CqKAbiZPSeJFSWHmJsbkicta0Eg==} + node-releases@2.0.51: + resolution: {integrity: sha512-wRNIrw4DmVLKQlbgOMdkMx27Wrpzes2hh5Jtbi2bjPd+4wJstWIqP5A+lscnqbm0xxmT5Bpg8Lec5ItEBwx6BQ==} + engines: {node: '>=18'} + normalize-path@3.0.0: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} @@ -1760,6 +1791,10 @@ packages: resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} engines: {node: '>= 0.8.0'} + p-event@6.0.1: + resolution: {integrity: sha512-Q6Bekk5wpzW5qIyUP4gdMEujObYstZl6DMMOSenwBvV0BlE5LkDwkjs5yHbZmdCEq2o4RJx4tE1vwxFVf2FG1w==} + engines: {node: '>=16.17'} + p-limit@3.1.0: resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} engines: {node: '>=10'} @@ -1768,6 +1803,10 @@ packages: resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} engines: {node: '>=10'} + p-timeout@6.1.4: + resolution: {integrity: sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg==} + engines: {node: '>=14.16'} + package-manager-detector@1.6.0: resolution: {integrity: sha512-61A5ThoTiDG/C8s8UMZwSorAGwMJ0ERVGj2OjoW5pAalsNOg15+iQiPzrLJ4jhZ1HJzmC2PIHT2oEiH3R5fzNA==} @@ -1846,10 +1885,6 @@ packages: peerDependencies: postcss: ^8.4.29 - postcss-selector-parser@7.1.1: - resolution: {integrity: sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==} - engines: {node: '>=4'} - postcss-selector-parser@7.1.4: resolution: {integrity: sha512-HeP7D2wyhkR+XaK6v4W8oRF62Dsz4flyuczALJp61GckGm42u1saSSJ/0auvcBqxs3jMRFEcPK34At/0JBKdOg==} engines: {node: '>=4'} @@ -1895,22 +1930,26 @@ packages: queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + quote-js-string@0.1.0: + resolution: {integrity: sha512-Y3NoRtprEEZQD8RfxMCfS0ZTqc4e+i18OrXEXAvpM6TfC/3y+0L5rNbZiSnbBBEkDfFzbpd8o+cE8q3/anjMGA==} + engines: {node: '>=22'} + readdirp@5.0.0: resolution: {integrity: sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==} engines: {node: '>= 20.19.0'} - regexp-tree@0.1.27: - resolution: {integrity: sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==} - hasBin: true - - regjsparser@0.13.1: - resolution: {integrity: sha512-dLsljMd9sqwRkby8zhO1gSg3PnJIBFid8f4CQj/sXx+7cKx+E7u0PKhZ+U4wmhx7EfmtvnA318oVaIkAB1lRJw==} + regjsparser@0.13.2: + resolution: {integrity: sha512-NgRBy2Nx/bE+9F27nVHnqcN5HjyLmecqsqx2PJHu3/IEtADD4WuxuXIVExD5PoSDFVrl78dOonfcOe5O+5nbzQ==} hasBin: true require-from-string@2.0.2: resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} engines: {node: '>=0.10.0'} + reserved-identifiers@1.2.0: + resolution: {integrity: sha512-yE7KUfFvaBFzGPs5H3Ops1RevfUEsDc5Iz65rOwWg4lE8HJSYtle77uul3+573457oHvBKuHYDl/xqUkKpEEdw==} + engines: {node: '>=18'} + resolve-from@4.0.0: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} @@ -1951,6 +1990,11 @@ packages: engines: {node: '>=10'} hasBin: true + semver@7.8.5: + resolution: {integrity: sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==} + engines: {node: '>=10'} + hasBin: true + shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} engines: {node: '>=8'} @@ -2094,6 +2138,10 @@ packages: engines: {node: '>=20.19.0'} hasBin: true + super-regex@1.1.0: + resolution: {integrity: sha512-WHkws2ZflZe41zj6AolvvmaTrWds/VuyeYr9iPVv/oQeaIoVxMKaushfFWpOGDT+GuBrM/sVqF8KUCYQlSSTdQ==} + engines: {node: '>=18'} + supports-color@10.2.2: resolution: {integrity: sha512-SS+jx45GF1QjgEXQx4NJZV9ImqmO2NPz5FNsIHrsDjh2YsHnawpan7SNQ1o8NuhrbHZy9AZhIoCUiCeaW/C80g==} engines: {node: '>=18'} @@ -2109,6 +2157,10 @@ packages: resolution: {integrity: sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A==} engines: {node: '>=10.0.0'} + time-span@5.1.0: + resolution: {integrity: sha512-75voc/9G4rDIJleOo4jPvN4/YC4GRZrY8yy1uU4lwrB3XEQbWve8zXoO5No4eFrGcTAMYyoY67p8jRQdtA1HbA==} + engines: {node: '>=12'} + tinybench@2.9.0: resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} @@ -2149,6 +2201,10 @@ packages: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} + type-fest@4.41.0: + resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==} + engines: {node: '>=16'} + typescript@6.0.3: resolution: {integrity: sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==} engines: {node: '>=14.17'} @@ -2326,6 +2382,12 @@ packages: peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + vue-eslint-parser@10.4.1: + resolution: {integrity: sha512-Gk6gRDj0n/fkRa3C3l0bBheoBckUq/Rs0F/TvMWIS6nzzx67amAViMe9CkNgsP2tXyQONvGiHQESHwFtZ3aYDA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + vue-tsc@3.3.8: resolution: {integrity: sha512-xXmYlVQpcwJDWyGlqbHrGVOl1h3UOsASymRibrHc+iy9j/UNnOrOn4u+fntHz4D6Cs74RtapeqVV6CzJeg+UlA==} hasBin: true @@ -2340,6 +2402,9 @@ packages: typescript: optional: true + web-worker@1.5.0: + resolution: {integrity: sha512-RiMReJrTAiA+mBjGONMnjVDP2u3p9R1vkcGz6gDIrOMT3oGuYwX2WRMYI9ipkphSuE5XKEhydbhNEJh4NY9mlw==} + webpack-virtual-modules@0.6.2: resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==} @@ -2413,8 +2478,6 @@ snapshots: '@babel/helper-string-parser@7.29.7': {} - '@babel/helper-validator-identifier@7.28.5': {} - '@babel/helper-validator-identifier@7.29.7': {} '@babel/parser@7.29.7': @@ -2438,14 +2501,14 @@ snapshots: hashery: 1.5.1 keyv: 5.6.0 - '@clack/core@1.4.1': + '@clack/core@1.4.3': dependencies: fast-wrap-ansi: 0.2.2 sisteransi: 1.0.5 - '@clack/prompts@1.5.1': + '@clack/prompts@1.7.0': dependencies: - '@clack/core': 1.4.1 + '@clack/core': 1.4.3 fast-string-width: 3.0.2 fast-wrap-ansi: 0.2.2 sisteransi: 1.0.5 @@ -2689,7 +2752,7 @@ snapshots: dependencies: '@emnapi/core': 1.11.1 '@emnapi/runtime': 1.11.1 - '@tybys/wasm-util': 0.10.1 + '@tybys/wasm-util': 0.10.3 optional: true '@napi-rs/wasm-runtime@1.1.6(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)': @@ -2713,8 +2776,6 @@ snapshots: '@oxc-project/types@0.139.0': {} - '@package-json/types@0.0.12': {} - '@parcel/watcher-android-arm64@2.5.6': optional: true @@ -2780,23 +2841,23 @@ snapshots: dependencies: quansync: 1.0.0 - '@rhapsodic/eslint-config@1.0.5(@typescript-eslint/utils@8.60.1(eslint@10.7.0(jiti@2.6.1))(typescript@6.0.3))(@vue/compiler-sfc@3.5.39)(eslint-plugin-vuejs-accessibility@2.5.0(eslint@10.7.0(jiti@2.6.1))(globals@17.7.0))(eslint@10.7.0(jiti@2.6.1))(typescript@6.0.3)(vue@3.5.39(typescript@6.0.3))': + '@rhapsodic/eslint-config@4.0.0(@typescript-eslint/utils@8.65.0(eslint@10.7.0(jiti@2.6.1))(typescript@6.0.3))(@vue/compiler-sfc@3.5.39)(eslint-plugin-vuejs-accessibility@2.5.0(eslint@10.7.0(jiti@2.6.1))(globals@17.7.0))(eslint@10.7.0(jiti@2.6.1))(typescript@6.0.3)(vue@3.5.39(typescript@6.0.3))': dependencies: '@antfu/install-pkg': 1.1.0 - '@clack/prompts': 1.5.1 + '@clack/prompts': 1.7.0 '@stylistic/eslint-plugin': 5.10.0(eslint@10.7.0(jiti@2.6.1)) - '@typescript-eslint/eslint-plugin': 8.60.1(@typescript-eslint/parser@8.60.1(eslint@10.7.0(jiti@2.6.1))(typescript@6.0.3))(eslint@10.7.0(jiti@2.6.1))(typescript@6.0.3) - '@typescript-eslint/parser': 8.60.1(eslint@10.7.0(jiti@2.6.1))(typescript@6.0.3) + '@typescript-eslint/eslint-plugin': 8.65.0(@typescript-eslint/parser@8.65.0(eslint@10.7.0(jiti@2.6.1))(typescript@6.0.3))(eslint@10.7.0(jiti@2.6.1))(typescript@6.0.3) + '@typescript-eslint/parser': 8.65.0(eslint@10.7.0(jiti@2.6.1))(typescript@6.0.3) eslint: 10.7.0(jiti@2.6.1) eslint-flat-config-utils: 3.2.0 eslint-merge-processors: 2.0.0(eslint@10.7.0(jiti@2.6.1)) - eslint-plugin-import-x: 4.16.2(@typescript-eslint/utils@8.60.1(eslint@10.7.0(jiti@2.6.1))(typescript@6.0.3))(eslint@10.7.0(jiti@2.6.1)) - eslint-plugin-unicorn: 64.0.0(eslint@10.7.0(jiti@2.6.1)) - eslint-plugin-vue: 10.9.2(@stylistic/eslint-plugin@5.10.0(eslint@10.7.0(jiti@2.6.1)))(@typescript-eslint/parser@8.60.1(eslint@10.7.0(jiti@2.6.1))(typescript@6.0.3))(eslint@10.7.0(jiti@2.6.1))(vue-eslint-parser@10.4.0(eslint@10.7.0(jiti@2.6.1))) + eslint-plugin-import-x: 4.17.1(@typescript-eslint/utils@8.65.0(eslint@10.7.0(jiti@2.6.1))(typescript@6.0.3))(eslint@10.7.0(jiti@2.6.1)) + eslint-plugin-unicorn: 71.1.0(eslint@10.7.0(jiti@2.6.1)) + eslint-plugin-vue: 10.9.2(@stylistic/eslint-plugin@5.10.0(eslint@10.7.0(jiti@2.6.1)))(@typescript-eslint/parser@8.65.0(eslint@10.7.0(jiti@2.6.1))(typescript@6.0.3))(eslint@10.7.0(jiti@2.6.1))(vue-eslint-parser@10.4.1(eslint@10.7.0(jiti@2.6.1))) eslint-processor-vue-blocks: 2.0.0(@vue/compiler-sfc@3.5.39)(eslint@10.7.0(jiti@2.6.1)) globals: 17.7.0 - local-pkg: 1.1.2 - vue-eslint-parser: 10.4.0(eslint@10.7.0(jiti@2.6.1)) + local-pkg: 1.2.1 + vue-eslint-parser: 10.4.1(eslint@10.7.0(jiti@2.6.1)) optionalDependencies: eslint-plugin-vuejs-accessibility: 2.5.0(eslint@10.7.0(jiti@2.6.1))(globals@17.7.0) vue: 3.5.39(typescript@6.0.3) @@ -2891,12 +2952,12 @@ snapshots: '@stylistic/eslint-plugin@5.10.0(eslint@10.7.0(jiti@2.6.1))': dependencies: '@eslint-community/eslint-utils': 4.9.1(eslint@10.7.0(jiti@2.6.1)) - '@typescript-eslint/types': 8.58.1 + '@typescript-eslint/types': 8.60.1 eslint: 10.7.0(jiti@2.6.1) eslint-visitor-keys: 4.2.1 espree: 10.4.0 estraverse: 5.3.0 - picomatch: 4.0.4 + picomatch: 4.0.5 '@stylistic/stylelint-config@5.0.0(stylelint@17.14.0(typescript@6.0.3))': dependencies: @@ -2909,16 +2970,11 @@ snapshots: '@csstools/css-tokenizer': 4.0.0 '@csstools/media-query-list-parser': 5.0.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) postcss: 8.5.16 - postcss-selector-parser: 7.1.1 + postcss-selector-parser: 7.1.4 postcss-value-parser: 4.2.0 style-search: 0.1.0 stylelint: 17.14.0(typescript@6.0.3) - '@tybys/wasm-util@0.10.1': - dependencies: - tslib: 2.8.1 - optional: true - '@tybys/wasm-util@0.10.3': dependencies: tslib: 2.8.1 @@ -2943,14 +2999,14 @@ snapshots: '@types/web-bluetooth@0.0.21': {} - '@typescript-eslint/eslint-plugin@8.60.1(@typescript-eslint/parser@8.60.1(eslint@10.7.0(jiti@2.6.1))(typescript@6.0.3))(eslint@10.7.0(jiti@2.6.1))(typescript@6.0.3)': + '@typescript-eslint/eslint-plugin@8.65.0(@typescript-eslint/parser@8.65.0(eslint@10.7.0(jiti@2.6.1))(typescript@6.0.3))(eslint@10.7.0(jiti@2.6.1))(typescript@6.0.3)': dependencies: '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.60.1(eslint@10.7.0(jiti@2.6.1))(typescript@6.0.3) - '@typescript-eslint/scope-manager': 8.60.1 - '@typescript-eslint/type-utils': 8.60.1(eslint@10.7.0(jiti@2.6.1))(typescript@6.0.3) - '@typescript-eslint/utils': 8.60.1(eslint@10.7.0(jiti@2.6.1))(typescript@6.0.3) - '@typescript-eslint/visitor-keys': 8.60.1 + '@typescript-eslint/parser': 8.65.0(eslint@10.7.0(jiti@2.6.1))(typescript@6.0.3) + '@typescript-eslint/scope-manager': 8.65.0 + '@typescript-eslint/type-utils': 8.65.0(eslint@10.7.0(jiti@2.6.1))(typescript@6.0.3) + '@typescript-eslint/utils': 8.65.0(eslint@10.7.0(jiti@2.6.1))(typescript@6.0.3) + '@typescript-eslint/visitor-keys': 8.65.0 eslint: 10.7.0(jiti@2.6.1) ignore: 7.0.5 natural-compare: 1.4.0 @@ -2959,41 +3015,41 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.60.1(eslint@10.7.0(jiti@2.6.1))(typescript@6.0.3)': + '@typescript-eslint/parser@8.65.0(eslint@10.7.0(jiti@2.6.1))(typescript@6.0.3)': dependencies: - '@typescript-eslint/scope-manager': 8.60.1 - '@typescript-eslint/types': 8.60.1 - '@typescript-eslint/typescript-estree': 8.60.1(typescript@6.0.3) - '@typescript-eslint/visitor-keys': 8.60.1 + '@typescript-eslint/scope-manager': 8.65.0 + '@typescript-eslint/types': 8.65.0 + '@typescript-eslint/typescript-estree': 8.65.0(typescript@6.0.3) + '@typescript-eslint/visitor-keys': 8.65.0 debug: 4.4.3 eslint: 10.7.0(jiti@2.6.1) typescript: 6.0.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.60.1(typescript@6.0.3)': + '@typescript-eslint/project-service@8.65.0(typescript@6.0.3)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.60.1(typescript@6.0.3) - '@typescript-eslint/types': 8.60.1 + '@typescript-eslint/tsconfig-utils': 8.65.0(typescript@6.0.3) + '@typescript-eslint/types': 8.65.0 debug: 4.4.3 typescript: 6.0.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@8.60.1': + '@typescript-eslint/scope-manager@8.65.0': dependencies: - '@typescript-eslint/types': 8.60.1 - '@typescript-eslint/visitor-keys': 8.60.1 + '@typescript-eslint/types': 8.65.0 + '@typescript-eslint/visitor-keys': 8.65.0 - '@typescript-eslint/tsconfig-utils@8.60.1(typescript@6.0.3)': + '@typescript-eslint/tsconfig-utils@8.65.0(typescript@6.0.3)': dependencies: typescript: 6.0.3 - '@typescript-eslint/type-utils@8.60.1(eslint@10.7.0(jiti@2.6.1))(typescript@6.0.3)': + '@typescript-eslint/type-utils@8.65.0(eslint@10.7.0(jiti@2.6.1))(typescript@6.0.3)': dependencies: - '@typescript-eslint/types': 8.60.1 - '@typescript-eslint/typescript-estree': 8.60.1(typescript@6.0.3) - '@typescript-eslint/utils': 8.60.1(eslint@10.7.0(jiti@2.6.1))(typescript@6.0.3) + '@typescript-eslint/types': 8.65.0 + '@typescript-eslint/typescript-estree': 8.65.0(typescript@6.0.3) + '@typescript-eslint/utils': 8.65.0(eslint@10.7.0(jiti@2.6.1))(typescript@6.0.3) debug: 4.4.3 eslint: 10.7.0(jiti@2.6.1) ts-api-utils: 2.5.0(typescript@6.0.3) @@ -3001,16 +3057,16 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/types@8.58.1': {} - '@typescript-eslint/types@8.60.1': {} - '@typescript-eslint/typescript-estree@8.60.1(typescript@6.0.3)': + '@typescript-eslint/types@8.65.0': {} + + '@typescript-eslint/typescript-estree@8.65.0(typescript@6.0.3)': dependencies: - '@typescript-eslint/project-service': 8.60.1(typescript@6.0.3) - '@typescript-eslint/tsconfig-utils': 8.60.1(typescript@6.0.3) - '@typescript-eslint/types': 8.60.1 - '@typescript-eslint/visitor-keys': 8.60.1 + '@typescript-eslint/project-service': 8.65.0(typescript@6.0.3) + '@typescript-eslint/tsconfig-utils': 8.65.0(typescript@6.0.3) + '@typescript-eslint/types': 8.65.0 + '@typescript-eslint/visitor-keys': 8.65.0 debug: 4.4.3 minimatch: 10.2.5 semver: 7.7.4 @@ -3020,20 +3076,20 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.60.1(eslint@10.7.0(jiti@2.6.1))(typescript@6.0.3)': + '@typescript-eslint/utils@8.65.0(eslint@10.7.0(jiti@2.6.1))(typescript@6.0.3)': dependencies: '@eslint-community/eslint-utils': 4.9.1(eslint@10.7.0(jiti@2.6.1)) - '@typescript-eslint/scope-manager': 8.60.1 - '@typescript-eslint/types': 8.60.1 - '@typescript-eslint/typescript-estree': 8.60.1(typescript@6.0.3) + '@typescript-eslint/scope-manager': 8.65.0 + '@typescript-eslint/types': 8.65.0 + '@typescript-eslint/typescript-estree': 8.65.0(typescript@6.0.3) eslint: 10.7.0(jiti@2.6.1) typescript: 6.0.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/visitor-keys@8.60.1': + '@typescript-eslint/visitor-keys@8.65.0': dependencies: - '@typescript-eslint/types': 8.60.1 + '@typescript-eslint/types': 8.65.0 eslint-visitor-keys: 5.0.1 '@unrs/resolver-binding-android-arm-eabi@1.11.1': @@ -3281,6 +3337,8 @@ snapshots: baseline-browser-mapping@2.10.18: {} + baseline-browser-mapping@2.11.5: {} + boolbase@1.0.0: {} brace-expansion@5.0.5: @@ -3299,6 +3357,14 @@ snapshots: node-releases: 2.0.37 update-browserslist-db: 1.2.3(browserslist@4.28.2) + browserslist@4.28.7: + dependencies: + baseline-browser-mapping: 2.11.5 + caniuse-lite: 1.0.30001806 + electron-to-chromium: 1.5.397 + node-releases: 2.0.51 + update-browserslist-db: 1.2.3(browserslist@4.28.7) + builtin-modules@5.1.0: {} bumpp@11.1.0: @@ -3327,6 +3393,8 @@ snapshots: caniuse-lite@1.0.30001787: {} + caniuse-lite@1.0.30001806: {} + chai@6.2.2: {} change-case@5.4.4: {} @@ -3337,10 +3405,6 @@ snapshots: ci-info@4.4.0: {} - clean-regexp@1.0.0: - dependencies: - escape-string-regexp: 1.0.5 - cli-cursor@5.0.0: dependencies: restore-cursor: 5.1.0 @@ -3385,6 +3449,8 @@ snapshots: '@simple-libs/stream-utils': 2.0.0 meow: 14.1.0 + convert-hrtime@5.0.0: {} + convert-source-map@2.0.0: {} core-js-compat@3.49.0: @@ -3432,6 +3498,8 @@ snapshots: defu@6.1.7: {} + detect-indent@7.0.2: {} + detect-libc@2.1.2: {} dom-serializer@2.0.0: @@ -3454,6 +3522,8 @@ snapshots: electron-to-chromium@1.5.335: {} + electron-to-chromium@1.5.397: {} + emoji-regex@10.6.0: {} emoji-regex@8.0.0: {} @@ -3476,8 +3546,6 @@ snapshots: escalade@3.2.0: {} - escape-string-regexp@1.0.5: {} - escape-string-regexp@4.0.0: {} eslint-flat-config-utils@3.2.0: @@ -3496,10 +3564,9 @@ snapshots: dependencies: eslint: 10.7.0(jiti@2.6.1) - eslint-plugin-import-x@4.16.2(@typescript-eslint/utils@8.60.1(eslint@10.7.0(jiti@2.6.1))(typescript@6.0.3))(eslint@10.7.0(jiti@2.6.1)): + eslint-plugin-import-x@4.17.1(@typescript-eslint/utils@8.65.0(eslint@10.7.0(jiti@2.6.1))(typescript@6.0.3))(eslint@10.7.0(jiti@2.6.1)): dependencies: - '@package-json/types': 0.0.12 - '@typescript-eslint/types': 8.58.1 + '@typescript-eslint/types': 8.60.1 comment-parser: 1.4.6 debug: 4.4.3 eslint: 10.7.0(jiti@2.6.1) @@ -3510,43 +3577,44 @@ snapshots: stable-hash-x: 0.2.0 unrs-resolver: 1.11.1 optionalDependencies: - '@typescript-eslint/utils': 8.60.1(eslint@10.7.0(jiti@2.6.1))(typescript@6.0.3) + '@typescript-eslint/utils': 8.65.0(eslint@10.7.0(jiti@2.6.1))(typescript@6.0.3) transitivePeerDependencies: - supports-color - eslint-plugin-unicorn@64.0.0(eslint@10.7.0(jiti@2.6.1)): + eslint-plugin-unicorn@71.1.0(eslint@10.7.0(jiti@2.6.1)): dependencies: - '@babel/helper-validator-identifier': 7.28.5 '@eslint-community/eslint-utils': 4.9.1(eslint@10.7.0(jiti@2.6.1)) + browserslist: 4.28.7 change-case: 5.4.4 ci-info: 4.4.0 - clean-regexp: 1.0.0 core-js-compat: 3.49.0 + detect-indent: 7.0.2 eslint: 10.7.0(jiti@2.6.1) find-up-simple: 1.0.1 globals: 17.7.0 indent-string: 5.0.0 is-builtin-module: 5.0.0 - jsesc: 3.1.0 + is-identifier: 1.1.0 pluralize: 8.0.0 - regexp-tree: 0.1.27 - regjsparser: 0.13.1 - semver: 7.7.4 + quote-js-string: 0.1.0 + regjsparser: 0.13.2 + reserved-identifiers: 1.2.0 + semver: 7.8.5 strip-indent: 4.1.1 - eslint-plugin-vue@10.9.2(@stylistic/eslint-plugin@5.10.0(eslint@10.7.0(jiti@2.6.1)))(@typescript-eslint/parser@8.60.1(eslint@10.7.0(jiti@2.6.1))(typescript@6.0.3))(eslint@10.7.0(jiti@2.6.1))(vue-eslint-parser@10.4.0(eslint@10.7.0(jiti@2.6.1))): + eslint-plugin-vue@10.9.2(@stylistic/eslint-plugin@5.10.0(eslint@10.7.0(jiti@2.6.1)))(@typescript-eslint/parser@8.65.0(eslint@10.7.0(jiti@2.6.1))(typescript@6.0.3))(eslint@10.7.0(jiti@2.6.1))(vue-eslint-parser@10.4.1(eslint@10.7.0(jiti@2.6.1))): dependencies: '@eslint-community/eslint-utils': 4.9.1(eslint@10.7.0(jiti@2.6.1)) eslint: 10.7.0(jiti@2.6.1) natural-compare: 1.4.0 nth-check: 2.1.1 - postcss-selector-parser: 7.1.1 + postcss-selector-parser: 7.1.4 semver: 7.7.4 - vue-eslint-parser: 10.4.0(eslint@10.7.0(jiti@2.6.1)) + vue-eslint-parser: 10.4.1(eslint@10.7.0(jiti@2.6.1)) xml-name-validator: 4.0.0 optionalDependencies: '@stylistic/eslint-plugin': 5.10.0(eslint@10.7.0(jiti@2.6.1)) - '@typescript-eslint/parser': 8.60.1(eslint@10.7.0(jiti@2.6.1))(typescript@6.0.3) + '@typescript-eslint/parser': 8.65.0(eslint@10.7.0(jiti@2.6.1))(typescript@6.0.3) eslint-plugin-vuejs-accessibility@2.5.0(eslint@10.7.0(jiti@2.6.1))(globals@17.7.0): dependencies: @@ -3719,6 +3787,8 @@ snapshots: fsevents@2.3.3: optional: true + function-timeout@1.0.2: {} + get-caller-file@2.0.5: {} get-east-asian-width@1.5.0: {} @@ -3781,6 +3851,10 @@ snapshots: domutils: 3.2.2 entities: 4.5.0 + identifier-regex@1.1.0: + dependencies: + reserved-identifiers: 1.2.0 + ignore@5.3.2: {} ignore@7.0.5: {} @@ -3820,6 +3894,11 @@ snapshots: dependencies: is-extglob: 2.1.1 + is-identifier@1.1.0: + dependencies: + identifier-regex: 1.1.0 + super-regex: 1.1.0 + is-number@7.0.0: {} is-path-inside@4.0.0: {} @@ -3947,6 +4026,12 @@ snapshots: pkg-types: 2.3.0 quansync: 0.2.11 + local-pkg@1.2.1: + dependencies: + mlly: 1.8.2 + pkg-types: 2.3.0 + quansync: 0.2.11 + locate-path@6.0.0: dependencies: p-locate: 5.0.0 @@ -3965,6 +4050,12 @@ snapshots: dependencies: '@jridgewell/sourcemap-codec': 1.5.5 + make-asynchronous@1.1.0: + dependencies: + p-event: 6.0.1 + type-fest: 4.41.0 + web-worker: 1.5.0 + mathml-tag-names@4.0.0: {} mdn-data@2.27.1: {} @@ -4008,6 +4099,8 @@ snapshots: node-releases@2.0.37: {} + node-releases@2.0.51: {} + normalize-path@3.0.0: {} nth-check@2.1.1: @@ -4029,6 +4122,10 @@ snapshots: type-check: 0.4.0 word-wrap: 1.2.5 + p-event@6.0.1: + dependencies: + p-timeout: 6.1.4 + p-limit@3.1.0: dependencies: yocto-queue: 0.1.0 @@ -4037,6 +4134,8 @@ snapshots: dependencies: p-limit: 3.1.0 + p-timeout@6.1.4: {} + package-manager-detector@1.6.0: {} parent-module@1.0.1: @@ -4103,11 +4202,6 @@ snapshots: dependencies: postcss: 8.5.15 - postcss-selector-parser@7.1.1: - dependencies: - cssesc: 3.0.0 - util-deprecate: 1.0.2 - postcss-selector-parser@7.1.4: dependencies: cssesc: 3.0.0 @@ -4151,16 +4245,18 @@ snapshots: queue-microtask@1.2.3: {} - readdirp@5.0.0: {} + quote-js-string@0.1.0: {} - regexp-tree@0.1.27: {} + readdirp@5.0.0: {} - regjsparser@0.13.1: + regjsparser@0.13.2: dependencies: jsesc: 3.1.0 require-from-string@2.0.2: {} + reserved-identifiers@1.2.0: {} + resolve-from@4.0.0: {} resolve-from@5.0.0: {} @@ -4211,6 +4307,8 @@ snapshots: semver@7.7.4: {} + semver@7.8.5: {} + shebang-command@2.0.0: dependencies: shebang-regex: 3.0.0 @@ -4334,7 +4432,7 @@ snapshots: known-css-properties: 0.37.0 postcss-media-query-parser: 0.2.3 postcss-resolve-nested-selector: 0.1.6 - postcss-selector-parser: 7.1.1 + postcss-selector-parser: 7.1.4 postcss-value-parser: 4.2.0 stylelint: 17.14.0(typescript@6.0.3) @@ -4379,6 +4477,12 @@ snapshots: - supports-color - typescript + super-regex@1.1.0: + dependencies: + function-timeout: 1.0.2 + make-asynchronous: 1.1.0 + time-span: 5.1.0 + supports-color@10.2.2: {} supports-hyperlinks@4.4.0: @@ -4396,6 +4500,10 @@ snapshots: string-width: 4.2.3 strip-ansi: 6.0.1 + time-span@5.1.0: + dependencies: + convert-hrtime: 5.0.0 + tinybench@2.9.0: {} tinyexec@1.2.2: {} @@ -4429,6 +4537,8 @@ snapshots: dependencies: prelude-ls: 1.2.1 + type-fest@4.41.0: {} + typescript@6.0.3: {} ufo@1.6.3: {} @@ -4505,6 +4615,12 @@ snapshots: escalade: 3.2.0 picocolors: 1.1.1 + update-browserslist-db@1.2.3(browserslist@4.28.7): + dependencies: + browserslist: 4.28.7 + escalade: 3.2.0 + picocolors: 1.1.1 + uri-js@4.4.1: dependencies: punycode: 2.3.1 @@ -4580,6 +4696,18 @@ snapshots: transitivePeerDependencies: - supports-color + vue-eslint-parser@10.4.1(eslint@10.7.0(jiti@2.6.1)): + dependencies: + debug: 4.4.3 + eslint: 10.7.0(jiti@2.6.1) + eslint-scope: 9.1.2 + eslint-visitor-keys: 5.0.1 + espree: 11.2.0 + esquery: 1.7.0 + semver: 7.7.4 + transitivePeerDependencies: + - supports-color + vue-tsc@3.3.8(typescript@6.0.3): dependencies: '@volar/typescript': 2.4.28 @@ -4596,6 +4724,8 @@ snapshots: optionalDependencies: typescript: 6.0.3 + web-worker@1.5.0: {} + webpack-virtual-modules@0.6.2: {} which@1.3.1: From eff2b198d1e487f3257070831f7f593b5e8f1efe Mon Sep 17 00:00:00 2001 From: TrenLok Date: Wed, 29 Jul 2026 15:22:31 +0300 Subject: [PATCH 2/2] chore: format code --- src/components/carousel/carousel.vue | 69 ++++++++++++++----------- src/components/carousel/item/item.vue | 5 +- src/components/vuewer.vue | 36 ++++++++----- src/composables/mouse-click-close.ts | 10 ++-- src/composables/pan.ts | 20 ++++--- src/composables/scheduled-transition.ts | 10 ++-- src/composables/swipe-navigation.ts | 13 +++-- src/composables/touch-swipe-dismiss.ts | 57 ++++++++++---------- src/composables/vuewer.ts | 14 +++-- src/composables/wheel-scroll-tuning.ts | 4 +- src/composables/wheel-zoom-tuning.ts | 4 +- src/composables/zoom.ts | 14 +++-- test/active-pointer.test.ts | 6 ++- test/pan-offset-scale-change.test.ts | 6 ++- test/pan-touch-swipe.test.ts | 6 ++- test/pointer-lifecycle.test.ts | 6 ++- test/touch-swipe-dismiss.test.ts | 6 ++- test/wheel-delta.test.ts | 6 ++- test/wheel-scroll-tuning.test.ts | 6 ++- test/wheel-zoom-tuning.test.ts | 18 +++++-- 20 files changed, 191 insertions(+), 125 deletions(-) diff --git a/src/components/carousel/carousel.vue b/src/components/carousel/carousel.vue index 0e91650..674e2b1 100644 --- a/src/components/carousel/carousel.vue +++ b/src/components/carousel/carousel.vue @@ -22,7 +22,12 @@ diff --git a/src/components/carousel/item/item.vue b/src/components/carousel/item/item.vue index b483dc1..ba21066 100644 --- a/src/components/carousel/item/item.vue +++ b/src/components/carousel/item/item.vue @@ -11,7 +11,10 @@ diff --git a/src/composables/mouse-click-close.ts b/src/composables/mouse-click-close.ts index 3b81a49..9d65079 100644 --- a/src/composables/mouse-click-close.ts +++ b/src/composables/mouse-click-close.ts @@ -11,11 +11,11 @@ export function useMouseClickClose(options: UseMouseClickCloseOptions = {}) { const closePointerId = ref(); const closeStartClientX = ref(0); const closeStartClientY = ref(0); - const didClosePointerMove = ref(false); + const closePointerMoved = ref(false); function resetClosePointerState(): void { closePointerId.value = undefined; - didClosePointerMove.value = false; + closePointerMoved.value = false; } function isPointerTargetInsideContent(target: EventTarget | null): boolean { @@ -63,18 +63,18 @@ export function useMouseClickClose(options: UseMouseClickCloseOptions = {}) { } function onViewerPointerMove(event: PointerEvent): void { - if (closePointerId.value !== event.pointerId || didClosePointerMove.value) { + if (closePointerId.value !== event.pointerId || closePointerMoved.value) { return; } if (hasClosePointerMoved(event)) { - didClosePointerMove.value = true; + closePointerMoved.value = true; } } function onViewerPointerUp(event: PointerEvent): void { const isSamePointer = closePointerId.value === event.pointerId; - const hasPointerStayedStill = !didClosePointerMove.value && !hasClosePointerMoved(event); + const hasPointerStayedStill = !closePointerMoved.value && !hasClosePointerMoved(event); const shouldClose = ( isSamePointer && hasPointerStayedStill diff --git a/src/composables/pan.ts b/src/composables/pan.ts index 3120b61..cf44bcd 100644 --- a/src/composables/pan.ts +++ b/src/composables/pan.ts @@ -1,6 +1,10 @@ import type { Ref } from 'vue'; import { - computed, onBeforeUnmount, onMounted, ref, watch, + computed, + onBeforeUnmount, + onMounted, + ref, + watch, } from 'vue'; import { clamp } from '../utils/math'; @@ -73,8 +77,8 @@ export function useVuewerPan({ const panPointer = useActivePointer(); const touchPointerLifecycle = useTouchPointerLifecycle(); - const isImagePannable = computed(() => maxPanOffsetX.value > 0 || maxPanOffsetY.value > 0); - const isImageDragging = computed(() => panPointer.getActivePointerId() !== undefined); + const imagePannable = computed(() => maxPanOffsetX.value > 0 || maxPanOffsetY.value > 0); + const imageDragging = computed(() => panPointer.getActivePointerId() !== undefined); const imageTransform = computed(() => `translate3d(${imageOffsetX.value}px, ${imageOffsetY.value}px, 0) scale(${imageScale.value})`); function resetImagePanPosition(): void { @@ -211,7 +215,7 @@ export function useVuewerPan({ } function canStartPanFromPointer(event: PointerEvent): boolean { - if (!isImagePannable.value) { + if (!imagePannable.value) { return false; } @@ -298,20 +302,20 @@ export function useVuewerPan({ }); onMounted(() => { - globalThis.addEventListener('resize', onResize); + addEventListener('resize', onResize); recalculatePanBounds(); }); onBeforeUnmount(() => { clearCurrentImagePanState(); - globalThis.removeEventListener('resize', onResize); + removeEventListener('resize', onResize); }); return { onScaleChange, imageTransform, - isImageDragging, - isImagePannable, + isImageDragging: imageDragging, + isImagePannable: imagePannable, onImageLoad, onViewerPointerDown, onViewerPointerMove, diff --git a/src/composables/scheduled-transition.ts b/src/composables/scheduled-transition.ts index f3e982b..386edbc 100644 --- a/src/composables/scheduled-transition.ts +++ b/src/composables/scheduled-transition.ts @@ -20,19 +20,19 @@ export interface UseScheduledTransitionOptions { */ export function useScheduledTransition(options: UseScheduledTransitionOptions) { let transitionFrameId: number | undefined; - let transitionTimeoutId: ReturnType | undefined; + let transitionTimeoutId: ReturnType | undefined; /** * Cancels any pending frame or completion callback for the active transition. */ function cancelTransition(): void { if (transitionFrameId !== undefined) { - globalThis.cancelAnimationFrame(transitionFrameId); + cancelAnimationFrame(transitionFrameId); transitionFrameId = undefined; } if (transitionTimeoutId !== undefined) { - globalThis.clearTimeout(transitionTimeoutId); + clearTimeout(transitionTimeoutId); transitionTimeoutId = undefined; } } @@ -46,11 +46,11 @@ export function useScheduledTransition(options: UseScheduledTransitionOptions) { function runTransition(config: RunScheduledTransitionOptions): void { cancelTransition(); - transitionFrameId = globalThis.requestAnimationFrame(() => { + transitionFrameId = requestAnimationFrame(() => { transitionFrameId = undefined; config.onTransitionFrame(); - transitionTimeoutId = globalThis.setTimeout(() => { + transitionTimeoutId = setTimeout(() => { transitionTimeoutId = undefined; config.onComplete?.(); }, options.durationMs); diff --git a/src/composables/swipe-navigation.ts b/src/composables/swipe-navigation.ts index e2fc3a2..2dc3d03 100644 --- a/src/composables/swipe-navigation.ts +++ b/src/composables/swipe-navigation.ts @@ -1,5 +1,8 @@ import type { Ref } from 'vue'; -import { onBeforeUnmount, ref } from 'vue'; +import { + onBeforeUnmount, + ref, +} from 'vue'; import { useActivePointer } from './active-pointer'; import { useTouchPointerLifecycle } from './touch-pointer-lifecycle'; @@ -125,16 +128,16 @@ export function useSwipeNavigation({ return; } - const deltaX = event.clientX - swipeStartClientX.value; - const deltaY = event.clientY - swipeStartClientY.value; - const swipeDirection = getTouchSwipeDirection({ deltaX, deltaY }); - // Re-check at gesture end so we do not navigate if state switched to pannable. if (!isSwipeEnabled.value) { stopSwipeTracking(); return; } + const deltaX = event.clientX - swipeStartClientX.value; + const deltaY = event.clientY - swipeStartClientY.value; + const swipeDirection = getTouchSwipeDirection({ deltaX, deltaY }); + if (swipeDirection === 'left') { onSwipeLeft?.(); } else if (swipeDirection === 'right') { diff --git a/src/composables/touch-swipe-dismiss.ts b/src/composables/touch-swipe-dismiss.ts index 4b72c3d..11e61f9 100644 --- a/src/composables/touch-swipe-dismiss.ts +++ b/src/composables/touch-swipe-dismiss.ts @@ -1,6 +1,9 @@ import type { Ref } from 'vue'; import { - computed, onBeforeUnmount, ref, watch, + computed, + onBeforeUnmount, + ref, + watch, } from 'vue'; import { clamp } from '../utils/math'; @@ -64,11 +67,7 @@ export function isVerticalDismissGesture(config: DismissGestureInput): boolean { } const hasVerticalDominance = absDeltaX === 0 || (absDeltaY / absDeltaX) >= config.dominanceRatio; - if (hasVerticalDominance) { - return true; - } - - return false; + return hasVerticalDominance; } export function getDismissProgress(config: DismissProgressInput): number { @@ -104,9 +103,9 @@ export function useTouchSwipeDismiss(options: UseTouchSwipeDismissOptions) { const startClientX = ref(0); const startClientY = ref(0); const offsetY = ref(0); - const isVerticalGesture = ref(false); - const isDismissDragging = ref(false); - const isAnimating = ref(false); + const verticalGesture = ref(false); + const dismissDragging = ref(false); + const animating = ref(false); const pointer = useActivePointer(); const touchPointerLifecycle = useTouchPointerLifecycle(); @@ -141,15 +140,15 @@ export function useTouchSwipeDismiss(options: UseTouchSwipeDismissOptions) { } function runTransition(nextOffsetY: number, onComplete?: () => void): void { - isDismissDragging.value = false; - isAnimating.value = true; + dismissDragging.value = false; + animating.value = true; transition.runTransition({ onTransitionFrame: () => { offsetY.value = nextOffsetY; }, onComplete: () => { - isAnimating.value = false; + animating.value = false; onComplete?.(); }, }); @@ -157,7 +156,7 @@ export function useTouchSwipeDismiss(options: UseTouchSwipeDismissOptions) { function releasePointer(): void { pointer.deactivatePointer(options.viewerRef.value); - isVerticalGesture.value = false; + verticalGesture.value = false; } function resetVisualState(): void { @@ -168,17 +167,13 @@ export function useTouchSwipeDismiss(options: UseTouchSwipeDismissOptions) { transition.cancelTransition(); releasePointer(); touchPointerLifecycle.clearPointers(); - isDismissDragging.value = false; - isAnimating.value = false; + dismissDragging.value = false; + animating.value = false; resetVisualState(); } function canStartSwipe(event: PointerEvent): boolean { - if (!options.isEnabled.value || isAnimating.value || event.pointerType !== 'touch') { - return false; - } - - return true; + return options.isEnabled.value && !animating.value && event.pointerType === 'touch'; } function onViewerPointerDown(event: PointerEvent): void { @@ -193,10 +188,10 @@ export function useTouchSwipeDismiss(options: UseTouchSwipeDismissOptions) { } transition.cancelTransition(); - isAnimating.value = false; - isDismissDragging.value = false; + animating.value = false; + dismissDragging.value = false; pointer.activatePointer(options.viewerRef.value, event.pointerId); - isVerticalGesture.value = false; + verticalGesture.value = false; startClientX.value = event.clientX; startClientY.value = event.clientY; resetVisualState(); @@ -220,8 +215,8 @@ export function useTouchSwipeDismiss(options: UseTouchSwipeDismissOptions) { const deltaX = event.clientX - startClientX.value; const deltaY = event.clientY - startClientY.value; - if (!isVerticalGesture.value) { - isVerticalGesture.value = isVerticalDismissGesture({ + if (!verticalGesture.value) { + verticalGesture.value = isVerticalDismissGesture({ deltaX, deltaY, thresholdPx: dismissDefaults.lockThresholdPx, @@ -229,11 +224,11 @@ export function useTouchSwipeDismiss(options: UseTouchSwipeDismissOptions) { }); } - if (!isVerticalGesture.value) { + if (!verticalGesture.value) { return; } - isDismissDragging.value = true; + dismissDragging.value = true; offsetY.value = deltaY; event.preventDefault(); } @@ -246,7 +241,7 @@ export function useTouchSwipeDismiss(options: UseTouchSwipeDismissOptions) { } const nextOffsetY = event.clientY - startClientY.value; - const wasVerticalGesture = isVerticalGesture.value; + const wasVerticalGesture = verticalGesture.value; const shouldDismiss = ( wasVerticalGesture && options.isEnabled.value @@ -275,7 +270,7 @@ export function useTouchSwipeDismiss(options: UseTouchSwipeDismissOptions) { return; } - isDismissDragging.value = false; + dismissDragging.value = false; resetVisualState(); } @@ -295,7 +290,7 @@ export function useTouchSwipeDismiss(options: UseTouchSwipeDismissOptions) { return; } - isDismissDragging.value = false; + dismissDragging.value = false; resetVisualState(); } @@ -311,7 +306,7 @@ export function useTouchSwipeDismiss(options: UseTouchSwipeDismissOptions) { return { viewerStyle, - isDismissDragging, + isDismissDragging: dismissDragging, onViewerPointerDown, onViewerPointerMove, onViewerPointerUp, diff --git a/src/composables/vuewer.ts b/src/composables/vuewer.ts index 637e847..b9cc40d 100644 --- a/src/composables/vuewer.ts +++ b/src/composables/vuewer.ts @@ -1,6 +1,4 @@ -import type { - createApp as createAppType, -} from 'vue'; +import type { createApp as createAppType } from 'vue'; import { ref, defineComponent, @@ -22,7 +20,7 @@ export interface UseVuewerOptions { export function useVuewer(options: UseVuewerOptions) { let currentVuewerApp: ReturnType | null = null; let currentVuewerContainer: HTMLDivElement | null = null; - const isVuewerMounted = ref(false); + const vuewerMounted = ref(false); function cleanup() { if (currentVuewerApp) { @@ -33,7 +31,7 @@ export function useVuewer(options: UseVuewerOptions) { currentVuewerContainer.remove(); currentVuewerContainer = null; } - isVuewerMounted.value = false; + vuewerMounted.value = false; } const VuewerWrapper = defineComponent({ @@ -57,7 +55,7 @@ export function useVuewer(options: UseVuewerOptions) { }); function mountVuewer() { - if (isVuewerMounted.value) { + if (vuewerMounted.value) { console.warn('Vuewer is already opened.'); return; } @@ -71,7 +69,7 @@ export function useVuewer(options: UseVuewerOptions) { try { currentVuewerApp = createApp(VuewerWrapper); currentVuewerApp.mount(currentVuewerContainer); - isVuewerMounted.value = true; + vuewerMounted.value = true; } catch (error) { console.error('Failed to mount vuewer:', error); cleanup(); @@ -85,6 +83,6 @@ export function useVuewer(options: UseVuewerOptions) { return { open: mountVuewer, close: unmountVuewer, - isOpened: computed(() => isVuewerMounted.value), + isOpened: computed(() => vuewerMounted.value), }; } diff --git a/src/composables/wheel-scroll-tuning.ts b/src/composables/wheel-scroll-tuning.ts index 5afcd01..080a413 100644 --- a/src/composables/wheel-scroll-tuning.ts +++ b/src/composables/wheel-scroll-tuning.ts @@ -94,7 +94,7 @@ export function useWheelScrollTuning({ return threshold; } - function handleWheelScroll(event: WheelEvent): boolean { + function didHandleWheelScroll(event: WheelEvent): boolean { const navigationDelta = getNormalizedWheelDominantAxisDelta(event); const scrollDirection = Math.sign(navigationDelta); if (!scrollDirection) { @@ -142,7 +142,7 @@ export function useWheelScrollTuning({ } return { - handleWheelScroll, + handleWheelScroll: didHandleWheelScroll, resetWheelScrollState, }; } diff --git a/src/composables/wheel-zoom-tuning.ts b/src/composables/wheel-zoom-tuning.ts index 9746df4..c423ff9 100644 --- a/src/composables/wheel-zoom-tuning.ts +++ b/src/composables/wheel-zoom-tuning.ts @@ -39,7 +39,7 @@ export function useWheelZoomTuning({ wheelScaleFactor = getDefaultWheelScaleFactor(), wheelMaxStep = getDefaultWheelMaxStep(), }: UseWheelZoomTuningOptions) { - function handleWheelZoom(event: WheelEvent): boolean { + function didHandleWheelZoom(event: WheelEvent): boolean { const scaleDelta = getWheelScaleDelta(event); if (!scaleDelta) { return false; @@ -60,6 +60,6 @@ export function useWheelZoomTuning({ } return { - handleWheelZoom, + handleWheelZoom: didHandleWheelZoom, }; } diff --git a/src/composables/zoom.ts b/src/composables/zoom.ts index 89be667..67f2100 100644 --- a/src/composables/zoom.ts +++ b/src/composables/zoom.ts @@ -1,5 +1,9 @@ import type { Ref } from 'vue'; -import { onBeforeUnmount, onMounted, ref } from 'vue'; +import { + onBeforeUnmount, + onMounted, + ref, +} from 'vue'; import { clamp } from '../utils/math'; export interface ZoomFocalPoint { @@ -169,10 +173,12 @@ export function useVuewerZoom({ } function onTouchEnd(event: TouchEvent): void { - if (event.touches.length < 2) { - pinchStartDistance.value = null; - pinchStartScale.value = imageScale.value; + if (event.touches.length >= 2) { + return; } + + pinchStartDistance.value = null; + pinchStartScale.value = imageScale.value; } function onTouchCancel(): void { diff --git a/test/active-pointer.test.ts b/test/active-pointer.test.ts index 70ba9f3..7713c79 100644 --- a/test/active-pointer.test.ts +++ b/test/active-pointer.test.ts @@ -1,4 +1,8 @@ -import { describe, expect, it } from 'vitest'; +import { + describe, + expect, + it, +} from 'vitest'; import { useActivePointer } from '../src/composables/active-pointer'; diff --git a/test/pan-offset-scale-change.test.ts b/test/pan-offset-scale-change.test.ts index 6c2ff6b..3d50c7a 100644 --- a/test/pan-offset-scale-change.test.ts +++ b/test/pan-offset-scale-change.test.ts @@ -1,4 +1,8 @@ -import { describe, expect, it } from 'vitest'; +import { + describe, + expect, + it, +} from 'vitest'; import { getPanOffsetAtScaleChange } from '../src/composables/pan'; describe('getPanOffsetAtScaleChange', () => { diff --git a/test/pan-touch-swipe.test.ts b/test/pan-touch-swipe.test.ts index f3a39ae..cc743a9 100644 --- a/test/pan-touch-swipe.test.ts +++ b/test/pan-touch-swipe.test.ts @@ -1,4 +1,8 @@ -import { describe, expect, it } from 'vitest'; +import { + describe, + expect, + it, +} from 'vitest'; import { getTouchSwipeDirection } from '../src/composables/swipe-navigation'; describe('touch swipe direction detection', () => { diff --git a/test/pointer-lifecycle.test.ts b/test/pointer-lifecycle.test.ts index 0103b02..c01d5cf 100644 --- a/test/pointer-lifecycle.test.ts +++ b/test/pointer-lifecycle.test.ts @@ -1,4 +1,8 @@ -import { describe, expect, it } from 'vitest'; +import { + describe, + expect, + it, +} from 'vitest'; import { useTouchPointerLifecycle } from '../src/composables/touch-pointer-lifecycle'; describe('pointer lifecycle touch bookkeeping', () => { diff --git a/test/touch-swipe-dismiss.test.ts b/test/touch-swipe-dismiss.test.ts index d190903..c5f870c 100644 --- a/test/touch-swipe-dismiss.test.ts +++ b/test/touch-swipe-dismiss.test.ts @@ -1,4 +1,8 @@ -import { describe, expect, it } from 'vitest'; +import { + describe, + expect, + it, +} from 'vitest'; import { getDismissProgress, diff --git a/test/wheel-delta.test.ts b/test/wheel-delta.test.ts index 192554c..854c6fa 100644 --- a/test/wheel-delta.test.ts +++ b/test/wheel-delta.test.ts @@ -1,4 +1,8 @@ -import { describe, expect, it } from 'vitest'; +import { + describe, + expect, + it, +} from 'vitest'; import { getNormalizedWheelDominantAxisDelta, isPixelModeWheelEvent, diff --git a/test/wheel-scroll-tuning.test.ts b/test/wheel-scroll-tuning.test.ts index add1e90..335f772 100644 --- a/test/wheel-scroll-tuning.test.ts +++ b/test/wheel-scroll-tuning.test.ts @@ -1,5 +1,9 @@ import { - afterEach, describe, expect, it, vi, + afterEach, + describe, + expect, + it, + vi, } from 'vitest'; import { useWheelScrollTuning } from '../src/composables/wheel-scroll-tuning'; diff --git a/test/wheel-zoom-tuning.test.ts b/test/wheel-zoom-tuning.test.ts index b12156d..44c92db 100644 --- a/test/wheel-zoom-tuning.test.ts +++ b/test/wheel-zoom-tuning.test.ts @@ -1,4 +1,8 @@ -import { describe, expect, it } from 'vitest'; +import { + describe, + expect, + it, +} from 'vitest'; import { useWheelZoomTuning } from '../src/composables/wheel-zoom-tuning'; interface WheelEventInput { @@ -40,7 +44,9 @@ describe('useWheelZoomTuning', () => { const deltas: number[] = []; const { handleWheelZoom } = useWheelZoomTuning({ - onScale: (delta) => deltas.push(delta), + onScale: (delta) => { + deltas.push(delta); + }, wheelScaleFactor: 0.01, wheelMaxStep: 1, }); @@ -58,7 +64,9 @@ describe('useWheelZoomTuning', () => { const deltas: number[] = []; const { handleWheelZoom } = useWheelZoomTuning({ - onScale: (delta) => deltas.push(delta), + onScale: (delta) => { + deltas.push(delta); + }, wheelScaleFactor: 0.01, wheelMaxStep: 1, }); @@ -75,7 +83,9 @@ describe('useWheelZoomTuning', () => { const deltas: number[] = []; const { handleWheelZoom } = useWheelZoomTuning({ - onScale: (delta) => deltas.push(delta), + onScale: (delta) => { + deltas.push(delta); + }, wheelScaleFactor: 0.01, wheelMaxStep: 0.2, });