qrcode.vue 3.5.0 → 3.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +47 -0
- package/README-ja.md +92 -9
- package/README-zh_cn.md +85 -2
- package/README.md +82 -3
- package/dist/index.d.ts +139 -0
- package/dist/qrcode.vue.browser.js +94 -13
- package/dist/qrcode.vue.browser.min.js +2 -2
- package/dist/qrcode.vue.cjs.js +94 -13
- package/dist/qrcode.vue.esm.js +94 -13
- package/package.json +9 -10
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,50 @@
|
|
|
1
|
+
## [3.5.0] - 2024-09-26
|
|
2
|
+
|
|
3
|
+
### Feature
|
|
4
|
+
|
|
5
|
+
- Support logo image for Qrcode.
|
|
6
|
+
- Exports separate `QrcodeCanvas` and `QrcodeSvg` components
|
|
7
|
+
|
|
8
|
+
Direct references to `QrcodeVue` in common.js and cdn now require the `default` field:
|
|
9
|
+
|
|
10
|
+
```js
|
|
11
|
+
const QrcodeVue = require('qrcode.vue').default
|
|
12
|
+
const { default: QrcodeVue, QrcodeCanvas, QrcodeSvg } = require('qrcode.vue')
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
```html
|
|
16
|
+
<!--With HTML-->
|
|
17
|
+
<div id="root">
|
|
18
|
+
<p class="flex space-x">
|
|
19
|
+
<qrcode-vue :value="test" render-as="svg"></qrcode-vue>
|
|
20
|
+
<qrcode-canvas :value="test"></qrcode-canvas>
|
|
21
|
+
<qrcode-svg :value="test" :image-settings="imageSettings"></qrcode-svg>
|
|
22
|
+
</p>
|
|
23
|
+
<p><input v-model="test" /></p>
|
|
24
|
+
</div>
|
|
25
|
+
<script src="https://cdn.jsdelivr.net/npm/vue@3.5/dist/vue.global.prod.js"></script>
|
|
26
|
+
<script src="https://cdn.jsdelivr.net/npm/qrcode.vue@3.5/dist/qrcode.vue.browser.min.js"></script>
|
|
27
|
+
|
|
28
|
+
<script>
|
|
29
|
+
Vue.createApp({
|
|
30
|
+
data() { return {
|
|
31
|
+
test: 'Hello World',
|
|
32
|
+
imageSettings: {
|
|
33
|
+
src: 'https://avatars.githubusercontent.com/u/15811268',
|
|
34
|
+
width: 30,
|
|
35
|
+
height: 30,
|
|
36
|
+
excavate: true,
|
|
37
|
+
},
|
|
38
|
+
}},
|
|
39
|
+
components: {
|
|
40
|
+
QrcodeVue: QrcodeVue.default,
|
|
41
|
+
QrcodeCanvas: QrcodeVue.QrcodeCanvas,
|
|
42
|
+
QrcodeSvg: QrcodeVue.QrcodeSvg,
|
|
43
|
+
},
|
|
44
|
+
}).mount('#root')
|
|
45
|
+
</script>
|
|
46
|
+
```
|
|
47
|
+
|
|
1
48
|
## [3.4.1] - 2023-08-05
|
|
2
49
|
|
|
3
50
|
### BUGFIX
|
package/README-ja.md
CHANGED
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
# qrcode.vue
|
|
2
2
|
|
|
3
|
-
⚠️ 現在、Vue 3.xを使用している場合は、`qrcode.vue
|
|
3
|
+
⚠️ 現在、Vue 3.xを使用している場合は、`qrcode.vue` を`3.x`にアップグレードしてください。
|
|
4
4
|
|
|
5
|
-
🔒 Vue 2.x
|
|
5
|
+
🔒 Vue 2.xを使用している場合は、バージョン `1.x` を使用し続けてください。
|
|
6
6
|
|
|
7
|
-
[QRコード](https://en.wikipedia.org/wiki/QR_code)を生成するためのVue.jsコンポーネントです。Vue 2とVue 3の両方をサポートしています。
|
|
7
|
+
[QRコード](https://en.wikipedia.org/wiki/QR_code)を生成するための Vue.js コンポーネントです。Vue 2 と Vue 3 の両方をサポートしています。
|
|
8
8
|
|
|
9
|
-
[](https://github.com/scopewu/qrcode.vue/blob/
|
|
9
|
+
[](https://github.com/scopewu/qrcode.vue/blob/main/LICENSE)
|
|
10
10
|
|
|
11
11
|
[English](./README.md)
|
|
12
12
|
|
|
13
13
|
## インストール
|
|
14
14
|
|
|
15
|
-
`qrcode.vue`コンポーネントをVue.jsアプリに使用できます。
|
|
15
|
+
`qrcode.vue`コンポーネントを Vue.js アプリに使用できます。
|
|
16
16
|
|
|
17
17
|
```bash
|
|
18
18
|
npm install --save qrcode.vue # yarn add qrcode.vue
|
|
@@ -28,7 +28,7 @@ dist/
|
|
|
28
28
|
|
|
29
29
|
## 使用方法
|
|
30
30
|
|
|
31
|
-
|
|
31
|
+
e.g.
|
|
32
32
|
|
|
33
33
|
```javascript
|
|
34
34
|
import { createApp } from 'vue'
|
|
@@ -45,7 +45,7 @@ createApp({
|
|
|
45
45
|
}).mount('#root')
|
|
46
46
|
```
|
|
47
47
|
|
|
48
|
-
または、`*.vue
|
|
48
|
+
または、`*.vue` 拡張子の単一ファイルコンポーネントで使用します:
|
|
49
49
|
|
|
50
50
|
```html
|
|
51
51
|
<template>
|
|
@@ -68,7 +68,7 @@ createApp({
|
|
|
68
68
|
</script>
|
|
69
69
|
```
|
|
70
70
|
|
|
71
|
-
Vue 3
|
|
71
|
+
Vue 3で `TypeScript` を使用する場合:
|
|
72
72
|
|
|
73
73
|
```html
|
|
74
74
|
<template>
|
|
@@ -78,13 +78,17 @@ Vue 3で`TypeScript`を使用する場合:
|
|
|
78
78
|
:render-as="renderAs"
|
|
79
79
|
:background="background"
|
|
80
80
|
:foreground='foreground'
|
|
81
|
+
:gradient="gradient"
|
|
82
|
+
:gradient-type="gradientType"
|
|
83
|
+
:gradient-start-color="gradientStartColor"
|
|
84
|
+
:gradient-end-color="gradientEndColor"
|
|
81
85
|
:image-settings='imageSettings'
|
|
82
86
|
/>
|
|
83
87
|
</template>
|
|
84
88
|
<script setup lang="ts">
|
|
85
89
|
import { ref } from 'vue'
|
|
86
90
|
import QrcodeVue from 'qrcode.vue'
|
|
87
|
-
import type { Level, RenderAs, ImageSettings } from 'qrcode.vue'
|
|
91
|
+
import type { Level, RenderAs, GradientType, ImageSettings } from 'qrcode.vue'
|
|
88
92
|
|
|
89
93
|
const value = ref('qrcode')
|
|
90
94
|
const level = ref<Level>('M')
|
|
@@ -92,6 +96,8 @@ Vue 3で`TypeScript`を使用する場合:
|
|
|
92
96
|
const background = ref('#ffffff')
|
|
93
97
|
const foreground = ref('#000000')
|
|
94
98
|
const margin = ref(0)
|
|
99
|
+
|
|
100
|
+
// 画像の設定
|
|
95
101
|
const imageSettings = ref<ImageSettings>({
|
|
96
102
|
src: 'https://github.com/scopewu.png',
|
|
97
103
|
width: 30,
|
|
@@ -100,6 +106,12 @@ Vue 3で`TypeScript`を使用する場合:
|
|
|
100
106
|
// y: 10,
|
|
101
107
|
excavate: true,
|
|
102
108
|
})
|
|
109
|
+
|
|
110
|
+
// グラデーション
|
|
111
|
+
const gradient = ref(false)
|
|
112
|
+
const gradientType = ref<GradientType>('linear')
|
|
113
|
+
const gradientStartColor = ref('#000000')
|
|
114
|
+
const gradientEndColor = ref('#38bdf8')
|
|
103
115
|
</script>
|
|
104
116
|
```
|
|
105
117
|
|
|
@@ -172,6 +184,34 @@ QRコードの前景色。
|
|
|
172
184
|
|
|
173
185
|
The settings to support qrcode image logo.
|
|
174
186
|
|
|
187
|
+
### `gradient`
|
|
188
|
+
|
|
189
|
+
- タイプ:`boolean`
|
|
190
|
+
- デフォルト:`false`
|
|
191
|
+
|
|
192
|
+
QRコードのグラデーション塗りつぶしを有効にします。
|
|
193
|
+
|
|
194
|
+
### `gradient-type`
|
|
195
|
+
|
|
196
|
+
- タイプ:`GradientType('linear' | 'radial')`
|
|
197
|
+
- デフォルト:`linear`
|
|
198
|
+
|
|
199
|
+
グラデーションの種類を指定します。
|
|
200
|
+
|
|
201
|
+
### `gradient-start-color`
|
|
202
|
+
|
|
203
|
+
- タイプ:`string`
|
|
204
|
+
- デフォルト:`#000000`
|
|
205
|
+
|
|
206
|
+
グラデーションの開始色。
|
|
207
|
+
|
|
208
|
+
### `gradient-end-color`
|
|
209
|
+
|
|
210
|
+
- タイプ:`string`
|
|
211
|
+
- デフォルト:`#ffffff`
|
|
212
|
+
|
|
213
|
+
グラデーションの終了色。
|
|
214
|
+
|
|
175
215
|
### `class`
|
|
176
216
|
|
|
177
217
|
- タイプ:`string`
|
|
@@ -179,6 +219,49 @@ The settings to support qrcode image logo.
|
|
|
179
219
|
|
|
180
220
|
QRコード要素のクラス名。
|
|
181
221
|
|
|
222
|
+
## `QrcodeVue` 3.5+
|
|
223
|
+
|
|
224
|
+
`QrcodeVue` 3.5+ exports separate `QrcodeCanvas` and `QrcodeSvg` components, for which the rollup configuration has been modified:
|
|
225
|
+
|
|
226
|
+
```
|
|
227
|
+
// rollup.config.js
|
|
228
|
+
|
|
229
|
+
- exports: 'default',
|
|
230
|
+
+ exports: 'named',
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
Direct references to `QrcodeVue` in common.js and cdn now require the `default` field:
|
|
234
|
+
|
|
235
|
+
```js
|
|
236
|
+
const QrcodeVue = require('qrcode.vue').default
|
|
237
|
+
const { default: QrcodeVue, QrcodeCanvas, QrcodeSvg } = require('qrcode.vue')
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
```html
|
|
241
|
+
<!--With HTML-->
|
|
242
|
+
<div id="root">
|
|
243
|
+
<p class="flex space-x">
|
|
244
|
+
<qrcode-vue :value="test" render-as="svg"></qrcode-vue>
|
|
245
|
+
<qrcode-canvas :value="test"></qrcode-canvas>
|
|
246
|
+
</p>
|
|
247
|
+
<p><input v-model="test" /></p>
|
|
248
|
+
</div>
|
|
249
|
+
<script src="https://cdn.jsdelivr.net/npm/vue@3.5/dist/vue.global.prod.js"></script>
|
|
250
|
+
<script src="https://cdn.jsdelivr.net/npm/qrcode.vue@3.5/dist/qrcode.vue.browser.min.js"></script>
|
|
251
|
+
|
|
252
|
+
<script>
|
|
253
|
+
Vue.createApp({
|
|
254
|
+
data() { return {
|
|
255
|
+
test: 'Hello World',
|
|
256
|
+
}},
|
|
257
|
+
components: {
|
|
258
|
+
QrcodeVue: QrcodeVue.default,
|
|
259
|
+
QrcodeCanvas: QrcodeVue.QrcodeCanvas,
|
|
260
|
+
},
|
|
261
|
+
}).mount('#root')
|
|
262
|
+
</script>
|
|
263
|
+
```
|
|
264
|
+
|
|
182
265
|
## ライセンス
|
|
183
266
|
|
|
184
267
|
copyright © 2021 @scopewu, license by [MIT](https://github.com/scopewu/qrcode.vue/blob/main/LICENSE)
|
package/README-zh_cn.md
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
|
|
7
7
|
一款 Vue.js 二维码组件,同时支持 Vue 2 和 Vue 3.
|
|
8
8
|
|
|
9
|
-
[](https://github.com/scopewu/qrcode.vue/blob/
|
|
9
|
+
[](https://github.com/scopewu/qrcode.vue/blob/main/LICENSE)
|
|
10
10
|
|
|
11
11
|
## 快速开始
|
|
12
12
|
|
|
@@ -76,13 +76,17 @@ createApp({
|
|
|
76
76
|
:render-as="renderAs"
|
|
77
77
|
:background="background"
|
|
78
78
|
:foreground='foreground'
|
|
79
|
+
:gradient="gradient"
|
|
80
|
+
:gradient-type="gradientType"
|
|
81
|
+
:gradient-start-color="gradientStartColor"
|
|
82
|
+
:gradient-end-color="gradientEndColor"
|
|
79
83
|
:image-settings='imageSettings'
|
|
80
84
|
/>
|
|
81
85
|
</template>
|
|
82
86
|
<script setup lang="ts">
|
|
83
87
|
import { ref } from 'vue'
|
|
84
88
|
import QrcodeVue from 'qrcode.vue'
|
|
85
|
-
import type { Level, RenderAs, ImageSettings } from 'qrcode.vue'
|
|
89
|
+
import type { Level, RenderAs, GradientType, ImageSettings } from 'qrcode.vue'
|
|
86
90
|
|
|
87
91
|
const value = ref('qrcode')
|
|
88
92
|
const level = ref<Level>('M')
|
|
@@ -90,6 +94,8 @@ createApp({
|
|
|
90
94
|
const background = ref('#ffffff')
|
|
91
95
|
const foreground = ref('#000000')
|
|
92
96
|
const margin = ref(0)
|
|
97
|
+
|
|
98
|
+
// 可传入二维码图片相关的属性,支持二维码 LOGO;
|
|
93
99
|
const imageSettings = ref<ImageSettings>({
|
|
94
100
|
src: 'https://github.com/scopewu.png',
|
|
95
101
|
width: 30,
|
|
@@ -98,6 +104,12 @@ createApp({
|
|
|
98
104
|
// y: 10,
|
|
99
105
|
excavate: true,
|
|
100
106
|
})
|
|
107
|
+
|
|
108
|
+
// 可传入渐变相关的属性,支持渐变:
|
|
109
|
+
const gradient = ref(false)
|
|
110
|
+
const gradientType = ref<GradientType>('linear')
|
|
111
|
+
const gradientStartColor = ref('#000000')
|
|
112
|
+
const gradientEndColor = ref('#38bdf8')
|
|
101
113
|
</script>
|
|
102
114
|
```
|
|
103
115
|
|
|
@@ -173,6 +185,34 @@ createApp({
|
|
|
173
185
|
|
|
174
186
|
二维码图片 logo 配置。
|
|
175
187
|
|
|
188
|
+
### `gradient`
|
|
189
|
+
|
|
190
|
+
- 类型: `boolean`
|
|
191
|
+
- 默认值: `false`
|
|
192
|
+
|
|
193
|
+
启用二维码的渐变填充。
|
|
194
|
+
|
|
195
|
+
### `gradient-type`
|
|
196
|
+
|
|
197
|
+
- 类型: `GradientType('linear' | 'radial')`
|
|
198
|
+
- 默认值: `linear`
|
|
199
|
+
|
|
200
|
+
指定渐变类型。
|
|
201
|
+
|
|
202
|
+
### `gradient-start-color`
|
|
203
|
+
|
|
204
|
+
- 类型: `string`
|
|
205
|
+
- 默认值: `#000000`
|
|
206
|
+
|
|
207
|
+
渐变的起始颜色。
|
|
208
|
+
|
|
209
|
+
### `gradient-end-color`
|
|
210
|
+
|
|
211
|
+
- 类型: `string`
|
|
212
|
+
- 默认值: `#ffffff`
|
|
213
|
+
|
|
214
|
+
渐变的结束颜色。
|
|
215
|
+
|
|
176
216
|
### `class`
|
|
177
217
|
|
|
178
218
|
- 类型:`string`
|
|
@@ -180,6 +220,49 @@ createApp({
|
|
|
180
220
|
|
|
181
221
|
传递给二维码根元素的类名。
|
|
182
222
|
|
|
223
|
+
## `QrcodeVue` 3.5+
|
|
224
|
+
|
|
225
|
+
`QrcodeVue` 3.5+ 后导出独立的 `QrcodeCanvas` 和 `QrcodeSvg` 组件,为此修改了 rollup 的配置:
|
|
226
|
+
|
|
227
|
+
```
|
|
228
|
+
// rollup.config.js
|
|
229
|
+
|
|
230
|
+
- exports: 'default',
|
|
231
|
+
+ exports: 'named',
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
现在在 common.js 和 cdn 直接引用 `QrcodeVue` 需要使用 `default` 字段:
|
|
235
|
+
|
|
236
|
+
```js
|
|
237
|
+
const QrcodeVue = require('qrcode.vue').default
|
|
238
|
+
const { default: QrcodeVue, QrcodeCanvas, QrcodeSvg } = require('qrcode.vue')
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
```html
|
|
242
|
+
<!--With HTML-->
|
|
243
|
+
<div id="root">
|
|
244
|
+
<p class="flex space-x">
|
|
245
|
+
<qrcode-vue :value="test" render-as="svg"></qrcode-vue>
|
|
246
|
+
<qrcode-canvas :value="test"></qrcode-canvas>
|
|
247
|
+
</p>
|
|
248
|
+
<p><input v-model="test" /></p>
|
|
249
|
+
</div>
|
|
250
|
+
<script src="https://cdn.jsdelivr.net/npm/vue@3.5/dist/vue.global.prod.js"></script>
|
|
251
|
+
<script src="https://cdn.jsdelivr.net/npm/qrcode.vue@3.5/dist/qrcode.vue.browser.min.js"></script>
|
|
252
|
+
|
|
253
|
+
<script>
|
|
254
|
+
Vue.createApp({
|
|
255
|
+
data() { return {
|
|
256
|
+
test: 'Hello World',
|
|
257
|
+
}},
|
|
258
|
+
components: {
|
|
259
|
+
QrcodeVue: QrcodeVue.default,
|
|
260
|
+
QrcodeCanvas: QrcodeVue.QrcodeCanvas,
|
|
261
|
+
},
|
|
262
|
+
}).mount('#root')
|
|
263
|
+
</script>
|
|
264
|
+
```
|
|
265
|
+
|
|
183
266
|
## 软件许可
|
|
184
267
|
|
|
185
268
|
copyright © 2021 scopewu, license by [MIT](https://github.com/scopewu/qrcode.vue/blob/main/LICENSE)
|
package/README.md
CHANGED
|
@@ -6,8 +6,6 @@
|
|
|
6
6
|
|
|
7
7
|
A Vue.js component to generate [QRCode](https://en.wikipedia.org/wiki/QR_code). Both support Vue 2 and Vue 3.
|
|
8
8
|
|
|
9
|
-
[](https://github.com/scopewu/qrcode.vue/blob/master/LICENSE)
|
|
10
|
-
|
|
11
9
|
[中文](./README-zh_cn.md) | [日本語](./README-ja.md)
|
|
12
10
|
|
|
13
11
|
## install
|
|
@@ -82,13 +80,17 @@ When you use the component with Vue 3 with `TypeScript`:
|
|
|
82
80
|
:render-as="renderAs"
|
|
83
81
|
:background="background"
|
|
84
82
|
:foreground='foreground'
|
|
83
|
+
:gradient="gradient"
|
|
84
|
+
:gradient-type="gradientType"
|
|
85
|
+
:gradient-start-color="gradientStartColor"
|
|
86
|
+
:gradient-end-color="gradientEndColor"
|
|
85
87
|
:image-settings='imageSettings'
|
|
86
88
|
/>
|
|
87
89
|
</template>
|
|
88
90
|
<script setup lang="ts">
|
|
89
91
|
import { ref } from 'vue'
|
|
90
92
|
import QrcodeVue from 'qrcode.vue'
|
|
91
|
-
import type { Level, RenderAs, ImageSettings } from 'qrcode.vue'
|
|
93
|
+
import type { Level, RenderAs, GradientType, ImageSettings } from 'qrcode.vue'
|
|
92
94
|
|
|
93
95
|
const value = ref('qrcode')
|
|
94
96
|
const level = ref<Level>('M')
|
|
@@ -96,6 +98,7 @@ When you use the component with Vue 3 with `TypeScript`:
|
|
|
96
98
|
const background = ref('#ffffff')
|
|
97
99
|
const foreground = ref('#000000')
|
|
98
100
|
const margin = ref(0)
|
|
101
|
+
|
|
99
102
|
const imageSettings = ref<ImageSettings>({
|
|
100
103
|
src: 'https://github.com/scopewu.png',
|
|
101
104
|
width: 30,
|
|
@@ -104,6 +107,11 @@ When you use the component with Vue 3 with `TypeScript`:
|
|
|
104
107
|
// y: 10,
|
|
105
108
|
excavate: true,
|
|
106
109
|
})
|
|
110
|
+
|
|
111
|
+
const gradient = ref(false)
|
|
112
|
+
const gradientType = ref<GradientType>('linear')
|
|
113
|
+
const gradientStartColor = ref('#000000')
|
|
114
|
+
const gradientEndColor = ref('#38bdf8')
|
|
107
115
|
</script>
|
|
108
116
|
```
|
|
109
117
|
|
|
@@ -176,6 +184,34 @@ The foreground color of qrcode.
|
|
|
176
184
|
|
|
177
185
|
The settings to support qrcode image logo.
|
|
178
186
|
|
|
187
|
+
### `gradient`
|
|
188
|
+
|
|
189
|
+
- Type: `boolean`
|
|
190
|
+
- Default: `false`
|
|
191
|
+
|
|
192
|
+
Enable gradient fill for the QR code.
|
|
193
|
+
|
|
194
|
+
### `gradient-type`
|
|
195
|
+
|
|
196
|
+
- Type: `GradientType('linear' | 'radial')`
|
|
197
|
+
- Default: `linear`
|
|
198
|
+
|
|
199
|
+
Specify the type of gradient.
|
|
200
|
+
|
|
201
|
+
### `gradient-start-color`
|
|
202
|
+
|
|
203
|
+
- Type: `string`
|
|
204
|
+
- Default: `#000000`
|
|
205
|
+
|
|
206
|
+
The start color of the gradient.
|
|
207
|
+
|
|
208
|
+
### `gradient-end-color`
|
|
209
|
+
|
|
210
|
+
- Type: `string`
|
|
211
|
+
- Default: `#ffffff`
|
|
212
|
+
|
|
213
|
+
The end color of the gradient.
|
|
214
|
+
|
|
179
215
|
### `class`
|
|
180
216
|
|
|
181
217
|
- Type: `string`
|
|
@@ -183,6 +219,49 @@ The settings to support qrcode image logo.
|
|
|
183
219
|
|
|
184
220
|
The class name of qrcode element.
|
|
185
221
|
|
|
222
|
+
## `QrcodeVue` 3.5+
|
|
223
|
+
|
|
224
|
+
`QrcodeVue` 3.5+ exports separate `QrcodeCanvas` and `QrcodeSvg` components, for which the rollup configuration has been modified:
|
|
225
|
+
|
|
226
|
+
```
|
|
227
|
+
// rollup.config.js
|
|
228
|
+
|
|
229
|
+
- exports: 'default',
|
|
230
|
+
+ exports: 'named',
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
Direct references to `QrcodeVue` in common.js and cdn now require the `default` field:
|
|
234
|
+
|
|
235
|
+
```js
|
|
236
|
+
const QrcodeVue = require('qrcode.vue').default
|
|
237
|
+
const { default: QrcodeVue, QrcodeCanvas, QrcodeSvg } = require('qrcode.vue')
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
```html
|
|
241
|
+
<!--With HTML-->
|
|
242
|
+
<div id="root">
|
|
243
|
+
<p class="flex space-x">
|
|
244
|
+
<qrcode-vue :value="test" render-as="svg"></qrcode-vue>
|
|
245
|
+
<qrcode-canvas :value="test"></qrcode-canvas>
|
|
246
|
+
</p>
|
|
247
|
+
<p><input v-model="test" /></p>
|
|
248
|
+
</div>
|
|
249
|
+
<script src="https://cdn.jsdelivr.net/npm/vue@3.5/dist/vue.global.prod.js"></script>
|
|
250
|
+
<script src="https://cdn.jsdelivr.net/npm/qrcode.vue@3.5/dist/qrcode.vue.browser.min.js"></script>
|
|
251
|
+
|
|
252
|
+
<script>
|
|
253
|
+
Vue.createApp({
|
|
254
|
+
data() { return {
|
|
255
|
+
test: 'Hello World',
|
|
256
|
+
}},
|
|
257
|
+
components: {
|
|
258
|
+
QrcodeVue: QrcodeVue.default,
|
|
259
|
+
QrcodeCanvas: QrcodeVue.QrcodeCanvas,
|
|
260
|
+
},
|
|
261
|
+
}).mount('#root')
|
|
262
|
+
</script>
|
|
263
|
+
```
|
|
264
|
+
|
|
186
265
|
## License
|
|
187
266
|
|
|
188
267
|
copyright © 2021 @scopewu, license by [MIT](https://github.com/scopewu/qrcode.vue/blob/main/LICENSE)
|
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { PropType } from 'vue';
|
|
2
2
|
export type Level = 'L' | 'M' | 'Q' | 'H';
|
|
3
3
|
export type RenderAs = 'canvas' | 'svg';
|
|
4
|
+
export type GradientType = 'linear' | 'radial';
|
|
4
5
|
export type ImageSettings = {
|
|
5
6
|
src: string;
|
|
6
7
|
x?: number;
|
|
@@ -42,6 +43,27 @@ export declare const QrcodeSvg: import("vue").DefineComponent<import("vue").Extr
|
|
|
42
43
|
required: boolean;
|
|
43
44
|
default: () => {};
|
|
44
45
|
};
|
|
46
|
+
gradient: {
|
|
47
|
+
type: BooleanConstructor;
|
|
48
|
+
required: boolean;
|
|
49
|
+
default: boolean;
|
|
50
|
+
};
|
|
51
|
+
gradientType: {
|
|
52
|
+
type: PropType<GradientType>;
|
|
53
|
+
required: boolean;
|
|
54
|
+
default: string;
|
|
55
|
+
validator: (t: any) => boolean;
|
|
56
|
+
};
|
|
57
|
+
gradientStartColor: {
|
|
58
|
+
type: StringConstructor;
|
|
59
|
+
required: boolean;
|
|
60
|
+
default: string;
|
|
61
|
+
};
|
|
62
|
+
gradientEndColor: {
|
|
63
|
+
type: StringConstructor;
|
|
64
|
+
required: boolean;
|
|
65
|
+
default: string;
|
|
66
|
+
};
|
|
45
67
|
}>, () => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
|
|
46
68
|
[key: string]: any;
|
|
47
69
|
}>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
|
|
@@ -77,6 +99,27 @@ export declare const QrcodeSvg: import("vue").DefineComponent<import("vue").Extr
|
|
|
77
99
|
required: boolean;
|
|
78
100
|
default: () => {};
|
|
79
101
|
};
|
|
102
|
+
gradient: {
|
|
103
|
+
type: BooleanConstructor;
|
|
104
|
+
required: boolean;
|
|
105
|
+
default: boolean;
|
|
106
|
+
};
|
|
107
|
+
gradientType: {
|
|
108
|
+
type: PropType<GradientType>;
|
|
109
|
+
required: boolean;
|
|
110
|
+
default: string;
|
|
111
|
+
validator: (t: any) => boolean;
|
|
112
|
+
};
|
|
113
|
+
gradientStartColor: {
|
|
114
|
+
type: StringConstructor;
|
|
115
|
+
required: boolean;
|
|
116
|
+
default: string;
|
|
117
|
+
};
|
|
118
|
+
gradientEndColor: {
|
|
119
|
+
type: StringConstructor;
|
|
120
|
+
required: boolean;
|
|
121
|
+
default: string;
|
|
122
|
+
};
|
|
80
123
|
}>> & Readonly<{}>, {
|
|
81
124
|
value: string;
|
|
82
125
|
size: number;
|
|
@@ -85,6 +128,10 @@ export declare const QrcodeSvg: import("vue").DefineComponent<import("vue").Extr
|
|
|
85
128
|
foreground: string;
|
|
86
129
|
margin: number;
|
|
87
130
|
imageSettings: ImageSettings;
|
|
131
|
+
gradient: boolean;
|
|
132
|
+
gradientType: GradientType;
|
|
133
|
+
gradientStartColor: string;
|
|
134
|
+
gradientEndColor: string;
|
|
88
135
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
89
136
|
export declare const QrcodeCanvas: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
|
|
90
137
|
value: {
|
|
@@ -119,6 +166,27 @@ export declare const QrcodeCanvas: import("vue").DefineComponent<import("vue").E
|
|
|
119
166
|
required: boolean;
|
|
120
167
|
default: () => {};
|
|
121
168
|
};
|
|
169
|
+
gradient: {
|
|
170
|
+
type: BooleanConstructor;
|
|
171
|
+
required: boolean;
|
|
172
|
+
default: boolean;
|
|
173
|
+
};
|
|
174
|
+
gradientType: {
|
|
175
|
+
type: PropType<GradientType>;
|
|
176
|
+
required: boolean;
|
|
177
|
+
default: string;
|
|
178
|
+
validator: (t: any) => boolean;
|
|
179
|
+
};
|
|
180
|
+
gradientStartColor: {
|
|
181
|
+
type: StringConstructor;
|
|
182
|
+
required: boolean;
|
|
183
|
+
default: string;
|
|
184
|
+
};
|
|
185
|
+
gradientEndColor: {
|
|
186
|
+
type: StringConstructor;
|
|
187
|
+
required: boolean;
|
|
188
|
+
default: string;
|
|
189
|
+
};
|
|
122
190
|
}>, () => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
|
|
123
191
|
[key: string]: any;
|
|
124
192
|
}>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
|
|
@@ -154,6 +222,27 @@ export declare const QrcodeCanvas: import("vue").DefineComponent<import("vue").E
|
|
|
154
222
|
required: boolean;
|
|
155
223
|
default: () => {};
|
|
156
224
|
};
|
|
225
|
+
gradient: {
|
|
226
|
+
type: BooleanConstructor;
|
|
227
|
+
required: boolean;
|
|
228
|
+
default: boolean;
|
|
229
|
+
};
|
|
230
|
+
gradientType: {
|
|
231
|
+
type: PropType<GradientType>;
|
|
232
|
+
required: boolean;
|
|
233
|
+
default: string;
|
|
234
|
+
validator: (t: any) => boolean;
|
|
235
|
+
};
|
|
236
|
+
gradientStartColor: {
|
|
237
|
+
type: StringConstructor;
|
|
238
|
+
required: boolean;
|
|
239
|
+
default: string;
|
|
240
|
+
};
|
|
241
|
+
gradientEndColor: {
|
|
242
|
+
type: StringConstructor;
|
|
243
|
+
required: boolean;
|
|
244
|
+
default: string;
|
|
245
|
+
};
|
|
157
246
|
}>> & Readonly<{}>, {
|
|
158
247
|
value: string;
|
|
159
248
|
size: number;
|
|
@@ -162,6 +251,10 @@ export declare const QrcodeCanvas: import("vue").DefineComponent<import("vue").E
|
|
|
162
251
|
foreground: string;
|
|
163
252
|
margin: number;
|
|
164
253
|
imageSettings: ImageSettings;
|
|
254
|
+
gradient: boolean;
|
|
255
|
+
gradientType: GradientType;
|
|
256
|
+
gradientStartColor: string;
|
|
257
|
+
gradientEndColor: string;
|
|
165
258
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
166
259
|
declare const QrcodeVue: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
|
|
167
260
|
renderAs: {
|
|
@@ -202,6 +295,27 @@ declare const QrcodeVue: import("vue").DefineComponent<import("vue").ExtractProp
|
|
|
202
295
|
required: boolean;
|
|
203
296
|
default: () => {};
|
|
204
297
|
};
|
|
298
|
+
gradient: {
|
|
299
|
+
type: BooleanConstructor;
|
|
300
|
+
required: boolean;
|
|
301
|
+
default: boolean;
|
|
302
|
+
};
|
|
303
|
+
gradientType: {
|
|
304
|
+
type: PropType<GradientType>;
|
|
305
|
+
required: boolean;
|
|
306
|
+
default: string;
|
|
307
|
+
validator: (t: any) => boolean;
|
|
308
|
+
};
|
|
309
|
+
gradientStartColor: {
|
|
310
|
+
type: StringConstructor;
|
|
311
|
+
required: boolean;
|
|
312
|
+
default: string;
|
|
313
|
+
};
|
|
314
|
+
gradientEndColor: {
|
|
315
|
+
type: StringConstructor;
|
|
316
|
+
required: boolean;
|
|
317
|
+
default: string;
|
|
318
|
+
};
|
|
205
319
|
}>, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
|
|
206
320
|
renderAs: {
|
|
207
321
|
type: PropType<RenderAs>;
|
|
@@ -241,6 +355,27 @@ declare const QrcodeVue: import("vue").DefineComponent<import("vue").ExtractProp
|
|
|
241
355
|
required: boolean;
|
|
242
356
|
default: () => {};
|
|
243
357
|
};
|
|
358
|
+
gradient: {
|
|
359
|
+
type: BooleanConstructor;
|
|
360
|
+
required: boolean;
|
|
361
|
+
default: boolean;
|
|
362
|
+
};
|
|
363
|
+
gradientType: {
|
|
364
|
+
type: PropType<GradientType>;
|
|
365
|
+
required: boolean;
|
|
366
|
+
default: string;
|
|
367
|
+
validator: (t: any) => boolean;
|
|
368
|
+
};
|
|
369
|
+
gradientStartColor: {
|
|
370
|
+
type: StringConstructor;
|
|
371
|
+
required: boolean;
|
|
372
|
+
default: string;
|
|
373
|
+
};
|
|
374
|
+
gradientEndColor: {
|
|
375
|
+
type: StringConstructor;
|
|
376
|
+
required: boolean;
|
|
377
|
+
default: string;
|
|
378
|
+
};
|
|
244
379
|
}>> & Readonly<{}>, {
|
|
245
380
|
value: string;
|
|
246
381
|
size: number;
|
|
@@ -249,6 +384,10 @@ declare const QrcodeVue: import("vue").DefineComponent<import("vue").ExtractProp
|
|
|
249
384
|
foreground: string;
|
|
250
385
|
margin: number;
|
|
251
386
|
imageSettings: ImageSettings;
|
|
387
|
+
gradient: boolean;
|
|
388
|
+
gradientType: GradientType;
|
|
389
|
+
gradientStartColor: string;
|
|
390
|
+
gradientEndColor: string;
|
|
252
391
|
renderAs: RenderAs;
|
|
253
392
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
254
393
|
export default QrcodeVue;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* qrcode.vue v3.
|
|
2
|
+
* qrcode.vue v3.6.0
|
|
3
3
|
* A Vue.js component to generate QRCode. Both support Vue 2 and Vue 3
|
|
4
4
|
* © 2017-PRESENT @scopewu(https://github.com/scopewu)
|
|
5
5
|
* MIT License.
|
|
@@ -24,7 +24,7 @@ LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
|
|
24
24
|
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
|
25
25
|
PERFORMANCE OF THIS SOFTWARE.
|
|
26
26
|
***************************************************************************** */
|
|
27
|
-
/* global Reflect, Promise, SuppressedError, Symbol */
|
|
27
|
+
/* global Reflect, Promise, SuppressedError, Symbol, Iterator */
|
|
28
28
|
|
|
29
29
|
|
|
30
30
|
var __assign = function() {
|
|
@@ -1031,6 +1031,27 @@ var QRCodeProps = {
|
|
|
1031
1031
|
required: false,
|
|
1032
1032
|
default: function () { return ({}); },
|
|
1033
1033
|
},
|
|
1034
|
+
gradient: {
|
|
1035
|
+
type: Boolean,
|
|
1036
|
+
required: false,
|
|
1037
|
+
default: false,
|
|
1038
|
+
},
|
|
1039
|
+
gradientType: {
|
|
1040
|
+
type: String,
|
|
1041
|
+
required: false,
|
|
1042
|
+
default: 'linear',
|
|
1043
|
+
validator: function (t) { return ['linear', 'radial'].indexOf(t) > -1; },
|
|
1044
|
+
},
|
|
1045
|
+
gradientStartColor: {
|
|
1046
|
+
type: String,
|
|
1047
|
+
required: false,
|
|
1048
|
+
default: '#000',
|
|
1049
|
+
},
|
|
1050
|
+
gradientEndColor: {
|
|
1051
|
+
type: String,
|
|
1052
|
+
required: false,
|
|
1053
|
+
default: '#fff',
|
|
1054
|
+
},
|
|
1034
1055
|
};
|
|
1035
1056
|
var QRCodeVueProps = __assign(__assign({}, QRCodeProps), { renderAs: {
|
|
1036
1057
|
type: String,
|
|
@@ -1046,7 +1067,9 @@ var QrcodeSvg = vue.defineComponent({
|
|
|
1046
1067
|
var fgPath = vue.ref('');
|
|
1047
1068
|
var imageProps;
|
|
1048
1069
|
var generate = function () {
|
|
1049
|
-
var value = props.value,
|
|
1070
|
+
var value = props.value, _level = props.level, _margin = props.margin;
|
|
1071
|
+
var margin = _margin >>> 0;
|
|
1072
|
+
var level = validErrorCorrectLevel(_level) ? _level : defaultErrorCorrectLevel;
|
|
1050
1073
|
var cells = QR.QrCode.encodeText(value, ErrorCorrectLevelMap[level]).getModules();
|
|
1051
1074
|
numCells.value = cells.length + margin * 2;
|
|
1052
1075
|
if (props.imageSettings.src) {
|
|
@@ -1069,6 +1092,34 @@ var QrcodeSvg = vue.defineComponent({
|
|
|
1069
1092
|
// For level 40, 31329 -> 2
|
|
1070
1093
|
fgPath.value = generatePath(cells, margin);
|
|
1071
1094
|
};
|
|
1095
|
+
var renderGradient = function () {
|
|
1096
|
+
if (!props.gradient)
|
|
1097
|
+
return null;
|
|
1098
|
+
var gradientProps = props.gradientType === 'linear'
|
|
1099
|
+
? {
|
|
1100
|
+
x1: '0%',
|
|
1101
|
+
y1: '0%',
|
|
1102
|
+
x2: '100%',
|
|
1103
|
+
y2: '100%',
|
|
1104
|
+
}
|
|
1105
|
+
: {
|
|
1106
|
+
cx: '50%',
|
|
1107
|
+
cy: '50%',
|
|
1108
|
+
r: '50%',
|
|
1109
|
+
fx: '50%',
|
|
1110
|
+
fy: '50%',
|
|
1111
|
+
};
|
|
1112
|
+
return vue.h(props.gradientType === 'linear' ? 'linearGradient' : 'radialGradient', __assign({ id: 'qr-gradient' }, gradientProps), [
|
|
1113
|
+
vue.h('stop', {
|
|
1114
|
+
offset: '0%',
|
|
1115
|
+
style: { stopColor: props.gradientStartColor },
|
|
1116
|
+
}),
|
|
1117
|
+
vue.h('stop', {
|
|
1118
|
+
offset: '100%',
|
|
1119
|
+
style: { stopColor: props.gradientEndColor },
|
|
1120
|
+
}),
|
|
1121
|
+
]);
|
|
1122
|
+
};
|
|
1072
1123
|
generate();
|
|
1073
1124
|
vue.onUpdated(generate);
|
|
1074
1125
|
return function () { return vue.h('svg', {
|
|
@@ -1078,11 +1129,16 @@ var QrcodeSvg = vue.defineComponent({
|
|
|
1078
1129
|
xmlns: 'http://www.w3.org/2000/svg',
|
|
1079
1130
|
viewBox: "0 0 ".concat(numCells.value, " ").concat(numCells.value),
|
|
1080
1131
|
}, [
|
|
1081
|
-
vue.h('
|
|
1132
|
+
vue.h('defs', {}, [renderGradient()]),
|
|
1133
|
+
vue.h('rect', {
|
|
1134
|
+
width: '100%',
|
|
1135
|
+
height: '100%',
|
|
1082
1136
|
fill: props.background,
|
|
1083
|
-
d: "M0,0 h".concat(numCells.value, "v").concat(numCells.value, "H0z"),
|
|
1084
1137
|
}),
|
|
1085
|
-
vue.h('path', {
|
|
1138
|
+
vue.h('path', {
|
|
1139
|
+
fill: props.gradient ? 'url(#qr-gradient)' : props.foreground,
|
|
1140
|
+
d: fgPath.value,
|
|
1141
|
+
}),
|
|
1086
1142
|
props.imageSettings.src && vue.h('image', __assign({ href: props.imageSettings.src }, imageProps)),
|
|
1087
1143
|
]); };
|
|
1088
1144
|
},
|
|
@@ -1094,7 +1150,9 @@ var QrcodeCanvas = vue.defineComponent({
|
|
|
1094
1150
|
var canvasEl = vue.ref(null);
|
|
1095
1151
|
var imageRef = vue.ref(null);
|
|
1096
1152
|
var generate = function () {
|
|
1097
|
-
var value = props.value,
|
|
1153
|
+
var value = props.value, _level = props.level, size = props.size, _margin = props.margin, background = props.background, foreground = props.foreground, gradient = props.gradient, gradientType = props.gradientType, gradientStartColor = props.gradientStartColor, gradientEndColor = props.gradientEndColor;
|
|
1154
|
+
var margin = _margin >>> 0;
|
|
1155
|
+
var level = validErrorCorrectLevel(_level) ? _level : defaultErrorCorrectLevel;
|
|
1098
1156
|
var canvas = canvasEl.value;
|
|
1099
1157
|
if (!canvas) {
|
|
1100
1158
|
return;
|
|
@@ -1126,7 +1184,21 @@ var QrcodeCanvas = vue.defineComponent({
|
|
|
1126
1184
|
ctx.scale(scale, scale);
|
|
1127
1185
|
ctx.fillStyle = background;
|
|
1128
1186
|
ctx.fillRect(0, 0, numCells, numCells);
|
|
1129
|
-
|
|
1187
|
+
if (gradient) {
|
|
1188
|
+
var grad = void 0;
|
|
1189
|
+
if (gradientType === 'linear') {
|
|
1190
|
+
grad = ctx.createLinearGradient(0, 0, numCells, numCells);
|
|
1191
|
+
}
|
|
1192
|
+
else {
|
|
1193
|
+
grad = ctx.createRadialGradient(numCells / 2, numCells / 2, 0, numCells / 2, numCells / 2, numCells / 2);
|
|
1194
|
+
}
|
|
1195
|
+
grad.addColorStop(0, gradientStartColor);
|
|
1196
|
+
grad.addColorStop(1, gradientEndColor);
|
|
1197
|
+
ctx.fillStyle = grad;
|
|
1198
|
+
}
|
|
1199
|
+
else {
|
|
1200
|
+
ctx.fillStyle = foreground;
|
|
1201
|
+
}
|
|
1130
1202
|
if (SUPPORTS_PATH2D) {
|
|
1131
1203
|
ctx.fill(new Path2D(generatePath(cells, margin)));
|
|
1132
1204
|
}
|
|
@@ -1160,11 +1232,20 @@ var QrcodeCanvas = vue.defineComponent({
|
|
|
1160
1232
|
var QrcodeVue = vue.defineComponent({
|
|
1161
1233
|
name: 'Qrcode',
|
|
1162
1234
|
render: function () {
|
|
1163
|
-
var _a = this.$props, renderAs = _a.renderAs, value = _a.value,
|
|
1164
|
-
|
|
1165
|
-
|
|
1166
|
-
|
|
1167
|
-
|
|
1235
|
+
var _a = this.$props, renderAs = _a.renderAs, value = _a.value, size = _a.size, margin = _a.margin, level = _a.level, background = _a.background, foreground = _a.foreground, imageSettings = _a.imageSettings, gradient = _a.gradient, gradientType = _a.gradientType, gradientStartColor = _a.gradientStartColor, gradientEndColor = _a.gradientEndColor;
|
|
1236
|
+
return vue.h(renderAs === 'svg' ? QrcodeSvg : QrcodeCanvas, {
|
|
1237
|
+
value: value,
|
|
1238
|
+
size: size,
|
|
1239
|
+
margin: margin,
|
|
1240
|
+
level: level,
|
|
1241
|
+
background: background,
|
|
1242
|
+
foreground: foreground,
|
|
1243
|
+
imageSettings: imageSettings,
|
|
1244
|
+
gradient: gradient,
|
|
1245
|
+
gradientType: gradientType,
|
|
1246
|
+
gradientStartColor: gradientStartColor,
|
|
1247
|
+
gradientEndColor: gradientEndColor,
|
|
1248
|
+
});
|
|
1168
1249
|
},
|
|
1169
1250
|
props: QRCodeVueProps,
|
|
1170
1251
|
});
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* qrcode.vue v3.
|
|
2
|
+
* qrcode.vue v3.6.0
|
|
3
3
|
* A Vue.js component to generate QRCode. Both support Vue 2 and Vue 3
|
|
4
4
|
* © 2017-PRESENT @scopewu(https://github.com/scopewu)
|
|
5
5
|
* MIT License.
|
|
6
6
|
*/
|
|
7
|
-
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("vue")):"function"==typeof define&&define.amd?define(["exports","vue"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).QrcodeVue={},t.Vue)}(this,(function(t,e){"use strict";var r,n=function(){return n=Object.assign||function(t){for(var e,r=1,n=arguments.length;n>r;r++)for(var o in e=arguments[r])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},n.apply(this,arguments)};"function"==typeof SuppressedError&&SuppressedError,function(t){var e=function(){function e(t,r,n,i){if(this.version=t,this.errorCorrectionLevel=r,this.modules=[],this.isFunction=[],e.MIN_VERSION>t||t>e.MAX_VERSION)throw new RangeError("Version value out of range");if(-1>i||i>7)throw new RangeError("Mask value out of range");this.size=4*t+17;for(var a=[],s=0;this.size>s;s++)a.push(!1);for(s=0;this.size>s;s++)this.modules.push(a.slice()),this.isFunction.push(a.slice());this.drawFunctionPatterns();var u=this.addEccAndInterleave(n);if(this.drawCodewords(u),-1==i){var h=1e9;for(s=0;8>s;s++){this.applyMask(s),this.drawFormatBits(s);var l=this.getPenaltyScore();h>l&&(i=s,h=l),this.applyMask(s)}}o(i>=0&&7>=i),this.mask=i,this.applyMask(i),this.drawFormatBits(i),this.isFunction=[]}return e.encodeText=function(r,n){var o=t.QrSegment.makeSegments(r);return e.encodeSegments(o,n)},e.encodeBinary=function(r,n){var o=t.QrSegment.makeBytes(r);return e.encodeSegments([o],n)},e.encodeSegments=function(t,n,a,s,u,h){if(void 0===a&&(a=1),void 0===s&&(s=40),void 0===u&&(u=-1),void 0===h&&(h=!0),e.MIN_VERSION>a||a>s||s>e.MAX_VERSION||-1>u||u>7)throw new RangeError("Invalid value");var l,c;for(l=a;;l++){var f=8*e.getNumDataCodewords(l,n),d=i.getTotalBits(t,l);if(f>=d){c=d;break}if(l>=s)throw new RangeError("Data too long")}for(var g=0,v=[e.Ecc.MEDIUM,e.Ecc.QUARTILE,e.Ecc.HIGH];v.length>g;g++){var m=v[g];h&&c<=8*e.getNumDataCodewords(l,m)&&(n=m)}for(var p=[],E=0,w=t;w.length>E;E++){var M=w[E];r(M.mode.modeBits,4,p),r(M.numChars,M.mode.numCharCountBits(l),p);for(var C=0,y=M.getData();y.length>C;C++){p.push(y[C])}}o(p.length==c);var R=8*e.getNumDataCodewords(l,n);o(R>=p.length),r(0,Math.min(4,R-p.length),p),r(0,(8-p.length%8)%8,p),o(p.length%8==0);for(var N=236;R>p.length;N^=253)r(N,8,p);for(var A=[];p.length>8*A.length;)A.push(0);return p.forEach((function(t,e){return A[e>>>3]|=t<<7-(7&e)})),new e(l,n,A,u)},e.prototype.getModule=function(t,e){return t>=0&&this.size>t&&e>=0&&this.size>e&&this.modules[e][t]},e.prototype.getModules=function(){return this.modules},e.prototype.drawFunctionPatterns=function(){for(var t=0;this.size>t;t++)this.setFunctionModule(6,t,t%2==0),this.setFunctionModule(t,6,t%2==0);this.drawFinderPattern(3,3),this.drawFinderPattern(this.size-4,3),this.drawFinderPattern(3,this.size-4);var e=this.getAlignmentPatternPositions(),r=e.length;for(t=0;r>t;t++)for(var n=0;r>n;n++)0==t&&0==n||0==t&&n==r-1||t==r-1&&0==n||this.drawAlignmentPattern(e[t],e[n]);this.drawFormatBits(0),this.drawVersion()},e.prototype.drawFormatBits=function(t){for(var e=this.errorCorrectionLevel.formatBits<<3|t,r=e,i=0;10>i;i++)r=r<<1^1335*(r>>>9);var a=21522^(e<<10|r);o(a>>>15==0);for(i=0;5>=i;i++)this.setFunctionModule(8,i,n(a,i));this.setFunctionModule(8,7,n(a,6)),this.setFunctionModule(8,8,n(a,7)),this.setFunctionModule(7,8,n(a,8));for(i=9;15>i;i++)this.setFunctionModule(14-i,8,n(a,i));for(i=0;8>i;i++)this.setFunctionModule(this.size-1-i,8,n(a,i));for(i=8;15>i;i++)this.setFunctionModule(8,this.size-15+i,n(a,i));this.setFunctionModule(8,this.size-8,!0)},e.prototype.drawVersion=function(){if(this.version>=7){for(var t=this.version,e=0;12>e;e++)t=t<<1^7973*(t>>>11);var r=this.version<<12|t;o(r>>>18==0);for(e=0;18>e;e++){var i=n(r,e),a=this.size-11+e%3,s=Math.floor(e/3);this.setFunctionModule(a,s,i),this.setFunctionModule(s,a,i)}}},e.prototype.drawFinderPattern=function(t,e){for(var r=-4;4>=r;r++)for(var n=-4;4>=n;n++){var o=Math.max(Math.abs(n),Math.abs(r)),i=t+n,a=e+r;i>=0&&this.size>i&&a>=0&&this.size>a&&this.setFunctionModule(i,a,2!=o&&4!=o)}},e.prototype.drawAlignmentPattern=function(t,e){for(var r=-2;2>=r;r++)for(var n=-2;2>=n;n++)this.setFunctionModule(t+n,e+r,1!=Math.max(Math.abs(n),Math.abs(r)))},e.prototype.setFunctionModule=function(t,e,r){this.modules[e][t]=r,this.isFunction[e][t]=!0},e.prototype.addEccAndInterleave=function(t){var r=this.version,n=this.errorCorrectionLevel;if(t.length!=e.getNumDataCodewords(r,n))throw new RangeError("Invalid argument");for(var i=e.NUM_ERROR_CORRECTION_BLOCKS[n.ordinal][r],a=e.ECC_CODEWORDS_PER_BLOCK[n.ordinal][r],s=Math.floor(e.getNumRawDataModules(r)/8),u=i-s%i,h=Math.floor(s/i),l=[],c=e.reedSolomonComputeDivisor(a),f=0,d=0;i>f;f++){var g=t.slice(d,d+h-a+(u>f?0:1));d+=g.length;var v=e.reedSolomonComputeRemainder(g,c);u>f&&g.push(0),l.push(g.concat(v))}var m=[],p=function(t){l.forEach((function(e,r){t==h-a&&u>r||m.push(e[t])}))};for(f=0;l[0].length>f;f++)p(f);return o(m.length==s),m},e.prototype.drawCodewords=function(t){if(t.length!=Math.floor(e.getNumRawDataModules(this.version)/8))throw new RangeError("Invalid argument");for(var r=0,i=this.size-1;i>=1;i-=2){6==i&&(i=5);for(var a=0;this.size>a;a++)for(var s=0;2>s;s++){var u=i-s,h=!(i+1&2)?this.size-1-a:a;!this.isFunction[h][u]&&8*t.length>r&&(this.modules[h][u]=n(t[r>>>3],7-(7&r)),r++)}}o(r==8*t.length)},e.prototype.applyMask=function(t){if(0>t||t>7)throw new RangeError("Mask value out of range");for(var e=0;this.size>e;e++)for(var r=0;this.size>r;r++){var n=void 0;switch(t){case 0:n=(r+e)%2==0;break;case 1:n=e%2==0;break;case 2:n=r%3==0;break;case 3:n=(r+e)%3==0;break;case 4:n=(Math.floor(r/3)+Math.floor(e/2))%2==0;break;case 5:n=r*e%2+r*e%3==0;break;case 6:n=(r*e%2+r*e%3)%2==0;break;case 7:n=((r+e)%2+r*e%3)%2==0;break;default:throw Error("Unreachable")}!this.isFunction[e][r]&&n&&(this.modules[e][r]=!this.modules[e][r])}},e.prototype.getPenaltyScore=function(){for(var t=0,r=0;this.size>r;r++){for(var n=!1,i=0,a=[0,0,0,0,0,0,0],s=0;this.size>s;s++)this.modules[r][s]==n?5==++i?t+=e.PENALTY_N1:i>5&&t++:(this.finderPenaltyAddHistory(i,a),n||(t+=this.finderPenaltyCountPatterns(a)*e.PENALTY_N3),n=this.modules[r][s],i=1);t+=this.finderPenaltyTerminateAndCount(n,i,a)*e.PENALTY_N3}for(s=0;this.size>s;s++){n=!1;var u=0;for(a=[0,0,0,0,0,0,0],r=0;this.size>r;r++)this.modules[r][s]==n?5==++u?t+=e.PENALTY_N1:u>5&&t++:(this.finderPenaltyAddHistory(u,a),n||(t+=this.finderPenaltyCountPatterns(a)*e.PENALTY_N3),n=this.modules[r][s],u=1);t+=this.finderPenaltyTerminateAndCount(n,u,a)*e.PENALTY_N3}for(r=0;this.size-1>r;r++)for(s=0;this.size-1>s;s++){var h=this.modules[r][s];h==this.modules[r][s+1]&&h==this.modules[r+1][s]&&h==this.modules[r+1][s+1]&&(t+=e.PENALTY_N2)}for(var l=0,c=0,f=this.modules;f.length>c;c++){l=f[c].reduce((function(t,e){return t+(e?1:0)}),l)}var d=this.size*this.size,g=Math.ceil(Math.abs(20*l-10*d)/d)-1;return o(g>=0&&9>=g),o((t+=g*e.PENALTY_N4)>=0&&2568888>=t),t},e.prototype.getAlignmentPatternPositions=function(){if(1==this.version)return[];for(var t=Math.floor(this.version/7)+2,e=2*Math.floor((8*this.version+3*t+5)/(4*t-4)),r=[6],n=this.size-7;t>r.length;n-=e)r.splice(1,0,n);return r},e.getNumRawDataModules=function(t){if(e.MIN_VERSION>t||t>e.MAX_VERSION)throw new RangeError("Version number out of range");var r=(16*t+128)*t+64;if(t>=2){var n=Math.floor(t/7)+2;r-=(25*n-10)*n-55,7>t||(r-=36)}return o(r>=208&&29648>=r),r},e.getNumDataCodewords=function(t,r){return Math.floor(e.getNumRawDataModules(t)/8)-e.ECC_CODEWORDS_PER_BLOCK[r.ordinal][t]*e.NUM_ERROR_CORRECTION_BLOCKS[r.ordinal][t]},e.reedSolomonComputeDivisor=function(t){if(1>t||t>255)throw new RangeError("Degree out of range");for(var r=[],n=0;t-1>n;n++)r.push(0);r.push(1);var o=1;for(n=0;t>n;n++){for(var i=0;r.length>i;i++)r[i]=e.reedSolomonMultiply(r[i],o),r.length>i+1&&(r[i]^=r[i+1]);o=e.reedSolomonMultiply(o,2)}return r},e.reedSolomonComputeRemainder=function(t,r){for(var n=r.map((function(t){return 0})),o=function(t){var o=t^n.shift();n.push(0),r.forEach((function(t,r){return n[r]^=e.reedSolomonMultiply(t,o)}))},i=0,a=t;a.length>i;i++){o(a[i])}return n},e.reedSolomonMultiply=function(t,e){if(t>>>8!=0||e>>>8!=0)throw new RangeError("Byte out of range");for(var r=0,n=7;n>=0;n--)r=r<<1^285*(r>>>7),r^=(e>>>n&1)*t;return o(r>>>8==0),r},e.prototype.finderPenaltyCountPatterns=function(t){var e=t[1];o(3*this.size>=e);var r=e>0&&t[2]==e&&t[3]==3*e&&t[4]==e&&t[5]==e;return(!r||4*e>t[0]||e>t[6]?0:1)+(!r||4*e>t[6]||e>t[0]?0:1)},e.prototype.finderPenaltyTerminateAndCount=function(t,e,r){return t&&(this.finderPenaltyAddHistory(e,r),e=0),this.finderPenaltyAddHistory(e+=this.size,r),this.finderPenaltyCountPatterns(r)},e.prototype.finderPenaltyAddHistory=function(t,e){0==e[0]&&(t+=this.size),e.pop(),e.unshift(t)},e.MIN_VERSION=1,e.MAX_VERSION=40,e.PENALTY_N1=3,e.PENALTY_N2=3,e.PENALTY_N3=40,e.PENALTY_N4=10,e.ECC_CODEWORDS_PER_BLOCK=[[-1,7,10,15,20,26,18,20,24,30,18,20,24,26,30,22,24,28,30,28,28,28,28,30,30,26,28,30,30,30,30,30,30,30,30,30,30,30,30,30,30],[-1,10,16,26,18,24,16,18,22,22,26,30,22,22,24,24,28,28,26,26,26,26,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28],[-1,13,22,18,26,18,24,18,22,20,24,28,26,24,20,30,24,28,28,26,30,28,30,30,30,30,28,30,30,30,30,30,30,30,30,30,30,30,30,30,30],[-1,17,28,22,16,22,28,26,26,24,28,24,28,22,24,24,30,28,28,26,28,30,24,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30]],e.NUM_ERROR_CORRECTION_BLOCKS=[[-1,1,1,1,1,1,2,2,2,2,4,4,4,4,4,6,6,6,6,7,8,8,9,9,10,12,12,12,13,14,15,16,17,18,19,19,20,21,22,24,25],[-1,1,1,1,2,2,4,4,4,5,5,5,8,9,9,10,10,11,13,14,16,17,17,18,20,21,23,25,26,28,29,31,33,35,37,38,40,43,45,47,49],[-1,1,1,2,2,4,4,6,6,8,8,8,10,12,16,12,17,16,18,21,20,23,23,25,27,29,34,34,35,38,40,43,45,48,51,53,56,59,62,65,68],[-1,1,1,2,4,4,4,5,6,8,8,11,11,16,16,18,16,19,21,25,25,25,34,30,32,35,37,40,42,45,48,51,54,57,60,63,66,70,74,77,81]],e}();function r(t,e,r){if(0>e||e>31||t>>>e!=0)throw new RangeError("Value out of range");for(var n=e-1;n>=0;n--)r.push(t>>>n&1)}function n(t,e){return!!(t>>>e&1)}function o(t){if(!t)throw Error("Assertion error")}t.QrCode=e;var i=function(){function t(t,e,r){if(this.mode=t,this.numChars=e,this.bitData=r,0>e)throw new RangeError("Invalid argument");this.bitData=r.slice()}return t.makeBytes=function(e){for(var n=[],o=0,i=e;i.length>o;o++){r(i[o],8,n)}return new t(t.Mode.BYTE,e.length,n)},t.makeNumeric=function(e){if(!t.isNumeric(e))throw new RangeError("String contains non-numeric characters");for(var n=[],o=0;e.length>o;){var i=Math.min(e.length-o,3);r(parseInt(e.substring(o,o+i),10),3*i+1,n),o+=i}return new t(t.Mode.NUMERIC,e.length,n)},t.makeAlphanumeric=function(e){if(!t.isAlphanumeric(e))throw new RangeError("String contains unencodable characters in alphanumeric mode");var n,o=[];for(n=0;e.length>=n+2;n+=2){var i=45*t.ALPHANUMERIC_CHARSET.indexOf(e.charAt(n));r(i+=t.ALPHANUMERIC_CHARSET.indexOf(e.charAt(n+1)),11,o)}return e.length>n&&r(t.ALPHANUMERIC_CHARSET.indexOf(e.charAt(n)),6,o),new t(t.Mode.ALPHANUMERIC,e.length,o)},t.makeSegments=function(e){return""==e?[]:t.isNumeric(e)?[t.makeNumeric(e)]:t.isAlphanumeric(e)?[t.makeAlphanumeric(e)]:[t.makeBytes(t.toUtf8ByteArray(e))]},t.makeEci=function(e){var n=[];if(0>e)throw new RangeError("ECI assignment value out of range");if(128>e)r(e,8,n);else if(16384>e)r(2,2,n),r(e,14,n);else{if(e>=1e6)throw new RangeError("ECI assignment value out of range");r(6,3,n),r(e,21,n)}return new t(t.Mode.ECI,0,n)},t.isNumeric=function(e){return t.NUMERIC_REGEX.test(e)},t.isAlphanumeric=function(e){return t.ALPHANUMERIC_REGEX.test(e)},t.prototype.getData=function(){return this.bitData.slice()},t.getTotalBits=function(t,e){for(var r=0,n=0,o=t;o.length>n;n++){var i=o[n],a=i.mode.numCharCountBits(e);if(i.numChars>=1<<a)return 1/0;r+=4+a+i.bitData.length}return r},t.toUtf8ByteArray=function(t){t=encodeURI(t);for(var e=[],r=0;t.length>r;r++)"%"!=t.charAt(r)?e.push(t.charCodeAt(r)):(e.push(parseInt(t.substring(r+1,r+3),16)),r+=2);return e},t.NUMERIC_REGEX=/^[0-9]*$/,t.ALPHANUMERIC_REGEX=/^[A-Z0-9 $%*+.\/:-]*$/,t.ALPHANUMERIC_CHARSET="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:",t}();t.QrSegment=i}(r||(r={})),function(t){var e,r;e=t.QrCode||(t.QrCode={}),r=function(){function t(t,e){this.ordinal=t,this.formatBits=e}return t.LOW=new t(0,1),t.MEDIUM=new t(1,0),t.QUARTILE=new t(2,3),t.HIGH=new t(3,2),t}(),e.Ecc=r}(r||(r={})),function(t){var e,r;e=t.QrSegment||(t.QrSegment={}),r=function(){function t(t,e){this.modeBits=t,this.numBitsCharCount=e}return t.prototype.numCharCountBits=function(t){return this.numBitsCharCount[Math.floor((t+7)/17)]},t.NUMERIC=new t(1,[10,12,14]),t.ALPHANUMERIC=new t(2,[9,11,13]),t.BYTE=new t(4,[8,16,16]),t.KANJI=new t(8,[8,10,12]),t.ECI=new t(7,[0,0,0]),t}(),e.Mode=r}(r||(r={}));var o=r,i={L:o.QrCode.Ecc.LOW,M:o.QrCode.Ecc.MEDIUM,Q:o.QrCode.Ecc.QUARTILE,H:o.QrCode.Ecc.HIGH},a=function(){try{(new Path2D).addPath(new Path2D)}catch(t){return!1}return!0}();function s(t){return t in i}function u(t,e){void 0===e&&(e=0);var r=[];return t.forEach((function(t,n){var o=null;t.forEach((function(i,a){if(!i&&null!==o)return r.push("M".concat(o+e," ").concat(n+e,"h").concat(a-o,"v1H").concat(o+e,"z")),void(o=null);if(a!==t.length-1)i&&null===o&&(o=a);else{if(!i)return;r.push(null===o?"M".concat(a+e,",").concat(n+e," h1v1H").concat(a+e,"z"):"M".concat(o+e,",").concat(n+e," h").concat(a+1-o,"v1H").concat(o+e,"z"))}}))})),r.join("")}function h(t,e,r,n){var o=n.width,i=n.height,a=n.x,s=n.y,u=t.length+2*r,h=Math.floor(.1*e),l=u/e,c=(o||h)*l,f=(i||h)*l,d=null==a?t.length/2-c/2:a*l,g=null==s?t.length/2-f/2:s*l,v=null;if(n.excavate){var m=Math.floor(d),p=Math.floor(g);v={x:m,y:p,w:Math.ceil(c+d-m),h:Math.ceil(f+g-p)}}return{x:d,y:g,h:f,w:c,excavation:v}}function l(t,e){return t.slice().map((function(t,r){return e.y>r||r>=e.y+e.h?t:t.map((function(t,r){return(e.x>r||r>=e.x+e.w)&&t}))}))}var c={value:{type:String,required:!0,default:""},size:{type:Number,default:100},level:{type:String,default:"L",validator:function(t){return s(t)}},background:{type:String,default:"#fff"},foreground:{type:String,default:"#000"},margin:{type:Number,required:!1,default:0},imageSettings:{type:Object,required:!1,default:function(){return{}}}},f=n(n({},c),{renderAs:{type:String,required:!1,default:"canvas",validator:function(t){return["canvas","svg"].indexOf(t)>-1}}}),d=e.defineComponent({name:"QRCodeSvg",props:c,setup:function(t){var r,a=e.ref(0),s=e.ref(""),c=function(){var e=t.margin,n=o.QrCode.encodeText(t.value,i[t.level]).getModules();if(a.value=n.length+2*e,t.imageSettings.src){var c=h(n,t.size,e,t.imageSettings);r={x:c.x+e,y:c.y+e,width:c.w,height:c.h},c.excavation&&(n=l(n,c.excavation))}s.value=u(n,e)};return c(),e.onUpdated(c),function(){return e.h("svg",{width:t.size,height:t.size,"shape-rendering":"crispEdges",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 ".concat(a.value," ").concat(a.value)},[e.h("path",{fill:t.background,d:"M0,0 h".concat(a.value,"v").concat(a.value,"H0z")}),e.h("path",{fill:t.foreground,d:s.value}),t.imageSettings.src&&e.h("image",n({href:t.imageSettings.src},r))])}}}),g=e.defineComponent({name:"QRCodeCanvas",props:c,setup:function(t,r){var s=e.ref(null),c=e.ref(null),f=function(){var e=t.value,r=t.level,n=t.size,f=t.margin,d=t.background,g=t.foreground,v=s.value;if(v){var m=v.getContext("2d");if(m){var p=o.QrCode.encodeText(e,i[r]).getModules(),E=p.length+2*f,w=c.value,M={x:0,y:0,width:0,height:0},C=t.imageSettings.src&&null!=w&&0!==w.naturalWidth&&0!==w.naturalHeight;if(C){var y=h(p,t.size,f,t.imageSettings);M={x:y.x+f,y:y.y+f,width:y.w,height:y.h},y.excavation&&(p=l(p,y.excavation))}var R=window.devicePixelRatio||1,N=n/E*R;v.height=v.width=n*R,m.scale(N,N),m.fillStyle=d,m.fillRect(0,0,E,E),m.fillStyle=g,a?m.fill(new Path2D(u(p,f))):p.forEach((function(t,e){t.forEach((function(t,r){t&&m.fillRect(r+f,e+f,1,1)}))})),C&&m.drawImage(w,M.x,M.y,M.width,M.height)}}};e.onMounted(f),e.onUpdated(f);var d=r.attrs.style;return function(){return e.h(e.Fragment,[e.h("canvas",n(n({},r.attrs),{ref:s,style:n(n({},d),{width:"".concat(t.size,"px"),height:"".concat(t.size,"px")})})),t.imageSettings.src&&e.h("img",{ref:c,src:t.imageSettings.src,style:{display:"none"},onLoad:f})])}}}),v=e.defineComponent({name:"Qrcode",render:function(){var t=this.$props,r=t.renderAs,n=t.value,o=t.level,i=t.background,a=t.foreground,u=t.imageSettings,h=t.size>>>0,l=t.margin>>>0,c=s(o)?o:"L";return e.h("svg"===r?d:g,{value:n,size:h,margin:l,level:c,background:i,foreground:a,imageSettings:u})},props:f});t.QrcodeCanvas=g,t.QrcodeSvg=d,t.default=v,Object.defineProperty(t,"__esModule",{value:!0})}));
|
|
7
|
+
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("vue")):"function"==typeof define&&define.amd?define(["exports","vue"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).QrcodeVue={},e.Vue)}(this,(function(e,t){"use strict";var r,n=function(){return n=Object.assign||function(e){for(var t,r=1,n=arguments.length;n>r;r++)for(var o in t=arguments[r])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e},n.apply(this,arguments)};"function"==typeof SuppressedError&&SuppressedError,function(e){var t=function(){function t(e,r,n,i){if(this.version=e,this.errorCorrectionLevel=r,this.modules=[],this.isFunction=[],t.MIN_VERSION>e||e>t.MAX_VERSION)throw new RangeError("Version value out of range");if(-1>i||i>7)throw new RangeError("Mask value out of range");this.size=4*e+17;for(var a=[],s=0;this.size>s;s++)a.push(!1);for(s=0;this.size>s;s++)this.modules.push(a.slice()),this.isFunction.push(a.slice());this.drawFunctionPatterns();var u=this.addEccAndInterleave(n);if(this.drawCodewords(u),-1==i){var h=1e9;for(s=0;8>s;s++){this.applyMask(s),this.drawFormatBits(s);var l=this.getPenaltyScore();h>l&&(i=s,h=l),this.applyMask(s)}}o(i>=0&&7>=i),this.mask=i,this.applyMask(i),this.drawFormatBits(i),this.isFunction=[]}return t.encodeText=function(r,n){var o=e.QrSegment.makeSegments(r);return t.encodeSegments(o,n)},t.encodeBinary=function(r,n){var o=e.QrSegment.makeBytes(r);return t.encodeSegments([o],n)},t.encodeSegments=function(e,n,a,s,u,h){if(void 0===a&&(a=1),void 0===s&&(s=40),void 0===u&&(u=-1),void 0===h&&(h=!0),t.MIN_VERSION>a||a>s||s>t.MAX_VERSION||-1>u||u>7)throw new RangeError("Invalid value");var l,d;for(l=a;;l++){var f=8*t.getNumDataCodewords(l,n),c=i.getTotalBits(e,l);if(f>=c){d=c;break}if(l>=s)throw new RangeError("Data too long")}for(var g=0,v=[t.Ecc.MEDIUM,t.Ecc.QUARTILE,t.Ecc.HIGH];v.length>g;g++){var p=v[g];h&&d<=8*t.getNumDataCodewords(l,p)&&(n=p)}for(var m=[],E=0,C=e;C.length>E;E++){var y=C[E];r(y.mode.modeBits,4,m),r(y.numChars,y.mode.numCharCountBits(l),m);for(var w=0,M=y.getData();M.length>w;w++){m.push(M[w])}}o(m.length==d);var R=8*t.getNumDataCodewords(l,n);o(R>=m.length),r(0,Math.min(4,R-m.length),m),r(0,(8-m.length%8)%8,m),o(m.length%8==0);for(var S=236;R>m.length;S^=253)r(S,8,m);for(var N=[];m.length>8*N.length;)N.push(0);return m.forEach((function(e,t){return N[t>>>3]|=e<<7-(7&t)})),new t(l,n,N,u)},t.prototype.getModule=function(e,t){return e>=0&&this.size>e&&t>=0&&this.size>t&&this.modules[t][e]},t.prototype.getModules=function(){return this.modules},t.prototype.drawFunctionPatterns=function(){for(var e=0;this.size>e;e++)this.setFunctionModule(6,e,e%2==0),this.setFunctionModule(e,6,e%2==0);this.drawFinderPattern(3,3),this.drawFinderPattern(this.size-4,3),this.drawFinderPattern(3,this.size-4);var t=this.getAlignmentPatternPositions(),r=t.length;for(e=0;r>e;e++)for(var n=0;r>n;n++)0==e&&0==n||0==e&&n==r-1||e==r-1&&0==n||this.drawAlignmentPattern(t[e],t[n]);this.drawFormatBits(0),this.drawVersion()},t.prototype.drawFormatBits=function(e){for(var t=this.errorCorrectionLevel.formatBits<<3|e,r=t,i=0;10>i;i++)r=r<<1^1335*(r>>>9);var a=21522^(t<<10|r);o(a>>>15==0);for(i=0;5>=i;i++)this.setFunctionModule(8,i,n(a,i));this.setFunctionModule(8,7,n(a,6)),this.setFunctionModule(8,8,n(a,7)),this.setFunctionModule(7,8,n(a,8));for(i=9;15>i;i++)this.setFunctionModule(14-i,8,n(a,i));for(i=0;8>i;i++)this.setFunctionModule(this.size-1-i,8,n(a,i));for(i=8;15>i;i++)this.setFunctionModule(8,this.size-15+i,n(a,i));this.setFunctionModule(8,this.size-8,!0)},t.prototype.drawVersion=function(){if(this.version>=7){for(var e=this.version,t=0;12>t;t++)e=e<<1^7973*(e>>>11);var r=this.version<<12|e;o(r>>>18==0);for(t=0;18>t;t++){var i=n(r,t),a=this.size-11+t%3,s=Math.floor(t/3);this.setFunctionModule(a,s,i),this.setFunctionModule(s,a,i)}}},t.prototype.drawFinderPattern=function(e,t){for(var r=-4;4>=r;r++)for(var n=-4;4>=n;n++){var o=Math.max(Math.abs(n),Math.abs(r)),i=e+n,a=t+r;i>=0&&this.size>i&&a>=0&&this.size>a&&this.setFunctionModule(i,a,2!=o&&4!=o)}},t.prototype.drawAlignmentPattern=function(e,t){for(var r=-2;2>=r;r++)for(var n=-2;2>=n;n++)this.setFunctionModule(e+n,t+r,1!=Math.max(Math.abs(n),Math.abs(r)))},t.prototype.setFunctionModule=function(e,t,r){this.modules[t][e]=r,this.isFunction[t][e]=!0},t.prototype.addEccAndInterleave=function(e){var r=this.version,n=this.errorCorrectionLevel;if(e.length!=t.getNumDataCodewords(r,n))throw new RangeError("Invalid argument");for(var i=t.NUM_ERROR_CORRECTION_BLOCKS[n.ordinal][r],a=t.ECC_CODEWORDS_PER_BLOCK[n.ordinal][r],s=Math.floor(t.getNumRawDataModules(r)/8),u=i-s%i,h=Math.floor(s/i),l=[],d=t.reedSolomonComputeDivisor(a),f=0,c=0;i>f;f++){var g=e.slice(c,c+h-a+(u>f?0:1));c+=g.length;var v=t.reedSolomonComputeRemainder(g,d);u>f&&g.push(0),l.push(g.concat(v))}var p=[],m=function(e){l.forEach((function(t,r){e==h-a&&u>r||p.push(t[e])}))};for(f=0;l[0].length>f;f++)m(f);return o(p.length==s),p},t.prototype.drawCodewords=function(e){if(e.length!=Math.floor(t.getNumRawDataModules(this.version)/8))throw new RangeError("Invalid argument");for(var r=0,i=this.size-1;i>=1;i-=2){6==i&&(i=5);for(var a=0;this.size>a;a++)for(var s=0;2>s;s++){var u=i-s,h=!(i+1&2)?this.size-1-a:a;!this.isFunction[h][u]&&8*e.length>r&&(this.modules[h][u]=n(e[r>>>3],7-(7&r)),r++)}}o(r==8*e.length)},t.prototype.applyMask=function(e){if(0>e||e>7)throw new RangeError("Mask value out of range");for(var t=0;this.size>t;t++)for(var r=0;this.size>r;r++){var n=void 0;switch(e){case 0:n=(r+t)%2==0;break;case 1:n=t%2==0;break;case 2:n=r%3==0;break;case 3:n=(r+t)%3==0;break;case 4:n=(Math.floor(r/3)+Math.floor(t/2))%2==0;break;case 5:n=r*t%2+r*t%3==0;break;case 6:n=(r*t%2+r*t%3)%2==0;break;case 7:n=((r+t)%2+r*t%3)%2==0;break;default:throw Error("Unreachable")}!this.isFunction[t][r]&&n&&(this.modules[t][r]=!this.modules[t][r])}},t.prototype.getPenaltyScore=function(){for(var e=0,r=0;this.size>r;r++){for(var n=!1,i=0,a=[0,0,0,0,0,0,0],s=0;this.size>s;s++)this.modules[r][s]==n?5==++i?e+=t.PENALTY_N1:i>5&&e++:(this.finderPenaltyAddHistory(i,a),n||(e+=this.finderPenaltyCountPatterns(a)*t.PENALTY_N3),n=this.modules[r][s],i=1);e+=this.finderPenaltyTerminateAndCount(n,i,a)*t.PENALTY_N3}for(s=0;this.size>s;s++){n=!1;var u=0;for(a=[0,0,0,0,0,0,0],r=0;this.size>r;r++)this.modules[r][s]==n?5==++u?e+=t.PENALTY_N1:u>5&&e++:(this.finderPenaltyAddHistory(u,a),n||(e+=this.finderPenaltyCountPatterns(a)*t.PENALTY_N3),n=this.modules[r][s],u=1);e+=this.finderPenaltyTerminateAndCount(n,u,a)*t.PENALTY_N3}for(r=0;this.size-1>r;r++)for(s=0;this.size-1>s;s++){var h=this.modules[r][s];h==this.modules[r][s+1]&&h==this.modules[r+1][s]&&h==this.modules[r+1][s+1]&&(e+=t.PENALTY_N2)}for(var l=0,d=0,f=this.modules;f.length>d;d++){l=f[d].reduce((function(e,t){return e+(t?1:0)}),l)}var c=this.size*this.size,g=Math.ceil(Math.abs(20*l-10*c)/c)-1;return o(g>=0&&9>=g),o((e+=g*t.PENALTY_N4)>=0&&2568888>=e),e},t.prototype.getAlignmentPatternPositions=function(){if(1==this.version)return[];for(var e=Math.floor(this.version/7)+2,t=2*Math.floor((8*this.version+3*e+5)/(4*e-4)),r=[6],n=this.size-7;e>r.length;n-=t)r.splice(1,0,n);return r},t.getNumRawDataModules=function(e){if(t.MIN_VERSION>e||e>t.MAX_VERSION)throw new RangeError("Version number out of range");var r=(16*e+128)*e+64;if(e>=2){var n=Math.floor(e/7)+2;r-=(25*n-10)*n-55,7>e||(r-=36)}return o(r>=208&&29648>=r),r},t.getNumDataCodewords=function(e,r){return Math.floor(t.getNumRawDataModules(e)/8)-t.ECC_CODEWORDS_PER_BLOCK[r.ordinal][e]*t.NUM_ERROR_CORRECTION_BLOCKS[r.ordinal][e]},t.reedSolomonComputeDivisor=function(e){if(1>e||e>255)throw new RangeError("Degree out of range");for(var r=[],n=0;e-1>n;n++)r.push(0);r.push(1);var o=1;for(n=0;e>n;n++){for(var i=0;r.length>i;i++)r[i]=t.reedSolomonMultiply(r[i],o),r.length>i+1&&(r[i]^=r[i+1]);o=t.reedSolomonMultiply(o,2)}return r},t.reedSolomonComputeRemainder=function(e,r){for(var n=r.map((function(e){return 0})),o=function(e){var o=e^n.shift();n.push(0),r.forEach((function(e,r){return n[r]^=t.reedSolomonMultiply(e,o)}))},i=0,a=e;a.length>i;i++){o(a[i])}return n},t.reedSolomonMultiply=function(e,t){if(e>>>8!=0||t>>>8!=0)throw new RangeError("Byte out of range");for(var r=0,n=7;n>=0;n--)r=r<<1^285*(r>>>7),r^=(t>>>n&1)*e;return o(r>>>8==0),r},t.prototype.finderPenaltyCountPatterns=function(e){var t=e[1];o(3*this.size>=t);var r=t>0&&e[2]==t&&e[3]==3*t&&e[4]==t&&e[5]==t;return(!r||4*t>e[0]||t>e[6]?0:1)+(!r||4*t>e[6]||t>e[0]?0:1)},t.prototype.finderPenaltyTerminateAndCount=function(e,t,r){return e&&(this.finderPenaltyAddHistory(t,r),t=0),this.finderPenaltyAddHistory(t+=this.size,r),this.finderPenaltyCountPatterns(r)},t.prototype.finderPenaltyAddHistory=function(e,t){0==t[0]&&(e+=this.size),t.pop(),t.unshift(e)},t.MIN_VERSION=1,t.MAX_VERSION=40,t.PENALTY_N1=3,t.PENALTY_N2=3,t.PENALTY_N3=40,t.PENALTY_N4=10,t.ECC_CODEWORDS_PER_BLOCK=[[-1,7,10,15,20,26,18,20,24,30,18,20,24,26,30,22,24,28,30,28,28,28,28,30,30,26,28,30,30,30,30,30,30,30,30,30,30,30,30,30,30],[-1,10,16,26,18,24,16,18,22,22,26,30,22,22,24,24,28,28,26,26,26,26,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28],[-1,13,22,18,26,18,24,18,22,20,24,28,26,24,20,30,24,28,28,26,30,28,30,30,30,30,28,30,30,30,30,30,30,30,30,30,30,30,30,30,30],[-1,17,28,22,16,22,28,26,26,24,28,24,28,22,24,24,30,28,28,26,28,30,24,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30]],t.NUM_ERROR_CORRECTION_BLOCKS=[[-1,1,1,1,1,1,2,2,2,2,4,4,4,4,4,6,6,6,6,7,8,8,9,9,10,12,12,12,13,14,15,16,17,18,19,19,20,21,22,24,25],[-1,1,1,1,2,2,4,4,4,5,5,5,8,9,9,10,10,11,13,14,16,17,17,18,20,21,23,25,26,28,29,31,33,35,37,38,40,43,45,47,49],[-1,1,1,2,2,4,4,6,6,8,8,8,10,12,16,12,17,16,18,21,20,23,23,25,27,29,34,34,35,38,40,43,45,48,51,53,56,59,62,65,68],[-1,1,1,2,4,4,4,5,6,8,8,11,11,16,16,18,16,19,21,25,25,25,34,30,32,35,37,40,42,45,48,51,54,57,60,63,66,70,74,77,81]],t}();function r(e,t,r){if(0>t||t>31||e>>>t!=0)throw new RangeError("Value out of range");for(var n=t-1;n>=0;n--)r.push(e>>>n&1)}function n(e,t){return!!(e>>>t&1)}function o(e){if(!e)throw Error("Assertion error")}e.QrCode=t;var i=function(){function e(e,t,r){if(this.mode=e,this.numChars=t,this.bitData=r,0>t)throw new RangeError("Invalid argument");this.bitData=r.slice()}return e.makeBytes=function(t){for(var n=[],o=0,i=t;i.length>o;o++){r(i[o],8,n)}return new e(e.Mode.BYTE,t.length,n)},e.makeNumeric=function(t){if(!e.isNumeric(t))throw new RangeError("String contains non-numeric characters");for(var n=[],o=0;t.length>o;){var i=Math.min(t.length-o,3);r(parseInt(t.substring(o,o+i),10),3*i+1,n),o+=i}return new e(e.Mode.NUMERIC,t.length,n)},e.makeAlphanumeric=function(t){if(!e.isAlphanumeric(t))throw new RangeError("String contains unencodable characters in alphanumeric mode");var n,o=[];for(n=0;t.length>=n+2;n+=2){var i=45*e.ALPHANUMERIC_CHARSET.indexOf(t.charAt(n));r(i+=e.ALPHANUMERIC_CHARSET.indexOf(t.charAt(n+1)),11,o)}return t.length>n&&r(e.ALPHANUMERIC_CHARSET.indexOf(t.charAt(n)),6,o),new e(e.Mode.ALPHANUMERIC,t.length,o)},e.makeSegments=function(t){return""==t?[]:e.isNumeric(t)?[e.makeNumeric(t)]:e.isAlphanumeric(t)?[e.makeAlphanumeric(t)]:[e.makeBytes(e.toUtf8ByteArray(t))]},e.makeEci=function(t){var n=[];if(0>t)throw new RangeError("ECI assignment value out of range");if(128>t)r(t,8,n);else if(16384>t)r(2,2,n),r(t,14,n);else{if(t>=1e6)throw new RangeError("ECI assignment value out of range");r(6,3,n),r(t,21,n)}return new e(e.Mode.ECI,0,n)},e.isNumeric=function(t){return e.NUMERIC_REGEX.test(t)},e.isAlphanumeric=function(t){return e.ALPHANUMERIC_REGEX.test(t)},e.prototype.getData=function(){return this.bitData.slice()},e.getTotalBits=function(e,t){for(var r=0,n=0,o=e;o.length>n;n++){var i=o[n],a=i.mode.numCharCountBits(t);if(i.numChars>=1<<a)return 1/0;r+=4+a+i.bitData.length}return r},e.toUtf8ByteArray=function(e){e=encodeURI(e);for(var t=[],r=0;e.length>r;r++)"%"!=e.charAt(r)?t.push(e.charCodeAt(r)):(t.push(parseInt(e.substring(r+1,r+3),16)),r+=2);return t},e.NUMERIC_REGEX=/^[0-9]*$/,e.ALPHANUMERIC_REGEX=/^[A-Z0-9 $%*+.\/:-]*$/,e.ALPHANUMERIC_CHARSET="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:",e}();e.QrSegment=i}(r||(r={})),function(e){var t,r;t=e.QrCode||(e.QrCode={}),r=function(){function e(e,t){this.ordinal=e,this.formatBits=t}return e.LOW=new e(0,1),e.MEDIUM=new e(1,0),e.QUARTILE=new e(2,3),e.HIGH=new e(3,2),e}(),t.Ecc=r}(r||(r={})),function(e){var t,r;t=e.QrSegment||(e.QrSegment={}),r=function(){function e(e,t){this.modeBits=e,this.numBitsCharCount=t}return e.prototype.numCharCountBits=function(e){return this.numBitsCharCount[Math.floor((e+7)/17)]},e.NUMERIC=new e(1,[10,12,14]),e.ALPHANUMERIC=new e(2,[9,11,13]),e.BYTE=new e(4,[8,16,16]),e.KANJI=new e(8,[8,10,12]),e.ECI=new e(7,[0,0,0]),e}(),t.Mode=r}(r||(r={}));var o=r,i={L:o.QrCode.Ecc.LOW,M:o.QrCode.Ecc.MEDIUM,Q:o.QrCode.Ecc.QUARTILE,H:o.QrCode.Ecc.HIGH},a=function(){try{(new Path2D).addPath(new Path2D)}catch(e){return!1}return!0}();function s(e){return e in i}function u(e,t){void 0===t&&(t=0);var r=[];return e.forEach((function(e,n){var o=null;e.forEach((function(i,a){if(!i&&null!==o)return r.push("M".concat(o+t," ").concat(n+t,"h").concat(a-o,"v1H").concat(o+t,"z")),void(o=null);if(a!==e.length-1)i&&null===o&&(o=a);else{if(!i)return;r.push(null===o?"M".concat(a+t,",").concat(n+t," h1v1H").concat(a+t,"z"):"M".concat(o+t,",").concat(n+t," h").concat(a+1-o,"v1H").concat(o+t,"z"))}}))})),r.join("")}function h(e,t,r,n){var o=n.width,i=n.height,a=n.x,s=n.y,u=e.length+2*r,h=Math.floor(.1*t),l=u/t,d=(o||h)*l,f=(i||h)*l,c=null==a?e.length/2-d/2:a*l,g=null==s?e.length/2-f/2:s*l,v=null;if(n.excavate){var p=Math.floor(c),m=Math.floor(g);v={x:p,y:m,w:Math.ceil(d+c-p),h:Math.ceil(f+g-m)}}return{x:c,y:g,h:f,w:d,excavation:v}}function l(e,t){return e.slice().map((function(e,r){return t.y>r||r>=t.y+t.h?e:e.map((function(e,r){return(t.x>r||r>=t.x+t.w)&&e}))}))}var d={value:{type:String,required:!0,default:""},size:{type:Number,default:100},level:{type:String,default:"L",validator:function(e){return s(e)}},background:{type:String,default:"#fff"},foreground:{type:String,default:"#000"},margin:{type:Number,required:!1,default:0},imageSettings:{type:Object,required:!1,default:function(){return{}}},gradient:{type:Boolean,required:!1,default:!1},gradientType:{type:String,required:!1,default:"linear",validator:function(e){return["linear","radial"].indexOf(e)>-1}},gradientStartColor:{type:String,required:!1,default:"#000"},gradientEndColor:{type:String,required:!1,default:"#fff"}},f=n(n({},d),{renderAs:{type:String,required:!1,default:"canvas",validator:function(e){return["canvas","svg"].indexOf(e)>-1}}}),c=t.defineComponent({name:"QRCodeSvg",props:d,setup:function(e){var r,a=t.ref(0),d=t.ref(""),f=function(){var t=e.value,n=e.level,f=e.margin>>>0,c=s(n)?n:"L",g=o.QrCode.encodeText(t,i[c]).getModules();if(a.value=g.length+2*f,e.imageSettings.src){var v=h(g,e.size,f,e.imageSettings);r={x:v.x+f,y:v.y+f,width:v.w,height:v.h},v.excavation&&(g=l(g,v.excavation))}d.value=u(g,f)};return f(),t.onUpdated(f),function(){return t.h("svg",{width:e.size,height:e.size,"shape-rendering":"crispEdges",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 ".concat(a.value," ").concat(a.value)},[t.h("defs",{},[e.gradient?t.h("linear"===e.gradientType?"linearGradient":"radialGradient",n({id:"qr-gradient"},"linear"===e.gradientType?{x1:"0%",y1:"0%",x2:"100%",y2:"100%"}:{cx:"50%",cy:"50%",r:"50%",fx:"50%",fy:"50%"}),[t.h("stop",{offset:"0%",style:{stopColor:e.gradientStartColor}}),t.h("stop",{offset:"100%",style:{stopColor:e.gradientEndColor}})]):null]),t.h("rect",{width:"100%",height:"100%",fill:e.background}),t.h("path",{fill:e.gradient?"url(#qr-gradient)":e.foreground,d:d.value}),e.imageSettings.src&&t.h("image",n({href:e.imageSettings.src},r))])}}}),g=t.defineComponent({name:"QRCodeCanvas",props:d,setup:function(e,r){var d=t.ref(null),f=t.ref(null),c=function(){var t=e.value,r=e.level,n=e.size,c=e.background,g=e.foreground,v=e.gradient,p=e.gradientType,m=e.gradientStartColor,E=e.gradientEndColor,C=e.margin>>>0,y=s(r)?r:"L",w=d.value;if(w){var M=w.getContext("2d");if(M){var R=o.QrCode.encodeText(t,i[y]).getModules(),S=R.length+2*C,N=f.value,A={x:0,y:0,width:0,height:0},P=e.imageSettings.src&&null!=N&&0!==N.naturalWidth&&0!==N.naturalHeight;if(P){var I=h(R,e.size,C,e.imageSettings);A={x:I.x+C,y:I.y+C,width:I.w,height:I.h},I.excavation&&(R=l(R,I.excavation))}var _=window.devicePixelRatio||1,z=n/S*_;if(w.height=w.width=n*_,M.scale(z,z),M.fillStyle=c,M.fillRect(0,0,S,S),v){var O=void 0;(O="linear"===p?M.createLinearGradient(0,0,S,S):M.createRadialGradient(S/2,S/2,0,S/2,S/2,S/2)).addColorStop(0,m),O.addColorStop(1,E),M.fillStyle=O}else M.fillStyle=g;a?M.fill(new Path2D(u(R,C))):R.forEach((function(e,t){e.forEach((function(e,r){e&&M.fillRect(r+C,t+C,1,1)}))})),P&&M.drawImage(N,A.x,A.y,A.width,A.height)}}};t.onMounted(c),t.onUpdated(c);var g=r.attrs.style;return function(){return t.h(t.Fragment,[t.h("canvas",n(n({},r.attrs),{ref:d,style:n(n({},g),{width:"".concat(e.size,"px"),height:"".concat(e.size,"px")})})),e.imageSettings.src&&t.h("img",{ref:f,src:e.imageSettings.src,style:{display:"none"},onLoad:c})])}}}),v=t.defineComponent({name:"Qrcode",render:function(){var e=this.$props;return t.h("svg"===e.renderAs?c:g,{value:e.value,size:e.size,margin:e.margin,level:e.level,background:e.background,foreground:e.foreground,imageSettings:e.imageSettings,gradient:e.gradient,gradientType:e.gradientType,gradientStartColor:e.gradientStartColor,gradientEndColor:e.gradientEndColor})},props:f});e.QrcodeCanvas=g,e.QrcodeSvg=c,e.default=v,Object.defineProperty(e,"__esModule",{value:!0})}));
|
package/dist/qrcode.vue.cjs.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* qrcode.vue v3.
|
|
2
|
+
* qrcode.vue v3.6.0
|
|
3
3
|
* A Vue.js component to generate QRCode. Both support Vue 2 and Vue 3
|
|
4
4
|
* © 2017-PRESENT @scopewu(https://github.com/scopewu)
|
|
5
5
|
* MIT License.
|
|
@@ -24,7 +24,7 @@ LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
|
|
24
24
|
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
|
25
25
|
PERFORMANCE OF THIS SOFTWARE.
|
|
26
26
|
***************************************************************************** */
|
|
27
|
-
/* global Reflect, Promise, SuppressedError, Symbol */
|
|
27
|
+
/* global Reflect, Promise, SuppressedError, Symbol, Iterator */
|
|
28
28
|
|
|
29
29
|
|
|
30
30
|
var __assign = function() {
|
|
@@ -1031,6 +1031,27 @@ var QRCodeProps = {
|
|
|
1031
1031
|
required: false,
|
|
1032
1032
|
default: function () { return ({}); },
|
|
1033
1033
|
},
|
|
1034
|
+
gradient: {
|
|
1035
|
+
type: Boolean,
|
|
1036
|
+
required: false,
|
|
1037
|
+
default: false,
|
|
1038
|
+
},
|
|
1039
|
+
gradientType: {
|
|
1040
|
+
type: String,
|
|
1041
|
+
required: false,
|
|
1042
|
+
default: 'linear',
|
|
1043
|
+
validator: function (t) { return ['linear', 'radial'].indexOf(t) > -1; },
|
|
1044
|
+
},
|
|
1045
|
+
gradientStartColor: {
|
|
1046
|
+
type: String,
|
|
1047
|
+
required: false,
|
|
1048
|
+
default: '#000',
|
|
1049
|
+
},
|
|
1050
|
+
gradientEndColor: {
|
|
1051
|
+
type: String,
|
|
1052
|
+
required: false,
|
|
1053
|
+
default: '#fff',
|
|
1054
|
+
},
|
|
1034
1055
|
};
|
|
1035
1056
|
var QRCodeVueProps = __assign(__assign({}, QRCodeProps), { renderAs: {
|
|
1036
1057
|
type: String,
|
|
@@ -1046,7 +1067,9 @@ var QrcodeSvg = vue.defineComponent({
|
|
|
1046
1067
|
var fgPath = vue.ref('');
|
|
1047
1068
|
var imageProps;
|
|
1048
1069
|
var generate = function () {
|
|
1049
|
-
var value = props.value,
|
|
1070
|
+
var value = props.value, _level = props.level, _margin = props.margin;
|
|
1071
|
+
var margin = _margin >>> 0;
|
|
1072
|
+
var level = validErrorCorrectLevel(_level) ? _level : defaultErrorCorrectLevel;
|
|
1050
1073
|
var cells = QR.QrCode.encodeText(value, ErrorCorrectLevelMap[level]).getModules();
|
|
1051
1074
|
numCells.value = cells.length + margin * 2;
|
|
1052
1075
|
if (props.imageSettings.src) {
|
|
@@ -1069,6 +1092,34 @@ var QrcodeSvg = vue.defineComponent({
|
|
|
1069
1092
|
// For level 40, 31329 -> 2
|
|
1070
1093
|
fgPath.value = generatePath(cells, margin);
|
|
1071
1094
|
};
|
|
1095
|
+
var renderGradient = function () {
|
|
1096
|
+
if (!props.gradient)
|
|
1097
|
+
return null;
|
|
1098
|
+
var gradientProps = props.gradientType === 'linear'
|
|
1099
|
+
? {
|
|
1100
|
+
x1: '0%',
|
|
1101
|
+
y1: '0%',
|
|
1102
|
+
x2: '100%',
|
|
1103
|
+
y2: '100%',
|
|
1104
|
+
}
|
|
1105
|
+
: {
|
|
1106
|
+
cx: '50%',
|
|
1107
|
+
cy: '50%',
|
|
1108
|
+
r: '50%',
|
|
1109
|
+
fx: '50%',
|
|
1110
|
+
fy: '50%',
|
|
1111
|
+
};
|
|
1112
|
+
return vue.h(props.gradientType === 'linear' ? 'linearGradient' : 'radialGradient', __assign({ id: 'qr-gradient' }, gradientProps), [
|
|
1113
|
+
vue.h('stop', {
|
|
1114
|
+
offset: '0%',
|
|
1115
|
+
style: { stopColor: props.gradientStartColor },
|
|
1116
|
+
}),
|
|
1117
|
+
vue.h('stop', {
|
|
1118
|
+
offset: '100%',
|
|
1119
|
+
style: { stopColor: props.gradientEndColor },
|
|
1120
|
+
}),
|
|
1121
|
+
]);
|
|
1122
|
+
};
|
|
1072
1123
|
generate();
|
|
1073
1124
|
vue.onUpdated(generate);
|
|
1074
1125
|
return function () { return vue.h('svg', {
|
|
@@ -1078,11 +1129,16 @@ var QrcodeSvg = vue.defineComponent({
|
|
|
1078
1129
|
xmlns: 'http://www.w3.org/2000/svg',
|
|
1079
1130
|
viewBox: "0 0 ".concat(numCells.value, " ").concat(numCells.value),
|
|
1080
1131
|
}, [
|
|
1081
|
-
vue.h('
|
|
1132
|
+
vue.h('defs', {}, [renderGradient()]),
|
|
1133
|
+
vue.h('rect', {
|
|
1134
|
+
width: '100%',
|
|
1135
|
+
height: '100%',
|
|
1082
1136
|
fill: props.background,
|
|
1083
|
-
d: "M0,0 h".concat(numCells.value, "v").concat(numCells.value, "H0z"),
|
|
1084
1137
|
}),
|
|
1085
|
-
vue.h('path', {
|
|
1138
|
+
vue.h('path', {
|
|
1139
|
+
fill: props.gradient ? 'url(#qr-gradient)' : props.foreground,
|
|
1140
|
+
d: fgPath.value,
|
|
1141
|
+
}),
|
|
1086
1142
|
props.imageSettings.src && vue.h('image', __assign({ href: props.imageSettings.src }, imageProps)),
|
|
1087
1143
|
]); };
|
|
1088
1144
|
},
|
|
@@ -1094,7 +1150,9 @@ var QrcodeCanvas = vue.defineComponent({
|
|
|
1094
1150
|
var canvasEl = vue.ref(null);
|
|
1095
1151
|
var imageRef = vue.ref(null);
|
|
1096
1152
|
var generate = function () {
|
|
1097
|
-
var value = props.value,
|
|
1153
|
+
var value = props.value, _level = props.level, size = props.size, _margin = props.margin, background = props.background, foreground = props.foreground, gradient = props.gradient, gradientType = props.gradientType, gradientStartColor = props.gradientStartColor, gradientEndColor = props.gradientEndColor;
|
|
1154
|
+
var margin = _margin >>> 0;
|
|
1155
|
+
var level = validErrorCorrectLevel(_level) ? _level : defaultErrorCorrectLevel;
|
|
1098
1156
|
var canvas = canvasEl.value;
|
|
1099
1157
|
if (!canvas) {
|
|
1100
1158
|
return;
|
|
@@ -1126,7 +1184,21 @@ var QrcodeCanvas = vue.defineComponent({
|
|
|
1126
1184
|
ctx.scale(scale, scale);
|
|
1127
1185
|
ctx.fillStyle = background;
|
|
1128
1186
|
ctx.fillRect(0, 0, numCells, numCells);
|
|
1129
|
-
|
|
1187
|
+
if (gradient) {
|
|
1188
|
+
var grad = void 0;
|
|
1189
|
+
if (gradientType === 'linear') {
|
|
1190
|
+
grad = ctx.createLinearGradient(0, 0, numCells, numCells);
|
|
1191
|
+
}
|
|
1192
|
+
else {
|
|
1193
|
+
grad = ctx.createRadialGradient(numCells / 2, numCells / 2, 0, numCells / 2, numCells / 2, numCells / 2);
|
|
1194
|
+
}
|
|
1195
|
+
grad.addColorStop(0, gradientStartColor);
|
|
1196
|
+
grad.addColorStop(1, gradientEndColor);
|
|
1197
|
+
ctx.fillStyle = grad;
|
|
1198
|
+
}
|
|
1199
|
+
else {
|
|
1200
|
+
ctx.fillStyle = foreground;
|
|
1201
|
+
}
|
|
1130
1202
|
if (SUPPORTS_PATH2D) {
|
|
1131
1203
|
ctx.fill(new Path2D(generatePath(cells, margin)));
|
|
1132
1204
|
}
|
|
@@ -1160,11 +1232,20 @@ var QrcodeCanvas = vue.defineComponent({
|
|
|
1160
1232
|
var QrcodeVue = vue.defineComponent({
|
|
1161
1233
|
name: 'Qrcode',
|
|
1162
1234
|
render: function () {
|
|
1163
|
-
var _a = this.$props, renderAs = _a.renderAs, value = _a.value,
|
|
1164
|
-
|
|
1165
|
-
|
|
1166
|
-
|
|
1167
|
-
|
|
1235
|
+
var _a = this.$props, renderAs = _a.renderAs, value = _a.value, size = _a.size, margin = _a.margin, level = _a.level, background = _a.background, foreground = _a.foreground, imageSettings = _a.imageSettings, gradient = _a.gradient, gradientType = _a.gradientType, gradientStartColor = _a.gradientStartColor, gradientEndColor = _a.gradientEndColor;
|
|
1236
|
+
return vue.h(renderAs === 'svg' ? QrcodeSvg : QrcodeCanvas, {
|
|
1237
|
+
value: value,
|
|
1238
|
+
size: size,
|
|
1239
|
+
margin: margin,
|
|
1240
|
+
level: level,
|
|
1241
|
+
background: background,
|
|
1242
|
+
foreground: foreground,
|
|
1243
|
+
imageSettings: imageSettings,
|
|
1244
|
+
gradient: gradient,
|
|
1245
|
+
gradientType: gradientType,
|
|
1246
|
+
gradientStartColor: gradientStartColor,
|
|
1247
|
+
gradientEndColor: gradientEndColor,
|
|
1248
|
+
});
|
|
1168
1249
|
},
|
|
1169
1250
|
props: QRCodeVueProps,
|
|
1170
1251
|
});
|
package/dist/qrcode.vue.esm.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* qrcode.vue v3.
|
|
2
|
+
* qrcode.vue v3.6.0
|
|
3
3
|
* A Vue.js component to generate QRCode. Both support Vue 2 and Vue 3
|
|
4
4
|
* © 2017-PRESENT @scopewu(https://github.com/scopewu)
|
|
5
5
|
* MIT License.
|
|
@@ -20,7 +20,7 @@ LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
|
|
20
20
|
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
|
21
21
|
PERFORMANCE OF THIS SOFTWARE.
|
|
22
22
|
***************************************************************************** */
|
|
23
|
-
/* global Reflect, Promise, SuppressedError, Symbol */
|
|
23
|
+
/* global Reflect, Promise, SuppressedError, Symbol, Iterator */
|
|
24
24
|
|
|
25
25
|
|
|
26
26
|
var __assign = function() {
|
|
@@ -1027,6 +1027,27 @@ var QRCodeProps = {
|
|
|
1027
1027
|
required: false,
|
|
1028
1028
|
default: function () { return ({}); },
|
|
1029
1029
|
},
|
|
1030
|
+
gradient: {
|
|
1031
|
+
type: Boolean,
|
|
1032
|
+
required: false,
|
|
1033
|
+
default: false,
|
|
1034
|
+
},
|
|
1035
|
+
gradientType: {
|
|
1036
|
+
type: String,
|
|
1037
|
+
required: false,
|
|
1038
|
+
default: 'linear',
|
|
1039
|
+
validator: function (t) { return ['linear', 'radial'].indexOf(t) > -1; },
|
|
1040
|
+
},
|
|
1041
|
+
gradientStartColor: {
|
|
1042
|
+
type: String,
|
|
1043
|
+
required: false,
|
|
1044
|
+
default: '#000',
|
|
1045
|
+
},
|
|
1046
|
+
gradientEndColor: {
|
|
1047
|
+
type: String,
|
|
1048
|
+
required: false,
|
|
1049
|
+
default: '#fff',
|
|
1050
|
+
},
|
|
1030
1051
|
};
|
|
1031
1052
|
var QRCodeVueProps = __assign(__assign({}, QRCodeProps), { renderAs: {
|
|
1032
1053
|
type: String,
|
|
@@ -1042,7 +1063,9 @@ var QrcodeSvg = defineComponent({
|
|
|
1042
1063
|
var fgPath = ref('');
|
|
1043
1064
|
var imageProps;
|
|
1044
1065
|
var generate = function () {
|
|
1045
|
-
var value = props.value,
|
|
1066
|
+
var value = props.value, _level = props.level, _margin = props.margin;
|
|
1067
|
+
var margin = _margin >>> 0;
|
|
1068
|
+
var level = validErrorCorrectLevel(_level) ? _level : defaultErrorCorrectLevel;
|
|
1046
1069
|
var cells = QR.QrCode.encodeText(value, ErrorCorrectLevelMap[level]).getModules();
|
|
1047
1070
|
numCells.value = cells.length + margin * 2;
|
|
1048
1071
|
if (props.imageSettings.src) {
|
|
@@ -1065,6 +1088,34 @@ var QrcodeSvg = defineComponent({
|
|
|
1065
1088
|
// For level 40, 31329 -> 2
|
|
1066
1089
|
fgPath.value = generatePath(cells, margin);
|
|
1067
1090
|
};
|
|
1091
|
+
var renderGradient = function () {
|
|
1092
|
+
if (!props.gradient)
|
|
1093
|
+
return null;
|
|
1094
|
+
var gradientProps = props.gradientType === 'linear'
|
|
1095
|
+
? {
|
|
1096
|
+
x1: '0%',
|
|
1097
|
+
y1: '0%',
|
|
1098
|
+
x2: '100%',
|
|
1099
|
+
y2: '100%',
|
|
1100
|
+
}
|
|
1101
|
+
: {
|
|
1102
|
+
cx: '50%',
|
|
1103
|
+
cy: '50%',
|
|
1104
|
+
r: '50%',
|
|
1105
|
+
fx: '50%',
|
|
1106
|
+
fy: '50%',
|
|
1107
|
+
};
|
|
1108
|
+
return h(props.gradientType === 'linear' ? 'linearGradient' : 'radialGradient', __assign({ id: 'qr-gradient' }, gradientProps), [
|
|
1109
|
+
h('stop', {
|
|
1110
|
+
offset: '0%',
|
|
1111
|
+
style: { stopColor: props.gradientStartColor },
|
|
1112
|
+
}),
|
|
1113
|
+
h('stop', {
|
|
1114
|
+
offset: '100%',
|
|
1115
|
+
style: { stopColor: props.gradientEndColor },
|
|
1116
|
+
}),
|
|
1117
|
+
]);
|
|
1118
|
+
};
|
|
1068
1119
|
generate();
|
|
1069
1120
|
onUpdated(generate);
|
|
1070
1121
|
return function () { return h('svg', {
|
|
@@ -1074,11 +1125,16 @@ var QrcodeSvg = defineComponent({
|
|
|
1074
1125
|
xmlns: 'http://www.w3.org/2000/svg',
|
|
1075
1126
|
viewBox: "0 0 ".concat(numCells.value, " ").concat(numCells.value),
|
|
1076
1127
|
}, [
|
|
1077
|
-
h('
|
|
1128
|
+
h('defs', {}, [renderGradient()]),
|
|
1129
|
+
h('rect', {
|
|
1130
|
+
width: '100%',
|
|
1131
|
+
height: '100%',
|
|
1078
1132
|
fill: props.background,
|
|
1079
|
-
d: "M0,0 h".concat(numCells.value, "v").concat(numCells.value, "H0z"),
|
|
1080
1133
|
}),
|
|
1081
|
-
h('path', {
|
|
1134
|
+
h('path', {
|
|
1135
|
+
fill: props.gradient ? 'url(#qr-gradient)' : props.foreground,
|
|
1136
|
+
d: fgPath.value,
|
|
1137
|
+
}),
|
|
1082
1138
|
props.imageSettings.src && h('image', __assign({ href: props.imageSettings.src }, imageProps)),
|
|
1083
1139
|
]); };
|
|
1084
1140
|
},
|
|
@@ -1090,7 +1146,9 @@ var QrcodeCanvas = defineComponent({
|
|
|
1090
1146
|
var canvasEl = ref(null);
|
|
1091
1147
|
var imageRef = ref(null);
|
|
1092
1148
|
var generate = function () {
|
|
1093
|
-
var value = props.value,
|
|
1149
|
+
var value = props.value, _level = props.level, size = props.size, _margin = props.margin, background = props.background, foreground = props.foreground, gradient = props.gradient, gradientType = props.gradientType, gradientStartColor = props.gradientStartColor, gradientEndColor = props.gradientEndColor;
|
|
1150
|
+
var margin = _margin >>> 0;
|
|
1151
|
+
var level = validErrorCorrectLevel(_level) ? _level : defaultErrorCorrectLevel;
|
|
1094
1152
|
var canvas = canvasEl.value;
|
|
1095
1153
|
if (!canvas) {
|
|
1096
1154
|
return;
|
|
@@ -1122,7 +1180,21 @@ var QrcodeCanvas = defineComponent({
|
|
|
1122
1180
|
ctx.scale(scale, scale);
|
|
1123
1181
|
ctx.fillStyle = background;
|
|
1124
1182
|
ctx.fillRect(0, 0, numCells, numCells);
|
|
1125
|
-
|
|
1183
|
+
if (gradient) {
|
|
1184
|
+
var grad = void 0;
|
|
1185
|
+
if (gradientType === 'linear') {
|
|
1186
|
+
grad = ctx.createLinearGradient(0, 0, numCells, numCells);
|
|
1187
|
+
}
|
|
1188
|
+
else {
|
|
1189
|
+
grad = ctx.createRadialGradient(numCells / 2, numCells / 2, 0, numCells / 2, numCells / 2, numCells / 2);
|
|
1190
|
+
}
|
|
1191
|
+
grad.addColorStop(0, gradientStartColor);
|
|
1192
|
+
grad.addColorStop(1, gradientEndColor);
|
|
1193
|
+
ctx.fillStyle = grad;
|
|
1194
|
+
}
|
|
1195
|
+
else {
|
|
1196
|
+
ctx.fillStyle = foreground;
|
|
1197
|
+
}
|
|
1126
1198
|
if (SUPPORTS_PATH2D) {
|
|
1127
1199
|
ctx.fill(new Path2D(generatePath(cells, margin)));
|
|
1128
1200
|
}
|
|
@@ -1156,11 +1228,20 @@ var QrcodeCanvas = defineComponent({
|
|
|
1156
1228
|
var QrcodeVue = defineComponent({
|
|
1157
1229
|
name: 'Qrcode',
|
|
1158
1230
|
render: function () {
|
|
1159
|
-
var _a = this.$props, renderAs = _a.renderAs, value = _a.value,
|
|
1160
|
-
|
|
1161
|
-
|
|
1162
|
-
|
|
1163
|
-
|
|
1231
|
+
var _a = this.$props, renderAs = _a.renderAs, value = _a.value, size = _a.size, margin = _a.margin, level = _a.level, background = _a.background, foreground = _a.foreground, imageSettings = _a.imageSettings, gradient = _a.gradient, gradientType = _a.gradientType, gradientStartColor = _a.gradientStartColor, gradientEndColor = _a.gradientEndColor;
|
|
1232
|
+
return h(renderAs === 'svg' ? QrcodeSvg : QrcodeCanvas, {
|
|
1233
|
+
value: value,
|
|
1234
|
+
size: size,
|
|
1235
|
+
margin: margin,
|
|
1236
|
+
level: level,
|
|
1237
|
+
background: background,
|
|
1238
|
+
foreground: foreground,
|
|
1239
|
+
imageSettings: imageSettings,
|
|
1240
|
+
gradient: gradient,
|
|
1241
|
+
gradientType: gradientType,
|
|
1242
|
+
gradientStartColor: gradientStartColor,
|
|
1243
|
+
gradientEndColor: gradientEndColor,
|
|
1244
|
+
});
|
|
1164
1245
|
},
|
|
1165
1246
|
props: QRCodeVueProps,
|
|
1166
1247
|
});
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "qrcode.vue",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.6.0",
|
|
4
4
|
"description": "A Vue.js component to generate QRCode. Both support Vue 2 and Vue 3",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/qrcode.vue.cjs.js",
|
|
@@ -21,13 +21,10 @@
|
|
|
21
21
|
"dev": "rsbuild dev",
|
|
22
22
|
"build": "rollup -c"
|
|
23
23
|
},
|
|
24
|
-
"repository":
|
|
25
|
-
"type": "git",
|
|
26
|
-
"url": "git+https://github.com/scopewu/qrcode.vue.git"
|
|
27
|
-
},
|
|
24
|
+
"repository": "https://github.com/scopewu/qrcode.vue.git",
|
|
28
25
|
"keywords": [
|
|
29
26
|
"vue",
|
|
30
|
-
"vue
|
|
27
|
+
"vue qrcode",
|
|
31
28
|
"component",
|
|
32
29
|
"code",
|
|
33
30
|
"qrcode",
|
|
@@ -51,10 +48,12 @@
|
|
|
51
48
|
"dependencies": {},
|
|
52
49
|
"devDependencies": {
|
|
53
50
|
"@rollup/plugin-terser": "^0.4.4",
|
|
54
|
-
"@rsbuild/core": "^1.0.
|
|
55
|
-
"
|
|
51
|
+
"@rsbuild/core": "^1.0.19",
|
|
52
|
+
"@rsbuild/plugin-sass": "^1.1.0",
|
|
53
|
+
"bootstrap": "^5.3.3",
|
|
54
|
+
"rollup": "^4.24.3",
|
|
56
55
|
"rollup-plugin-typescript2": "^0.36.0",
|
|
57
|
-
"typescript": "^5.6.
|
|
58
|
-
"vue": "^3.5.
|
|
56
|
+
"typescript": "^5.6.3",
|
|
57
|
+
"vue": "^3.5.12"
|
|
59
58
|
}
|
|
60
59
|
}
|