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.
Files changed (33) hide show
  1. package/bin/snice.js +8 -0
  2. package/dist/components/file-gallery/snice-file-gallery.d.ts +87 -0
  3. package/dist/components/file-gallery/snice-file-gallery.js +892 -0
  4. package/dist/components/file-gallery/snice-file-gallery.js.map +1 -0
  5. package/dist/components/file-gallery/snice-file-gallery.types.d.ts +72 -0
  6. package/dist/components/qr-reader/qr-decoder.d.ts +20 -0
  7. package/dist/components/qr-reader/qr-decoder.js +49 -0
  8. package/dist/components/qr-reader/qr-decoder.js.map +1 -0
  9. package/dist/components/qr-reader/qr-worker.d.ts +6 -0
  10. package/dist/components/qr-reader/qr-worker.js +64 -0
  11. package/dist/components/qr-reader/qr-worker.js.map +1 -0
  12. package/dist/components/qr-reader/snice-qr-reader.d.ts +39 -0
  13. package/dist/components/qr-reader/snice-qr-reader.js +436 -0
  14. package/dist/components/qr-reader/snice-qr-reader.js.map +1 -0
  15. package/dist/components/qr-reader/snice-qr-reader.types.d.ts +17 -0
  16. package/dist/components/qr-reader/zxing-reader.mjs +1582 -0
  17. package/dist/components/qr-reader/zxing-share.mjs +305 -0
  18. package/dist/components/qr-reader/zxing_reader.wasm +0 -0
  19. package/dist/components/zxing-reader-B3Rfebg9.js +1771 -0
  20. package/dist/components/zxing-reader-B3Rfebg9.js.map +1 -0
  21. package/dist/index.cjs +1 -1
  22. package/dist/index.esm.js +1 -1
  23. package/dist/index.iife.js +1 -1
  24. package/dist/symbols.cjs +1 -1
  25. package/dist/symbols.esm.js +1 -1
  26. package/dist/transitions.cjs +1 -1
  27. package/dist/transitions.esm.js +1 -1
  28. package/docs/ai/README.md +1 -1
  29. package/docs/ai/components/file-gallery.md +206 -0
  30. package/docs/ai/components/qr-reader.md +80 -0
  31. package/docs/components/file-gallery.md +692 -0
  32. package/docs/components/qr-reader.md +327 -0
  33. 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
+ }