pi-kiosk-shared 2.2.91 → 2.2.96
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/README.md +3 -3
- package/dist/barcode-scanner.d.ts +3 -2
- package/dist/barcode-scanner.d.ts.map +1 -1
- package/dist/barcode-scanner.js +3 -2
- package/dist/barcode-scanner.js.map +1 -1
- package/dist/hooks/scannerCameraConstraints.d.ts +12 -7
- package/dist/hooks/scannerCameraConstraints.d.ts.map +1 -1
- package/dist/hooks/scannerCameraConstraints.js +53 -46
- package/dist/hooks/scannerCameraConstraints.js.map +1 -1
- package/dist/hooks/scannerScanPasses.d.ts +2 -0
- package/dist/hooks/scannerScanPasses.d.ts.map +1 -1
- package/dist/hooks/scannerScanPasses.js +7 -0
- package/dist/hooks/scannerScanPasses.js.map +1 -1
- package/dist/hooks/selectEngine.d.ts +6 -4
- package/dist/hooks/selectEngine.d.ts.map +1 -1
- package/dist/hooks/useBarcodeScanner.d.ts +26 -18
- package/dist/hooks/useBarcodeScanner.d.ts.map +1 -1
- package/dist/hooks/useBarcodeScanner.js +249 -50
- package/dist/hooks/useBarcodeScanner.js.map +1 -1
- package/dist/hooks/zbarWasmEngine.d.ts +31 -0
- package/dist/hooks/zbarWasmEngine.d.ts.map +1 -0
- package/dist/hooks/zbarWasmEngine.js +126 -0
- package/dist/hooks/zbarWasmEngine.js.map +1 -0
- package/dist/index.d.ts +2 -2
- package/dist/index.js +2 -2
- package/package.json +2 -1
package/README.md
CHANGED
|
@@ -9,7 +9,7 @@ Shared types, API contracts, and error classes for the Pi Kiosk system.
|
|
|
9
9
|
|
|
10
10
|
## Temporary retention
|
|
11
11
|
|
|
12
|
-
`up-backend` keeps production `react` / `react-dom` until cold/start paths consume a Node-safe published or overlaid main barrel. Do **not** drop those deps until that consume path is proven on the version actually installed (registry tarball from `npm view`, or monorepo overlay of sibling `../shared` **2.2.
|
|
12
|
+
`up-backend` keeps production `react` / `react-dom` until cold/start paths consume a Node-safe published or overlaid main barrel. Do **not** drop those deps until that consume path is proven on the version actually installed (registry tarball from `npm view`, or monorepo overlay of sibling `../shared` **2.2.91**). Same caveat as `up-backend/docs/DEPLOYMENT/DEPLOY_SEPARATE_REPOS.md`.
|
|
13
13
|
|
|
14
14
|
## Installation
|
|
15
15
|
|
|
@@ -74,7 +74,7 @@ Frontends import React modules from `/ui`. The **target** main barrel (local ove
|
|
|
74
74
|
|
|
75
75
|
## Local monorepo overlay
|
|
76
76
|
|
|
77
|
-
**Honesty (SSOT):**
|
|
77
|
+
**Honesty (SSOT):** Live monorepo source is `shared/package.json` **2.2.91** (published on npm with the camera constraint ladder). Consumers pin `"pi-kiosk-shared": "^2.2.91"` matching that. Sibling overlay still runs when `../shared` exists. Separate-repo pin should match `shared@2.2.91`. Confirm registry with `npm view pi-kiosk-shared version` at deploy time. **Historical (not current):** older passes cited `^2.2.86` / unpublished `2.2.90` as the live pin.
|
|
78
78
|
|
|
79
79
|
**Documented cold path (monorepo):** `npm ci` / `npm install` in each app runs lifecycle hooks → `scripts/overlaySharedIfPresent.mjs` → `shared/scripts/ensureDist.mjs` when sibling `../shared` exists:
|
|
80
80
|
|
|
@@ -111,7 +111,7 @@ npm run gate:main-barrel-node-safe
|
|
|
111
111
|
|
|
112
112
|
From `shared/`, prove the documented cold path:
|
|
113
113
|
|
|
114
|
-
1. **DIAGNOSTIC** — `npm pack` a known Node-safe registry tarball (`COLD_VERSION` in `prove-pi-kiosk-shared-cold-overlay.mjs`, currently `2.2.82`) in a temp dir and assert COLD_BAD markers (never installs into a consumer with `--ignore-scripts`). Live monorepo source is `shared/package.json` **2.2.
|
|
114
|
+
1. **DIAGNOSTIC** — `npm pack` a known Node-safe registry tarball (`COLD_VERSION` in `prove-pi-kiosk-shared-cold-overlay.mjs`, currently `2.2.82` — intentional historical diagnostic fixture, not the live pin) in a temp dir and assert COLD_BAD markers (never installs into a consumer with `--ignore-scripts`). Live monorepo source is `shared/package.json` **2.2.91**.
|
|
115
115
|
2. **PASS** — wipe that consumer’s `node_modules/pi-kiosk-shared`, then `npm install` with **scripts on** (no package args) so `prepare` / `postinstall` overlays during install; assert Node-safe barrel + `NODE_IMPORT_OK`.
|
|
116
116
|
|
|
117
117
|
```bash
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
export { useBarcodeScanner, type UseBarcodeScannerMessages, type UseBarcodeScannerOptions, type UseBarcodeScannerReturn, type ScannerStatus, } from './hooks/useBarcodeScanner.js';
|
|
1
|
+
export { useBarcodeScanner, type UseBarcodeScannerMessages, type UseBarcodeScannerOptions, type UseBarcodeScannerReturn, type ScannerStatus, SCANNER_DISTANCE_ASSIST_DELAY_MS, SCANNER_DISTANCE_ZOOM_DELAY_MS, SCANNER_ZBAR_ZXING_ASSIST_DELAY_MS, } 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 { SCANNER_VIDEO_CONSTRAINTS, SCANNER_VIDEO_CONSTRAINT_FALLBACKS, openScannerMediaStream, applyScannerTrackEnhancements, } from './hooks/scannerCameraConstraints.js';
|
|
4
|
+
export { SCANNER_VIDEO_CONSTRAINTS, SCANNER_VIDEO_CONSTRAINT_FALLBACKS, openScannerMediaStream, applyScannerTrackEnhancements, applyScannerDistanceZoom, resolvePreferredOpticalZoom, SCANNER_OPTICAL_ZOOM_POLICY, } from './hooks/scannerCameraConstraints.js';
|
|
5
|
+
export { setZbarWasmUrl, isZbarWasmUrlConfigured, } from './hooks/zbarWasmEngine.js';
|
|
5
6
|
//# 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,
|
|
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,EAClB,gCAAgC,EAChC,8BAA8B,EAC9B,kCAAkC,GACnC,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,EAC7B,wBAAwB,EACxB,2BAA2B,EAC3B,2BAA2B,GAC5B,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EACL,cAAc,EACd,uBAAuB,GACxB,MAAM,2BAA2B,CAAC"}
|
package/dist/barcode-scanner.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
export { useBarcodeScanner, } from './hooks/useBarcodeScanner.js';
|
|
1
|
+
export { useBarcodeScanner, SCANNER_DISTANCE_ASSIST_DELAY_MS, SCANNER_DISTANCE_ZOOM_DELAY_MS, SCANNER_ZBAR_ZXING_ASSIST_DELAY_MS, } from './hooks/useBarcodeScanner.js';
|
|
2
2
|
export { resolveScannerFormatConfig, } from './hooks/scannerFormats.js';
|
|
3
|
-
export { SCANNER_VIDEO_CONSTRAINTS, SCANNER_VIDEO_CONSTRAINT_FALLBACKS, openScannerMediaStream, applyScannerTrackEnhancements, } from './hooks/scannerCameraConstraints.js';
|
|
3
|
+
export { SCANNER_VIDEO_CONSTRAINTS, SCANNER_VIDEO_CONSTRAINT_FALLBACKS, openScannerMediaStream, applyScannerTrackEnhancements, applyScannerDistanceZoom, resolvePreferredOpticalZoom, SCANNER_OPTICAL_ZOOM_POLICY, } from './hooks/scannerCameraConstraints.js';
|
|
4
|
+
export { setZbarWasmUrl, isZbarWasmUrlConfigured, } from './hooks/zbarWasmEngine.js';
|
|
4
5
|
//# 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,
|
|
1
|
+
{"version":3,"file":"barcode-scanner.js","sourceRoot":"","sources":["../src/barcode-scanner.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EAKjB,gCAAgC,EAChC,8BAA8B,EAC9B,kCAAkC,GACnC,MAAM,8BAA8B,CAAC;AAEtC,OAAO,EACL,0BAA0B,GAG3B,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,yBAAyB,EACzB,kCAAkC,EAClC,sBAAsB,EACtB,6BAA6B,EAC7B,wBAAwB,EACxB,2BAA2B,EAC3B,2BAA2B,GAC5B,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EACL,cAAc,EACd,uBAAuB,GACxB,MAAM,2BAA2B,CAAC"}
|
|
@@ -40,13 +40,18 @@ export declare function resolveMidOpticalZoom(min: number, maxTarget: number, st
|
|
|
40
40
|
*/
|
|
41
41
|
export declare function openScannerMediaStream(getUserMedia: MediaDevices['getUserMedia']): Promise<MediaStream>;
|
|
42
42
|
/**
|
|
43
|
-
* Best-effort continuous autofocus
|
|
44
|
-
*
|
|
45
|
-
*
|
|
46
|
-
*
|
|
47
|
-
*
|
|
48
|
-
* - When the zoom range is wide, applies a mid -> max stepped ladder.
|
|
49
|
-
* - Enables torch when getCapabilities().torch is true.
|
|
43
|
+
* Best-effort continuous autofocus + torch after getUserMedia.
|
|
44
|
+
* Optical zoom is NOT applied here — max zoom on open blurs/crops close barcodes
|
|
45
|
+
* (camera shows a sharp code but @zxing never locks). The hook applies
|
|
46
|
+
* {@link applyScannerDistanceZoom} only after multi-pass has already started
|
|
47
|
+
* (second assist window), never at open and never at the first assist tick.
|
|
50
48
|
*/
|
|
51
49
|
export declare function applyScannerTrackEnhancements(track: MediaStreamTrack): Promise<void>;
|
|
50
|
+
/**
|
|
51
|
+
* Delayed distance lever (G2/G4): mid → max optical zoom from capabilities.
|
|
52
|
+
* Hook policy: call only after SCANNER_DISTANCE_ASSIST_DELAY_MS (multi-pass first)
|
|
53
|
+
* plus SCANNER_DISTANCE_ZOOM_DELAY_MS — never on open and never at the first
|
|
54
|
+
* assist tick, so close codes with slow AF are not forced into max zoom.
|
|
55
|
+
*/
|
|
56
|
+
export declare function applyScannerDistanceZoom(track: MediaStreamTrack): Promise<void>;
|
|
52
57
|
//# sourceMappingURL=scannerCameraConstraints.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
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
|
|
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;;;;;;GAMG;AACH,wBAAsB,6BAA6B,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CA4B1F;AAED;;;;;GAKG;AACH,wBAAsB,wBAAwB,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAgDrF"}
|
|
@@ -109,13 +109,11 @@ export async function openScannerMediaStream(getUserMedia) {
|
|
|
109
109
|
: new Error('Could not open scanner camera', { cause: lastError });
|
|
110
110
|
}
|
|
111
111
|
/**
|
|
112
|
-
* Best-effort continuous autofocus
|
|
113
|
-
*
|
|
114
|
-
*
|
|
115
|
-
*
|
|
116
|
-
*
|
|
117
|
-
* - When the zoom range is wide, applies a mid -> max stepped ladder.
|
|
118
|
-
* - Enables torch when getCapabilities().torch is true.
|
|
112
|
+
* Best-effort continuous autofocus + torch after getUserMedia.
|
|
113
|
+
* Optical zoom is NOT applied here — max zoom on open blurs/crops close barcodes
|
|
114
|
+
* (camera shows a sharp code but @zxing never locks). The hook applies
|
|
115
|
+
* {@link applyScannerDistanceZoom} only after multi-pass has already started
|
|
116
|
+
* (second assist window), never at open and never at the first assist tick.
|
|
119
117
|
*/
|
|
120
118
|
export async function applyScannerTrackEnhancements(track) {
|
|
121
119
|
const getCapabilities = track.getCapabilities;
|
|
@@ -125,64 +123,73 @@ export async function applyScannerTrackEnhancements(track) {
|
|
|
125
123
|
const capabilities = getCapabilities.call(track);
|
|
126
124
|
const hasContinuousFocus = capabilities.focusMode?.includes('continuous') === true;
|
|
127
125
|
const hasTorch = capabilities.torch === true;
|
|
128
|
-
|
|
129
|
-
let zoomMin = 1;
|
|
130
|
-
let zoomMax = 1;
|
|
131
|
-
let zoomStep;
|
|
132
|
-
let hasZoomRange = false;
|
|
133
|
-
if (zoomCap !== undefined) {
|
|
134
|
-
zoomMin = zoomCap.min ?? 1;
|
|
135
|
-
zoomMax = zoomCap.max ?? 1;
|
|
136
|
-
zoomStep = zoomCap.step;
|
|
137
|
-
hasZoomRange = zoomMax > zoomMin;
|
|
138
|
-
}
|
|
139
|
-
if (!hasContinuousFocus && !hasTorch && !hasZoomRange) {
|
|
126
|
+
if (!hasContinuousFocus && !hasTorch) {
|
|
140
127
|
return;
|
|
141
128
|
}
|
|
142
|
-
const
|
|
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 = [];
|
|
129
|
+
const advanced = [];
|
|
153
130
|
if (hasContinuousFocus) {
|
|
154
|
-
|
|
131
|
+
advanced.push({ focusMode: 'continuous' });
|
|
155
132
|
}
|
|
156
133
|
if (hasTorch) {
|
|
157
|
-
|
|
134
|
+
advanced.push({ torch: true });
|
|
158
135
|
}
|
|
159
|
-
|
|
160
|
-
|
|
136
|
+
try {
|
|
137
|
+
const next = { advanced };
|
|
138
|
+
await track.applyConstraints(next);
|
|
139
|
+
}
|
|
140
|
+
catch {
|
|
141
|
+
// Device rejected advanced focus/torch — keep the stream as opened.
|
|
161
142
|
}
|
|
162
|
-
|
|
163
|
-
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Delayed distance lever (G2/G4): mid → max optical zoom from capabilities.
|
|
146
|
+
* Hook policy: call only after SCANNER_DISTANCE_ASSIST_DELAY_MS (multi-pass first)
|
|
147
|
+
* plus SCANNER_DISTANCE_ZOOM_DELAY_MS — never on open and never at the first
|
|
148
|
+
* assist tick, so close codes with slow AF are not forced into max zoom.
|
|
149
|
+
*/
|
|
150
|
+
export async function applyScannerDistanceZoom(track) {
|
|
151
|
+
const getCapabilities = track.getCapabilities;
|
|
152
|
+
if (getCapabilities === undefined) {
|
|
153
|
+
return;
|
|
154
|
+
}
|
|
155
|
+
const capabilities = getCapabilities.call(track);
|
|
156
|
+
const zoomCap = capabilities.zoom;
|
|
157
|
+
if (zoomCap === undefined) {
|
|
158
|
+
return;
|
|
159
|
+
}
|
|
160
|
+
const zoomMin = zoomCap.min ?? 1;
|
|
161
|
+
const zoomMax = zoomCap.max ?? 1;
|
|
162
|
+
const zoomStep = zoomCap.step;
|
|
163
|
+
if (!(zoomMax > zoomMin)) {
|
|
164
|
+
return;
|
|
164
165
|
}
|
|
165
|
-
|
|
166
|
+
const preferredZoom = resolvePreferredOpticalZoom(zoomMin, zoomMax, zoomStep);
|
|
167
|
+
if (!(preferredZoom > zoomMin)) {
|
|
166
168
|
return;
|
|
167
169
|
}
|
|
170
|
+
const midZoom = resolveMidOpticalZoom(zoomMin, preferredZoom, zoomStep);
|
|
171
|
+
const useZoomLadder = midZoom > zoomMin && midZoom < preferredZoom;
|
|
168
172
|
try {
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
+
if (useZoomLadder) {
|
|
174
|
+
await track.applyConstraints({
|
|
175
|
+
advanced: [{ zoom: midZoom }],
|
|
176
|
+
});
|
|
173
177
|
try {
|
|
174
|
-
|
|
178
|
+
await track.applyConstraints({
|
|
175
179
|
advanced: [{ zoom: preferredZoom }],
|
|
176
|
-
};
|
|
177
|
-
await track.applyConstraints(second);
|
|
180
|
+
});
|
|
178
181
|
}
|
|
179
182
|
catch {
|
|
180
|
-
// Max
|
|
183
|
+
// Max rejected after mid — keep mid.
|
|
181
184
|
}
|
|
185
|
+
return;
|
|
182
186
|
}
|
|
187
|
+
await track.applyConstraints({
|
|
188
|
+
advanced: [{ zoom: preferredZoom }],
|
|
189
|
+
});
|
|
183
190
|
}
|
|
184
191
|
catch {
|
|
185
|
-
//
|
|
192
|
+
// Zoom unsupported after open — keep current stream.
|
|
186
193
|
}
|
|
187
194
|
}
|
|
188
195
|
//# sourceMappingURL=scannerCameraConstraints.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scannerCameraConstraints.js","sourceRoot":"","sources":["../../src/hooks/scannerCameraConstraints.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"scannerCameraConstraints.js","sourceRoot":"","sources":["../../src/hooks/scannerCameraConstraints.ts"],"names":[],"mappings":"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"}
|
|
@@ -17,5 +17,7 @@ export interface ScanPass {
|
|
|
17
17
|
* CPU bound: at most 10 passes (1 full + 3 center + 1 mid-band + 4 corners + 1 tight center).
|
|
18
18
|
* Do not add more regions without raising this documented ceiling (~10–12 max).
|
|
19
19
|
*/
|
|
20
|
+
/** Full-frame only — cheap first pass (~1 crop per tick; G9 CPU bound). */
|
|
21
|
+
export declare function buildQuickScanPass(videoWidth: number, videoHeight: number): ScanPass[];
|
|
20
22
|
export declare function buildMaxSensitivityScanPasses(videoWidth: number, videoHeight: number): ScanPass[];
|
|
21
23
|
//# sourceMappingURL=scannerScanPasses.d.ts.map
|
|
@@ -1 +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"}
|
|
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,2EAA2E;AAC3E,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,QAAQ,EAAE,CAKtF;AAED,wBAAgB,6BAA6B,CAAC,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,QAAQ,EAAE,CA0DjG"}
|
|
@@ -5,6 +5,13 @@
|
|
|
5
5
|
* CPU bound: at most 10 passes (1 full + 3 center + 1 mid-band + 4 corners + 1 tight center).
|
|
6
6
|
* Do not add more regions without raising this documented ceiling (~10–12 max).
|
|
7
7
|
*/
|
|
8
|
+
/** Full-frame only — cheap first pass (~1 crop per tick; G9 CPU bound). */
|
|
9
|
+
export function buildQuickScanPass(videoWidth, videoHeight) {
|
|
10
|
+
if (videoWidth < 2 || videoHeight < 2) {
|
|
11
|
+
return [];
|
|
12
|
+
}
|
|
13
|
+
return [{ sx: 0, sy: 0, sw: videoWidth, sh: videoHeight, scale: 1 }];
|
|
14
|
+
}
|
|
8
15
|
export function buildMaxSensitivityScanPasses(videoWidth, videoHeight) {
|
|
9
16
|
const vw = videoWidth;
|
|
10
17
|
const vh = videoHeight;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scannerScanPasses.js","sourceRoot":"","sources":["../../src/hooks/scannerScanPasses.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"scannerScanPasses.js","sourceRoot":"","sources":["../../src/hooks/scannerScanPasses.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Decode engines used by {@link useBarcodeScanner}:
|
|
3
|
-
* - `
|
|
4
|
-
* - `
|
|
5
|
-
*
|
|
3
|
+
* - `zbar-wasm` — ZBar C/C++ WASM (primary when boot succeeds; retail EAN/UPC + QR)
|
|
4
|
+
* - `zxing` — pure-JS @zxing/browser timed parallel assist (G4) when ZBar runs but
|
|
5
|
+
* does not decode within the assist delay; not a boot fallback
|
|
6
|
+
* - `native-detector` — Chromium BarcodeDetector parallel assist; never the sole engine
|
|
6
7
|
*
|
|
8
|
+
* Boot failure (missing WASM URL / ZBar init error) → `status: 'error'`, not `@zxing`.
|
|
7
9
|
* Engine selection lives only in `useBarcodeScanner`.
|
|
8
10
|
*/
|
|
9
|
-
export type ScannerEngine = 'zxing' | 'native-detector';
|
|
11
|
+
export type ScannerEngine = 'zbar-wasm' | 'zxing' | 'native-detector';
|
|
10
12
|
//# sourceMappingURL=selectEngine.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"selectEngine.d.ts","sourceRoot":"","sources":["../../src/hooks/selectEngine.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"selectEngine.d.ts","sourceRoot":"","sources":["../../src/hooks/selectEngine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,MAAM,MAAM,aAAa,GAAG,WAAW,GAAG,OAAO,GAAG,iBAAiB,CAAC"}
|
|
@@ -2,6 +2,20 @@ import './scannerNativeTypes.js';
|
|
|
2
2
|
import type { ScannerEngine } from './selectEngine.js';
|
|
3
3
|
import { type BarcodeScannerFormatProfile } from './scannerFormats.js';
|
|
4
4
|
export type ScannerStatus = 'idle' | 'starting' | 'running' | 'denied' | 'error';
|
|
5
|
+
/**
|
|
6
|
+
* Optical zoom on ZBar primary path (focus/torch only on open).
|
|
7
|
+
*/
|
|
8
|
+
export declare const SCANNER_DISTANCE_ASSIST_DELAY_MS = 1500;
|
|
9
|
+
/**
|
|
10
|
+
* After ZBar is running with no decode, start @zxing stream + multi-pass in
|
|
11
|
+
* parallel (does not stop ZBar — G4 safety net for close EANs ZBar misses).
|
|
12
|
+
*/
|
|
13
|
+
export declare const SCANNER_ZBAR_ZXING_ASSIST_DELAY_MS = 1500;
|
|
14
|
+
/**
|
|
15
|
+
* Extra wait after @zxing multi-pass starts before optical zoom on the rare
|
|
16
|
+
* legacy @zxing-only path (unused when G3 hard-fail is active).
|
|
17
|
+
*/
|
|
18
|
+
export declare const SCANNER_DISTANCE_ZOOM_DELAY_MS = 1500;
|
|
5
19
|
export interface UseBarcodeScannerMessages {
|
|
6
20
|
permissionDenied: string;
|
|
7
21
|
noCamera: string;
|
|
@@ -11,19 +25,16 @@ export interface UseBarcodeScannerMessages {
|
|
|
11
25
|
error: string;
|
|
12
26
|
scannerOff: string;
|
|
13
27
|
/**
|
|
14
|
-
*
|
|
15
|
-
* Falls back to `
|
|
28
|
+
* ZBar WASM URL missing or scanner boot failed — hard error (G3).
|
|
29
|
+
* Falls back to `error` when omitted.
|
|
16
30
|
*/
|
|
17
|
-
|
|
31
|
+
zbarBootstrapFailed?: string;
|
|
18
32
|
/**
|
|
19
|
-
*
|
|
20
|
-
* constraint ladder exhaustion). Falls back to `error` when omitted.
|
|
33
|
+
* Shown while `engine === 'zbar-wasm'` (G10). Falls back to `runningZxing`.
|
|
21
34
|
*/
|
|
35
|
+
runningZbar?: string;
|
|
36
|
+
insecureContext?: string;
|
|
22
37
|
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
38
|
policyBlocked?: string;
|
|
28
39
|
}
|
|
29
40
|
export interface UseBarcodeScannerOptions {
|
|
@@ -32,25 +43,22 @@ export interface UseBarcodeScannerOptions {
|
|
|
32
43
|
onDecode: (rawValue: string) => void;
|
|
33
44
|
messages: UseBarcodeScannerMessages;
|
|
34
45
|
formatProfile?: BarcodeScannerFormatProfile;
|
|
35
|
-
/**
|
|
36
|
-
* Fired when the tab/page backgrounds and the hook releases the camera.
|
|
37
|
-
* Parent should set `enabled` false so the CTA must be tapped again (no auto-restart).
|
|
38
|
-
*/
|
|
39
46
|
onBackgroundStop?: () => void;
|
|
40
47
|
}
|
|
41
48
|
export interface UseBarcodeScannerReturn {
|
|
42
49
|
status: ScannerStatus;
|
|
43
50
|
engine: ScannerEngine | null;
|
|
51
|
+
/** True while G4 parallel @zxing stream or multi-pass assist is active (ZBar may still run). */
|
|
52
|
+
zxingAssistActive: boolean;
|
|
44
53
|
errorMessage: string | null;
|
|
45
54
|
}
|
|
46
55
|
/**
|
|
47
56
|
* Live camera barcode/QR decode.
|
|
48
57
|
*
|
|
49
|
-
* Primary:
|
|
50
|
-
*
|
|
51
|
-
*
|
|
52
|
-
*
|
|
53
|
-
* hard-fail with recovery copy when neither @zxing path can start.
|
|
58
|
+
* Primary: ZBar WASM multi-pass (immediate) + Chromium BarcodeDetector in parallel.
|
|
59
|
+
* G3: hard-fail when WASM URL unset or ZBar boot fails — no silent @zxing fallback.
|
|
60
|
+
* G4: after {@link SCANNER_ZBAR_ZXING_ASSIST_DELAY_MS} with no lock, @zxing assist
|
|
61
|
+
* runs in parallel without stopping ZBar.
|
|
54
62
|
*/
|
|
55
63
|
export declare function useBarcodeScanner(options: UseBarcodeScannerOptions): UseBarcodeScannerReturn;
|
|
56
64
|
//# 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;
|
|
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;AAgB7B,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,UAAU,GAAG,SAAS,GAAG,QAAQ,GAAG,OAAO,CAAC;AAEjF;;GAEG;AACH,eAAO,MAAM,gCAAgC,OAAO,CAAC;AAErD;;;GAGG;AACH,eAAO,MAAM,kCAAkC,OAAmC,CAAC;AAEnF;;;GAGG;AACH,eAAO,MAAM,8BAA8B,OAAO,CAAC;AAEnD,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,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,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,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,gGAAgG;IAChG,iBAAiB,EAAE,OAAO,CAAC;IAC3B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAKD;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,wBAAwB,GAAG,uBAAuB,CA4iB5F"}
|
|
@@ -3,8 +3,23 @@ import { BrowserMultiFormatReader } from '@zxing/browser';
|
|
|
3
3
|
import { DecodeHintType } from '@zxing/library';
|
|
4
4
|
import './scannerNativeTypes.js';
|
|
5
5
|
import { resolveScannerFormatConfig, } from './scannerFormats.js';
|
|
6
|
-
import { applyScannerTrackEnhancements, openScannerMediaStream, } from './scannerCameraConstraints.js';
|
|
6
|
+
import { applyScannerDistanceZoom, applyScannerTrackEnhancements, openScannerMediaStream, } from './scannerCameraConstraints.js';
|
|
7
7
|
import { createSensitiveZxingReader, decodeVideoFrameWithZxingJs, } from './zxingJsSensitiveDecode.js';
|
|
8
|
+
import { createConfiguredZbarScanner, decodeVideoFrameWithZbar, isZbarWasmUrlConfigured, } from './zbarWasmEngine.js';
|
|
9
|
+
/**
|
|
10
|
+
* Optical zoom on ZBar primary path (focus/torch only on open).
|
|
11
|
+
*/
|
|
12
|
+
export const SCANNER_DISTANCE_ASSIST_DELAY_MS = 1500;
|
|
13
|
+
/**
|
|
14
|
+
* After ZBar is running with no decode, start @zxing stream + multi-pass in
|
|
15
|
+
* parallel (does not stop ZBar — G4 safety net for close EANs ZBar misses).
|
|
16
|
+
*/
|
|
17
|
+
export const SCANNER_ZBAR_ZXING_ASSIST_DELAY_MS = SCANNER_DISTANCE_ASSIST_DELAY_MS;
|
|
18
|
+
/**
|
|
19
|
+
* Extra wait after @zxing multi-pass starts before optical zoom on the rare
|
|
20
|
+
* legacy @zxing-only path (unused when G3 hard-fail is active).
|
|
21
|
+
*/
|
|
22
|
+
export const SCANNER_DISTANCE_ZOOM_DELAY_MS = 1500;
|
|
8
23
|
function isInsecureCameraContext() {
|
|
9
24
|
return typeof window !== 'undefined' && window.isSecureContext === false;
|
|
10
25
|
}
|
|
@@ -19,21 +34,21 @@ function isCameraInUseError(err) {
|
|
|
19
34
|
return (err instanceof DOMException &&
|
|
20
35
|
(err.name === 'NotReadableError' || err.name === 'AbortError'));
|
|
21
36
|
}
|
|
22
|
-
/**
|
|
23
|
-
const
|
|
37
|
+
/** ZBar + @zxing assist decode budget (~20–25 attempts/s). */
|
|
38
|
+
const DECODE_MIN_FRAME_INTERVAL_MS = 40;
|
|
24
39
|
/**
|
|
25
40
|
* Live camera barcode/QR decode.
|
|
26
41
|
*
|
|
27
|
-
* Primary:
|
|
28
|
-
*
|
|
29
|
-
*
|
|
30
|
-
*
|
|
31
|
-
* hard-fail with recovery copy when neither @zxing path can start.
|
|
42
|
+
* Primary: ZBar WASM multi-pass (immediate) + Chromium BarcodeDetector in parallel.
|
|
43
|
+
* G3: hard-fail when WASM URL unset or ZBar boot fails — no silent @zxing fallback.
|
|
44
|
+
* G4: after {@link SCANNER_ZBAR_ZXING_ASSIST_DELAY_MS} with no lock, @zxing assist
|
|
45
|
+
* runs in parallel without stopping ZBar.
|
|
32
46
|
*/
|
|
33
47
|
export function useBarcodeScanner(options) {
|
|
34
48
|
const { enabled, videoRef, onDecode, messages, formatProfile = 'retail', onBackgroundStop, } = options;
|
|
35
49
|
const [status, setStatus] = useState('idle');
|
|
36
50
|
const [engine, setEngine] = useState(null);
|
|
51
|
+
const [zxingAssistActive, setZxingAssistActive] = useState(false);
|
|
37
52
|
const [errorMessage, setErrorMessage] = useState(null);
|
|
38
53
|
const [heldOffByBackground, setHeldOffByBackground] = useState(false);
|
|
39
54
|
const onDecodeRef = useRef(onDecode);
|
|
@@ -61,6 +76,7 @@ export function useBarcodeScanner(options) {
|
|
|
61
76
|
if (!scanningEnabled) {
|
|
62
77
|
setStatus('idle');
|
|
63
78
|
setEngine(null);
|
|
79
|
+
setZxingAssistActive(false);
|
|
64
80
|
setErrorMessage(null);
|
|
65
81
|
}
|
|
66
82
|
}
|
|
@@ -82,6 +98,7 @@ export function useBarcodeScanner(options) {
|
|
|
82
98
|
setHeldOffByBackground(true);
|
|
83
99
|
setStatus('idle');
|
|
84
100
|
setEngine(null);
|
|
101
|
+
setZxingAssistActive(false);
|
|
85
102
|
setErrorMessage(null);
|
|
86
103
|
onBackgroundStopRef.current?.();
|
|
87
104
|
};
|
|
@@ -108,9 +125,15 @@ export function useBarcodeScanner(options) {
|
|
|
108
125
|
let cancelled = false;
|
|
109
126
|
let stream = null;
|
|
110
127
|
let zxingControls = null;
|
|
111
|
-
let
|
|
128
|
+
let zbarFrameHandle = null;
|
|
129
|
+
let zxingMultiPassFrameHandle = null;
|
|
130
|
+
let nativeFrameHandle = null;
|
|
131
|
+
let distanceZoomTimer = null;
|
|
132
|
+
let zxingAssistTimer = null;
|
|
133
|
+
let gotDecode = false;
|
|
134
|
+
let zxingAssistStarted = false;
|
|
135
|
+
let zbarScanner = null;
|
|
112
136
|
const formatConfig = resolveScannerFormatConfig(formatProfile);
|
|
113
|
-
// G5: multi-pass needs a canvas; if creation fails, hard-fail later (never native-only).
|
|
114
137
|
const decodeCanvas = (() => {
|
|
115
138
|
if (typeof document === 'undefined') {
|
|
116
139
|
return null;
|
|
@@ -122,7 +145,42 @@ export function useBarcodeScanner(options) {
|
|
|
122
145
|
return null;
|
|
123
146
|
}
|
|
124
147
|
})();
|
|
148
|
+
const zbarBootstrapErrorMessage = () => messagesRef.current.zbarBootstrapFailed ?? messagesRef.current.error;
|
|
149
|
+
const clearAssistTimers = () => {
|
|
150
|
+
if (zxingAssistTimer !== null) {
|
|
151
|
+
clearTimeout(zxingAssistTimer);
|
|
152
|
+
zxingAssistTimer = null;
|
|
153
|
+
}
|
|
154
|
+
if (distanceZoomTimer !== null) {
|
|
155
|
+
clearTimeout(distanceZoomTimer);
|
|
156
|
+
distanceZoomTimer = null;
|
|
157
|
+
}
|
|
158
|
+
};
|
|
159
|
+
const emitDecode = (text) => {
|
|
160
|
+
if (cancelled || text.length === 0) {
|
|
161
|
+
return;
|
|
162
|
+
}
|
|
163
|
+
gotDecode = true;
|
|
164
|
+
clearAssistTimers();
|
|
165
|
+
if (!cancelled) {
|
|
166
|
+
setZxingAssistActive(false);
|
|
167
|
+
}
|
|
168
|
+
onDecodeRef.current(text);
|
|
169
|
+
};
|
|
170
|
+
const failZbarBootstrap = () => {
|
|
171
|
+
if (!cancelled) {
|
|
172
|
+
setStatus('error');
|
|
173
|
+
setEngine(null);
|
|
174
|
+
setZxingAssistActive(false);
|
|
175
|
+
setErrorMessage(zbarBootstrapErrorMessage());
|
|
176
|
+
}
|
|
177
|
+
cleanup();
|
|
178
|
+
};
|
|
125
179
|
const cleanup = () => {
|
|
180
|
+
clearAssistTimers();
|
|
181
|
+
if (!cancelled) {
|
|
182
|
+
setZxingAssistActive(false);
|
|
183
|
+
}
|
|
126
184
|
if (zxingControls !== null) {
|
|
127
185
|
try {
|
|
128
186
|
zxingControls.stop();
|
|
@@ -132,9 +190,26 @@ export function useBarcodeScanner(options) {
|
|
|
132
190
|
}
|
|
133
191
|
zxingControls = null;
|
|
134
192
|
}
|
|
135
|
-
if (
|
|
136
|
-
cancelAnimationFrame(
|
|
137
|
-
|
|
193
|
+
if (zbarFrameHandle !== null) {
|
|
194
|
+
cancelAnimationFrame(zbarFrameHandle);
|
|
195
|
+
zbarFrameHandle = null;
|
|
196
|
+
}
|
|
197
|
+
if (zxingMultiPassFrameHandle !== null) {
|
|
198
|
+
cancelAnimationFrame(zxingMultiPassFrameHandle);
|
|
199
|
+
zxingMultiPassFrameHandle = null;
|
|
200
|
+
}
|
|
201
|
+
if (nativeFrameHandle !== null) {
|
|
202
|
+
cancelAnimationFrame(nativeFrameHandle);
|
|
203
|
+
nativeFrameHandle = null;
|
|
204
|
+
}
|
|
205
|
+
if (zbarScanner !== null) {
|
|
206
|
+
try {
|
|
207
|
+
zbarScanner.destroy();
|
|
208
|
+
}
|
|
209
|
+
catch {
|
|
210
|
+
// ignore teardown errors
|
|
211
|
+
}
|
|
212
|
+
zbarScanner = null;
|
|
138
213
|
}
|
|
139
214
|
if (stream !== null) {
|
|
140
215
|
for (const track of stream.getTracks()) {
|
|
@@ -163,7 +238,6 @@ export function useBarcodeScanner(options) {
|
|
|
163
238
|
}
|
|
164
239
|
return;
|
|
165
240
|
}
|
|
166
|
-
// Missing MediaDevices (secure context prep for G3): prefer noCamera only.
|
|
167
241
|
if (typeof navigator === 'undefined' || navigator.mediaDevices === undefined) {
|
|
168
242
|
if (!cancelled) {
|
|
169
243
|
setStatus('error');
|
|
@@ -179,8 +253,6 @@ export function useBarcodeScanner(options) {
|
|
|
179
253
|
return;
|
|
180
254
|
}
|
|
181
255
|
if (isPermissionDeniedError(err)) {
|
|
182
|
-
// Android Chrome often throws NotAllowedError on plain HTTP LAN URLs;
|
|
183
|
-
// prefer the HTTPS recovery copy when the context is still insecure.
|
|
184
256
|
if (isInsecureCameraContext()) {
|
|
185
257
|
setStatus('error');
|
|
186
258
|
setErrorMessage(messagesRef.current.insecureContext ?? messagesRef.current.noCamera);
|
|
@@ -205,7 +277,6 @@ export function useBarcodeScanner(options) {
|
|
|
205
277
|
cleanup();
|
|
206
278
|
return;
|
|
207
279
|
}
|
|
208
|
-
// G5: cancel/unmount after GUM — release before enhance/play.
|
|
209
280
|
if (cancelled) {
|
|
210
281
|
cleanup();
|
|
211
282
|
return;
|
|
@@ -221,7 +292,6 @@ export function useBarcodeScanner(options) {
|
|
|
221
292
|
}
|
|
222
293
|
const video = videoRef.current;
|
|
223
294
|
if (video === null) {
|
|
224
|
-
// G4: successful GUM but video element gone — surface error, release tracks.
|
|
225
295
|
cleanup();
|
|
226
296
|
if (!cancelled) {
|
|
227
297
|
setStatus('error');
|
|
@@ -242,7 +312,97 @@ export function useBarcodeScanner(options) {
|
|
|
242
312
|
cleanup();
|
|
243
313
|
return;
|
|
244
314
|
}
|
|
245
|
-
const
|
|
315
|
+
const startNativeParallelAssist = () => {
|
|
316
|
+
if (typeof window === 'undefined' || window.BarcodeDetector === undefined) {
|
|
317
|
+
return;
|
|
318
|
+
}
|
|
319
|
+
const detector = new window.BarcodeDetector({
|
|
320
|
+
formats: [...formatConfig.nativeFormats],
|
|
321
|
+
});
|
|
322
|
+
const tick = async () => {
|
|
323
|
+
if (cancelled || gotDecode) {
|
|
324
|
+
return;
|
|
325
|
+
}
|
|
326
|
+
if (video.readyState >= 2) {
|
|
327
|
+
try {
|
|
328
|
+
const results = await detector.detect(video);
|
|
329
|
+
const first = results[0];
|
|
330
|
+
if (first !== undefined && first.rawValue.trim().length > 0) {
|
|
331
|
+
emitDecode(first.rawValue.trim());
|
|
332
|
+
return;
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
catch {
|
|
336
|
+
// keep scanning
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
if (!cancelled && !gotDecode) {
|
|
340
|
+
nativeFrameHandle = requestAnimationFrame(() => {
|
|
341
|
+
void tick();
|
|
342
|
+
});
|
|
343
|
+
}
|
|
344
|
+
};
|
|
345
|
+
nativeFrameHandle = requestAnimationFrame(() => {
|
|
346
|
+
void tick();
|
|
347
|
+
});
|
|
348
|
+
};
|
|
349
|
+
const startZbarLoop = async () => {
|
|
350
|
+
if (decodeCanvas === null) {
|
|
351
|
+
return false;
|
|
352
|
+
}
|
|
353
|
+
let scanner;
|
|
354
|
+
try {
|
|
355
|
+
scanner = await createConfiguredZbarScanner(formatProfile);
|
|
356
|
+
}
|
|
357
|
+
catch {
|
|
358
|
+
return false;
|
|
359
|
+
}
|
|
360
|
+
if (cancelled) {
|
|
361
|
+
try {
|
|
362
|
+
scanner.destroy();
|
|
363
|
+
}
|
|
364
|
+
catch {
|
|
365
|
+
// ignore
|
|
366
|
+
}
|
|
367
|
+
return false;
|
|
368
|
+
}
|
|
369
|
+
zbarScanner = scanner;
|
|
370
|
+
let lastAttemptMs = 0;
|
|
371
|
+
let busy = false;
|
|
372
|
+
let zbarTickCount = 0;
|
|
373
|
+
const tick = () => {
|
|
374
|
+
if (cancelled || gotDecode) {
|
|
375
|
+
return;
|
|
376
|
+
}
|
|
377
|
+
const now = performance.now();
|
|
378
|
+
if (!busy &&
|
|
379
|
+
video.readyState >= 2 &&
|
|
380
|
+
now - lastAttemptMs >= DECODE_MIN_FRAME_INTERVAL_MS) {
|
|
381
|
+
lastAttemptMs = now;
|
|
382
|
+
busy = true;
|
|
383
|
+
zbarTickCount += 1;
|
|
384
|
+
const quickOnly = zbarTickCount % 3 !== 0;
|
|
385
|
+
void decodeVideoFrameWithZbar(video, decodeCanvas, scanner, { quickOnly })
|
|
386
|
+
.then((text) => {
|
|
387
|
+
if (!cancelled && text !== null) {
|
|
388
|
+
emitDecode(text);
|
|
389
|
+
}
|
|
390
|
+
})
|
|
391
|
+
.catch(() => {
|
|
392
|
+
// keep scanning
|
|
393
|
+
})
|
|
394
|
+
.finally(() => {
|
|
395
|
+
busy = false;
|
|
396
|
+
});
|
|
397
|
+
}
|
|
398
|
+
if (!cancelled && !gotDecode) {
|
|
399
|
+
zbarFrameHandle = requestAnimationFrame(tick);
|
|
400
|
+
}
|
|
401
|
+
};
|
|
402
|
+
zbarFrameHandle = requestAnimationFrame(tick);
|
|
403
|
+
return true;
|
|
404
|
+
};
|
|
405
|
+
const startZxingStreamAssist = async () => {
|
|
246
406
|
const hints = new Map();
|
|
247
407
|
hints.set(DecodeHintType.POSSIBLE_FORMATS, [...formatConfig.zxingFormats]);
|
|
248
408
|
hints.set(DecodeHintType.TRY_HARDER, true);
|
|
@@ -254,9 +414,18 @@ export function useBarcodeScanner(options) {
|
|
|
254
414
|
return;
|
|
255
415
|
}
|
|
256
416
|
if (result !== undefined && result !== null) {
|
|
257
|
-
|
|
417
|
+
emitDecode(result.getText());
|
|
258
418
|
}
|
|
259
419
|
});
|
|
420
|
+
if (cancelled) {
|
|
421
|
+
try {
|
|
422
|
+
zxingControls.stop();
|
|
423
|
+
}
|
|
424
|
+
catch {
|
|
425
|
+
// ignore teardown errors
|
|
426
|
+
}
|
|
427
|
+
zxingControls = null;
|
|
428
|
+
}
|
|
260
429
|
return true;
|
|
261
430
|
}
|
|
262
431
|
catch {
|
|
@@ -272,25 +441,24 @@ export function useBarcodeScanner(options) {
|
|
|
272
441
|
reader = createSensitiveZxingReader(formatConfig.zxingFormats);
|
|
273
442
|
}
|
|
274
443
|
catch {
|
|
275
|
-
// Reader/bootstrap failure — do not pretend multi-pass started.
|
|
276
444
|
return false;
|
|
277
445
|
}
|
|
278
446
|
let lastAttemptMs = 0;
|
|
279
447
|
let busy = false;
|
|
280
448
|
const tick = () => {
|
|
281
|
-
if (cancelled) {
|
|
449
|
+
if (cancelled || gotDecode) {
|
|
282
450
|
return;
|
|
283
451
|
}
|
|
284
452
|
const now = performance.now();
|
|
285
453
|
if (!busy &&
|
|
286
454
|
video.readyState >= 2 &&
|
|
287
|
-
now - lastAttemptMs >=
|
|
455
|
+
now - lastAttemptMs >= DECODE_MIN_FRAME_INTERVAL_MS) {
|
|
288
456
|
lastAttemptMs = now;
|
|
289
457
|
busy = true;
|
|
290
458
|
try {
|
|
291
459
|
const text = decodeVideoFrameWithZxingJs(video, decodeCanvas, reader);
|
|
292
460
|
if (!cancelled && text !== null) {
|
|
293
|
-
|
|
461
|
+
emitDecode(text);
|
|
294
462
|
}
|
|
295
463
|
}
|
|
296
464
|
catch {
|
|
@@ -300,43 +468,74 @@ export function useBarcodeScanner(options) {
|
|
|
300
468
|
busy = false;
|
|
301
469
|
}
|
|
302
470
|
}
|
|
303
|
-
if (!cancelled) {
|
|
304
|
-
|
|
471
|
+
if (!cancelled && !gotDecode) {
|
|
472
|
+
zxingMultiPassFrameHandle = requestAnimationFrame(tick);
|
|
305
473
|
}
|
|
306
474
|
};
|
|
307
|
-
|
|
475
|
+
zxingMultiPassFrameHandle = requestAnimationFrame(tick);
|
|
308
476
|
return true;
|
|
309
477
|
};
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
// G5: if cancelled after controls assigned, stop them + release stream.
|
|
316
|
-
if (cancelled) {
|
|
317
|
-
cleanup();
|
|
318
|
-
return;
|
|
319
|
-
}
|
|
320
|
-
if (streamOk) {
|
|
321
|
-
startZxingMultiPassLoop();
|
|
478
|
+
const startZxingParallelAssist = () => {
|
|
479
|
+
if (zxingAssistStarted || cancelled || gotDecode) {
|
|
480
|
+
return;
|
|
481
|
+
}
|
|
482
|
+
zxingAssistStarted = true;
|
|
322
483
|
if (!cancelled) {
|
|
323
|
-
|
|
324
|
-
setStatus('running');
|
|
484
|
+
setZxingAssistActive(true);
|
|
325
485
|
}
|
|
486
|
+
void (async () => {
|
|
487
|
+
const streamOk = await startZxingStreamAssist();
|
|
488
|
+
if (cancelled || gotDecode) {
|
|
489
|
+
return;
|
|
490
|
+
}
|
|
491
|
+
if (!streamOk) {
|
|
492
|
+
startZxingMultiPassLoop();
|
|
493
|
+
}
|
|
494
|
+
})();
|
|
495
|
+
};
|
|
496
|
+
const scheduleZbarDistanceZoom = () => {
|
|
497
|
+
const trackForAssist = primaryTrack;
|
|
498
|
+
if (trackForAssist === undefined) {
|
|
499
|
+
return;
|
|
500
|
+
}
|
|
501
|
+
distanceZoomTimer = setTimeout(() => {
|
|
502
|
+
distanceZoomTimer = null;
|
|
503
|
+
if (cancelled || gotDecode) {
|
|
504
|
+
return;
|
|
505
|
+
}
|
|
506
|
+
void applyScannerDistanceZoom(trackForAssist);
|
|
507
|
+
}, SCANNER_DISTANCE_ASSIST_DELAY_MS);
|
|
508
|
+
};
|
|
509
|
+
const scheduleZxingParallelAssist = () => {
|
|
510
|
+
zxingAssistTimer = setTimeout(() => {
|
|
511
|
+
zxingAssistTimer = null;
|
|
512
|
+
if (cancelled || gotDecode) {
|
|
513
|
+
return;
|
|
514
|
+
}
|
|
515
|
+
startZxingParallelAssist();
|
|
516
|
+
}, SCANNER_ZBAR_ZXING_ASSIST_DELAY_MS);
|
|
517
|
+
};
|
|
518
|
+
// G3 — ZBar required; no silent @zxing boot fallback.
|
|
519
|
+
if (!isZbarWasmUrlConfigured()) {
|
|
520
|
+
failZbarBootstrap();
|
|
326
521
|
return;
|
|
327
522
|
}
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
523
|
+
const zbarOk = await startZbarLoop();
|
|
524
|
+
if (cancelled) {
|
|
525
|
+
cleanup();
|
|
526
|
+
return;
|
|
527
|
+
}
|
|
528
|
+
if (!zbarOk) {
|
|
529
|
+
failZbarBootstrap();
|
|
333
530
|
return;
|
|
334
531
|
}
|
|
532
|
+
startNativeParallelAssist();
|
|
533
|
+
scheduleZbarDistanceZoom();
|
|
534
|
+
scheduleZxingParallelAssist();
|
|
335
535
|
if (!cancelled) {
|
|
336
|
-
|
|
337
|
-
|
|
536
|
+
setEngine('zbar-wasm');
|
|
537
|
+
setStatus('running');
|
|
338
538
|
}
|
|
339
|
-
cleanup();
|
|
340
539
|
})();
|
|
341
540
|
return () => {
|
|
342
541
|
cancelled = true;
|
|
@@ -344,6 +543,6 @@ export function useBarcodeScanner(options) {
|
|
|
344
543
|
stopRef.current = null;
|
|
345
544
|
};
|
|
346
545
|
}, [scanningEnabled, formatProfile, stop, videoRef]);
|
|
347
|
-
return { status, engine, errorMessage };
|
|
546
|
+
return { status, engine, zxingAssistActive, errorMessage };
|
|
348
547
|
}
|
|
349
548
|
//# sourceMappingURL=useBarcodeScanner.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useBarcodeScanner.js","sourceRoot":"","sources":["../../src/hooks/useBarcodeScanner.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useBarcodeScanner.js","sourceRoot":"","sources":["../../src/hooks/useBarcodeScanner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ZBar C/C++ WASM decode — primary live camera engine for retail EAN/UPC/Code128 + QR.
|
|
3
|
+
* Uses @undecaf/zbar-wasm (same engine as the BarcodeDetector polyfill).
|
|
4
|
+
*
|
|
5
|
+
* Apps must call {@link setZbarWasmUrl} once at boot with a same-origin
|
|
6
|
+
* `zbar.wasm?url` (Vite) so CSP + bundlers resolve the binary.
|
|
7
|
+
*/
|
|
8
|
+
import { ZBarScanner } from '@undecaf/zbar-wasm';
|
|
9
|
+
import type { BarcodeScannerFormatProfile } from './scannerFormats.js';
|
|
10
|
+
export interface ZbarDecodeFrameOptions {
|
|
11
|
+
/** When true, decode full frame only (every other ticks — G9 CPU bound). */
|
|
12
|
+
readonly quickOnly?: boolean;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* CSP-safe same-origin URL for `zbar.wasm`. Call once before any scan session.
|
|
16
|
+
*/
|
|
17
|
+
export declare function setZbarWasmUrl(url: string): void;
|
|
18
|
+
export declare function isZbarWasmUrlConfigured(): boolean;
|
|
19
|
+
/** Test-only — reset boot flag between Jest cases. */
|
|
20
|
+
export declare function resetZbarWasmUrlForTests(): void;
|
|
21
|
+
/**
|
|
22
|
+
* Build a ZBar scanner enabled only for the active format profile.
|
|
23
|
+
* Dense X/Y scan + inverted retry for close / low-contrast retail labels.
|
|
24
|
+
*/
|
|
25
|
+
export declare function createConfiguredZbarScanner(formatProfile?: BarcodeScannerFormatProfile): Promise<ZBarScanner>;
|
|
26
|
+
/**
|
|
27
|
+
* Multi-pass digital crops → ZBar `scanImageData`.
|
|
28
|
+
* Returns first non-empty payload or null.
|
|
29
|
+
*/
|
|
30
|
+
export declare function decodeVideoFrameWithZbar(video: HTMLVideoElement, canvas: HTMLCanvasElement, scanner: ZBarScanner, options?: ZbarDecodeFrameOptions): Promise<string | null>;
|
|
31
|
+
//# sourceMappingURL=zbarWasmEngine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"zbarWasmEngine.d.ts","sourceRoot":"","sources":["../../src/hooks/zbarWasmEngine.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAIL,WAAW,EAEZ,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,qBAAqB,CAAC;AAMvE,MAAM,WAAW,sBAAsB;IACrC,4EAA4E;IAC5E,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;CAC9B;AAID;;GAEG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAchD;AAED,wBAAgB,uBAAuB,IAAI,OAAO,CAEjD;AAED,sDAAsD;AACtD,wBAAgB,wBAAwB,IAAI,IAAI,CAE/C;AAyBD;;;GAGG;AACH,wBAAsB,2BAA2B,CAC/C,aAAa,GAAE,2BAAsC,GACpD,OAAO,CAAC,WAAW,CAAC,CAuBtB;AAED;;;GAGG;AACH,wBAAsB,wBAAwB,CAC5C,KAAK,EAAE,gBAAgB,EACvB,MAAM,EAAE,iBAAiB,EACzB,OAAO,EAAE,WAAW,EACpB,OAAO,CAAC,EAAE,sBAAsB,GAC/B,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAmDxB"}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ZBar C/C++ WASM decode — primary live camera engine for retail EAN/UPC/Code128 + QR.
|
|
3
|
+
* Uses @undecaf/zbar-wasm (same engine as the BarcodeDetector polyfill).
|
|
4
|
+
*
|
|
5
|
+
* Apps must call {@link setZbarWasmUrl} once at boot with a same-origin
|
|
6
|
+
* `zbar.wasm?url` (Vite) so CSP + bundlers resolve the binary.
|
|
7
|
+
*/
|
|
8
|
+
import { scanImageData, setModuleArgs, ZBarConfigType, ZBarScanner, ZBarSymbolType, } from '@undecaf/zbar-wasm';
|
|
9
|
+
import { buildMaxSensitivityScanPasses, buildQuickScanPass, } from './scannerScanPasses.js';
|
|
10
|
+
let wasmUrlConfigured = false;
|
|
11
|
+
/**
|
|
12
|
+
* CSP-safe same-origin URL for `zbar.wasm`. Call once before any scan session.
|
|
13
|
+
*/
|
|
14
|
+
export function setZbarWasmUrl(url) {
|
|
15
|
+
const trimmed = url.trim();
|
|
16
|
+
if (trimmed.length === 0) {
|
|
17
|
+
throw new Error('setZbarWasmUrl requires a non-empty same-origin WASM URL');
|
|
18
|
+
}
|
|
19
|
+
setModuleArgs({
|
|
20
|
+
locateFile: (filename, _directory) => {
|
|
21
|
+
if (filename.endsWith('.wasm')) {
|
|
22
|
+
return trimmed;
|
|
23
|
+
}
|
|
24
|
+
return filename;
|
|
25
|
+
},
|
|
26
|
+
});
|
|
27
|
+
wasmUrlConfigured = true;
|
|
28
|
+
}
|
|
29
|
+
export function isZbarWasmUrlConfigured() {
|
|
30
|
+
return wasmUrlConfigured;
|
|
31
|
+
}
|
|
32
|
+
/** Test-only — reset boot flag between Jest cases. */
|
|
33
|
+
export function resetZbarWasmUrlForTests() {
|
|
34
|
+
wasmUrlConfigured = false;
|
|
35
|
+
}
|
|
36
|
+
const RETAIL_SYMBOLS = [
|
|
37
|
+
ZBarSymbolType.ZBAR_EAN13,
|
|
38
|
+
ZBarSymbolType.ZBAR_EAN8,
|
|
39
|
+
ZBarSymbolType.ZBAR_UPCA,
|
|
40
|
+
ZBarSymbolType.ZBAR_UPCE,
|
|
41
|
+
ZBarSymbolType.ZBAR_CODE128,
|
|
42
|
+
ZBarSymbolType.ZBAR_CODE39,
|
|
43
|
+
];
|
|
44
|
+
const QR_SYMBOLS = [ZBarSymbolType.ZBAR_QRCODE];
|
|
45
|
+
function symbolsForProfile(formatProfile) {
|
|
46
|
+
if (formatProfile === 'qr-only') {
|
|
47
|
+
return QR_SYMBOLS;
|
|
48
|
+
}
|
|
49
|
+
if (formatProfile === 'all') {
|
|
50
|
+
return [...RETAIL_SYMBOLS, ...QR_SYMBOLS];
|
|
51
|
+
}
|
|
52
|
+
return RETAIL_SYMBOLS;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Build a ZBar scanner enabled only for the active format profile.
|
|
56
|
+
* Dense X/Y scan + inverted retry for close / low-contrast retail labels.
|
|
57
|
+
*/
|
|
58
|
+
export async function createConfiguredZbarScanner(formatProfile = 'retail') {
|
|
59
|
+
if (!wasmUrlConfigured) {
|
|
60
|
+
throw new Error('ZBar WASM URL not configured — call setZbarWasmUrl(zbar.wasm?url) at app boot');
|
|
61
|
+
}
|
|
62
|
+
const scanner = await ZBarScanner.create();
|
|
63
|
+
// Disable everything, then enable the profile symbologies.
|
|
64
|
+
scanner.setConfig(ZBarSymbolType.ZBAR_NONE, ZBarConfigType.ZBAR_CFG_ENABLE, 0);
|
|
65
|
+
for (const sym of symbolsForProfile(formatProfile)) {
|
|
66
|
+
scanner.setConfig(sym, ZBarConfigType.ZBAR_CFG_ENABLE, 1);
|
|
67
|
+
}
|
|
68
|
+
// Denser scan grid (default is often too sparse for close phone shots).
|
|
69
|
+
scanner.setConfig(ZBarSymbolType.ZBAR_NONE, ZBarConfigType.ZBAR_CFG_X_DENSITY, 1);
|
|
70
|
+
scanner.setConfig(ZBarSymbolType.ZBAR_NONE, ZBarConfigType.ZBAR_CFG_Y_DENSITY, 1);
|
|
71
|
+
scanner.setConfig(ZBarSymbolType.ZBAR_NONE, ZBarConfigType.ZBAR_CFG_TEST_INVERTED, 1);
|
|
72
|
+
scanner.enableCache(false);
|
|
73
|
+
return scanner;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Multi-pass digital crops → ZBar `scanImageData`.
|
|
77
|
+
* Returns first non-empty payload or null.
|
|
78
|
+
*/
|
|
79
|
+
export async function decodeVideoFrameWithZbar(video, canvas, scanner, options) {
|
|
80
|
+
const width = video.videoWidth;
|
|
81
|
+
const height = video.videoHeight;
|
|
82
|
+
if (width < 2 || height < 2) {
|
|
83
|
+
return null;
|
|
84
|
+
}
|
|
85
|
+
const ctx = canvas.getContext('2d', { willReadFrequently: true });
|
|
86
|
+
if (ctx === null) {
|
|
87
|
+
return null;
|
|
88
|
+
}
|
|
89
|
+
ctx.imageSmoothingEnabled = false;
|
|
90
|
+
const passes = options?.quickOnly
|
|
91
|
+
? buildQuickScanPass(width, height)
|
|
92
|
+
: buildMaxSensitivityScanPasses(width, height);
|
|
93
|
+
for (const pass of passes) {
|
|
94
|
+
const outW = Math.max(2, Math.floor(pass.sw * pass.scale));
|
|
95
|
+
const outH = Math.max(2, Math.floor(pass.sh * pass.scale));
|
|
96
|
+
if (canvas.width !== outW) {
|
|
97
|
+
canvas.width = outW;
|
|
98
|
+
}
|
|
99
|
+
if (canvas.height !== outH) {
|
|
100
|
+
canvas.height = outH;
|
|
101
|
+
}
|
|
102
|
+
ctx.clearRect(0, 0, outW, outH);
|
|
103
|
+
ctx.drawImage(video, pass.sx, pass.sy, pass.sw, pass.sh, 0, 0, outW, outH);
|
|
104
|
+
let imageData;
|
|
105
|
+
try {
|
|
106
|
+
imageData = ctx.getImageData(0, 0, outW, outH);
|
|
107
|
+
}
|
|
108
|
+
catch {
|
|
109
|
+
continue;
|
|
110
|
+
}
|
|
111
|
+
try {
|
|
112
|
+
const symbols = await scanImageData(imageData, scanner);
|
|
113
|
+
for (const symbol of symbols) {
|
|
114
|
+
const text = symbol.decode().trim();
|
|
115
|
+
if (text.length > 0) {
|
|
116
|
+
return text;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
catch {
|
|
121
|
+
// keep trying next pass
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
return null;
|
|
125
|
+
}
|
|
126
|
+
//# sourceMappingURL=zbarWasmEngine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"zbarWasmEngine.js","sourceRoot":"","sources":["../../src/hooks/zbarWasmEngine.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -6,8 +6,8 @@
|
|
|
6
6
|
*
|
|
7
7
|
* Main barrel is Node-safe (no React UI). Runtime JS (not `.d.ts`):
|
|
8
8
|
* - `tsx watch` and `node dist/server.js` both resolve `node_modules/pi-kiosk-shared`
|
|
9
|
-
* after `ensureDist.mjs` overlays this `dist` (monorepo sibling `../shared` @ 2.2.
|
|
10
|
-
* consumers pin ^2.2.
|
|
9
|
+
* after `ensureDist.mjs` overlays this `dist` (monorepo sibling `../shared` @ 2.2.91;
|
|
10
|
+
* consumers pin ^2.2.91 matching shared/package.json — confirm registry at deploy time).
|
|
11
11
|
* React UI is `pi-kiosk-shared/ui`.
|
|
12
12
|
*
|
|
13
13
|
* Note: relative imports use explicit `.js` extensions so the compiled
|
package/dist/index.js
CHANGED
|
@@ -6,8 +6,8 @@
|
|
|
6
6
|
*
|
|
7
7
|
* Main barrel is Node-safe (no React UI). Runtime JS (not `.d.ts`):
|
|
8
8
|
* - `tsx watch` and `node dist/server.js` both resolve `node_modules/pi-kiosk-shared`
|
|
9
|
-
* after `ensureDist.mjs` overlays this `dist` (monorepo sibling `../shared` @ 2.2.
|
|
10
|
-
* consumers pin ^2.2.
|
|
9
|
+
* after `ensureDist.mjs` overlays this `dist` (monorepo sibling `../shared` @ 2.2.91;
|
|
10
|
+
* consumers pin ^2.2.91 matching shared/package.json — confirm registry at deploy time).
|
|
11
11
|
* React UI is `pi-kiosk-shared/ui`.
|
|
12
12
|
*
|
|
13
13
|
* Note: relative imports use explicit `.js` extensions so the compiled
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pi-kiosk-shared",
|
|
3
|
-
"version": "2.2.
|
|
3
|
+
"version": "2.2.96",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"private": false,
|
|
6
6
|
"description": "Shared types, API contracts, and error classes for Pi Kiosk system",
|
|
@@ -307,6 +307,7 @@
|
|
|
307
307
|
}
|
|
308
308
|
},
|
|
309
309
|
"dependencies": {
|
|
310
|
+
"@undecaf/zbar-wasm": "^0.11.0",
|
|
310
311
|
"tailwind-variants": "^0.3.0"
|
|
311
312
|
},
|
|
312
313
|
"scripts": {
|