diff --git a/.gitignore b/.gitignore
index 9daa824..e848fd7 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,2 +1,4 @@
.DS_Store
node_modules
+dist
+pnpm-debug.log*
diff --git a/README.md b/README.md
index a34ccbd..3392cf4 100644
--- a/README.md
+++ b/README.md
@@ -55,28 +55,32 @@ The Vue Barcode Reader works out of the box by just including it.
Once a stream from the users camera is loaded, it's displayed and continuously scanned for barcodes. Results are indicated by the decode event.
-```js
-import { StreamBarcodeReader } from "vue-barcode-reader";
-```
+```html
+
-In your template you can use this syntax:
+
-```html
-
+
```
### Scanning from Image
The component renders to a simple file picker input element. Clicking opens a file dialog. On supporting mobile devices the camera is started to take a picture. The selected images are directly scanned and positive results are indicated by the `decode` event.
-```js
-import { ImageBarcodeReader } from "vue-barcode-reader";
-```
+```html
+
-In your template you can use this syntax:
+
-```html
-
+
```
```html
diff --git a/dist/index.cjs b/dist/index.cjs
new file mode 100644
index 0000000..b69bd61
--- /dev/null
+++ b/dist/index.cjs
@@ -0,0 +1 @@
+"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const s=require("@zxing/library"),r=require("vue"),d=(e,t)=>{const a=e.__vccOpts||e;for(const[o,n]of t)a[o]=n;return a},m={name:"image-barcode-reader",data(){return{codeReader:new s.BrowserMultiFormatReader}},methods:{onChangeInput(e){const t=e.target.files||e.dataTransfer.files;if(!t.length)return;const a=new FileReader;a.onload=this.processFile,a.readAsDataURL(t[0])},processFile(e){this.$el.innerHTML+=`
`,this.codeReader.decodeFromImage("image").then(t=>{this.$emit("decode",t.text),this.$emit("result",t)}).catch(t=>this.$emit("error",t))}}};function u(e,t,a,o,n,i){return r.openBlock(),r.createElementBlock("input",{onChange:t[0]||(t[0]=(...l)=>i.onChangeInput&&i.onChangeInput(...l)),type:"file",name:"image",accept:"image/*",capture:"environment"},null,32)}const p=d(m,[["render",u]]);const h={name:"stream-barcode-reader",data(){return{isLoading:!0,codeReader:new s.BrowserMultiFormatReader,isMediaStreamAPISupported:navigator&&navigator.mediaDevices&&"enumerateDevices"in navigator.mediaDevices}},mounted(){if(!this.isMediaStreamAPISupported)throw new s.Exception("Media Stream API is not supported");this.start(),this.$refs.scanner.oncanplay=e=>{this.isLoading=!1,this.$emit("loaded")}},beforeUnmount(){this.codeReader.reset()},methods:{start(){this.codeReader.decodeFromVideoDevice(void 0,this.$refs.scanner,(e,t)=>{e&&(this.$emit("decode",e.text),this.$emit("result",e))})}}},c=e=>(r.pushScopeId("data-v-ec9cd3e6"),e=e(),r.popScopeId(),e),_={class:"scanner-container"},g={poster:"data:image/gif,AAAA",ref:"scanner"},v=c(()=>r.createElementVNode("div",{class:"overlay-element"},null,-1)),f=c(()=>r.createElementVNode("div",{class:"laser"},null,-1));function $(e,t,a,o,n,i){return r.openBlock(),r.createElementBlock("div",_,[r.withDirectives(r.createElementVNode("div",null,[r.createElementVNode("video",g,null,512),v,f],512),[[r.vShow,!n.isLoading]])])}const R=d(h,[["render",$],["__scopeId","data-v-ec9cd3e6"]]);exports.ImageBarcodeReader=p;exports.StreamBarcodeReader=R;
diff --git a/dist/index.js b/dist/index.js
new file mode 100644
index 0000000..b64198a
--- /dev/null
+++ b/dist/index.js
@@ -0,0 +1,85 @@
+import { BrowserMultiFormatReader as s, Exception as h } from "@zxing/library";
+import { openBlock as d, createElementBlock as c, withDirectives as _, createElementVNode as n, vShow as u, pushScopeId as f, popScopeId as g } from "vue";
+const m = (e, t) => {
+ const r = e.__vccOpts || e;
+ for (const [o, a] of t)
+ r[o] = a;
+ return r;
+}, v = {
+ name: "image-barcode-reader",
+ data() {
+ return {
+ codeReader: new s()
+ };
+ },
+ methods: {
+ onChangeInput(e) {
+ const t = e.target.files || e.dataTransfer.files;
+ if (!t.length)
+ return;
+ const r = new FileReader();
+ r.onload = this.processFile, r.readAsDataURL(t[0]);
+ },
+ processFile(e) {
+ this.$el.innerHTML += `
`, this.codeReader.decodeFromImage("image").then((t) => {
+ this.$emit("decode", t.text), this.$emit("result", t);
+ }).catch((t) => this.$emit("error", t));
+ }
+ }
+};
+function $(e, t, r, o, a, i) {
+ return d(), c("input", {
+ onChange: t[0] || (t[0] = (...l) => i.onChangeInput && i.onChangeInput(...l)),
+ type: "file",
+ name: "image",
+ accept: "image/*",
+ capture: "environment"
+ }, null, 32);
+}
+const D = /* @__PURE__ */ m(v, [["render", $]]);
+const I = {
+ name: "stream-barcode-reader",
+ data() {
+ return {
+ isLoading: !0,
+ codeReader: new s(),
+ isMediaStreamAPISupported: navigator && navigator.mediaDevices && "enumerateDevices" in navigator.mediaDevices
+ };
+ },
+ mounted() {
+ if (!this.isMediaStreamAPISupported)
+ throw new h("Media Stream API is not supported");
+ this.start(), this.$refs.scanner.oncanplay = (e) => {
+ this.isLoading = !1, this.$emit("loaded");
+ };
+ },
+ beforeUnmount() {
+ this.codeReader.reset();
+ },
+ methods: {
+ start() {
+ this.codeReader.decodeFromVideoDevice(void 0, this.$refs.scanner, (e, t) => {
+ e && (this.$emit("decode", e.text), this.$emit("result", e));
+ });
+ }
+ }
+}, p = (e) => (f("data-v-ec9cd3e6"), e = e(), g(), e), R = { class: "scanner-container" }, S = {
+ poster: "data:image/gif,AAAA",
+ ref: "scanner"
+}, w = /* @__PURE__ */ p(() => /* @__PURE__ */ n("div", { class: "overlay-element" }, null, -1)), x = /* @__PURE__ */ p(() => /* @__PURE__ */ n("div", { class: "laser" }, null, -1));
+function A(e, t, r, o, a, i) {
+ return d(), c("div", R, [
+ _(n("div", null, [
+ n("video", S, null, 512),
+ w,
+ x
+ ], 512), [
+ [u, !a.isLoading]
+ ])
+ ]);
+}
+const F = /* @__PURE__ */ m(I, [["render", A], ["__scopeId", "data-v-ec9cd3e6"]]);
+export {
+ D as ImageBarcodeReader,
+ F as StreamBarcodeReader
+};
diff --git a/dist/style.css b/dist/style.css
new file mode 100644
index 0000000..a3f4d2e
--- /dev/null
+++ b/dist/style.css
@@ -0,0 +1 @@
+video[data-v-ec9cd3e6]{max-width:100%;max-height:100%}.scanner-container[data-v-ec9cd3e6]{position:relative}.overlay-element[data-v-ec9cd3e6]{position:absolute;top:0;width:100%;height:99%;background:rgba(30,30,30,.5);-webkit-clip-path:polygon(0% 0%,0% 100%,20% 100%,20% 20%,80% 20%,80% 80%,20% 80%,20% 100%,100% 100%,100% 0%);clip-path:polygon(0% 0%,0% 100%,20% 100%,20% 20%,80% 20%,80% 80%,20% 80%,20% 100%,100% 100%,100% 0%)}.laser[data-v-ec9cd3e6]{width:60%;margin-left:20%;background-color:tomato;height:1px;position:absolute;top:40%;z-index:2;box-shadow:0 0 4px red;-webkit-animation:scanning-ec9cd3e6 2s infinite;animation:scanning-ec9cd3e6 2s infinite}@-webkit-keyframes scanning-ec9cd3e6{50%{-webkit-transform:translateY(75px);transform:translateY(75px)}}@keyframes scanning-ec9cd3e6{50%{-webkit-transform:translateY(75px);transform:translateY(75px)}}
diff --git a/package-lock.json b/package-lock.json
deleted file mode 100644
index 7345723..0000000
--- a/package-lock.json
+++ /dev/null
@@ -1,66 +0,0 @@
-{
- "name": "vue-barcode-reader",
- "version": "1.0.0",
- "lockfileVersion": 2,
- "requires": true,
- "packages": {
- "": {
- "name": "vue-barcode-reader",
- "version": "1.0.0",
- "license": "MIT",
- "dependencies": {
- "@zxing/library": "^0.19.1"
- }
- },
- "node_modules/@zxing/library": {
- "version": "0.19.1",
- "resolved": "https://registry.npmjs.org/@zxing/library/-/library-0.19.1.tgz",
- "integrity": "sha512-rKwvl3Uuqs8yf364iU9l3HDDaIx8yPv+CH6DbtQaQr67VdKLG22G1ukEp9fOdDefE6tpLtRAdMnTrgtpiaKAZw==",
- "dependencies": {
- "ts-custom-error": "^3.0.0"
- },
- "engines": {
- "node": ">= 10.4.0"
- },
- "optionalDependencies": {
- "@zxing/text-encoding": "~0.9.0"
- }
- },
- "node_modules/@zxing/text-encoding": {
- "version": "0.9.0",
- "resolved": "https://registry.npmjs.org/@zxing/text-encoding/-/text-encoding-0.9.0.tgz",
- "integrity": "sha512-U/4aVJ2mxI0aDNI8Uq0wEhMgY+u4CNtEb0om3+y3+niDAsoTCOB33UF0sxpzqzdqXLqmvc+vZyAt4O8pPdfkwA==",
- "optional": true
- },
- "node_modules/ts-custom-error": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/ts-custom-error/-/ts-custom-error-3.1.1.tgz",
- "integrity": "sha512-f/syoy+pTE4z82qaiRuthEeZtCGNKzlfs0Zc8jpQFcz/CYMaFSwFSdfFt1sSFnPlDLOEm7RCROdIxZ44N8UlwA==",
- "engines": {
- "node": ">=8.0.0"
- }
- }
- },
- "dependencies": {
- "@zxing/library": {
- "version": "0.19.1",
- "resolved": "https://registry.npmjs.org/@zxing/library/-/library-0.19.1.tgz",
- "integrity": "sha512-rKwvl3Uuqs8yf364iU9l3HDDaIx8yPv+CH6DbtQaQr67VdKLG22G1ukEp9fOdDefE6tpLtRAdMnTrgtpiaKAZw==",
- "requires": {
- "@zxing/text-encoding": "~0.9.0",
- "ts-custom-error": "^3.0.0"
- }
- },
- "@zxing/text-encoding": {
- "version": "0.9.0",
- "resolved": "https://registry.npmjs.org/@zxing/text-encoding/-/text-encoding-0.9.0.tgz",
- "integrity": "sha512-U/4aVJ2mxI0aDNI8Uq0wEhMgY+u4CNtEb0om3+y3+niDAsoTCOB33UF0sxpzqzdqXLqmvc+vZyAt4O8pPdfkwA==",
- "optional": true
- },
- "ts-custom-error": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/ts-custom-error/-/ts-custom-error-3.1.1.tgz",
- "integrity": "sha512-f/syoy+pTE4z82qaiRuthEeZtCGNKzlfs0Zc8jpQFcz/CYMaFSwFSdfFt1sSFnPlDLOEm7RCROdIxZ44N8UlwA=="
- }
- }
-}
diff --git a/package.json b/package.json
index 65bcfc4..35de596 100644
--- a/package.json
+++ b/package.json
@@ -2,8 +2,19 @@
"name": "vue-barcode-reader",
"version": "1.0.3",
"description": "Vue barcodes and QR codes scanner",
- "main": "src/index.js",
+ "type": "module",
+ "files": ["dist"],
+ "main": "./dist/index.cjs",
+ "module": "./dist/index.js",
+ "exports": {
+ ".": {
+ "import": "./dist/index.js",
+ "require": "./dist/index.cjs"
+ },
+ "./style.css": "./dist/style.css"
+ },
"scripts": {
+ "build": "vite build",
"test": "echo \"Error: no test specified\" && exit 1"
},
"repository": {
@@ -23,6 +34,11 @@
},
"homepage": "https://github.com/olefirenko/vue-barcode-reader#readme",
"dependencies": {
- "@zxing/library": "^0.19.1"
+ "@zxing/library": "^0.19.1",
+ "vue": "^3.2.47"
+ },
+ "devDependencies": {
+ "@vitejs/plugin-vue": "^4.0.0",
+ "vite": "^4.1.4"
}
}
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
new file mode 100644
index 0000000..1eb038f
--- /dev/null
+++ b/pnpm-lock.yaml
@@ -0,0 +1,508 @@
+lockfileVersion: 5.4
+
+specifiers:
+ '@vitejs/plugin-vue': ^4.0.0
+ '@zxing/library': ^0.19.1
+ vite: ^4.1.4
+ vue: ^3.2.47
+
+dependencies:
+ '@zxing/library': 0.19.2
+ vue: 3.2.47
+
+devDependencies:
+ '@vitejs/plugin-vue': 4.0.0_vite@4.1.4+vue@3.2.47
+ vite: 4.1.4
+
+packages:
+
+ /@babel/helper-string-parser/7.19.4:
+ resolution: {integrity: sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==}
+ engines: {node: '>=6.9.0'}
+
+ /@babel/helper-validator-identifier/7.19.1:
+ resolution: {integrity: sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==}
+ engines: {node: '>=6.9.0'}
+
+ /@babel/parser/7.21.2:
+ resolution: {integrity: sha512-URpaIJQwEkEC2T9Kn+Ai6Xe/02iNaVCuT/PtoRz3GPVJVDpPd7mLo+VddTbhCRU9TXqW5mSrQfXZyi8kDKOVpQ==}
+ engines: {node: '>=6.0.0'}
+ hasBin: true
+ dependencies:
+ '@babel/types': 7.21.2
+
+ /@babel/types/7.21.2:
+ resolution: {integrity: sha512-3wRZSs7jiFaB8AjxiiD+VqN5DTG2iRvJGQ+qYFrs/654lg6kGTQWIOFjlBo5RaXuAZjBmP3+OQH4dmhqiiyYxw==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/helper-string-parser': 7.19.4
+ '@babel/helper-validator-identifier': 7.19.1
+ to-fast-properties: 2.0.0
+
+ /@esbuild/android-arm/0.16.17:
+ resolution: {integrity: sha512-N9x1CMXVhtWEAMS7pNNONyA14f71VPQN9Cnavj1XQh6T7bskqiLLrSca4O0Vr8Wdcga943eThxnVp3JLnBMYtw==}
+ engines: {node: '>=12'}
+ cpu: [arm]
+ os: [android]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/android-arm64/0.16.17:
+ resolution: {integrity: sha512-MIGl6p5sc3RDTLLkYL1MyL8BMRN4tLMRCn+yRJJmEDvYZ2M7tmAf80hx1kbNEUX2KJ50RRtxZ4JHLvCfuB6kBg==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [android]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/android-x64/0.16.17:
+ resolution: {integrity: sha512-a3kTv3m0Ghh4z1DaFEuEDfz3OLONKuFvI4Xqczqx4BqLyuFaFkuaG4j2MtA6fuWEFeC5x9IvqnX7drmRq/fyAQ==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [android]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/darwin-arm64/0.16.17:
+ resolution: {integrity: sha512-/2agbUEfmxWHi9ARTX6OQ/KgXnOWfsNlTeLcoV7HSuSTv63E4DqtAc+2XqGw1KHxKMHGZgbVCZge7HXWX9Vn+w==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [darwin]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/darwin-x64/0.16.17:
+ resolution: {integrity: sha512-2By45OBHulkd9Svy5IOCZt376Aa2oOkiE9QWUK9fe6Tb+WDr8hXL3dpqi+DeLiMed8tVXspzsTAvd0jUl96wmg==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [darwin]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/freebsd-arm64/0.16.17:
+ resolution: {integrity: sha512-mt+cxZe1tVx489VTb4mBAOo2aKSnJ33L9fr25JXpqQqzbUIw/yzIzi+NHwAXK2qYV1lEFp4OoVeThGjUbmWmdw==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [freebsd]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/freebsd-x64/0.16.17:
+ resolution: {integrity: sha512-8ScTdNJl5idAKjH8zGAsN7RuWcyHG3BAvMNpKOBaqqR7EbUhhVHOqXRdL7oZvz8WNHL2pr5+eIT5c65kA6NHug==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [freebsd]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/linux-arm/0.16.17:
+ resolution: {integrity: sha512-iihzrWbD4gIT7j3caMzKb/RsFFHCwqqbrbH9SqUSRrdXkXaygSZCZg1FybsZz57Ju7N/SHEgPyaR0LZ8Zbe9gQ==}
+ engines: {node: '>=12'}
+ cpu: [arm]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/linux-arm64/0.16.17:
+ resolution: {integrity: sha512-7S8gJnSlqKGVJunnMCrXHU9Q8Q/tQIxk/xL8BqAP64wchPCTzuM6W3Ra8cIa1HIflAvDnNOt2jaL17vaW+1V0g==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/linux-ia32/0.16.17:
+ resolution: {integrity: sha512-kiX69+wcPAdgl3Lonh1VI7MBr16nktEvOfViszBSxygRQqSpzv7BffMKRPMFwzeJGPxcio0pdD3kYQGpqQ2SSg==}
+ engines: {node: '>=12'}
+ cpu: [ia32]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/linux-loong64/0.16.17:
+ resolution: {integrity: sha512-dTzNnQwembNDhd654cA4QhbS9uDdXC3TKqMJjgOWsC0yNCbpzfWoXdZvp0mY7HU6nzk5E0zpRGGx3qoQg8T2DQ==}
+ engines: {node: '>=12'}
+ cpu: [loong64]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/linux-mips64el/0.16.17:
+ resolution: {integrity: sha512-ezbDkp2nDl0PfIUn0CsQ30kxfcLTlcx4Foz2kYv8qdC6ia2oX5Q3E/8m6lq84Dj/6b0FrkgD582fJMIfHhJfSw==}
+ engines: {node: '>=12'}
+ cpu: [mips64el]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/linux-ppc64/0.16.17:
+ resolution: {integrity: sha512-dzS678gYD1lJsW73zrFhDApLVdM3cUF2MvAa1D8K8KtcSKdLBPP4zZSLy6LFZ0jYqQdQ29bjAHJDgz0rVbLB3g==}
+ engines: {node: '>=12'}
+ cpu: [ppc64]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/linux-riscv64/0.16.17:
+ resolution: {integrity: sha512-ylNlVsxuFjZK8DQtNUwiMskh6nT0vI7kYl/4fZgV1llP5d6+HIeL/vmmm3jpuoo8+NuXjQVZxmKuhDApK0/cKw==}
+ engines: {node: '>=12'}
+ cpu: [riscv64]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/linux-s390x/0.16.17:
+ resolution: {integrity: sha512-gzy7nUTO4UA4oZ2wAMXPNBGTzZFP7mss3aKR2hH+/4UUkCOyqmjXiKpzGrY2TlEUhbbejzXVKKGazYcQTZWA/w==}
+ engines: {node: '>=12'}
+ cpu: [s390x]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/linux-x64/0.16.17:
+ resolution: {integrity: sha512-mdPjPxfnmoqhgpiEArqi4egmBAMYvaObgn4poorpUaqmvzzbvqbowRllQ+ZgzGVMGKaPkqUmPDOOFQRUFDmeUw==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/netbsd-x64/0.16.17:
+ resolution: {integrity: sha512-/PzmzD/zyAeTUsduZa32bn0ORug+Jd1EGGAUJvqfeixoEISYpGnAezN6lnJoskauoai0Jrs+XSyvDhppCPoKOA==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [netbsd]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/openbsd-x64/0.16.17:
+ resolution: {integrity: sha512-2yaWJhvxGEz2RiftSk0UObqJa/b+rIAjnODJgv2GbGGpRwAfpgzyrg1WLK8rqA24mfZa9GvpjLcBBg8JHkoodg==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [openbsd]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/sunos-x64/0.16.17:
+ resolution: {integrity: sha512-xtVUiev38tN0R3g8VhRfN7Zl42YCJvyBhRKw1RJjwE1d2emWTVToPLNEQj/5Qxc6lVFATDiy6LjVHYhIPrLxzw==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [sunos]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/win32-arm64/0.16.17:
+ resolution: {integrity: sha512-ga8+JqBDHY4b6fQAmOgtJJue36scANy4l/rL97W+0wYmijhxKetzZdKOJI7olaBaMhWt8Pac2McJdZLxXWUEQw==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [win32]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/win32-ia32/0.16.17:
+ resolution: {integrity: sha512-WnsKaf46uSSF/sZhwnqE4L/F89AYNMiD4YtEcYekBt9Q7nj0DiId2XH2Ng2PHM54qi5oPrQ8luuzGszqi/veig==}
+ engines: {node: '>=12'}
+ cpu: [ia32]
+ os: [win32]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/win32-x64/0.16.17:
+ resolution: {integrity: sha512-y+EHuSchhL7FjHgvQL/0fnnFmO4T1bhvWANX6gcnqTjtnKWbTvUMCpGnv2+t+31d7RzyEAYAd4u2fnIhHL6N/Q==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [win32]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@vitejs/plugin-vue/4.0.0_vite@4.1.4+vue@3.2.47:
+ resolution: {integrity: sha512-e0X4jErIxAB5oLtDqbHvHpJe/uWNkdpYV83AOG2xo2tEVSzCzewgJMtREZM30wXnM5ls90hxiOtAuVU6H5JgbA==}
+ engines: {node: ^14.18.0 || >=16.0.0}
+ peerDependencies:
+ vite: ^4.0.0
+ vue: ^3.2.25
+ dependencies:
+ vite: 4.1.4
+ vue: 3.2.47
+ dev: true
+
+ /@vue/compiler-core/3.2.47:
+ resolution: {integrity: sha512-p4D7FDnQb7+YJmO2iPEv0SQNeNzcbHdGByJDsT4lynf63AFkOTFN07HsiRSvjGo0QrxR/o3d0hUyNCUnBU2Tig==}
+ dependencies:
+ '@babel/parser': 7.21.2
+ '@vue/shared': 3.2.47
+ estree-walker: 2.0.2
+ source-map: 0.6.1
+
+ /@vue/compiler-dom/3.2.47:
+ resolution: {integrity: sha512-dBBnEHEPoftUiS03a4ggEig74J2YBZ2UIeyfpcRM2tavgMWo4bsEfgCGsu+uJIL/vax9S+JztH8NmQerUo7shQ==}
+ dependencies:
+ '@vue/compiler-core': 3.2.47
+ '@vue/shared': 3.2.47
+
+ /@vue/compiler-sfc/3.2.47:
+ resolution: {integrity: sha512-rog05W+2IFfxjMcFw10tM9+f7i/+FFpZJJ5XHX72NP9eC2uRD+42M3pYcQqDXVYoj74kHMSEdQ/WmCjt8JFksQ==}
+ dependencies:
+ '@babel/parser': 7.21.2
+ '@vue/compiler-core': 3.2.47
+ '@vue/compiler-dom': 3.2.47
+ '@vue/compiler-ssr': 3.2.47
+ '@vue/reactivity-transform': 3.2.47
+ '@vue/shared': 3.2.47
+ estree-walker: 2.0.2
+ magic-string: 0.25.9
+ postcss: 8.4.21
+ source-map: 0.6.1
+
+ /@vue/compiler-ssr/3.2.47:
+ resolution: {integrity: sha512-wVXC+gszhulcMD8wpxMsqSOpvDZ6xKXSVWkf50Guf/S+28hTAXPDYRTbLQ3EDkOP5Xz/+SY37YiwDquKbJOgZw==}
+ dependencies:
+ '@vue/compiler-dom': 3.2.47
+ '@vue/shared': 3.2.47
+
+ /@vue/reactivity-transform/3.2.47:
+ resolution: {integrity: sha512-m8lGXw8rdnPVVIdIFhf0LeQ/ixyHkH5plYuS83yop5n7ggVJU+z5v0zecwEnX7fa7HNLBhh2qngJJkxpwEEmYA==}
+ dependencies:
+ '@babel/parser': 7.21.2
+ '@vue/compiler-core': 3.2.47
+ '@vue/shared': 3.2.47
+ estree-walker: 2.0.2
+ magic-string: 0.25.9
+
+ /@vue/reactivity/3.2.47:
+ resolution: {integrity: sha512-7khqQ/75oyyg+N/e+iwV6lpy1f5wq759NdlS1fpAhFXa8VeAIKGgk2E/C4VF59lx5b+Ezs5fpp/5WsRYXQiKxQ==}
+ dependencies:
+ '@vue/shared': 3.2.47
+
+ /@vue/runtime-core/3.2.47:
+ resolution: {integrity: sha512-RZxbLQIRB/K0ev0K9FXhNbBzT32H9iRtYbaXb0ZIz2usLms/D55dJR2t6cIEUn6vyhS3ALNvNthI+Q95C+NOpA==}
+ dependencies:
+ '@vue/reactivity': 3.2.47
+ '@vue/shared': 3.2.47
+
+ /@vue/runtime-dom/3.2.47:
+ resolution: {integrity: sha512-ArXrFTjS6TsDei4qwNvgrdmHtD930KgSKGhS5M+j8QxXrDJYLqYw4RRcDy1bz1m1wMmb6j+zGLifdVHtkXA7gA==}
+ dependencies:
+ '@vue/runtime-core': 3.2.47
+ '@vue/shared': 3.2.47
+ csstype: 2.6.21
+
+ /@vue/server-renderer/3.2.47_vue@3.2.47:
+ resolution: {integrity: sha512-dN9gc1i8EvmP9RCzvneONXsKfBRgqFeFZLurmHOveL7oH6HiFXJw5OGu294n1nHc/HMgTy6LulU/tv5/A7f/LA==}
+ peerDependencies:
+ vue: 3.2.47
+ dependencies:
+ '@vue/compiler-ssr': 3.2.47
+ '@vue/shared': 3.2.47
+ vue: 3.2.47
+
+ /@vue/shared/3.2.47:
+ resolution: {integrity: sha512-BHGyyGN3Q97EZx0taMQ+OLNuZcW3d37ZEVmEAyeoA9ERdGvm9Irc/0Fua8SNyOtV1w6BS4q25wbMzJujO9HIfQ==}
+
+ /@zxing/library/0.19.2:
+ resolution: {integrity: sha512-0aCQIbGXsDHcBuRYuZRZfJeLRYiPfdLxIlh5bY7k+k2bkxFwzla+75VyFi1rnjU5hqaZogdSH+Dw013YDsQOjg==}
+ engines: {node: '>= 10.4.0'}
+ dependencies:
+ ts-custom-error: 3.3.1
+ optionalDependencies:
+ '@zxing/text-encoding': 0.9.0
+ dev: false
+
+ /@zxing/text-encoding/0.9.0:
+ resolution: {integrity: sha512-U/4aVJ2mxI0aDNI8Uq0wEhMgY+u4CNtEb0om3+y3+niDAsoTCOB33UF0sxpzqzdqXLqmvc+vZyAt4O8pPdfkwA==}
+ requiresBuild: true
+ dev: false
+ optional: true
+
+ /csstype/2.6.21:
+ resolution: {integrity: sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w==}
+
+ /esbuild/0.16.17:
+ resolution: {integrity: sha512-G8LEkV0XzDMNwXKgM0Jwu3nY3lSTwSGY6XbxM9cr9+s0T/qSV1q1JVPBGzm3dcjhCic9+emZDmMffkwgPeOeLg==}
+ engines: {node: '>=12'}
+ hasBin: true
+ requiresBuild: true
+ optionalDependencies:
+ '@esbuild/android-arm': 0.16.17
+ '@esbuild/android-arm64': 0.16.17
+ '@esbuild/android-x64': 0.16.17
+ '@esbuild/darwin-arm64': 0.16.17
+ '@esbuild/darwin-x64': 0.16.17
+ '@esbuild/freebsd-arm64': 0.16.17
+ '@esbuild/freebsd-x64': 0.16.17
+ '@esbuild/linux-arm': 0.16.17
+ '@esbuild/linux-arm64': 0.16.17
+ '@esbuild/linux-ia32': 0.16.17
+ '@esbuild/linux-loong64': 0.16.17
+ '@esbuild/linux-mips64el': 0.16.17
+ '@esbuild/linux-ppc64': 0.16.17
+ '@esbuild/linux-riscv64': 0.16.17
+ '@esbuild/linux-s390x': 0.16.17
+ '@esbuild/linux-x64': 0.16.17
+ '@esbuild/netbsd-x64': 0.16.17
+ '@esbuild/openbsd-x64': 0.16.17
+ '@esbuild/sunos-x64': 0.16.17
+ '@esbuild/win32-arm64': 0.16.17
+ '@esbuild/win32-ia32': 0.16.17
+ '@esbuild/win32-x64': 0.16.17
+ dev: true
+
+ /estree-walker/2.0.2:
+ resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==}
+
+ /fsevents/2.3.2:
+ resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==}
+ engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
+ os: [darwin]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /function-bind/1.1.1:
+ resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==}
+ dev: true
+
+ /has/1.0.3:
+ resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==}
+ engines: {node: '>= 0.4.0'}
+ dependencies:
+ function-bind: 1.1.1
+ dev: true
+
+ /is-core-module/2.11.0:
+ resolution: {integrity: sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==}
+ dependencies:
+ has: 1.0.3
+ dev: true
+
+ /magic-string/0.25.9:
+ resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==}
+ dependencies:
+ sourcemap-codec: 1.4.8
+
+ /nanoid/3.3.4:
+ resolution: {integrity: sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==}
+ engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
+ hasBin: true
+
+ /path-parse/1.0.7:
+ resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
+ dev: true
+
+ /picocolors/1.0.0:
+ resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==}
+
+ /postcss/8.4.21:
+ resolution: {integrity: sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==}
+ engines: {node: ^10 || ^12 || >=14}
+ dependencies:
+ nanoid: 3.3.4
+ picocolors: 1.0.0
+ source-map-js: 1.0.2
+
+ /resolve/1.22.1:
+ resolution: {integrity: sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==}
+ hasBin: true
+ dependencies:
+ is-core-module: 2.11.0
+ path-parse: 1.0.7
+ supports-preserve-symlinks-flag: 1.0.0
+ dev: true
+
+ /rollup/3.19.0:
+ resolution: {integrity: sha512-xZzJZlH9Ca6cosfdNGPwl2z7Pby8dTi9TrYLPeg6/j7aUoDOhBd706tCUFvbiBj45h/cS7z/a4gS8xd5Yg0jBw==}
+ engines: {node: '>=14.18.0', npm: '>=8.0.0'}
+ hasBin: true
+ optionalDependencies:
+ fsevents: 2.3.2
+ dev: true
+
+ /source-map-js/1.0.2:
+ resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==}
+ engines: {node: '>=0.10.0'}
+
+ /source-map/0.6.1:
+ resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
+ engines: {node: '>=0.10.0'}
+
+ /sourcemap-codec/1.4.8:
+ resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==}
+ deprecated: Please use @jridgewell/sourcemap-codec instead
+
+ /supports-preserve-symlinks-flag/1.0.0:
+ resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
+ engines: {node: '>= 0.4'}
+ dev: true
+
+ /to-fast-properties/2.0.0:
+ resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==}
+ engines: {node: '>=4'}
+
+ /ts-custom-error/3.3.1:
+ resolution: {integrity: sha512-5OX1tzOjxWEgsr/YEUWSuPrQ00deKLh6D7OTWcvNHm12/7QPyRh8SYpyWvA4IZv8H/+GQWQEh/kwo95Q9OVW1A==}
+ engines: {node: '>=14.0.0'}
+ dev: false
+
+ /vite/4.1.4:
+ resolution: {integrity: sha512-3knk/HsbSTKEin43zHu7jTwYWv81f8kgAL99G5NWBcA1LKvtvcVAC4JjBH1arBunO9kQka+1oGbrMKOjk4ZrBg==}
+ engines: {node: ^14.18.0 || >=16.0.0}
+ hasBin: true
+ peerDependencies:
+ '@types/node': '>= 14'
+ less: '*'
+ sass: '*'
+ stylus: '*'
+ sugarss: '*'
+ terser: ^5.4.0
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
+ less:
+ optional: true
+ sass:
+ optional: true
+ stylus:
+ optional: true
+ sugarss:
+ optional: true
+ terser:
+ optional: true
+ dependencies:
+ esbuild: 0.16.17
+ postcss: 8.4.21
+ resolve: 1.22.1
+ rollup: 3.19.0
+ optionalDependencies:
+ fsevents: 2.3.2
+ dev: true
+
+ /vue/3.2.47:
+ resolution: {integrity: sha512-60188y/9Dc9WVrAZeUVSDxRQOZ+z+y5nO2ts9jWXSTkMvayiWxCWOWtBQoYjLeccfXkiiPZWAHcV+WTPhkqJHQ==}
+ dependencies:
+ '@vue/compiler-dom': 3.2.47
+ '@vue/compiler-sfc': 3.2.47
+ '@vue/runtime-dom': 3.2.47
+ '@vue/server-renderer': 3.2.47_vue@3.2.47
+ '@vue/shared': 3.2.47
diff --git a/src/index.js b/src/index.js
index 7dd4add..bea700f 100644
--- a/src/index.js
+++ b/src/index.js
@@ -1,4 +1,4 @@
-import ImageBarcodeReader from "./components/ImageBarcodeReader.vue";
-import StreamBarcodeReader from "./components/StreamBarcodeReader.vue";
+import ImageBarcodeReader from './components/ImageBarcodeReader.vue'
+import StreamBarcodeReader from './components/StreamBarcodeReader.vue'
-export { ImageBarcodeReader, StreamBarcodeReader };
+export { ImageBarcodeReader, StreamBarcodeReader }
diff --git a/vite.config.js b/vite.config.js
new file mode 100644
index 0000000..9635a4d
--- /dev/null
+++ b/vite.config.js
@@ -0,0 +1,18 @@
+import { defineConfig } from 'vite'
+import vue from '@vitejs/plugin-vue'
+import { resolve } from 'node:path'
+
+export default defineConfig({
+ plugins: [vue()],
+ build: {
+ lib: {
+ entry: resolve(__dirname, 'src/index.js'),
+ name: 'vue-barcode-reader',
+ fileName: 'index',
+ formats: ['es', 'cjs']
+ },
+ rollupOptions: {
+ external: ['vue', '@zxing/library'],
+ },
+ },
+})