pi-kiosk-shared 2.2.89 → 2.2.91

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.
@@ -1,5 +1,5 @@
1
1
  export { useBarcodeScanner, type UseBarcodeScannerMessages, type UseBarcodeScannerOptions, type UseBarcodeScannerReturn, type ScannerStatus, } from './hooks/useBarcodeScanner.js';
2
2
  export type { ScannerEngine } from './hooks/selectEngine.js';
3
3
  export { resolveScannerFormatConfig, type BarcodeScannerFormatProfile, type ScannerFormatConfig, } from './hooks/scannerFormats.js';
4
- export { setZXingWasmUrl, isZXingWasmConfigured } from './hooks/zxingWasmEngine.js';
4
+ export { SCANNER_VIDEO_CONSTRAINTS, SCANNER_VIDEO_CONSTRAINT_FALLBACKS, openScannerMediaStream, applyScannerTrackEnhancements, } from './hooks/scannerCameraConstraints.js';
5
5
  //# sourceMappingURL=barcode-scanner.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"barcode-scanner.d.ts","sourceRoot":"","sources":["../src/barcode-scanner.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,KAAK,yBAAyB,EAC9B,KAAK,wBAAwB,EAC7B,KAAK,uBAAuB,EAC5B,KAAK,aAAa,GACnB,MAAM,8BAA8B,CAAC;AACtC,YAAY,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EACL,0BAA0B,EAC1B,KAAK,2BAA2B,EAChC,KAAK,mBAAmB,GACzB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC"}
1
+ {"version":3,"file":"barcode-scanner.d.ts","sourceRoot":"","sources":["../src/barcode-scanner.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,KAAK,yBAAyB,EAC9B,KAAK,wBAAwB,EAC7B,KAAK,uBAAuB,EAC5B,KAAK,aAAa,GACnB,MAAM,8BAA8B,CAAC;AACtC,YAAY,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EACL,0BAA0B,EAC1B,KAAK,2BAA2B,EAChC,KAAK,mBAAmB,GACzB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,yBAAyB,EACzB,kCAAkC,EAClC,sBAAsB,EACtB,6BAA6B,GAC9B,MAAM,qCAAqC,CAAC"}
@@ -1,4 +1,4 @@
1
1
  export { useBarcodeScanner, } from './hooks/useBarcodeScanner.js';
2
2
  export { resolveScannerFormatConfig, } from './hooks/scannerFormats.js';
3
- export { setZXingWasmUrl, isZXingWasmConfigured } from './hooks/zxingWasmEngine.js';
3
+ export { SCANNER_VIDEO_CONSTRAINTS, SCANNER_VIDEO_CONSTRAINT_FALLBACKS, openScannerMediaStream, applyScannerTrackEnhancements, } from './hooks/scannerCameraConstraints.js';
4
4
  //# sourceMappingURL=barcode-scanner.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"barcode-scanner.js","sourceRoot":"","sources":["../src/barcode-scanner.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,GAKlB,MAAM,8BAA8B,CAAC;AAEtC,OAAO,EACL,0BAA0B,GAG3B,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC"}
1
+ {"version":3,"file":"barcode-scanner.js","sourceRoot":"","sources":["../src/barcode-scanner.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,GAKlB,MAAM,8BAA8B,CAAC;AAEtC,OAAO,EACL,0BAA0B,GAG3B,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,yBAAyB,EACzB,kCAAkC,EAClC,sBAAsB,EACtB,6BAA6B,GAC9B,MAAM,qCAAqC,CAAC"}
@@ -1,13 +1,52 @@
1
1
  /**
2
2
  * High-sensitivity camera constraints for live barcode / QR decode.
3
- * Prefer rear camera + max practical resolution so small symbols fill pixels.
3
+ * Prefer rear camera + high ideal resolution so small symbols fill pixels.
4
+ *
5
+ * Do not set hard `min` width/height - Android Chrome often rejects those with
6
+ * OverconstrainedError. Some Android builds also surface soft-constraint failure
7
+ * as NotAllowedError; the ladder retries NotAllowed only until the final
8
+ * `video: true` rung (a true user deny there is not retried).
4
9
  */
5
10
  export declare const SCANNER_VIDEO_CONSTRAINTS: MediaTrackConstraints;
6
- /** Mild optical zoom when supported — enlarges distant/small codes without user effort. */
7
- export declare const SCANNER_PREFERRED_ZOOM = 1.75;
8
11
  /**
9
- * Best-effort continuous autofocus + mild zoom after getUserMedia.
12
+ * Progressive getUserMedia ladder for mobile browsers.
13
+ * Soften resolution first, then facingMode-only, then any camera.
14
+ */
15
+ export declare const SCANNER_VIDEO_CONSTRAINT_FALLBACKS: ReadonlyArray<MediaTrackConstraints | true>;
16
+ /**
17
+ * Optical zoom policy for scanner tracks: use the device's capability max
18
+ * (not a hard 2x ceiling). Documented for callers; resolution is via
19
+ * resolvePreferredOpticalZoom.
20
+ */
21
+ export declare const SCANNER_OPTICAL_ZOOM_POLICY: "max";
22
+ /**
23
+ * Resolve preferred optical zoom from MediaTrackCapabilities.zoom bounds.
24
+ * Targets device max (G2) - no fixed 2x ceiling. Snaps down to a valid step
25
+ * when `step` is provided.
26
+ */
27
+ export declare function resolvePreferredOpticalZoom(min: number, max: number, step?: number): number;
28
+ /**
29
+ * Midpoint zoom for a stepped ladder toward max (G4 distance lever).
30
+ * Snaps to step when provided.
31
+ */
32
+ export declare function resolveMidOpticalZoom(min: number, maxTarget: number, step?: number): number;
33
+ /**
34
+ * Open a camera stream with progressive constraint fallbacks.
35
+ *
36
+ * Overconstrained / NotFound / NotReadable / Abort -> next rung.
37
+ * NotAllowedError -> next rung only while `video` is not yet the final `true`
38
+ * (any-camera) rung; on that last rung NotAllowed is a real deny and is rethrown.
39
+ * Other failures (SecurityError, etc.) are rethrown immediately.
40
+ */
41
+ export declare function openScannerMediaStream(getUserMedia: MediaDevices['getUserMedia']): Promise<MediaStream>;
42
+ /**
43
+ * Best-effort continuous autofocus, max optical zoom, and torch after getUserMedia.
10
44
  * Unsupported constraints are ignored so older devices still scan.
45
+ *
46
+ * Distance levers (G2/G4):
47
+ * - Optical zoom targets capability max (policy SCANNER_OPTICAL_ZOOM_POLICY).
48
+ * - When the zoom range is wide, applies a mid -> max stepped ladder.
49
+ * - Enables torch when getCapabilities().torch is true.
11
50
  */
12
51
  export declare function applyScannerTrackEnhancements(track: MediaStreamTrack): Promise<void>;
13
52
  //# sourceMappingURL=scannerCameraConstraints.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"scannerCameraConstraints.d.ts","sourceRoot":"","sources":["../../src/hooks/scannerCameraConstraints.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,eAAO,MAAM,yBAAyB,EAAE,qBAKvC,CAAC;AAkBF,2FAA2F;AAC3F,eAAO,MAAM,sBAAsB,OAAO,CAAC;AAE3C;;;GAGG;AACH,wBAAsB,6BAA6B,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAmC1F"}
1
+ {"version":3,"file":"scannerCameraConstraints.d.ts","sourceRoot":"","sources":["../../src/hooks/scannerCameraConstraints.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,eAAO,MAAM,yBAAyB,EAAE,qBAKvC,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,kCAAkC,EAAE,aAAa,CAAC,qBAAqB,GAAG,IAAI,CAS1F,CAAC;AAqBF;;;;GAIG;AACH,eAAO,MAAM,2BAA2B,EAAG,KAAc,CAAC;AAE1D;;;;GAIG;AACH,wBAAgB,2BAA2B,CACzC,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,EACX,IAAI,CAAC,EAAE,MAAM,GACZ,MAAM,CASR;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,MAAM,EACjB,IAAI,CAAC,EAAE,MAAM,GACZ,MAAM,CAWR;AAmBD;;;;;;;GAOG;AACH,wBAAsB,sBAAsB,CAC1C,YAAY,EAAE,YAAY,CAAC,cAAc,CAAC,GACzC,OAAO,CAAC,WAAW,CAAC,CAqBtB;AAED;;;;;;;;GAQG;AACH,wBAAsB,6BAA6B,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CA4E1F"}
@@ -1,18 +1,121 @@
1
1
  /**
2
2
  * High-sensitivity camera constraints for live barcode / QR decode.
3
- * Prefer rear camera + max practical resolution so small symbols fill pixels.
3
+ * Prefer rear camera + high ideal resolution so small symbols fill pixels.
4
+ *
5
+ * Do not set hard `min` width/height - Android Chrome often rejects those with
6
+ * OverconstrainedError. Some Android builds also surface soft-constraint failure
7
+ * as NotAllowedError; the ladder retries NotAllowed only until the final
8
+ * `video: true` rung (a true user deny there is not retried).
4
9
  */
5
10
  export const SCANNER_VIDEO_CONSTRAINTS = {
6
11
  facingMode: { ideal: 'environment' },
7
- width: { ideal: 3840, min: 1280 },
8
- height: { ideal: 2160, min: 720 },
12
+ width: { ideal: 1920 },
13
+ height: { ideal: 1080 },
9
14
  frameRate: { ideal: 30 },
10
15
  };
11
- /** Mild optical zoom when supported — enlarges distant/small codes without user effort. */
12
- export const SCANNER_PREFERRED_ZOOM = 1.75;
13
16
  /**
14
- * Best-effort continuous autofocus + mild zoom after getUserMedia.
17
+ * Progressive getUserMedia ladder for mobile browsers.
18
+ * Soften resolution first, then facingMode-only, then any camera.
19
+ */
20
+ export const SCANNER_VIDEO_CONSTRAINT_FALLBACKS = [
21
+ SCANNER_VIDEO_CONSTRAINTS,
22
+ {
23
+ facingMode: { ideal: 'environment' },
24
+ width: { ideal: 1280 },
25
+ height: { ideal: 720 },
26
+ },
27
+ { facingMode: { ideal: 'environment' } },
28
+ true,
29
+ ];
30
+ /**
31
+ * Optical zoom policy for scanner tracks: use the device's capability max
32
+ * (not a hard 2x ceiling). Documented for callers; resolution is via
33
+ * resolvePreferredOpticalZoom.
34
+ */
35
+ export const SCANNER_OPTICAL_ZOOM_POLICY = 'max';
36
+ /**
37
+ * Resolve preferred optical zoom from MediaTrackCapabilities.zoom bounds.
38
+ * Targets device max (G2) - no fixed 2x ceiling. Snaps down to a valid step
39
+ * when `step` is provided.
40
+ */
41
+ export function resolvePreferredOpticalZoom(min, max, step) {
42
+ if (!(max > min)) {
43
+ return min;
44
+ }
45
+ if (step !== undefined && step > 0) {
46
+ const stepsFromMin = Math.floor((max - min) / step + Number.EPSILON);
47
+ return min + stepsFromMin * step;
48
+ }
49
+ return max;
50
+ }
51
+ /**
52
+ * Midpoint zoom for a stepped ladder toward max (G4 distance lever).
53
+ * Snaps to step when provided.
54
+ */
55
+ export function resolveMidOpticalZoom(min, maxTarget, step) {
56
+ if (!(maxTarget > min)) {
57
+ return min;
58
+ }
59
+ const mid = (min + maxTarget) / 2;
60
+ if (step !== undefined && step > 0) {
61
+ const stepsFromMin = Math.round((mid - min) / step);
62
+ const snapped = min + stepsFromMin * step;
63
+ return Math.min(maxTarget, Math.max(min, snapped));
64
+ }
65
+ return mid;
66
+ }
67
+ function isConstraintRetryableError(err) {
68
+ if (!(err instanceof DOMException)) {
69
+ return false;
70
+ }
71
+ return (err.name === 'OverconstrainedError' ||
72
+ err.name === 'ConstraintNotSatisfiedError' ||
73
+ err.name === 'NotFoundError' ||
74
+ err.name === 'NotReadableError' ||
75
+ err.name === 'AbortError');
76
+ }
77
+ function isNotAllowedError(err) {
78
+ return err instanceof DOMException && err.name === 'NotAllowedError';
79
+ }
80
+ /**
81
+ * Open a camera stream with progressive constraint fallbacks.
82
+ *
83
+ * Overconstrained / NotFound / NotReadable / Abort -> next rung.
84
+ * NotAllowedError -> next rung only while `video` is not yet the final `true`
85
+ * (any-camera) rung; on that last rung NotAllowed is a real deny and is rethrown.
86
+ * Other failures (SecurityError, etc.) are rethrown immediately.
87
+ */
88
+ export async function openScannerMediaStream(getUserMedia) {
89
+ let lastError;
90
+ for (let i = 0; i < SCANNER_VIDEO_CONSTRAINT_FALLBACKS.length; i++) {
91
+ const video = SCANNER_VIDEO_CONSTRAINT_FALLBACKS[i];
92
+ try {
93
+ return await getUserMedia({ video, audio: false });
94
+ }
95
+ catch (err) {
96
+ lastError = err;
97
+ if (isConstraintRetryableError(err)) {
98
+ continue;
99
+ }
100
+ // Soft-constraint NotAllowed: retry until final any-camera rung only.
101
+ if (isNotAllowedError(err) && video !== true) {
102
+ continue;
103
+ }
104
+ throw err;
105
+ }
106
+ }
107
+ throw lastError instanceof Error
108
+ ? lastError
109
+ : new Error('Could not open scanner camera', { cause: lastError });
110
+ }
111
+ /**
112
+ * Best-effort continuous autofocus, max optical zoom, and torch after getUserMedia.
15
113
  * Unsupported constraints are ignored so older devices still scan.
114
+ *
115
+ * Distance levers (G2/G4):
116
+ * - Optical zoom targets capability max (policy SCANNER_OPTICAL_ZOOM_POLICY).
117
+ * - When the zoom range is wide, applies a mid -> max stepped ladder.
118
+ * - Enables torch when getCapabilities().torch is true.
16
119
  */
17
120
  export async function applyScannerTrackEnhancements(track) {
18
121
  const getCapabilities = track.getCapabilities;
@@ -20,30 +123,66 @@ export async function applyScannerTrackEnhancements(track) {
20
123
  return;
21
124
  }
22
125
  const capabilities = getCapabilities.call(track);
23
- const advanced = [];
24
- if (capabilities.focusMode?.includes('continuous') === true) {
25
- advanced.push({ focusMode: 'continuous' });
26
- }
126
+ const hasContinuousFocus = capabilities.focusMode?.includes('continuous') === true;
127
+ const hasTorch = capabilities.torch === true;
27
128
  const zoomCap = capabilities.zoom;
129
+ let zoomMin = 1;
130
+ let zoomMax = 1;
131
+ let zoomStep;
132
+ let hasZoomRange = false;
28
133
  if (zoomCap !== undefined) {
29
- const min = zoomCap.min ?? 1;
30
- const max = zoomCap.max ?? 1;
31
- if (max > min) {
32
- const target = Math.min(max, Math.max(min, SCANNER_PREFERRED_ZOOM));
33
- if (target > min) {
34
- advanced.push({ zoom: target });
35
- }
36
- }
134
+ zoomMin = zoomCap.min ?? 1;
135
+ zoomMax = zoomCap.max ?? 1;
136
+ zoomStep = zoomCap.step;
137
+ hasZoomRange = zoomMax > zoomMin;
37
138
  }
38
- if (advanced.length === 0) {
139
+ if (!hasContinuousFocus && !hasTorch && !hasZoomRange) {
140
+ return;
141
+ }
142
+ const preferredZoom = hasZoomRange
143
+ ? resolvePreferredOpticalZoom(zoomMin, zoomMax, zoomStep)
144
+ : undefined;
145
+ const midZoom = preferredZoom !== undefined && preferredZoom > zoomMin
146
+ ? resolveMidOpticalZoom(zoomMin, preferredZoom, zoomStep)
147
+ : undefined;
148
+ const useZoomLadder = midZoom !== undefined &&
149
+ preferredZoom !== undefined &&
150
+ midZoom > zoomMin &&
151
+ midZoom < preferredZoom;
152
+ const firstAdvanced = [];
153
+ if (hasContinuousFocus) {
154
+ firstAdvanced.push({ focusMode: 'continuous' });
155
+ }
156
+ if (hasTorch) {
157
+ firstAdvanced.push({ torch: true });
158
+ }
159
+ if (useZoomLadder) {
160
+ firstAdvanced.push({ zoom: midZoom });
161
+ }
162
+ else if (preferredZoom !== undefined && preferredZoom > zoomMin) {
163
+ firstAdvanced.push({ zoom: preferredZoom });
164
+ }
165
+ if (firstAdvanced.length === 0) {
39
166
  return;
40
167
  }
41
168
  try {
42
- const next = { advanced };
43
- await track.applyConstraints(next);
169
+ const first = { advanced: firstAdvanced };
170
+ await track.applyConstraints(first);
171
+ // Second lever: step optical zoom to max after focus/torch/mid settled.
172
+ if (useZoomLadder && preferredZoom !== undefined) {
173
+ try {
174
+ const second = {
175
+ advanced: [{ zoom: preferredZoom }],
176
+ };
177
+ await track.applyConstraints(second);
178
+ }
179
+ catch {
180
+ // Max zoom rejected after mid - keep mid + prior enhancements.
181
+ }
182
+ }
44
183
  }
45
184
  catch {
46
- // Device rejected advanced focus/zoom — keep the stream as opened.
185
+ // Device rejected advanced focus/zoom/torch - keep the stream as opened.
47
186
  }
48
187
  }
49
188
  //# sourceMappingURL=scannerCameraConstraints.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"scannerCameraConstraints.js","sourceRoot":"","sources":["../../src/hooks/scannerCameraConstraints.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAA0B;IAC9D,UAAU,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE;IACpC,KAAK,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE;IACjC,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE;IACjC,SAAS,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;CACzB,CAAC;AAkBF,2FAA2F;AAC3F,MAAM,CAAC,MAAM,sBAAsB,GAAG,IAAI,CAAC;AAE3C;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,6BAA6B,CAAC,KAAuB;IACzE,MAAM,eAAe,GAAI,KAA+B,CAAC,eAAe,CAAC;IACzE,IAAI,eAAe,KAAK,SAAS,EAAE,CAAC;QAClC,OAAO;IACT,CAAC;IAED,MAAM,YAAY,GAAG,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACjD,MAAM,QAAQ,GAA8B,EAAE,CAAC;IAE/C,IAAI,YAAY,CAAC,SAAS,EAAE,QAAQ,CAAC,YAAY,CAAC,KAAK,IAAI,EAAE,CAAC;QAC5D,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,CAAC;IAC7C,CAAC;IAED,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC;IAClC,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;QAC7B,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;QAC7B,IAAI,GAAG,GAAG,GAAG,EAAE,CAAC;YACd,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,sBAAsB,CAAC,CAAC,CAAC;YACpE,IAAI,MAAM,GAAG,GAAG,EAAE,CAAC;gBACjB,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;YAClC,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO;IACT,CAAC;IAED,IAAI,CAAC;QACH,MAAM,IAAI,GAAgC,EAAE,QAAQ,EAAE,CAAC;QACvD,MAAM,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;IACrC,CAAC;IAAC,MAAM,CAAC;QACP,mEAAmE;IACrE,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"scannerCameraConstraints.js","sourceRoot":"","sources":["../../src/hooks/scannerCameraConstraints.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Digital-zoom scan regions for distant / small barcodes.
3
+ * Used by the pure-JS @zxing multi-pass decoder.
4
+ */
5
+ export interface ScanPass {
6
+ readonly sx: number;
7
+ readonly sy: number;
8
+ readonly sw: number;
9
+ readonly sh: number;
10
+ /** Upscale factor when drawing the crop into the decode canvas. */
11
+ readonly scale: number;
12
+ }
13
+ /**
14
+ * Full frame + center zooms + mid-band (1D) + four corner crops + optional tight center.
15
+ * Covers off-center / distant codes that are not in the viewfinder center.
16
+ *
17
+ * CPU bound: at most 10 passes (1 full + 3 center + 1 mid-band + 4 corners + 1 tight center).
18
+ * Do not add more regions without raising this documented ceiling (~10–12 max).
19
+ */
20
+ export declare function buildMaxSensitivityScanPasses(videoWidth: number, videoHeight: number): ScanPass[];
21
+ //# sourceMappingURL=scannerScanPasses.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scannerScanPasses.d.ts","sourceRoot":"","sources":["../../src/hooks/scannerScanPasses.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,mEAAmE;IACnE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED;;;;;;GAMG;AACH,wBAAgB,6BAA6B,CAAC,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,QAAQ,EAAE,CA0DjG"}
@@ -0,0 +1,59 @@
1
+ /**
2
+ * Full frame + center zooms + mid-band (1D) + four corner crops + optional tight center.
3
+ * Covers off-center / distant codes that are not in the viewfinder center.
4
+ *
5
+ * CPU bound: at most 10 passes (1 full + 3 center + 1 mid-band + 4 corners + 1 tight center).
6
+ * Do not add more regions without raising this documented ceiling (~10–12 max).
7
+ */
8
+ export function buildMaxSensitivityScanPasses(videoWidth, videoHeight) {
9
+ const vw = videoWidth;
10
+ const vh = videoHeight;
11
+ if (vw < 2 || vh < 2) {
12
+ return [];
13
+ }
14
+ const center = (frac, scale) => {
15
+ const sw = Math.max(2, Math.floor(vw * frac));
16
+ const sh = Math.max(2, Math.floor(vh * frac));
17
+ return {
18
+ sx: Math.floor((vw - sw) / 2),
19
+ sy: Math.floor((vh - sh) / 2),
20
+ sw,
21
+ sh,
22
+ scale,
23
+ };
24
+ };
25
+ /** Corner crop: `frac`×`frac` of the frame anchored at a corner (off-center). */
26
+ const corner = (anchor, frac, scale) => {
27
+ const sw = Math.max(2, Math.floor(vw * frac));
28
+ const sh = Math.max(2, Math.floor(vh * frac));
29
+ const sx = anchor === 'tr' || anchor === 'br' ? vw - sw : 0;
30
+ const sy = anchor === 'bl' || anchor === 'br' ? vh - sh : 0;
31
+ return { sx, sy, sw, sh, scale };
32
+ };
33
+ const bandH = Math.max(2, Math.floor(vh * 0.28));
34
+ const midBand = {
35
+ sx: 0,
36
+ sy: Math.floor((vh - bandH) / 2),
37
+ sw: vw,
38
+ sh: bandH,
39
+ scale: 2,
40
+ };
41
+ return [
42
+ // 1. full frame
43
+ { sx: 0, sy: 0, sw: vw, sh: vh, scale: 1 },
44
+ // 2–4. center zooms
45
+ center(0.7, 1.75),
46
+ center(0.5, 2.25),
47
+ center(0.35, 3),
48
+ // 5. mid-band 1D
49
+ midBand,
50
+ // 6–9. four corner crops (off-center distant codes)
51
+ corner('tl', 0.4, 2.75),
52
+ corner('tr', 0.4, 2.75),
53
+ corner('bl', 0.4, 2.75),
54
+ corner('br', 0.4, 2.75),
55
+ // 10. stronger tight center
56
+ center(0.25, 3.5),
57
+ ];
58
+ }
59
+ //# sourceMappingURL=scannerScanPasses.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scannerScanPasses.js","sourceRoot":"","sources":["../../src/hooks/scannerScanPasses.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,10 @@
1
1
  /**
2
2
  * Decode engines used by {@link useBarcodeScanner}:
3
- * - `zxing-wasm` — ZXing-C++ WASM (primary; highest sensitivity; requires configured URL)
4
- * - `native-detector` — Chromium BarcodeDetector (fast path when formats OK)
5
- * - `zxing` — pure-JS @zxing fallback when WASM/native cannot start
3
+ * - `zxing` — pure-JS @zxing/browser (decodeFromStream + multi-pass zoom)
4
+ * - `native-detector` — legacy union member; G5 no longer starts native-only
5
+ * (weak path without TRY_HARDER / multi-pass). Kept for API compatibility.
6
6
  *
7
- * Engine selection lives only in `useBarcodeScanner` (runtime cascade).
8
- * There is no separate `selectBarcodeScannerEngine` helper — that was a dual SoT (G7).
7
+ * Engine selection lives only in `useBarcodeScanner`.
9
8
  */
10
- export type ScannerEngine = 'zxing-wasm' | 'native-detector' | 'zxing';
9
+ export type ScannerEngine = 'zxing' | 'native-detector';
11
10
  //# sourceMappingURL=selectEngine.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"selectEngine.d.ts","sourceRoot":"","sources":["../../src/hooks/selectEngine.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,MAAM,MAAM,aAAa,GAAG,YAAY,GAAG,iBAAiB,GAAG,OAAO,CAAC"}
1
+ {"version":3,"file":"selectEngine.d.ts","sourceRoot":"","sources":["../../src/hooks/selectEngine.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,iBAAiB,CAAC"}
@@ -10,8 +10,21 @@ export interface UseBarcodeScannerMessages {
10
10
  runningZxing: string;
11
11
  error: string;
12
12
  scannerOff: string;
13
- /** G3 — high-sensitivity WASM missing / prepare failed (no silent weaker-engine fallthrough). */
14
- wasmBootstrapFailed: string;
13
+ /**
14
+ * Optional — shown when the page is not a secure context (HTTP over LAN IP).
15
+ * Falls back to `noCamera` when omitted.
16
+ */
17
+ insecureContext?: string;
18
+ /**
19
+ * Optional — camera busy / hardware lock (NotReadableError / AbortError after
20
+ * constraint ladder exhaustion). Falls back to `error` when omitted.
21
+ */
22
+ cameraInUse?: string;
23
+ /**
24
+ * Optional — secure-context / Permissions-Policy block (SecurityError).
25
+ * Falls back to `error` when omitted. Not treated as user permission deny.
26
+ */
27
+ policyBlocked?: string;
15
28
  }
16
29
  export interface UseBarcodeScannerOptions {
17
30
  enabled: boolean;
@@ -20,7 +33,7 @@ export interface UseBarcodeScannerOptions {
20
33
  messages: UseBarcodeScannerMessages;
21
34
  formatProfile?: BarcodeScannerFormatProfile;
22
35
  /**
23
- * G7 — fired when the tab/page backgrounds and the hook releases the camera.
36
+ * Fired when the tab/page backgrounds and the hook releases the camera.
24
37
  * Parent should set `enabled` false so the CTA must be tapped again (no auto-restart).
25
38
  */
26
39
  onBackgroundStop?: () => void;
@@ -33,12 +46,11 @@ export interface UseBarcodeScannerReturn {
33
46
  /**
34
47
  * Live camera barcode/QR decode.
35
48
  *
36
- * Runtime cascade (single SoT — no selectBarcodeScannerEngine helper):
37
- * 1. Configured ZXing-C++ WASM (required for sensitivity upgrade; missing URL /
38
- * unloadable asset / instantiate fail → G3 `wasmBootstrapFailed`, no weaker-engine fallthrough)
39
- * 2. After WASM is successfully instantiated and running: ≥{@link WASM_HARD_FAIL_BOUND}
40
- * consecutive hard decode rejects → native BarcodeDetector (G4 only — not bootstrap)
41
- * 3. then pure-JS @zxing/browser
49
+ * Primary: pure-JS @zxing/browser `decodeFromStream` (former working engine)
50
+ * plus parallel multi-pass digital zoom + TRY_HARDER for distant / small codes.
51
+ * If stream fails but a canvas exists, multi-pass alone is the sensitive path.
52
+ * G5: never start native BarcodeDetector alone (no TRY_HARDER / distance assist) —
53
+ * hard-fail with recovery copy when neither @zxing path can start.
42
54
  */
43
55
  export declare function useBarcodeScanner(options: UseBarcodeScannerOptions): UseBarcodeScannerReturn;
44
56
  //# sourceMappingURL=useBarcodeScanner.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useBarcodeScanner.d.ts","sourceRoot":"","sources":["../../src/hooks/useBarcodeScanner.ts"],"names":[],"mappings":"AAGA,OAAO,yBAAyB,CAAC;AACjC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAEL,KAAK,2BAA2B,EACjC,MAAM,qBAAqB,CAAC;AAY7B,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,UAAU,GAAG,SAAS,GAAG,QAAQ,GAAG,OAAO,CAAC;AAEjF,MAAM,WAAW,yBAAyB;IACxC,gBAAgB,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,iGAAiG;IACjG,mBAAmB,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,wBAAwB;IACvC,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAAC;IACnD,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,QAAQ,EAAE,yBAAyB,CAAC;IACpC,aAAa,CAAC,EAAE,2BAA2B,CAAC;IAC5C;;;OAGG;IACH,gBAAgB,CAAC,EAAE,MAAM,IAAI,CAAC;CAC/B;AAED,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,aAAa,CAAC;IACtB,MAAM,EAAE,aAAa,GAAG,IAAI,CAAC;IAC7B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AASD;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,wBAAwB,GAAG,uBAAuB,CAyY5F"}
1
+ {"version":3,"file":"useBarcodeScanner.d.ts","sourceRoot":"","sources":["../../src/hooks/useBarcodeScanner.ts"],"names":[],"mappings":"AAGA,OAAO,yBAAyB,CAAC;AACjC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAEL,KAAK,2BAA2B,EACjC,MAAM,qBAAqB,CAAC;AAU7B,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,UAAU,GAAG,SAAS,GAAG,QAAQ,GAAG,OAAO,CAAC;AAEjF,MAAM,WAAW,yBAAyB;IACxC,gBAAgB,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAwBD,MAAM,WAAW,wBAAwB;IACvC,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAAC;IACnD,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,QAAQ,EAAE,yBAAyB,CAAC;IACpC,aAAa,CAAC,EAAE,2BAA2B,CAAC;IAC5C;;;OAGG;IACH,gBAAgB,CAAC,EAAE,MAAM,IAAI,CAAC;CAC/B;AAED,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,aAAa,CAAC;IACtB,MAAM,EAAE,aAAa,GAAG,IAAI,CAAC;IAC7B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAKD;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,wBAAwB,GAAG,uBAAuB,CAyW5F"}