pi-kiosk-shared 2.2.92 → 2.2.97
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 +38 -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 +248 -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/package.json +3 -2
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.96**). Same caveat as `up-backend/docs/DEPLOYMENT/DEPLOY_SEPARATE_REPOS.md`.
|
|
13
13
|
|
|
14
14
|
## Installation
|
|
15
15
|
|
|
@@ -74,7 +74,42 @@ Frontends import React modules from `/ui`. The **target** main barrel (local ove
|
|
|
74
74
|
|
|
75
75
|
## Local monorepo overlay
|
|
76
76
|
|
|
77
|
-
**Honesty (SSOT):** Live monorepo source is `shared/package.json` **2.2.
|
|
77
|
+
**Honesty (SSOT):** Live monorepo source is `shared/package.json` **2.2.96** (ZBar WASM primary). Frontend consumers in this repo pin **`file:../shared/pi-kiosk-shared-2.2.96.tgz`** in both `package.json` and lockfile roots (Strategy A — see [Consumer lock tarball bootstrap](#consumer-lock-tarball-bootstrap)). `up-backend` pins **`^2.2.96`** from npm registry. Sibling overlay via `ensureDist.mjs` still runs when `../shared` exists (preferred local dev). App-only / Railway clones cannot bare-`npm ci` with monorepo `file:` pins — see **Registry-only / Railway** below.
|
|
78
|
+
|
|
79
|
+
### Consumer lock tarball bootstrap (Strategy A)
|
|
80
|
+
|
|
81
|
+
Monorepo frontend `package.json` pins:
|
|
82
|
+
|
|
83
|
+
```json
|
|
84
|
+
"pi-kiosk-shared": "file:../shared/pi-kiosk-shared-2.2.96.tgz"
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
The tarball is **gitignored** (`*.tgz` in repo root `.gitignore`) and is **not** in VCS. A fresh clone has no pack file until you build it:
|
|
88
|
+
|
|
89
|
+
```bash
|
|
90
|
+
cd shared
|
|
91
|
+
npm run publish:local # build:clean + npm pack → shared/pi-kiosk-shared-<version>.tgz
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
**Strict `npm ci` in a consumer** (when you need lockfile-only install without relying on overlay alone):
|
|
95
|
+
|
|
96
|
+
1. Run `publish:local` in `shared` (step above).
|
|
97
|
+
2. **Stop local dev servers** on Windows if they lock `node_modules` binaries (common `npm ci` failure).
|
|
98
|
+
3. From a consumer (`admin-app`, `rpapp-customer`, `rpapp-pickup`, `rpapp-kiosk`):
|
|
99
|
+
|
|
100
|
+
```powershell
|
|
101
|
+
# Optional when husky prepare fails during install-only / ci proof runs:
|
|
102
|
+
$env:HUSKY='0'
|
|
103
|
+
npm ci
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
After repacking, refresh lock integrity if the tarball bytes changed: `npm install` in the consumer (updates `package-lock.json` `integrity` for the file tarball).
|
|
107
|
+
|
|
108
|
+
**CI without sibling `shared/` source:** pipeline must run `cd shared && npm run publish:local` before consumer `npm ci`, **or** use registry `^2.2.96` pins in `package.json`/lock for app-only clones (see Railway below).
|
|
109
|
+
|
|
110
|
+
**Local dev (preferred):** sibling `../shared` + `postinstall`/`prepare` overlay via `ensureDist.mjs` — tarball optional when the monorepo layout is complete and overlay runs on install.
|
|
111
|
+
|
|
112
|
+
**Registry-only / Railway app-only clones:** monorepo frontend `package.json` pins **`file:../shared/pi-kiosk-shared-2.2.96.tgz`**, so **bare `npm ci` fails** on an app-only checkout (no sibling tarball path). Registry install is remapped by **`prebuildShared.mjs` on `predev` / `prebuild` hooks only** — not during `postinstall`. App-only deploys must either: (a) run build via `npm run prebuild` / `npm run build` so `prebuildShared` rewrites the dependency to registry **`^2.2.96`**, or (b) commit app-only `package.json`/lock with registry pins. Confirm with `npm view pi-kiosk-shared version` at deploy time.
|
|
78
113
|
|
|
79
114
|
**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
115
|
|
|
@@ -111,7 +146,7 @@ npm run gate:main-barrel-node-safe
|
|
|
111
146
|
|
|
112
147
|
From `shared/`, prove the documented cold path:
|
|
113
148
|
|
|
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.
|
|
149
|
+
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.96**.
|
|
115
150
|
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
151
|
|
|
117
152
|
```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,CA2iB5F"}
|
|
@@ -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,40 @@ 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
|
+
setZxingAssistActive(false);
|
|
126
182
|
if (zxingControls !== null) {
|
|
127
183
|
try {
|
|
128
184
|
zxingControls.stop();
|
|
@@ -132,9 +188,26 @@ export function useBarcodeScanner(options) {
|
|
|
132
188
|
}
|
|
133
189
|
zxingControls = null;
|
|
134
190
|
}
|
|
135
|
-
if (
|
|
136
|
-
cancelAnimationFrame(
|
|
137
|
-
|
|
191
|
+
if (zbarFrameHandle !== null) {
|
|
192
|
+
cancelAnimationFrame(zbarFrameHandle);
|
|
193
|
+
zbarFrameHandle = null;
|
|
194
|
+
}
|
|
195
|
+
if (zxingMultiPassFrameHandle !== null) {
|
|
196
|
+
cancelAnimationFrame(zxingMultiPassFrameHandle);
|
|
197
|
+
zxingMultiPassFrameHandle = null;
|
|
198
|
+
}
|
|
199
|
+
if (nativeFrameHandle !== null) {
|
|
200
|
+
cancelAnimationFrame(nativeFrameHandle);
|
|
201
|
+
nativeFrameHandle = null;
|
|
202
|
+
}
|
|
203
|
+
if (zbarScanner !== null) {
|
|
204
|
+
try {
|
|
205
|
+
zbarScanner.destroy();
|
|
206
|
+
}
|
|
207
|
+
catch {
|
|
208
|
+
// ignore teardown errors
|
|
209
|
+
}
|
|
210
|
+
zbarScanner = null;
|
|
138
211
|
}
|
|
139
212
|
if (stream !== null) {
|
|
140
213
|
for (const track of stream.getTracks()) {
|
|
@@ -156,6 +229,7 @@ export function useBarcodeScanner(options) {
|
|
|
156
229
|
void (async () => {
|
|
157
230
|
setStatus('starting');
|
|
158
231
|
setErrorMessage(null);
|
|
232
|
+
setZxingAssistActive(false);
|
|
159
233
|
if (isInsecureCameraContext()) {
|
|
160
234
|
if (!cancelled) {
|
|
161
235
|
setStatus('error');
|
|
@@ -163,7 +237,6 @@ export function useBarcodeScanner(options) {
|
|
|
163
237
|
}
|
|
164
238
|
return;
|
|
165
239
|
}
|
|
166
|
-
// Missing MediaDevices (secure context prep for G3): prefer noCamera only.
|
|
167
240
|
if (typeof navigator === 'undefined' || navigator.mediaDevices === undefined) {
|
|
168
241
|
if (!cancelled) {
|
|
169
242
|
setStatus('error');
|
|
@@ -179,8 +252,6 @@ export function useBarcodeScanner(options) {
|
|
|
179
252
|
return;
|
|
180
253
|
}
|
|
181
254
|
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
255
|
if (isInsecureCameraContext()) {
|
|
185
256
|
setStatus('error');
|
|
186
257
|
setErrorMessage(messagesRef.current.insecureContext ?? messagesRef.current.noCamera);
|
|
@@ -205,7 +276,6 @@ export function useBarcodeScanner(options) {
|
|
|
205
276
|
cleanup();
|
|
206
277
|
return;
|
|
207
278
|
}
|
|
208
|
-
// G5: cancel/unmount after GUM — release before enhance/play.
|
|
209
279
|
if (cancelled) {
|
|
210
280
|
cleanup();
|
|
211
281
|
return;
|
|
@@ -221,7 +291,6 @@ export function useBarcodeScanner(options) {
|
|
|
221
291
|
}
|
|
222
292
|
const video = videoRef.current;
|
|
223
293
|
if (video === null) {
|
|
224
|
-
// G4: successful GUM but video element gone — surface error, release tracks.
|
|
225
294
|
cleanup();
|
|
226
295
|
if (!cancelled) {
|
|
227
296
|
setStatus('error');
|
|
@@ -242,7 +311,97 @@ export function useBarcodeScanner(options) {
|
|
|
242
311
|
cleanup();
|
|
243
312
|
return;
|
|
244
313
|
}
|
|
245
|
-
const
|
|
314
|
+
const startNativeParallelAssist = () => {
|
|
315
|
+
if (typeof window === 'undefined' || window.BarcodeDetector === undefined) {
|
|
316
|
+
return;
|
|
317
|
+
}
|
|
318
|
+
const detector = new window.BarcodeDetector({
|
|
319
|
+
formats: [...formatConfig.nativeFormats],
|
|
320
|
+
});
|
|
321
|
+
const tick = async () => {
|
|
322
|
+
if (cancelled || gotDecode) {
|
|
323
|
+
return;
|
|
324
|
+
}
|
|
325
|
+
if (video.readyState >= 2) {
|
|
326
|
+
try {
|
|
327
|
+
const results = await detector.detect(video);
|
|
328
|
+
const first = results[0];
|
|
329
|
+
if (first !== undefined && first.rawValue.trim().length > 0) {
|
|
330
|
+
emitDecode(first.rawValue.trim());
|
|
331
|
+
return;
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
catch {
|
|
335
|
+
// keep scanning
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
if (!cancelled && !gotDecode) {
|
|
339
|
+
nativeFrameHandle = requestAnimationFrame(() => {
|
|
340
|
+
void tick();
|
|
341
|
+
});
|
|
342
|
+
}
|
|
343
|
+
};
|
|
344
|
+
nativeFrameHandle = requestAnimationFrame(() => {
|
|
345
|
+
void tick();
|
|
346
|
+
});
|
|
347
|
+
};
|
|
348
|
+
const startZbarLoop = async () => {
|
|
349
|
+
if (decodeCanvas === null) {
|
|
350
|
+
return false;
|
|
351
|
+
}
|
|
352
|
+
let scanner;
|
|
353
|
+
try {
|
|
354
|
+
scanner = await createConfiguredZbarScanner(formatProfile);
|
|
355
|
+
}
|
|
356
|
+
catch {
|
|
357
|
+
return false;
|
|
358
|
+
}
|
|
359
|
+
if (cancelled) {
|
|
360
|
+
try {
|
|
361
|
+
scanner.destroy();
|
|
362
|
+
}
|
|
363
|
+
catch {
|
|
364
|
+
// ignore
|
|
365
|
+
}
|
|
366
|
+
return false;
|
|
367
|
+
}
|
|
368
|
+
zbarScanner = scanner;
|
|
369
|
+
let lastAttemptMs = 0;
|
|
370
|
+
let busy = false;
|
|
371
|
+
let zbarTickCount = 0;
|
|
372
|
+
const tick = () => {
|
|
373
|
+
if (cancelled || gotDecode) {
|
|
374
|
+
return;
|
|
375
|
+
}
|
|
376
|
+
const now = performance.now();
|
|
377
|
+
if (!busy &&
|
|
378
|
+
video.readyState >= 2 &&
|
|
379
|
+
now - lastAttemptMs >= DECODE_MIN_FRAME_INTERVAL_MS) {
|
|
380
|
+
lastAttemptMs = now;
|
|
381
|
+
busy = true;
|
|
382
|
+
zbarTickCount += 1;
|
|
383
|
+
const quickOnly = zbarTickCount % 3 !== 0;
|
|
384
|
+
void decodeVideoFrameWithZbar(video, decodeCanvas, scanner, { quickOnly })
|
|
385
|
+
.then((text) => {
|
|
386
|
+
if (!cancelled && text !== null) {
|
|
387
|
+
emitDecode(text);
|
|
388
|
+
}
|
|
389
|
+
})
|
|
390
|
+
.catch(() => {
|
|
391
|
+
// keep scanning
|
|
392
|
+
})
|
|
393
|
+
.finally(() => {
|
|
394
|
+
busy = false;
|
|
395
|
+
});
|
|
396
|
+
}
|
|
397
|
+
if (!cancelled && !gotDecode) {
|
|
398
|
+
zbarFrameHandle = requestAnimationFrame(tick);
|
|
399
|
+
}
|
|
400
|
+
};
|
|
401
|
+
zbarFrameHandle = requestAnimationFrame(tick);
|
|
402
|
+
return true;
|
|
403
|
+
};
|
|
404
|
+
const startZxingStreamAssist = async () => {
|
|
246
405
|
const hints = new Map();
|
|
247
406
|
hints.set(DecodeHintType.POSSIBLE_FORMATS, [...formatConfig.zxingFormats]);
|
|
248
407
|
hints.set(DecodeHintType.TRY_HARDER, true);
|
|
@@ -254,9 +413,18 @@ export function useBarcodeScanner(options) {
|
|
|
254
413
|
return;
|
|
255
414
|
}
|
|
256
415
|
if (result !== undefined && result !== null) {
|
|
257
|
-
|
|
416
|
+
emitDecode(result.getText());
|
|
258
417
|
}
|
|
259
418
|
});
|
|
419
|
+
if (cancelled) {
|
|
420
|
+
try {
|
|
421
|
+
zxingControls.stop();
|
|
422
|
+
}
|
|
423
|
+
catch {
|
|
424
|
+
// ignore teardown errors
|
|
425
|
+
}
|
|
426
|
+
zxingControls = null;
|
|
427
|
+
}
|
|
260
428
|
return true;
|
|
261
429
|
}
|
|
262
430
|
catch {
|
|
@@ -272,25 +440,24 @@ export function useBarcodeScanner(options) {
|
|
|
272
440
|
reader = createSensitiveZxingReader(formatConfig.zxingFormats);
|
|
273
441
|
}
|
|
274
442
|
catch {
|
|
275
|
-
// Reader/bootstrap failure — do not pretend multi-pass started.
|
|
276
443
|
return false;
|
|
277
444
|
}
|
|
278
445
|
let lastAttemptMs = 0;
|
|
279
446
|
let busy = false;
|
|
280
447
|
const tick = () => {
|
|
281
|
-
if (cancelled) {
|
|
448
|
+
if (cancelled || gotDecode) {
|
|
282
449
|
return;
|
|
283
450
|
}
|
|
284
451
|
const now = performance.now();
|
|
285
452
|
if (!busy &&
|
|
286
453
|
video.readyState >= 2 &&
|
|
287
|
-
now - lastAttemptMs >=
|
|
454
|
+
now - lastAttemptMs >= DECODE_MIN_FRAME_INTERVAL_MS) {
|
|
288
455
|
lastAttemptMs = now;
|
|
289
456
|
busy = true;
|
|
290
457
|
try {
|
|
291
458
|
const text = decodeVideoFrameWithZxingJs(video, decodeCanvas, reader);
|
|
292
459
|
if (!cancelled && text !== null) {
|
|
293
|
-
|
|
460
|
+
emitDecode(text);
|
|
294
461
|
}
|
|
295
462
|
}
|
|
296
463
|
catch {
|
|
@@ -300,43 +467,74 @@ export function useBarcodeScanner(options) {
|
|
|
300
467
|
busy = false;
|
|
301
468
|
}
|
|
302
469
|
}
|
|
303
|
-
if (!cancelled) {
|
|
304
|
-
|
|
470
|
+
if (!cancelled && !gotDecode) {
|
|
471
|
+
zxingMultiPassFrameHandle = requestAnimationFrame(tick);
|
|
305
472
|
}
|
|
306
473
|
};
|
|
307
|
-
|
|
474
|
+
zxingMultiPassFrameHandle = requestAnimationFrame(tick);
|
|
308
475
|
return true;
|
|
309
476
|
};
|
|
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();
|
|
477
|
+
const startZxingParallelAssist = () => {
|
|
478
|
+
if (zxingAssistStarted || cancelled || gotDecode) {
|
|
479
|
+
return;
|
|
480
|
+
}
|
|
481
|
+
zxingAssistStarted = true;
|
|
322
482
|
if (!cancelled) {
|
|
323
|
-
|
|
324
|
-
setStatus('running');
|
|
483
|
+
setZxingAssistActive(true);
|
|
325
484
|
}
|
|
485
|
+
void (async () => {
|
|
486
|
+
const streamOk = await startZxingStreamAssist();
|
|
487
|
+
if (cancelled || gotDecode) {
|
|
488
|
+
return;
|
|
489
|
+
}
|
|
490
|
+
if (!streamOk) {
|
|
491
|
+
startZxingMultiPassLoop();
|
|
492
|
+
}
|
|
493
|
+
})();
|
|
494
|
+
};
|
|
495
|
+
const scheduleZbarDistanceZoom = () => {
|
|
496
|
+
const trackForAssist = primaryTrack;
|
|
497
|
+
if (trackForAssist === undefined) {
|
|
498
|
+
return;
|
|
499
|
+
}
|
|
500
|
+
distanceZoomTimer = setTimeout(() => {
|
|
501
|
+
distanceZoomTimer = null;
|
|
502
|
+
if (cancelled || gotDecode) {
|
|
503
|
+
return;
|
|
504
|
+
}
|
|
505
|
+
void applyScannerDistanceZoom(trackForAssist);
|
|
506
|
+
}, SCANNER_DISTANCE_ASSIST_DELAY_MS);
|
|
507
|
+
};
|
|
508
|
+
const scheduleZxingParallelAssist = () => {
|
|
509
|
+
zxingAssistTimer = setTimeout(() => {
|
|
510
|
+
zxingAssistTimer = null;
|
|
511
|
+
if (cancelled || gotDecode) {
|
|
512
|
+
return;
|
|
513
|
+
}
|
|
514
|
+
startZxingParallelAssist();
|
|
515
|
+
}, SCANNER_ZBAR_ZXING_ASSIST_DELAY_MS);
|
|
516
|
+
};
|
|
517
|
+
// G3 — ZBar required; no silent @zxing boot fallback.
|
|
518
|
+
if (!isZbarWasmUrlConfigured()) {
|
|
519
|
+
failZbarBootstrap();
|
|
326
520
|
return;
|
|
327
521
|
}
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
522
|
+
const zbarOk = await startZbarLoop();
|
|
523
|
+
if (cancelled) {
|
|
524
|
+
cleanup();
|
|
525
|
+
return;
|
|
526
|
+
}
|
|
527
|
+
if (!zbarOk) {
|
|
528
|
+
failZbarBootstrap();
|
|
333
529
|
return;
|
|
334
530
|
}
|
|
531
|
+
startNativeParallelAssist();
|
|
532
|
+
scheduleZbarDistanceZoom();
|
|
533
|
+
scheduleZxingParallelAssist();
|
|
335
534
|
if (!cancelled) {
|
|
336
|
-
|
|
337
|
-
|
|
535
|
+
setEngine('zbar-wasm');
|
|
536
|
+
setStatus('running');
|
|
338
537
|
}
|
|
339
|
-
cleanup();
|
|
340
538
|
})();
|
|
341
539
|
return () => {
|
|
342
540
|
cancelled = true;
|
|
@@ -344,6 +542,6 @@ export function useBarcodeScanner(options) {
|
|
|
344
542
|
stopRef.current = null;
|
|
345
543
|
};
|
|
346
544
|
}, [scanningEnabled, formatProfile, stop, videoRef]);
|
|
347
|
-
return { status, engine, errorMessage };
|
|
545
|
+
return { status, engine, zxingAssistActive, errorMessage };
|
|
348
546
|
}
|
|
349
547
|
//# 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":"AAAA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjE,OAAO,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,yBAAyB,CAAC;AAEjC,OAAO,EACL,0BAA0B,GAE3B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,wBAAwB,EACxB,6BAA6B,EAC7B,sBAAsB,GACvB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACL,0BAA0B,EAC1B,2BAA2B,GAC5B,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,2BAA2B,EAC3B,wBAAwB,EACxB,uBAAuB,GACxB,MAAM,qBAAqB,CAAC;AAI7B;;GAEG;AACH,MAAM,CAAC,MAAM,gCAAgC,GAAG,IAAI,CAAC;AAErD;;;GAGG;AACH,MAAM,CAAC,MAAM,kCAAkC,GAAG,gCAAgC,CAAC;AAEnF;;;GAGG;AACH,MAAM,CAAC,MAAM,8BAA8B,GAAG,IAAI,CAAC;AAwBnD,SAAS,uBAAuB;IAC9B,OAAO,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,eAAe,KAAK,KAAK,CAAC;AAC3E,CAAC;AAED,SAAS,uBAAuB,CAAC,GAAY;IAC3C,OAAO,CACL,GAAG,YAAY,YAAY;QAC3B,CAAC,GAAG,CAAC,IAAI,KAAK,iBAAiB,IAAI,GAAG,CAAC,IAAI,KAAK,uBAAuB,CAAC,CACzE,CAAC;AACJ,CAAC;AAED,SAAS,qBAAqB,CAAC,GAAY;IACzC,OAAO,GAAG,YAAY,YAAY,IAAI,GAAG,CAAC,IAAI,KAAK,eAAe,CAAC;AACrE,CAAC;AAED,SAAS,kBAAkB,CAAC,GAAY;IACtC,OAAO,CACL,GAAG,YAAY,YAAY;QAC3B,CAAC,GAAG,CAAC,IAAI,KAAK,kBAAkB,IAAI,GAAG,CAAC,IAAI,KAAK,YAAY,CAAC,CAC/D,CAAC;AACJ,CAAC;AAmBD,8DAA8D;AAC9D,MAAM,4BAA4B,GAAG,EAAE,CAAC;AAExC;;;;;;;GAOG;AACH,MAAM,UAAU,iBAAiB,CAAC,OAAiC;IACjE,MAAM,EACJ,OAAO,EACP,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,aAAa,GAAG,QAAQ,EACxB,gBAAgB,GACjB,GAAG,OAAO,CAAC;IAEZ,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAgB,MAAM,CAAC,CAAC;IAC5D,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAuB,IAAI,CAAC,CAAC;IACjE,MAAM,CAAC,iBAAiB,EAAE,oBAAoB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAClE,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAC;IACtE,MAAM,CAAC,mBAAmB,EAAE,sBAAsB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAEtE,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;IACrC,SAAS,CAAC,GAAG,EAAE;QACb,WAAW,CAAC,OAAO,GAAG,QAAQ,CAAC;IACjC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEf,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;IACrC,SAAS,CAAC,GAAG,EAAE;QACb,WAAW,CAAC,OAAO,GAAG,QAAQ,CAAC;IACjC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEf,MAAM,mBAAmB,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC;IACrD,SAAS,CAAC,GAAG,EAAE;QACb,mBAAmB,CAAC,OAAO,GAAG,gBAAgB,CAAC;IACjD,CAAC,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAEvB,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;IACnC,UAAU,CAAC,OAAO,GAAG,OAAO,CAAC;IAE7B,MAAM,OAAO,GAAG,MAAM,CAAsB,IAAI,CAAC,CAAC;IAElD,IAAI,CAAC,OAAO,IAAI,mBAAmB,EAAE,CAAC;QACpC,sBAAsB,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC;IAED,MAAM,eAAe,GAAG,OAAO,IAAI,CAAC,mBAAmB,CAAC;IAExD,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,QAAQ,CAAC,eAAe,CAAC,CAAC;IACtE,IAAI,cAAc,KAAK,eAAe,EAAE,CAAC;QACvC,iBAAiB,CAAC,eAAe,CAAC,CAAC;QACnC,IAAI,CAAC,eAAe,EAAE,CAAC;YACrB,SAAS,CAAC,MAAM,CAAC,CAAC;YAClB,SAAS,CAAC,IAAI,CAAC,CAAC;YAChB,oBAAoB,CAAC,KAAK,CAAC,CAAC;YAC5B,eAAe,CAAC,IAAI,CAAC,CAAC;QACxB,CAAC;IACH,CAAC;IAED,MAAM,IAAI,GAAG,WAAW,CAAC,GAAS,EAAE;QAClC,IAAI,OAAO,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;YAC7B,OAAO,CAAC,OAAO,EAAE,CAAC;YAClB,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;QACzB,CAAC;IACH,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE,CAAC;YACpC,OAAO;QACT,CAAC;QAED,MAAM,oBAAoB,GAAG,GAAS,EAAE;YACtC,IAAI,EAAE,CAAC;YACP,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;gBACxB,OAAO;YACT,CAAC;YACD,sBAAsB,CAAC,IAAI,CAAC,CAAC;YAC7B,SAAS,CAAC,MAAM,CAAC,CAAC;YAClB,SAAS,CAAC,IAAI,CAAC,CAAC;YAChB,oBAAoB,CAAC,KAAK,CAAC,CAAC;YAC5B,eAAe,CAAC,IAAI,CAAC,CAAC;YACtB,mBAAmB,CAAC,OAAO,EAAE,EAAE,CAAC;QAClC,CAAC,CAAC;QAEF,MAAM,kBAAkB,GAAG,GAAS,EAAE;YACpC,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;gBACpB,oBAAoB,EAAE,CAAC;YACzB,CAAC;QACH,CAAC,CAAC;QAEF,MAAM,UAAU,GAAG,GAAS,EAAE;YAC5B,oBAAoB,EAAE,CAAC;QACzB,CAAC,CAAC;QAEF,QAAQ,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,kBAAkB,CAAC,CAAC;QAClE,MAAM,CAAC,gBAAgB,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;QAChD,OAAO,GAAG,EAAE;YACV,QAAQ,CAAC,mBAAmB,CAAC,kBAAkB,EAAE,kBAAkB,CAAC,CAAC;YACrE,MAAM,CAAC,mBAAmB,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;QACrD,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IAEX,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,eAAe,EAAE,CAAC;YACrB,IAAI,EAAE,CAAC;YACP,OAAO;QACT,CAAC;QAED,IAAI,SAAS,GAAG,KAAK,CAAC;QACtB,IAAI,MAAM,GAAuB,IAAI,CAAC;QACtC,IAAI,aAAa,GAAgC,IAAI,CAAC;QACtD,IAAI,eAAe,GAAkB,IAAI,CAAC;QAC1C,IAAI,yBAAyB,GAAkB,IAAI,CAAC;QACpD,IAAI,iBAAiB,GAAkB,IAAI,CAAC;QAC5C,IAAI,iBAAiB,GAAyC,IAAI,CAAC;QACnE,IAAI,gBAAgB,GAAyC,IAAI,CAAC;QAClE,IAAI,SAAS,GAAG,KAAK,CAAC;QACtB,IAAI,kBAAkB,GAAG,KAAK,CAAC;QAC/B,IAAI,WAAW,GACb,IAAI,CAAC;QACP,MAAM,YAAY,GAAG,0BAA0B,CAAC,aAAa,CAAC,CAAC;QAC/D,MAAM,YAAY,GAAG,CAAC,GAA6B,EAAE;YACnD,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE,CAAC;gBACpC,OAAO,IAAI,CAAC;YACd,CAAC;YACD,IAAI,CAAC;gBACH,OAAO,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;YAC1C,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC,CAAC,EAAE,CAAC;QAEL,MAAM,yBAAyB,GAAG,GAAW,EAAE,CAC7C,WAAW,CAAC,OAAO,CAAC,mBAAmB,IAAI,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC;QAEvE,MAAM,iBAAiB,GAAG,GAAS,EAAE;YACnC,IAAI,gBAAgB,KAAK,IAAI,EAAE,CAAC;gBAC9B,YAAY,CAAC,gBAAgB,CAAC,CAAC;gBAC/B,gBAAgB,GAAG,IAAI,CAAC;YAC1B,CAAC;YACD,IAAI,iBAAiB,KAAK,IAAI,EAAE,CAAC;gBAC/B,YAAY,CAAC,iBAAiB,CAAC,CAAC;gBAChC,iBAAiB,GAAG,IAAI,CAAC;YAC3B,CAAC;QACH,CAAC,CAAC;QAEF,MAAM,UAAU,GAAG,CAAC,IAAY,EAAQ,EAAE;YACxC,IAAI,SAAS,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACnC,OAAO;YACT,CAAC;YACD,SAAS,GAAG,IAAI,CAAC;YACjB,iBAAiB,EAAE,CAAC;YACpB,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,oBAAoB,CAAC,KAAK,CAAC,CAAC;YAC9B,CAAC;YACD,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC5B,CAAC,CAAC;QAEF,MAAM,iBAAiB,GAAG,GAAS,EAAE;YACnC,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,SAAS,CAAC,OAAO,CAAC,CAAC;gBACnB,SAAS,CAAC,IAAI,CAAC,CAAC;gBAChB,oBAAoB,CAAC,KAAK,CAAC,CAAC;gBAC5B,eAAe,CAAC,yBAAyB,EAAE,CAAC,CAAC;YAC/C,CAAC;YACD,OAAO,EAAE,CAAC;QACZ,CAAC,CAAC;QAEF,MAAM,OAAO,GAAG,GAAS,EAAE;YACzB,iBAAiB,EAAE,CAAC;YACpB,oBAAoB,CAAC,KAAK,CAAC,CAAC;YAC5B,IAAI,aAAa,KAAK,IAAI,EAAE,CAAC;gBAC3B,IAAI,CAAC;oBACH,aAAa,CAAC,IAAI,EAAE,CAAC;gBACvB,CAAC;gBAAC,MAAM,CAAC;oBACP,yBAAyB;gBAC3B,CAAC;gBACD,aAAa,GAAG,IAAI,CAAC;YACvB,CAAC;YACD,IAAI,eAAe,KAAK,IAAI,EAAE,CAAC;gBAC7B,oBAAoB,CAAC,eAAe,CAAC,CAAC;gBACtC,eAAe,GAAG,IAAI,CAAC;YACzB,CAAC;YACD,IAAI,yBAAyB,KAAK,IAAI,EAAE,CAAC;gBACvC,oBAAoB,CAAC,yBAAyB,CAAC,CAAC;gBAChD,yBAAyB,GAAG,IAAI,CAAC;YACnC,CAAC;YACD,IAAI,iBAAiB,KAAK,IAAI,EAAE,CAAC;gBAC/B,oBAAoB,CAAC,iBAAiB,CAAC,CAAC;gBACxC,iBAAiB,GAAG,IAAI,CAAC;YAC3B,CAAC;YACD,IAAI,WAAW,KAAK,IAAI,EAAE,CAAC;gBACzB,IAAI,CAAC;oBACH,WAAW,CAAC,OAAO,EAAE,CAAC;gBACxB,CAAC;gBAAC,MAAM,CAAC;oBACP,yBAAyB;gBAC3B,CAAC;gBACD,WAAW,GAAG,IAAI,CAAC;YACrB,CAAC;YACD,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;gBACpB,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,SAAS,EAAE,EAAE,CAAC;oBACvC,IAAI,CAAC;wBACH,KAAK,CAAC,IAAI,EAAE,CAAC;oBACf,CAAC;oBAAC,MAAM,CAAC;wBACP,yBAAyB;oBAC3B,CAAC;gBACH,CAAC;gBACD,MAAM,GAAG,IAAI,CAAC;YAChB,CAAC;YACD,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC;YAC/B,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;gBACnB,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC;YACzB,CAAC;QACH,CAAC,CAAC;QACF,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC;QAE1B,KAAK,CAAC,KAAK,IAAmB,EAAE;YAC9B,SAAS,CAAC,UAAU,CAAC,CAAC;YACtB,eAAe,CAAC,IAAI,CAAC,CAAC;YACtB,oBAAoB,CAAC,KAAK,CAAC,CAAC;YAE5B,IAAI,uBAAuB,EAAE,EAAE,CAAC;gBAC9B,IAAI,CAAC,SAAS,EAAE,CAAC;oBACf,SAAS,CAAC,OAAO,CAAC,CAAC;oBACnB,eAAe,CACb,WAAW,CAAC,OAAO,CAAC,eAAe,IAAI,WAAW,CAAC,OAAO,CAAC,QAAQ,CACpE,CAAC;gBACJ,CAAC;gBACD,OAAO;YACT,CAAC;YAED,IAAI,OAAO,SAAS,KAAK,WAAW,IAAI,SAAS,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;gBAC7E,IAAI,CAAC,SAAS,EAAE,CAAC;oBACf,SAAS,CAAC,OAAO,CAAC,CAAC;oBACnB,eAAe,CAAC,WAAW,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;gBAChD,CAAC;gBACD,OAAO;YACT,CAAC;YAED,IAAI,CAAC;gBACH,MAAM,GAAG,MAAM,sBAAsB,CACnC,SAAS,CAAC,YAAY,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,CACjE,CAAC;YACJ,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,SAAS,EAAE,CAAC;oBACd,OAAO;gBACT,CAAC;gBACD,IAAI,uBAAuB,CAAC,GAAG,CAAC,EAAE,CAAC;oBACjC,IAAI,uBAAuB,EAAE,EAAE,CAAC;wBAC9B,SAAS,CAAC,OAAO,CAAC,CAAC;wBACnB,eAAe,CACb,WAAW,CAAC,OAAO,CAAC,eAAe,IAAI,WAAW,CAAC,OAAO,CAAC,QAAQ,CACpE,CAAC;oBACJ,CAAC;yBAAM,CAAC;wBACN,SAAS,CAAC,QAAQ,CAAC,CAAC;wBACpB,eAAe,CAAC,WAAW,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;oBACxD,CAAC;gBACH,CAAC;qBAAM,IAAI,qBAAqB,CAAC,GAAG,CAAC,EAAE,CAAC;oBACtC,SAAS,CAAC,OAAO,CAAC,CAAC;oBACnB,eAAe,CACb,WAAW,CAAC,OAAO,CAAC,aAAa,IAAI,WAAW,CAAC,OAAO,CAAC,KAAK,CAC/D,CAAC;gBACJ,CAAC;qBAAM,IAAI,kBAAkB,CAAC,GAAG,CAAC,EAAE,CAAC;oBACnC,SAAS,CAAC,OAAO,CAAC,CAAC;oBACnB,eAAe,CACb,WAAW,CAAC,OAAO,CAAC,WAAW,IAAI,WAAW,CAAC,OAAO,CAAC,KAAK,CAC7D,CAAC;gBACJ,CAAC;qBAAM,CAAC;oBACN,SAAS,CAAC,OAAO,CAAC,CAAC;oBACnB,eAAe,CAAC,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;gBAC7C,CAAC;gBACD,OAAO,EAAE,CAAC;gBACV,OAAO;YACT,CAAC;YAED,IAAI,SAAS,EAAE,CAAC;gBACd,OAAO,EAAE,CAAC;gBACV,OAAO;YACT,CAAC;YAED,MAAM,YAAY,GAAG,MAAM,CAAC;YAC5B,MAAM,CAAC,YAAY,CAAC,GAAG,YAAY,CAAC,cAAc,EAAE,CAAC;YACrD,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;gBAC/B,MAAM,6BAA6B,CAAC,YAAY,CAAC,CAAC;YACpD,CAAC;YAED,IAAI,SAAS,EAAE,CAAC;gBACd,OAAO,EAAE,CAAC;gBACV,OAAO;YACT,CAAC;YAED,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC;YAC/B,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;gBACnB,OAAO,EAAE,CAAC;gBACV,IAAI,CAAC,SAAS,EAAE,CAAC;oBACf,SAAS,CAAC,OAAO,CAAC,CAAC;oBACnB,eAAe,CAAC,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;gBAC7C,CAAC;gBACD,OAAO;YACT,CAAC;YACD,KAAK,CAAC,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;YAC1C,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC;YACnB,KAAK,CAAC,SAAS,GAAG,YAAY,CAAC;YAC/B,IAAI,CAAC;gBACH,MAAM,KAAK,CAAC,IAAI,EAAE,CAAC;YACrB,CAAC;YAAC,MAAM,CAAC;gBACP,4CAA4C;YAC9C,CAAC;YAED,IAAI,SAAS,EAAE,CAAC;gBACd,OAAO,EAAE,CAAC;gBACV,OAAO;YACT,CAAC;YAED,MAAM,yBAAyB,GAAG,GAAS,EAAE;gBAC3C,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,eAAe,KAAK,SAAS,EAAE,CAAC;oBAC1E,OAAO;gBACT,CAAC;gBACD,MAAM,QAAQ,GAAG,IAAI,MAAM,CAAC,eAAe,CAAC;oBAC1C,OAAO,EAAE,CAAC,GAAG,YAAY,CAAC,aAAa,CAAC;iBACzC,CAAC,CAAC;gBACH,MAAM,IAAI,GAAG,KAAK,IAAmB,EAAE;oBACrC,IAAI,SAAS,IAAI,SAAS,EAAE,CAAC;wBAC3B,OAAO;oBACT,CAAC;oBACD,IAAI,KAAK,CAAC,UAAU,IAAI,CAAC,EAAE,CAAC;wBAC1B,IAAI,CAAC;4BACH,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;4BAC7C,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;4BACzB,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gCAC5D,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;gCAClC,OAAO;4BACT,CAAC;wBACH,CAAC;wBAAC,MAAM,CAAC;4BACP,gBAAgB;wBAClB,CAAC;oBACH,CAAC;oBACD,IAAI,CAAC,SAAS,IAAI,CAAC,SAAS,EAAE,CAAC;wBAC7B,iBAAiB,GAAG,qBAAqB,CAAC,GAAG,EAAE;4BAC7C,KAAK,IAAI,EAAE,CAAC;wBACd,CAAC,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC,CAAC;gBACF,iBAAiB,GAAG,qBAAqB,CAAC,GAAG,EAAE;oBAC7C,KAAK,IAAI,EAAE,CAAC;gBACd,CAAC,CAAC,CAAC;YACL,CAAC,CAAC;YAEF,MAAM,aAAa,GAAG,KAAK,IAAsB,EAAE;gBACjD,IAAI,YAAY,KAAK,IAAI,EAAE,CAAC;oBAC1B,OAAO,KAAK,CAAC;gBACf,CAAC;gBACD,IAAI,OAAgE,CAAC;gBACrE,IAAI,CAAC;oBACH,OAAO,GAAG,MAAM,2BAA2B,CAAC,aAAa,CAAC,CAAC;gBAC7D,CAAC;gBAAC,MAAM,CAAC;oBACP,OAAO,KAAK,CAAC;gBACf,CAAC;gBACD,IAAI,SAAS,EAAE,CAAC;oBACd,IAAI,CAAC;wBACH,OAAO,CAAC,OAAO,EAAE,CAAC;oBACpB,CAAC;oBAAC,MAAM,CAAC;wBACP,SAAS;oBACX,CAAC;oBACD,OAAO,KAAK,CAAC;gBACf,CAAC;gBACD,WAAW,GAAG,OAAO,CAAC;gBACtB,IAAI,aAAa,GAAG,CAAC,CAAC;gBACtB,IAAI,IAAI,GAAG,KAAK,CAAC;gBACjB,IAAI,aAAa,GAAG,CAAC,CAAC;gBAEtB,MAAM,IAAI,GAAG,GAAS,EAAE;oBACtB,IAAI,SAAS,IAAI,SAAS,EAAE,CAAC;wBAC3B,OAAO;oBACT,CAAC;oBACD,MAAM,GAAG,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;oBAC9B,IACE,CAAC,IAAI;wBACL,KAAK,CAAC,UAAU,IAAI,CAAC;wBACrB,GAAG,GAAG,aAAa,IAAI,4BAA4B,EACnD,CAAC;wBACD,aAAa,GAAG,GAAG,CAAC;wBACpB,IAAI,GAAG,IAAI,CAAC;wBACZ,aAAa,IAAI,CAAC,CAAC;wBACnB,MAAM,SAAS,GAAG,aAAa,GAAG,CAAC,KAAK,CAAC,CAAC;wBAC1C,KAAK,wBAAwB,CAAC,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,EAAE,SAAS,EAAE,CAAC;6BACvE,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE;4BACb,IAAI,CAAC,SAAS,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;gCAChC,UAAU,CAAC,IAAI,CAAC,CAAC;4BACnB,CAAC;wBACH,CAAC,CAAC;6BACD,KAAK,CAAC,GAAG,EAAE;4BACV,gBAAgB;wBAClB,CAAC,CAAC;6BACD,OAAO,CAAC,GAAG,EAAE;4BACZ,IAAI,GAAG,KAAK,CAAC;wBACf,CAAC,CAAC,CAAC;oBACP,CAAC;oBACD,IAAI,CAAC,SAAS,IAAI,CAAC,SAAS,EAAE,CAAC;wBAC7B,eAAe,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAC;oBAChD,CAAC;gBACH,CAAC,CAAC;gBAEF,eAAe,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAC;gBAC9C,OAAO,IAAI,CAAC;YACd,CAAC,CAAC;YAEF,MAAM,sBAAsB,GAAG,KAAK,IAAsB,EAAE;gBAC1D,MAAM,KAAK,GAAG,IAAI,GAAG,EAAE,CAAC;gBACxB,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,gBAAgB,EAAE,CAAC,GAAG,YAAY,CAAC,YAAY,CAAC,CAAC,CAAC;gBAC3E,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;gBAC3C,MAAM,MAAM,GAAG,IAAI,wBAAwB,CAAC,KAAK,CAAC,CAAC;gBACnD,IAAI,CAAC;oBACH,aAAa,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAC3C,YAAY,EACZ,KAAK,EACL,CAAC,MAAM,EAAE,IAAI,EAAE,QAA8B,EAAE,EAAE;wBAC/C,IAAI,SAAS,EAAE,CAAC;4BACd,QAAQ,CAAC,IAAI,EAAE,CAAC;4BAChB,OAAO;wBACT,CAAC;wBACD,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;4BAC5C,UAAU,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;wBAC/B,CAAC;oBACH,CAAC,CACF,CAAC;oBACF,IAAI,SAAS,EAAE,CAAC;wBACd,IAAI,CAAC;4BACH,aAAa,CAAC,IAAI,EAAE,CAAC;wBACvB,CAAC;wBAAC,MAAM,CAAC;4BACP,yBAAyB;wBAC3B,CAAC;wBACD,aAAa,GAAG,IAAI,CAAC;oBACvB,CAAC;oBACD,OAAO,IAAI,CAAC;gBACd,CAAC;gBAAC,MAAM,CAAC;oBACP,OAAO,KAAK,CAAC;gBACf,CAAC;YACH,CAAC,CAAC;YAEF,MAAM,uBAAuB,GAAG,GAAY,EAAE;gBAC5C,IAAI,YAAY,KAAK,IAAI,EAAE,CAAC;oBAC1B,OAAO,KAAK,CAAC;gBACf,CAAC;gBACD,IAAI,MAAqD,CAAC;gBAC1D,IAAI,CAAC;oBACH,MAAM,GAAG,0BAA0B,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;gBACjE,CAAC;gBAAC,MAAM,CAAC;oBACP,OAAO,KAAK,CAAC;gBACf,CAAC;gBACD,IAAI,aAAa,GAAG,CAAC,CAAC;gBACtB,IAAI,IAAI,GAAG,KAAK,CAAC;gBAEjB,MAAM,IAAI,GAAG,GAAS,EAAE;oBACtB,IAAI,SAAS,IAAI,SAAS,EAAE,CAAC;wBAC3B,OAAO;oBACT,CAAC;oBACD,MAAM,GAAG,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;oBAC9B,IACE,CAAC,IAAI;wBACL,KAAK,CAAC,UAAU,IAAI,CAAC;wBACrB,GAAG,GAAG,aAAa,IAAI,4BAA4B,EACnD,CAAC;wBACD,aAAa,GAAG,GAAG,CAAC;wBACpB,IAAI,GAAG,IAAI,CAAC;wBACZ,IAAI,CAAC;4BACH,MAAM,IAAI,GAAG,2BAA2B,CAAC,KAAK,EAAE,YAAY,EAAE,MAAM,CAAC,CAAC;4BACtE,IAAI,CAAC,SAAS,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;gCAChC,UAAU,CAAC,IAAI,CAAC,CAAC;4BACnB,CAAC;wBACH,CAAC;wBAAC,MAAM,CAAC;4BACP,gBAAgB;wBAClB,CAAC;gCAAS,CAAC;4BACT,IAAI,GAAG,KAAK,CAAC;wBACf,CAAC;oBACH,CAAC;oBACD,IAAI,CAAC,SAAS,IAAI,CAAC,SAAS,EAAE,CAAC;wBAC7B,yBAAyB,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAC;oBAC1D,CAAC;gBACH,CAAC,CAAC;gBAEF,yBAAyB,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAC;gBACxD,OAAO,IAAI,CAAC;YACd,CAAC,CAAC;YAEF,MAAM,wBAAwB,GAAG,GAAS,EAAE;gBAC1C,IAAI,kBAAkB,IAAI,SAAS,IAAI,SAAS,EAAE,CAAC;oBACjD,OAAO;gBACT,CAAC;gBACD,kBAAkB,GAAG,IAAI,CAAC;gBAC1B,IAAI,CAAC,SAAS,EAAE,CAAC;oBACf,oBAAoB,CAAC,IAAI,CAAC,CAAC;gBAC7B,CAAC;gBACD,KAAK,CAAC,KAAK,IAAmB,EAAE;oBAC9B,MAAM,QAAQ,GAAG,MAAM,sBAAsB,EAAE,CAAC;oBAChD,IAAI,SAAS,IAAI,SAAS,EAAE,CAAC;wBAC3B,OAAO;oBACT,CAAC;oBACD,IAAI,CAAC,QAAQ,EAAE,CAAC;wBACd,uBAAuB,EAAE,CAAC;oBAC5B,CAAC;gBACH,CAAC,CAAC,EAAE,CAAC;YACP,CAAC,CAAC;YAEF,MAAM,wBAAwB,GAAG,GAAS,EAAE;gBAC1C,MAAM,cAAc,GAAG,YAAY,CAAC;gBACpC,IAAI,cAAc,KAAK,SAAS,EAAE,CAAC;oBACjC,OAAO;gBACT,CAAC;gBACD,iBAAiB,GAAG,UAAU,CAAC,GAAG,EAAE;oBAClC,iBAAiB,GAAG,IAAI,CAAC;oBACzB,IAAI,SAAS,IAAI,SAAS,EAAE,CAAC;wBAC3B,OAAO;oBACT,CAAC;oBACD,KAAK,wBAAwB,CAAC,cAAc,CAAC,CAAC;gBAChD,CAAC,EAAE,gCAAgC,CAAC,CAAC;YACvC,CAAC,CAAC;YAEF,MAAM,2BAA2B,GAAG,GAAS,EAAE;gBAC7C,gBAAgB,GAAG,UAAU,CAAC,GAAG,EAAE;oBACjC,gBAAgB,GAAG,IAAI,CAAC;oBACxB,IAAI,SAAS,IAAI,SAAS,EAAE,CAAC;wBAC3B,OAAO;oBACT,CAAC;oBACD,wBAAwB,EAAE,CAAC;gBAC7B,CAAC,EAAE,kCAAkC,CAAC,CAAC;YACzC,CAAC,CAAC;YAEF,sDAAsD;YACtD,IAAI,CAAC,uBAAuB,EAAE,EAAE,CAAC;gBAC/B,iBAAiB,EAAE,CAAC;gBACpB,OAAO;YACT,CAAC;YAED,MAAM,MAAM,GAAG,MAAM,aAAa,EAAE,CAAC;YACrC,IAAI,SAAS,EAAE,CAAC;gBACd,OAAO,EAAE,CAAC;gBACV,OAAO;YACT,CAAC;YACD,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,iBAAiB,EAAE,CAAC;gBACpB,OAAO;YACT,CAAC;YAED,yBAAyB,EAAE,CAAC;YAC5B,wBAAwB,EAAE,CAAC;YAC3B,2BAA2B,EAAE,CAAC;YAC9B,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,SAAS,CAAC,WAAW,CAAC,CAAC;gBACvB,SAAS,CAAC,SAAS,CAAC,CAAC;YACvB,CAAC;QACH,CAAC,CAAC,EAAE,CAAC;QAEL,OAAO,GAAG,EAAE;YACV,SAAS,GAAG,IAAI,CAAC;YACjB,OAAO,EAAE,CAAC;YACV,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;QACzB,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,eAAe,EAAE,aAAa,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;IAErD,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,iBAAiB,EAAE,YAAY,EAAE,CAAC;AAC7D,CAAC"}
|
|
@@ -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/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pi-kiosk-shared",
|
|
3
|
-
"version": "2.2.
|
|
3
|
+
"version": "2.2.97",
|
|
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": {
|
|
@@ -336,7 +337,7 @@
|
|
|
336
337
|
"check:inventory-contract-drift": "node scripts/check-inventory-contract-drift.mjs",
|
|
337
338
|
"gate:inventory-ops-slo-drift": "node scripts/check-inventory-ops-slo-drift.mjs",
|
|
338
339
|
"check:inventory-ops-slo-drift": "node scripts/check-inventory-ops-slo-drift.mjs",
|
|
339
|
-
"publish:local": "npm run build:clean && npm pack --pack-destination
|
|
340
|
+
"publish:local": "npm run build:clean && npm pack --pack-destination .",
|
|
340
341
|
"prepublishOnly": "npm run build:clean",
|
|
341
342
|
"preversion": "npm run test -- --passWithNoTests",
|
|
342
343
|
"postversion": "echo 'Version updated. Run git push && git push --tags manually if needed.'",
|