@mleonard9/vin-scanner 1.5.1 → 1.5.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. package/README.md +19 -2
  2. package/ios/VisionCameraBarcodeScanner.m +2 -23
  3. package/ios/VisionCameraTextRecognition.m +2 -21
  4. package/lib/commonjs/ManualVinInput.js +25 -15
  5. package/lib/commonjs/ManualVinInput.js.map +1 -1
  6. package/lib/commonjs/PendingVinBanner.js +44 -21
  7. package/lib/commonjs/PendingVinBanner.js.map +1 -1
  8. package/lib/commonjs/ScannerChromeOverlay.js +185 -0
  9. package/lib/commonjs/ScannerChromeOverlay.js.map +1 -0
  10. package/lib/commonjs/TextVinPrompt.js +33 -18
  11. package/lib/commonjs/TextVinPrompt.js.map +1 -1
  12. package/lib/commonjs/index.js +11 -3
  13. package/lib/commonjs/index.js.map +1 -1
  14. package/lib/commonjs/scanBarcodes.js +6 -2
  15. package/lib/commonjs/scanBarcodes.js.map +1 -1
  16. package/lib/commonjs/scanText.js +6 -2
  17. package/lib/commonjs/scanText.js.map +1 -1
  18. package/lib/commonjs/useVinScanner.js +15 -4
  19. package/lib/commonjs/useVinScanner.js.map +1 -1
  20. package/lib/commonjs/vinUtils.js +6 -4
  21. package/lib/commonjs/vinUtils.js.map +1 -1
  22. package/lib/module/ManualVinInput.js +25 -15
  23. package/lib/module/ManualVinInput.js.map +1 -1
  24. package/lib/module/PendingVinBanner.js +45 -22
  25. package/lib/module/PendingVinBanner.js.map +1 -1
  26. package/lib/module/ScannerChromeOverlay.js +177 -0
  27. package/lib/module/ScannerChromeOverlay.js.map +1 -0
  28. package/lib/module/TextVinPrompt.js +33 -18
  29. package/lib/module/TextVinPrompt.js.map +1 -1
  30. package/lib/module/index.js +5 -3
  31. package/lib/module/index.js.map +1 -1
  32. package/lib/module/scanBarcodes.js +6 -2
  33. package/lib/module/scanBarcodes.js.map +1 -1
  34. package/lib/module/scanText.js +6 -2
  35. package/lib/module/scanText.js.map +1 -1
  36. package/lib/module/useVinScanner.js +15 -4
  37. package/lib/module/useVinScanner.js.map +1 -1
  38. package/lib/module/vinUtils.js +6 -4
  39. package/lib/module/vinUtils.js.map +1 -1
  40. package/lib/typescript/src/ManualVinInput.d.ts.map +1 -1
  41. package/lib/typescript/src/PendingVinBanner.d.ts +2 -1
  42. package/lib/typescript/src/PendingVinBanner.d.ts.map +1 -1
  43. package/lib/typescript/src/ScannerChromeOverlay.d.ts +19 -0
  44. package/lib/typescript/src/ScannerChromeOverlay.d.ts.map +1 -0
  45. package/lib/typescript/src/TextVinPrompt.d.ts.map +1 -1
  46. package/lib/typescript/src/index.d.ts +1 -0
  47. package/lib/typescript/src/index.d.ts.map +1 -1
  48. package/lib/typescript/src/scanBarcodes.d.ts.map +1 -1
  49. package/lib/typescript/src/scanText.d.ts.map +1 -1
  50. package/lib/typescript/src/types.d.ts +8 -2
  51. package/lib/typescript/src/types.d.ts.map +1 -1
  52. package/lib/typescript/src/useVinScanner.d.ts.map +1 -1
  53. package/lib/typescript/src/vinUtils.d.ts.map +1 -1
  54. package/package.json +1 -1
  55. package/src/ManualVinInput.tsx +22 -15
  56. package/src/PendingVinBanner.tsx +66 -27
  57. package/src/ScannerChromeOverlay.tsx +214 -0
  58. package/src/TextVinPrompt.tsx +31 -16
  59. package/src/index.tsx +6 -2
  60. package/src/scanBarcodes.ts +9 -5
  61. package/src/scanText.ts +9 -5
  62. package/src/types.ts +8 -2
  63. package/src/useVinScanner.ts +20 -4
  64. package/src/vinUtils.ts +5 -1
@@ -1 +1 @@
1
- {"version":3,"file":"ManualVinInput.d.ts","sourceRoot":"","sources":["../../../src/ManualVinInput.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA4B,MAAM,OAAO,CAAC;AAIjD,KAAK,mBAAmB,GAAG;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AA6BF,wBAAgB,cAAc,CAAC,EAC7B,YAAiB,EACjB,QAAQ,EACR,WAAuB,EACvB,WAAuB,EACvB,WAAoC,GACrC,EAAE,mBAAmB,qBA0DrB;AAgFD,eAAe,cAAc,CAAC"}
1
+ {"version":3,"file":"ManualVinInput.d.ts","sourceRoot":"","sources":["../../../src/ManualVinInput.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA4B,MAAM,OAAO,CAAC;AAIjD,KAAK,mBAAmB,GAAG;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AA6BF,wBAAgB,cAAc,CAAC,EAC7B,YAAiB,EACjB,QAAQ,EACR,WAAuB,EACvB,WAAuB,EACvB,WAAoC,GACrC,EAAE,mBAAmB,qBA0DrB;AAuFD,eAAe,cAAc,CAAC"}
@@ -7,11 +7,12 @@ type PendingVinBannerProps = {
7
7
  onDismiss?: () => void;
8
8
  buttonLabel?: string;
9
9
  buttonColor?: string;
10
+ bottomOffset?: number;
10
11
  };
11
12
  /**
12
13
  * Compact bottom banner for pending text VINs.
13
14
  * Works well together with `text.requireConfirmation`.
14
15
  */
15
- export declare function PendingVinBanner({ visible, candidates, onConfirm, onDismiss, buttonLabel, buttonColor, }: PendingVinBannerProps): React.JSX.Element | null;
16
+ export declare function PendingVinBanner({ visible, candidates, onConfirm, onDismiss, buttonLabel, buttonColor, bottomOffset, }: PendingVinBannerProps): React.JSX.Element | null;
16
17
  export default PendingVinBanner;
17
18
  //# sourceMappingURL=PendingVinBanner.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"PendingVinBanner.d.ts","sourceRoot":"","sources":["../../../src/PendingVinBanner.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE5C,KAAK,qBAAqB,GAAG;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,YAAY,EAAE,CAAC;IAC3B,SAAS,EAAE,CAAC,SAAS,EAAE,YAAY,KAAK,IAAI,CAAC;IAC7C,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,EAC/B,OAAO,EACP,UAAU,EACV,SAAS,EACT,SAAS,EACT,WAAuB,EACvB,WAAuB,GACxB,EAAE,qBAAqB,4BAgDvB;AAsDD,eAAe,gBAAgB,CAAC"}
1
+ {"version":3,"file":"PendingVinBanner.d.ts","sourceRoot":"","sources":["../../../src/PendingVinBanner.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAU1B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE5C,KAAK,qBAAqB,GAAG;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,YAAY,EAAE,CAAC;IAC3B,SAAS,EAAE,CAAC,SAAS,EAAE,YAAY,KAAK,IAAI,CAAC;IAC7C,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,EAC/B,OAAO,EACP,UAAU,EACV,SAAS,EACT,SAAS,EACT,WAAuB,EACvB,WAAuB,EACvB,YAAkB,GACnB,EAAE,qBAAqB,4BA+DvB;AAoED,eAAe,gBAAgB,CAAC"}
@@ -0,0 +1,19 @@
1
+ import React from 'react';
2
+ type ScannerChromeOverlayProps = {
3
+ onBackPress?: () => void;
4
+ onManualEntryPress?: () => void;
5
+ onFlashPress?: () => void;
6
+ isTorchOn?: boolean;
7
+ backContent?: React.ReactNode;
8
+ manualEntryContent?: React.ReactNode;
9
+ flashOnContent?: React.ReactNode;
10
+ flashOffContent?: React.ReactNode;
11
+ centerContent?: React.ReactNode;
12
+ frameSize?: number;
13
+ cornerColor?: string;
14
+ topOffset?: number;
15
+ bottomOffset?: number;
16
+ };
17
+ export declare function ScannerChromeOverlay({ onBackPress, onManualEntryPress, onFlashPress, isTorchOn, backContent, manualEntryContent, flashOnContent, flashOffContent, centerContent, frameSize, cornerColor, topOffset, bottomOffset, }: ScannerChromeOverlayProps): React.JSX.Element;
18
+ export default ScannerChromeOverlay;
19
+ //# sourceMappingURL=ScannerChromeOverlay.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ScannerChromeOverlay.d.ts","sourceRoot":"","sources":["../../../src/ScannerChromeOverlay.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAU1B,KAAK,yBAAyB,GAAG;IAC/B,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IACzB,kBAAkB,CAAC,EAAE,MAAM,IAAI,CAAC;IAChC,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC9B,kBAAkB,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACrC,cAAc,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACjC,eAAe,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAClC,aAAa,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAsBF,wBAAgB,oBAAoB,CAAC,EACnC,WAAW,EACX,kBAAkB,EAClB,YAAY,EACZ,SAAiB,EACjB,WAAW,EACX,kBAAkB,EAClB,cAAc,EACd,eAAe,EACf,aAAa,EACb,SAAe,EACf,WAAqB,EACrB,SAAc,EACd,YAAiB,GAClB,EAAE,yBAAyB,qBAuD3B;AAkGD,eAAe,oBAAoB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"TextVinPrompt.d.ts","sourceRoot":"","sources":["../../../src/TextVinPrompt.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAS1B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE5C,KAAK,kBAAkB,GAAG;IACxB,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,YAAY,EAAE,CAAC;IAC3B,SAAS,EAAE,CAAC,SAAS,EAAE,YAAY,KAAK,IAAI,CAAC;IAC7C,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,EAC5B,OAAO,EACP,UAAU,EACV,SAAS,EACT,SAAS,EACT,KAAsB,EACtB,QAAQ,EACR,WAAuB,EACvB,WAAuB,GACxB,EAAE,kBAAkB,4BA0CpB;AAoED,eAAe,aAAa,CAAC"}
1
+ {"version":3,"file":"TextVinPrompt.d.ts","sourceRoot":"","sources":["../../../src/TextVinPrompt.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAS1B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE5C,KAAK,kBAAkB,GAAG;IACxB,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,YAAY,EAAE,CAAC;IAC3B,SAAS,EAAE,CAAC,SAAS,EAAE,YAAY,KAAK,IAAI,CAAC;IAC7C,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,EAC5B,OAAO,EACP,UAAU,EACV,SAAS,EACT,SAAS,EACT,KAAsB,EACtB,QAAQ,EACR,WAAuB,EACvB,WAAuB,GACxB,EAAE,kBAAkB,4BA6CpB;AAgFD,eAAe,aAAa,CAAC"}
@@ -9,4 +9,5 @@ export { isValidVin } from './vinUtils';
9
9
  export { TextVinPrompt } from './TextVinPrompt';
10
10
  export { PendingVinBanner } from './PendingVinBanner';
11
11
  export { ManualVinInput } from './ManualVinInput';
12
+ export { ScannerChromeOverlay } from './ScannerChromeOverlay';
12
13
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA2C,MAAM,OAAO,CAAC;AAyBhE,eAAO,MAAM,MAAM;;;gFAqQjB,CAAC;AA0BH,YAAY,EACV,gBAAgB,EAChB,aAAa,EACb,qBAAqB,EACrB,WAAW,EACX,cAAc,EACd,WAAW,EACX,gBAAgB,EAChB,aAAa,EACb,aAAa,EACb,sBAAsB,EACtB,kBAAkB,EAClB,YAAY,EACZ,kBAAkB,EAClB,eAAe,EACf,iBAAiB,EACjB,aAAa,GACd,MAAM,SAAS,CAAC;AAEjB,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA2C,MAAM,OAAO,CAAC;AAyBhE,eAAO,MAAM,MAAM;;;gFAuQjB,CAAC;AA2BH,YAAY,EACV,gBAAgB,EAChB,aAAa,EACb,qBAAqB,EACrB,WAAW,EACX,cAAc,EACd,WAAW,EACX,gBAAgB,EAChB,aAAa,EACb,aAAa,EACb,sBAAsB,EACtB,kBAAkB,EAClB,YAAY,EACZ,kBAAkB,EAClB,eAAe,EACf,iBAAiB,EACjB,aAAa,GACd,MAAM,SAAS,CAAC;AAEjB,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"scanBarcodes.d.ts","sourceRoot":"","sources":["../../../src/scanBarcodes.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAGV,oBAAoB,EAIpB,kBAAkB,EAEnB,MAAM,SAAS,CAAC;AAsLjB,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,kBAAkB,GAC1B,oBAAoB,CA2BtB"}
1
+ {"version":3,"file":"scanBarcodes.d.ts","sourceRoot":"","sources":["../../../src/scanBarcodes.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAGV,oBAAoB,EAIpB,kBAAkB,EAEnB,MAAM,SAAS,CAAC;AAsLjB,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,kBAAkB,GAC1B,oBAAoB,CA+BtB"}
@@ -1 +1 @@
1
- {"version":3,"file":"scanText.d.ts","sourceRoot":"","sources":["../../../src/scanText.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAKV,sBAAsB,EACtB,qBAAqB,EACtB,MAAM,SAAS,CAAC;AAkJjB,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,sBAAsB,GAC9B,qBAAqB,CA4BvB"}
1
+ {"version":3,"file":"scanText.d.ts","sourceRoot":"","sources":["../../../src/scanText.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAKV,sBAAsB,EACtB,qBAAqB,EACtB,MAAM,SAAS,CAAC;AAkJjB,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,sBAAsB,GAC9B,qBAAqB,CAgCvB"}
@@ -104,6 +104,12 @@ export type BarcodeScannerOptions = {
104
104
  export type TextScannerOptions = {
105
105
  enabled?: boolean;
106
106
  language?: TextRecognitionLanguage;
107
+ /**
108
+ * Optional regex pattern forwarded to the native text recognizer to reduce
109
+ * bridge traffic before VIN validation runs in JS.
110
+ * Default: `[A-Z0-9]{10,}`
111
+ */
112
+ validationPattern?: string;
107
113
  /**
108
114
  * When true, text VINs are surfaced via `onTextPending` and must be
109
115
  * confirmed manually; barcode VINs still emit immediately.
@@ -162,7 +168,7 @@ export type DetectionOptions = {
162
168
  /**
163
169
  * Enable intelligent frame quality checks to skip blurry or dark frames.
164
170
  * This improves accuracy by only processing high-quality frames.
165
- * Note: currently unused; retained for backward compatibility.
171
+ * Set to `false` to disable the luma/sharpness gates entirely.
166
172
  */
167
173
  enableFrameQualityCheck?: boolean;
168
174
  /**
@@ -177,7 +183,7 @@ export type DetectionOptions = {
177
183
  minSharpness?: number;
178
184
  /**
179
185
  * Minimum candidate confidence required before emitting.
180
- * Default: 0.6
186
+ * Default: 0 (checksum validity is the primary acceptance gate).
181
187
  */
182
188
  minConfidence?: number;
183
189
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"useVinScanner.d.ts","sourceRoot":"","sources":["../../../src/useVinScanner.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAmB,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAUhF,wBAAgB,aAAa,CAAC,OAAO,CAAC,EAAE,iBAAiB;;;sCAwSzC,MAAM;EAiCrB"}
1
+ {"version":3,"file":"useVinScanner.d.ts","sourceRoot":"","sources":["../../../src/useVinScanner.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAmB,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAUhF,wBAAgB,aAAa,CAAC,OAAO,CAAC,EAAE,iBAAiB;;;sCAoTzC,MAAM;EAqCrB"}
@@ -1 +1 @@
1
- {"version":3,"file":"vinUtils.d.ts","sourceRoot":"","sources":["../../../src/vinUtils.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAEV,gBAAgB,EAChB,gBAAgB,EAChB,kBAAkB,EAClB,aAAa,EACb,UAAU,EAEV,uBAAuB,EACvB,YAAY,EAGZ,iBAAiB,EACjB,cAAc,EACf,MAAM,SAAS,CAAC;AAEjB,MAAM,MAAM,yBAAyB,GAAG;IACtC,OAAO,EAAE;QACP,OAAO,EAAE,OAAO,CAAC;QACjB,OAAO,EAAE,kBAAkB,CAAC;KAC7B,CAAC;IACF,IAAI,EAAE;QACJ,OAAO,EAAE,OAAO,CAAC;QACjB,QAAQ,EAAE,uBAAuB,CAAC;QAClC,iBAAiB,CAAC,EAAE,MAAM,CAAC;QAC3B,mBAAmB,EAAE,OAAO,CAAC;QAC7B,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,yBAAyB,CAAC,GAAG;QACvE,gBAAgB,EAAE,MAAM,CAAC;QACzB,YAAY,EAAE,MAAM,CAAC;QACrB,gBAAgB,EAAE,gBAAgB,GAAG,IAAI,CAAC;QAC1C,UAAU,EAAE,UAAU,GAAG,IAAI,CAAC;QAC9B,OAAO,EAAE,MAAM,CAAC;QAChB,YAAY,EAAE,MAAM,CAAC;QACrB,aAAa,EAAE,MAAM,CAAC;QACtB,oBAAoB,EAAE,MAAM,CAAC;KAC9B,CAAC;IACF,WAAW,EAAE,OAAO,CAAC;IACrB,aAAa,EAAE,aAAa,CAAC;IAC7B,mBAAmB,EAAE,MAAM,CAAC;CAC7B,CAAC;AAgCF,eAAO,MAAM,cAAc,GACzB,UAAU,iBAAiB,KAC1B,yBA+DF,CAAC;AA8VF;;;;;GAKG;AACH,eAAO,MAAM,UAAU,GAAI,OAAO,MAAM,KAAG,OAoC1C,CAAC;AAuLF,eAAO,MAAM,kBAAkB,GAC7B,SAAS,cAAc,EACvB,SAAS,yBAAyB,KACjC,YAAY,EAyBd,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAC7B,YAAY,YAAY,EAAE,EAC1B,SAAS,yBAAyB,KACjC,YAAY,GAAG,IAQjB,CAAC"}
1
+ {"version":3,"file":"vinUtils.d.ts","sourceRoot":"","sources":["../../../src/vinUtils.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAEV,gBAAgB,EAChB,gBAAgB,EAChB,kBAAkB,EAClB,aAAa,EACb,UAAU,EAEV,uBAAuB,EACvB,YAAY,EAGZ,iBAAiB,EACjB,cAAc,EACf,MAAM,SAAS,CAAC;AAEjB,MAAM,MAAM,yBAAyB,GAAG;IACtC,OAAO,EAAE;QACP,OAAO,EAAE,OAAO,CAAC;QACjB,OAAO,EAAE,kBAAkB,CAAC;KAC7B,CAAC;IACF,IAAI,EAAE;QACJ,OAAO,EAAE,OAAO,CAAC;QACjB,QAAQ,EAAE,uBAAuB,CAAC;QAClC,iBAAiB,CAAC,EAAE,MAAM,CAAC;QAC3B,mBAAmB,EAAE,OAAO,CAAC;QAC7B,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,yBAAyB,CAAC,GAAG;QACvE,gBAAgB,EAAE,MAAM,CAAC;QACzB,YAAY,EAAE,MAAM,CAAC;QACrB,gBAAgB,EAAE,gBAAgB,GAAG,IAAI,CAAC;QAC1C,UAAU,EAAE,UAAU,GAAG,IAAI,CAAC;QAC9B,OAAO,EAAE,MAAM,CAAC;QAChB,YAAY,EAAE,MAAM,CAAC;QACrB,aAAa,EAAE,MAAM,CAAC;QACtB,oBAAoB,EAAE,MAAM,CAAC;KAC9B,CAAC;IACF,WAAW,EAAE,OAAO,CAAC;IACrB,aAAa,EAAE,aAAa,CAAC;IAC7B,mBAAmB,EAAE,MAAM,CAAC;CAC7B,CAAC;AAiCF,eAAO,MAAM,cAAc,GACzB,UAAU,iBAAiB,KAC1B,yBAkEF,CAAC;AA8VF;;;;;GAKG;AACH,eAAO,MAAM,UAAU,GAAI,OAAO,MAAM,KAAG,OAoC1C,CAAC;AAuLF,eAAO,MAAM,kBAAkB,GAC7B,SAAS,cAAc,EACvB,SAAS,yBAAyB,KACjC,YAAY,EAyBd,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAC7B,YAAY,YAAY,EAAE,EAC1B,SAAS,yBAAyB,KACjC,YAAY,GAAG,IAQjB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mleonard9/vin-scanner",
3
- "version": "1.5.1",
3
+ "version": "1.5.2",
4
4
  "description": "High-performance VIN scanner for React Native Vision Camera powered by Google ML Kit barcode + text recognition.",
5
5
  "main": "lib/commonjs/index",
6
6
  "module": "lib/module/index",
@@ -40,7 +40,7 @@ const DIGITS = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'];
40
40
  export function ManualVinInput({
41
41
  initialValue = '',
42
42
  onSubmit,
43
- buttonLabel = 'Use VIN',
43
+ buttonLabel = 'Book It',
44
44
  buttonColor = '#0A84FF',
45
45
  placeholder = 'Enter VIN (17 chars)',
46
46
  }: ManualVinInputProps) {
@@ -122,24 +122,31 @@ function Key({
122
122
  const styles = StyleSheet.create({
123
123
  container: {
124
124
  width: '100%',
125
- padding: 12,
126
- backgroundColor: '#0D0D0D',
127
- borderRadius: 12,
125
+ paddingVertical: 24,
126
+ paddingHorizontal: 12,
127
+ backgroundColor: 'white',
128
+ borderRadius: 20,
129
+ shadowColor: '#000',
130
+ shadowOffset: { width: 0, height: 2 },
131
+ shadowOpacity: 0.25,
132
+ shadowRadius: 4,
133
+ elevation: 5,
128
134
  },
129
135
  input: {
130
- backgroundColor: '#111827',
131
- color: 'white',
136
+ backgroundColor: 'white',
137
+ color: '#111827',
132
138
  paddingHorizontal: 12,
133
139
  paddingVertical: 10,
134
- borderRadius: 8,
135
- fontSize: 16,
140
+ borderRadius: 5,
141
+ fontSize: 18,
136
142
  letterSpacing: 1,
137
143
  borderWidth: 1,
138
- borderColor: '#1F2937',
144
+ borderColor: '#111827',
139
145
  marginBottom: 10,
140
146
  },
141
147
  errorInput: {
142
- borderColor: '#EF4444',
148
+ borderColor: '#DC2626',
149
+ borderWidth: 2,
143
150
  },
144
151
  row: {
145
152
  flexDirection: 'row',
@@ -150,7 +157,7 @@ const styles = StyleSheet.create({
150
157
  key: {
151
158
  paddingVertical: 10,
152
159
  paddingHorizontal: 12,
153
- backgroundColor: '#1F2937',
160
+ backgroundColor: '#111827',
154
161
  borderRadius: 8,
155
162
  minWidth: 42,
156
163
  alignItems: 'center',
@@ -164,8 +171,8 @@ const styles = StyleSheet.create({
164
171
  fontWeight: '700',
165
172
  },
166
173
  submit: {
167
- marginTop: 8,
168
- paddingVertical: 12,
174
+ marginTop: 12,
175
+ paddingVertical: 14,
169
176
  borderRadius: 10,
170
177
  alignItems: 'center',
171
178
  },
@@ -175,9 +182,9 @@ const styles = StyleSheet.create({
175
182
  fontWeight: '700',
176
183
  },
177
184
  errorText: {
178
- color: '#F87171',
185
+ color: '#DC2626',
179
186
  marginTop: 6,
180
- fontSize: 13,
187
+ fontSize: 14,
181
188
  },
182
189
  });
183
190
 
@@ -1,5 +1,13 @@
1
1
  import React from 'react';
2
- import { Animated, View, Text, Pressable, StyleSheet } from 'react-native';
2
+ import {
3
+ Animated,
4
+ View,
5
+ Text,
6
+ Pressable,
7
+ StyleSheet,
8
+ ScrollView,
9
+ Platform,
10
+ } from 'react-native';
3
11
  import type { VinCandidate } from './types';
4
12
 
5
13
  type PendingVinBannerProps = {
@@ -9,6 +17,7 @@ type PendingVinBannerProps = {
9
17
  onDismiss?: () => void;
10
18
  buttonLabel?: string;
11
19
  buttonColor?: string;
20
+ bottomOffset?: number;
12
21
  };
13
22
 
14
23
  /**
@@ -20,8 +29,9 @@ export function PendingVinBanner({
20
29
  candidates,
21
30
  onConfirm,
22
31
  onDismiss,
23
- buttonLabel = 'Use VIN',
32
+ buttonLabel = 'Book It',
24
33
  buttonColor = '#0A84FF',
34
+ bottomOffset = 140,
25
35
  }: PendingVinBannerProps) {
26
36
  const anim = React.useRef(new Animated.Value(0)).current;
27
37
 
@@ -43,31 +53,46 @@ export function PendingVinBanner({
43
53
  return (
44
54
  <Animated.View
45
55
  pointerEvents={visible ? 'auto' : 'none'}
46
- style={[styles.container, { transform: [{ translateY }], opacity: anim }]}
56
+ style={[
57
+ styles.container,
58
+ { bottom: bottomOffset, transform: [{ translateY }], opacity: anim },
59
+ ]}
47
60
  >
48
61
  <View style={styles.header}>
49
62
  <Text style={styles.label}>
50
63
  {candidates.length > 1
51
- ? `${candidates.length} VINs detected`
52
- : 'VIN detected'}
64
+ ? `${candidates.length} VINs Detected`
65
+ : 'VIN Detected'}
53
66
  </Text>
54
67
  {onDismiss && (
55
68
  <Pressable onPress={onDismiss} hitSlop={12} style={styles.dismiss}>
56
- <Text style={styles.dismissText}>Dismiss</Text>
69
+ <Text style={styles.dismissText}>Close</Text>
57
70
  </Pressable>
58
71
  )}
59
72
  </View>
60
- {candidates.map((vin) => (
61
- <View key={vin.value} style={styles.row}>
62
- <Text style={styles.vin}>{vin.value}</Text>
63
- <Pressable
64
- onPress={() => onConfirm(vin)}
65
- style={[styles.button, { backgroundColor: buttonColor }]}
73
+ <ScrollView
74
+ style={styles.list}
75
+ scrollEnabled={candidates.length > 1}
76
+ showsVerticalScrollIndicator={candidates.length > 1}
77
+ nestedScrollEnabled
78
+ >
79
+ {candidates.map((vin, index) => (
80
+ <View
81
+ key={`${vin.value}-${index}`}
82
+ style={[styles.row, index > 0 && styles.rowWithDivider]}
66
83
  >
67
- <Text style={styles.buttonText}>{buttonLabel}</Text>
68
- </Pressable>
69
- </View>
70
- ))}
84
+ <Text style={styles.vin} numberOfLines={1} adjustsFontSizeToFit>
85
+ {vin.value}
86
+ </Text>
87
+ <Pressable
88
+ onPress={() => onConfirm(vin)}
89
+ style={[styles.button, { backgroundColor: buttonColor }]}
90
+ >
91
+ <Text style={styles.buttonText}>{buttonLabel}</Text>
92
+ </Pressable>
93
+ </View>
94
+ ))}
95
+ </ScrollView>
71
96
  </Animated.View>
72
97
  );
73
98
  }
@@ -77,44 +102,58 @@ const styles = StyleSheet.create({
77
102
  position: 'absolute',
78
103
  left: 16,
79
104
  right: 16,
80
- bottom: 40,
81
- backgroundColor: 'rgba(0,0,0,0.9)',
105
+ zIndex: 200,
106
+ backgroundColor: 'rgba(0, 0, 0, 0.88)',
82
107
  borderRadius: 16,
83
- padding: 14,
84
- gap: 10,
108
+ paddingHorizontal: 16,
109
+ paddingTop: 14,
110
+ paddingBottom: 16,
85
111
  },
86
112
  header: {
87
113
  flexDirection: 'row',
88
114
  alignItems: 'center',
89
115
  justifyContent: 'space-between',
116
+ marginBottom: 10,
90
117
  },
91
118
  label: {
92
- color: '#E5E7EB',
93
- fontSize: 14,
94
- fontWeight: '700',
119
+ color: 'rgba(255, 255, 255, 0.7)',
120
+ fontSize: 13,
121
+ fontWeight: '600',
95
122
  },
96
123
  dismiss: {
97
- padding: 4,
124
+ padding: 2,
98
125
  },
99
126
  dismissText: {
100
- color: '#9CA3AF',
127
+ color: 'rgba(255, 255, 255, 0.6)',
101
128
  fontSize: 12,
102
129
  },
130
+ list: {
131
+ maxHeight: 172,
132
+ },
103
133
  row: {
104
134
  flexDirection: 'row',
105
135
  alignItems: 'center',
106
136
  justifyContent: 'space-between',
107
- gap: 10,
137
+ paddingVertical: 8,
138
+ },
139
+ rowWithDivider: {
140
+ borderTopWidth: StyleSheet.hairlineWidth,
141
+ borderTopColor: 'rgba(255,255,255,0.15)',
108
142
  },
109
143
  vin: {
110
144
  flex: 1,
111
145
  color: 'white',
112
146
  fontSize: 16,
147
+ fontWeight: '700',
148
+ fontFamily: Platform.OS === 'ios' ? 'Menlo' : 'monospace',
113
149
  letterSpacing: 1,
150
+ marginRight: 12,
114
151
  },
115
152
  button: {
116
- paddingHorizontal: 14,
153
+ flexDirection: 'row',
154
+ alignItems: 'center',
117
155
  paddingVertical: 10,
156
+ paddingHorizontal: 16,
118
157
  borderRadius: 10,
119
158
  },
120
159
  buttonText: {
@@ -0,0 +1,214 @@
1
+ import React from 'react';
2
+ import {
3
+ View,
4
+ Pressable,
5
+ Text,
6
+ StyleSheet,
7
+ type StyleProp,
8
+ type ViewStyle,
9
+ } from 'react-native';
10
+
11
+ type ScannerChromeOverlayProps = {
12
+ onBackPress?: () => void;
13
+ onManualEntryPress?: () => void;
14
+ onFlashPress?: () => void;
15
+ isTorchOn?: boolean;
16
+ backContent?: React.ReactNode;
17
+ manualEntryContent?: React.ReactNode;
18
+ flashOnContent?: React.ReactNode;
19
+ flashOffContent?: React.ReactNode;
20
+ centerContent?: React.ReactNode;
21
+ frameSize?: number;
22
+ cornerColor?: string;
23
+ topOffset?: number;
24
+ bottomOffset?: number;
25
+ };
26
+
27
+ const ActionButton = ({
28
+ onPress,
29
+ children,
30
+ style,
31
+ }: {
32
+ onPress?: () => void;
33
+ children: React.ReactNode;
34
+ style?: StyleProp<ViewStyle>;
35
+ }) => {
36
+ if (!onPress) {
37
+ return null;
38
+ }
39
+
40
+ return (
41
+ <Pressable onPress={onPress} style={[styles.actionButton, style]}>
42
+ {children}
43
+ </Pressable>
44
+ );
45
+ };
46
+
47
+ export function ScannerChromeOverlay({
48
+ onBackPress,
49
+ onManualEntryPress,
50
+ onFlashPress,
51
+ isTorchOn = false,
52
+ backContent,
53
+ manualEntryContent,
54
+ flashOnContent,
55
+ flashOffContent,
56
+ centerContent,
57
+ frameSize = 240,
58
+ cornerColor = 'white',
59
+ topOffset = 64,
60
+ bottomOffset = 64,
61
+ }: ScannerChromeOverlayProps) {
62
+ const halfFrame = frameSize / 2;
63
+
64
+ return (
65
+ <>
66
+ <View pointerEvents="box-none" style={styles.actionContainer}>
67
+ <ActionButton
68
+ onPress={onBackPress}
69
+ style={[styles.backButton, { top: topOffset }]}
70
+ >
71
+ {backContent ?? <Text style={styles.actionText}>Back</Text>}
72
+ </ActionButton>
73
+
74
+ <ActionButton
75
+ onPress={onManualEntryPress}
76
+ style={[styles.manualButton, { top: topOffset }]}
77
+ >
78
+ {manualEntryContent ?? <Text style={styles.actionText}>VIN</Text>}
79
+ </ActionButton>
80
+
81
+ <ActionButton
82
+ onPress={onFlashPress}
83
+ style={[styles.flashButton, { bottom: bottomOffset }]}
84
+ >
85
+ {isTorchOn
86
+ ? (flashOnContent ?? (
87
+ <Text style={styles.actionText}>Torch Off</Text>
88
+ ))
89
+ : (flashOffContent ?? <Text style={styles.actionText}>Torch</Text>)}
90
+ </ActionButton>
91
+
92
+ {centerContent ? (
93
+ <View style={styles.centerContent}>{centerContent}</View>
94
+ ) : null}
95
+ </View>
96
+
97
+ <View
98
+ pointerEvents="none"
99
+ style={[
100
+ styles.viewFinderOverlay,
101
+ {
102
+ width: frameSize,
103
+ height: frameSize,
104
+ marginLeft: -halfFrame,
105
+ marginTop: -halfFrame,
106
+ },
107
+ ]}
108
+ >
109
+ <Corner position="topLeft" color={cornerColor} />
110
+ <Corner position="topRight" color={cornerColor} />
111
+ <Corner position="bottomLeft" color={cornerColor} />
112
+ <Corner position="bottomRight" color={cornerColor} />
113
+ </View>
114
+ </>
115
+ );
116
+ }
117
+
118
+ function Corner({
119
+ position,
120
+ color,
121
+ }: {
122
+ position: 'topLeft' | 'topRight' | 'bottomLeft' | 'bottomRight';
123
+ color: string;
124
+ }) {
125
+ const styleMap = {
126
+ topLeft: styles.cornerTopLeft,
127
+ topRight: styles.cornerTopRight,
128
+ bottomLeft: styles.cornerBottomLeft,
129
+ bottomRight: styles.cornerBottomRight,
130
+ };
131
+
132
+ return <View style={[styleMap[position], { borderColor: color }]} />;
133
+ }
134
+
135
+ const styles = StyleSheet.create({
136
+ actionContainer: {
137
+ ...StyleSheet.absoluteFillObject,
138
+ zIndex: 100,
139
+ },
140
+ actionButton: {
141
+ position: 'absolute',
142
+ zIndex: 101,
143
+ paddingHorizontal: 12,
144
+ paddingVertical: 8,
145
+ borderRadius: 999,
146
+ backgroundColor: 'rgba(0, 0, 0, 0.45)',
147
+ },
148
+ backButton: {
149
+ left: 24,
150
+ },
151
+ manualButton: {
152
+ right: 24,
153
+ },
154
+ flashButton: {
155
+ left: 24,
156
+ },
157
+ actionText: {
158
+ color: 'white',
159
+ fontSize: 14,
160
+ fontWeight: '700',
161
+ },
162
+ centerContent: {
163
+ position: 'absolute',
164
+ top: 40,
165
+ left: 0,
166
+ right: 0,
167
+ alignItems: 'center',
168
+ zIndex: 101,
169
+ },
170
+ viewFinderOverlay: {
171
+ position: 'absolute',
172
+ top: '50%',
173
+ left: '50%',
174
+ borderColor: 'transparent',
175
+ },
176
+ cornerTopLeft: {
177
+ position: 'absolute',
178
+ top: 0,
179
+ left: 0,
180
+ width: 20,
181
+ height: 20,
182
+ borderTopWidth: 2,
183
+ borderLeftWidth: 2,
184
+ },
185
+ cornerTopRight: {
186
+ position: 'absolute',
187
+ top: 0,
188
+ right: 0,
189
+ width: 20,
190
+ height: 20,
191
+ borderTopWidth: 2,
192
+ borderRightWidth: 2,
193
+ },
194
+ cornerBottomLeft: {
195
+ position: 'absolute',
196
+ bottom: 0,
197
+ left: 0,
198
+ width: 20,
199
+ height: 20,
200
+ borderBottomWidth: 2,
201
+ borderLeftWidth: 2,
202
+ },
203
+ cornerBottomRight: {
204
+ position: 'absolute',
205
+ bottom: 0,
206
+ right: 0,
207
+ width: 20,
208
+ height: 20,
209
+ borderBottomWidth: 2,
210
+ borderRightWidth: 2,
211
+ },
212
+ });
213
+
214
+ export default ScannerChromeOverlay;