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:
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,
});