snice 3.8.0 → 3.9.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/bin/snice.js +8 -0
- package/dist/components/file-gallery/snice-file-gallery.d.ts +87 -0
- package/dist/components/file-gallery/snice-file-gallery.js +892 -0
- package/dist/components/file-gallery/snice-file-gallery.js.map +1 -0
- package/dist/components/file-gallery/snice-file-gallery.types.d.ts +72 -0
- package/dist/components/qr-reader/qr-decoder.d.ts +20 -0
- package/dist/components/qr-reader/qr-decoder.js +49 -0
- package/dist/components/qr-reader/qr-decoder.js.map +1 -0
- package/dist/components/qr-reader/qr-worker.d.ts +6 -0
- package/dist/components/qr-reader/qr-worker.js +64 -0
- package/dist/components/qr-reader/qr-worker.js.map +1 -0
- package/dist/components/qr-reader/snice-qr-reader.d.ts +39 -0
- package/dist/components/qr-reader/snice-qr-reader.js +436 -0
- package/dist/components/qr-reader/snice-qr-reader.js.map +1 -0
- package/dist/components/qr-reader/snice-qr-reader.types.d.ts +17 -0
- package/dist/components/qr-reader/zxing-reader.mjs +1582 -0
- package/dist/components/qr-reader/zxing-share.mjs +305 -0
- package/dist/components/qr-reader/zxing_reader.wasm +0 -0
- package/dist/components/zxing-reader-B3Rfebg9.js +1771 -0
- package/dist/components/zxing-reader-B3Rfebg9.js.map +1 -0
- package/dist/index.cjs +1 -1
- package/dist/index.esm.js +1 -1
- package/dist/index.iife.js +1 -1
- package/dist/symbols.cjs +1 -1
- package/dist/symbols.esm.js +1 -1
- package/dist/transitions.cjs +1 -1
- package/dist/transitions.esm.js +1 -1
- package/docs/ai/README.md +1 -1
- package/docs/ai/components/file-gallery.md +206 -0
- package/docs/ai/components/qr-reader.md +80 -0
- package/docs/components/file-gallery.md +692 -0
- package/docs/components/qr-reader.md +327 -0
- package/package.json +1 -1
|
@@ -0,0 +1,436 @@
|
|
|
1
|
+
import { __runInitializers, __esDecorate } from 'tslib';
|
|
2
|
+
import { element, property, query, styles, ready, dispose, render, dispatch, css, html } from 'snice';
|
|
3
|
+
import { QRCodeDecoder } from './qr-decoder.js';
|
|
4
|
+
import '../zxing-reader-B3Rfebg9.js';
|
|
5
|
+
|
|
6
|
+
var readerStyles = ":host{display:block;width:100%;max-width:40rem;font-family:var(--snice-font-family, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif)}.qr-reader-container{position:relative;width:100%;background:rgb(0 0 0);border-radius:var(--snice-border-radius-lg,8px);overflow:hidden}.qr-reader-viewport{position:relative;width:100%;padding-bottom:75%;background:rgb(0 0 0)}video{position:absolute;top:0;left:0;width:100%;height:100%;object-fit:cover}canvas{position:absolute;top:0;left:0;width:100%;height:100%;object-fit:cover;display:none}canvas:not([style*=\"display: none\"]){display:block}.qr-reader-overlay{position:absolute;top:0;left:0;width:100%;height:100%;display:flex;align-items:center;justify-content:center;background:rgb(0 0 0 / .7);color:rgb(255 255 255)}.qr-reader-message{text-align:center}.qr-reader-message svg{display:block;margin:0 auto var(--snice-spacing-md,1rem);opacity:.7}.qr-reader-message p{margin:0;font-size:var(--snice-font-size-md, 1rem)}.qr-reader-corners{position:absolute;top:20%;left:20%;right:20%;bottom:20%}.corner{position:absolute;width:3rem;height:3rem;border:3px solid var(--snice-color-primary,rgb(37 99 235))}.corner.top-left{top:0;left:0;border-right:none;border-bottom:none}.corner.top-right{top:0;right:0;border-left:none;border-bottom:none}.corner.bottom-left{bottom:0;left:0;border-right:none;border-top:none}.corner.bottom-right{bottom:0;right:0;border-left:none;border-top:none}.qr-reader-controls{position:absolute;bottom:0;left:0;right:0;display:flex;align-items:center;justify-content:center;gap:var(--snice-spacing-md,1rem);padding:var(--snice-spacing-lg,1.5rem) var(--snice-spacing-md,1rem);background:linear-gradient(to top,rgb(0 0 0 / .5),transparent);z-index:10}.qr-btn{width:3rem;height:3rem;border-radius:var(--snice-border-radius-circle,50%);border:none;background:rgb(0 0 0 / .4);cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all var(--snice-transition-fast, 150ms) ease;color:rgb(255 255 255);backdrop-filter:blur(0.5rem);padding:0}.qr-btn:hover{background:rgb(0 0 0 / .6);transform:scale(1.05)}.qr-btn:active{transform:scale(.95)}.qr-btn.start{background:var(--snice-color-primary,rgb(37 99 235))}.qr-btn.start:hover{background:rgb(29 78 216)}.qr-reader-result{position:absolute;top:var(--snice-spacing-md,1rem);left:var(--snice-spacing-md,1rem);right:var(--snice-spacing-md,1rem);padding:var(--snice-spacing-sm,.75rem) var(--snice-spacing-md,1rem);background:var(--snice-color-success,rgb(34 197 94));color:rgb(255 255 255);border-radius:var(--snice-border-radius-md,4px);font-size:var(--snice-font-size-sm, .875rem);z-index:5;word-break:break-all;animation:.3s ease-out slideDown}@keyframes slideDown{from{opacity:0;transform:translateY(-1rem)}to{opacity:1;transform:translateY(0)}}.qr-reader-error{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);padding:var(--snice-spacing-md,1rem) var(--snice-spacing-lg,1.5rem);background:var(--snice-color-danger,rgb(239 68 68));color:rgb(255 255 255);border-radius:var(--snice-border-radius-lg,8px);text-align:center;max-width:80%;z-index:5}";
|
|
7
|
+
|
|
8
|
+
let SniceQRReader = (() => {
|
|
9
|
+
let _classDecorators = [element('snice-qr-reader')];
|
|
10
|
+
let _classDescriptor;
|
|
11
|
+
let _classExtraInitializers = [];
|
|
12
|
+
let _classThis;
|
|
13
|
+
let _classSuper = HTMLElement;
|
|
14
|
+
let _instanceExtraInitializers = [];
|
|
15
|
+
let _autoStart_decorators;
|
|
16
|
+
let _autoStart_initializers = [];
|
|
17
|
+
let _autoStart_extraInitializers = [];
|
|
18
|
+
let _camera_decorators;
|
|
19
|
+
let _camera_initializers = [];
|
|
20
|
+
let _camera_extraInitializers = [];
|
|
21
|
+
let _pickFirst_decorators;
|
|
22
|
+
let _pickFirst_initializers = [];
|
|
23
|
+
let _pickFirst_extraInitializers = [];
|
|
24
|
+
let _manualSnap_decorators;
|
|
25
|
+
let _manualSnap_initializers = [];
|
|
26
|
+
let _manualSnap_extraInitializers = [];
|
|
27
|
+
let _scanSpeed_decorators;
|
|
28
|
+
let _scanSpeed_initializers = [];
|
|
29
|
+
let _scanSpeed_extraInitializers = [];
|
|
30
|
+
let _scanning_decorators;
|
|
31
|
+
let _scanning_initializers = [];
|
|
32
|
+
let _scanning_extraInitializers = [];
|
|
33
|
+
let _lastScan_decorators;
|
|
34
|
+
let _lastScan_initializers = [];
|
|
35
|
+
let _lastScan_extraInitializers = [];
|
|
36
|
+
let _errorMessage_decorators;
|
|
37
|
+
let _errorMessage_initializers = [];
|
|
38
|
+
let _errorMessage_extraInitializers = [];
|
|
39
|
+
let _showSnapshot_decorators;
|
|
40
|
+
let _showSnapshot_initializers = [];
|
|
41
|
+
let _showSnapshot_extraInitializers = [];
|
|
42
|
+
let _video_decorators;
|
|
43
|
+
let _video_initializers = [];
|
|
44
|
+
let _video_extraInitializers = [];
|
|
45
|
+
let _canvas_decorators;
|
|
46
|
+
let _canvas_initializers = [];
|
|
47
|
+
let _canvas_extraInitializers = [];
|
|
48
|
+
let _styles_decorators;
|
|
49
|
+
let _init_decorators;
|
|
50
|
+
let _cleanup_decorators;
|
|
51
|
+
let _render_decorators;
|
|
52
|
+
let _emitQRScan_decorators;
|
|
53
|
+
let _emitQRError_decorators;
|
|
54
|
+
let _emitCameraReady_decorators;
|
|
55
|
+
let _emitCameraError_decorators;
|
|
56
|
+
(class extends _classSuper {
|
|
57
|
+
static { _classThis = this; }
|
|
58
|
+
constructor() {
|
|
59
|
+
super(...arguments);
|
|
60
|
+
this.autoStart = (__runInitializers(this, _instanceExtraInitializers), __runInitializers(this, _autoStart_initializers, false));
|
|
61
|
+
this.camera = (__runInitializers(this, _autoStart_extraInitializers), __runInitializers(this, _camera_initializers, 'back'));
|
|
62
|
+
this.pickFirst = (__runInitializers(this, _camera_extraInitializers), __runInitializers(this, _pickFirst_initializers, false));
|
|
63
|
+
this.manualSnap = (__runInitializers(this, _pickFirst_extraInitializers), __runInitializers(this, _manualSnap_initializers, false));
|
|
64
|
+
this.scanSpeed = (__runInitializers(this, _manualSnap_extraInitializers), __runInitializers(this, _scanSpeed_initializers, 3));
|
|
65
|
+
this.scanning = (__runInitializers(this, _scanSpeed_extraInitializers), __runInitializers(this, _scanning_initializers, false));
|
|
66
|
+
this.lastScan = (__runInitializers(this, _scanning_extraInitializers), __runInitializers(this, _lastScan_initializers, ''));
|
|
67
|
+
this.errorMessage = (__runInitializers(this, _lastScan_extraInitializers), __runInitializers(this, _errorMessage_initializers, ''));
|
|
68
|
+
this.showSnapshot = (__runInitializers(this, _errorMessage_extraInitializers), __runInitializers(this, _showSnapshot_initializers, false));
|
|
69
|
+
this.video = (__runInitializers(this, _showSnapshot_extraInitializers), __runInitializers(this, _video_initializers, void 0));
|
|
70
|
+
this.canvas = (__runInitializers(this, _video_extraInitializers), __runInitializers(this, _canvas_initializers, void 0));
|
|
71
|
+
this.stream = (__runInitializers(this, _canvas_extraInitializers), null);
|
|
72
|
+
this.scanFrame = null;
|
|
73
|
+
this.qrDecoder = null;
|
|
74
|
+
this.frameCount = 0;
|
|
75
|
+
this.isDecoding = false;
|
|
76
|
+
}
|
|
77
|
+
static {
|
|
78
|
+
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
|
|
79
|
+
_autoStart_decorators = [property({ type: Boolean, attribute: 'auto-start' })];
|
|
80
|
+
_camera_decorators = [property({ type: String })];
|
|
81
|
+
_pickFirst_decorators = [property({ type: Boolean, attribute: 'pick-first' })];
|
|
82
|
+
_manualSnap_decorators = [property({ type: Boolean, attribute: 'manual-snap' })];
|
|
83
|
+
_scanSpeed_decorators = [property({ type: Number, attribute: 'scan-speed' })];
|
|
84
|
+
_scanning_decorators = [property({ type: Boolean })];
|
|
85
|
+
_lastScan_decorators = [property({ type: String })];
|
|
86
|
+
_errorMessage_decorators = [property({ type: String })];
|
|
87
|
+
_showSnapshot_decorators = [property({ type: Boolean })];
|
|
88
|
+
_video_decorators = [query('video')];
|
|
89
|
+
_canvas_decorators = [query('canvas')];
|
|
90
|
+
_styles_decorators = [styles()];
|
|
91
|
+
_init_decorators = [ready()];
|
|
92
|
+
_cleanup_decorators = [dispose()];
|
|
93
|
+
_render_decorators = [render()];
|
|
94
|
+
_emitQRScan_decorators = [dispatch('@snice/qr-scan', { bubbles: true, composed: true })];
|
|
95
|
+
_emitQRError_decorators = [dispatch('@snice/qr-error', { bubbles: true, composed: true })];
|
|
96
|
+
_emitCameraReady_decorators = [dispatch('@snice/camera-ready', { bubbles: true, composed: true })];
|
|
97
|
+
_emitCameraError_decorators = [dispatch('@snice/camera-error', { bubbles: true, composed: true })];
|
|
98
|
+
__esDecorate(this, null, _styles_decorators, { kind: "method", name: "styles", static: false, private: false, access: { has: obj => "styles" in obj, get: obj => obj.styles }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
99
|
+
__esDecorate(this, null, _init_decorators, { kind: "method", name: "init", static: false, private: false, access: { has: obj => "init" in obj, get: obj => obj.init }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
100
|
+
__esDecorate(this, null, _cleanup_decorators, { kind: "method", name: "cleanup", static: false, private: false, access: { has: obj => "cleanup" in obj, get: obj => obj.cleanup }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
101
|
+
__esDecorate(this, null, _render_decorators, { kind: "method", name: "render", static: false, private: false, access: { has: obj => "render" in obj, get: obj => obj.render }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
102
|
+
__esDecorate(this, null, _emitQRScan_decorators, { kind: "method", name: "emitQRScan", static: false, private: false, access: { has: obj => "emitQRScan" in obj, get: obj => obj.emitQRScan }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
103
|
+
__esDecorate(this, null, _emitQRError_decorators, { kind: "method", name: "emitQRError", static: false, private: false, access: { has: obj => "emitQRError" in obj, get: obj => obj.emitQRError }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
104
|
+
__esDecorate(this, null, _emitCameraReady_decorators, { kind: "method", name: "emitCameraReady", static: false, private: false, access: { has: obj => "emitCameraReady" in obj, get: obj => obj.emitCameraReady }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
105
|
+
__esDecorate(this, null, _emitCameraError_decorators, { kind: "method", name: "emitCameraError", static: false, private: false, access: { has: obj => "emitCameraError" in obj, get: obj => obj.emitCameraError }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
106
|
+
__esDecorate(null, null, _autoStart_decorators, { kind: "field", name: "autoStart", static: false, private: false, access: { has: obj => "autoStart" in obj, get: obj => obj.autoStart, set: (obj, value) => { obj.autoStart = value; } }, metadata: _metadata }, _autoStart_initializers, _autoStart_extraInitializers);
|
|
107
|
+
__esDecorate(null, null, _camera_decorators, { kind: "field", name: "camera", static: false, private: false, access: { has: obj => "camera" in obj, get: obj => obj.camera, set: (obj, value) => { obj.camera = value; } }, metadata: _metadata }, _camera_initializers, _camera_extraInitializers);
|
|
108
|
+
__esDecorate(null, null, _pickFirst_decorators, { kind: "field", name: "pickFirst", static: false, private: false, access: { has: obj => "pickFirst" in obj, get: obj => obj.pickFirst, set: (obj, value) => { obj.pickFirst = value; } }, metadata: _metadata }, _pickFirst_initializers, _pickFirst_extraInitializers);
|
|
109
|
+
__esDecorate(null, null, _manualSnap_decorators, { kind: "field", name: "manualSnap", static: false, private: false, access: { has: obj => "manualSnap" in obj, get: obj => obj.manualSnap, set: (obj, value) => { obj.manualSnap = value; } }, metadata: _metadata }, _manualSnap_initializers, _manualSnap_extraInitializers);
|
|
110
|
+
__esDecorate(null, null, _scanSpeed_decorators, { kind: "field", name: "scanSpeed", static: false, private: false, access: { has: obj => "scanSpeed" in obj, get: obj => obj.scanSpeed, set: (obj, value) => { obj.scanSpeed = value; } }, metadata: _metadata }, _scanSpeed_initializers, _scanSpeed_extraInitializers);
|
|
111
|
+
__esDecorate(null, null, _scanning_decorators, { kind: "field", name: "scanning", static: false, private: false, access: { has: obj => "scanning" in obj, get: obj => obj.scanning, set: (obj, value) => { obj.scanning = value; } }, metadata: _metadata }, _scanning_initializers, _scanning_extraInitializers);
|
|
112
|
+
__esDecorate(null, null, _lastScan_decorators, { kind: "field", name: "lastScan", static: false, private: false, access: { has: obj => "lastScan" in obj, get: obj => obj.lastScan, set: (obj, value) => { obj.lastScan = value; } }, metadata: _metadata }, _lastScan_initializers, _lastScan_extraInitializers);
|
|
113
|
+
__esDecorate(null, null, _errorMessage_decorators, { kind: "field", name: "errorMessage", static: false, private: false, access: { has: obj => "errorMessage" in obj, get: obj => obj.errorMessage, set: (obj, value) => { obj.errorMessage = value; } }, metadata: _metadata }, _errorMessage_initializers, _errorMessage_extraInitializers);
|
|
114
|
+
__esDecorate(null, null, _showSnapshot_decorators, { kind: "field", name: "showSnapshot", static: false, private: false, access: { has: obj => "showSnapshot" in obj, get: obj => obj.showSnapshot, set: (obj, value) => { obj.showSnapshot = value; } }, metadata: _metadata }, _showSnapshot_initializers, _showSnapshot_extraInitializers);
|
|
115
|
+
__esDecorate(null, null, _video_decorators, { kind: "field", name: "video", static: false, private: false, access: { has: obj => "video" in obj, get: obj => obj.video, set: (obj, value) => { obj.video = value; } }, metadata: _metadata }, _video_initializers, _video_extraInitializers);
|
|
116
|
+
__esDecorate(null, null, _canvas_decorators, { kind: "field", name: "canvas", static: false, private: false, access: { has: obj => "canvas" in obj, get: obj => obj.canvas, set: (obj, value) => { obj.canvas = value; } }, metadata: _metadata }, _canvas_initializers, _canvas_extraInitializers);
|
|
117
|
+
__esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
|
|
118
|
+
_classThis = _classDescriptor.value;
|
|
119
|
+
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
120
|
+
__runInitializers(_classThis, _classExtraInitializers);
|
|
121
|
+
}
|
|
122
|
+
styles() {
|
|
123
|
+
return css /*css*/ `${readerStyles}`;
|
|
124
|
+
}
|
|
125
|
+
async init() {
|
|
126
|
+
// Use main thread decoder (Workers with ES6 modules in Blobs have compatibility issues)
|
|
127
|
+
try {
|
|
128
|
+
this.qrDecoder = new QRCodeDecoder();
|
|
129
|
+
console.log('QR decoder initialized (main thread)');
|
|
130
|
+
}
|
|
131
|
+
catch (e) {
|
|
132
|
+
console.error('QR decoder initialization failed:', e);
|
|
133
|
+
this.errorMessage = 'Failed to initialize QR decoder';
|
|
134
|
+
}
|
|
135
|
+
if (this.autoStart) {
|
|
136
|
+
await this.start();
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
cleanup() {
|
|
140
|
+
this.stop();
|
|
141
|
+
}
|
|
142
|
+
render() {
|
|
143
|
+
return html /*html*/ `
|
|
144
|
+
<div class="qr-reader-container">
|
|
145
|
+
<div class="qr-reader-viewport">
|
|
146
|
+
<video autoplay playsinline muted style="${this.showSnapshot ? 'display: none;' : ''}"></video>
|
|
147
|
+
<canvas style="${this.showSnapshot ? '' : 'display: none;'}"></canvas>
|
|
148
|
+
|
|
149
|
+
<if ${!this.scanning && !this.errorMessage}>
|
|
150
|
+
<div class="qr-reader-overlay">
|
|
151
|
+
<div class="qr-reader-message">
|
|
152
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="48" height="48" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
|
|
153
|
+
<rect x="3" y="3" width="7" height="7"></rect>
|
|
154
|
+
<rect x="14" y="3" width="7" height="7"></rect>
|
|
155
|
+
<rect x="14" y="14" width="7" height="7"></rect>
|
|
156
|
+
<rect x="3" y="14" width="7" height="7"></rect>
|
|
157
|
+
</svg>
|
|
158
|
+
<p>Click start to ${this.manualSnap ? 'open camera' : 'scan QR code'}</p>
|
|
159
|
+
</div>
|
|
160
|
+
</div>
|
|
161
|
+
</if>
|
|
162
|
+
|
|
163
|
+
<if ${this.scanning && !this.manualSnap}>
|
|
164
|
+
<div class="qr-reader-corners">
|
|
165
|
+
<div class="corner top-left"></div>
|
|
166
|
+
<div class="corner top-right"></div>
|
|
167
|
+
<div class="corner bottom-left"></div>
|
|
168
|
+
<div class="corner bottom-right"></div>
|
|
169
|
+
</div>
|
|
170
|
+
</if>
|
|
171
|
+
|
|
172
|
+
<if ${this.lastScan}>
|
|
173
|
+
<div class="qr-reader-result">
|
|
174
|
+
<strong>Scanned:</strong> ${this.lastScan}
|
|
175
|
+
</div>
|
|
176
|
+
</if>
|
|
177
|
+
|
|
178
|
+
<if ${this.errorMessage}>
|
|
179
|
+
<div class="qr-reader-error">${this.errorMessage}</div>
|
|
180
|
+
</if>
|
|
181
|
+
</div>
|
|
182
|
+
|
|
183
|
+
<div class="qr-reader-controls">
|
|
184
|
+
<if ${!this.scanning}>
|
|
185
|
+
<button class="qr-btn start" @click=${() => this.start()} title="${this.manualSnap ? 'Open Camera' : 'Start Scanning'}">
|
|
186
|
+
<if ${this.manualSnap}>
|
|
187
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
|
|
188
|
+
<path d="M23 19a2 2 0 0 1-2 2H3a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h4l2-3h6l2 3h4a2 2 0 0 1 2 2z"></path>
|
|
189
|
+
<circle cx="12" cy="13" r="4"></circle>
|
|
190
|
+
</svg>
|
|
191
|
+
</if>
|
|
192
|
+
<if ${!this.manualSnap}>
|
|
193
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="currentColor">
|
|
194
|
+
<path d="M8 5v14l11-7z"/>
|
|
195
|
+
</svg>
|
|
196
|
+
</if>
|
|
197
|
+
</button>
|
|
198
|
+
</if>
|
|
199
|
+
<if ${this.scanning && !this.manualSnap}>
|
|
200
|
+
<button class="qr-btn stop" @click=${() => this.stop()} title="Stop Scanning">
|
|
201
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="currentColor">
|
|
202
|
+
<rect x="6" y="6" width="12" height="12"></rect>
|
|
203
|
+
</svg>
|
|
204
|
+
</button>
|
|
205
|
+
</if>
|
|
206
|
+
<if ${this.scanning && this.manualSnap}>
|
|
207
|
+
<button class="qr-btn" @click=${() => this.snap()} title="Take Snapshot">
|
|
208
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
|
|
209
|
+
<circle cx="12" cy="12" r="3"></circle>
|
|
210
|
+
<path d="M12 1v2M12 21v2M4.22 4.22l1.42 1.42M18.36 18.36l1.42 1.42M1 12h2M21 12h2M4.22 19.78l1.42-1.42M18.36 5.64l1.42-1.42"></path>
|
|
211
|
+
</svg>
|
|
212
|
+
</button>
|
|
213
|
+
</if>
|
|
214
|
+
<button class="qr-btn switch" @click=${() => this.switchCamera()} title="Switch Camera">
|
|
215
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
|
|
216
|
+
<path d="M5 3v6h6M19 21v-6h-6"/>
|
|
217
|
+
<path d="M3 13a8 8 0 0 1 11-7.5M21 11a8 8 0 0 1-11 7.5"/>
|
|
218
|
+
</svg>
|
|
219
|
+
</button>
|
|
220
|
+
</div>
|
|
221
|
+
</div>
|
|
222
|
+
`;
|
|
223
|
+
}
|
|
224
|
+
async start() {
|
|
225
|
+
try {
|
|
226
|
+
this.errorMessage = '';
|
|
227
|
+
const constraints = {
|
|
228
|
+
video: {
|
|
229
|
+
facingMode: this.camera === 'back' ? 'environment' : 'user',
|
|
230
|
+
width: { ideal: 1280 },
|
|
231
|
+
height: { ideal: 720 }
|
|
232
|
+
}
|
|
233
|
+
};
|
|
234
|
+
this.stream = await navigator.mediaDevices.getUserMedia(constraints);
|
|
235
|
+
this.video.srcObject = this.stream;
|
|
236
|
+
await this.video.play();
|
|
237
|
+
this.scanning = true;
|
|
238
|
+
this.emitCameraReady();
|
|
239
|
+
this.startScanning();
|
|
240
|
+
}
|
|
241
|
+
catch (error) {
|
|
242
|
+
this.errorMessage = error instanceof Error ? error.message : 'Camera access denied';
|
|
243
|
+
this.emitCameraError(error);
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
stop() {
|
|
247
|
+
this.scanning = false;
|
|
248
|
+
this.showSnapshot = false;
|
|
249
|
+
this.isDecoding = false;
|
|
250
|
+
if (this.scanFrame !== null) {
|
|
251
|
+
cancelAnimationFrame(this.scanFrame);
|
|
252
|
+
this.scanFrame = null;
|
|
253
|
+
}
|
|
254
|
+
if (this.stream) {
|
|
255
|
+
this.stream.getTracks().forEach(track => track.stop());
|
|
256
|
+
this.stream = null;
|
|
257
|
+
}
|
|
258
|
+
if (this.video) {
|
|
259
|
+
this.video.srcObject = null;
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
async scanImage(file) {
|
|
263
|
+
return new Promise((resolve, reject) => {
|
|
264
|
+
const img = new Image();
|
|
265
|
+
const reader = new FileReader();
|
|
266
|
+
reader.onload = async (e) => {
|
|
267
|
+
img.onload = async () => {
|
|
268
|
+
try {
|
|
269
|
+
const ctx = this.canvas.getContext('2d', { willReadFrequently: true });
|
|
270
|
+
this.canvas.width = img.width;
|
|
271
|
+
this.canvas.height = img.height;
|
|
272
|
+
ctx.drawImage(img, 0, 0);
|
|
273
|
+
const result = await this.detectQRCode();
|
|
274
|
+
if (result) {
|
|
275
|
+
resolve(result);
|
|
276
|
+
}
|
|
277
|
+
else {
|
|
278
|
+
reject(new Error('No QR code found in image'));
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
catch (error) {
|
|
282
|
+
reject(error);
|
|
283
|
+
}
|
|
284
|
+
};
|
|
285
|
+
img.src = e.target?.result;
|
|
286
|
+
};
|
|
287
|
+
reader.onerror = () => reject(new Error('Failed to read image file'));
|
|
288
|
+
reader.readAsDataURL(file);
|
|
289
|
+
});
|
|
290
|
+
}
|
|
291
|
+
switchCamera() {
|
|
292
|
+
const wasScanning = this.scanning;
|
|
293
|
+
this.stop();
|
|
294
|
+
this.camera = this.camera === 'back' ? 'front' : 'back';
|
|
295
|
+
if (wasScanning) {
|
|
296
|
+
setTimeout(() => this.start(), 100);
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
startScanning() {
|
|
300
|
+
if (!this.scanning)
|
|
301
|
+
return;
|
|
302
|
+
// Manual snap mode: don't start continuous scanning
|
|
303
|
+
if (this.manualSnap) {
|
|
304
|
+
console.log('Manual snap mode - not starting continuous scan');
|
|
305
|
+
return;
|
|
306
|
+
}
|
|
307
|
+
this.frameCount = 0;
|
|
308
|
+
// pickFirst: scan every frame (max speed) until hit, then stop
|
|
309
|
+
// normal: scan based on scanSpeed continuously
|
|
310
|
+
const framesToSkip = this.pickFirst ? 1 : Math.max(1, 10 - this.scanSpeed);
|
|
311
|
+
console.log('Starting scan loop, pickFirst:', this.pickFirst, 'framesToSkip:', framesToSkip);
|
|
312
|
+
const scan = async () => {
|
|
313
|
+
if (!this.scanning || !this.video.readyState) {
|
|
314
|
+
return;
|
|
315
|
+
}
|
|
316
|
+
this.frameCount++;
|
|
317
|
+
// Scan based on speed throttling
|
|
318
|
+
if (this.frameCount % framesToSkip === 0) {
|
|
319
|
+
// Skip if already decoding (prevent concurrent decodes)
|
|
320
|
+
if (!this.isDecoding) {
|
|
321
|
+
this.isDecoding = true;
|
|
322
|
+
try {
|
|
323
|
+
const ctx = this.canvas.getContext('2d', { willReadFrequently: true });
|
|
324
|
+
this.canvas.width = this.video.videoWidth;
|
|
325
|
+
this.canvas.height = this.video.videoHeight;
|
|
326
|
+
ctx.drawImage(this.video, 0, 0);
|
|
327
|
+
const result = await this.detectQRCode();
|
|
328
|
+
if (result && result !== this.lastScan) {
|
|
329
|
+
console.log('QR DETECTED:', result, 'pickFirst:', this.pickFirst);
|
|
330
|
+
this.lastScan = result;
|
|
331
|
+
this.emitQRScan({ data: result, timestamp: Date.now() });
|
|
332
|
+
// Stop if pickFirst - shut down camera
|
|
333
|
+
if (this.pickFirst) {
|
|
334
|
+
console.log('pickFirst - stopping scanner');
|
|
335
|
+
this.stop();
|
|
336
|
+
this.isDecoding = false;
|
|
337
|
+
return;
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
catch (error) {
|
|
342
|
+
console.error('Scan error:', error);
|
|
343
|
+
}
|
|
344
|
+
finally {
|
|
345
|
+
this.isDecoding = false;
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
this.scanFrame = requestAnimationFrame(scan);
|
|
350
|
+
};
|
|
351
|
+
scan();
|
|
352
|
+
}
|
|
353
|
+
async snap() {
|
|
354
|
+
console.log('Snap called, video ready:', this.video?.readyState, 'isDecoding:', this.isDecoding);
|
|
355
|
+
if (!this.video || !this.video.readyState) {
|
|
356
|
+
throw new Error('Camera not ready');
|
|
357
|
+
}
|
|
358
|
+
if (this.isDecoding) {
|
|
359
|
+
console.log('Already decoding, skipping snap');
|
|
360
|
+
return null; // Already processing
|
|
361
|
+
}
|
|
362
|
+
this.isDecoding = true;
|
|
363
|
+
console.log('Starting continuous snap capture over 5 seconds');
|
|
364
|
+
try {
|
|
365
|
+
const ctx = this.canvas.getContext('2d', { willReadFrequently: true });
|
|
366
|
+
this.canvas.width = this.video.videoWidth;
|
|
367
|
+
this.canvas.height = this.video.videoHeight;
|
|
368
|
+
// Capture and show first frame
|
|
369
|
+
ctx.drawImage(this.video, 0, 0);
|
|
370
|
+
this.showSnapshot = true;
|
|
371
|
+
console.log('Canvas size:', this.canvas.width, 'x', this.canvas.height);
|
|
372
|
+
// Capture continuously over 5 seconds
|
|
373
|
+
// Try every ~100ms for 5 seconds = ~50 attempts
|
|
374
|
+
const startTime = Date.now();
|
|
375
|
+
const duration = 5000; // 5 seconds
|
|
376
|
+
const interval = 100; // Try every 100ms
|
|
377
|
+
let attempts = 0;
|
|
378
|
+
while (Date.now() - startTime < duration) {
|
|
379
|
+
attempts++;
|
|
380
|
+
// Capture current frame
|
|
381
|
+
ctx.drawImage(this.video, 0, 0);
|
|
382
|
+
const result = await this.detectQRCode();
|
|
383
|
+
if (result) {
|
|
384
|
+
console.log(`QR found on attempt ${attempts} at ${Date.now() - startTime}ms:`, result);
|
|
385
|
+
this.lastScan = result;
|
|
386
|
+
this.emitQRScan({ data: result, timestamp: Date.now() });
|
|
387
|
+
// Hide snapshot after showing success
|
|
388
|
+
setTimeout(() => {
|
|
389
|
+
this.showSnapshot = false;
|
|
390
|
+
}, 1000);
|
|
391
|
+
return result;
|
|
392
|
+
}
|
|
393
|
+
// Wait before next attempt
|
|
394
|
+
await new Promise(resolve => setTimeout(resolve, interval));
|
|
395
|
+
}
|
|
396
|
+
console.log(`No QR code found in ${attempts} attempts over 5 seconds`);
|
|
397
|
+
// Hide snapshot after showing failure
|
|
398
|
+
setTimeout(() => {
|
|
399
|
+
this.showSnapshot = false;
|
|
400
|
+
}, 1000);
|
|
401
|
+
return null;
|
|
402
|
+
}
|
|
403
|
+
finally {
|
|
404
|
+
this.isDecoding = false;
|
|
405
|
+
console.log('Snap decode finished');
|
|
406
|
+
}
|
|
407
|
+
}
|
|
408
|
+
async detectQRCode() {
|
|
409
|
+
if (!this.qrDecoder)
|
|
410
|
+
return null;
|
|
411
|
+
try {
|
|
412
|
+
const result = await this.qrDecoder.decode(this.canvas);
|
|
413
|
+
return result.text;
|
|
414
|
+
}
|
|
415
|
+
catch (e) {
|
|
416
|
+
return null;
|
|
417
|
+
}
|
|
418
|
+
}
|
|
419
|
+
emitQRScan(result) {
|
|
420
|
+
return { reader: this, ...result };
|
|
421
|
+
}
|
|
422
|
+
emitQRError(error) {
|
|
423
|
+
return { reader: this, error };
|
|
424
|
+
}
|
|
425
|
+
emitCameraReady() {
|
|
426
|
+
return { reader: this };
|
|
427
|
+
}
|
|
428
|
+
emitCameraError(error) {
|
|
429
|
+
return { reader: this, error };
|
|
430
|
+
}
|
|
431
|
+
});
|
|
432
|
+
return _classThis;
|
|
433
|
+
})();
|
|
434
|
+
|
|
435
|
+
export { SniceQRReader };
|
|
436
|
+
//# sourceMappingURL=snice-qr-reader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"snice-qr-reader.js","sources":["../../../components/qr-reader/snice-qr-reader.css?inline","../../../../components/qr-reader/snice-qr-reader.ts"],"sourcesContent":["export default \":host{display:block;width:100%;max-width:40rem;font-family:var(--snice-font-family, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif)}.qr-reader-container{position:relative;width:100%;background:rgb(0 0 0);border-radius:var(--snice-border-radius-lg,8px);overflow:hidden}.qr-reader-viewport{position:relative;width:100%;padding-bottom:75%;background:rgb(0 0 0)}video{position:absolute;top:0;left:0;width:100%;height:100%;object-fit:cover}canvas{position:absolute;top:0;left:0;width:100%;height:100%;object-fit:cover;display:none}canvas:not([style*=\\\"display: none\\\"]){display:block}.qr-reader-overlay{position:absolute;top:0;left:0;width:100%;height:100%;display:flex;align-items:center;justify-content:center;background:rgb(0 0 0 / .7);color:rgb(255 255 255)}.qr-reader-message{text-align:center}.qr-reader-message svg{display:block;margin:0 auto var(--snice-spacing-md,1rem);opacity:.7}.qr-reader-message p{margin:0;font-size:var(--snice-font-size-md, 1rem)}.qr-reader-corners{position:absolute;top:20%;left:20%;right:20%;bottom:20%}.corner{position:absolute;width:3rem;height:3rem;border:3px solid var(--snice-color-primary,rgb(37 99 235))}.corner.top-left{top:0;left:0;border-right:none;border-bottom:none}.corner.top-right{top:0;right:0;border-left:none;border-bottom:none}.corner.bottom-left{bottom:0;left:0;border-right:none;border-top:none}.corner.bottom-right{bottom:0;right:0;border-left:none;border-top:none}.qr-reader-controls{position:absolute;bottom:0;left:0;right:0;display:flex;align-items:center;justify-content:center;gap:var(--snice-spacing-md,1rem);padding:var(--snice-spacing-lg,1.5rem) var(--snice-spacing-md,1rem);background:linear-gradient(to top,rgb(0 0 0 / .5),transparent);z-index:10}.qr-btn{width:3rem;height:3rem;border-radius:var(--snice-border-radius-circle,50%);border:none;background:rgb(0 0 0 / .4);cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all var(--snice-transition-fast, 150ms) ease;color:rgb(255 255 255);backdrop-filter:blur(0.5rem);padding:0}.qr-btn:hover{background:rgb(0 0 0 / .6);transform:scale(1.05)}.qr-btn:active{transform:scale(.95)}.qr-btn.start{background:var(--snice-color-primary,rgb(37 99 235))}.qr-btn.start:hover{background:rgb(29 78 216)}.qr-reader-result{position:absolute;top:var(--snice-spacing-md,1rem);left:var(--snice-spacing-md,1rem);right:var(--snice-spacing-md,1rem);padding:var(--snice-spacing-sm,.75rem) var(--snice-spacing-md,1rem);background:var(--snice-color-success,rgb(34 197 94));color:rgb(255 255 255);border-radius:var(--snice-border-radius-md,4px);font-size:var(--snice-font-size-sm, .875rem);z-index:5;word-break:break-all;animation:.3s ease-out slideDown}@keyframes slideDown{from{opacity:0;transform:translateY(-1rem)}to{opacity:1;transform:translateY(0)}}.qr-reader-error{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);padding:var(--snice-spacing-md,1rem) var(--snice-spacing-lg,1.5rem);background:var(--snice-color-danger,rgb(239 68 68));color:rgb(255 255 255);border-radius:var(--snice-border-radius-lg,8px);text-align:center;max-width:80%;z-index:5}\";",null],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export type CameraMode = 'front' | 'back';
|
|
2
|
+
export interface QRScanResult {
|
|
3
|
+
data: string;
|
|
4
|
+
timestamp: number;
|
|
5
|
+
}
|
|
6
|
+
export interface SniceQRReaderElement extends HTMLElement {
|
|
7
|
+
autoStart: boolean;
|
|
8
|
+
camera: CameraMode;
|
|
9
|
+
pickFirst: boolean;
|
|
10
|
+
manualSnap: boolean;
|
|
11
|
+
scanSpeed: number;
|
|
12
|
+
start(): Promise<void>;
|
|
13
|
+
stop(): void;
|
|
14
|
+
snap(): Promise<string | null>;
|
|
15
|
+
scanImage(file: File): Promise<string>;
|
|
16
|
+
switchCamera(): void;
|
|
17
|
+
}
|