npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

react-native-system-picker

v0.1.0

Published

React native picker

Downloads

2

Readme

IMPORTATNT NOTE: this is an early BETA of React Native System Picker only iOS is available at the moment. Android is coming soon (I promise). The library is well tested and stable, although the API structure and props may change in upcoming releases.

The React Native System Picker is a library designed to interface with the photo/video pickers provided by the system on iOS and Android. This specifically allows you to interface with the system provided pickers PHPicker and Android Photo Picker. This library is designed to be a drop-in replacement for react-native-image-picker and react-native-image-crop-picker.

Features

  • Built using TDD with explicit unit tests for each MIME type. See the list of supported MIME types below 🧪
  • Uses the latest APIs for photo picking on iOS and Android 📱
  • Correctly implements platform APIs without abusing permissions (more on this below) 🔒
  • Returns complete MIME type information, without unnecessarily stripping out information like other libraries 📄
  • Exposes methods for extracting metadata from images and videos outside of the picker flow. Read more about this problem here 📊

This library focuses on picking your photos and videos correctly. The native code has been rewritten from the ground up following the most up-to-date specifications for photo picking on iOS and Android.

A Quick Background of Photo Picking In React Naitve

Before installing this library, I'd like to explain how photo picking works and why you might prefer this library over others, such as react-native-image-picker or react-native-image-crop-picker.

As a contributor to react-native-image-picker in the last few years, I (@lukebrandonfarrell) noticed a number of design flaws. Which led me to create this new library from scratch. The main issue is that PHPicker on iOS and Android Photo Picker (their new picker in Android 11+) are designed so YOU DO NOT NEED TO REQUEST PERMISSIONS (You heard that correctly, no permissions dialog needed to pick photos). However, react-native-image-picker is designed in such a way that it requires you to request permissions just to read the metadata of the photo, which is NOT HOW THESE PICKERS ARE INTENDED TO BE USED. Does this mean we can't read exif data? Not at all. React Native System Picker returns full exif data for images without needing any platform permissions. If you wish to learn more about this issue, you can read my article: The right way to use PHPicker and retrieve EXIF data without requesting library permissions in Swift.

If this seems confusing, I understand. If you want to deep dive into the why and how, you can read either of the following:

Installation

npm install react-native-system-picker
# or
yarn add react-native-system-picker

Usage

Basic usage is as follows:

import { launchSystemLibrary } from 'react-native-system-picker';

launchSystemLibrary({
  filter: 'images',
  selectionLimit: 4,
  maxSize: 3000,
  quality: 0.8,
  imageOutputType: 'png',
  enableDebugMode: true,
}).then((result) => {
  setAssets(result);
});

If you are looking for more advanced usage, you can find the full documentation here.

Supported MIME Types

The following MIME types are supported by React Native System Picker. This list is as extensive as possible without needing to include third-party libraries such as FFmpeg. Based on all the data and research we have done on photo picking, this should cover 99.9% of cases. However, the library is designed to be extensible if we need additional MIME types.

MIME type support is backed by XCTestCase unit tests on iOS.

Image MIME Types

| Extension | MIME Type | Status | Platform | |-----------|--------------------------------|---------------|----------| | GIF | Graphics Interchange Format | Supported | iOS | | HEIC | High Efficiency Image Coding | Supported | iOS | | HEIF | High Efficiency Image Format | Supported | iOS | | PNG | Portable Network Graphics | Supported | iOS | | TIFF | Tagged Image File Format | Supported | iOS | | WEBP | WebP | Supported | iOS | | CR2 | Canon Raw 2 | Supported | iOS | | JPEG | Joint Photographic Experts Group | Supported | iOS | | DNG | Digital Negative | Supported | iOS | | ICO | Icon | Supported | iOS | | BMP | Bitmap | Supported | iOS | | NEF | Nikon Electronic Format | Supported | iOS | | EXR | OpenEXR | Supported | iOS | | JP2 | JPEG 2000 | Supported | iOS | | RAF | Raw Image Format | Supported | iOS | | PNM | Portable Any Map | Supported | iOS | | WBMP | Wireless Bitmap | Supported | iOS | | TGA | Targa | Supported | iOS | | SGI | Silicon Graphics Image | Supported | iOS | | RW2 | Raw (Panasonic) | Supported | iOS | | PSD | Photoshop Document | Supported | iOS | | PPM | Portable Pixel Map | Supported | iOS | | PGM | Portable GrayMap | Supported | iOS | | PFM | Portable FloatMap | Supported | iOS | | JPE | JPEG | Supported | iOS | | JFIF | JPEG File Interchange Format | Supported | iOS | | HDR | Radiance HDR | Supported | iOS | | DDS | DirectDraw Surface | Supported | iOS | | SVG | Scalable Vector Graphics | Not Supported | iOS | | ARW | Sony Alpha Raw | Not Supported | iOS | | PICT | Macintosh PICT | Not Supported | iOS | | PCX | PC Paintbrush | Not Supported | iOS | | RAS | Sun Raster | Not Supported | iOS | | XPM | X PixMap | Not Supported | iOS | | XBM | X BitMap | Not Supported | iOS | | EPS | Encapsulated PostScript | Not Supported | iOS | | NRW | Nikon Raw Image | Not Supported | iOS | | MNG | Multiple-image Network Graphics| Not Supported | iOS | | FTS | Flexible Image Transport System| Not Supported | iOS | | EMF | Enhanced Metafile | Not Supported | iOS | | CUR | Windows Cursor | Not Supported | iOS |

Video MIME Types

| Extension | MIME Type | Status | Platform | |-----------|--------------------------------|---------------|----------| | MP4 | MPEG-4 Part 14 | Supported | iOS | | MOV | QuickTime File Format | Supported | iOS | | 3GP | 3GPP | Supported | iOS | | AVI | Audio Video Interleave | Not Supported | iOS | | MKV | Matroska | Not Supported | iOS | | WMV | Windows Media Video | Not Supported | iOS | | FLV | Flash Video | Not Supported | iOS | | WEBM | WebM | Not Supported | iOS | | DIVX | DivX | Not Supported | iOS | | ASF | Advanced Systems Format | Not Supported | iOS | | RM | RealMedia | Not Supported | iOS | | OGV | Ogg Video | Not Supported | iOS | | MXF | MXF | Not Supported | iOS | | MTS | MPEG Transport Stream | Not Supported | iOS | | MPG | MPEG-1 | Not Supported | iOS | | MJPEG | Motion JPEG | Not Supported | iOS | | MPEG | Motion Picture Experts Group | Not Supported | iOS | | FLV | Flash Video | Not Supported | iOS | | MKV | Matroska Video | Not Supported | iOS |

Contributing

See the contributing guide to learn how to contribute to the repository and the development workflow.

License

MIT


Made with create-react-native-library