Giter Club home page Giter Club logo

react-scanner's Introduction

React QR Scanner

NPM Version NPM Downloads

@alzera/react-scanner is a lightweight and simple-to-use React library for integrating QR code scanning functionality into your web applications. The primary goal of this library is to provide a hassle-free solution for developers who need a quick and efficient way to incorporate QR code scanning without the bloat.

Features

  • Barcode Formats: Support many different barcode formats, more on here.
  • Legacy: Support image input as camera fallback.
  • Low-level API: Expose low-level API to be able to create your own layout.
  • Flash/Torch: Support handling torch when ever possible.

Installation

Install @alzera/react-scanner using your preferred package manager:

npm install @alzera/react-scanner

Components

BarcodeScanner

Combined version of Scanner component and DropZone component, comes with a built-in button that allows users to switch between the scanning mode and the drop zone mode.

Basic Example

import React, { useState } from 'react';
import { BarcodeScanner } from '@alzera/react-scanner';

export default function MyComponent(){
  const [scannedData, setScannedData] = useState('');

  return (
    <div style={{ maxWidth: '500px' }}>
      <BarcodeScanner onScan={(d) => d && setScannedData(d)} />
      {scannedData && <p>Scanned Data: {scannedData}</p>}
    </div>
  );
};

Properties

Name Type Description
onScan* (value: string) => void Callback function triggered when a QR code is scanned. Passes the scanned data as an argument.
onError (error: any) => void Callback function triggered when an error occurs during scanning.
delay number Set the delay (in milliseconds) between scans.
aspectRatio string Set the aspect ratio of the scanner window, using css aspect-ratio.
decoderOptions BarcodeDetectorOptions Exposed BarcodeScanner config, more on here.
switchLabel (isScanner: boolean) => React.ReactNode Function to customize the label for the switch component.
dropChildren React.ReactNode React node to customize the content of the drop area.
style React.CSSProperties Apply custom styles to the scanner component.
className string Add custom class names to the scanner component.

Scanner

Simple component wrapper for barcode-detector library.

Basic Example

import React, { useState } from 'react';
import { Scanner } from '@alzera/react-scanner';

export default function MyComponent(){
  const [scannedData, setScannedData] = useState('');

  return (
    <div style={{ maxWidth: '500px' }}>
      <Scanner onScan={(d) => d && setScannedData(d)} />
      {scannedData && <p>Scanned Data: {scannedData}</p>}
    </div>
  );
};

Properties

Name Type Description
onScan* (value: string) => void Callback function triggered when a QR code is scanned. Passes the scanned data as an argument.
onError (error: any) => void Callback function triggered when an error occurs during scanning.
delay number Set the delay (in milliseconds) between scans.
aspectRatio string Set the aspect ratio of the scanner window, using css aspect-ratio.
decoderOptions BarcodeDetectorOptions Exposed BarcodeScanner config, more on here.
style React.CSSProperties Apply custom styles to the scanner component.
className string Add custom class names to the scanner component.

DropZone

Simple component wrapper for barcode-detector library.

Basic Example

import React, { useState } from 'react';
import { DropZone } from '@alzera/react-scanner';

export default function MyComponent(){
  const [scannedData, setScannedData] = useState('');

  return (
    <div style={{ maxWidth: '500px' }}>
      <DropZone onScan={(d) => d && setScannedData(d)} />
      {scannedData && <p>Scanned Data: {scannedData}</p>}
    </div>
  );
};

Properties

Name Type Description
onScan* (value: string) => void Callback function triggered when a QR code is scanned. Passes the scanned data as an argument.
onError (error: any) => void Callback function triggered when an error occurs during scanning.
children React.ReactNode React node to customize the content of the drop area.
decoderOptions BarcodeDetectorOptions Exposed BarcodeScanner config, more on here.
style React.CSSProperties Apply custom styles to the scanner component.
className string Add custom class names to the scanner component.

API

useDecoder

The useDecoder hook is designed to facilitate barcode detection, returning a ref to a decoder function that can be used to decode barcodes from images.

Parameter

Name Type Description
opts BarcodeDetectorOptions Exposed BarcodeScanner config, more on here.

Return

Type Description
(imageData: ImageBitmapSourceWebCodecs) => Promise<string | null> Function that take CanvasImageSourceWebCodecs, Blob or ImageData to be processed and return the decoded string or null if failed

useCamera

The useCamera hook is designed to facilitate easy to use camera.

Parameter

Name Type Description
enabled boolean Enable or disable the camera
onError (error: any) => void Callback function triggered when an error occurs during scanning.
facingMode 'user' | 'environment' | undefined Set the camera facing mode.
useLastDeviceId boolean Use the last selected device id.

Return

Name Type Description
preview React.RefObject<HTMLVideoElement> Reference object for video element.
camera.capabilities MediaTrackCapabilities | undefined Selected camera capabilities.
camera.state CameraState Reflect the current camera state, starting, display, stopping, idle.
camera.torch boolean State of torch.
device.list MediaDeviceInfo[] Reflect available devices options.
device.selected string | undefined State of selected device.

Contributing

We welcome contributions! Feel free to open issues, create pull requests, or provide feedback.

Happy scanning! ๐Ÿ“ท ๐Ÿš€

react-scanner's People

Contributors

alzera avatar

Stargazers

 avatar Hjortur Stefan Olafsson avatar Ze-Zheng Wu avatar Pedro Sousa avatar

Watchers

Hjortur Stefan Olafsson avatar

Forkers

jeremiahblanch

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.