@unif/react-native-hms-scan 0.5.3 → 0.5.5
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 +9 -3
- package/ReactNativeHmsScan.podspec +5 -14
- package/android/src/main/java/com/unif/reactnativehmsscan/HmsScanView.kt +31 -15
- package/lib/module/NativeHmsScan.js.map +1 -1
- package/lib/module/Scanner/ScanErrorOverlay.js +55 -0
- package/lib/module/Scanner/ScanErrorOverlay.js.map +1 -0
- package/lib/module/Scanner/Scanner.js +176 -52
- package/lib/module/Scanner/Scanner.js.map +1 -1
- package/lib/module/decodeImage.js +3 -2
- package/lib/module/decodeImage.js.map +1 -1
- package/lib/module/index.js +0 -1
- package/lib/module/index.js.map +1 -1
- package/lib/module/types.js +2 -0
- package/lib/module/types.js.map +1 -1
- package/lib/typescript/src/HmsScanView.d.ts +3 -6
- package/lib/typescript/src/HmsScanView.d.ts.map +1 -1
- package/lib/typescript/src/NativeHmsScan.d.ts +3 -1
- package/lib/typescript/src/NativeHmsScan.d.ts.map +1 -1
- package/lib/typescript/src/Scanner/ScanErrorOverlay.d.ts +7 -0
- package/lib/typescript/src/Scanner/ScanErrorOverlay.d.ts.map +1 -0
- package/lib/typescript/src/Scanner/Scanner.d.ts +9 -6
- package/lib/typescript/src/Scanner/Scanner.d.ts.map +1 -1
- package/lib/typescript/src/decodeImage.d.ts +3 -2
- package/lib/typescript/src/decodeImage.d.ts.map +1 -1
- package/lib/typescript/src/index.d.ts +1 -1
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/lib/typescript/src/types.d.ts +6 -1
- package/lib/typescript/src/types.d.ts.map +1 -1
- package/package.json +4 -3
- package/src/HmsScanView.tsx +3 -3
- package/src/NativeHmsScan.ts +3 -1
- package/src/Scanner/ScanErrorOverlay.tsx +51 -0
- package/src/Scanner/Scanner.tsx +236 -54
- package/src/decodeImage.ts +3 -2
- package/src/index.tsx +1 -1
- package/src/types.ts +7 -1
- package/scripts/prepare-scankit-xcframework.sh +0 -83
package/lib/module/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["ALL_BARCODE_FORMATS","HmsScanError","coerceFormat","coerceContentType","formatsToCsv","HmsScanView","decodeImage","getCameraPermissionStatus","requestCameraPermission","Scanner"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;AAAA;AACA;AACA
|
|
1
|
+
{"version":3,"names":["ALL_BARCODE_FORMATS","HmsScanError","coerceFormat","coerceContentType","formatsToCsv","HmsScanView","decodeImage","getCameraPermissionStatus","requestCameraPermission","Scanner"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;AAAA;AACA;AACA;;AAEA;AACA,SACEA,mBAAmB,EACnBC,YAAY,QACP,YAAS;AAahB;AACA,SAASC,YAAY,EAAEC,iBAAiB,EAAEC,YAAY,QAAQ,aAAU;;AAExE;AACA,SAASC,WAAW,QAAQ,kBAAe;AAG3C;AACA,SAASC,WAAW,QAAQ,kBAAe;;AAE3C;AACA,SAASC,yBAAyB,EAAEC,uBAAuB,QAAQ,kBAAe;;AAElF;AACA,SAASC,OAAO,QAAQ,sBAAmB","ignoreList":[]}
|
package/lib/module/types.js
CHANGED
package/lib/module/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["ALL_BARCODE_FORMATS","HmsScanError","Error","constructor","code","message","name","Object","setPrototypeOf","prototype"],"sourceRoot":"../../src","sources":["types.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAkBA;AACA,OAAO,MAAMA,mBAA6C,GAAG,CAC3D,SAAS,EACT,OAAO,EACP,aAAa,EACb,QAAQ,EACR,SAAS,EACT,SAAS,EACT,SAAS,EACT,UAAU,EACV,OAAO,EACP,QAAQ,EACR,OAAO,EACP,OAAO,EACP,OAAO,EACP,kBAAkB,CACV;;AAEV;AACA;AACA;AACA;;AAgBA;;AAMA;;AAYA;;AAMA;;AAOA;;AAUA;AACA,OAAO,MAAMC,YAAY,SAASC,KAAK,CAAC;EAEtCC,WAAWA,CAACC,IAAsB,EAAEC,OAAgB,EAAE;IACpD,KAAK,CAACA,OAAO,IAAID,IAAI,CAAC;IACtB,IAAI,CAACE,IAAI,GAAG,cAAc;IAC1B,IAAI,CAACF,IAAI,GAAGA,IAAI;IAChB;IACAG,MAAM,CAACC,cAAc,CAAC,IAAI,EAAEP,YAAY,CAACQ,SAAS,CAAC;EACrD;AACF;;AAEA;AACA;AACA;AACA","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["ALL_BARCODE_FORMATS","HmsScanError","Error","constructor","code","message","name","Object","setPrototypeOf","prototype"],"sourceRoot":"../../src","sources":["types.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAkBA;AACA,OAAO,MAAMA,mBAA6C,GAAG,CAC3D,SAAS,EACT,OAAO,EACP,aAAa,EACb,QAAQ,EACR,SAAS,EACT,SAAS,EACT,SAAS,EACT,UAAU,EACV,OAAO,EACP,QAAQ,EACR,OAAO,EACP,OAAO,EACP,OAAO,EACP,kBAAkB,CACV;;AAEV;AACA;AACA;AACA;;AAgBA;;AAMA;;AAYA;;AAMA;;AAMA;;AAOA;;AAUA;AACA,OAAO,MAAMC,YAAY,SAASC,KAAK,CAAC;EAEtCC,WAAWA,CAACC,IAAsB,EAAEC,OAAgB,EAAE;IACpD,KAAK,CAACA,OAAO,IAAID,IAAI,CAAC;IACtB,IAAI,CAACE,IAAI,GAAG,cAAc;IAC1B,IAAI,CAACF,IAAI,GAAGA,IAAI;IAChB;IACAG,MAAM,CAACC,cAAc,CAAC,IAAI,EAAEP,YAAY,CAACQ,SAAS,CAAC;EACrD;AACF;;AAEA;AACA;AACA;AACA","ignoreList":[]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { ViewProps } from 'react-native';
|
|
2
|
-
import type { BarcodeFormat, ScanResult } from './types';
|
|
2
|
+
import type { BarcodeFormat, ScanError, ScanResult } from './types';
|
|
3
3
|
/** 平台相关的暗光提示 / 手电状态。 */
|
|
4
4
|
export interface TorchStatus {
|
|
5
5
|
/** Android:环境暗光提示;iOS:设备是否有手电硬件。 */
|
|
@@ -9,7 +9,7 @@ export interface TorchStatus {
|
|
|
9
9
|
}
|
|
10
10
|
export interface HmsScanViewProps extends ViewProps {
|
|
11
11
|
/** 限定码制;不传 = 全部。 */
|
|
12
|
-
formats?: BarcodeFormat[];
|
|
12
|
+
formats?: readonly BarcodeFormat[];
|
|
13
13
|
/** 连续扫码,默认 true。 */
|
|
14
14
|
continuous?: boolean;
|
|
15
15
|
/** 暂停/恢复扫码,默认 false。 */
|
|
@@ -19,10 +19,7 @@ export interface HmsScanViewProps extends ViewProps {
|
|
|
19
19
|
/** 命中一个或多个码时回调(已解析为强类型)。 */
|
|
20
20
|
onScanResult?: (results: ScanResult[]) => void;
|
|
21
21
|
/** 相机/解码出错时回调。 */
|
|
22
|
-
onScanError?: (error:
|
|
23
|
-
code: string;
|
|
24
|
-
message: string;
|
|
25
|
-
}) => void;
|
|
22
|
+
onScanError?: (error: ScanError) => void;
|
|
26
23
|
/** Android 暗光提示或 iOS 手电硬件 / 点亮状态变化时回调。 */
|
|
27
24
|
onTorchStatus?: (status: TorchStatus) => void;
|
|
28
25
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HmsScanView.d.ts","sourceRoot":"","sources":["../../../src/HmsScanView.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAG9C,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"HmsScanView.d.ts","sourceRoot":"","sources":["../../../src/HmsScanView.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAG9C,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAEpE,wBAAwB;AACxB,MAAM,WAAW,WAAW;IAC1B,oCAAoC;IACpC,SAAS,EAAE,OAAO,CAAC;IACnB,gBAAgB;IAChB,EAAE,EAAE,OAAO,CAAC;CACb;AAED,MAAM,WAAW,gBAAiB,SAAQ,SAAS;IACjD,oBAAoB;IACpB,OAAO,CAAC,EAAE,SAAS,aAAa,EAAE,CAAC;IACnC,oBAAoB;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,wBAAwB;IACxB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,+BAA+B;IAC/B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,4BAA4B;IAC5B,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,UAAU,EAAE,KAAK,IAAI,CAAC;IAC/C,kBAAkB;IAClB,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,CAAC;IACzC,0CAA0C;IAC1C,aAAa,CAAC,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,IAAI,CAAC;CAC/C;AAED;;;;;GAKG;AACH,eAAO,MAAM,WAAW,iOAiDtB,CAAC"}
|
|
@@ -2,7 +2,9 @@ import type { TurboModule } from 'react-native';
|
|
|
2
2
|
export interface Spec extends TurboModule {
|
|
3
3
|
/**
|
|
4
4
|
* 解码本地图片里的条码 / 二维码。
|
|
5
|
-
* @param uri
|
|
5
|
+
* @param uri 本地图片。iOS 支持 file://、绝对路径、data:;Android 支持
|
|
6
|
+
* file://、绝对路径、content://、android.resource://。
|
|
7
|
+
* 两端都不下载远程 URL,也不支持 ph:// / assets-library://。
|
|
6
8
|
* @param formatsCsv 限定码制(逗号分隔的 BarcodeFormat),空串 = 全部。
|
|
7
9
|
* @returns JSON 编码的 ScanResult[](可能为空数组)。
|
|
8
10
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NativeHmsScan.d.ts","sourceRoot":"","sources":["../../../src/NativeHmsScan.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAOhD,MAAM,WAAW,IAAK,SAAQ,WAAW;IACvC
|
|
1
|
+
{"version":3,"file":"NativeHmsScan.d.ts","sourceRoot":"","sources":["../../../src/NativeHmsScan.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAOhD,MAAM,WAAW,IAAK,SAAQ,WAAW;IACvC;;;;;;;OAOG;IACH,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAE9D,gEAAgE;IAChE,yBAAyB,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAE7C,4BAA4B;IAC5B,uBAAuB,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;CAC5C;;AAED,wBAAiE"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
interface ScanErrorOverlayProps {
|
|
2
|
+
onClose?: () => void;
|
|
3
|
+
onRetry: () => void;
|
|
4
|
+
}
|
|
5
|
+
export declare function ScanErrorOverlay({ onClose, onRetry }: ScanErrorOverlayProps): import("react/jsx-runtime").JSX.Element;
|
|
6
|
+
export {};
|
|
7
|
+
//# sourceMappingURL=ScanErrorOverlay.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ScanErrorOverlay.d.ts","sourceRoot":"","sources":["../../../../src/Scanner/ScanErrorOverlay.tsx"],"names":[],"mappings":"AASA,UAAU,qBAAqB;IAC7B,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,wBAAgB,gBAAgB,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,qBAAqB,2CAe3E"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import type { BarcodeFormat, ScanProduct, ScanResult } from '../types';
|
|
1
|
+
import type { BarcodeFormat, ScanError, ScanProduct, ScanResult } from '../types';
|
|
2
2
|
export interface ScannerProps {
|
|
3
3
|
/** 顶栏标题,默认 "扫一扫"。 */
|
|
4
4
|
title?: string;
|
|
5
5
|
/** 限定识别码制;不传 = 全部。 */
|
|
6
|
-
formats?: BarcodeFormat[];
|
|
6
|
+
formats?: readonly BarcodeFormat[];
|
|
7
7
|
/** 取景态提示文案。 */
|
|
8
8
|
hintText?: string;
|
|
9
9
|
/** 顶部安全区(默认 54)。用 react-native-safe-area-context 时可传 insets.top。 */
|
|
@@ -14,6 +14,8 @@ export interface ScannerProps {
|
|
|
14
14
|
showTorch?: boolean;
|
|
15
15
|
/** 返回回调(退出扫码页,回到上一级);按钮在底部工具栏,与手电筒并排。 */
|
|
16
16
|
onClose?: () => void;
|
|
17
|
+
/** 扫码相机或权限检查出错时上报。 */
|
|
18
|
+
onScanError?: (error: ScanError) => void;
|
|
17
19
|
/**
|
|
18
20
|
* 扫到条码后由宿主解析商品信息(用于浮层确认卡)。
|
|
19
21
|
* 返回 null/undefined 视为"未识别",抛错亦然。不传则默认用扫到的原文当商品名。
|
|
@@ -22,8 +24,9 @@ export interface ScannerProps {
|
|
|
22
24
|
/** 用户点"确认":把结果带回上一级(宿主通常在此导航返回)。 */
|
|
23
25
|
onConfirm?: (product: ScanProduct, result: ScanResult) => void;
|
|
24
26
|
/**
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
+
* 自动确认:传 `onConfirm` 时,扫到并解析成功后**不显示结果卡**,直接触发
|
|
28
|
+
* `onConfirm(product, result)`;未传回调时仍显示结果卡。默认 `false`(显示结果卡,
|
|
29
|
+
* 由用户点"确定")。
|
|
27
30
|
* 适合"扫到即用、不需要二次确认"的场景。回调后相机暂停、不自动重扫——宿主通常在
|
|
28
31
|
* `onConfirm` 里导航离开;若需再扫由宿主控制(如重新挂载 `<Scanner>`)。
|
|
29
32
|
* 注:未识别(`resolveProduct` 返回 `null`/抛错)仍走失败态可重扫,不会误触发。
|
|
@@ -37,8 +40,8 @@ export interface ScannerProps {
|
|
|
37
40
|
}
|
|
38
41
|
/**
|
|
39
42
|
* 成品「扫一扫」界面(聚焦款)。底层 <HmsScanView> 出相机画面,取景框 / 工具栏 / 结果卡
|
|
40
|
-
* 全用 @unif/react-native-design 的主题令牌与组件绘制(统一风格)。自带 ThemeProvider
|
|
41
|
-
*
|
|
43
|
+
* 全用 @unif/react-native-design 的主题令牌与组件绘制(统一风格)。自带 ThemeProvider,
|
|
44
|
+
* 可直接整屏接入;放进宿主已有的 ThemeProvider 里也兼容。
|
|
42
45
|
*/
|
|
43
46
|
export declare function Scanner(props: ScannerProps): import("react/jsx-runtime").JSX.Element;
|
|
44
47
|
//# sourceMappingURL=Scanner.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Scanner.d.ts","sourceRoot":"","sources":["../../../../src/Scanner/Scanner.tsx"],"names":[],"mappings":"AASA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"Scanner.d.ts","sourceRoot":"","sources":["../../../../src/Scanner/Scanner.tsx"],"names":[],"mappings":"AASA,OAAO,KAAK,EACV,aAAa,EACb,SAAS,EACT,WAAW,EACX,UAAU,EACX,MAAM,UAAU,CAAC;AAoClB,MAAM,WAAW,YAAY;IAC3B,qBAAqB;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,sBAAsB;IACtB,OAAO,CAAC,EAAE,SAAS,aAAa,EAAE,CAAC;IACnC,eAAe;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,oEAAoE;IACpE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,oBAAoB;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,0EAA0E;IAC1E,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,yCAAyC;IACzC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,sBAAsB;IACtB,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,CAAC;IACzC;;;OAGG;IACH,cAAc,CAAC,EAAE,CACf,MAAM,EAAE,UAAU,KACf,WAAW,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC;IAC9E,oCAAoC;IACpC,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,KAAK,IAAI,CAAC;IAC/D;;;;;;;OAOG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;CAC1C;AAED;;;;GAIG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,YAAY,2CAM1C"}
|
|
@@ -2,8 +2,9 @@ import { type DecodeImageOptions, type ScanResult } from './types';
|
|
|
2
2
|
/**
|
|
3
3
|
* 从本地图片解码条码 / 二维码(华为 Bitmap 模式)。
|
|
4
4
|
*
|
|
5
|
-
* @param uri
|
|
6
|
-
*
|
|
5
|
+
* @param uri 本地图片。iOS 支持 file://、绝对路径、data:;Android 支持
|
|
6
|
+
* file://、绝对路径、content://、android.resource://。
|
|
7
|
+
* 两端都不下载远程 URL,也不支持 ph:// / assets-library://。
|
|
7
8
|
* @param options 可选;formats 限定码制,不传 = 全部。
|
|
8
9
|
* @returns 命中的结果数组(可能为空)。
|
|
9
10
|
* @throws HmsScanError 图片加载失败 / 读权限缺失等。
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decodeImage.d.ts","sourceRoot":"","sources":["../../../src/decodeImage.ts"],"names":[],"mappings":"AAEA,OAAO,EAAgB,KAAK,kBAAkB,EAAE,KAAK,UAAU,EAAE,MAAM,SAAS,CAAC;AAEjF
|
|
1
|
+
{"version":3,"file":"decodeImage.d.ts","sourceRoot":"","sources":["../../../src/decodeImage.ts"],"names":[],"mappings":"AAEA,OAAO,EAAgB,KAAK,kBAAkB,EAAE,KAAK,UAAU,EAAE,MAAM,SAAS,CAAC;AAEjF;;;;;;;;;GASG;AACH,wBAAsB,WAAW,CAC/B,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,UAAU,EAAE,CAAC,CAmBvB"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { ALL_BARCODE_FORMATS, HmsScanError, } from './types';
|
|
2
|
-
export type { BarcodeFormat, BarcodeContentType, ScanCornerPoint, ScanResult, DecodeImageOptions, CameraPermissionStatus, HmsScanErrorCode, ScanProduct, } from './types';
|
|
2
|
+
export type { BarcodeFormat, BarcodeContentType, ScanCornerPoint, ScanResult, ScanError, DecodeImageOptions, CameraPermissionStatus, HmsScanErrorCode, ScanProduct, } from './types';
|
|
3
3
|
export { coerceFormat, coerceContentType, formatsToCsv } from './format';
|
|
4
4
|
export { HmsScanView } from './HmsScanView';
|
|
5
5
|
export type { HmsScanViewProps, TorchStatus } from './HmsScanView';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.tsx"],"names":[],"mappings":"AAKA,OAAO,EACL,mBAAmB,EACnB,YAAY,GACb,MAAM,SAAS,CAAC;AACjB,YAAY,EACV,aAAa,EACb,kBAAkB,EAClB,eAAe,EACf,UAAU,EACV,SAAS,EACT,kBAAkB,EAClB,sBAAsB,EACtB,gBAAgB,EAChB,WAAW,GACZ,MAAM,SAAS,CAAC;AAGjB,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAGzE,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,YAAY,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAGnE,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAG5C,OAAO,EAAE,yBAAyB,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAGnF,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,YAAY,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC"}
|
|
@@ -26,7 +26,12 @@ export interface ScanResult {
|
|
|
26
26
|
/** decodeImage 选项。 */
|
|
27
27
|
export interface DecodeImageOptions {
|
|
28
28
|
/** 限定识别码制;不传 = 全部。 */
|
|
29
|
-
formats?: BarcodeFormat[];
|
|
29
|
+
formats?: readonly BarcodeFormat[];
|
|
30
|
+
}
|
|
31
|
+
/** `<HmsScanView>` / `<Scanner>` 通过回调上报的普通错误对象。 */
|
|
32
|
+
export interface ScanError {
|
|
33
|
+
code: string;
|
|
34
|
+
message: string;
|
|
30
35
|
}
|
|
31
36
|
/** 相机权限状态。 */
|
|
32
37
|
export type CameraPermissionStatus = 'granted' | 'denied' | 'blocked' | 'undetermined';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/types.ts"],"names":[],"mappings":"AAQA,oBAAoB;AACpB,MAAM,MAAM,aAAa,GACrB,SAAS,GACT,OAAO,GACP,aAAa,GACb,QAAQ,GACR,SAAS,GACT,SAAS,GACT,SAAS,GACT,UAAU,GACV,OAAO,GACP,QAAQ,GACR,OAAO,GACP,OAAO,GACP,OAAO,GACP,kBAAkB,GAClB,SAAS,CAAC;AAEd,wCAAwC;AACxC,eAAO,MAAM,mBAAmB,EAAE,SAAS,aAAa,EAe9C,CAAC;AAEX;;;GAGG;AACH,MAAM,MAAM,kBAAkB,GAC1B,MAAM,GACN,KAAK,GACL,OAAO,GACP,OAAO,GACP,KAAK,GACL,MAAM,GACN,SAAS,GACT,OAAO,GACP,UAAU,GACV,QAAQ,GACR,MAAM,GACN,SAAS,GACT,OAAO,CAAC;AAEZ,gCAAgC;AAChC,MAAM,WAAW,eAAe;IAC9B,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX;AAED,oBAAoB;AACpB,MAAM,WAAW,UAAU;IACzB,mDAAmD;IACnD,KAAK,EAAE,MAAM,CAAC;IACd,UAAU;IACV,MAAM,EAAE,aAAa,CAAC;IACtB,oBAAoB;IACpB,WAAW,CAAC,EAAE,kBAAkB,CAAC;IACjC,mBAAmB;IACnB,YAAY,CAAC,EAAE,eAAe,EAAE,CAAC;CAClC;AAED,sBAAsB;AACtB,MAAM,WAAW,kBAAkB;IACjC,sBAAsB;IACtB,OAAO,CAAC,EAAE,aAAa,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/types.ts"],"names":[],"mappings":"AAQA,oBAAoB;AACpB,MAAM,MAAM,aAAa,GACrB,SAAS,GACT,OAAO,GACP,aAAa,GACb,QAAQ,GACR,SAAS,GACT,SAAS,GACT,SAAS,GACT,UAAU,GACV,OAAO,GACP,QAAQ,GACR,OAAO,GACP,OAAO,GACP,OAAO,GACP,kBAAkB,GAClB,SAAS,CAAC;AAEd,wCAAwC;AACxC,eAAO,MAAM,mBAAmB,EAAE,SAAS,aAAa,EAe9C,CAAC;AAEX;;;GAGG;AACH,MAAM,MAAM,kBAAkB,GAC1B,MAAM,GACN,KAAK,GACL,OAAO,GACP,OAAO,GACP,KAAK,GACL,MAAM,GACN,SAAS,GACT,OAAO,GACP,UAAU,GACV,QAAQ,GACR,MAAM,GACN,SAAS,GACT,OAAO,CAAC;AAEZ,gCAAgC;AAChC,MAAM,WAAW,eAAe;IAC9B,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX;AAED,oBAAoB;AACpB,MAAM,WAAW,UAAU;IACzB,mDAAmD;IACnD,KAAK,EAAE,MAAM,CAAC;IACd,UAAU;IACV,MAAM,EAAE,aAAa,CAAC;IACtB,oBAAoB;IACpB,WAAW,CAAC,EAAE,kBAAkB,CAAC;IACjC,mBAAmB;IACnB,YAAY,CAAC,EAAE,eAAe,EAAE,CAAC;CAClC;AAED,sBAAsB;AACtB,MAAM,WAAW,kBAAkB;IACjC,sBAAsB;IACtB,OAAO,CAAC,EAAE,SAAS,aAAa,EAAE,CAAC;CACpC;AAED,mDAAmD;AACnD,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,cAAc;AACd,MAAM,MAAM,sBAAsB,GAC9B,SAAS,GACT,QAAQ,GACR,SAAS,GACT,cAAc,CAAC;AAEnB,WAAW;AACX,MAAM,MAAM,gBAAgB,GACxB,wBAAwB,GACxB,sBAAsB,GACtB,eAAe,GACf,iBAAiB,GACjB,qBAAqB,GACrB,aAAa,GACb,WAAW,CAAC;AAEhB,kBAAkB;AAClB,qBAAa,YAAa,SAAQ,KAAK;IACrC,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAC;gBACpB,IAAI,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE,MAAM;CAOrD;AAED;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,eAAe;IACf,IAAI,EAAE,MAAM,CAAC;IACb,kBAAkB;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,mCAAmC;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,wBAAwB;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,8BAA8B;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,qBAAqB;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,wBAAwB;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,yBAAyB;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@unif/react-native-hms-scan",
|
|
3
|
-
"version": "0.5.
|
|
3
|
+
"version": "0.5.5",
|
|
4
4
|
"description": "华为 HMS 统一扫码服务 React Native bridge:定制视图扫码 + 图片识别 (Scan SDK-Plus / ScanKitFrameWork,@unif 私有)",
|
|
5
5
|
"main": "./lib/module/index.js",
|
|
6
6
|
"types": "./lib/typescript/src/index.d.ts",
|
|
@@ -24,7 +24,6 @@
|
|
|
24
24
|
"ios",
|
|
25
25
|
"*.podspec",
|
|
26
26
|
"react-native.config.js",
|
|
27
|
-
"scripts",
|
|
28
27
|
"!ios/build",
|
|
29
28
|
"!android/build",
|
|
30
29
|
"!android/gradle",
|
|
@@ -41,7 +40,9 @@
|
|
|
41
40
|
"clean": "del-cli android/build example/android/build example/android/app/build example/ios/build lib",
|
|
42
41
|
"prepare": "bob build",
|
|
43
42
|
"typecheck": "tsc",
|
|
44
|
-
"test": "jest",
|
|
43
|
+
"test": "yarn verify:android-integration && yarn verify:ios-integration && jest",
|
|
44
|
+
"verify:android-integration": "node scripts/verify-android-integration.mjs",
|
|
45
|
+
"verify:ios-integration": "node scripts/verify-ios-integration.mjs",
|
|
45
46
|
"lint": "eslint \"**/*.{js,ts,tsx}\""
|
|
46
47
|
},
|
|
47
48
|
"keywords": [
|
package/src/HmsScanView.tsx
CHANGED
|
@@ -2,7 +2,7 @@ import { forwardRef, type ComponentRef } from 'react';
|
|
|
2
2
|
import type { ViewProps } from 'react-native';
|
|
3
3
|
import NativeHmsScanView from './HmsScanViewNativeComponent';
|
|
4
4
|
import { formatsToCsv, parseResultsJson } from './format';
|
|
5
|
-
import type { BarcodeFormat, ScanResult } from './types';
|
|
5
|
+
import type { BarcodeFormat, ScanError, ScanResult } from './types';
|
|
6
6
|
|
|
7
7
|
/** 平台相关的暗光提示 / 手电状态。 */
|
|
8
8
|
export interface TorchStatus {
|
|
@@ -14,7 +14,7 @@ export interface TorchStatus {
|
|
|
14
14
|
|
|
15
15
|
export interface HmsScanViewProps extends ViewProps {
|
|
16
16
|
/** 限定码制;不传 = 全部。 */
|
|
17
|
-
formats?: BarcodeFormat[];
|
|
17
|
+
formats?: readonly BarcodeFormat[];
|
|
18
18
|
/** 连续扫码,默认 true。 */
|
|
19
19
|
continuous?: boolean;
|
|
20
20
|
/** 暂停/恢复扫码,默认 false。 */
|
|
@@ -24,7 +24,7 @@ export interface HmsScanViewProps extends ViewProps {
|
|
|
24
24
|
/** 命中一个或多个码时回调(已解析为强类型)。 */
|
|
25
25
|
onScanResult?: (results: ScanResult[]) => void;
|
|
26
26
|
/** 相机/解码出错时回调。 */
|
|
27
|
-
onScanError?: (error:
|
|
27
|
+
onScanError?: (error: ScanError) => void;
|
|
28
28
|
/** Android 暗光提示或 iOS 手电硬件 / 点亮状态变化时回调。 */
|
|
29
29
|
onTorchStatus?: (status: TorchStatus) => void;
|
|
30
30
|
}
|
package/src/NativeHmsScan.ts
CHANGED
|
@@ -8,7 +8,9 @@ import { TurboModuleRegistry } from 'react-native';
|
|
|
8
8
|
export interface Spec extends TurboModule {
|
|
9
9
|
/**
|
|
10
10
|
* 解码本地图片里的条码 / 二维码。
|
|
11
|
-
* @param uri
|
|
11
|
+
* @param uri 本地图片。iOS 支持 file://、绝对路径、data:;Android 支持
|
|
12
|
+
* file://、绝对路径、content://、android.resource://。
|
|
13
|
+
* 两端都不下载远程 URL,也不支持 ph:// / assets-library://。
|
|
12
14
|
* @param formatsCsv 限定码制(逗号分隔的 BarcodeFormat),空串 = 全部。
|
|
13
15
|
* @returns JSON 编码的 ScanResult[](可能为空数组)。
|
|
14
16
|
*/
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { StyleSheet, View } from 'react-native';
|
|
2
|
+
import {
|
|
3
|
+
Button,
|
|
4
|
+
Empty,
|
|
5
|
+
useThemedStyles,
|
|
6
|
+
r,
|
|
7
|
+
type ColorTokens,
|
|
8
|
+
} from '@unif/react-native-design';
|
|
9
|
+
|
|
10
|
+
interface ScanErrorOverlayProps {
|
|
11
|
+
onClose?: () => void;
|
|
12
|
+
onRetry: () => void;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export function ScanErrorOverlay({ onClose, onRetry }: ScanErrorOverlayProps) {
|
|
16
|
+
const s = useThemedStyles(makeStyles);
|
|
17
|
+
return (
|
|
18
|
+
<View style={s.overlay}>
|
|
19
|
+
<Empty
|
|
20
|
+
icon="error-alert"
|
|
21
|
+
title="相机启动失败"
|
|
22
|
+
desc="无法启动扫码相机,请确认权限与设备状态后重试。"
|
|
23
|
+
/>
|
|
24
|
+
<View style={styles.row}>
|
|
25
|
+
{onClose && <Button label="取消" variant="ghost" block onPress={onClose} />}
|
|
26
|
+
<Button label="重试" variant="primary" block onPress={onRetry} />
|
|
27
|
+
</View>
|
|
28
|
+
</View>
|
|
29
|
+
);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
const styles = StyleSheet.create({
|
|
33
|
+
row: { flexDirection: 'row', columnGap: r(12), marginTop: r(8) },
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
const makeStyles = (c: ColorTokens) =>
|
|
37
|
+
StyleSheet.create({
|
|
38
|
+
overlay: {
|
|
39
|
+
position: 'absolute',
|
|
40
|
+
top: 0,
|
|
41
|
+
left: 0,
|
|
42
|
+
right: 0,
|
|
43
|
+
bottom: 0,
|
|
44
|
+
zIndex: 40,
|
|
45
|
+
backgroundColor: c.background,
|
|
46
|
+
alignItems: 'center',
|
|
47
|
+
justifyContent: 'center',
|
|
48
|
+
paddingHorizontal: r(40),
|
|
49
|
+
rowGap: r(8),
|
|
50
|
+
},
|
|
51
|
+
});
|