{"_id":"vue-sliding-puzzle","_rev":"42-3532a708e973d2ca5fb3d023ac0ee32a","name":"vue-sliding-puzzle","dist-tags":{"latest":"26.4.1-5"},"versions":{"1.1.10":{"name":"vue-sliding-puzzle","version":"1.1.10","keywords":["vue","puzzle","vcode"],"author":{"name":"L"},"license":"ISC","_id":"vue-sliding-puzzle@1.1.10","maintainers":[{"name":"yswenli","email":"yswenli@outlook.com"}],"homepage":"https://github.com/yswenli/vue-sliding-puzzle#readme","bugs":{"url":"https://github.com/yswenli/vue-sliding-puzzle/issues"},"dist":{"shasum":"b8bbbcb18d23c0e28924ef16e6896d2c2458e33e","tarball":"https://registry.npmjs.org/vue-sliding-puzzle/-/vue-sliding-puzzle-1.1.10.tgz","fileCount":3,"integrity":"sha512-/iOvcN0NYMNbnulgMUIVMUU142E9LIwO9eRJZhzd/MqFKWvJFHJZeH/PpRcv62uxOarVJdG2m3ke/hee8jLjzg==","signatures":[{"sig":"MEUCIQC8j5/Xn1UYuzHhgEC8JfSbkXkkAfGWIhg5TCNZ6JihPwIgakxR5Z5lTh3772cpexii94pLGZWRsn88vj6DwC9ly4M=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":18741},"main":"dist/main.js","private":false,"scripts":{"dev":"webpack-dev-server --config webpack.dev.config.js --port 8081","test":"echo \"Error: no test specified\" && exit 1","build":"webpack --config webpack.production.config.js"},"_npmUser":{"name":"yswenli","email":"yswenli@outlook.com"},"repository":{"url":"git+https://github.com/yswenli/vue-sliding-puzzle.git","type":"git"},"_npmVersion":"10.8.2","description":"vue 滑动拼图验证码","directories":{},"_nodeVersion":"20.18.0","browserslist":["iOS >= 8","Android > 4.1","last 1 versions","> 1%","not dead"],"dependencies":{"vue":"^2.6.14","webpack-cli":"^4.9.0","webpack-dev-server":"^4.3.1"},"_hasShrinkwrap":false,"devDependencies":{"less":"^4.1.2","webpack":"^5.58.1","css-loader":"^6.4.0","url-loader":"^4.1.1","vue-loader":"^15.9.8","@babel/core":"^7.15.8","file-loader":"^6.2.0","less-loader":"^10.1.0","autoprefixer":"^10.3.7","babel-loader":"^8.2.2","style-loader":"^3.3.0","@babel/runtime":"^7.15.4","postcss-loader":"^6.1.1","@babel/polyfill":"^7.12.1","babel-plugin-import":"^1.13.3","babel-preset-vue-app":"^2.0.0","clean-webpack-plugin":"^4.0.0","@vue/babel-preset-jsx":"^1.2.4","vue-template-compiler":"^2.6.14","uglifyjs-webpack-plugin":"^2.2.0","@babel/plugin-transform-runtime":"^7.15.8","@babel/plugin-syntax-dynamic-import":"^7.8.3","@vue/babel-helper-vue-jsx-merge-props":"^1.2.1","@babel/plugin-proposal-class-properties":"^7.14.5","babel-plugin-transform-decorators-legacy":"^1.3.5","@babel/plugin-proposal-object-rest-spread":"^7.15.6"},"_npmOperationalInternal":{"tmp":"tmp/vue-sliding-puzzle_1.1.10_1774852587945_0.6927605863931208","host":"s3://npm-registry-packages-npm-production"}},"1.1.11":{"name":"vue-sliding-puzzle","version":"1.1.11","keywords":["vue","puzzle","vcode"],"author":{"name":"L"},"license":"ISC","_id":"vue-sliding-puzzle@1.1.11","maintainers":[{"name":"yswenli","email":"yswenli@outlook.com"}],"homepage":"https://github.com/yswenli/vue-sliding-puzzle#readme","bugs":{"url":"https://github.com/yswenli/vue-sliding-puzzle/issues"},"dist":{"shasum":"3a093ac894cba7dfc6471cc2c71b3adf10efdd2e","tarball":"https://registry.npmjs.org/vue-sliding-puzzle/-/vue-sliding-puzzle-1.1.11.tgz","fileCount":3,"integrity":"sha512-bAiuUQvErGapW8FVwkTBkDAMKaRiq0ip4VLzS8PN6nedTo8IhgMezFn8aph4EoH/kdilgWLRA7HbkKuDQd+c7Q==","signatures":[{"sig":"MEUCIQDBoGu3UfPc2Cka2zTUDbGD6XWrwl1n5t/boeuXmqmk9AIgaocHGq8y7ImKfo0sTTeVlqcURb4t+Uzlo0b93jOKnMI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":18741},"main":"dist/main.js","private":false,"scripts":{"dev":"webpack-dev-server --config webpack.dev.config.js --port 8081","test":"echo \"Error: no test specified\" && exit 1","build":"webpack --config webpack.production.config.js"},"_npmUser":{"name":"yswenli","email":"yswenli@outlook.com"},"repository":{"url":"git+https://github.com/yswenli/vue-sliding-puzzle.git","type":"git"},"_npmVersion":"10.8.2","description":"vue 滑动拼图验证码","directories":{},"_nodeVersion":"20.18.0","browserslist":["iOS >= 8","Android > 4.1","last 1 versions","> 1%","not dead"],"dependencies":{"vue":"^2.6.14","webpack-cli":"^4.9.0","webpack-dev-server":"^4.3.1"},"_hasShrinkwrap":false,"devDependencies":{"less":"^4.1.2","webpack":"^5.58.1","css-loader":"^6.4.0","url-loader":"^4.1.1","vue-loader":"^15.9.8","@babel/core":"^7.15.8","file-loader":"^6.2.0","less-loader":"^10.1.0","autoprefixer":"^10.3.7","babel-loader":"^8.2.2","style-loader":"^3.3.0","@babel/runtime":"^7.15.4","postcss-loader":"^6.1.1","@babel/polyfill":"^7.12.1","babel-plugin-import":"^1.13.3","babel-preset-vue-app":"^2.0.0","clean-webpack-plugin":"^4.0.0","@vue/babel-preset-jsx":"^1.2.4","vue-template-compiler":"^2.6.14","uglifyjs-webpack-plugin":"^2.2.0","@babel/plugin-transform-runtime":"^7.15.8","@babel/plugin-syntax-dynamic-import":"^7.8.3","@vue/babel-helper-vue-jsx-merge-props":"^1.2.1","@babel/plugin-proposal-class-properties":"^7.14.5","babel-plugin-transform-decorators-legacy":"^1.3.5","@babel/plugin-proposal-object-rest-spread":"^7.15.6"},"_npmOperationalInternal":{"tmp":"tmp/vue-sliding-puzzle_1.1.11_1774853371916_0.7140375107926415","host":"s3://npm-registry-packages-npm-production"}},"1.1.13":{"name":"vue-sliding-puzzle","version":"1.1.13","keywords":["vue","puzzle","vcode"],"author":{"name":"L"},"license":"ISC","_id":"vue-sliding-puzzle@1.1.13","maintainers":[{"name":"yswenli","email":"yswenli@outlook.com"}],"homepage":"https://github.com/yswenli/vue-sliding-puzzle#readme","bugs":{"url":"https://github.com/yswenli/vue-sliding-puzzle/issues"},"dist":{"shasum":"2517b333ab6fedb904e88d79bce5e8ee47db400c","tarball":"https://registry.npmjs.org/vue-sliding-puzzle/-/vue-sliding-puzzle-1.1.13.tgz","fileCount":4,"integrity":"sha512-bFH5pS33G1PV0laA0XbQoSl0ZG+nfSwNkJDlOZanwVBJVBxa8WjXCvcEziBDp+aVpTrXsS2d6VcNrd0AOKI7Dw==","signatures":[{"sig":"MEYCIQDuwvXJbCTv3PJK9VrE807/WSLMxQq54lWmrbpHC5av2QIhAK2vRgcqO1tYp7qngRCXr8AvvUxXRCWAKjonj7Zv87a0","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":43647},"main":"dist/main.js","module":"dist/main.js","exports":{".":"./dist/main.js"},"private":false,"scripts":{"dev":"webpack-dev-server --config webpack.dev.config.js --port 8081","test":"echo \"Error: no test specified\" && exit 1","build":"webpack --config webpack.production.config.js"},"_npmUser":{"name":"yswenli","email":"yswenli@outlook.com"},"repository":{"url":"git+https://github.com/yswenli/vue-sliding-puzzle.git","type":"git"},"_npmVersion":"10.8.2","description":"vue 滑动拼图验证码","directories":{},"_nodeVersion":"20.18.0","_hasShrinkwrap":false,"devDependencies":{"less":"^4.6.4","webpack":"^5.105.4","css-loader":"^7.1.4","url-loader":"^4.1.1","vue-loader":"^17.4.2","@babel/core":"^7.29.0","less-loader":"^12.3.2","webpack-cli":"^7.0.2","autoprefixer":"^10.4.20","babel-loader":"^10.1.1","style-loader":"^4.0.0","@babel/runtime":"^7.15.4","postcss-loader":"^8.2.1","@babel/preset-env":"^7.29.2","@vue/compiler-sfc":"^3.2.47","clean-webpack-plugin":"^4.0.0","@babel/plugin-transform-runtime":"^7.15.8"},"peerDependencies":{"vue":"^3.2.0"},"_npmOperationalInternal":{"tmp":"tmp/vue-sliding-puzzle_1.1.13_1774859430205_0.6443293301542594","host":"s3://npm-registry-packages-npm-production"}},"2.2.66":{"name":"vue-sliding-puzzle","version":"2.2.66","_id":"vue-sliding-puzzle@2.2.66","maintainers":[{"name":"yswenli","email":"yswenli@outlook.com"}],"dist":{"shasum":"e1f9b444e9359411d7a72217f912bd54df436b8e","tarball":"https://registry.npmjs.org/vue-sliding-puzzle/-/vue-sliding-puzzle-2.2.66.tgz","fileCount":6,"integrity":"sha512-6on8hZ4vsP4hDTMHFHfVg5XQknfHDz+Zq1TceZ0b02F4+yCdIfPh0VvDOy6r2D4SjHpPAOXoIlg2leElw6ZwiQ==","signatures":[{"sig":"MEYCIQDdfyBMixFNCVScm0t26JhsjZWRqHIZ2h0zSfStmMGGfAIhAME7td5f9qcVbOBdUohlZQQzR5vH8eDS4mZafeTsKk57","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":235922},"main":"./dist/vue-sliding-puzzle.umd.js","module":"./dist/vue-sliding-puzzle.es.js","exports":{".":{"import":"./dist/vue-sliding-puzzle.es.js","require":"./dist/vue-sliding-puzzle.umd.js"},"./css":{"import":"./dist/main.css","require":"./dist/main.css"}},"scripts":{"dev":"vite","build":"vue-tsc --noEmit && vite build","preview":"vite preview"},"typings":"./dist/main.d.ts","_npmUser":{"name":"yswenli","email":"yswenli@outlook.com"},"_npmVersion":"10.8.2","description":"**DEMO**: https://isluo.com/work/vue-puzzle-vcode/","directories":{},"_nodeVersion":"20.18.0","_hasShrinkwrap":false,"devDependencies":{"vue":"^3.2.47","less":"^4.1.3","vite":"^4.2.1","vue-tsc":"^1.2.0","typescript":"^5.0.2","@types/node":"^18.15.5","vite-plugin-dts":"^2.1.0","@vitejs/plugin-vue":"^4.1.0","vite-plugin-libcss":"^1.0.5"},"_npmOperationalInternal":{"tmp":"tmp/vue-sliding-puzzle_2.2.66_1774862814470_0.4198414479861088","host":"s3://npm-registry-packages-npm-production"}},"2.2.67":{"name":"vue-sliding-puzzle","version":"2.2.67","_id":"vue-sliding-puzzle@2.2.67","maintainers":[{"name":"yswenli","email":"yswenli@outlook.com"}],"dist":{"shasum":"8c047c1036180d3583709f6da9bc4bd06a52e264","tarball":"https://registry.npmjs.org/vue-sliding-puzzle/-/vue-sliding-puzzle-2.2.67.tgz","fileCount":7,"integrity":"sha512-0q3B4ieJsc2vKP8NseeIDsDfC6KZ0ZQ82Yr8+ILEUjTktjNaC/41fEfRK5FaYfYenhiPibUKoRuM+V8RPM1dsw==","signatures":[{"sig":"MEUCIBjW/EcFw8ACaUkYEsBrAUzRl3gw1/p/PdmQ0wybU3dCAiEAkm0XeDty2iTUcO9PK5xp4hzoXDfhqBKMT66tOyhWCiU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":236632},"main":"./dist/vue-sliding-puzzle.umd.js","module":"./dist/vue-sliding-puzzle.es.js","exports":{".":{"import":"./dist/vue-sliding-puzzle.es.js","require":"./dist/vue-sliding-puzzle.umd.js"},"./css":{"import":"./dist/index.css","require":"./dist/index.css"}},"scripts":{"dev":"vite","build":"vite build","preview":"vite preview"},"typings":"./dist/vue-sliding-puzzle.d.ts","_npmUser":{"name":"yswenli","email":"yswenli@outlook.com"},"_npmVersion":"10.8.2","description":"**DEMO**: https://isluo.com/work/vue-puzzle-vcode/","directories":{},"_nodeVersion":"20.18.0","_hasShrinkwrap":false,"devDependencies":{"vue":"^3.2.47","less":"^4.1.3","vite":"^4.2.1","vue-tsc":"^1.2.0","typescript":"^5.0.2","@types/node":"^18.15.5","vite-plugin-dts":"^2.1.0","@vitejs/plugin-vue":"^4.1.0","vite-plugin-libcss":"^1.0.5"},"peerDependencies":{"vue":"^3.2.0"},"_npmOperationalInternal":{"tmp":"tmp/vue-sliding-puzzle_2.2.67_1774863687342_0.3022379231698997","host":"s3://npm-registry-packages-npm-production"}},"26.3.31-1":{"name":"vue-sliding-puzzle","version":"26.3.31-1","keywords":["vue","vue3","sliding-puzzle","captcha","verification","slider-captcha","puzzle-captcha","vue-puzzle-captcha","security","anti-bot","人机验证","验证码","滑动验证","拼图验证","component","typescript"],"author":"","license":"MIT","_id":"vue-sliding-puzzle@26.3.31-1","maintainers":[{"name":"yswenli","email":"yswenli@outlook.com"}],"dist":{"shasum":"0093b3ab61f363b12cdbd6784feec2e3e1bbc235","tarball":"https://registry.npmjs.org/vue-sliding-puzzle/-/vue-sliding-puzzle-26.3.31-1.tgz","fileCount":7,"integrity":"sha512-gQZhqfQsIQQQXMzC4NcE9rXECnGRAoLjluNoyFv835L+DZrMXdbeCIqIVC2l8+nRWnrQ1dY7FDd/xRI4R5vJrg==","signatures":[{"sig":"MEYCIQD3iDH+lcIGktjwQaKgDUsYkEolL+sxGDPLRwHkaozJqQIhAIIv1ssakj/yJSPicHteDoOrPwKQaiTFToxGO0qnuJck","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":925676},"main":"./dist/vue-sliding-puzzle.umd.js","module":"./dist/vue-sliding-puzzle.es.js","exports":{".":{"import":"./dist/vue-sliding-puzzle.es.js","require":"./dist/vue-sliding-puzzle.umd.js"},"./css":{"import":"./dist/main.css","require":"./dist/main.css"}},"gitHead":"098f38cf98e5c092db6bd01a88771c180eaa2d26","scripts":{"dev":"vite","build":"vue-tsc --noEmit && vite build","preview":"vite preview"},"typings":"./dist/main.d.ts","_npmUser":{"name":"yswenli","email":"yswenli@outlook.com"},"_npmVersion":"10.8.2","description":"基于 Vue 3 的滑动拼图验证码组件，支持干扰图、时间判定等安全特性","directories":{},"_nodeVersion":"20.18.0","_hasShrinkwrap":false,"devDependencies":{"vue":"^3.2.47","less":"^4.1.3","vite":"^4.2.1","vue-tsc":"^2.0.14","typescript":"^5.6.3","@types/node":"^18.15.5","vite-plugin-dts":"^2.1.0","@vitejs/plugin-vue":"^4.1.0"},"_npmOperationalInternal":{"tmp":"tmp/vue-sliding-puzzle_26.3.31-1_1775010541606_0.4482582626452831","host":"s3://npm-registry-packages-npm-production"}},"26.4.1-2":{"name":"vue-sliding-puzzle","version":"26.4.1-2","keywords":["vue","vue3","sliding-puzzle","captcha","verification","slider-captcha","puzzle-captcha","vue-puzzle-captcha","security","anti-bot","人机验证","验证码","滑动验证","拼图验证","component","typescript"],"author":{"name":"yswenli"},"license":"MIT","_id":"vue-sliding-puzzle@26.4.1-2","maintainers":[{"name":"yswenli","email":"yswenli@outlook.com"}],"homepage":"https://github.com/yswenli/vue-sliding-puzzle#readme","bugs":{"url":"https://github.com/yswenli/vue-sliding-puzzle/issues"},"dist":{"shasum":"47c8b3a98776d4d0d420c186b4c6362b0a0dcab9","tarball":"https://registry.npmjs.org/vue-sliding-puzzle/-/vue-sliding-puzzle-26.4.1-2.tgz","fileCount":7,"integrity":"sha512-w8KCWEEloTKGx2uhfH1m2QlrBGeKMbGqGITPwOEt4LI92rwwgo4HXo+JiPqDMXil7z1W9VwU/0X18F0D+HXH9Q==","signatures":[{"sig":"MEQCIGJRYoiqrCeHMrg0w+gIGyl6y//AsFM5WSziOoaDwQftAiByokfE8ffoUnQdoUhnHIGndimifObFh+kvLQdL+p+rRA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":926480},"main":"./dist/vue-sliding-puzzle.umd.js","module":"./dist/vue-sliding-puzzle.es.js","exports":{".":{"import":"./dist/vue-sliding-puzzle.es.js","require":"./dist/vue-sliding-puzzle.umd.js"},"./css":{"import":"./dist/main.css","require":"./dist/main.css"}},"gitHead":"098f38cf98e5c092db6bd01a88771c180eaa2d26","scripts":{"dev":"vite","build":"vue-tsc --noEmit && vite build","preview":"vite preview"},"typings":"./dist/main.d.ts","_npmUser":{"name":"yswenli","email":"yswenli@outlook.com"},"repository":{"url":"git+https://github.com/yswenli/vue-sliding-puzzle.git","type":"git"},"_npmVersion":"10.8.2","description":"基于 Vue 3 的滑动拼图验证码组件，支持干扰图、时间判定等安全特性","directories":{},"_nodeVersion":"20.18.0","_hasShrinkwrap":false,"devDependencies":{"vue":"^3.2.47","less":"^4.1.3","vite":"^4.2.1","vue-tsc":"^2.0.14","typescript":"^5.6.3","@types/node":"^18.15.5","vite-plugin-dts":"^2.1.0","@vitejs/plugin-vue":"^4.1.0"},"_npmOperationalInternal":{"tmp":"tmp/vue-sliding-puzzle_26.4.1-2_1775011545132_0.6354058457117122","host":"s3://npm-registry-packages-npm-production"}},"26.4.1-3":{"name":"vue-sliding-puzzle","version":"26.4.1-3","keywords":["vue","vue3","sliding-puzzle","captcha","verification","slider-captcha","puzzle-captcha","vue-puzzle-captcha","security","anti-bot","人机验证","验证码","滑动验证","拼图验证","component","typescript"],"author":{"name":"yswenli"},"license":"MIT","_id":"vue-sliding-puzzle@26.4.1-3","maintainers":[{"name":"yswenli","email":"yswenli@outlook.com"}],"homepage":"https://github.com/yswenli/vue-sliding-puzzle#readme","bugs":{"url":"https://github.com/yswenli/vue-sliding-puzzle/issues"},"dist":{"shasum":"8a890b9f2c6867cef7946ea0613b138b9743ff8b","tarball":"https://registry.npmjs.org/vue-sliding-puzzle/-/vue-sliding-puzzle-26.4.1-3.tgz","fileCount":7,"integrity":"sha512-dpExhVC8fcLgXjqxLpk0eUSyU9PXeObT6DRmAGPXhZ1PYMnzMjaWDfChcquZyWGKJvVkrO321khuwep5djo1Wg==","signatures":[{"sig":"MEYCIQDIToKPF5s43PnS1kyjd3G5N6zdXwUUUc9mz/JXVwQ4JwIhAJqXrIGCFfvz7EUP+iRu6ok3/Jk7nU0CWhmAS/yDdxDC","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":926204},"main":"./dist/vue-sliding-puzzle.umd.js","module":"./dist/vue-sliding-puzzle.es.js","exports":{".":{"import":"./dist/vue-sliding-puzzle.es.js","require":"./dist/vue-sliding-puzzle.umd.js"},"./css":{"import":"./dist/main.css","require":"./dist/main.css"}},"gitHead":"27c9c871239be1ddb230466e71f779c92d6de06d","scripts":{"dev":"vite","build":"vue-tsc --noEmit && vite build","preview":"vite preview"},"typings":"./dist/main.d.ts","_npmUser":{"name":"yswenli","email":"yswenli@outlook.com"},"repository":{"url":"git+https://github.com/yswenli/vue-sliding-puzzle.git","type":"git"},"_npmVersion":"10.8.2","description":"基于 Vue 3 的滑动拼图验证码组件，支持干扰图、时间判定等安全特性","directories":{},"_nodeVersion":"20.18.0","_hasShrinkwrap":false,"devDependencies":{"vue":"^3.2.47","less":"^4.1.3","vite":"^4.2.1","vue-tsc":"^2.0.14","typescript":"^5.6.3","@types/node":"^18.15.5","vite-plugin-dts":"^2.1.0","@vitejs/plugin-vue":"^4.1.0"},"_npmOperationalInternal":{"tmp":"tmp/vue-sliding-puzzle_26.4.1-3_1775011892993_0.3165930892907669","host":"s3://npm-registry-packages-npm-production"}},"26.4.1-4":{"name":"vue-sliding-puzzle","version":"26.4.1-4","keywords":["vue","vue3","sliding-puzzle","captcha","verification","slider-captcha","puzzle-captcha","vue-puzzle-captcha","security","anti-bot","人机验证","验证码","滑动验证","拼图验证","component","typescript"],"author":{"name":"yswenli"},"license":"MIT","_id":"vue-sliding-puzzle@26.4.1-4","maintainers":[{"name":"yswenli","email":"yswenli@outlook.com"}],"homepage":"https://github.com/yswenli/vue-sliding-puzzle#readme","bugs":{"url":"https://github.com/yswenli/vue-sliding-puzzle/issues"},"dist":{"shasum":"aeede265df3a02d739fecee86f8dd77edbb94b46","tarball":"https://registry.npmjs.org/vue-sliding-puzzle/-/vue-sliding-puzzle-26.4.1-4.tgz","fileCount":7,"integrity":"sha512-8dXTqWItPcMsvT2DAmXo+XWWUta105ECaPDSlq1TaGfOSjDULonelPRb5zj6OT4DT1AWtyU0lzxa8fAu9rUa/Q==","signatures":[{"sig":"MEQCIFY+OOTOll33zY76xBB23XcRp0HoTqhaqQI3d9dDJ4woAiAKE5+Oj3W0tNsL7eo03/5XUjvLAcoLCHr87+ckAx+w0A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":926575},"main":"./dist/vue-sliding-puzzle.umd.js","module":"./dist/vue-sliding-puzzle.es.js","exports":{".":{"import":"./dist/vue-sliding-puzzle.es.js","require":"./dist/vue-sliding-puzzle.umd.js"},"./css":{"import":"./dist/main.css","require":"./dist/main.css"}},"gitHead":"27c9c871239be1ddb230466e71f779c92d6de06d","scripts":{"dev":"vite","build":"vue-tsc --noEmit && vite build","preview":"vite preview"},"typings":"./dist/main.d.ts","_npmUser":{"name":"yswenli","email":"yswenli@outlook.com"},"repository":{"url":"git+https://github.com/yswenli/vue-sliding-puzzle.git","type":"git"},"_npmVersion":"10.8.2","description":"基于 Vue 3 的滑动拼图验证码组件，支持干扰图、时间判定等安全特性","directories":{},"_nodeVersion":"20.18.0","_hasShrinkwrap":false,"devDependencies":{"vue":"^3.2.47","less":"^4.1.3","vite":"^4.2.1","vue-tsc":"^2.0.14","typescript":"^5.6.3","@types/node":"^18.15.5","vite-plugin-dts":"^2.1.0","@vitejs/plugin-vue":"^4.1.0"},"_npmOperationalInternal":{"tmp":"tmp/vue-sliding-puzzle_26.4.1-4_1775012445105_0.8810083752246596","host":"s3://npm-registry-packages-npm-production"}},"26.4.1-5":{"name":"vue-sliding-puzzle","version":"26.4.1-5","description":"基于 Vue 3 的滑动拼图验证码组件，支持干扰图、时间判定等安全特性","repository":{"type":"git","url":"git+https://github.com/yswenli/vue-sliding-puzzle.git"},"homepage":"https://github.com/yswenli/vue-sliding-puzzle#readme","bugs":{"url":"https://github.com/yswenli/vue-sliding-puzzle/issues"},"keywords":["vue","vue3","sliding-puzzle","captcha","verification","slider-captcha","puzzle-captcha","vue-puzzle-captcha","security","anti-bot","人机验证","验证码","滑动验证","拼图验证","component","typescript"],"author":{"name":"yswenli"},"license":"MIT","module":"./dist/vue-sliding-puzzle.es.js","main":"./dist/vue-sliding-puzzle.umd.js","typings":"./dist/main.d.ts","exports":{".":{"import":"./dist/vue-sliding-puzzle.es.js","require":"./dist/vue-sliding-puzzle.umd.js"},"./css":{"import":"./dist/main.css","require":"./dist/main.css"}},"scripts":{"dev":"vite","build":"vue-tsc --noEmit && vite build","preview":"vite preview"},"devDependencies":{"@types/node":"^18.15.5","@vitejs/plugin-vue":"^4.1.0","less":"^4.1.3","typescript":"^5.6.3","vite":"^4.2.1","vite-plugin-dts":"^2.1.0","vue":"^3.2.47","vue-tsc":"^2.0.14"},"_id":"vue-sliding-puzzle@26.4.1-5","gitHead":"2dfc9704d55781052e93ead260d41a9460141b34","_nodeVersion":"20.18.0","_npmVersion":"10.8.2","dist":{"integrity":"sha512-j+0ejVv/jnTXyNGjheQEK59NZ4djE3KiW082R4xsjoOy89gPx6jXGt0phnD4S09YM9y4odHy3we/rUtdhOJzKw==","shasum":"790772260463198034a139ce4f7dd41269ccf80c","tarball":"https://registry.npmjs.org/vue-sliding-puzzle/-/vue-sliding-puzzle-26.4.1-5.tgz","fileCount":7,"unpackedSize":453679,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDG55xjbvOIG2hEWt7pzumD49QM9llrpu3qiUKNvaukLQIgfoguYXKfn92CCmZWCvHoF+SUA7a3JAtcRIU4qT0h+yE="}]},"_npmUser":{"name":"yswenli","email":"yswenli@outlook.com"},"directories":{},"maintainers":[{"name":"yswenli","email":"yswenli@outlook.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/vue-sliding-puzzle_26.4.1-5_1775012753760_0.1666678323487245"},"_hasShrinkwrap":false}},"time":{"created":"2026-03-30T06:36:27.944Z","modified":"2026-04-01T03:05:54.088Z","1.1.10":"2026-03-30T06:36:28.110Z","1.1.11":"2026-03-30T06:49:32.061Z","1.1.13":"2026-03-30T08:30:30.348Z","2.2.66":"2026-03-30T09:26:54.656Z","2.2.67":"2026-03-30T09:41:27.558Z","3.263.311":"2026-03-31T03:16:45.403Z","3.263.312":"2026-03-31T03:54:18.412Z","3.263.313":"2026-03-31T05:38:17.760Z","3.263.315":"2026-03-31T05:51:05.926Z","3.263.316":"2026-03-31T05:52:34.628Z","3.263.317":"2026-03-31T05:54:34.903Z","3.263.318":"2026-03-31T05:57:07.621Z","3.263.319":"2026-03-31T06:14:56.747Z","3.263.3110":"2026-03-31T06:20:27.949Z","26.3.3-1.1":"2026-03-31T06:23:35.814Z","226.3.31-2":"2026-03-31T06:28:28.734Z","226.3.31-3":"2026-03-31T06:32:47.363Z","226.3.31-4":"2026-03-31T06:45:37.280Z","226.3.31-5":"2026-03-31T06:54:43.399Z","226.3.31-6":"2026-03-31T07:02:04.622Z","226.3.31-7":"2026-03-31T07:10:58.889Z","26.3.31-1":"2026-04-01T02:29:01.816Z","26.4.1-2":"2026-04-01T02:45:45.348Z","26.4.1-3":"2026-04-01T02:51:33.190Z","26.4.1-4":"2026-04-01T03:00:45.374Z","26.4.1-5":"2026-04-01T03:05:53.948Z"},"bugs":{"url":"https://github.com/yswenli/vue-sliding-puzzle/issues"},"author":{"name":"yswenli"},"license":"MIT","homepage":"https://github.com/yswenli/vue-sliding-puzzle#readme","keywords":["vue","vue3","sliding-puzzle","captcha","verification","slider-captcha","puzzle-captcha","vue-puzzle-captcha","security","anti-bot","人机验证","验证码","滑动验证","拼图验证","component","typescript"],"repository":{"type":"git","url":"git+https://github.com/yswenli/vue-sliding-puzzle.git"},"description":"基于 Vue 3 的滑动拼图验证码组件，支持干扰图、时间判定等安全特性","maintainers":[{"name":"yswenli","email":"yswenli@outlook.com"}],"readme":"# vue-sliding-puzzle [![npm](https://img.shields.io/npm/v/vue-sliding-puzzle.svg)](https://www.npmjs.com/package/vue-sliding-puzzle) [![npm downloads](https://img.shields.io/npm/dt/vue-sliding-puzzle.svg)](https://www.npmjs.com/package/vue-sliding-puzzle)\n\n## 项目介绍\n\nvue-sliding-puzzle 是一个基于 Vue 3 开发的滑动拼图验证码组件，用于防止恶意机器人攻击和自动化操作。它通过让用户拖动滑块完成拼图来验证用户身份，是一种直观且有效的人机验证方式。\n\n### 主要特点\n\n- 🎨 美观的界面设计\n- 📱 响应式布局，支持移动端\n- 🎯 可自定义的拼图难度和样式\n- 🔒 安全可靠的验证机制\n- 🎲 支持生成干扰图，增加验证难度\n- ⏱️ 内置时间判定，防止快速验证\n- 📦 轻量级，易于集成\n\n**DEMO**: https://dev-cyclops.tjingcai.com/admin/\n\n![img](https://github.com/yswenli/vue-sliding-puzzle/blob/master/public/demo.gif)\n\n### 安装\n```node\n  npm install vue-sliding-puzzle --save\n```\n\n### 最简单例子\n```vue\n<template>\n    <Vcode :show=\"isShow\" @success=\"onSuccess\" @close=\"onClose\"/>\n    <button @click=\"onShow\">开始验证</button>\n</template>\n\n<script setup>\n  import { ref } from \"vue\";\n  import Vcode from \"vue-sliding-puzzle\";\n\n  const isShow = ref(false);\n\n  const onShow = () => {\n    isShow.value = true;\n  };\n\n  const onClose = () => {\n    isShow.value = false;\n  };\n\n  const onSuccess = () => {\n    onClose(); // 验证成功，手动关闭模态框\n  };\n</script>\n```\n\n### 带干扰图的例子\n```vue\n<template>\n    <Vcode \n      :show=\"isShow\" \n      @success=\"onSuccess\" \n      @close=\"onClose\"\n      :slider-text=\"'请拖动滑块完成验证'\"\n      :success-text=\"'验证通过'\"\n      :interference-diagram-count=\"3\"\n    />\n    <button @click=\"onShow\">开始验证</button>\n</template>\n\n<script setup>\n  import { ref } from \"vue\";\n  import Vcode from \"vue-sliding-puzzle\";\n\n  const isShow = ref(false);\n\n  const onShow = () => {\n    isShow.value = true;\n  };\n\n  const onClose = () => {\n    isShow.value = false;\n  };\n\n  const onSuccess = (deviation, obj) => {\n    console.log('验证成功，用时：', obj.duration, '毫秒');\n    onClose(); // 验证成功，手动关闭模态框\n  };\n</script>\n```\n\n### 参数\n\n| 字段         | 类型    | 默认值             | 说明                                                                          |\n| ------------ | ------- | ------------------ | ----------------------------------------------------------------------------- |\n| show         | Boolean | false              | 是否显示验证码弹框                                                            |\n| type         | String  | \"modal\"            | \"modal\"模态框形式 / \"inside\"内嵌形式                                          |\n| canvas-width  | Number  | 310                | 主图区域的宽度，单位 px                                                       |\n| canvas-height | Number  | 160                | 主图区域的高度，单位 px                                                       |\n| puzzle-scale  | Number  | 1                  | 拼图块(小的拼图)的大小比例，0.2 ～ 2 ，数字越大，拼图越大                     |\n| slider-size   | Number  | 50                 | 左下角用户拖动的那个滑块的尺寸，单位 px                                       |\n| range        | Number  | 10                 | 判断成功的误差范围，单位 px, 滑动的距离和拼图缺口的距离小于等于此值时，会判定重合 |\n| imgs         | Array   | null               | 自定义图片，见下方例子                                                        |\n| success-text  | String  | \"验证通过！\"       | 验证成功时的提示文字                                                          |\n| fail-text     | String  | \"验证失败，请重试\" | 验证失败时的提示文字                                                          |\n| slider-text   | String  | \"拖动滑块完成拼图\" | 下方滑动条里的文字                                                            |\n| class-name    | String  | \"\"               | 给根元素一个class类用于自定义样式                                              |\n| z-index       | Number  | 999               | 设置根元素一个层级z-index                                              |\n| interference-diagram-count | Number | 0 | 干扰图数量，在现有背景图中生成指定数量的干扰图，位置和大小不同 |\n### 事件\n\n| 事件名  | 返回值 | 说明                                                          |\n| ------- | ------ | ------------------------------------------------------------- |\n| success | 偏差值，对象 | 验证通过时会触发，返回值见下方                               |\n| fail    | 偏差值，对象 | 验证失败时会触发，返回值见下方                                |\n| close   | null   | 用户点击遮罩层的回调                                          |\n| reset   | null   | 用户手动点击右上角刷新按钮时触发的回调                         |\n\nsuccess / fail 的返回值：\n```javascript\n    deviation: number, // 偏差值，用户滑动的位置 和 拼图缺口所在位置 的距离，单位px\n    obj: {\n      deviation: number, // 同 deviation\n      offsetX: number, // 用户滑动的距离，单位px\n      pinX: number, // 拼图缺口的所在位置（相对canvas的左边缘）， 单位px\n      duration: number // 用户滑动的用时，单位毫秒\n    }\n```\n\n### 内嵌形式\n\n入参type=\"inside\"， 将启用内嵌模式\n应该用一个元素包裹`<Vcode />`：\n\n```vue\n<template>\n  <div class=\"box\">\n    <Vcode type=\"inside\" :show=\"isShow\" />\n  </div>\n</template>\n\n<style>\n  .box{\n    position: relative;\n    width: 320px;\n    height: auto;\n  }\n</style>\n```\n\n## 使用场景\n\n### 1. 登录注册页面\n\n在用户登录或注册时，使用滑动拼图验证码可以有效防止恶意注册和暴力破解密码。\n\n### 2. 表单提交\n\n在重要表单提交时（如评论、订单提交等），使用验证码可以防止批量提交和垃圾信息。\n\n### 3. API 接口保护\n\n对于开放的 API 接口，可以在调用前要求用户完成滑动拼图验证，防止 API 被滥用。\n\n### 4. 敏感操作\n\n在执行敏感操作（如修改密码、绑定手机等）时，使用验证码可以增加操作的安全性。\n\n## 常见问题\n\n### Q: 如何自定义验证码图片？\n\nA: 可以通过 `imgs` 参数传入自定义图片数组，组件会随机选择其中一张作为背景图。\n\n### Q: 如何调整拼图难度？\n\nA: 可以通过调整 `puzzleScale`（拼图块大小）、`range`（误差范围）和 `interferenceDiagramCount`（干扰图数量）来调整验证难度。\n\n### Q: 如何处理验证失败的情况？\n\nA: 可以监听 `fail` 事件，在事件回调中处理验证失败的逻辑，例如显示错误提示或重新加载验证码。\n\n\n## 浏览器兼容性\n\n- Chrome 60+\n- Firefox 55+\n- Safari 12+\n- Edge 79+\n\n## 贡献\n\n欢迎提交 Issue 和 Pull Request 来改进这个项目！\n\n## 许可证\n\nMIT License\n","readmeFilename":"README.md"}