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