Showing preview only (592K chars total). Download the full file or copy to clipboard to get everything.
Repository: baronha/react-native-multiple-image-picker
Branch: main
Commit: defc08c12fe7
Files: 239
Total size: 528.8 KB
Directory structure:
gitextract_k5e7rspq/
├── .circleci/
│ └── config.yml
├── .github/
│ ├── FUNDING.yml
│ └── workflows/
│ └── docs.yml
├── .gitignore
├── .npmignore
├── CONTRIBUTING.md
├── LICENSE
├── MultipleImagePicker.podspec
├── README.md
├── android/
│ ├── CMakeLists.txt
│ ├── build.gradle
│ ├── gradle.properties
│ └── src/
│ └── main/
│ ├── AndroidManifest.xml
│ ├── cpp/
│ │ └── cpp-adapter.cpp
│ ├── java/
│ │ └── com/
│ │ └── margelo/
│ │ └── nitro/
│ │ └── multipleimagepicker/
│ │ ├── CameraEngine.kt
│ │ ├── Constant.kt
│ │ ├── CropEngine.kt
│ │ ├── ExoPlayerEngine.kt
│ │ ├── GlideEngine.kt
│ │ ├── ImageLoaderUtils.kt
│ │ ├── LoadingDialog.kt
│ │ ├── MultipleImagePicker.kt
│ │ ├── MultipleImagePickerImp.kt
│ │ ├── MultipleImagePickerPackage.java
│ │ ├── PictureSelectorEngineImp.kt
│ │ └── VideoThumbnailEngine.kt
│ └── res/
│ ├── anim/
│ │ └── anim_modal_in.xml
│ ├── drawable/
│ │ ├── checkbox_selector.xml
│ │ ├── complete_button.xml
│ │ ├── ic_checkmark.xml
│ │ ├── ic_down.xml
│ │ ├── num_oval.xml
│ │ ├── picture_not_selected.xml
│ │ ├── picture_selector.xml
│ │ ├── preview_gallery_item.xml
│ │ └── preview_gallery_white_bg.xml
│ ├── layout/
│ │ └── loading_dialog.xml
│ └── values/
│ ├── colors.xml
│ └── styles.xml
├── babel.config.js
├── docs/
│ ├── .gitignore
│ ├── docs/
│ │ ├── CAMERA.mdx
│ │ ├── CONFIG.mdx
│ │ ├── CROP.mdx
│ │ ├── GETTING_STARTED.mdx
│ │ ├── PREVIEW.mdx
│ │ ├── RESULT.mdx
│ │ ├── SHOWCASE/
│ │ │ ├── index.mdx
│ │ │ ├── showcase.css
│ │ │ └── showcase.json
│ │ ├── USAGE.mdx
│ │ └── index.md
│ ├── docusaurus.config.ts
│ ├── package.json
│ ├── patches/
│ │ └── @gorhom+docusaurus-preset+1.0.2.patch
│ ├── sidebars.ts
│ ├── src/
│ │ └── css/
│ │ └── custom.css
│ ├── static/
│ │ └── .nojekyll
│ └── tsconfig.json
├── example/
│ ├── .gitignore
│ ├── App.tsx
│ ├── Gemfile
│ ├── README.md
│ ├── app.json
│ ├── babel.config.js
│ ├── metro.config.js
│ ├── package.json
│ ├── react-native.config.js
│ ├── src/
│ │ ├── assets/
│ │ │ └── index.ts
│ │ ├── common/
│ │ │ └── const.ts
│ │ ├── components/
│ │ │ ├── BottomSheet.tsx
│ │ │ ├── Button.tsx
│ │ │ ├── CheckBox.tsx
│ │ │ ├── CodeTag.tsx
│ │ │ ├── Container.tsx
│ │ │ ├── CounterView.tsx
│ │ │ ├── Divider.tsx
│ │ │ ├── Input.tsx
│ │ │ ├── Row.tsx
│ │ │ ├── SectionView.tsx
│ │ │ ├── SegmentControl.tsx
│ │ │ ├── Text.tsx
│ │ │ ├── View.tsx
│ │ │ └── index.tsx
│ │ ├── hook/
│ │ │ ├── context.ts
│ │ │ ├── index.ts
│ │ │ └── useTheme.ts
│ │ ├── index.tsx
│ │ └── theme/
│ │ ├── color.ts
│ │ └── size.ts
│ └── tsconfig.json
├── ios/
│ ├── Assets.swift
│ ├── Assets.xcassets/
│ │ ├── Contents.json
│ │ └── close.imageset/
│ │ └── Contents.json
│ ├── ErrorCode.swift
│ ├── HybridMultipleImagePicker+Camera.swift
│ ├── HybridMultipleImagePicker+Config.swift
│ ├── HybridMultipleImagePicker+Crop.swift
│ ├── HybridMultipleImagePicker+Preview.swift
│ ├── HybridMultipleImagePicker+Result.swift
│ ├── HybridMultipleImagePicker.swift
│ ├── MultipleImagePickerOnLoad.mm
│ ├── PHAsset+Thumbnail.swift
│ ├── PhotoCancelItem.swift
│ ├── TopViewController.swift
│ ├── UIColor+Hex.swift
│ ├── UIColor+React.swift
│ ├── UIImage.swift
│ ├── URL+Mime.swift
│ └── Utils.swift
├── nitro.json
├── nitrogen/
│ └── generated/
│ ├── .gitattributes
│ ├── android/
│ │ ├── MultipleImagePicker+autolinking.cmake
│ │ ├── MultipleImagePicker+autolinking.gradle
│ │ ├── MultipleImagePickerOnLoad.cpp
│ │ ├── MultipleImagePickerOnLoad.hpp
│ │ ├── c++/
│ │ │ ├── JCameraDevice.hpp
│ │ │ ├── JCameraResult.hpp
│ │ │ ├── JCropRatio.hpp
│ │ │ ├── JCropResult.hpp
│ │ │ ├── JFunc_void_CameraResult.hpp
│ │ │ ├── JFunc_void_CropResult.hpp
│ │ │ ├── JFunc_void_double.hpp
│ │ │ ├── JFunc_void_std__vector_PickerResult_.hpp
│ │ │ ├── JHybridMultipleImagePickerSpec.cpp
│ │ │ ├── JHybridMultipleImagePickerSpec.hpp
│ │ │ ├── JLanguage.hpp
│ │ │ ├── JMediaPreview.hpp
│ │ │ ├── JMediaType.hpp
│ │ │ ├── JNitroCameraConfig.hpp
│ │ │ ├── JNitroConfig.hpp
│ │ │ ├── JNitroCropConfig.hpp
│ │ │ ├── JNitroPreviewConfig.hpp
│ │ │ ├── JPickerCameraConfig.hpp
│ │ │ ├── JPickerCropConfig.hpp
│ │ │ ├── JPickerResult.hpp
│ │ │ ├── JPresentation.hpp
│ │ │ ├── JResultType.hpp
│ │ │ ├── JSelectBoxStyle.hpp
│ │ │ ├── JSelectMode.hpp
│ │ │ ├── JText.hpp
│ │ │ └── JTheme.hpp
│ │ └── kotlin/
│ │ └── com/
│ │ └── margelo/
│ │ └── nitro/
│ │ └── multipleimagepicker/
│ │ ├── CameraDevice.kt
│ │ ├── CameraResult.kt
│ │ ├── CropRatio.kt
│ │ ├── CropResult.kt
│ │ ├── Func_void_CameraResult.kt
│ │ ├── Func_void_CropResult.kt
│ │ ├── Func_void_double.kt
│ │ ├── Func_void_std__vector_PickerResult_.kt
│ │ ├── HybridMultipleImagePickerSpec.kt
│ │ ├── Language.kt
│ │ ├── MediaPreview.kt
│ │ ├── MediaType.kt
│ │ ├── MultipleImagePickerOnLoad.kt
│ │ ├── NitroCameraConfig.kt
│ │ ├── NitroConfig.kt
│ │ ├── NitroCropConfig.kt
│ │ ├── NitroPreviewConfig.kt
│ │ ├── PickerCameraConfig.kt
│ │ ├── PickerCropConfig.kt
│ │ ├── PickerResult.kt
│ │ ├── Presentation.kt
│ │ ├── ResultType.kt
│ │ ├── SelectBoxStyle.kt
│ │ ├── SelectMode.kt
│ │ ├── Text.kt
│ │ └── Theme.kt
│ ├── ios/
│ │ ├── MultipleImagePicker+autolinking.rb
│ │ ├── MultipleImagePicker-Swift-Cxx-Bridge.cpp
│ │ ├── MultipleImagePicker-Swift-Cxx-Bridge.hpp
│ │ ├── MultipleImagePicker-Swift-Cxx-Umbrella.hpp
│ │ ├── MultipleImagePickerAutolinking.mm
│ │ ├── MultipleImagePickerAutolinking.swift
│ │ ├── c++/
│ │ │ ├── HybridMultipleImagePickerSpecSwift.cpp
│ │ │ └── HybridMultipleImagePickerSpecSwift.hpp
│ │ └── swift/
│ │ ├── CameraDevice.swift
│ │ ├── CameraResult.swift
│ │ ├── CropRatio.swift
│ │ ├── CropResult.swift
│ │ ├── Func_void_CameraResult.swift
│ │ ├── Func_void_CropResult.swift
│ │ ├── Func_void_double.swift
│ │ ├── Func_void_std__vector_PickerResult_.swift
│ │ ├── HybridMultipleImagePickerSpec.swift
│ │ ├── HybridMultipleImagePickerSpec_cxx.swift
│ │ ├── Language.swift
│ │ ├── MediaPreview.swift
│ │ ├── MediaType.swift
│ │ ├── NitroCameraConfig.swift
│ │ ├── NitroConfig.swift
│ │ ├── NitroCropConfig.swift
│ │ ├── NitroPreviewConfig.swift
│ │ ├── PickerCameraConfig.swift
│ │ ├── PickerCropConfig.swift
│ │ ├── PickerResult.swift
│ │ ├── Presentation.swift
│ │ ├── ResultType.swift
│ │ ├── SelectBoxStyle.swift
│ │ ├── SelectMode.swift
│ │ ├── Text.swift
│ │ └── Theme.swift
│ └── shared/
│ └── c++/
│ ├── CameraDevice.hpp
│ ├── CameraResult.hpp
│ ├── CropRatio.hpp
│ ├── CropResult.hpp
│ ├── HybridMultipleImagePickerSpec.cpp
│ ├── HybridMultipleImagePickerSpec.hpp
│ ├── Language.hpp
│ ├── MediaPreview.hpp
│ ├── MediaType.hpp
│ ├── NitroCameraConfig.hpp
│ ├── NitroConfig.hpp
│ ├── NitroCropConfig.hpp
│ ├── NitroPreviewConfig.hpp
│ ├── PickerCameraConfig.hpp
│ ├── PickerCropConfig.hpp
│ ├── PickerResult.hpp
│ ├── Presentation.hpp
│ ├── ResultType.hpp
│ ├── SelectBoxStyle.hpp
│ ├── SelectMode.hpp
│ ├── Text.hpp
│ └── Theme.hpp
├── package.json
├── react-native.config.js
├── scripts/
│ └── bootstrap.js
├── src/
│ ├── index.ts
│ ├── specs/
│ │ └── MultipleImagePicker.nitro.ts
│ └── types/
│ ├── camera.ts
│ ├── config.ts
│ ├── crop.ts
│ ├── error.ts
│ ├── index.ts
│ ├── picker.ts
│ ├── preview.ts
│ └── result.ts
├── tsconfig.build.json
└── tsconfig.json
================================================
FILE CONTENTS
================================================
================================================
FILE: .circleci/config.yml
================================================
version: 2.1
executors:
default:
docker:
- image: circleci/node:10
working_directory: ~/project
commands:
attach_project:
steps:
- attach_workspace:
at: ~/project
jobs:
install-dependencies:
executor: default
steps:
- checkout
- attach_project
- restore_cache:
keys:
- dependencies-{{ checksum "package.json" }}
- dependencies-
- restore_cache:
keys:
- dependencies-example-{{ checksum "example/package.json" }}
- dependencies-example-
- run:
name: Install dependencies
command: |
yarn install --cwd example --frozen-lockfile
yarn install --frozen-lockfile
- save_cache:
key: dependencies-{{ checksum "package.json" }}
paths: node_modules
- save_cache:
key: dependencies-example-{{ checksum "example/package.json" }}
paths: example/node_modules
- persist_to_workspace:
root: .
paths: .
lint:
executor: default
steps:
- attach_project
- run:
name: Lint files
command: |
yarn lint
typescript:
executor: default
steps:
- attach_project
- run:
name: Typecheck files
command: |
yarn typescript
unit-tests:
executor: default
steps:
- attach_project
- run:
name: Run unit tests
command: |
yarn test --coverage
- store_artifacts:
path: coverage
destination: coverage
build-package:
executor: default
steps:
- attach_project
- run:
name: Build package
command: |
yarn prepare
workflows:
build-and-test:
jobs:
- install-dependencies
- lint:
requires:
- install-dependencies
- typescript:
requires:
- install-dependencies
- unit-tests:
requires:
- install-dependencies
- build-package:
requires:
- install-dependencies
================================================
FILE: .github/FUNDING.yml
================================================
# These are supported funding model platforms
github: baronha
patreon: baronha
open_collective: # Replace with a single Open Collective username
ko_fi: baoha
tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
liberapay: # Replace with a single Liberapay username
issuehunt: # Replace with a single IssueHunt username
otechie: # Replace with a single Otechie username
lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry
custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']
================================================
FILE: .github/workflows/docs.yml
================================================
name: Deploy to GitHub Pages
on:
push:
branches:
- main
paths:
- 'docs/**'
jobs:
build:
name: Build Docusaurus
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- uses: actions/setup-node@v4
with:
node-version: 18
cache: yarn
- name: Install dependencies
working-directory: docs
run: yarn install --frozen-lockfile
- name: Build docs
working-directory: docs
run: yarn build
- name: Upload Build Artifact
uses: actions/upload-pages-artifact@v3
with:
path: docs/build
deploy:
name: Deploy to GitHub Pages
needs: build
# Grant GITHUB_TOKEN the permissions required to make a Pages deployment
permissions:
pages: write # to deploy to Pages
id-token: write # to verify the deployment originates from an appropriate source
# Deploy to the github-pages environment
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
runs-on: ubuntu-latest
steps:
- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v4
================================================
FILE: .gitignore
================================================
# OSX
#
.DS_Store
# XDE
.expo/
# VSCode
.vscode/
jsconfig.json
# Xcode
#
build/
*.pbxuser
!default.pbxuser
*.mode1v3
!default.mode1v3
*.mode2v3
!default.mode2v3
*.perspectivev3
!default.perspectivev3
xcuserdata
*.xccheckout
*.moved-aside
DerivedData
*.hmap
*.ipa
*.xcuserstate
project.xcworkspace
# Android/IJ
#
.classpath
.cxx
.gradle
.idea
.project
.settings
local.properties
android.iml
# Cocoapods
#
example/ios/Pods
# Ruby
example/vendor/
# node.js
#
node_modules/
npm-debug.log
yarn-debug.log
yarn-error.log
# BUCK
buck-out/
\.buckd/
android/app/libs
android/keystores/debug.keystore
# Yarn
.yarn/*
!.yarn/patches
!.yarn/plugins
!.yarn/releases
!.yarn/sdks
!.yarn/versions
# Expo
.expo/
# Turborepo
.turbo/
# generated by bob
lib/
================================================
FILE: .npmignore
================================================
example/
files/
node_modules/
npm-debug.log
package-lock.json
================================================
FILE: CONTRIBUTING.md
================================================
# Contributing
We want this community to be friendly and respectful to each other. Please follow it in all your interactions with the project.
## Development workflow
To get started with the project, run `yarn` in the root directory to install the required dependencies for each package:
```sh
yarn
```
While developing, you can run the [example app](/example/) to test your changes.
To start the packager:
```sh
yarn example start
```
To run the example app on Android:
```sh
yarn example android
```
To run the example app on iOS:
```sh
yarn example ios
```
Make sure your code passes TypeScript and ESLint. Run the following to verify:
```sh
yarn typescript
yarn lint
```
To fix formatting errors, run the following:
```sh
yarn lint --fix
```
Remember to add tests for your change if possible. Run the unit tests by:
```sh
yarn test
```
To edit the Objective-C files, open `example/ios/MultipleImagePickerExample.xcworkspace` in XCode and find the source files at `Pods > Development Pods > react-native-multiple-image-picker`.
To edit the Kotlin files, open `example/android` in Android studio and find the source files at `reactnativemultipleimagepicker` under `Android`.
### Commit message convention
We follow the [conventional commits specification](https://www.conventionalcommits.org/en) for our commit messages:
- `fix`: bug fixes, e.g. fix crash due to deprecated method.
- `feat`: new features, e.g. add new method to the module.
- `refactor`: code refactor, e.g. migrate from class components to hooks.
- `docs`: changes into documentation, e.g. add usage example for the module..
- `test`: adding or updating tests, e.g. add integration tests using detox.
- `chore`: tooling changes, e.g. change CI config.
Our pre-commit hooks verify that your commit message matches this format when committing.
### Linting and tests
[ESLint](https://eslint.org/), [Prettier](https://prettier.io/), [TypeScript](https://www.typescriptlang.org/)
We use [TypeScript](https://www.typescriptlang.org/) for type checking, [ESLint](https://eslint.org/) with [Prettier](https://prettier.io/) for linting and formatting the code, and [Jest](https://jestjs.io/) for testing.
Our pre-commit hooks verify that the linter and tests pass when committing.
### Scripts
The `package.json` file contains various scripts for common tasks:
- `yarn bootstrap`: setup project by installing all dependencies and pods.
- `yarn typescript`: type-check files with TypeScript.
- `yarn lint`: lint files with ESLint.
- `yarn test`: run unit tests with Jest.
- `yarn example start`: start the Metro server for the example app.
- `yarn example android`: run the example app on Android.
- `yarn example ios`: run the example app on iOS.
### Sending a pull request
> **Working on your first pull request?** You can learn how from this _free_ series: [How to Contribute to an Open Source Project on GitHub](https://egghead.io/series/how-to-contribute-to-an-open-source-project-on-github).
When you're sending a pull request:
- Prefer small pull requests focused on one change.
- Verify that linters and tests are passing.
- Review the documentation to make sure it looks good.
- Follow the pull request template when opening a pull request.
- For pull requests that change the API or implementation, discuss with maintainers first by opening an issue.
## Code of Conduct
### Our Pledge
We as members, contributors, and leaders pledge to make participation in our community a harassment-free experience for everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, religion, or sexual identity and orientation.
We pledge to act and interact in ways that contribute to an open, welcoming, diverse, inclusive, and healthy community.
### Our Standards
Examples of behavior that contributes to a positive environment for our community include:
- Demonstrating empathy and kindness toward other people
- Being respectful of differing opinions, viewpoints, and experiences
- Giving and gracefully accepting constructive feedback
- Accepting responsibility and apologizing to those affected by our mistakes, and learning from the experience
- Focusing on what is best not just for us as individuals, but for the overall community
Examples of unacceptable behavior include:
- The use of sexualized language or imagery, and sexual attention or
advances of any kind
- Trolling, insulting or derogatory comments, and personal or political attacks
- Public or private harassment
- Publishing others' private information, such as a physical or email
address, without their explicit permission
- Other conduct which could reasonably be considered inappropriate in a
professional setting
### Enforcement Responsibilities
Community leaders are responsible for clarifying and enforcing our standards of acceptable behavior and will take appropriate and fair corrective action in response to any behavior that they deem inappropriate, threatening, offensive, or harmful.
Community leaders have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, and will communicate reasons for moderation decisions when appropriate.
### Scope
This Code of Conduct applies within all community spaces, and also applies when an individual is officially representing the community in public spaces. Examples of representing our community include using an official e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event.
### Enforcement
Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the community leaders responsible for enforcement at [INSERT CONTACT METHOD]. All complaints will be reviewed and investigated promptly and fairly.
All community leaders are obligated to respect the privacy and security of the reporter of any incident.
### Enforcement Guidelines
Community leaders will follow these Community Impact Guidelines in determining the consequences for any action they deem in violation of this Code of Conduct:
#### 1. Correction
**Community Impact**: Use of inappropriate language or other behavior deemed unprofessional or unwelcome in the community.
**Consequence**: A private, written warning from community leaders, providing clarity around the nature of the violation and an explanation of why the behavior was inappropriate. A public apology may be requested.
#### 2. Warning
**Community Impact**: A violation through a single incident or series of actions.
**Consequence**: A warning with consequences for continued behavior. No interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, for a specified period of time. This includes avoiding interactions in community spaces as well as external channels like social media. Violating these terms may lead to a temporary or permanent ban.
#### 3. Temporary Ban
**Community Impact**: A serious violation of community standards, including sustained inappropriate behavior.
**Consequence**: A temporary ban from any sort of interaction or public communication with the community for a specified period of time. No public or private interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, is allowed during this period. Violating these terms may lead to a permanent ban.
#### 4. Permanent Ban
**Community Impact**: Demonstrating a pattern of violation of community standards, including sustained inappropriate behavior, harassment of an individual, or aggression toward or disparagement of classes of individuals.
**Consequence**: A permanent ban from any sort of public interaction within the community.
### Attribution
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 2.0,
available at https://www.contributor-covenant.org/version/2/0/code_of_conduct.html.
Community Impact Guidelines were inspired by [Mozilla's code of conduct enforcement ladder](https://github.com/mozilla/diversity).
[homepage]: https://www.contributor-covenant.org
For answers to common questions about this code of conduct, see the FAQ at
https://www.contributor-covenant.org/faq. Translations are available at https://www.contributor-covenant.org/translations.
================================================
FILE: LICENSE
================================================
MIT License
Copyright (c) 2020 Baron Ha.
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
================================================
FILE: MultipleImagePicker.podspec
================================================
require "json"
package = JSON.parse(File.read(File.join(__dir__, "package.json")))
Pod::Spec.new do |s|
s.name = "MultipleImagePicker"
s.version = package["version"]
s.summary = package["description"]
s.homepage = package["homepage"]
s.license = package["license"]
s.authors = package["author"]
s.platforms = { :ios => min_ios_version_supported }
s.source = { :git => "https://github.com/baronha/react-native-multiple-image-picker.git", :tag => "#{s.version}" }
s.source_files = [
# Implementation (Swift)
"ios/**/*.{swift}",
# Autolinking/Registration (Objective-C++)
"ios/**/*.{m,mm}",
# Implementation (C++ objects)
"cpp/**/*.{hpp,cpp}",
]
s.resource_bundles = {
"MultipleImagePicker" => ["ios/Assets.xcassets"]
}
s.dependency "HXPhotoPicker/Picker", "4.2.4"
s.dependency "HXPhotoPicker/Camera/Lite", "4.2.4"
s.dependency "HXPhotoPicker/Editor", "4.2.4"
s.pod_target_xcconfig = {
# C++ compiler flags, mainly for folly.
"CLANG_CXX_LANGUAGE_STANDARD" => "c++20",
"GCC_PREPROCESSOR_DEFINITIONS" => "$(inherited) FOLLY_NO_CONFIG FOLLY_CFG_NO_COROUTINES FOLLY_MOBILE"
}
if ENV["USE_FRAMEWORKS"]
s.dependency "React-Core"
add_dependency(s, "React-jsinspector", :framework_name => "jsinspector_modern")
add_dependency(s, "React-rendererconsistency", :framework_name => "React_rendererconsistency")
add_dependency(s, "React-jsinspectortracing", :framework_name => 'jsinspector_moderntracing')
add_dependency(s, "React-jsinspectorcdp", :framework_name => 'jsinspector_moderncdp')
end
load 'nitrogen/generated/ios/MultipleImagePicker+autolinking.rb'
add_nitrogen_files(s)
s.dependency 'React-jsi'
s.dependency 'React-callinvoker'
install_modules_dependencies(s)
end
================================================
FILE: README.md
================================================
![Logo][Logo]
<p align="center">
<img src="./files/banner.png" width="100%">
</p>
[![iOS][iOS]][iOS-URL] [![Android][Android]][Android-URL] [![Swift][Swift]][Swift-URL] [![Kotlin][Kotlin]][Kotlin-URL] [![React-Native][React-Native]][React-Native-URL]
## Overview 🎇
https://github.com/user-attachments/assets/79580bc7-237c-46b7-b92e-1479cc6d9079
React Native Multiple Image Picker **(RNMIP)** enables application to pick images and videos from multiple smart album in iOS/Android. React Native Multiple Image Picker is based on two libraries available, [HXPhotoPicker](https://github.com/SilenceLove/HXPhotoPicker) and [PictureSelector](https://github.com/LuckSiege/PictureSelector)
## Documentation 📚
## Features 🔥
| 🤩 | ![Logo][Logo] |
| --- | ------------------------------------------------------------------------------------- |
| 🍕 | [**Crop**](/docs/docs/CROP.mdx) single/multiple image. |
| 🎑 | [**Preview**](/docs/docs/PREVIEW.mdx) image/video. |
| 📸 | [**Camera**](/docs/docs/CAMERA.mdx) module for capturing photos and recording videos. |
| 🐳 | Keep the previous selection. |
| 0️⃣ | Selected order index. |
| 🎨 | UI Customization (numberOfColumn, spacing, primaryColor ... ) |
| 🌚 | Dark Mode, Light Mode |
| 🌄 | Choose multiple images/video. |
| 📦 | Support smart album `(camera roll, selfies, panoramas, favorites, videos...)`. |
| 📺 | Display video duration. |
| ⛅️ | Support iCloud Photo Library. |
| 🌪 | Scrolling performance. ☕️ |
## Requirements
Because RNMIP uses Nitro Module, it complies with Nitro Modules' requirements.
View Nitro Modules' requirements [here](https://nitro.margelo.com/docs/minimum-requirements)
- `Xcode 16+`
- `iOS 13+`
- `react-native 0.75+`
- `compileSdkVersion 34+`
## Installation
See more [**Installation**](https://nitrogenzlab.github.io/react-native-multiple-image-picker/getting-started)
## Usage
Here is a simple usage of the Multiple Image Picker. <br/>
See more [**Config**](https://nitrogenzlab.github.io/react-native-multiple-image-picker/config)
```typescript
import { openPicker, Config } from '@baronha/react-native-multiple-image-picker'
const config: Config = {
maxSelect: 10,
maxVideo: 10,
primaryColor: '#FB9300',
backgroundDark: '#2f2f2f',
numberOfColumn: 4,
mediaType: 'all',
selectBoxStyle: 'number',
selectMode: 'multiple',
language: 'vi', // 🇻🇳 Vietnamese
theme: 'dark',
isHiddenOriginalButton: false,
primaryColor: '#F6B35D',
}
const onPicker = async () => {
try {
const response = await openPicker(config)
setImages(response)
} catch (e) {
// catch error for multiple image picker
}
}
```
## To Do
- [x] Crop Image in iOS.
- [x] Preview Controller for `iOS`.
- [x] Handle Permission when limited on `iOS`.
- [x] Migrating Library to the New Architecture.
- [x] Multiple Crop Image.
- [x] Multiple Preview Image.
- [x] Dynamic Theme.
- [x] Dynamic Language
- [x] Open Crop Controller.
- [x] Open Preview Controller.
- [x] Open Camera Controller.
## Sponsor & Support ☕️
[![BuyMeACoffee][BuyMeACoffee]][BuyMeACoffee-URL] [![Kofi][Kofi]][Kofi-URL]
[BuyMeACoffee]: https://img.shields.io/badge/Buy_Me_A_Coffee-FFDD00?style=for-the-badge&logo=buy-me-a-coffee&logoColor=black
[BuyMeACoffee-URL]: https://buymeacoffee.com/baronha
[Kofi]: https://img.shields.io/badge/Ko--fi-F16061?style=for-the-badge&logo=ko-fi&logoColor=white
[Kofi-URL]: https://ko-fi.com/baoha
To keep this library maintained and up-to-date please consider [sponsoring it on GitHub](https://github.com/sponsors/baronha). Or if you are looking for a private support or help in customizing the experience, then reach out to me on Twitter [@\_baronha](https://twitter.com/_baronha).<br/>
Besides, I also built a product using HXPhotoPicker here, Hope you support:<br/>
<a href="https://apps.apple.com/vn/app/binsoo-photo-filters-editor/id6502683720" target="_blank">
<img width="64px" height="64px" src="https://github.com/user-attachments/assets/71b5ddf7-3da1-4091-aae6-9aa7e411ce75" />
</a>
## Built With ❤️
[](https://nitro.margelo.com/docs/nitro-modules)
<br/>
[](https://github.com/SilenceLove/HXPhotoPicker)
<br/>
[](https://github.com/LuckSiege/PictureSelector)
## Star History
[](https://star-history.com/#bytebase/star-history&Date)
## Showcase ✨
List of used applications with `@baronha/react-native-multiple-image-picker`
Contributions are welcome! If you have an application that uses `@baronha/react-native-multiple-image-picker`, please open a [pull request](/docs/docs/SHOWCASE/showcase.json) to add it to the list.
See all [**Showcase**](https://nitrogenzlab.github.io/react-native-multiple-image-picker/showcase)
## Performance
We're trying to improve performance. If you have a better solution, please open a [issue](https://github.com/NitrogenZLab/react-native-multiple-image-picker/issues)
or [pull request](https://github.com/NitrogenZLab/react-native-multiple-image-picker/pulls). Best regards!
## License
MIT
<br>
[TLPhotoPicker](https://github.com/tilltue/TLPhotoPicker/blob/master/LICENSE)
<br>
[PictureSelector](https://github.com/LuckSiege/PictureSelector/blob/master/LICENSE)
<!-- Badge for README -->
[iOS]: https://img.shields.io/badge/iOS-000000?style=for-the-badge&logo=ios&logoColor=white
[iOS-URL]: https://www.apple.com/ios
[Android]: https://img.shields.io/badge/Android-3DDC84?style=for-the-badge&logo=android&logoColor=white
[Android-URL]: https://www.android.com/
[React-Native]: https://img.shields.io/badge/React_Native-20232A?style=for-the-badge&logo=react&logoColor=61DAFB
[React-Native-URL]: https://reactnative.dev/
[React-Native]: https://img.shields.io/badge/React_Native-20232A?style=for-the-badge&logo=react&logoColor=61DAFB
[React-Native-URL]: https://reactnative.dev/
[Swift]: https://img.shields.io/badge/Swift-FA7343?style=for-the-badge&logo=swift&logoColor=white
[Swift-URL]: https://developer.apple.com/swift/
[Kotlin]: https://img.shields.io/badge/Kotlin-0095D5?&style=for-the-badge&logo=kotlin&logoColor=white
[Kotlin-URL]: https://kotlinlang.org/
[Logo]: https://img.shields.io/badge/React_Native_Multiple_Image_Picker-DF78C3?style=for-the-badge
================================================
FILE: android/CMakeLists.txt
================================================
project(MultipleImagePicker)
cmake_minimum_required(VERSION 3.9.0)
set (PACKAGE_NAME MultipleImagePicker)
set (CMAKE_VERBOSE_MAKEFILE ON)
set (CMAKE_CXX_STANDARD 20)
# Define C++ library and add all sources
add_library(${PACKAGE_NAME} SHARED
src/main/cpp/cpp-adapter.cpp
)
# Add Nitrogen specs :)
include(${CMAKE_SOURCE_DIR}/../nitrogen/generated/android/MultipleImagePicker+autolinking.cmake)
# Set up local includes
include_directories(
"src/main/cpp"
"../cpp"
)
find_library(LOG_LIB log)
# Link all libraries together
target_link_libraries(
${PACKAGE_NAME}
${LOG_LIB}
android # <-- Android core
)
================================================
FILE: android/build.gradle
================================================
buildscript {
repositories {
google()
mavenCentral()
}
dependencies {
classpath "com.android.tools.build:gradle:7.2.1"
}
}
def reactNativeArchitectures() {
def value = rootProject.getProperties().get("reactNativeArchitectures")
return value ? value.split(",") : ["armeabi-v7a", "x86", "x86_64", "arm64-v8a"]
}
def isNewArchitectureEnabled() {
return rootProject.hasProperty("newArchEnabled") && rootProject.getProperty("newArchEnabled") == "true"
}
apply plugin: "com.android.library"
apply plugin: 'org.jetbrains.kotlin.android'
apply from: '../nitrogen/generated/android/MultipleImagePicker+autolinking.gradle'
if (isNewArchitectureEnabled()) {
apply plugin: "com.facebook.react"
}
def getExtOrDefault(name) {
return rootProject.ext.has(name) ? rootProject.ext.get(name) : project.properties["MultipleImagePicker_" + name]
}
def getExtOrIntegerDefault(name) {
return rootProject.ext.has(name) ? rootProject.ext.get(name) : (project.properties["MultipleImagePicker_" + name]).toInteger()
}
android {
namespace "com.margelo.nitro.multipleimagepicker"
ndkVersion getExtOrDefault("ndkVersion")
compileSdkVersion getExtOrIntegerDefault("compileSdkVersion")
defaultConfig {
minSdkVersion getExtOrIntegerDefault("minSdkVersion")
targetSdkVersion getExtOrIntegerDefault("targetSdkVersion")
buildConfigField "boolean", "IS_NEW_ARCHITECTURE_ENABLED", isNewArchitectureEnabled().toString()
externalNativeBuild {
cmake {
cppFlags "-O2 -frtti -fexceptions -Wall -fstack-protector-all"
arguments "-DANDROID_STL=c++_shared"
abiFilters(*reactNativeArchitectures())
}
}
}
externalNativeBuild {
cmake {
path "CMakeLists.txt"
}
}
packagingOptions {
excludes = ["META-INF",
"META-INF/**",
"**/libc++_shared.so",
"**/libfbjni.so",
"**/libjsi.so",
"**/libfolly_json.so",
"**/libfolly_runtime.so",
"**/libglog.so",
"**/libhermes.so",
"**/libhermes-executor-debug.so",
"**/libhermes_executor.so",
"**/libreactnative.so",
"**/libreactnativejni.so",
"**/libturbomodulejsijni.so",
"**/libreact_nativemodule_core.so",
"**/libjscexecutor.so"]
}
buildFeatures {
buildConfig true
prefab true
}
buildTypes {
release {
minifyEnabled false
}
}
lintOptions {
disable "GradleCompatible"
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
sourceSets {
main {
if (isNewArchitectureEnabled()) {
java.srcDirs += [
// React Codegen files
"${project.buildDir}/generated/source/codegen/java"]
}
}
}
}
repositories {
mavenCentral()
google()
}
dependencies {
// For < 0.71, this will be from the local maven repo
// For > 0.71, this will be replaced by `com.facebook.react:react-android:$version` by react gradle plugin
//noinspection GradleDynamicVersion
// Add a dependency on NitroModules
implementation 'com.github.bumptech.glide:glide:4.16.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.16.0'
// PictureSelector basic (Necessary)
implementation 'io.github.lucksiege:pictureselector:v3.11.2'
// image compress library (Not necessary)
implementation 'io.github.lucksiege:compress:v3.11.2'
// uCrop library (Not necessary)
implementation 'io.github.lucksiege:ucrop:v3.11.2'
// simple camerax library (Not necessary)
implementation 'io.github.lucksiege:camerax:v3.11.2'
// exoplayer
implementation "com.google.android.exoplayer:exoplayer:2.19.1"
implementation "com.facebook.react:react-native:+"
// Add a dependency on NitroModules
implementation project(":react-native-nitro-modules")
}
if (isNewArchitectureEnabled()) {
react {
jsRootDir = file("../src/")
libraryName = "MultipleImagePicker"
codegenJavaPackageName = "com.margelo.nitro.multipleimagepicker"
}
}
================================================
FILE: android/gradle.properties
================================================
MultipleImagePicker_kotlinVersion=1.9.24
MultipleImagePicker_minSdkVersion=23
MultipleImagePicker_targetSdkVersion=34
MultipleImagePicker_compileSdkVersion=34
MultipleImagePicker_ndkVersion=26.1.10909125
================================================
FILE: android/src/main/AndroidManifest.xml
================================================
<manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools">
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission tools:ignore="ProtectedPermissions" android:name="android.permission.WRITE_MEDIA_STORAGE" />
<uses-permission tools:ignore="ProtectedPermissions" android:name="android.permission.WRITE_SETTINGS" />
<uses-permission tools:ignore="ProtectedPermissions" android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission tools:ignore="ProtectedPermissions" android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission tools:ignore="ProtectedPermissions" android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.BLUETOOTH" />
<!-- Android 13 -->
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
<uses-permission android:name="android.permission.READ_MEDIA_AUDIO" />
<uses-permission android:name="android.permission.READ_MEDIA_VIDEO" />
<application android:requestLegacyExternalStorage="true" />
</manifest>
================================================
FILE: android/src/main/cpp/cpp-adapter.cpp
================================================
#include <jni.h>
#include "MultipleImagePickerOnLoad.hpp"
JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM* vm, void*) {
return margelo::nitro::multipleimagepicker::initialize(vm);
}
================================================
FILE: android/src/main/java/com/margelo/nitro/multipleimagepicker/CameraEngine.kt
================================================
package com.margelo.nitro.multipleimagepicker
import android.content.Context
import android.graphics.Color
import androidx.fragment.app.Fragment
import com.bumptech.glide.Glide
import com.facebook.react.bridge.ColorPropConverter
import com.luck.lib.camerax.SimpleCameraX
import com.luck.picture.lib.interfaces.OnCameraInterceptListener
import java.io.File
class CameraEngine(
private val appContext: Context,
val config: NitroCameraConfig,
) :
OnCameraInterceptListener {
override fun openCamera(fragment: Fragment, cameraMode: Int, requestCode: Int) {
val camera = SimpleCameraX.of()
camera.setImageEngine { context, url, imageView ->
Glide.with(context).load(url).into(imageView)
}
camera.isAutoRotation(true)
camera.setCameraMode(cameraMode)
camera.isDisplayRecordChangeTime(true)
camera.isManualFocusCameraPreview(true)
camera.isZoomCameraPreview(true)
camera.setRecordVideoMaxSecond(config.videoMaximumDuration?.toInt() ?: 60)
camera.setCameraAroundState(config.cameraDevice == CameraDevice.FRONT)
camera.setOutputPathDir(getSandboxCameraOutputPath())
config.color?.let {
val primaryColor = ColorPropConverter.getColor(it, appContext) ?: Color.BLACK
camera.setCaptureLoadingColor(primaryColor)
}
camera.start(fragment.requireActivity(), fragment, requestCode)
}
private fun getSandboxCameraOutputPath(): String {
val externalFilesDir: File? = appContext.getExternalFilesDir("")
val customFile = File(externalFilesDir?.absolutePath, "Sandbox")
if (!customFile.exists()) {
customFile.mkdirs()
}
return customFile.absolutePath + File.separator
}
}
================================================
FILE: android/src/main/java/com/margelo/nitro/multipleimagepicker/Constant.kt
================================================
package com.margelo.nitro.multipleimagepicker
object Constant {
const val TOOLBAR_TEXT_SIZE = 12
}
================================================
FILE: android/src/main/java/com/margelo/nitro/multipleimagepicker/CropEngine.kt
================================================
package com.margelo.nitro.multipleimagepicker
import android.content.Context
import android.graphics.Bitmap
import android.graphics.drawable.Drawable
import android.net.Uri
import android.widget.ImageView
import androidx.fragment.app.Fragment
import com.bumptech.glide.Glide
import com.bumptech.glide.request.target.CustomTarget
import com.bumptech.glide.request.transition.Transition
import com.luck.picture.lib.config.PictureMimeType
import com.luck.picture.lib.engine.CropFileEngine
import com.luck.picture.lib.entity.LocalMedia
import com.luck.picture.lib.interfaces.OnMediaEditInterceptListener
import com.luck.picture.lib.utils.DateUtils
import com.margelo.nitro.multipleimagepicker.ImageLoaderUtils.assertValidRequest
import com.yalantis.ucrop.UCrop
import com.yalantis.ucrop.UCrop.Options
import com.yalantis.ucrop.UCropImageEngine
import java.io.File
class CropImageEngine : UCropImageEngine {
override fun loadImage(context: Context, url: String, imageView: ImageView) {
if (!assertValidRequest(context)) {
return
}
Glide.with(context).load(url).override(180, 180).into(imageView)
}
override fun loadImage(
context: Context,
url: Uri,
maxWidth: Int,
maxHeight: Int,
call: UCropImageEngine.OnCallbackListener<Bitmap>
) {
Glide.with(context).asBitmap().load(url).override(maxWidth, maxHeight)
.into(object : CustomTarget<Bitmap?>() {
override fun onResourceReady(
resource: Bitmap, transition: Transition<in Bitmap?>?
) {
call.onCall(resource)
}
override fun onLoadCleared(placeholder: Drawable?) {
call.onCall(null)
}
})
}
}
class CropEngine(cropOption: Options) : CropFileEngine {
private val options: Options = cropOption
override fun onStartCrop(
fragment: Fragment,
srcUri: Uri?,
destinationUri: Uri?,
dataSource: ArrayList<String?>?,
requestCode: Int
) {
val uCrop = UCrop.of(srcUri!!, destinationUri!!, dataSource)
uCrop.withOptions(options)
uCrop.setImageEngine(CropImageEngine())
uCrop.start(fragment.requireActivity(), fragment, requestCode)
}
}
class MediaEditInterceptListener(
private val outputCropPath: String,
private val options: Options,
) : OnMediaEditInterceptListener {
override fun onStartMediaEdit(
fragment: Fragment, currentLocalMedia: LocalMedia, requestCode: Int
) {
val currentEditPath = currentLocalMedia.availablePath
val inputUri =
if (PictureMimeType.isContent(currentEditPath)) Uri.parse(currentEditPath)
else Uri.fromFile(File(currentEditPath))
val destinationUri = Uri.fromFile(
File(outputCropPath, DateUtils.getCreateFileName("CROP_") + ".jpeg")
)
val uCrop = UCrop.of<Any>(inputUri, destinationUri)
uCrop.withOptions(options)
// set engine
uCrop.setImageEngine(CropImageEngine())
// start edit
uCrop.startEdit(fragment.requireActivity(), fragment, requestCode)
}
}
fun getSandboxPath(context: Context): String {
val externalFilesDir: File? = context.getExternalFilesDir("")
val customFile = File(externalFilesDir?.absolutePath, "Sandbox")
if (!customFile.exists()) {
customFile.mkdirs()
}
return customFile.absolutePath + File.separator
}
================================================
FILE: android/src/main/java/com/margelo/nitro/multipleimagepicker/ExoPlayerEngine.kt
================================================
package com.margelo.nitro.multipleimagepicker
import android.content.Context
import android.net.Uri
import android.view.View
import com.google.android.exoplayer2.ExoPlayer
import com.google.android.exoplayer2.MediaItem
import com.google.android.exoplayer2.PlaybackException
import com.google.android.exoplayer2.Player
import com.google.android.exoplayer2.ui.StyledPlayerView
import com.luck.picture.lib.config.PictureMimeType
import com.luck.picture.lib.config.SelectorProviders
import com.luck.picture.lib.engine.VideoPlayerEngine
import com.luck.picture.lib.entity.LocalMedia
import com.luck.picture.lib.interfaces.OnPlayerListener
import java.io.File
import java.util.concurrent.CopyOnWriteArrayList
class ExoPlayerEngine : VideoPlayerEngine<StyledPlayerView> {
private val listeners = CopyOnWriteArrayList<OnPlayerListener>()
override fun onCreateVideoPlayer(context: Context): View {
val exoPlayer = StyledPlayerView(context)
exoPlayer.useController = true
return exoPlayer
}
override fun onStarPlayer(exoPlayer: StyledPlayerView, media: LocalMedia) {
val player = exoPlayer.player
if (player != null) {
val mediaItem: MediaItem
val path = media.availablePath
mediaItem = if (PictureMimeType.isContent(path)) {
MediaItem.fromUri(Uri.parse(path))
} else if (PictureMimeType.isHasHttp(path)) {
MediaItem.fromUri(path)
} else {
MediaItem.fromUri(Uri.fromFile(File(path)))
}
val config = SelectorProviders.getInstance().selectorConfig
player.repeatMode =
if (config.isLoopAutoPlay) Player.REPEAT_MODE_ALL else Player.REPEAT_MODE_OFF
player.setMediaItem(mediaItem)
player.prepare()
player.play()
}
}
override fun onResume(exoPlayer: StyledPlayerView) {
val player = exoPlayer.player
player?.play()
}
override fun onPause(exoPlayer: StyledPlayerView) {
val player = exoPlayer.player
player?.pause()
}
override fun isPlaying(exoPlayer: StyledPlayerView): Boolean {
val player = exoPlayer.player
return player != null && player.isPlaying
}
override fun addPlayListener(playerListener: OnPlayerListener) {
if (!listeners.contains(playerListener)) {
listeners.add(playerListener)
}
}
override fun removePlayListener(playerListener: OnPlayerListener) {
listeners.remove(playerListener)
}
override fun onPlayerAttachedToWindow(exoPlayer: StyledPlayerView) {
val player: Player = ExoPlayer.Builder(exoPlayer.context).build()
exoPlayer.player = player
player.addListener(mPlayerListener)
}
override fun onPlayerDetachedFromWindow(exoPlayer: StyledPlayerView) {
val player = exoPlayer.player
if (player != null) {
player.removeListener(mPlayerListener)
player.release()
exoPlayer.player = null
}
}
override fun destroy(exoPlayer: StyledPlayerView) {
val player = exoPlayer.player
if (player != null) {
player.removeListener(mPlayerListener)
player.release()
}
}
private val mPlayerListener: Player.Listener = object : Player.Listener {
override fun onPlayerError(error: PlaybackException) {
for (i in listeners.indices) {
val playerListener = listeners[i]
playerListener.onPlayerError()
}
}
override fun onPlaybackStateChanged(playbackState: Int) {
if (playbackState == Player.STATE_READY) {
for (i in listeners.indices) {
val playerListener = listeners[i]
playerListener.onPlayerReady()
}
} else if (playbackState == Player.STATE_BUFFERING) {
for (i in listeners.indices) {
val playerListener = listeners[i]
playerListener.onPlayerLoading()
}
} else if (playbackState == Player.STATE_ENDED) {
for (i in listeners.indices) {
val playerListener = listeners[i]
playerListener.onPlayerEnd()
}
}
}
}
}
================================================
FILE: android/src/main/java/com/margelo/nitro/multipleimagepicker/GlideEngine.kt
================================================
package com.margelo.nitro.multipleimagepicker
import android.content.Context
import android.widget.ImageView
import com.bumptech.glide.Glide
import com.bumptech.glide.load.resource.bitmap.CenterCrop
import com.bumptech.glide.load.resource.bitmap.RoundedCorners
import com.luck.picture.lib.engine.ImageEngine
import com.luck.picture.lib.utils.ActivityCompatHelper
class GlideEngine private constructor() : ImageEngine {
override fun loadImage(context: Context, url: String, imageView: ImageView) {
if (!ActivityCompatHelper.assertValidRequest(context)) {
return
}
Glide.with(context)
.load(url)
.into(imageView)
}
override fun loadImage(
context: Context,
imageView: ImageView,
url: String,
maxWidth: Int,
maxHeight: Int
) {
if (!ActivityCompatHelper.assertValidRequest(context)) {
return
}
Glide.with(context)
.load(url)
.override(maxWidth, maxHeight)
.into(imageView)
}
override fun loadAlbumCover(context: Context, url: String, imageView: ImageView) {
if (!ActivityCompatHelper.assertValidRequest(context)) {
return
}
Glide.with(context)
.asBitmap()
.load(url)
.override(180, 180)
.sizeMultiplier(0.5f)
.transform(CenterCrop(), RoundedCorners(8))
.into(imageView)
}
override fun loadGridImage(context: Context, url: String, imageView: ImageView) {
if (!ActivityCompatHelper.assertValidRequest(context)) {
return
}
Glide.with(context)
.load(url)
.override(200, 200)
.centerCrop()
.placeholder(com.luck.picture.lib.R.drawable.ps_image_placeholder)
.into(imageView)
}
override fun pauseRequests(context: Context) {
if (!ActivityCompatHelper.assertValidRequest(context)) {
return
}
Glide.with(context).pauseRequests()
}
override fun resumeRequests(context: Context) {
if (!ActivityCompatHelper.assertValidRequest(context)) {
return
}
Glide.with(context).resumeRequests()
}
private object InstanceHolder {
val instance = GlideEngine()
}
companion object {
fun createGlideEngine(): GlideEngine {
return InstanceHolder.instance
}
}
}
================================================
FILE: android/src/main/java/com/margelo/nitro/multipleimagepicker/ImageLoaderUtils.kt
================================================
package com.margelo.nitro.multipleimagepicker
import android.app.Activity
import android.content.Context
import android.content.ContextWrapper
object ImageLoaderUtils {
fun assertValidRequest(context: Context?): Boolean {
if (context is Activity) {
return !isDestroy(context)
} else if (context is ContextWrapper) {
if (context.baseContext is Activity) {
val activity = context.baseContext as Activity
return !isDestroy(activity)
}
}
return true
}
private fun isDestroy(activity: Activity?): Boolean {
return if (activity == null) {
true
} else activity.isFinishing || activity.isDestroyed
}
}
================================================
FILE: android/src/main/java/com/margelo/nitro/multipleimagepicker/LoadingDialog.kt
================================================
package com.margelo.nitro.multipleimagepicker
import android.app.Dialog
import android.content.Context
import android.os.Bundle
import android.view.Gravity
import android.view.ViewGroup
class LoadingDialog(context: Context?) :
Dialog(context!!, R.style.Picture_Theme_AlertDialog) {
init {
setCancelable(true)
setCanceledOnTouchOutside(false)
}
override fun onCreate(savedInstanceState: Bundle) {
super.onCreate(savedInstanceState)
setContentView(R.layout.loading_dialog)
setDialogSize()
}
private fun setDialogSize() {
val params = window!!.attributes
params.width = ViewGroup.LayoutParams.WRAP_CONTENT
params.height = ViewGroup.LayoutParams.WRAP_CONTENT
params.gravity = Gravity.CENTER
window!!.setWindowAnimations(R.style.PictureThemeDialogWindowStyle)
window!!.attributes = params
}
}
================================================
FILE: android/src/main/java/com/margelo/nitro/multipleimagepicker/MultipleImagePicker.kt
================================================
package com.margelo.nitro.multipleimagepicker
import com.margelo.nitro.NitroModules
class MultipleImagePicker : HybridMultipleImagePickerSpec() {
override val memorySize: Long
get() = 5
private val pickerModule = MultipleImagePickerImp(NitroModules.applicationContext)
override fun openPicker(
config: NitroConfig,
resolved: (result: Array<PickerResult>) -> Unit,
rejected: (reject: Double) -> Unit
) {
pickerModule.openPicker(config, resolved, rejected)
}
override fun openCrop(
image: String,
config: NitroCropConfig,
resolved: (result: CropResult) -> Unit,
rejected: (reject: Double) -> Unit
) {
pickerModule.openCrop(image, config, resolved, rejected)
}
override fun openPreview(
media: Array<MediaPreview>,
index: Double,
config: NitroPreviewConfig,
onLongPress: (index: Double) -> Unit
) {
pickerModule.openPreview(media, index.toInt(), config, onLongPress)
}
override fun openCamera(
config: NitroCameraConfig,
resolved: (result: CameraResult) -> Unit,
rejected: (reject: Double) -> Unit
) {
pickerModule.openCamera(config, resolved, rejected)
}
}
================================================
FILE: android/src/main/java/com/margelo/nitro/multipleimagepicker/MultipleImagePickerImp.kt
================================================
package com.margelo.nitro.multipleimagepicker
import android.app.Activity
import android.content.Context
import android.content.Intent
import android.graphics.Color
import android.net.Uri
import androidx.core.content.ContextCompat
import com.facebook.react.bridge.BaseActivityEventListener
import com.facebook.react.bridge.ColorPropConverter
import com.facebook.react.bridge.ReactApplicationContext
import com.facebook.react.bridge.ReactContextBaseJavaModule
import com.facebook.react.bridge.ReactMethod
import com.luck.picture.lib.app.IApp
import com.luck.picture.lib.app.PictureAppMaster
import com.luck.picture.lib.basic.PictureSelector
import com.luck.picture.lib.config.PictureMimeType
import com.luck.picture.lib.config.SelectMimeType
import com.luck.picture.lib.config.SelectModeConfig
import com.luck.picture.lib.engine.PictureSelectorEngine
import com.luck.picture.lib.entity.LocalMedia
import com.luck.picture.lib.interfaces.OnCustomLoadingListener
import com.luck.picture.lib.interfaces.OnExternalPreviewEventListener
import com.luck.picture.lib.interfaces.OnMediaEditInterceptListener
import com.luck.picture.lib.interfaces.OnResultCallbackListener
import com.luck.picture.lib.language.LanguageConfig
import com.luck.picture.lib.style.BottomNavBarStyle
import com.luck.picture.lib.style.PictureSelectorStyle
import com.luck.picture.lib.style.PictureWindowAnimationStyle
import com.luck.picture.lib.style.SelectMainStyle
import com.luck.picture.lib.style.TitleBarStyle
import com.luck.picture.lib.utils.DateUtils
import com.luck.picture.lib.utils.DensityUtil
import com.luck.picture.lib.utils.MediaUtils
import com.yalantis.ucrop.UCrop
import com.yalantis.ucrop.UCrop.Options
import com.yalantis.ucrop.UCrop.REQUEST_CROP
import com.yalantis.ucrop.model.AspectRatio
import java.io.File
import java.net.HttpURLConnection
import java.net.URL
class MultipleImagePickerImp(reactContext: ReactApplicationContext?) :
ReactContextBaseJavaModule(reactContext), IApp {
override fun getName(): String {
return "MultipleImagePicker"
}
companion object {
const val TAG = "MultipleImagePicker"
}
private var style = PictureSelectorStyle()
private lateinit var config: NitroConfig
private var cropOption = Options()
private var dataList = mutableListOf<LocalMedia>()
@ReactMethod
fun openPicker(
options: NitroConfig,
resolved: (result: Array<PickerResult>) -> Unit,
rejected: (reject: Double) -> Unit
) {
PictureAppMaster.getInstance().app = this
val activity = reactApplicationContext.currentActivity
?: throw IllegalStateException("No current Activity available")
val imageEngine = GlideEngine.createGlideEngine()
// set global config
config = options
setStyle() // set style for UI
handleSelectedAssets(config)
val chooseMode = getChooseMode(config.mediaType)
val maxSelect = config.maxSelect?.toInt() ?: 20
val maxVideo = config.maxVideo?.toInt() ?: 20
val isPreview = config.isPreview ?: true
val maxFileSize = config.maxFileSize?.toLong()
val maxDuration = config.maxVideoDuration?.toInt()
val minDuration = config.minVideoDuration?.toInt()
val allowSwipeToSelect = config.allowSwipeToSelect ?: false
val isMultiple = config.selectMode == SelectMode.MULTIPLE
val selectMode = if (isMultiple) SelectModeConfig.MULTIPLE else SelectModeConfig.SINGLE
val isCrop = config.crop != null
PictureSelector.create(activity)
.openGallery(chooseMode)
.setImageEngine(imageEngine)
.setSelectedData(dataList)
.setSelectorUIStyle(style)
.apply {
if (isCrop) {
setCropOption(config.crop)
// Disabled force crop engine for multiple
if (!isMultiple) setCropEngine(CropEngine(cropOption))
else setEditMediaInterceptListener(setEditMediaEvent())
}
maxDuration?.let {
setFilterVideoMaxSecond(it)
}
minDuration?.let {
setFilterVideoMinSecond(it)
}
maxFileSize?.let {
setFilterMaxFileSize(it)
}
isDisplayCamera(config.camera != null)
config.camera?.let {
val cameraConfig = NitroCameraConfig(
mediaType = MediaType.ALL,
presentation = Presentation.FULLSCREENMODAL,
language = Language.SYSTEM,
crop = null,
isSaveSystemAlbum = false,
color = config.primaryColor,
cameraDevice = it.cameraDevice,
videoMaximumDuration = it.videoMaximumDuration
)
setCameraInterceptListener(CameraEngine(appContext, cameraConfig))
}
}
.setVideoThumbnailListener(VideoThumbnailEngine(getVideoThumbnailDir()))
.setImageSpanCount(config.numberOfColumn?.toInt() ?: 3)
.setMaxSelectNum(maxSelect)
.isDirectReturnSingle(true)
.isSelectZoomAnim(true)
.isPageStrategy(true, 50)
.isWithSelectVideoImage(true)
.setMaxVideoSelectNum(if (maxVideo != 20) maxVideo else maxSelect)
.isMaxSelectEnabledMask(true)
.isAutoVideoPlay(true)
.isFastSlidingSelect(allowSwipeToSelect)
.isPageSyncAlbumCount(true)
// isPreview
.isPreviewImage(isPreview)
.isPreviewVideo(isPreview)
.isDisplayTimeAxis(true)
.setSelectionMode(selectMode)
.isOriginalControl(config.isHiddenOriginalButton == false)
.setLanguage(getLanguage(config.language))
.isPreviewFullScreenMode(true)
.forResult(object : OnResultCallbackListener<LocalMedia?> {
override fun onResult(localMedia: ArrayList<LocalMedia?>?) {
var data: Array<PickerResult> = arrayOf()
if (localMedia?.size == 0 || localMedia == null) {
resolved(arrayOf())
return
}
// set dataList
dataList = localMedia.filterNotNull().toMutableList()
localMedia.forEach { item ->
if (item != null) {
val media = getResult(item)
data += media // Add the media to the data array
}
}
resolved(data)
}
override fun onCancel() {
//
}
})
}
@ReactMethod
fun openCrop(
image: String,
options: NitroCropConfig,
resolved: (result: CropResult) -> Unit,
rejected: (reject: Double) -> Unit
) {
cropOption = Options()
setCropOption(
PickerCropConfig(
circle = options.circle,
ratio = options.ratio,
defaultRatio = options.defaultRatio,
freeStyle = options.freeStyle
)
)
try {
val uri = when {
// image network
image.startsWith("http://") || image.startsWith("https://") -> {
// Handle remote URL
val url = URL(image)
val connection = url.openConnection() as HttpURLConnection
connection.doInput = true
connection.connect()
val inputStream = connection.inputStream
// Create a temp file to store the image
val file = File(appContext.cacheDir, "CROP_")
file.outputStream().use { output ->
inputStream.copyTo(output)
}
Uri.fromFile(file)
}
else -> Uri.parse(image)
}
val destinationUri = Uri.fromFile(
File(getSandboxPath(appContext), DateUtils.getCreateFileName("CROP_") + ".jpeg")
)
val uCrop = UCrop.of<Any>(uri, destinationUri).withOptions(cropOption)
// set engine
uCrop.setImageEngine(CropImageEngine())
// start edit
val cropActivityEventListener = object : BaseActivityEventListener() {
override fun onActivityResult(
activity: Activity,
requestCode: Int,
resultCode: Int,
data: Intent?
) {
if (resultCode == Activity.RESULT_OK && requestCode == REQUEST_CROP) {
val resultUri = UCrop.getOutput(data!!)
val width = UCrop.getOutputImageWidth(data).toDouble()
val height = UCrop.getOutputImageHeight(data).toDouble()
resultUri?.let {
val result = CropResult(
path = it.toString(),
width,
height,
)
resolved(result)
}
} else if (resultCode == UCrop.RESULT_ERROR) {
val cropError = UCrop.getError(data!!)
rejected(0.0)
}
// Remove listener after getting result
reactApplicationContext.removeActivityEventListener(this)
}
}
// Add listener before starting UCrop
reactApplicationContext.addActivityEventListener(cropActivityEventListener)
reactApplicationContext.currentActivity?.let { uCrop.start(it, REQUEST_CROP) }
} catch (e: Exception) {
rejected(0.0)
}
}
@ReactMethod
fun openPreview(
media: Array<MediaPreview>,
index: Int,
config: NitroPreviewConfig,
onLongPress: (index: Double) -> Unit
) {
val imageEngine = GlideEngine.createGlideEngine()
val assets: ArrayList<LocalMedia> = arrayListOf()
val previewStyle = PictureSelectorStyle()
val titleBarStyle = TitleBarStyle()
previewStyle.windowAnimationStyle.setActivityEnterAnimation(R.anim.anim_modal_in)
previewStyle.windowAnimationStyle.setActivityExitAnimation(com.luck.picture.lib.R.anim.ps_anim_modal_out)
previewStyle.selectMainStyle.previewBackgroundColor = Color.BLACK
titleBarStyle.previewTitleBackgroundColor = Color.BLACK
previewStyle.titleBarStyle = titleBarStyle
media.withIndex().forEach { (index, mediaItem) ->
var asset: LocalMedia? = null
mediaItem.path?.let { path ->
// network asset
if (path.startsWith("https://") || path.startsWith("http://")) {
val localMedia = LocalMedia.create()
localMedia.path = path
localMedia.mimeType =
if (mediaItem.type == ResultType.VIDEO) "video/mp4" else MediaUtils.getMimeTypeFromMediaHttpUrl(
path
) ?: "image/jpg"
asset = localMedia
} else {
asset = LocalMedia.generateLocalMedia(appContext, path)
}
}
asset?.let {
it.setPosition(index)
assets.add(it)
}
}
val activity = reactApplicationContext.currentActivity
?: throw IllegalStateException("No current Activity available")
PictureSelector
.create(activity)
.openPreview()
.setImageEngine(imageEngine)
.setLanguage(getLanguage(config.language))
.setSelectorUIStyle(previewStyle)
.isPreviewFullScreenMode(true)
.isAutoVideoPlay(config.videoAutoPlay == true)
.setVideoPlayerEngine(ExoPlayerEngine())
.isVideoPauseResumePlay(true)
.setCustomLoadingListener(getCustomLoadingListener())
.setExternalPreviewEventListener(object : OnExternalPreviewEventListener {
override fun onPreviewDelete(position: Int) {
//
}
override fun onLongPressDownload(context: Context, media: LocalMedia): Boolean {
onLongPress(media.position.toDouble())
return true
}
})
.startFragmentPreview(index, false, assets)
}
private fun getCustomLoadingListener(): OnCustomLoadingListener {
return OnCustomLoadingListener { context -> LoadingDialog(context) }
}
@ReactMethod
fun openCamera(
config: NitroCameraConfig,
resolved: (result: CameraResult) -> Unit,
rejected: (reject: Double) -> Unit
) {
val activity = reactApplicationContext.currentActivity
?: throw IllegalStateException("No current Activity available")
val chooseMode = getChooseMode(config.mediaType)
PictureSelector
.create(activity)
.openCamera(chooseMode)
.setLanguage(getLanguage(config.language))
.setCameraInterceptListener(CameraEngine(appContext, config))
.isQuickCapture(true)
.isOriginalControl(true)
.setVideoThumbnailListener(VideoThumbnailEngine(getVideoThumbnailDir()))
.apply {
if (config.crop != null) {
setCropEngine(CropEngine(cropOption))
}
}
.forResult(object : OnResultCallbackListener<LocalMedia?> {
override fun onResult(results: java.util.ArrayList<LocalMedia?>?) {
results?.first()?.let {
val result = getResult(it)
resolved(
CameraResult(
path = result.path,
type = result.type,
width = result.width,
height = result.height,
duration = result.duration,
thumbnail = result.thumbnail,
fileName = result.fileName
)
)
}
}
override fun onCancel() {
// rejected(0.0)
}
})
}
private fun getChooseMode(mediaType: MediaType): Int {
return when (mediaType) {
MediaType.VIDEO -> SelectMimeType.ofVideo()
MediaType.IMAGE -> SelectMimeType.ofImage()
else -> SelectMimeType.ofAll()
}
}
private fun getVideoThumbnailDir(): String {
val externalFilesDir: File? = appContext.getExternalFilesDir("")
val customFile = File(externalFilesDir?.absolutePath, "Thumbnail")
if (!customFile.exists()) {
customFile.mkdirs()
}
return customFile.absolutePath + File.separator
}
private fun getLanguage(language: Language): Int {
return when (language) {
Language.VI -> LanguageConfig.VIETNAM // -> 🇻🇳 My country. Yeahhh
Language.EN -> LanguageConfig.ENGLISH
Language.ZH_HANS -> LanguageConfig.CHINESE
Language.ZH_HANT -> LanguageConfig.TRADITIONAL_CHINESE
Language.DE -> LanguageConfig.GERMANY
Language.KO -> LanguageConfig.KOREA
Language.FR -> LanguageConfig.FRANCE
Language.JA -> LanguageConfig.JAPAN
Language.AR -> LanguageConfig.AR
Language.RU -> LanguageConfig.RU
else -> LanguageConfig.SYSTEM_LANGUAGE
}
}
private fun setCropOption(config: PickerCropConfig?) {
cropOption.setShowCropFrame(true)
cropOption.setShowCropGrid(true)
cropOption.setCircleDimmedLayer(config?.circle ?: false)
cropOption.setCropOutputPathDir(getSandboxPath(appContext))
cropOption.isCropDragSmoothToCenter(true)
cropOption.isForbidSkipMultipleCrop(true)
cropOption.setMaxScaleMultiplier(100f)
cropOption.setToolbarWidgetColor(Color.BLACK)
cropOption.setStatusBarColor(Color.WHITE)
cropOption.isDarkStatusBarBlack(true)
cropOption.isDragCropImages(true)
cropOption.setFreeStyleCropEnabled(config?.freeStyle ?: true)
cropOption.setSkipCropMimeType(*getNotSupportCrop())
val ratioCount = config?.ratio?.size ?: 0
if (config?.defaultRatio != null || ratioCount > 0) {
var ratioList = arrayOf(AspectRatio("Original", 0f, 0f))
if (ratioCount > 0) {
config?.ratio?.take(4)?.toTypedArray()?.forEach { item ->
ratioList += AspectRatio(
item.title, item.width.toFloat(), item.height.toFloat()
)
}
}
// Add default Aspects
ratioList += arrayOf(
AspectRatio(null, 1f, 1f),
AspectRatio(null, 16f, 9f),
AspectRatio(null, 4f, 3f),
AspectRatio(null, 3f, 2f)
)
config?.defaultRatio?.let {
val defaultRatio = AspectRatio(it.title, it.width.toFloat(), it.height.toFloat())
ratioList = arrayOf(defaultRatio) + ratioList
}
cropOption.apply {
setAspectRatioOptions(
0,
*ratioList.take(5).toTypedArray()
)
}
}
}
private fun getNotSupportCrop(): Array<String> {
return arrayOf(PictureMimeType.ofGIF(), PictureMimeType.ofWEBP())
}
private fun setEditMediaEvent(): OnMediaEditInterceptListener {
return MediaEditInterceptListener(getSandboxPath(appContext), cropOption)
}
private fun setStyle() {
val primaryColor = ColorPropConverter.getColor(config.primaryColor, appContext)
val isNumber =
config.selectMode == SelectMode.MULTIPLE && config.selectBoxStyle == SelectBoxStyle.NUMBER
val selectType = if (isNumber) R.drawable.picture_selector else R.drawable.checkbox_selector
val isDark = config.theme == Theme.DARK
val backgroundDark = ColorPropConverter.getColor(config.backgroundDark, appContext)
?: ContextCompat.getColor(
appContext, com.luck.picture.lib.R.color.ps_color_33
)
val foreground = if (isDark) Color.WHITE else Color.BLACK
val background = if (isDark) backgroundDark else Color.WHITE
val titleBar = TitleBarStyle()
val bottomBar = BottomNavBarStyle()
val mainStyle = SelectMainStyle()
val iconBack =
if (isDark) com.luck.picture.lib.R.drawable.ps_ic_back else com.luck.picture.lib.R.drawable.ps_ic_black_back
cropOption.setLogoColor(primaryColor ?: Color.BLACK)
// TITLE BAR
titleBar.titleBackgroundColor = background
titleBar.isAlbumTitleRelativeLeft = true
titleBar.titleAlbumBackgroundResource = com.luck.picture.lib.R.drawable.ps_album_bg
titleBar.titleDrawableRightResource = com.luck.picture.lib.R.drawable.ps_ic_grey_arrow
titleBar.previewTitleLeftBackResource = iconBack
titleBar.titleLeftBackResource = iconBack
titleBar.isHideCancelButton = true
// BOTTOM BAR
bottomBar.bottomPreviewNormalTextColor = foreground
bottomBar.bottomPreviewSelectTextColor = foreground
bottomBar.bottomNarBarBackgroundColor = background
bottomBar.bottomEditorTextColor = foreground
bottomBar.bottomOriginalTextColor = foreground
bottomBar.bottomPreviewNarBarBackgroundColor = background
mainStyle.mainListBackgroundColor = foreground
mainStyle.selectNormalTextColor = foreground
mainStyle.isDarkStatusBarBlack = !isDark
mainStyle.statusBarColor = background
mainStyle.mainListBackgroundColor = background
mainStyle.adapterPreviewGalleryItemSize = DensityUtil.dip2px(appContext, 52f);
mainStyle.adapterPreviewGalleryBackgroundResource =
if (isDark) com.luck.picture.lib.R.drawable.ps_preview_gallery_bg else R.drawable.preview_gallery_white_bg
mainStyle.adapterPreviewGalleryFrameResource = R.drawable.preview_gallery_item
mainStyle.previewBackgroundColor = background
bottomBar.isCompleteCountTips = false
bottomBar.bottomOriginalTextSize = Constant.TOOLBAR_TEXT_SIZE
bottomBar.bottomSelectNumTextSize = Constant.TOOLBAR_TEXT_SIZE
// bottomBar.bottomPreviewNormalTextSize = Constant.TOOLBAR_TEXT_SIZE
// bottomBar.bottomEditorTextSize = Constant.TOOLBAR_TEXT_SIZE
// MAIN STYLE
mainStyle.isCompleteSelectRelativeTop = false
mainStyle.isPreviewDisplaySelectGallery = true
mainStyle.isAdapterItemIncludeEdge = true
mainStyle.isPreviewSelectRelativeBottom = false
// mainStyle.previewSelectTextSize = Constant.TOOLBAR_TEXT_SIZE
mainStyle.selectTextColor = primaryColor ?: Color.BLACK
// mainStyle.selectTextSize = Constant.TOOLBAR_TEXT_SIZE
mainStyle.selectBackground = selectType
mainStyle.isSelectNumberStyle = isNumber
mainStyle.previewSelectBackground = selectType
mainStyle.isPreviewSelectNumberStyle = isNumber
if (config.camera != null) {
// hide title camera
mainStyle.adapterCameraText = " "
}
// custom toolbar text
config.text.let { text ->
text?.finish.let {
mainStyle.selectText = it
mainStyle.selectNormalText = it
mainStyle.selectText = it
}
text?.preview.let {
mainStyle.previewSelectText = it
}
text?.original.let {
bottomBar.bottomOriginalText = it
}
text?.edit.let {
bottomBar.bottomEditorText = it
}
}
// SET STYLE
style.titleBarStyle = titleBar
style.bottomBarStyle = bottomBar
style.selectMainStyle = mainStyle
// ANIMATION SLIDE FROM BOTTOM
val animationStyle = PictureWindowAnimationStyle()
animationStyle.setActivityEnterAnimation(com.luck.picture.lib.R.anim.ps_anim_up_in)
animationStyle.setActivityExitAnimation(com.luck.picture.lib.R.anim.ps_anim_down_out)
style.windowAnimationStyle = animationStyle
}
private fun handleSelectedAssets(config: NitroConfig) {
val assets = config.selectedAssets
val assetIds = assets.map { it.localIdentifier }.toSet()
dataList = dataList.filter { media ->
assetIds.contains(media.id.toString())
}.toMutableList()
}
private fun getResult(item: LocalMedia): PickerResult {
val type: ResultType =
if (item.mimeType.startsWith("video/")) ResultType.VIDEO else ResultType.IMAGE
var path = item.path
var width: Double = item.width.toDouble()
var height: Double = item.height.toDouble()
val thumbnail = item.videoThumbnailPath?.let {
if (!it.startsWith("file://")) "file://$it" else it
}
if (item.isCut) {
path = "file://${item.cutPath}"
width = item.cropImageWidth.toDouble()
height = item.cropImageHeight.toDouble()
}
if (!path.startsWith("file://") && !path.startsWith("content://") && type == ResultType.IMAGE)
path = "file://$path"
val media = PickerResult(
localIdentifier = item.id.toString(),
width,
height,
mime = item.mimeType,
size = item.size.toDouble(),
bucketId = item.bucketId.toDouble(),
realPath = item.realPath,
parentFolderName = item.parentFolderName,
creationDate = item.dateAddedTime.toDouble(),
crop = item.isCut,
path,
type,
fileName = item.fileName,
thumbnail = thumbnail,
duration = item.duration.toDouble()
)
return media
}
override fun getAppContext(): Context {
return reactApplicationContext
}
override fun getPictureSelectorEngine(): PictureSelectorEngine {
return PictureSelectorEngineImp()
}
}
================================================
FILE: android/src/main/java/com/margelo/nitro/multipleimagepicker/MultipleImagePickerPackage.java
================================================
package com.margelo.nitro.multipleimagepicker;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.facebook.react.bridge.NativeModule;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.module.model.ReactModuleInfoProvider;
import com.facebook.react.TurboReactPackage;
import java.util.HashMap;
public class MultipleImagePickerPackage extends TurboReactPackage {
@Nullable
@Override
public NativeModule getModule(@NonNull String name, @NonNull ReactApplicationContext reactContext) {
return null;
}
@Override
public ReactModuleInfoProvider getReactModuleInfoProvider() {
return HashMap::new;
}
static {
System.loadLibrary("MultipleImagePicker");
}
}
================================================
FILE: android/src/main/java/com/margelo/nitro/multipleimagepicker/PictureSelectorEngineImp.kt
================================================
package com.margelo.nitro.multipleimagepicker
import android.util.Log
import com.luck.picture.lib.basic.IBridgeLoaderFactory
import com.luck.picture.lib.engine.*
import com.luck.picture.lib.engine.CompressEngine
import com.luck.picture.lib.entity.LocalMedia
import com.luck.picture.lib.interfaces.OnInjectLayoutResourceListener
import com.luck.picture.lib.interfaces.OnResultCallbackListener
class PictureSelectorEngineImp : PictureSelectorEngine {
/**
* 重新创建[ImageEngine]引擎
*
* @return
*/
override fun createImageLoaderEngine(): ImageEngine {
return GlideEngine.createGlideEngine()
}
/**
* 重新创建[CompressEngine]引擎
*
* @return
*/
override fun createCompressEngine(): CompressEngine? {
// TODO 这种情况是内存极度不足的情况下,比如开启开发者选项中的不保留活动或后台进程限制,导致CompressEngine被回收
return null
}
/**
* 重新创建[CompressEngine]引擎
*
* @return
*/
override fun createCompressFileEngine(): CompressFileEngine? {
// TODO 这种情况是内存极度不足的情况下,比如开启开发者选项中的不保留活动或后台进程限制,导致CompressFileEngine被回收
return null
}
/**
* 重新创建[ExtendLoaderEngine]引擎
*
* @return
*/
override fun createLoaderDataEngine(): ExtendLoaderEngine? {
return null
}
override fun createVideoPlayerEngine(): VideoPlayerEngine<*>? {
return null
}
override fun onCreateLoader(): IBridgeLoaderFactory? {
return null
}
/**
* 重新创建[SandboxFileEngine]引擎
*
* @return
*/
override fun createSandboxFileEngine(): SandboxFileEngine? {
return null
}
override fun createUriToFileTransformEngine(): UriToFileTransformEngine? {
return null
}
override fun createLayoutResourceListener(): OnInjectLayoutResourceListener? {
return null
}
override fun getResultCallbackListener(): OnResultCallbackListener<LocalMedia?> {
return object : OnResultCallbackListener<LocalMedia?> {
override fun onResult(result: ArrayList<LocalMedia?>) {
Log.i(TAG, "onResult:" + result.size)
}
override fun onCancel() {
Log.i(TAG, "PictureSelector onCancel")
}
}
}
companion object {
private val TAG = PictureSelectorEngineImp::class.java.simpleName
}
}
================================================
FILE: android/src/main/java/com/margelo/nitro/multipleimagepicker/VideoThumbnailEngine.kt
================================================
package com.margelo.nitro.multipleimagepicker
import android.content.Context
import android.graphics.Bitmap
import android.graphics.drawable.Drawable
import com.bumptech.glide.Glide
import com.bumptech.glide.request.target.CustomTarget
import com.bumptech.glide.request.transition.Transition
import com.luck.picture.lib.interfaces.OnKeyValueResultCallbackListener
import com.luck.picture.lib.interfaces.OnVideoThumbnailEventListener
import com.luck.picture.lib.utils.PictureFileUtils
import java.io.ByteArrayOutputStream
import java.io.File
import java.io.FileOutputStream
import java.io.IOException
class VideoThumbnailEngine(private val targetPath: String) : OnVideoThumbnailEventListener {
override fun onVideoThumbnail(
context: Context, videoPath: String, call: OnKeyValueResultCallbackListener
) {
Glide.with(context).asBitmap().sizeMultiplier(0.6f).load(videoPath)
.into(object : CustomTarget<Bitmap?>() {
override fun onResourceReady(
resource: Bitmap, transition: Transition<in Bitmap?>?
) {
val stream = ByteArrayOutputStream()
resource.compress(Bitmap.CompressFormat.JPEG, 60, stream)
var fos: FileOutputStream? = null
var result: String? = null
try {
val targetFile =
File(targetPath, "thumbnails_" + System.currentTimeMillis() + ".jpg")
fos = FileOutputStream(targetFile)
fos.write(stream.toByteArray())
fos.flush()
result = targetFile.absolutePath
} catch (e: IOException) {
e.printStackTrace()
} finally {
PictureFileUtils.close(fos)
PictureFileUtils.close(stream)
}
call.onCallback(videoPath, result)
}
override fun onLoadCleared(placeholder: Drawable?) {
call.onCallback(videoPath, "")
}
})
}
}
================================================
FILE: android/src/main/res/anim/anim_modal_in.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/linear_interpolator"
android:shareInterpolator="true">
<alpha
android:fromAlpha="0.2"
android:toAlpha="1"
android:duration="90"/>
<scale
android:fromXScale="0.7"
android:toXScale="1.0"
android:fromYScale="0.7"
android:toYScale="1.0"
android:pivotX="50%"
android:pivotY="50%"
android:duration="135"/>
</set>
================================================
FILE: android/src/main/res/drawable/checkbox_selector.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/picture_not_selected" android:state_selected="false" />
<item android:drawable="@drawable/ic_checkmark" android:state_selected="true" />
</selector>
================================================
FILE: android/src/main/res/drawable/complete_button.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="@color/app_color_pri" />
<corners android:radius="5dp" />
<padding
android:bottom="5dp"
android:left="10dp"
android:right="10dp"
android:top="5dp" />
</shape>
================================================
FILE: android/src/main/res/drawable/ic_checkmark.xml
================================================
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:pathData="M12,12m-12,0a12,12 0,1 1,24 0a12,12 0,1 1,-24 0"
android:fillColor="@color/app_color_33"/>
<path
android:pathData="M15.7936,6.5936L10.1279,14.0879L7.6847,10.9253C7.4402,10.6113 7.081,10.4072 6.6861,10.358C6.2912,10.3088 5.8928,10.4185 5.5788,10.663C5.2648,10.9075 5.0607,11.2667 5.0115,11.6617C4.9623,12.0566 5.072,12.4549 5.3165,12.7689L8.9588,17.4304C9.0999,17.609 9.2799,17.7532 9.4851,17.8519C9.6902,17.9506 9.9152,18.0012 10.1429,18C10.3718,17.9994 10.5975,17.9465 10.8028,17.8451C11.008,17.7438 11.1873,17.5968 11.327,17.4154L18.1768,8.4222C18.4193,8.1042 18.5255,7.7029 18.4721,7.3065C18.4187,6.9102 18.21,6.5513 17.892,6.3088C17.574,6.0663 17.1727,5.9601 16.7763,6.0135C16.38,6.0669 16.0211,6.2756 15.7786,6.5936H15.7936Z"
android:fillColor="#ffffff"/>
</vector>
================================================
FILE: android/src/main/res/drawable/ic_down.xml
================================================
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:pathData="M12,16a1,1 0,0 1,-0.71 -0.29l-6,-6a1,1 0,0 1,1.42 -1.42l5.29,5.3 5.29,-5.29a1,1 0,0 1,1.41 1.41l-6,6a1,1 0,0 1,-0.7 0.29z"
android:fillColor="@color/app_color_grey"/>
</vector>
================================================
FILE: android/src/main/res/drawable/num_oval.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval"
android:useLevel="false">
<solid android:color="@color/app_color_33" />
<stroke
android:width="1.5dp"
android:color="@color/app_color_white" />
<size
android:width="24dp"
android:height="24dp" />
</shape>
================================================
FILE: android/src/main/res/drawable/picture_not_selected.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval"
android:useLevel="false">
<stroke
android:width="2dp"
android:color="@color/app_color_9b" />
<size
android:width="24dp"
android:height="24dp" />
</shape>
================================================
FILE: android/src/main/res/drawable/picture_selector.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<selector android:id="@+id/picture_selector" xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/num_oval" android:state_selected="true" />
<item android:drawable="@drawable/picture_not_selected" android:state_selected="false" />
</selector>
================================================
FILE: android/src/main/res/drawable/preview_gallery_item.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="@color/ps_color_transparent" />
<stroke
android:width="2dp"
android:color="@color/app_color_white" />
</shape>
================================================
FILE: android/src/main/res/drawable/preview_gallery_white_bg.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:left="-1dp"
android:right="-1dp"
android:top="-1dp">
<shape android:shape="rectangle">
<solid android:color="@color/app_color_white_transparent" />
<padding
android:left="0dp"
android:right="0dp" />
<corners android:radius="0dp" />
</shape>
</item>
</layer-list>
================================================
FILE: android/src/main/res/layout/loading_dialog.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/loading"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/ps_dialog_loading_bg"
android:orientation="vertical"
android:padding="10dp">
<ProgressBar
android:layout_width="25dp"
android:layout_height="25dp"
android:layout_gravity="center_horizontal"
android:indeterminateBehavior="repeat"
/>
</LinearLayout>
================================================
FILE: android/src/main/res/values/colors.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="app_color_grey">#393a3e</color>
<color name="app_color_black">#000000</color>
<color name="app_color_f6">#f6f6f6</color>
<color name="app_color_fa">#fafafa</color>
<color name="app_color_divider">#B6B6B6</color>
<color name="app_color_c51">#f94c51</color>
<color name="app_color_green">#43c117</color>
<color name="app_color_53575e">#53575e</color>
<color name="app_color_transparent">#00000000</color>
<color name="app_color_white">#FFFFFF</color>
<color name="app_color_white_transparent">#E0DBDBDB</color>
<color name="app_color_blue">#7D7DFF</color>
<color name="app_color_9b">#9b9b9b</color>
<color name="app_color_e0ff6100">#E0FF6100</color>
<color name="app_color_red">#FF0000</color>
<color name="app_color_pri">#FB9300</color>
<color name="app_color_33">#333333</color>
<color name="app_color_3310">#0D333333</color>
</resources>
================================================
FILE: android/src/main/res/values/styles.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="Base.Theme.NoActionBar" parent="Theme.AppCompat.Light.NoActionBar">
<item name="android:windowOptOutEdgeToEdgeEnforcement">true</item>
</style>
<style name="Picture.Theme.Translucent" parent="Base.Theme.NoActionBar">
<item name="android:windowBackground">@color/ps_color_transparent</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowIsTranslucent">true</item>
</style>
<style name="PictureThemeWindowStyle">
<item name="android:windowEnterAnimation">@anim/ps_anim_album_show</item>
<item name="android:windowExitAnimation">@anim/ps_anim_album_dismiss</item>
</style>
<style name="PictureThemeDialogWindowStyle">
<item name="android:windowEnterAnimation">@anim/ps_anim_modal_in</item>
<item name="android:windowExitAnimation">@anim/ps_anim_modal_out</item>
</style>
<style name="Picture.Theme.Dialog.AudioStyle">
<item name="android:windowEnterAnimation">@anim/ps_anim_enter</item>
<item name="android:windowExitAnimation">@anim/ps_anim_exit</item>
</style>
<style name="Picture.Theme.AlertDialog" parent="android:Theme.Dialog">
<item name="android:windowIsFloating">true</item>
<item name="android:windowIsTranslucent">false</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowFullscreen">false</item>
<item name="android:windowBackground">@color/ps_color_transparent</item>
<item name="android:windowAnimationStyle">@null</item>
<item name="android:backgroundDimEnabled">false</item>
<item name="android:backgroundDimAmount">0.4</item>
</style>
<style name="PictureThemeDialogFragmentAnim" mce_bogus="1" parent="android:Animation">
<item name="android:windowEnterAnimation">@anim/ps_anim_up_in</item>
<item name="android:windowExitAnimation">@anim/ps_anim_down_out</item>
</style>
<style name="Picture.Theme.Dialog" parent="@android:style/Theme.Dialog">
<!-- 边框 -->
<item name="android:windowFrame">@android:color/transparent</item>
<!-- 是否浮现在activity之上 -->
<item name="android:windowIsFloating">true</item>
<!-- 半透明 -->
<item name="android:windowIsTranslucent">false</item>
<!-- 无标题 -->
<item name="android:windowNoTitle">true</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item>
<item name="android:windowSoftInputMode">stateUnspecified|adjustPan</item>
<!-- 自己想要的背景 -->
<item name="android:windowBackground">@android:color/transparent</item>
</style>
</resources>
================================================
FILE: babel.config.js
================================================
module.exports = {
presets: ['module:metro-react-native-babel-preset'],
};
================================================
FILE: docs/.gitignore
================================================
# Dependencies
/node_modules
# Production
/build
# Generated files
.docusaurus
.cache-loader
# Misc
.DS_Store
.env.local
.env.development.local
.env.test.local
.env.production.local
npm-debug.log*
yarn-debug.log*
yarn-error.log*
================================================
FILE: docs/docs/CAMERA.mdx
================================================
---
id: camera
title: Camera 📸
sidebar_label: Camera 📸
slug: /camera
---
import ReactPlayer from 'react-player'
The camera module provides a simple interface for capturing photos and recording videos with customizable options.
<ReactPlayer
playing
controls
width="100%"
height="100%"
url="https://github.com/user-attachments/assets/7afbc4cd-07a7-46b0-8501-9f1b3be70699"
/>
## Usage
```typescript
import { openCamera } from '@baronha/react-native-multiple-image-picker'
const open = async () => {
try {
const response = await openCamera({
mediaType: 'all',
cameraDevice: 'back'
})
console.log(response)
} catch (e) {
console.log(e)
}
}
```
## Configuration Options
### `mediaType`
Specifies the type of media that can be captured.
```typescript
mediaType?: 'video' | 'image' | 'all'
```
**Default:** `'all'`
### `cameraDevice`
Selects which camera to use for capture.
```typescript
cameraDevice?: 'front' | 'back'
```
**Default:** `'back'`
### `videoMaximumDuration`
Sets the maximum duration for video recording in seconds.
```typescript
videoMaximumDuration?: number
```
**Default:** No limit
### `presentation`
Controls how the camera view is presented (iOS only).
```typescript
presentation?: 'fullScreenModal' | 'formSheet'
```
**Default:** `'fullScreenModal'`
### `language`
Sets the interface language.
```typescript
language?: Language
```
**Supported values:**
- 🌐 `'system'`: System default
- 🇨🇳 `'zh-Hans'`: Simplified Chinese
- 🇹🇼 `'zh-Hant'`: Traditional Chinese
- 🇯🇵 `'ja'`: Japanese
- 🇰🇷 `'ko'`: Korean
- 🇬🇧 `'en'`: English
- 🇹🇭 `'th'`: Thai
- 🇮🇩 `'id'`: Indonesian
- 🇻🇳 `'vi'`: Vietnamese
- 🇷🇺 `'ru'`: Russian
- 🇩🇪 `'de'`: German
- 🇫🇷 `'fr'`: French
- 🇸🇦 `'ar'`: Arabic
**Default:** `'system'`
### `crop`
Enables and configures image cropping after capture.
See details in [Crop Configuration](/config/#crop-)
### `color`
- **Type**: [**ColorValue**](https://reactnative.dev/docs/colors)
- **Default**: 🟦 `#2979ff`
- **Required**: No
- **Platform**: iOS, Android
## Result Type
The camera function returns a `CameraResult` object:
```typescript
interface CameraResult {
/**
* Path to the captured media file
* - iOS: Starts with 'file://'
* - Android: Can start with 'file://' or 'content://'
*/
path: string
/**
* Type of captured media
* - 'video': For video recordings
* - 'image': For photos
*/
type: 'video' | 'image'
/**
* Width of the media in pixels
* For cropped images, this represents the final cropped width
*/
width: number
/**
* Height of the media in pixels
* For cropped images, this represents the final cropped height
*/
height: number
/**
* Duration of the video in seconds
* Only available when type is 'video'
* @platform ios, android
*/
duration: number
/**
* Path to the video thumbnail image
* Only available when type is 'video'
* Format: 'file://path/to/thumbnail.jpg'
* @platform ios, android
*/
thumbnail?: string
/**
* Original filename of the captured media
* Example: 'IMG_1234.JPG' or 'VID_5678.MP4'
*/
fileName: string
}
```
### Example Response
#### Photo Capture
```typescript
{
path: 'file:///var/mobile/Containers/.../IMG_0123.JPG',
type: 'image',
width: 3024,
height: 4032,
fileName: 'IMG_0123.JPG'
}
```
#### Video Recording
```typescript
{
path: 'file:///var/mobile/Containers/.../VID_0124.MP4',
type: 'video',
width: 1920,
height: 1080,
duration: 15.6,
thumbnail: 'file:///var/mobile/Containers/.../VID_0124_thumb.JPG',
fileName: 'VID_0124.MP4'
}
```
### Notes
- The `path` format may vary between iOS and Android. Always use the provided path as-is.
- Video thumbnails are automatically generated and provided in the `thumbnail` property.
- For cropped images, the `width` and `height` reflect the dimensions after cropping.
- The `duration` property is only available for video recordings and is measured in seconds.
- All file paths are provided with the appropriate prefix (`file://` or `content://`).
## Examples
### Photo Capture
```typescript
const result = await openCamera({
mediaType: 'image',
cameraDevice: 'back'
})
```
### Video Recording
```typescript
const result = await openCamera({
mediaType: 'video',
videoMaximumDuration: 30,
cameraDevice: 'front'
})
```
### With Cropping
```typescript
const result = await openCamera({
mediaType: 'image',
crop: {
circle: true,
ratio: [
{ title: "Square", width: 1, height: 1 },
{ title: "Portrait", width: 3, height: 4 }
]
}
})
```
### Custom UI
```typescript
const result = await openCamera({
color: '#FF6B6B',
language: 'en',
presentation: 'fullScreenModal'
})
```
## Platform Specific Notes
### iOS
- Supports `presentation` option for modal style
- Full support for all UI customization options
### Android
- Maximum 4 custom crop ratios
- Some UI elements may appear differently
## Required Permissions
### iOS
Add to `Info.plist`:
```xml
<key>NSCameraUsageDescription</key>
<string>Camera access is required to take photos and videos</string>
<key>NSMicrophoneUsageDescription</key>
<string>Microphone access is required to record videos</string>
```
### Android
Add to `AndroidManifest.xml`:
```xml
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
```
================================================
FILE: docs/docs/CONFIG.mdx
================================================
---
id: config
title: Configuration
sidebar_label: Configuration
slug: /config
---
# Configuration
### `selectMode`
Mode of selection in the picker.
- **Type**: string
- **Default**: `multiple`
- **Required**: No
- **Options**:
- `single`: Single selection mode
- `multiple`: Multiple selection mode
### `selectedAssets`
Keep previous selection in Multiple Image Picker <br/>
See [**Result**](/result)
- **Type**: Result[]
- **Default**: `[]`
- **Required**: No
### `allowedLimit`
Display additional select more media when permission on `iOS` is limited.
- **Type**: boolean
- **Default**: `true`
- **Required**: No
- **Platform**: iOS
### `allowSwipeToSelect`
Allow swiping to select items.
- **Type**: boolean
- **Default**: `true`
- **Required**: No
- **Platform**: iOS, Android
### `isHiddenOriginalButton`
Hide the original button.
- **Type**: boolean
- **Default**: `false`
- **Required**: No
- **Platform**: iOS, Android
### `maxSelect`
Maximum number of items that can be selected.
- **Type**: number
- **Default**: `20`
- **Required**: No
- **Platform**: iOS, Android
### `maxVideo`
Maximum number of videos allowed.
- **Type**: number
- **Default**: `20`
- **Required**: No
- **Platform**: iOS, Android
## Camera 📸
Configuration camera functionality.
- **Type**: object
- **Default**: `{}`
- **Required**: No
- **Platform**: iOS, Android
### `cameraDevice`
Camera device to be used.
- **Type**: `string`
- **Default**: `back`
- **Required**: No
- **Platform**: iOS
- **Options**:
- `back`: Back camera
- `front`: Front camera
### `videoMaximumDuration`
Maximum video duration in seconds.
- **Type**: number
- **Default**: 60
- **Required**: No
- **Platform**: iOS, Android
## Crop 🪚
Configuration for image cropping functionality.
- **Type**: object
- **Default**: `undefined`
- **Required**: No
- **Platform**: iOS, Android
### `circle`
Enable circular crop mask.
- **Type**: boolean
- **Default**: `false`
- **Required**: No
- **Platform**: iOS, Android
### `ratio`
Aspect ratios for cropping.
Android: Maximum: 4 items
- **Type**: `array`
- **Default**: `undefined`
- **Required**: No
- **Platform**: iOS, Android
- **Properties**:
- `title`: string - Display title for the ratio (e.g., "Square", "16:9")
- `width`: number - Width value for the aspect ratio
- `height`: number - Height value for the aspect ratio
### `defaultRatio`
Default ratio to be selected when opening the crop interface.
- **Type**: `object`
- **Default**: `undefined`
- **Required**: No
- **Platform**: iOS, Android
- **Properties**:
- `title`: string - Display title for the ratio (e.g., "Square", "16:9")
- `width`: number - Width value for the aspect ratio
- `height`: number - Height value for the aspect ratio
### `freeStyle`
Enable free style cropping.
- **Type**: `boolean`
- **Default**: `false`
- **Required**: No
- **Platform**: iOS, Android
---
## UI Customize 🌈
### `theme`
Theme mode for the picker.
- **Type**: string
- **Default**: `system`
- **Required**: No
- **Platform**: iOS, Android
- **Options**:
- `light`: Light theme
- `dark`: Dark theme
- `system`: System default theme
### `primaryColor`
Primary color for the picker UI elements.
- **Type**: [**ColorValue**](https://reactnative.dev/docs/colors)
- **Default**: 🟦 `#2979ff`
- **Required**: No
- **Platform**: iOS, Android
### `backgroundDark`
Background color for dark mode UI elements.
- **Type**: [**ColorValue**](https://reactnative.dev/docs/colors)
- **Default**: ⚫️ `#1A1A1A`
- **Required**: No
- **Platform**: iOS, Android
### `selectBoxStyle`
Style of selection box in the picker.
- **Type**: string
- **Default**: `number`
- **Required**: No
- **Options**:
- `number`: Show numbers in selection box
- `tick`: Show checkmark in selection box
### `spacing`
Spacing between items in the grid.
- **Type**: number
- **Default**: `2`
- **Required**: No
- **Platform**: iOS, Android
### `numberOfColumn`
Number of columns in the grid view.
- **Type**: number
- **Default**: `4`
- **Required**: No
- **Platform**: iOS, Android
### `presentation`
Modal presentation style for the picker.
- **Type**: string
- **Default**: `fullScreenModal`
- **Required**: No
- **Platform**: iOS
- **Options**:
- `fullScreenModal`: Full screen presentation
- `formSheet`: Form sheet presentation
---
## Filter data 🎞️
### `mediaType`
Type of media to be displayed in the picker.
- **Type**: string
- **Default**: `all`
- **Required**: No
- **Options**:
- `video`: Only show videos
- `image`: Only show images
- `all`: Show both videos and images
### `maxVideoDuration`
Maximum duration for videos in seconds.
- **Type**: number
- **Default**: `undefined`
- **Required**: No
- **Platform**: iOS, Android
### `minVideoDuration`
Minimum duration for videos in seconds.
- **Type**: number
- **Default**: `undefined`
- **Required**: No
- **Platform**: iOS, Android
### `maxFileSize`
Maximum file size in bytes.
- **Type**: number
- **Default**: `undefined`
- **Required**: No
- **Platform**: iOS, Android
---
## Preview 🌠
### `isPreview`
Enable preview functionality.
- **Type**: boolean
- **Default**: `true`
- **Required**: No
- **Platform**: iOS, Android
### `isShowPreviewList`
Show preview list.
- **Type**: boolean
- **Default**: `false`
- **Required**: No
- **Platform**: iOS
### `isHiddenPreviewButton`
Hide the preview button and button mode.
- **Type**: boolean
- **Default**: `false`
- **Required**: No
- **Platform**: iOS, Android
### `allowHapticTouchPreview`
Enable haptic feedback on preview.
- **Type**: boolean
- **Default**: `false`
- **Required**: No
- **Platform**: iOS
---
## Localization 🌐
### `text`
Custom text labels for buttons and headers.
- **Type**: object
- **Default**: `undefined`
- **Required**: No
- **Platform**: iOS, Android
- **Properties**:
- `finish`: string - Text for finish/done button
- `original`: string - Text for original button
- `preview`: string - Text for preview button
- `edit`: string - Text for edit button
### `language`
Interface language for the picker.
- **Type**: string
- **Default**: `system`
- **Required**: No
- **Options**:
- `system`: 🌐 System default
- `zh-Hans`: 🇨🇳 Simplified Chinese
- `zh-Hant`: 🇹🇼 Traditional Chinese
- `ja`: 🇯🇵 Japanese
- `ko`: 🇰🇷 Korean
- `en`: 🇬🇧 English
- `vi`: 🇻🇳 Vietnamese
- `ru`: 🇷🇺 Russian
- `de`: 🇩🇪 German
- `fr`: 🇫🇷 French
- `ar`: 🇸🇦 Arabic
**iOS Only**:
- `id`: 🇮🇩 Indonesian
- `th`: 🇹🇭 Thai
================================================
FILE: docs/docs/CROP.mdx
================================================
---
id: crop
title: Crop 🍕
sidebar_label: Crop 🍕
slug: /crop
---
## Usage
```typescript
import { openCropper } from '@baronha/react-native-multiple-image-picker'
const cropConfig: CropConfig = {
// ...
}
const open = async () => {
try {
const response = await openCropper('file://path/to/image.jpg', cropConfig)
setImages(response)
} catch (e) {
// catch error for multiple image picker
}
}
```
## CropConfig
### `circle`
Enable circular crop mask.
- **Type**: boolean
- **Default**: `false`
- **Required**: No
- **Platform**: iOS, Android
### `ratio`
Aspect ratios for cropping.
Android: Maximum: 4 items
- **Type**: `array`
- **Default**: `undefined`
- **Required**: No
- **Platform**: iOS, Android
- **Properties**:
- `title`: string - Display title for the ratio (e.g., "Square", "16:9")
- `width`: number - Width value for the aspect ratio
- `height`: number - Height value for the aspect ratio
### `defaultRatio`
Default ratio to be selected when opening the crop interface.
- **Type**: `object`
- **Default**: `undefined`
- **Required**: No
- **Platform**: iOS, Android
- **Properties**:
- `title`: string - Display title for the ratio (e.g., "Square", "16:9")
- `width`: number - Width value for the aspect ratio
- `height`: number - Height value for the aspect ratio
### `freeStyle`
Enable free style cropping.
- **Type**: `boolean`
- **Default**: `false`
- **Required**: No
- **Platform**: iOS, Android
### `language`
- **Type**: `string`
- **Default**: `false`
- **Required**: No
- **Platform**: iOS
See [**Language**](/config/#language)
## Result
### `path`
- **Type**: `string`
### `width`
- **Type**: `number`
### `height`
- **Type**: `number`
================================================
FILE: docs/docs/GETTING_STARTED.mdx
================================================
---
id: getting-started
title: Getting Started
sidebar_label: Getting Started
sidebar_id: getting-started
slug: /getting-started
---
import Tabs from '@theme/Tabs'
import TabItem from '@theme/TabItem'
import useBaseUrl from '@docusaurus/useBaseUrl'
## Requirements
Because RNMIP uses Nitro Module, it complies with Nitro Modules' requirements.<br />
View Nitro Modules' requirements [here](https://nitro.margelo.com/docs/minimum-requirements)
<Tabs groupId="platform">
<TabItem value="ios" label="iOS" default>
- `iOS` 13+
- `react-native` 0.75+
- `Xcode` 16+
</TabItem>
<TabItem value="android" label="Android">
- `react-native` 0.75+
- `compileSdkVersion` 34+
</TabItem>
</Tabs>
## Installing
Install [@baronha/react-native-multiple-image-picker](https://www.npmjs.com/package/@baronha/react-native-multiple-image-picker) through npm:
> This package requires `react-native-nitro-modules` to be installed first.
> See [react-native-nitro-modules](https://github.com/mrousavy/nitro) for more information.
<Tabs
groupId="environment"
defaultValue="rn"
values={[
{label: 'React Native', value: 'rn'},
{label: 'Expo', value: 'expo'}
]}>
<TabItem value="rn">
```bash
yarn add @baronha/react-native-multiple-image-picker
yarn add -D react-native-nitro-modules
cd ios && pod install
```
</TabItem>
<TabItem value="expo">
```bash
npx expo install @baronha/react-native-multiple-image-picker
npx expo install react-native-nitro-modules -- --dev
npx expo prebuild
```
</TabItem>
</Tabs>
## Updating manifests
<Tabs
groupId="environment"
defaultValue="rn"
values={[
{label: 'React Native', value: 'rn'},
{label: 'Expo', value: 'expo'}
]}>
<TabItem value="rn">
### Info.plist
Open your project's `Info.plist` and add the following lines inside the outermost `<dict>` tag:
```xml
<key>NSPhotoLibraryAddUsageDescription</key>
<string>$(PRODUCT_NAME) needs photo library permissions</string>
<key>NSPhotoLibraryUsageDescription</key>
<string>$(PRODUCT_NAME) needs photo library permissions</string>
<!-- if you allow camera, you need to add this:-->
<key>NSCameraUsageDescription</key>
<string>$(PRODUCT_NAME) needs to access your Camera</string>
<key>NSMicrophoneUsageDescription</key>
<string>$(PRODUCT_NAME) needs to access your microphone so that you can record audio.</string>
```
</TabItem>
<TabItem value="expo">
### Managed Expo
Config your Expo app (`app.json`, `app.config.json` or `app.config.js`):
```json
{
"name": "my app",
"ios": {
// ...
"infoPlist": {
"NSPhotoLibraryAddUsageDescription": "$(PRODUCT_NAME) needs photo library permissions",
"NSPhotoLibraryUsageDescription": "$(PRODUCT_NAME) needs photo library permissions",
// if you allow camera, you need to add this
"NSCameraUsageDescription": "$(PRODUCT_NAME) needs to access your Camera",
"NSMicrophoneUsageDescription": "$(PRODUCT_NAME) needs to access your microphone so that you can record audio"
}
// ...
}
}
```
Finally, compile the mods:
```bash
npx expo prebuild
```
To apply the changes, build a new binary with EAS:
```bash
eas build
```
</TabItem>
</Tabs>
<br />
#### 🎉 Hooray! You're ready to learn about [Usage](/usage)!
---
================================================
FILE: docs/docs/PREVIEW.mdx
================================================
---
id: preview
title: Preview 🎑
sidebar_label: Preview 🎑
slug: /preview
---
import ReactPlayer from 'react-player'
## Overview
Preview is a simple image viewer that supports both local and remote media. It allows you to preview images and videos seamlessly.
<ReactPlayer
playing
controls
width="100%"
height="100%"
url="https://github.com/user-attachments/assets/92a1c319-ad99-4d24-892c-7cd878787acd"
/>
## Usage
```typescript
import {
openPreview,
PreviewConfig,
} from '@baronha/react-native-multiple-image-picker'
const previewConfig: PreviewConfig = {
language: 'system',
}
const media: MediaPreview[] = [
// remote image
{
path: 'https://images.unsplash.com/photo-1733235015085-fc29c17c4a16?w=500',
type: 'image',
},
// local video
{
path: 'file://Documents/video-sample/mp4',
thumbnail:
'https://images.unsplash.com/photo-1733889886752-f4599c954608?q=80&w=2574&auto=format&fit=crop&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D',
type: 'video',
},
// remote video
{
path: 'https://cdn.pixabay.com/video/2024/02/09/199958-911694865_large.mp4',
type: 'video',
},
]
// call to preview
openPreview(media, 2, previewConfig)
```
## `MediaPreview[]`
`MediaPreview[]` is an array of media objects that you want to preview. Each object in the array should have the following properties:<br/>
**NOTE**: You can also use [`Result[]`](/result) from openPicker's return result
- `path`: A string representing the URL or file path of the media.
- `type`: A string indicating the type of media, either `image` or `video`.
- `thumbnail` (optional): A string representing the URL of the thumbnail image for videos.
- `localIdentifier` (optional): A string representing the local identifier for media from device gallery.
## `index`
default: `0`
The `index` parameter in the `openPreview` function specifies the initial media item to display. It is a zero-based index, meaning that `0` will display the first item in the `MediaPreview` array.
## `previewConfig`
### [`language`](/config/#language)
see [`language`](/config/#language)
### `onLongPress`
`onLongPress` is a callback function that is called when a long press is detected on the media item. It is a function that takes an index as an argument and returns void.
```typescript
onLongPress: (index: number) => void
```
## Additional Information
- Ensure that the media paths are accessible and correctly formatted.
- The `openPreview` function is part of the `@baronha/react-native-multiple-image-picker` package, which should be installed and properly configured in your project.
For more detailed information, refer to the [official documentation](https://github.com/baronha/react-native-multiple-image-picker).
================================================
FILE: docs/docs/RESULT.mdx
================================================
---
id: result
title: Result
sidebar_label: Result
slug: /result
---
The result object returned for each selected media item.
### `path`
- **Type**: string
- **Description**: Local file path of the media
### `fileName`
- **Type**: string
- **Description**: Name of the media file
### `localIdentifier`
- **Type**: string
- **Description**: Unique identifier for the media asset
### `width`
- **Type**: number
- **Description**: Width of the media in pixels
### `height`
- **Type**: number
- **Description**: Height of the media in pixels
### `mime`
- **Type**: string
- **Description**: MIME type of the media file
### `size`
- **Type**: number
- **Description**: File size in bytes
### `bucketId`
- **Type**: number
- **Description**: ID of the bucket containing the media
- **Platform**: Android
### `realPath`
- **Type**: string
- **Description**: Actual file path in the device storage
- **Platform**: Android
### `parentFolderName`
- **Type**: string
- **Description**: Name of the parent folder
- **Platform**: Android
### `creationDate`
- **Type**: number
- **Description**: Creation timestamp of the media
### `type`
- **Type**: string
- **Options**: `image` | `video`
- **Description**: Type of the media file
### `duration`
- **Type**: number
- **Description**: Duration in seconds (for video files)
### `thumbnail`
- **Type**: string
- **Description**: Thumbnail path for video files
### `crop`
- **Type**: boolean
- **Description**: Indicates if the media has been cropped
================================================
FILE: docs/docs/SHOWCASE/index.mdx
================================================
---
id: showcase
title: Showcase ✨
sidebar_label: Showcase ✨
slug: /showcase
---
import style from './showcase.css'
import data from './showcase.json'
List of used applications with `@baronha/react-native-multiple-image-picker`
> Contributions are welcome! If you have an application that uses `@baronha/react-native-multiple-image-picker`<br/>
> please open a [**Pull Request**](https://github.com/baronha/react-native-multiple-image-picker/tree/master/docs/docs/SHOWCASE/showcase.json) to add it to the list.
<br />
<div className="showcaseContainer">
{data.map((item, index) => {
return (
<a
key={`showcase-${index}`}
href={item.link}
target="_blank"
className="showcaseItem"
>
<img src={item.banner} alt={item.title} className="showcaseBanner" />
<b>{item.title}</b>
<p className="showcaseTagline">{item?.tagline}</p>
</a>
)
})}
</div>
================================================
FILE: docs/docs/SHOWCASE/showcase.css
================================================
.showcaseContainer {
display: flex;
/* justify-content: space-between; */
flex-wrap: wrap;
gap: 20px;
}
.showcaseItem {
flex: 1;
color: inherit;
text-decoration: none;
}
.showcaseItem a:hover {
color: red;
text-decoration: none !important;
}
.showcaseItem b {
font-size: 1rem;
}
.showcaseItem .showcaseTagline {
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
overflow: hidden;
text-overflow: ellipsis;
margin: 0;
}
.showcaseBanner {
width: 100%;
aspect-ratio: 16/9;
object-fit: cover;
}
@media (max-width: 768px) {
.showcaseItem {
flex: 100%;
margin-right: 0;
}
}
@media (min-width: 992px) {
/* lg */
.showcaseItem {
max-width: 33.333%;
}
}
@media (min-width: 1200px) {
/* xl */
.showcaseItem {
max-width: 33.333%;
}
}
@media (min-width: 1400px) {
/* xxl */
.showcaseItem {
max-width: 33.333%;
}
}
@media (max-width: 480px) {
.showcaseItem {
flex: 100%;
}
}
================================================
FILE: docs/docs/SHOWCASE/showcase.json
================================================
[
{
"banner": "https://github.com/user-attachments/assets/84ec6432-1557-4649-965c-6100d9c4c12d",
"title": "✨ Binsoo - Photo Filters & Editor",
"link": "https://apps.apple.com/vn/app/binsoo-photo-filters-editor/id6502683720",
"tagline": "Endless aesthetics and effects"
},
{
"banner": "https://github.com/user-attachments/assets/72a7787a-4a41-40e3-b6bb-a5c7b0eafc83",
"title": "Pupi",
"link": "https://apps.apple.com/vn/app/pupi-h%E1%BB%8Dc-vui-ti%E1%BA%BFn-b%E1%BB%99/id1638474798",
"tagline": "Học vui & tiến bộ"
},
{
"banner": "https://github.com/user-attachments/assets/dd92d243-7fb0-40ff-9b78-7b4fd2a54092",
"title": "Pety",
"link": "https://apps.apple.com/vn/app/pety/id1506375124",
"tagline": "New Lifestyle for Pet Lovers"
}
]
================================================
FILE: docs/docs/USAGE.mdx
================================================
---
id: usage
title: Usage
sidebar_label: Usage
slug: /usage
---
Here is a simple usage of the Multiple Image Picker. <br/>
See more [**Config**](/config)
```typescript
import { openPicker, Config } from '@baronha/react-native-multiple-image-picker'
const config: Config = {
maxSelect: 10,
maxVideo: 10,
primaryColor: '#FB9300',
backgroundDark: '#2f2f2f',
numberOfColumn: 4,
mediaType: 'all',
selectBoxStyle: 'number',
selectMode: 'multiple',
language: 'vi', // 🇻🇳 Vietnamese
theme: 'dark',
isHiddenOriginalButton: false,
primaryColor: '#F6B35D',
}
const onPicker = async () => {
try {
const response = await openPicker(config)
setImages(response)
} catch (e) {
// catch error for multiple image picker
}
}
```
================================================
FILE: docs/docs/index.md
================================================
---
id: index
title: Multiple Image Picker | BAO HA
hide_title: true
sidebar_label: Multiple Image Picker
description: 🏞 react-native-multiple-image-picker enables applications to pick images and videos from multiple smart albums in iOS/Android
image: img/banner.png
slug: /
---
import ReactPlayer from 'react-player'
![Logo][Logo]
<img src="img/banner.png" width="100%" />
[![iOS][iOS]][iOS-URL] [![Android][Android]][Android-URL] [![Swift][Swift]][Swift-URL] [![Kotlin][Kotlin]][Kotlin-URL] [![React-Native][React-Native]][React-Native-URL]
## Overview 🎇
<ReactPlayer playing controls width="100%" height="100%" url='https://github.com/user-attachments/assets/79580bc7-237c-46b7-b92e-1479cc6d9079' />
React Native Multiple Image Picker **(RNMIP)** enables application to pick images and videos from multiple smart album in iOS/Android. React Native Multiple Image Picker is based on two libraries available, [HXPhotoPicker](https://github.com/SilenceLove/HXPhotoPicker) and [PictureSelector](https://github.com/LuckSiege/PictureSelector)
## Features 🔥
| 🤩 | ![Logo][Logo] |
| --- | ------------------------------------------------------------------------------ |
| 🍕 | [**Crop**](/crop) single/multiple image. |
| 🎑 | [**Preview**](/preview) image/video. |
| 📸 | [**Camera**](/camera) module for capturing photos and recording videos. |
| 🐳 | Keep the previous selection. |
| 0️⃣ | Selected order index. |
| 🎨 | UI Customization (numberOfColumn, spacing, primaryColor ... ) |
| 🌚 | Dark Mode, Light Mode |
| 🌄 | Choose multiple images/video. |
| 📦 | Support smart album `(camera roll, selfies, panoramas, favorites, videos...)`. |
| 📺 | Display video duration. |
| ⛅️ | Support iCloud Photo Library. |
| 🌪 | Scrolling performance. ☕️ |
## Sponsor & Support ☕️
To keep this library maintained and up-to-date please consider [sponsoring it on GitHub](https://github.com/sponsors/baronha). Or if you are looking for a private support or help in customizing the experience, then reach out to me on Twitter [@\_baronha](https://twitter.com/_baronha).
## Built With ❤️
[](https://nitro.margelo.com/docs/nitro-modules)
[](https://github.com/SilenceLove/HXPhotoPicker)
[](https://github.com/LuckSiege/PictureSelector)
<!-- Badge for README -->
[iOS]: https://img.shields.io/badge/iOS-000000?style=for-the-badge&logo=ios&logoColor=white
[iOS-URL]: https://www.apple.com/ios
[Android]: https://img.shields.io/badge/Android-3DDC84?style=for-the-badge&logo=android&logoColor=white
[Android-URL]: https://www.android.com/
[React-Native]: https://img.shields.io/badge/React_Native-20232A?style=for-the-badge&logo=react&logoColor=61DAFB
[React-Native-URL]: https://reactnative.dev/
[React-Native]: https://img.shields.io/badge/React_Native-20232A?style=for-the-badge&logo=react&logoColor=61DAFB
[React-Native-URL]: https://reactnative.dev/
[Swift]: https://img.shields.io/badge/Swift-FA7343?style=for-the-badge&logo=swift&logoColor=white
[Swift-URL]: https://developer.apple.com/swift/
[Kotlin]: https://img.shields.io/badge/Kotlin-0095D5?&style=for-the-badge&logo=kotlin&logoColor=white
[Kotlin-URL]: https://kotlinlang.org/
[Logo]: https://img.shields.io/badge/React_Native_Multiple_Image_Picker-DF78C3?style=for-the-badge
================================================
FILE: docs/docusaurus.config.ts
================================================
import { themes as prismThemes } from 'prism-react-renderer'
import type { Config } from '@docusaurus/types'
import type * as Preset from '@docusaurus/preset-classic'
// This runs in Node.js - Don't use client-side code here (browser APIs, JSX...)
const config: Config = {
title: 'React Native Multiple Image Picker',
tagline: 'High-performance React Native Multiple Image Picker library.',
favicon: 'img/favicon.ico',
// Set the production url of your site here
url: 'https://nitrogenzlab.github.io',
// Set the /<baseUrl>/ pathname under which your site is served
// For GitHub pages deployment, it is often '/<projectName>/'
baseUrl: '/react-native-multiple-image-picker',
// GitHub pages deployment config.
// If you aren't using GitHub pages, you don't need these.
organizationName: 'baronha', // Usually your GitHub org/user name.
projectName: 'react-native-multiple-image-picker', // Usually your repo name.
trailingSlash: false,
onBrokenLinks: 'throw',
onBrokenMarkdownLinks: 'warn',
// Even if you don't use internationalization, you can use this field to set
// useful metadata like html lang. For example, if your site is Chinese, you
// may want to replace "en" with "zh-Hans".
i18n: {
defaultLocale: 'en',
locales: ['en', 'vi'],
path: 'i18n',
localeConfigs: {
en: {
label: 'English',
direction: 'ltr',
htmlLang: 'en-US',
calendar: 'gregory',
path: 'en',
},
},
},
presets: [
[
'@gorhom/docusaurus-preset',
{
docs: {
sidebarPath: './sidebars.ts',
routeBasePath: '/',
editUrl:
'https://github.com/NitrogenZLab/react-native-multiple-image-picker/tree/main/docs/docs',
lastVersion: 'current',
versions: {
current: {
label: 'v2.0',
},
},
},
theme: {
customCss: './src/css/custom.css',
},
} satisfies Preset.Options,
],
],
themeConfig: {
// Replace with your project's social card
image: 'img/banner.png',
colorMode: {
defaultMode: 'dark',
disableSwitch: false,
respectPrefersColorScheme: true,
},
navbar: {
title: 'RNMIP',
logo: {
alt: 'RNMIP Logo',
src: 'img/RNMIP.png',
},
items: [
{
type: 'docSidebar',
sidebarId: 'multiple-image-picker',
position: 'left',
label: 'Guides',
},
{
href: 'https://github.com/NitrogenZLab/react-native-multiple-image-picker/tree/main/example',
label: 'Example',
position: 'left',
},
{
href: '/showcase',
label: 'Showcase',
position: 'left',
},
{
href: 'https://github.com/NitrogenZLab/react-native-multiple-image-picker',
label: 'GitHub',
position: 'right',
},
{
href: 'https://apps.apple.com/vn/app/binsoo-photo-filters-editor/id6502683720',
label: '✨ Binsoo - Photo Editor',
position: 'right',
},
],
},
footer: {
style: 'dark',
links: [
{
title: 'Guides',
items: [
{
label: 'Getting Started',
to: '/getting-started',
},
{
label: 'Config',
to: '/config',
},
{
label: 'Result',
to: '/result',
},
{
label: '☕️ Buy me a coffee',
href: 'https://github.com/sponsors/baronha',
},
],
},
{
title: 'Community',
items: [
{
label: 'X',
href: 'https://x.com/_baronha',
},
{
label: 'Threads',
href: 'https://www.threads.net/@___donquijote',
},
],
},
{
title: 'More',
items: [
{
label: 'Github',
href: 'https://github.com/baronha',
},
{
label: 'Binsoo - Photo Editor',
href: 'https://apps.apple.com/vn/app/binsoo-photo-filters-editor/id6502683720',
},
],
},
],
copyright: `Copyright © ${new Date().getFullYear()} Bảo Hà (baronha)`,
},
prism: {
theme: prismThemes.github,
darkTheme: prismThemes.dracula,
},
} satisfies Preset.ThemeConfig,
}
export default config
================================================
FILE: docs/package.json
================================================
{
"name": "docs",
"version": "2.2.6",
"private": true,
"scripts": {
"docusaurus": "docusaurus",
"start": "docusaurus start",
"build": "docusaurus build",
"swizzle": "docusaurus swizzle",
"deploy": "docusaurus deploy",
"clear": "docusaurus clear",
"serve": "docusaurus serve",
"write-translations": "docusaurus write-translations",
"write-heading-ids": "docusaurus write-heading-ids",
"typecheck": "tsc",
"postinstall": "patch-package"
},
"dependencies": {
"@docusaurus/core": "3.5.2",
"@docusaurus/plugin-google-gtag": "^3.5.2",
"@docusaurus/preset-classic": "3.5.2",
"@gorhom/docusaurus-preset": "*",
"@gorhom/docusaurus-theme": "*",
"@mdx-js/react": "^3.0.0",
"clsx": "^2.0.0",
"prism-react-renderer": "^2.3.0",
"react": "^18.0.0",
"react-dom": "^18.0.0",
"react-player": "^2.16.0"
},
"devDependencies": {
"@docusaurus/module-type-aliases": "3.5.2",
"@docusaurus/tsconfig": "3.5.2",
"@docusaurus/types": "3.5.2",
"patch-package": "^8.0.0",
"typescript": "~5.6.2"
},
"browserslist": {
"production": [
">0.5%",
"not dead",
"not op_mini all"
],
"development": [
"last 3 chrome version",
"last 3 firefox version",
"last 5 safari version"
]
},
"engines": {
"node": ">=18.0"
}
}
================================================
FILE: docs/patches/@gorhom+docusaurus-preset+1.0.2.patch
================================================
diff --git a/node_modules/@gorhom/docusaurus-preset/lib/index.js b/node_modules/@gorhom/docusaurus-preset/lib/index.js
index 66e815e..7ab6b15 100644
--- a/node_modules/@gorhom/docusaurus-preset/lib/index.js
+++ b/node_modules/@gorhom/docusaurus-preset/lib/index.js
@@ -23,21 +23,21 @@ export default function preset(context, opts = {}) {
theme: prismThemes.github,
darkTheme: prismThemes.dracula,
};
- // overrides footer
- themeConfig.footer = {
- ...(themeConfig.footer ?? {}),
- copyright: `Open Source by <a rel="noreferrer" href="https://gorhom.dev/" target="_blank">Mo Gorhom</a>.`,
- links: [
- {
- label: "Github",
- href: "https://github.com/gorhom",
- },
- {
- label: "X (Twitter)",
- href: "https://twitter.com/gorhom",
- },
- ]
- };
+ // overrides footer
+ themeConfig.footer = {
+
+ copyright: `Open Source by <a rel="noreferrer" href="https://baoha.vercel.app/" target="_blank">Bao Ha</a>.`,
+ links: [
+ {
+ label: "Github",
+ href: "https://github.com/baronha",
+ },
+ {
+ label: "X (Twitter)",
+ href: "https://twitter.com/_baronha",
+ },
+ ],
+ }
const themes = [];
themes.push(makePluginConfig("@gorhom/docusaurus-theme", theme));
if (algolia) {
================================================
FILE: docs/sidebars.ts
================================================
import type { SidebarsConfig } from '@docusaurus/plugin-content-docs'
// This runs in Node.js - Don't use client-side code here (browser APIs, JSX...)
/**
* Creating a sidebar enables you to:
- create an ordered group of docs
- render a sidebar for each doc of that group
- provide next/previous navigation
The sidebars can be generated from the filesystem, or explicitly defined here.
Create as many sidebars as you want.
*/
const sidebars: SidebarsConfig = {
'multiple-image-picker': [
{
type: 'category',
label: 'RNMIP',
link: {
type: 'doc',
id: 'index',
},
items: ['getting-started', 'usage', 'config', 'result'],
},
'crop',
'preview',
'camera',
],
}
export default sidebars
================================================
FILE: docs/src/css/custom.css
================================================
================================================
FILE: docs/static/.nojekyll
================================================
================================================
FILE: docs/tsconfig.json
================================================
{
// This file is not used in compilation. It is here just for a nice editor experience.
"extends": "@docusaurus/tsconfig",
"compilerOptions": {
"baseUrl": "."
},
"exclude": [".docusaurus", "build"]
}
================================================
FILE: example/.gitignore
================================================
# Learn more https://docs.github.com/en/get-started/getting-started-with-git/ignoring-files
# dependencies
node_modules/
# Expo
.expo/
dist/
web-build/
# Native
*.orig.*
*.jks
*.p8
*.p12
*.key
*.mobileprovision
# Metro
.metro-health-check*
# debug
npm-debug.*
yarn-debug.*
yarn-error.*
# macOS
.DS_Store
*.pem
# local env files
.env*.local
# typescript
*.tsbuildinfo
/ios
/android
================================================
FILE: example/App.tsx
================================================
import { LogBox, UIManager } from 'react-native'
import App from './src'
LogBox.ignoreAllLogs()
UIManager.setLayoutAnimationEnabledExperimental &&
UIManager.setLayoutAnimationEnabledExperimental(true)
export default App
================================================
FILE: example/Gemfile
================================================
source 'https://rubygems.org'
# You may use http://rbenv.org/ or https://rvm.io/ to install and use this version
ruby ">= 3.0.0"
# Exclude problematic versions of cocoapods and activesupport that causes build failures.
gem 'cocoapods', '>= 1.13', '!= 1.15.0', '!= 1.15.1'
gem 'activesupport', '>= 6.1.7.5', '!= 7.1.0'
================================================
FILE: example/README.md
================================================
# Example
This website is built using [Expo](https://docs.expo.dev/)
https://github.com/user-attachments/assets/79580bc7-237c-46b7-b92e-1479cc6d9079
### Installation
```
$ yarn
$ yarn prebuild --clean
```
### Step 2
```
$ NNN Enjoy Bro 🐧
```
================================================
FILE: example/app.json
================================================
{
"expo": {
"name": "MultipleImagePickerExample",
"slug": "MultipleImagePickerExample",
"version": "1.0.0",
"orientation": "portrait",
"icon": "./assets/icon.png",
"userInterfaceStyle": "automatic",
"splash": {
"image": "./assets/splash.png",
"resizeMode": "contain",
"backgroundColor": "#ffffff"
},
"ios": {
"supportsTablet": true,
"infoPlist": {
"NSCameraUsageDescription": "We needs to access your camera so that you can upload your photo: (avatar, etc.)",
"NSPhotoLibraryAddUsageDescription": "We needs photo library permissions to allow you to upload profile images.",
"NSPhotoLibraryUsageDescription": "We needs photo library permissions to allow you to upload profile images.",
"NSMicrophoneUsageDescription": "We needs to access your microphone so that you can take your photo: (avatar, etc.)"
},
"bundleIdentifier": "com.baoha.imagepicker"
},
"android": {
"adaptiveIcon": {
"foregroundImage": "./assets/adaptive-icon.png",
"backgroundColor": "#ffffff"
},
"package": "com.baoha.imagepicker"
},
"plugins": [
[
"expo-build-properties",
{
"ios": {
"deploymentTarget": "15.6",
"useFrameworks": "static"
},
"android": {
"compileSdkVersion": 34,
"targetSdkVersion": 34,
"buildToolsVersion": "34.0.0"
}
}
]
]
}
}
================================================
FILE: example/babel.config.js
================================================
const path = require('path')
module.exports = function (api) {
api.cache(true)
return {
presets: ['babel-preset-expo'],
plugins: [
[
'module-resolver',
{
extensions: ['.tsx', '.ts', '.js', '.json'],
alias: {
// For development, we want to alias the library to the source
'@baronha/react-native-multiple-image-picker': path.join(
__dirname,
'..',
'src',
'index.ts'
),
},
},
],
],
}
}
================================================
FILE: example/metro.config.js
================================================
// Learn more https://docs.expo.io/guides/customizing-metro
const { getDefaultConfig } = require('expo/metro-config')
const path = require('path')
const config = getDefaultConfig(__dirname)
// npm v7+ will install ../node_modules/react-native because of peerDependencies.
// To prevent the incompatible react-native bewtween ./node_modules/react-native and ../node_modules/react-native,
// excludes the one from the parent folder when bundling.
config.resolver.blockList = [
...Array.from(config.resolver.blockList ?? []),
new RegExp(path.resolve('..', 'node_modules', 'react-native')),
]
config.resolver.nodeModulesPaths = [
path.resolve(__dirname, './node_modules'),
path.resolve(__dirname, '../node_modules'),
]
config.watchFolders = [path.resolve(__dirname, '..')]
config.transformer.getTransformOptions = async () => ({
transform: {
experimentalImportSupport: false,
inlineRequires: true,
},
})
module.exports = config
================================================
FILE: example/package.json
================================================
{
"name": "multipleimagepickerexample",
"version": "2.2.3",
"main": "expo/AppEntry.js",
"scripts": {
"start": "expo start",
"android": "expo run:android",
"ios": "expo run:ios",
"web": "expo start --web",
"pod": "cd ios && bundle exec pod update",
"pod-new-arch": "cd ios && RCT_NEW_ARCH_ENABLED=1 bundle exec pod install",
"prebuild": "expo prebuild",
"gradle": "cd android && ./gradlew clean && ./gradlew build"
},
"dependencies": {
"@react-native-segmented-control/segmented-control": "2.5.7",
"expo": "^54.0.27",
"expo-build-properties": "~1.0.10",
"expo-status-bar": "~3.0.9",
"expo-system-ui": "~6.0.9",
"immer": "^10.1.1",
"react": "19.1.0",
"react-native": "0.81.5",
"use-immer": "^0.10.0"
},
"devDependencies": {
"@babel/core": "^7.20.0",
"@react-native/babel-preset": "0.75.2",
"@react-native/metro-config": "0.75.2",
"@react-native/typescript-config": "0.75.2",
"@types/react": "~19.1.10",
"react-native-builder-bob": "^0.30.0",
"react-native-nitro-modules": "^0.25.2",
"typescript": "~5.9.2"
},
"private": true
}
================================================
FILE: example/react-native.config.js
================================================
const path = require('path')
const pkg = require('../package.json')
module.exports = {
project: {
ios: {
automaticPodsInstallation: true,
},
},
dependencies: {
[pkg.name]: {
root: path.join(__dirname, '..'),
},
},
}
================================================
FILE: example/src/assets/index.ts
================================================
const images = {
logo: require('./logo.png'),
plusSign: require('./plus-sign.png'),
check: require('./check.png'),
}
export default images
================================================
FILE: example/src/common/const.ts
================================================
import { Platform } from 'react-native'
export const IS_IOS = Platform.OS === 'ios'
export const IS_ANDROID = Platform.OS === 'android'
export const LOCALIZED_LANGUAGES = [
{
key: 'system',
label: 'System 🌐',
},
{
key: 'vi',
label: 'Tiếng Việt 🇻🇳',
},
{
key: 'zh-Hans',
label: '简体中文 🇨🇳',
},
{
key: 'zh-Hant',
label: '繁體中文 🇹🇼',
},
{
key: 'ja',
label: '日本語 🇯🇵',
},
{
key: 'ko',
label: '한국어 🇰🇷',
},
{
key: 'en',
label: 'English 🇺🇸',
},
{
key: 'ru',
label: 'Русский 🇷🇺',
},
{
key: 'de',
label: 'Deutsch 🇩🇪',
},
{
key: 'fr',
label: 'Français 🇫🇷',
},
{
key: 'ar',
label: 'العربية 🇸🇦',
},
...(IS_IOS
? [
{
key: 'th',
label: 'ไทย 🇹🇭',
},
{
key: 'id',
label: 'Bahasa Indonesia 🇮🇩',
},
]
: []),
]
================================================
FILE: example/src/components/BottomSheet.tsx
================================================
import React from 'react'
import { View } from 'react-native'
export function BottomSheet() {
return (
<View>
</View>
)
}
================================================
FILE: example/src/components/Button.tsx
================================================
import React from 'react'
import {
StyleSheet,
TouchableOpacity,
TouchableOpacityProps,
} from 'react-native'
import useTheme from '../hook/useTheme'
import { Text } from './Text'
interface Props extends TouchableOpacityProps {
children: React.ReactNode | string
type?: 'full' | 'outline'
}
export function Button({
children,
style: containerStyle,
onPress,
type = 'full',
}: Props) {
const { foreground, background } = useTheme()
const isFull = type === 'full'
return (
<TouchableOpacity
style={[
style.button,
containerStyle,
// eslint-disable-next-line react-native/no-inline-styles
{
backgroundColor: isFull ? foreground : 'transparent',
borderColor: isFull ? 'transparent' : foreground,
},
]}
onPress={onPress}
>
{typeof children === 'string' ? (
<Text style={[style.text, { color: isFull ? background : foreground }]}>
{children}
</Text>
) : (
children
)}
</TouchableOpacity>
)
}
const style = StyleSheet.create({
button: {
padding: 12,
alignItems: 'center',
borderWidth: 1.5,
},
text: {
fontFamily: 'Avenir',
fontWeight: 'bold',
},
})
================================================
FILE: example/src/components/CheckBox.tsx
================================================
import React from 'react'
import {
Image,
StyleSheet,
TouchableOpacity,
TouchableOpacityProps,
} from 'react-native'
import images from '../assets'
import useTheme from '../hook/useTheme'
interface CheckBoxProps extends TouchableOpacityProps {
checked?: boolean
onChecked?: (checked: boolean) => void
}
export function CheckBox({
checked = false,
onChecked,
...props
}: CheckBoxProps) {
const { foreground, background_2 } = useTheme()
return (
<TouchableOpacity
activeOpacity={0.9}
onPress={() => onChecked?.(!checked)}
{...props}
style={[
style.container,
props.style,
{
backgroundColor: checked ? foreground : background_2,
borderColor: foreground + '64',
},
]}
>
{checked && (
<Image
style={[style.check, { tintColor: background_2 }]}
source={images.check}
/>
)}
</TouchableOpacity>
)
}
const style = StyleSheet.create({
container: {
width: 24,
height: 24,
alignItems: 'center',
justifyContent: 'center',
borderRadius: 4,
},
check: {
width: 16,
height: 16,
},
})
================================================
FILE: example/src/components/CodeTag.tsx
================================================
import React from 'react'
import { View } from './View'
import { StyleSheet, TextProps, ViewProps } from 'react-native'
import { Text } from './Text'
interface CodeTagProps extends ViewProps {
children: string
textProps?: TextProps
}
export function CodeTag({ children, textProps, ...props }: CodeTagProps) {
return (
<View level={3} {...props} style={[style.container, props.style]}>
<Text {...textProps} style={[style.text, textProps?.style]}>
{children}
</Text>
</View>
)
}
const style = StyleSheet.create({
text: {
// fontFamily: 'monospace',
fontWeight: 600,
fontSize: 16,
},
container: {
padding: 8,
paddingVertical: 6,
borderRadius: 4,
alignSelf: 'baseline',
},
})
================================================
FILE: example/src/components/Container.tsx
================================================
import React from 'react'
import { StyleSheet, ViewProps } from 'react-native'
import useTheme from '../hook/useTheme'
import { View } from './View'
interface Props extends ViewProps {
level?: 0 | 1 | 2 | 3
}
export function Container({
children,
style: containerStyle,
level = 0,
}: Props) {
const theme = useTheme()
const backgroundColor = !level
? theme.background
: theme[`background_${level}` as keyof typeof theme]
return (
<View style={[style.container, { backgroundColor }, containerStyle]}>
{children}
</View>
)
}
const style = StyleSheet.create({
container: {
flex: 1,
},
})
================================================
FILE: example/src/components/CounterView.tsx
================================================
import React from 'react'
import { View } from './View'
import { Row, RowProps } from './Row'
import { StyleSheet, TouchableOpacity } from 'react-native'
import { Text } from './Text'
import useTheme from '../hook/useTheme'
interface CounterViewProps extends RowProps {
value?: number
onChange: (value: number) => void
range?: {
min?: number
max?: number
}
}
export function CounterView({
value = 0,
onChange,
range,
...props
}: CounterViewProps) {
const { background_2 } = useTheme()
return (
<Row gap={8} {...props}>
<TouchableOpacity
activeOpacity={0.9}
style={[style.button, { backgroundColor: background_2 }]}
onPress={() => {
const min = range?.min ?? 0
onChange(value - 1 < min ? min : value - 1)
}}
>
<Text style={style.buttonText}>-</Text>
</TouchableOpacity>
<View style={style.counterView}>
<Text style={style.buttonText}>{value}</Text>
</View>
<TouchableOpacity
activeOpacity={0.9}
style={[style.button, { backgroundColor: background_2 }]}
onPress={() => {
const max = range?.max
if (max) onChange(value + 1 > max ? max : value + 1)
else onChange(value + 1)
}}
>
<Text style={style.buttonText}>+</Text>
</TouchableOpacity>
</Row>
)
}
const style = StyleSheet.create({
counterView: {
//
height: 32,
paddingHorizontal: 12,
borderRadius: 4,
alignItems: 'center',
justifyContent: 'center',
},
button: {
borderRadius: 4,
height: 32,
width: 32,
alignItems: 'center',
justifyContent: 'center',
},
buttonText: {
fontSize: 16,
fontWeight: 'bold',
fontFamily: 'Avenir',
},
})
================================================
FILE: example/src/components/Divider.tsx
================================================
import React from 'react'
import { StyleSheet } from 'react-native'
import useTheme from '../hook/useTheme'
import { View } from './View'
export default function Divider() {
const { foreground } = useTheme()
return <View style={[style.container, { backgroundColor: foreground }]} />
}
const style = StyleSheet.create({
container: {
height: 1,
width: '100%',
opacity: 0.2,
},
})
================================================
FILE: example/src/components/Input.tsx
================================================
import React from 'react'
import { StyleSheet, TextInput, TextInputProps } from 'react-native'
import useTheme from '../hook/useTheme'
interface InputProps extends TextInputProps {}
export function Input({ ...props }: InputProps) {
const { background_2, foreground } = useTheme()
return (
<TextInput
{...props}
selectionColor={foreground}
placeholderTextColor={foreground + '92'}
style={[
style.input,
{ backgroundColor: background_2, color: foreground },
]}
/>
)
}
const style = StyleSheet.create({
input: {
paddingHorizontal: 12,
paddingVertical: 12,
borderRadius: 8,
fontSize: 16,
},
})
================================================
FILE: example/src/components/Row.tsx
================================================
import React from 'react'
import { StyleSheet, ViewStyle } from 'react-native'
import { View, ViewProps } from './View'
export interface RowProps extends ViewProps {
alignItems?: ViewStyle['alignItems']
gap?: number
}
export function Row({
children,
gap,
alignItems = 'center',
...props
}: RowProps) {
return (
<View
{...props}
style={[style.container, props.style, { alignItems, gap }]}
>
{children}
</View>
)
}
const style = StyleSheet.create({
container: {
flexDirection: 'row',
},
})
================================================
FILE: example/src/components/SectionView.tsx
================================================
import React from 'react'
import { Row } from './Row'
import { CodeTag } from './CodeTag'
import { View } from './View'
import { Text } from './Text'
import { StyleSheet, Switch } from 'react-native'
import { useAppContext } from '../hook/context'
import { Config } from '@baronha/react-native-multiple-image-picker'
import { SegmentControl } from './SegmentControl'
type key = keyof Config
interface SectionViewProps {
title: key
description: string
optionKey?: key
children?: React.ReactNode
defaultValue?: boolean
segmentControl?: string[]
}
export default function SectionView({
title,
description,
optionKey,
children,
defaultValue = false,
segmentControl,
}: SectionViewProps) {
const { options, setOptions } = useAppContext()
return (
<View style={style.section}>
<Row style={style.section}>
<View flex={1} style={style.sectionTitle}>
<CodeTag>{title}</CodeTag>
<Text style={style.des}>{description}</Text>
</View>
{children ||
(optionKey ? (
!segmentControl ? (
<Switch
value={(options?.[optionKey] as any) ?? defaultValue}
onValueChange={(valueChange) =>
setOptions(optionKey, valueChange)
}
/>
) : null
) : null)}
</Row>
{segmentControl && optionKey ? (
<SegmentControl
selectedIndex={
segmentControl.indexOf(
(options?.[optionKey] as any) ?? defaultValue ?? ''
) ?? 0
}
values={segmentControl}
onValueChange={(valueChange) => setOptions(optionKey, valueChange)}
/>
) : null}
</View>
)
}
const style = StyleSheet.create({
section: {
rowGap: 12,
columnGap: 24,
},
sectionTitle: {
gap: 8,
},
des: {
fontSize: 12,
// marginBottom: 12,
},
})
================================================
FILE: example/src/components/SegmentControl.tsx
================================================
import React from 'react'
import SegmentedControl, {
SegmentedControlProps,
} from '@react-native-segmented-control/segmented-control'
export function SegmentControl({ ...props }: SegmentedControlProps) {
return <SegmentedControl {...props} />
}
================================================
FILE: example/src/components/Text.tsx
================================================
import React from 'react'
import { Text as RNText, TextProps } from 'react-native'
import useTheme from '../hook/useTheme'
export function Text({ children, style: containerStyle }: TextProps) {
const { foreground } = useTheme()
return (
<RNText style={[{ color: foreground }, containerStyle]}>{children}</RNText>
)
}
================================================
FILE: example/src/components/View.tsx
================================================
import React from 'react'
import { View as RNView, ViewProps as RNViewProps } from 'react-native'
import useTheme from '../hook/useTheme'
export interface ViewProps extends RNViewProps {
level?: 0 | 1 | 2 | 3
flex?: number
}
export function View({
children,
style: containerStyle,
level = 0,
flex,
}: ViewProps) {
const theme = useTheme()
const backgroundColor = !level
? theme.background
: theme[`background_${level}` as keyof typeof theme]
return (
<RNView style={[{ backgroundColor, flex }, containerStyle]}>
{children}
</RNView>
)
}
================================================
FILE: example/src/components/index.tsx
================================================
export * from './Container'
export * from './Button'
export * from './SegmentControl'
export * from './Text'
export * from './View'
export * from './CodeTag'
export * from './Row'
export * from './Divider'
export * from './CheckBox'
export * from './SectionView'
export * from './Input'
export * from './CounterView'
================================================
FILE: example/src/hook/context.ts
================================================
import { createContext, useContext } from 'react'
import {
Config,
defaultOptions,
} from '@baronha/react-native-multiple-image-picker'
export const AppContext = createContext<{
options: Config
setOptions: (key: keyof Config, value: Config[keyof Config]) => void
}>({
options: defaultOptions,
setOptions: () => {},
})
export const useAppContext = () => useContext(AppContext)
================================================
FILE: example/src/hook/index.ts
================================================
export * from './useTheme'
================================================
FILE: example/src/hook/useTheme.ts
================================================
import { useColorScheme } from 'react-native'
import * as color from '../theme/color'
export default function useTheme() {
const colorScheme = useColorScheme() as keyof typeof color
return color[colorScheme]
}
================================================
FILE: example/src/index.tsx
================================================
import React, { useCallback, useMemo, useState } from 'react'
import {
ActionSheetIOS,
Alert,
Appearance,
ColorSchemeName,
Image,
KeyboardAvoidingView,
LayoutAnimation,
Platform,
SafeAreaView,
ScrollView,
Switch,
TouchableOpacity,
useColorScheme,
} from 'react-native'
import { StyleSheet } from 'react-native'
import {
openPicker,
PickerResult,
defaultOptions,
Config,
openCropper,
openPreview,
openCamera,
} from '@baronha/react-native-multiple-image-picker'
import { useImmer } from 'use-immer'
import { StatusBar } from 'expo-status-bar'
import {
Button,
CodeTag,
Container,
CounterView,
Input,
Row,
SegmentControl,
Text,
View,
} from './components'
import useTheme from './hook/useTheme'
import assets from './assets'
import { WIDTH } from './theme/size'
import { IS_IOS, LOCALIZED_LANGUAGES } from './common/const'
import { AppContext } from './hook/context'
import SectionView from './components/SectionView'
const layoutEffect = () => {
LayoutAnimation.configureNext({
duration: 350,
create: {
type: LayoutAnimation.Types.easeInEaseOut,
property: LayoutAnimation.Properties.opacity,
},
update: {
type: LayoutAnimation.Types.easeInEaseOut,
},
})
}
const parseNumber = (value: string): number | undefined => {
const parsed = Number(value)
return value === '' || Number.isNaN(parsed) ? undefined : parsed
}
export default function App() {
const { background, foreground } = useTheme()
const [images, setImages] = useState<PickerResult[]>([])
const [options, changeOptions] = useImmer<Config>(defaultOptions)
const colorScheme = useColorScheme()
const setOptions = (key: keyof Config, value: Config[keyof Config]) => {
changeOptions((draft) => {
draft[key] = value as any
})
}
console.log('images: ', images)
const onPressImage = useCallback(
(_: PickerResult, index: number) => {
openPreview(images, index, {
onLongPress: () => {
if (Platform.OS === 'ios') {
ActionSheetIOS.showActionSheetWithOptions(
{
options: ['Download', 'Cancel'],
cancelButtonIndex: 1,
userInterfaceStyle: colorScheme ?? 'light',
},
(buttonIndex) => {
if (buttonIndex === 0) {
// Download
} else if (buttonIndex === 1) {
// Cancel
}
}
)
} else {
Alert.alert('Options', '', [
{
text: 'Cancel',
style: 'cancel',
onPress: () => {
console.log('Cancel')
},
},
{
text: 'Download',
onPress: () => {
console.log('Download')
},
},
])
}
},
})
},
[images, colorScheme]
)
const onPicker = async () => {
try {
const response = await openPicker({
...options,
selectedAssets: images.filter((item) => item.localIdentifier),
})
setImages(Array.isArray(response) ? response : [response])
layoutEffect()
} catch (e) {
console.log('e: ', e)
}
}
const onCamera = async () => {
try {
const response = await openCamera()
setImages((prev) => {
return [response as PickerResult, ...prev]
})
layoutEffect()
} catch (e) {
console.log('e: ', e)
}
}
const onCrop = async () => {
try {
const response = await openCropper(images[0].path, {
ratio: [
{ title: 'Instagram', width: 1, height: 1 },
{ title: 'Twitter', width: 16, height: 9 },
{ title: 'Facebook', width: 12, height: 11 },
],
})
setImages((prev) => {
const data = [...prev]
data[0].path = response.path
data[0].width = response.width
data[0].height = response.height
return data
})
layoutEffect()
} catch (e) {
console.log('e: ', e)
}
}
const onRemovePhoto = useCallback(
(_: PickerResult, index: number) => {
const data = [...images].filter((__, idx) => idx !== index)
setImages(data)
},
[images, setImages]
)
const onChangeTheme = (value: string) => {
Appearance.setColorScheme(value as ColorSchemeName)
}
const renderImage = useMemo(() => {
return (
<View style={style.imageContainer}>
{images.map((image, index) => (
<TouchableOpacity
key={index}
onPress={() => onPressImage(image, index)}
style={style.image}
>
<Image source={{ uri: image.path }} style={style.image} />
<TouchableOpacity
style={style.removeButton}
onPress={() => onRemovePhoto(image, index)}
>
<Image source={assets.plusSign} style={style.trash} />
</TouchableOpacity>
</TouchableOpacity>
))}
</View>
)
}, [images, onPressImage, onRemovePhoto])
return (
<Container>
<SafeAreaView />
{Platform.OS === 'android' && (
<StatusBar
translucent={false}
networkActivityIndicatorVisible
backgroundColor={background}
/>
)}
<View style={style.titleView}>
<Image source={assets.logo} style={style.logo} />
<View style={style.textView}>
<Text style={style.mip}>Multiple Image Picker</Text>
<CodeTag textProps={{ style: { fontSize: 8 } }}>BY BAOHA</CodeTag>
</View>
</View>
<KeyboardAvoidingView
behavior={Platform.OS === 'ios' ? 'padding' : 'height'}
style={style.keyboardAvoidingView}
>
<AppContext.Provider value={{ options, setOptions }}>
<ScrollView
keyboardDismissMode="on-drag"
keyboardShouldPersistTaps="handled"
showsVerticalScrollIndicator={false}
contentContainerStyle={[
style.scrollView,
{ backgroundColor: background },
]}
scrollEventThrottle={16}
>
{images.length > 0 ? (
<>
{renderImage}
<Button style={style.buttonOpen} onPress={onCrop}>
Open Cropping
</Button>
</>
) : (
<TouchableOpacity style={style.buttonPlus} onPress={onPicker}>
<Image source={assets.plusSign} style={style.plusSign} />
</TouchableOpacity>
)}
<View style={style.content}>
<Text style={style.title}>Config</Text>
{/* mediaType */}
<View style={style.section}>
<SectionView
title="mediaType"
description="The type of media that can be selected."
/>
<SegmentControl
selectedIndex={
['all', 'image', 'video'].indexOf(
options.mediaType ?? ''
) ?? 0
}
values={['all', 'image', 'video']}
onValueChange={(value) => setOptions('mediaType', value)}
/>
</View>
{/* theme */}
<View style={style.section}>
<SectionView
title="theme"
description="Theme mode for the picker."
/>
<SegmentControl
selectedIndex={
['light', 'dark'].indexOf(colorScheme ?? '') ?? 0
}
values={['light', 'dark']}
onValueChange={onChangeTheme}
/>
</View>
{/* selectMode */}
<View style={style.section}>
<SectionView
title="selectMode"
description="Mode of selection in the picker."
/>
<SegmentControl
selectedIndex={
['single', 'multiple'].indexOf(options.selectMode ?? '') ??
0
}
values={['single', 'multiple']}
onValueChange={(value) => setOptions('selectMode', value)}
/>
</View>
{/* selectBoxStyle */}
<View style={style.section}>
<SectionView
title="selectBoxStyle"
description="Select box style for the picker."
optionKey="selectBoxStyle"
segmentControl={['number', 'tick']}
/>
</View>
{/* presentation */}
{IS_IOS ? (
<SectionView
title="presentation"
description="Presentation style for the picker."
optionKey="presentation"
segmentControl={['fullScreenModal', 'formSheet']}
/>
) : null}
<Text style={style.title}>Camera 📸</Text>
<View style={style.section}>
<SectionView
title="camera"
description="Enable camera functionality."
>
<Switch
value={options.camera !== undefined}
onValueChange={(value) =>
setOptions('camera', value ? {} : undefined)
}
/>
</SectionView>
{/* camera videoMaximumDuration */}
<SectionView
title={'camera.videoMaximumDuration' as any}
description="The maximum duration of video that can be selected."
>
<Input
value={
options.camera?.videoMaximumDuration?.toString() ?? ''
}
placeholder="Video Duration"
onChangeText={(value) => {
setOptions('camera', {
...(options.camera ?? { cameraDevice: 'back' }),
videoMaximumDuration: parseNumber(value),
})
}}
/>
</SectionView>
</View>
{IS_IOS ? (
<>
{/* allowedLimit */}
<SectionView
title="allowedLimit"
description="Display additional select more media when permission on iOS is limited."
optionKey="allowedLimit"
/>
</>
) : null}
{/* allowSwipeToSelect */}
<SectionView
title="allowSwipeToSelect"
description="Allow swipe to select media."
optionKey="allowSwipeToSelect"
/>
{/* isHiddenOriginalButton */}
<SectionView
title="isHiddenOriginalButton"
description="Hide the original button in the picker."
optionKey="isHiddenOriginalButton"
/>
{/* maxSelect */}
<SectionView
title="maxSelect"
description="The maximum number of media that can be selected."
>
<CounterView
range={{ min: 1 }}
value={options.maxSelect}
onChange={(value) => setOptions('maxSelect', value)}
/>
</SectionView>
{/* maxVideo */}
<SectionView
title="maxVideo"
description="The maximum number of video that can be selected."
>
<CounterView
range={{ min: 1 }}
value={options.maxVideo}
onChange={(value) => setOptions('maxVideo', value)}
/>
</SectionView>
{/* numberOfColumn */}
<SectionView
title="numberOfColumn"
description="The number of columns in the picker."
>
<CounterView
range={{ min: 1, max: 10 }}
value={options.numberOfColumn}
onChange={(value) => setOptions('numberOfColumn', value)}
/>
</SectionView>
{/* spacing */}
<SectionView
title="spacing"
description="The spacing between the media in the picker."
>
<CounterView
range={{ min: 1, max: 10 }}
value={options.spacing ?? 2}
onChange={(value) => setOptions('spacing', value)}
/>
</SectionView>
{/* Filter data 🎞️ */}
<Text style={style.title}>Filter data 🎞️</Text>
{/* maxVideoDuration */}
<SectionView
title="maxVideoDuration"
description="The maximum duration of video that can be selected."
>
<Input
value={options.maxVideoDuration?.toString() ?? ''}
placeholder="Max Duration"
onChangeText={(value) => {
setOptions('maxVideoDuration', parseNumber(value))
}}
/>
</SectionView>
{/* minVideoDuration */}
<SectionView
title="minVideoDuration"
description="The minimum duration of video that can be selected."
>
<Input
value={options.minVideoDuration?.toString() ?? ''}
placeholder="Min Duration"
onChangeText={(value) => {
setOptions('minVideoDuration', parseNumber(value))
}}
/>
</SectionView>
{/* maxFileSize */}
<SectionView
title="maxFileSize"
description="The maximum size of file that can be selected."
>
<Input
value={options.maxFileSize?.toString() ?? ''}
placeholder="File Size"
onChangeText={(value) => {
setOptions('maxFileSize', parseNumber(value))
}}
/>
</SectionView>
<Text style={style.title}>Crop 🌠</Text>
<View style={style.section}>
<SectionView
title="crop"
description="Enable crop functionality."
>
<Switch
value={options.crop !== undefined}
onValueChange={(value) =>
setOptions('crop', value ? true : undefined)
}
/>
</SectionView>
</View>
<View style={style.section}>
<SectionView
title={'crop.circle' as any}
description="Enable crop circle functionality."
>
<Switch
value={
typeof options.crop === 'boolean'
? options.crop
: options.crop?.circle
}
onValueChange={(value) =>
setOptions(
'crop',
value ? { circle: true } : { circle: false }
)
}
/>
</SectionView>
</View>
{/* Preview */}
<Text style={style.title}>Preview 🌠</Text>
{/* isPreview */}
<SectionView
title="isPreview"
description="Hide the preview button in the picker."
optionKey="isPreview"
/>
{/* isShowPreviewList */}
<SectionView
title="isShowPreviewList"
description="Show the preview list."
optionKey="isShowPreviewList"
/>
{/* isHiddenPreviewButton */}
<SectionView
title="isHiddenPreviewButton"
description="Hide the preview button in the picker."
optionKey="isHiddenPreviewButton"
/>
{/* allowHapticTouchPreview */}
{IS_IOS ? (
<SectionView
title="allowHapticTouchPreview"
description="Allow haptic touch preview."
optionKey="allowHapticTouchPreview"
/>
) : null}
<Text style={style.title}>Localization 🌐</Text>
<View style={style.section}>
<SectionView
title="text"
description="The locale of the picker."
/>
{(
[
'finish',
'preview',
'original',
'edit',
] as (keyof Config['text'])[]
).map((key) => (
<Input
value={options.text?.[key] ?? ''}
placeholder={key}
key={key}
onChangeText={(value) => {
const object = {
...options.text,
[key]: value,
}
Object.entries(object).forEach(([textKey, textValue]) => {
if (textValue === '' || !textValue)
delete object[textKey as keyof Config['text']]
})
setOptions(
'text',
Object.entries(object).length > 0 ? object : undefined
)
}}
/>
))}
</View>
<View style={style.section}>
<SectionView
title="language"
description="The language of the picker."
/>
<Row style={style.language}>
{LOCALIZED_LANGUAGES.map(({ key, label }) => {
const onPress = () => {
setOptions('language', key)
}
const active = options.language === key
return (
<TouchableOpacity
style={[
style.languageItem,
{
backgroundColor: active ? foreground : background,
borderColor: foreground + '32',
},
]}
onPress={onPress}
>
<Text
style={{ color: active ? background : foreground }}
>
{label}
</Text>
</TouchableOpacity>
)
})}
</Row>
</View>
</View>
</ScrollView>
</AppContext.Provider>
</KeyboardAvoidingView>
<View level={2}>
<Row style={style.bottom} level={2} gap={12}>
<Button type="outline" onPress={onCamera}>
Open Camera
</Button>
<Button style={style.openPicker} onPress={onPicker}>
Open Picker
</Button>
</Row>
<SafeAreaView />
</View>
</Container>
)
}
const numberOfColumn = 3
const style = StyleSheet.create({
titleView: {
padding: 16,
flexDirection: 'row',
gap: 12,
},
mip: {
// flex: 1,
},
textView: {
alignItems: 'flex-start',
flex: 1,
height: 48,
gap: 4,
},
title: {
fontWeight: 900,
fontSize: 20,
fontFamily: 'Avenir',
textTransform: 'uppercase',
paddingTop: 12,
marginBottom: -12,
},
buttonOpen: {
margin: 16,
},
scrollView: {
gap: 12,
paddingTop: 12,
paddingBottom: 24,
},
content: {
flexDirection: 'column',
gap: 32,
padding: 16,
},
logo: {
aspectRatio: 1,
objectFit: 'cover',
height: 48,
width: 48,
},
buttonPlus: {
alignItems: 'center',
justifyContent: 'center',
padding: 48,
marginHorizontal: 16,
// backgroundColor: '#D4D4D432',
borderStyle: 'dashed',
borderWidth: 2,
borderColor: '#D4D4D492',
borderRadius: 8,
},
plusSign: {
width: 16,
height: 16,
},
section: {
rowGap: 12,
columnGap: 24,
},
sectionTitle: {
gap: 8,
},
des: {
fontSize: 12,
},
keyboardAvoidingView: {
flex: 1,
},
language: {
flexWrap: 'wrap',
rowGap: 12,
columnGap: 12,
},
languageItem: {
paddingHorizontal: 12,
paddingVertical: 8,
borderRadius: 6,
borderWidth: 1,
},
bottom: {
padding: 16,
paddingHorizontal: 24,
},
openPicker: {
flex: 1,
},
imageContainer: {
flexDirection: 'row',
flexWrap: 'wrap',
gap: 6,
paddingHorizontal: 6,
},
image: {
width: (WIDTH - 24) / numberOfColumn,
height: (WIDTH - 24) / numberOfColumn,
},
removeButton: {
position: 'absolute',
top: 6,
right: 6,
backgroundColor: 'rgba(0, 0, 0, 0.9)',
borderRadius: 100,
padding: 6,
},
trash: {
width: 16,
height: 16,
transform: [{ rotate: '45deg' }],
},
})
================================================
FILE: example/src/theme/color.ts
================================================
export const light = {
background: '#ffffff',
foreground: '#000000',
primary: '#000000',
// background level
background_1: '#f0f0f0',
background_2: '#f3f3f3',
background_3: '#f5f5f5',
}
export const dark = {
background: '#000000',
foreground: '#ffffff',
primary: '#ffffff',
// background level
background_1: '#101010',
background_2: '#202020',
background_3: '#303030',
}
export const colors = {
...light,
divider: '#D4D4D499',
}
================================================
FILE: example/src/theme/size.ts
================================================
import { Dimensions } from 'react-native'
export const { width: WIDTH, height: HEIGHT } = Dimensions.get('window')
export const HALF_HEIGHT = HEIGHT / 2
export const HALF_WIDTH = WIDTH / 2
================================================
FILE: example/tsconfig.json
================================================
{
"compilerOptions": {
"outDir": "./lib"
},
"extends": "../tsconfig"
}
================================================
FILE: ios/Assets.swift
================================================
//
// Assets.swift
// Pods
//
// Created by BAO HA on 4/12/24.
//
import UIKit
class Assets {
class func bundle() -> Bundle {
let podBundle = Bundle(for: Assets.self)
if let url = podBundle.url(forResource: "MultipleImagePicker", withExtension: "bundle") {
let bundle = Bundle(url: url)
return bundle ?? podBundle
}
return podBundle
}
}
extension UIImage {
static var close = UIImage(name: "close")
convenience init(name: String) {
self.init(named: name, in: Assets.bundle(), compatibleWith: nil)!
}
}
================================================
FILE: ios/Assets.xcassets/Contents.json
================================================
{
"info" : {
"version" : 1,
"author" : "xcode"
}
}
================================================
FILE: ios/Assets.xcassets/close.imageset/Contents.json
================================================
{
"images" : [
{
"filename" : "close.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: ios/ErrorCode.swift
================================================
//
// ErrorCode.swift
// Pods
//
// Created by BAO HA on 3/12/24.
//
// enum ErrorCode: Int, Error {
//
// }
================================================
FILE: ios/HybridMultipleImagePicker+Camera.swift
================================================
//
// HybridMultipleImagePicker+Camera.swift
// Pods
//
// Created by BAO HA on 13/12/24.
//
import AVFoundation
import HXPhotoPicker
import Photos
extension HybridMultipleImagePicker {
func openCamera(config: NitroCameraConfig, resolved: @escaping ((CameraResult) -> Void), rejected: @escaping ((Double) -> Void)) throws {
var captureType: CameraController.CaptureType = .all
// check media type
switch config.mediaType {
case .image:
captureType = .photo
case .video:
captureType = .video
default:
break
}
// config
var cameraConfig = CameraConfiguration()
cameraConfig.videoMaximumDuration = config.videoMaximumDuration ?? 60
cameraConfig.modalPresentationStyle = self.setPresentation(config.presentation)
cameraConfig.editor.modalPresentationStyle = .fullScreen
if let crop = config.crop {
let editor = PickerCropConfig(circle: crop.circle, ratio: crop.ratio, defaultRatio: crop.defaultRatio, freeStyle: crop.freeStyle)
cameraConfig.editor = setCropConfig(editor)
} else {
cameraConfig.allowsEditing = false
}
cameraConfig.languageType = setLocale(language: config.language)
cameraConfig.isSaveSystemAlbum = config.isSaveSystemAlbum ?? false
cameraConfig.sessionPreset = .hd4K3840x2160
cameraConfig.aspectRatio = .fullScreen
if let color = config.color, let focusColor = getReactColor(Int(color)) {
cameraConfig.focusColor = focusColor
}
switch Int(config.cameraDevice?.rawValue ?? 1) {
case 0:
cameraConfig.position = .front
default:
cameraConfig.position = .back
}
func getCameraResult(_ result: CameraController.Result, _ asset: PHAsset?) {
if let asset {
Task {
let photoAsset = PhotoAsset(asset)
let urlResult = try await photoAsset.urlResult()
let path = urlResult.url.absoluteString
let phAsset = photoAsset.phAsset
let thumbnail = phAsset?.getVideoAssetThumbnail(from: path, in: 1)
resolved(CameraResult(path: path, type: photoAsset.mediaType == .photo ? ResultType.image : ResultType.video, width: photoAsset.imageSize.width, height: photoAsset.imageSize.height, duration: photoAsset.videoDuration, thumbnail: thumbnail, fileName: phAsset?.fileName))
}
} else {
switch result {
case .image(let uiImage):
let fileName = "IMG_\(Int(Date().timeIntervalSince1970)).jpg"
let filePath = uiImage.getPath(fileName: fileName, quality: 1.0)
if let filePath {
resolved(CameraResult(path: filePath, type: ResultType.image, width: uiImage.size.width, height: uiImage.size.height, duration: nil, thumbnail: nil, fileName: fileName))
} else {
rejected(1)
}
case .video(let url):
let asset = AVAsset(url: url)
let thumbnail = getVideoThumbnail(from: url.absoluteString, in: 1)
var result = CameraResult(path: "file://\(url.absoluteString)",
type: ResultType.video,
width: nil,
height: nil,
duration: asset.duration.seconds,
thumbnail: thumbnail,
fileName: url.lastPathComponent)
if let track = asset.tracks(withMediaType: AVMediaType.video).first {
let trackSize = track.naturalSize.applying(track.preferredTransform)
let size = CGSize(width: abs(trackSize.width), height: abs(trackSize.height))
result.width = Double(size.width)
result.height = Double(size.height)
}
resolved(result)
}
}
}
DispatchQueue.main.async {
Photo.capture(cameraConfig, type: captureType) { result, asset, _ in
getCameraResult(result, asset)
}
}
}
func setCameraConfig(_ options: PickerCameraConfig) -> SystemCameraConfiguration {
var config = SystemCameraConfiguration()
config.editExportPreset = .highQuality
config.videoQuality = .typeHigh
switch Int(options.cameraDevice?.rawValue ?? 1) {
case 0:
config.cameraDevice = .front
default:
config.cameraDevice = .rear
}
config.videoMaximumDuration = options.videoMaximumDuration ?? 60
return config
}
}
================================================
FILE: ios/HybridMultipleImagePicker+Config.swift
================================================
//
// HybridMultipleImagePicker+Config.swift
// react-native-multiple-image-picker
//
// Created by BAO HA on 15/10/2024.
//
import HXPhotoPicker
import UIKit
// Swift enum
// @objc enum MediaType: SelectBoxView.Style
extension HybridMultipleImagePicker {
func setConfig(_ options: NitroConfig) {
config = PickerConfiguration.default
var photoList = config.photoList
var previewView = config.previewView
if let spacing = options.spacing { photoList.spacing = spacing }
if let rowNumber = options.numberOfColumn { photoList.rowNumber = Int(rowNumber) }
if let isHiddenPreviewButton = options.isHiddenPreviewButton {
previewView.bottomView.isHiddenPreviewButton = isHiddenPreviewButton
photoList.bottomView.isHiddenOriginalButton = isHiddenPreviewButton
}
if let isHiddenOriginalButton = options.isHiddenOriginalButton {
previewView.bottomView.isHiddenOriginalButton = isHiddenOriginalButton
photoList.bottomView.isHiddenOriginalButton = isHiddenOriginalButton
}
photoList.allowHapticTouchPreview = options.allowHapticTouchPreview ?? true
photoList.allowSwipeToSelect = options.allowSwipeToSelect ?? true
photoList.allowAddLimit = options.allowedLimit ?? true
// check media type
switch options.mediaType {
case .image:
config.selectOptions = [.photo, .livePhoto, .gifPhoto]
case .video:
config.selectOptions = .video
default:
config.selectOptions = [.video, .photo, .gifPhoto, .livePhoto]
}
config.indicatorType = .system
config.photoList.cell.kf_indicatorColor = .black
if let boxStyle = SelectBoxView.Style(rawValue: Int(options.selectBoxStyle.rawValue)) {
previewView.selectBox.style = boxStyle
photoList.cell.selectBox.style = boxStyle
}
photoList.isShowFilterItem = false
photoList.sort = .desc
photoList.isShowAssetNumber = false
previewView.disableFinishButtonWhenNotSelected = false
if let selectMode = PickerSelectMode(rawValue: Int(options.selectMode.rawValue)) {
config.selectMode = selectMode
}
if let maxFileSize = options.maxFileSize {
config.maximumSelectedPhotoFileSize = Int(maxFileSize)
config.maximumSelectedVideoFileSize = Int(maxFileSize)
}
// Setting for video
if options.mediaType == .all || options.mediaType == .video {
if let maxVideo = options.maxVideo {
config.maximumSelectedVideoCount = Int(maxVideo)
}
if let maxVideoDuration = options.maxVideoDuration {
config.maximumSelectedVideoDuration = Int(maxVideoDuration)
}
if let minVideoDuration = options.minVideoDuration {
config.minimumSelectedVideoDuration = Int(minVideoDuration)
}
}
if let maxSelect = options.maxSelect {
config.maximumSelectedCount = Int(maxSelect)
}
config.allowSyncICloudWhenSelectPhoto = true
config.allowCustomTransitionAnimation = true
config.isSelectedOriginal = false
let isPreview = options.isPreview ?? true
previewView.bottomView.isShowPreviewList = isPreview
photoList.bottomView.isHiddenPreviewButton = !isPreview
photoList.allowHapticTouchPreview = isPreview
photoList.bottomView.previewListTickColor = .clear
photoList.bottomView.isShowSelectedView = isPreview
if isPreview {
config.videoSelectionTapAction = .preview
config.photoSelectionTapAction = .preview
} else {
config.videoSelectionTapAction = .quickSelect
config.photoSelectionTapAction = .quickSelect
}
config.editorOptions = [.photo, .gifPhoto, .livePhoto]
if let crop = options.crop {
config.editor = setCropConfig(crop)
} else {
previewView.bottomView.isHiddenEditButton = true
}
photoList.finishSelectionAfterTakingPhoto = true
if let cameraOption = options.camera {
photoList.allowAddCamera = true
photoList.cameraType = .system(setCameraConfig(cameraOption))
} else {
photoList.allowAddCamera = false
}
config.photoList = photoList
config.previewView = previewView
setLanguage(options)
setTheme(options)
config.modalPresentationStyle = setPresentation(options.presentation)
}
private func setTheme(_ options: NitroConfig) {
let isDark = options.theme == Theme.dark
// custom background dark
if let background = options.backgroundDark, let backgroundDark = getReactColor(Int(background)), isDark {
config.photoList.backgroundDarkColor = backgroundDark
config.photoList.backgroundColor = backgroundDark
}
// LIGHT THEME
if !isDark {
let background = UIColor.white
let barStyle = UIBarStyle.default
config.statusBarStyle = .darkContent
config.appearanceStyle = .normal
config.photoList.bottomView.barStyle = barStyle
config.navigationBarStyle = barStyle
config.previewView.bottomView.barStyle = barStyle
config.previewView.backgroundColor = background
config.previewView.bottomView.backgroundColor = background
config.photoList.leftNavigationItems = [PhotoCancelItem.self]
config.photoList.backgroundColor = .white
config.photoList.emptyView.titleColor = .black
config.photoList.emptyView.subTitleColor = .darkGray
config.photoList.titleView.backgroundColor = UIColor.black.withAlphaComponent(0.5)
config.albumList.backgroundColor = .white
config.albumList.cellBackgroundColor = .white
config.albumList.albumNameColor = .black
config.albumList.photoCountColor = .black
config.albumList.cellSelectedColor = "#e1e1e1".hx.color
config.albumList.separatorLineColor = "#e1e1e1".hx.color
}
if let primaryColor = options.primaryColor, let color = getReactColor(Int(primaryColor)) {
config.setThemeColor(color)
}
config.navigationTitleColor = .white
config.photoList.titleView.arrow.arrowColor = .white
config.photoList.cell.customSelectableCellClass = nil
}
func setPresentation(_ presentation: Presentation?) -> UIModalPresentationStyle {
if let presentation {
switch Int(presentation.rawValue) {
case 1:
return .formSheet
default:
return .fullScreen
}
}
return .fullScreen
}
private func setLanguage(_ options: NitroConfig) {
if let text = options.text {
if let finish = text.finish {
config.textManager.picker.photoList.bottomView.finishTitle = .custom(finish)
config.textManager.picker.preview.bottomView.finishTitle = .custom(finish)
config.textManager.editor.crop.maskListFinishTitle = .custom(finish)
}
if let original = text.original {
config.textManager.picker.photoList.bottomView.originalTitle = .custom(original)
config.textManager.picker.preview.bottomView.originalTitle = .custom(original)
}
if let preview = text.preview {
config.textManager.picker.photoList.bottomView.previewTitle = .custom(preview)
}
if let edit = text.edit {
config.textManager.picker.preview.bottomView.editTitle = .custom(edit)
}
}
config.languageType = setLocale(language: options.language)
}
func setLocale(language: Language) -> LanguageType {
switch language {
case .vi:
return .vietnamese // -> 🇻🇳 My country. Yeahhh
case .zhHans:
return .simplifiedChinese
case .zhHant:
return .traditionalChinese
case .ja:
return .japanese
case .ko:
return .korean
case .en:
return .english
case .th:
return .thai
case .id:
return .indonesia
case .ru:
return .russian
case .de:
return .german
case .fr:
return .french
case .ar:
return .arabic
default:
return .system
}
}
}
================================================
FILE: ios/HybridMultipleImagePicker+Crop.swift
================================================
//
// HybridMultipleImagePicker+Crop.swift
// Pods
//
// Created by BAO HA on 9/12/24.
//
import HXPhotoPicker
extension HybridMultipleImagePicker {
func openCrop(image: String, config: NitroCropConfig, resolved: @escaping ((CropResult) -> Void), rejected: @escaping ((Double) -> Void)) throws {
let asset: EditorAsset
if image.hasPrefix("http://") || image.hasPrefix("https://") || image.hasPrefix("file://") {
guard let url = URL(string: image),
let data = try? Data(contentsOf: url)
else {
rejected(0)
return
}
asset = .init(type: .imageData(data))
} else {
asset = .init(type: .photoAsset(.init(localIdentifier: image)))
}
let cropOption = PickerCropConfig(circle: config.circle, ratio: config.ratio, defaultRatio: config.defaultRatio, freeStyle: config.freeStyle)
var editConfig = setCropConfig(cropOption)
editConfig.languageType = setLocale(language: config.language)
DispatchQueue.main.async {
Photo.edit(asset: asset, config: editConfig) { result, _ in
if let path = result.result?.url.absoluteString, let size = result.result?.image?.size {
let result = CropResult(path: path, width: size.width, height: size.height)
resolved(result)
}
}
}
}
func setCropConfig(_ cropConfig: PickerCropConfig) -> EditorConfiguration {
var config = EditorConfiguration()
if let defaultRatio = cropConfig.defaultRatio {
config.cropSize.aspectRatio = .init(width: defaultRatio.width, height: defaultRatio.height)
}
config.photo.defaultSelectedToolOption = .cropSize
config.isFixedCropSizeState = true
config.cropSize.defaultSeletedIndex = 0
let freeStyle = cropConfig.freeStyle ?? true
config.cropSize.isFixedRatio = !freeStyle
config.isWhetherFinishButtonDisabledInUneditedState = true
config.cropSize.isRoundCrop = cropConfig.circle ?? false
config.cropSize.isResetToOriginal = true
config.toolsView = .init(toolOptions: [.init(imageType: PickerConfiguration.default.editor.imageResource.editor.tools.cropSize, type: .cropSize)])
config.photo.defaultSelectedToolOption = .cropSize
if config.cropSize.isRoundCrop {
config.cropSize.aspectRatios = []
} else {
var aspectRatios: [EditorRatioToolConfig] = PickerConfiguration.default.editor.cropSize.aspectRatios
let ratio = cropConfig.ratio
// custom ratio
if ratio.count > 0 {
ratio.forEach { ratio in
let width = Int(ratio.width)
let height = Int(ratio.height)
aspectRatios.insert(.init(title: .custom(ratio.title ?? "\(width)/\(height)"), ratio: .init(width: width, height: height)), at: 3)
}
}
config.cropSize.aspectRatios = freeStyle ? aspectRatios : aspectRatios.filter {
// check freeStyle crop
if $0.ratio == .zero { return false }
return true
}
}
return config
}
}
================================================
FILE: ios/HybridMultipleImagePicker+Preview.swift
================================================
//
// HybridMultipleImagePicker+Preview.swift
// Pods
//
// Created by BAO HA on 11/12/24.
//
import HXPhotoPicker
extension HybridMultipleImagePicker {
func openPreview(media: [MediaPreview], index: Double, config: NitroPreviewConfig, onLongPress: @escaping ((Double) -> Void)) throws {
var previewConfig = HXPhotoPicker.PhotoBrowser.Configuration()
previewConfig.showDelete = false
var assets: [PhotoAsset] = []
previewConfig.tintColor = .white
previewConfig.videoPlayType = config.videoAutoPlay == true ? .auto : .normal
previewConfig.livePhotoPlayType = .auto
previewConfig.languageType = setLocale(language: config.language)
media.forEach { mediaItem in
var asset: PhotoAsset?
if let localIdentifier = mediaItem.localIdentifier {
asset = .init(localIdentifier: localIdentifier)
// auto play gif
if let filePath = mediaItem.path,
let url = URL(string: filePath), isGifFile(url) == true
{
asset = .init(.init(imageURL: url))
}
} else if let path = mediaItem.path, let url = URL(string: path) {
let thumbnail = URL(string: mediaItem.thumbnail ?? "") ?? url
if mediaItem.type == .image {
// network asset
if path.hasPrefix("https://") || path.hasPrefix("http://") {
asset = PhotoAsset(NetworkImageAsset(
thumbnailURL: thumbnail,
originalURL: url,
thumbnailLoadMode: .alwaysThumbnail,
originalLoadMode: .alwaysThumbnail
))
} else {
asset = .init(.init(imageURL: url))
}
} else {
asset = .init(networkVideoAsset: .init(videoURL: url, coverImageURL: thumbnail))
}
}
if let asset {
assets.append(asset)
}
}
if Int(index) > assets.count - 1 { return }
DispatchQueue.main.async {
HXPhotoPicker.PhotoBrowser.show(
assets,
pageIndex: Int(index),
config: previewConfig,
longPressHandler: { index, _, _ in
onLongPress(Double(index))
}
)
}
}
}
================================================
FILE: ios/HybridMultipleImagePicker+Result.swift
================================================
//
// HybridMultipleImagePicker+Result.swift
// Pods
//
// Created by BAO HA on 24/10/24.
//
import HXPhotoPicker
extension HybridMultipleImagePicker {
func getResult(_ asset: PhotoAsset) async throws -> PickerResult {
let urlResult = try await asset.urlResult()
let url = urlResult.url
let creationDate = Int(asset.phAsset?.creationDate?.timeIntervalSince1970 ?? 0)
let mime = url.getMimeType()
let phAsset = asset.phAsset
let type: ResultType = .init(fromString: asset.mediaType == .video ? "video" : "image")!
let thumbnail = asset.phAsset?.getVideoAssetThumbnail(from: url.absoluteString, in: 1)
return PickerResult(localIdentifier: phAsset!.localIdentifier,
width: asset.imageSize.width,
height: asset.imageSize.height,
mime: mime,
size: Double(asset.fileSize),
bucketId: nil,
realPath: nil,
parentFolderName: nil,
creationDate: creationDate > 0 ? Double(creationDate) : nil,
crop: false,
path: "file://\(url.absoluteString)",
type: type,
duration: asset.videoDuration,
thumbnail: thumbnail,
fileName: phAsset?.fileName)
}
}
================================================
FILE: ios/HybridMultipleImagePicker.swift
================================================
//
// HybridMultipleImagePicker.swift
//
// Created by Marc Rousavy on 18.07.24.
//
import Foundation
import HXPhotoPicker
import NitroModules
import Photos
class HybridMultipleImagePicker: HybridMultipleImagePickerSpec {
var selectedAssets: [PhotoAsset] = .init()
var config: PickerConfiguration = .init()
func openPicker(config: NitroConfig, resolved: @escaping (([PickerResult]) -> Void), rejected: @escaping ((Double) -> Void)) throws {
setConfig(config)
// get selected photo
selectedAssets = selectedAssets.filter { asset in
config.s
gitextract_k5e7rspq/ ├── .circleci/ │ └── config.yml ├── .github/ │ ├── FUNDING.yml │ └── workflows/ │ └── docs.yml ├── .gitignore ├── .npmignore ├── CONTRIBUTING.md ├── LICENSE ├── MultipleImagePicker.podspec ├── README.md ├── android/ │ ├── CMakeLists.txt │ ├── build.gradle │ ├── gradle.properties │ └── src/ │ └── main/ │ ├── AndroidManifest.xml │ ├── cpp/ │ │ └── cpp-adapter.cpp │ ├── java/ │ │ └── com/ │ │ └── margelo/ │ │ └── nitro/ │ │ └── multipleimagepicker/ │ │ ├── CameraEngine.kt │ │ ├── Constant.kt │ │ ├── CropEngine.kt │ │ ├── ExoPlayerEngine.kt │ │ ├── GlideEngine.kt │ │ ├── ImageLoaderUtils.kt │ │ ├── LoadingDialog.kt │ │ ├── MultipleImagePicker.kt │ │ ├── MultipleImagePickerImp.kt │ │ ├── MultipleImagePickerPackage.java │ │ ├── PictureSelectorEngineImp.kt │ │ └── VideoThumbnailEngine.kt │ └── res/ │ ├── anim/ │ │ └── anim_modal_in.xml │ ├── drawable/ │ │ ├── checkbox_selector.xml │ │ ├── complete_button.xml │ │ ├── ic_checkmark.xml │ │ ├── ic_down.xml │ │ ├── num_oval.xml │ │ ├── picture_not_selected.xml │ │ ├── picture_selector.xml │ │ ├── preview_gallery_item.xml │ │ └── preview_gallery_white_bg.xml │ ├── layout/ │ │ └── loading_dialog.xml │ └── values/ │ ├── colors.xml │ └── styles.xml ├── babel.config.js ├── docs/ │ ├── .gitignore │ ├── docs/ │ │ ├── CAMERA.mdx │ │ ├── CONFIG.mdx │ │ ├── CROP.mdx │ │ ├── GETTING_STARTED.mdx │ │ ├── PREVIEW.mdx │ │ ├── RESULT.mdx │ │ ├── SHOWCASE/ │ │ │ ├── index.mdx │ │ │ ├── showcase.css │ │ │ └── showcase.json │ │ ├── USAGE.mdx │ │ └── index.md │ ├── docusaurus.config.ts │ ├── package.json │ ├── patches/ │ │ └── @gorhom+docusaurus-preset+1.0.2.patch │ ├── sidebars.ts │ ├── src/ │ │ └── css/ │ │ └── custom.css │ ├── static/ │ │ └── .nojekyll │ └── tsconfig.json ├── example/ │ ├── .gitignore │ ├── App.tsx │ ├── Gemfile │ ├── README.md │ ├── app.json │ ├── babel.config.js │ ├── metro.config.js │ ├── package.json │ ├── react-native.config.js │ ├── src/ │ │ ├── assets/ │ │ │ └── index.ts │ │ ├── common/ │ │ │ └── const.ts │ │ ├── components/ │ │ │ ├── BottomSheet.tsx │ │ │ ├── Button.tsx │ │ │ ├── CheckBox.tsx │ │ │ ├── CodeTag.tsx │ │ │ ├── Container.tsx │ │ │ ├── CounterView.tsx │ │ │ ├── Divider.tsx │ │ │ ├── Input.tsx │ │ │ ├── Row.tsx │ │ │ ├── SectionView.tsx │ │ │ ├── SegmentControl.tsx │ │ │ ├── Text.tsx │ │ │ ├── View.tsx │ │ │ └── index.tsx │ │ ├── hook/ │ │ │ ├── context.ts │ │ │ ├── index.ts │ │ │ └── useTheme.ts │ │ ├── index.tsx │ │ └── theme/ │ │ ├── color.ts │ │ └── size.ts │ └── tsconfig.json ├── ios/ │ ├── Assets.swift │ ├── Assets.xcassets/ │ │ ├── Contents.json │ │ └── close.imageset/ │ │ └── Contents.json │ ├── ErrorCode.swift │ ├── HybridMultipleImagePicker+Camera.swift │ ├── HybridMultipleImagePicker+Config.swift │ ├── HybridMultipleImagePicker+Crop.swift │ ├── HybridMultipleImagePicker+Preview.swift │ ├── HybridMultipleImagePicker+Result.swift │ ├── HybridMultipleImagePicker.swift │ ├── MultipleImagePickerOnLoad.mm │ ├── PHAsset+Thumbnail.swift │ ├── PhotoCancelItem.swift │ ├── TopViewController.swift │ ├── UIColor+Hex.swift │ ├── UIColor+React.swift │ ├── UIImage.swift │ ├── URL+Mime.swift │ └── Utils.swift ├── nitro.json ├── nitrogen/ │ └── generated/ │ ├── .gitattributes │ ├── android/ │ │ ├── MultipleImagePicker+autolinking.cmake │ │ ├── MultipleImagePicker+autolinking.gradle │ │ ├── MultipleImagePickerOnLoad.cpp │ │ ├── MultipleImagePickerOnLoad.hpp │ │ ├── c++/ │ │ │ ├── JCameraDevice.hpp │ │ │ ├── JCameraResult.hpp │ │ │ ├── JCropRatio.hpp │ │ │ ├── JCropResult.hpp │ │ │ ├── JFunc_void_CameraResult.hpp │ │ │ ├── JFunc_void_CropResult.hpp │ │ │ ├── JFunc_void_double.hpp │ │ │ ├── JFunc_void_std__vector_PickerResult_.hpp │ │ │ ├── JHybridMultipleImagePickerSpec.cpp │ │ │ ├── JHybridMultipleImagePickerSpec.hpp │ │ │ ├── JLanguage.hpp │ │ │ ├── JMediaPreview.hpp │ │ │ ├── JMediaType.hpp │ │ │ ├── JNitroCameraConfig.hpp │ │ │ ├── JNitroConfig.hpp │ │ │ ├── JNitroCropConfig.hpp │ │ │ ├── JNitroPreviewConfig.hpp │ │ │ ├── JPickerCameraConfig.hpp │ │ │ ├── JPickerCropConfig.hpp │ │ │ ├── JPickerResult.hpp │ │ │ ├── JPresentation.hpp │ │ │ ├── JResultType.hpp │ │ │ ├── JSelectBoxStyle.hpp │ │ │ ├── JSelectMode.hpp │ │ │ ├── JText.hpp │ │ │ └── JTheme.hpp │ │ └── kotlin/ │ │ └── com/ │ │ └── margelo/ │ │ └── nitro/ │ │ └── multipleimagepicker/ │ │ ├── CameraDevice.kt │ │ ├── CameraResult.kt │ │ ├── CropRatio.kt │ │ ├── CropResult.kt │ │ ├── Func_void_CameraResult.kt │ │ ├── Func_void_CropResult.kt │ │ ├── Func_void_double.kt │ │ ├── Func_void_std__vector_PickerResult_.kt │ │ ├── HybridMultipleImagePickerSpec.kt │ │ ├── Language.kt │ │ ├── MediaPreview.kt │ │ ├── MediaType.kt │ │ ├── MultipleImagePickerOnLoad.kt │ │ ├── NitroCameraConfig.kt │ │ ├── NitroConfig.kt │ │ ├── NitroCropConfig.kt │ │ ├── NitroPreviewConfig.kt │ │ ├── PickerCameraConfig.kt │ │ ├── PickerCropConfig.kt │ │ ├── PickerResult.kt │ │ ├── Presentation.kt │ │ ├── ResultType.kt │ │ ├── SelectBoxStyle.kt │ │ ├── SelectMode.kt │ │ ├── Text.kt │ │ └── Theme.kt │ ├── ios/ │ │ ├── MultipleImagePicker+autolinking.rb │ │ ├── MultipleImagePicker-Swift-Cxx-Bridge.cpp │ │ ├── MultipleImagePicker-Swift-Cxx-Bridge.hpp │ │ ├── MultipleImagePicker-Swift-Cxx-Umbrella.hpp │ │ ├── MultipleImagePickerAutolinking.mm │ │ ├── MultipleImagePickerAutolinking.swift │ │ ├── c++/ │ │ │ ├── HybridMultipleImagePickerSpecSwift.cpp │ │ │ └── HybridMultipleImagePickerSpecSwift.hpp │ │ └── swift/ │ │ ├── CameraDevice.swift │ │ ├── CameraResult.swift │ │ ├── CropRatio.swift │ │ ├── CropResult.swift │ │ ├── Func_void_CameraResult.swift │ │ ├── Func_void_CropResult.swift │ │ ├── Func_void_double.swift │ │ ├── Func_void_std__vector_PickerResult_.swift │ │ ├── HybridMultipleImagePickerSpec.swift │ │ ├── HybridMultipleImagePickerSpec_cxx.swift │ │ ├── Language.swift │ │ ├── MediaPreview.swift │ │ ├── MediaType.swift │ │ ├── NitroCameraConfig.swift │ │ ├── NitroConfig.swift │ │ ├── NitroCropConfig.swift │ │ ├── NitroPreviewConfig.swift │ │ ├── PickerCameraConfig.swift │ │ ├── PickerCropConfig.swift │ │ ├── PickerResult.swift │ │ ├── Presentation.swift │ │ ├── ResultType.swift │ │ ├── SelectBoxStyle.swift │ │ ├── SelectMode.swift │ │ ├── Text.swift │ │ └── Theme.swift │ └── shared/ │ └── c++/ │ ├── CameraDevice.hpp │ ├── CameraResult.hpp │ ├── CropRatio.hpp │ ├── CropResult.hpp │ ├── HybridMultipleImagePickerSpec.cpp │ ├── HybridMultipleImagePickerSpec.hpp │ ├── Language.hpp │ ├── MediaPreview.hpp │ ├── MediaType.hpp │ ├── NitroCameraConfig.hpp │ ├── NitroConfig.hpp │ ├── NitroCropConfig.hpp │ ├── NitroPreviewConfig.hpp │ ├── PickerCameraConfig.hpp │ ├── PickerCropConfig.hpp │ ├── PickerResult.hpp │ ├── Presentation.hpp │ ├── ResultType.hpp │ ├── SelectBoxStyle.hpp │ ├── SelectMode.hpp │ ├── Text.hpp │ └── Theme.hpp ├── package.json ├── react-native.config.js ├── scripts/ │ └── bootstrap.js ├── src/ │ ├── index.ts │ ├── specs/ │ │ └── MultipleImagePicker.nitro.ts │ └── types/ │ ├── camera.ts │ ├── config.ts │ ├── crop.ts │ ├── error.ts │ ├── index.ts │ ├── picker.ts │ ├── preview.ts │ └── result.ts ├── tsconfig.build.json └── tsconfig.json
SYMBOL INDEX (617 symbols across 84 files)
FILE: android/src/main/cpp/cpp-adapter.cpp
function JNIEXPORT (line 4) | JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM* vm, void*) {
FILE: android/src/main/java/com/margelo/nitro/multipleimagepicker/MultipleImagePickerPackage.java
class MultipleImagePickerPackage (line 14) | public class MultipleImagePickerPackage extends TurboReactPackage {
method getModule (line 15) | @Nullable
method getReactModuleInfoProvider (line 21) | @Override
FILE: example/src/common/const.ts
constant IS_IOS (line 3) | const IS_IOS = Platform.OS === 'ios'
constant IS_ANDROID (line 4) | const IS_ANDROID = Platform.OS === 'android'
constant LOCALIZED_LANGUAGES (line 6) | const LOCALIZED_LANGUAGES = [
FILE: example/src/components/BottomSheet.tsx
function BottomSheet (line 4) | function BottomSheet() {
FILE: example/src/components/Button.tsx
type Props (line 10) | interface Props extends TouchableOpacityProps {
function Button (line 15) | function Button({
FILE: example/src/components/CheckBox.tsx
type CheckBoxProps (line 11) | interface CheckBoxProps extends TouchableOpacityProps {
function CheckBox (line 16) | function CheckBox({
FILE: example/src/components/CodeTag.tsx
type CodeTagProps (line 6) | interface CodeTagProps extends ViewProps {
function CodeTag (line 11) | function CodeTag({ children, textProps, ...props }: CodeTagProps) {
FILE: example/src/components/Container.tsx
type Props (line 6) | interface Props extends ViewProps {
function Container (line 10) | function Container({
FILE: example/src/components/CounterView.tsx
type CounterViewProps (line 8) | interface CounterViewProps extends RowProps {
function CounterView (line 17) | function CounterView({
FILE: example/src/components/Divider.tsx
function Divider (line 6) | function Divider() {
FILE: example/src/components/Input.tsx
type InputProps (line 5) | interface InputProps extends TextInputProps {}
function Input (line 7) | function Input({ ...props }: InputProps) {
FILE: example/src/components/Row.tsx
type RowProps (line 5) | interface RowProps extends ViewProps {
function Row (line 10) | function Row({
FILE: example/src/components/SectionView.tsx
type key (line 11) | type key = keyof Config
type SectionViewProps (line 12) | interface SectionViewProps {
function SectionView (line 21) | function SectionView({
FILE: example/src/components/SegmentControl.tsx
function SegmentControl (line 6) | function SegmentControl({ ...props }: SegmentedControlProps) {
FILE: example/src/components/Text.tsx
function Text (line 5) | function Text({ children, style: containerStyle }: TextProps) {
FILE: example/src/components/View.tsx
type ViewProps (line 5) | interface ViewProps extends RNViewProps {
function View (line 10) | function View({
FILE: example/src/hook/useTheme.ts
function useTheme (line 4) | function useTheme() {
FILE: example/src/index.tsx
function App (line 66) | function App() {
FILE: example/src/theme/size.ts
constant HALF_HEIGHT (line 4) | const HALF_HEIGHT = HEIGHT / 2
constant HALF_WIDTH (line 5) | const HALF_WIDTH = WIDTH / 2
FILE: nitrogen/generated/android/MultipleImagePickerOnLoad.cpp
type margelo::nitro::multipleimagepicker (line 26) | namespace margelo::nitro::multipleimagepicker {
function initialize (line 28) | int initialize(JavaVM* vm) {
FILE: nitrogen/generated/android/MultipleImagePickerOnLoad.hpp
type margelo::nitro::multipleimagepicker (line 11) | namespace margelo::nitro::multipleimagepicker {
FILE: nitrogen/generated/android/c++/JCameraDevice.hpp
type margelo::nitro::multipleimagepicker (line 13) | namespace margelo::nitro::multipleimagepicker {
type JCameraDevice (line 20) | struct JCameraDevice final: public jni::JavaClass<JCameraDevice> {
method CameraDevice (line 28) | [[maybe_unused]]
method fromCpp (line 41) | [[maybe_unused]]
FILE: nitrogen/generated/android/c++/JCameraResult.hpp
type margelo::nitro::multipleimagepicker (line 18) | namespace margelo::nitro::multipleimagepicker {
type JCameraResult (line 25) | struct JCameraResult final: public jni::JavaClass<JCameraResult> {
method CameraResult (line 33) | [[maybe_unused]]
method fromCpp (line 66) | [[maybe_unused]]
FILE: nitrogen/generated/android/c++/JCropRatio.hpp
type margelo::nitro::multipleimagepicker (line 16) | namespace margelo::nitro::multipleimagepicker {
type JCropRatio (line 23) | struct JCropRatio final: public jni::JavaClass<JCropRatio> {
method CropRatio (line 31) | [[maybe_unused]]
method fromCpp (line 52) | [[maybe_unused]]
FILE: nitrogen/generated/android/c++/JCropResult.hpp
type margelo::nitro::multipleimagepicker (line 15) | namespace margelo::nitro::multipleimagepicker {
type JCropResult (line 22) | struct JCropResult final: public jni::JavaClass<JCropResult> {
method CropResult (line 30) | [[maybe_unused]]
method fromCpp (line 51) | [[maybe_unused]]
FILE: nitrogen/generated/android/c++/JFunc_void_CameraResult.hpp
type margelo::nitro::multipleimagepicker (line 21) | namespace margelo::nitro::multipleimagepicker {
type JFunc_void_CameraResult (line 29) | struct JFunc_void_CameraResult: public jni::JavaClass<JFunc_void_Camer...
method invoke (line 37) | void invoke(const CameraResult& result) const {
type JFunc_void_CameraResult_cxx (line 46) | struct JFunc_void_CameraResult_cxx final: public jni::HybridClass<JFun...
method fromCpp (line 48) | static jni::local_ref<JFunc_void_CameraResult::javaobject> fromCpp(c...
method invoke_cxx (line 56) | void invoke_cxx(jni::alias_ref<JCameraResult> result) {
method registerNatives (line 68) | static void registerNatives() {
method JFunc_void_CameraResult_cxx (line 73) | explicit JFunc_void_CameraResult_cxx(const std::function<void(const ...
FILE: nitrogen/generated/android/c++/JFunc_void_CropResult.hpp
type margelo::nitro::multipleimagepicker (line 18) | namespace margelo::nitro::multipleimagepicker {
type JFunc_void_CropResult (line 26) | struct JFunc_void_CropResult: public jni::JavaClass<JFunc_void_CropRes...
method invoke (line 34) | void invoke(const CropResult& result) const {
type JFunc_void_CropResult_cxx (line 43) | struct JFunc_void_CropResult_cxx final: public jni::HybridClass<JFunc_...
method fromCpp (line 45) | static jni::local_ref<JFunc_void_CropResult::javaobject> fromCpp(con...
method invoke_cxx (line 53) | void invoke_cxx(jni::alias_ref<JCropResult> result) {
method registerNatives (line 65) | static void registerNatives() {
method JFunc_void_CropResult_cxx (line 70) | explicit JFunc_void_CropResult_cxx(const std::function<void(const Cr...
FILE: nitrogen/generated/android/c++/JFunc_void_double.hpp
type margelo::nitro::multipleimagepicker (line 15) | namespace margelo::nitro::multipleimagepicker {
type JFunc_void_double (line 23) | struct JFunc_void_double: public jni::JavaClass<JFunc_void_double> {
method invoke (line 31) | void invoke(double index) const {
type JFunc_void_double_cxx (line 40) | struct JFunc_void_double_cxx final: public jni::HybridClass<JFunc_void...
method fromCpp (line 42) | static jni::local_ref<JFunc_void_double::javaobject> fromCpp(const s...
method invoke_cxx (line 50) | void invoke_cxx(double index) {
method registerNatives (line 62) | static void registerNatives() {
method JFunc_void_double_cxx (line 67) | explicit JFunc_void_double_cxx(const std::function<void(double /* in...
FILE: nitrogen/generated/android/c++/JFunc_void_std__vector_PickerResult_.hpp
type margelo::nitro::multipleimagepicker (line 22) | namespace margelo::nitro::multipleimagepicker {
type JFunc_void_std__vector_PickerResult_ (line 30) | struct JFunc_void_std__vector_PickerResult_: public jni::JavaClass<JFu...
method invoke (line 38) | void invoke(const std::vector<PickerResult>& result) const {
type JFunc_void_std__vector_PickerResult__cxx (line 55) | struct JFunc_void_std__vector_PickerResult__cxx final: public jni::Hyb...
method fromCpp (line 57) | static jni::local_ref<JFunc_void_std__vector_PickerResult_::javaobje...
method invoke_cxx (line 65) | void invoke_cxx(jni::alias_ref<jni::JArrayClass<JPickerResult>> resu...
method registerNatives (line 86) | static void registerNatives() {
method JFunc_void_std__vector_PickerResult__cxx (line 91) | explicit JFunc_void_std__vector_PickerResult__cxx(const std::functio...
FILE: nitrogen/generated/android/c++/JHybridMultipleImagePickerSpec.cpp
type margelo::nitro::multipleimagepicker (line 11) | namespace margelo::nitro::multipleimagepicker { struct NitroConfig; }
type NitroConfig (line 11) | struct NitroConfig
type MediaType (line 13) | enum class MediaType
type PickerResult (line 15) | struct PickerResult
type ResultType (line 17) | enum class ResultType
type SelectBoxStyle (line 19) | enum class SelectBoxStyle
type SelectMode (line 21) | enum class SelectMode
type PickerCropConfig (line 23) | struct PickerCropConfig
type CropRatio (line 25) | struct CropRatio
type Text (line 27) | struct Text
type Language (line 29) | enum class Language
type Theme (line 31) | enum class Theme
type Presentation (line 33) | enum class Presentation
type PickerCameraConfig (line 35) | struct PickerCameraConfig
type CameraDevice (line 37) | enum class CameraDevice
type NitroCropConfig (line 39) | struct NitroCropConfig
type CropResult (line 41) | struct CropResult
type MediaPreview (line 43) | struct MediaPreview
type NitroPreviewConfig (line 45) | struct NitroPreviewConfig
type NitroCameraConfig (line 47) | struct NitroCameraConfig
type CameraResult (line 49) | struct CameraResult
type margelo::nitro::multipleimagepicker (line 13) | namespace margelo::nitro::multipleimagepicker { enum class MediaType; }
type NitroConfig (line 11) | struct NitroConfig
type MediaType (line 13) | enum class MediaType
type PickerResult (line 15) | struct PickerResult
type ResultType (line 17) | enum class ResultType
type SelectBoxStyle (line 19) | enum class SelectBoxStyle
type SelectMode (line 21) | enum class SelectMode
type PickerCropConfig (line 23) | struct PickerCropConfig
type CropRatio (line 25) | struct CropRatio
type Text (line 27) | struct Text
type Language (line 29) | enum class Language
type Theme (line 31) | enum class Theme
type Presentation (line 33) | enum class Presentation
type PickerCameraConfig (line 35) | struct PickerCameraConfig
type CameraDevice (line 37) | enum class CameraDevice
type NitroCropConfig (line 39) | struct NitroCropConfig
type CropResult (line 41) | struct CropResult
type MediaPreview (line 43) | struct MediaPreview
type NitroPreviewConfig (line 45) | struct NitroPreviewConfig
type NitroCameraConfig (line 47) | struct NitroCameraConfig
type CameraResult (line 49) | struct CameraResult
type margelo::nitro::multipleimagepicker (line 15) | namespace margelo::nitro::multipleimagepicker { struct PickerResult; }
type NitroConfig (line 11) | struct NitroConfig
type MediaType (line 13) | enum class MediaType
type PickerResult (line 15) | struct PickerResult
type ResultType (line 17) | enum class ResultType
type SelectBoxStyle (line 19) | enum class SelectBoxStyle
type SelectMode (line 21) | enum class SelectMode
type PickerCropConfig (line 23) | struct PickerCropConfig
type CropRatio (line 25) | struct CropRatio
type Text (line 27) | struct Text
type Language (line 29) | enum class Language
type Theme (line 31) | enum class Theme
type Presentation (line 33) | enum class Presentation
type PickerCameraConfig (line 35) | struct PickerCameraConfig
type CameraDevice (line 37) | enum class CameraDevice
type NitroCropConfig (line 39) | struct NitroCropConfig
type CropResult (line 41) | struct CropResult
type MediaPreview (line 43) | struct MediaPreview
type NitroPreviewConfig (line 45) | struct NitroPreviewConfig
type NitroCameraConfig (line 47) | struct NitroCameraConfig
type CameraResult (line 49) | struct CameraResult
type margelo::nitro::multipleimagepicker (line 17) | namespace margelo::nitro::multipleimagepicker { enum class ResultType; }
type NitroConfig (line 11) | struct NitroConfig
type MediaType (line 13) | enum class MediaType
type PickerResult (line 15) | struct PickerResult
type ResultType (line 17) | enum class ResultType
type SelectBoxStyle (line 19) | enum class SelectBoxStyle
type SelectMode (line 21) | enum class SelectMode
type PickerCropConfig (line 23) | struct PickerCropConfig
type CropRatio (line 25) | struct CropRatio
type Text (line 27) | struct Text
type Language (line 29) | enum class Language
type Theme (line 31) | enum class Theme
type Presentation (line 33) | enum class Presentation
type PickerCameraConfig (line 35) | struct PickerCameraConfig
type CameraDevice (line 37) | enum class CameraDevice
type NitroCropConfig (line 39) | struct NitroCropConfig
type CropResult (line 41) | struct CropResult
type MediaPreview (line 43) | struct MediaPreview
type NitroPreviewConfig (line 45) | struct NitroPreviewConfig
type NitroCameraConfig (line 47) | struct NitroCameraConfig
type CameraResult (line 49) | struct CameraResult
type margelo::nitro::multipleimagepicker (line 19) | namespace margelo::nitro::multipleimagepicker { enum class SelectBoxStyl...
type NitroConfig (line 11) | struct NitroConfig
type MediaType (line 13) | enum class MediaType
type PickerResult (line 15) | struct PickerResult
type ResultType (line 17) | enum class ResultType
type SelectBoxStyle (line 19) | enum class SelectBoxStyle
type SelectMode (line 21) | enum class SelectMode
type PickerCropConfig (line 23) | struct PickerCropConfig
type CropRatio (line 25) | struct CropRatio
type Text (line 27) | struct Text
type Language (line 29) | enum class Language
type Theme (line 31) | enum class Theme
type Presentation (line 33) | enum class Presentation
type PickerCameraConfig (line 35) | struct PickerCameraConfig
type CameraDevice (line 37) | enum class CameraDevice
type NitroCropConfig (line 39) | struct NitroCropConfig
type CropResult (line 41) | struct CropResult
type MediaPreview (line 43) | struct MediaPreview
type NitroPreviewConfig (line 45) | struct NitroPreviewConfig
type NitroCameraConfig (line 47) | struct NitroCameraConfig
type CameraResult (line 49) | struct CameraResult
type margelo::nitro::multipleimagepicker (line 21) | namespace margelo::nitro::multipleimagepicker { enum class SelectMode; }
type NitroConfig (line 11) | struct NitroConfig
type MediaType (line 13) | enum class MediaType
type PickerResult (line 15) | struct PickerResult
type ResultType (line 17) | enum class ResultType
type SelectBoxStyle (line 19) | enum class SelectBoxStyle
type SelectMode (line 21) | enum class SelectMode
type PickerCropConfig (line 23) | struct PickerCropConfig
type CropRatio (line 25) | struct CropRatio
type Text (line 27) | struct Text
type Language (line 29) | enum class Language
type Theme (line 31) | enum class Theme
type Presentation (line 33) | enum class Presentation
type PickerCameraConfig (line 35) | struct PickerCameraConfig
type CameraDevice (line 37) | enum class CameraDevice
type NitroCropConfig (line 39) | struct NitroCropConfig
type CropResult (line 41) | struct CropResult
type MediaPreview (line 43) | struct MediaPreview
type NitroPreviewConfig (line 45) | struct NitroPreviewConfig
type NitroCameraConfig (line 47) | struct NitroCameraConfig
type CameraResult (line 49) | struct CameraResult
type margelo::nitro::multipleimagepicker (line 23) | namespace margelo::nitro::multipleimagepicker { struct PickerCropConfig; }
type NitroConfig (line 11) | struct NitroConfig
type MediaType (line 13) | enum class MediaType
type PickerResult (line 15) | struct PickerResult
type ResultType (line 17) | enum class ResultType
type SelectBoxStyle (line 19) | enum class SelectBoxStyle
type SelectMode (line 21) | enum class SelectMode
type PickerCropConfig (line 23) | struct PickerCropConfig
type CropRatio (line 25) | struct CropRatio
type Text (line 27) | struct Text
type Language (line 29) | enum class Language
type Theme (line 31) | enum class Theme
type Presentation (line 33) | enum class Presentation
type PickerCameraConfig (line 35) | struct PickerCameraConfig
type CameraDevice (line 37) | enum class CameraDevice
type NitroCropConfig (line 39) | struct NitroCropConfig
type CropResult (line 41) | struct CropResult
type MediaPreview (line 43) | struct MediaPreview
type NitroPreviewConfig (line 45) | struct NitroPreviewConfig
type NitroCameraConfig (line 47) | struct NitroCameraConfig
type CameraResult (line 49) | struct CameraResult
type margelo::nitro::multipleimagepicker (line 25) | namespace margelo::nitro::multipleimagepicker { struct CropRatio; }
type NitroConfig (line 11) | struct NitroConfig
type MediaType (line 13) | enum class MediaType
type PickerResult (line 15) | struct PickerResult
type ResultType (line 17) | enum class ResultType
type SelectBoxStyle (line 19) | enum class SelectBoxStyle
type SelectMode (line 21) | enum class SelectMode
type PickerCropConfig (line 23) | struct PickerCropConfig
type CropRatio (line 25) | struct CropRatio
type Text (line 27) | struct Text
type Language (line 29) | enum class Language
type Theme (line 31) | enum class Theme
type Presentation (line 33) | enum class Presentation
type PickerCameraConfig (line 35) | struct PickerCameraConfig
type CameraDevice (line 37) | enum class CameraDevice
type NitroCropConfig (line 39) | struct NitroCropConfig
type CropResult (line 41) | struct CropResult
type MediaPreview (line 43) | struct MediaPreview
type NitroPreviewConfig (line 45) | struct NitroPreviewConfig
type NitroCameraConfig (line 47) | struct NitroCameraConfig
type CameraResult (line 49) | struct CameraResult
type margelo::nitro::multipleimagepicker (line 27) | namespace margelo::nitro::multipleimagepicker { struct Text; }
type NitroConfig (line 11) | struct NitroConfig
type MediaType (line 13) | enum class MediaType
type PickerResult (line 15) | struct PickerResult
type ResultType (line 17) | enum class ResultType
type SelectBoxStyle (line 19) | enum class SelectBoxStyle
type SelectMode (line 21) | enum class SelectMode
type PickerCropConfig (line 23) | struct PickerCropConfig
type CropRatio (line 25) | struct CropRatio
type Text (line 27) | struct Text
type Language (line 29) | enum class Language
type Theme (line 31) | enum class Theme
type Presentation (line 33) | enum class Presentation
type PickerCameraConfig (line 35) | struct PickerCameraConfig
type CameraDevice (line 37) | enum class CameraDevice
type NitroCropConfig (line 39) | struct NitroCropConfig
type CropResult (line 41) | struct CropResult
type MediaPreview (line 43) | struct MediaPreview
type NitroPreviewConfig (line 45) | struct NitroPreviewConfig
type NitroCameraConfig (line 47) | struct NitroCameraConfig
type CameraResult (line 49) | struct CameraResult
type margelo::nitro::multipleimagepicker (line 29) | namespace margelo::nitro::multipleimagepicker { enum class Language; }
type NitroConfig (line 11) | struct NitroConfig
type MediaType (line 13) | enum class MediaType
type PickerResult (line 15) | struct PickerResult
type ResultType (line 17) | enum class ResultType
type SelectBoxStyle (line 19) | enum class SelectBoxStyle
type SelectMode (line 21) | enum class SelectMode
type PickerCropConfig (line 23) | struct PickerCropConfig
type CropRatio (line 25) | struct CropRatio
type Text (line 27) | struct Text
type Language (line 29) | enum class Language
type Theme (line 31) | enum class Theme
type Presentation (line 33) | enum class Presentation
type PickerCameraConfig (line 35) | struct PickerCameraConfig
type CameraDevice (line 37) | enum class CameraDevice
type NitroCropConfig (line 39) | struct NitroCropConfig
type CropResult (line 41) | struct CropResult
type MediaPreview (line 43) | struct MediaPreview
type NitroPreviewConfig (line 45) | struct NitroPreviewConfig
type NitroCameraConfig (line 47) | struct NitroCameraConfig
type CameraResult (line 49) | struct CameraResult
type margelo::nitro::multipleimagepicker (line 31) | namespace margelo::nitro::multipleimagepicker { enum class Theme; }
type NitroConfig (line 11) | struct NitroConfig
type MediaType (line 13) | enum class MediaType
type PickerResult (line 15) | struct PickerResult
type ResultType (line 17) | enum class ResultType
type SelectBoxStyle (line 19) | enum class SelectBoxStyle
type SelectMode (line 21) | enum class SelectMode
type PickerCropConfig (line 23) | struct PickerCropConfig
type CropRatio (line 25) | struct CropRatio
type Text (line 27) | struct Text
type Language (line 29) | enum class Language
type Theme (line 31) | enum class Theme
type Presentation (line 33) | enum class Presentation
type PickerCameraConfig (line 35) | struct PickerCameraConfig
type CameraDevice (line 37) | enum class CameraDevice
type NitroCropConfig (line 39) | struct NitroCropConfig
type CropResult (line 41) | struct CropResult
type MediaPreview (line 43) | struct MediaPreview
type NitroPreviewConfig (line 45) | struct NitroPreviewConfig
type NitroCameraConfig (line 47) | struct NitroCameraConfig
type CameraResult (line 49) | struct CameraResult
type margelo::nitro::multipleimagepicker (line 33) | namespace margelo::nitro::multipleimagepicker { enum class Presentation; }
type NitroConfig (line 11) | struct NitroConfig
type MediaType (line 13) | enum class MediaType
type PickerResult (line 15) | struct PickerResult
type ResultType (line 17) | enum class ResultType
type SelectBoxStyle (line 19) | enum class SelectBoxStyle
type SelectMode (line 21) | enum class SelectMode
type PickerCropConfig (line 23) | struct PickerCropConfig
type CropRatio (line 25) | struct CropRatio
type Text (line 27) | struct Text
type Language (line 29) | enum class Language
type Theme (line 31) | enum class Theme
type Presentation (line 33) | enum class Presentation
type PickerCameraConfig (line 35) | struct PickerCameraConfig
type CameraDevice (line 37) | enum class CameraDevice
type NitroCropConfig (line 39) | struct NitroCropConfig
type CropResult (line 41) | struct CropResult
type MediaPreview (line 43) | struct MediaPreview
type NitroPreviewConfig (line 45) | struct NitroPreviewConfig
type NitroCameraConfig (line 47) | struct NitroCameraConfig
type CameraResult (line 49) | struct CameraResult
type margelo::nitro::multipleimagepicker (line 35) | namespace margelo::nitro::multipleimagepicker { struct PickerCameraConfi...
type NitroConfig (line 11) | struct NitroConfig
type MediaType (line 13) | enum class MediaType
type PickerResult (line 15) | struct PickerResult
type ResultType (line 17) | enum class ResultType
type SelectBoxStyle (line 19) | enum class SelectBoxStyle
type SelectMode (line 21) | enum class SelectMode
type PickerCropConfig (line 23) | struct PickerCropConfig
type CropRatio (line 25) | struct CropRatio
type Text (line 27) | struct Text
type Language (line 29) | enum class Language
type Theme (line 31) | enum class Theme
type Presentation (line 33) | enum class Presentation
type PickerCameraConfig (line 35) | struct PickerCameraConfig
type CameraDevice (line 37) | enum class CameraDevice
type NitroCropConfig (line 39) | struct NitroCropConfig
type CropResult (line 41) | struct CropResult
type MediaPreview (line 43) | struct MediaPreview
type NitroPreviewConfig (line 45) | struct NitroPreviewConfig
type NitroCameraConfig (line 47) | struct NitroCameraConfig
type CameraResult (line 49) | struct CameraResult
type margelo::nitro::multipleimagepicker (line 37) | namespace margelo::nitro::multipleimagepicker { enum class CameraDevice; }
type NitroConfig (line 11) | struct NitroConfig
type MediaType (line 13) | enum class MediaType
type PickerResult (line 15) | struct PickerResult
type ResultType (line 17) | enum class ResultType
type SelectBoxStyle (line 19) | enum class SelectBoxStyle
type SelectMode (line 21) | enum class SelectMode
type PickerCropConfig (line 23) | struct PickerCropConfig
type CropRatio (line 25) | struct CropRatio
type Text (line 27) | struct Text
type Language (line 29) | enum class Language
type Theme (line 31) | enum class Theme
type Presentation (line 33) | enum class Presentation
type PickerCameraConfig (line 35) | struct PickerCameraConfig
type CameraDevice (line 37) | enum class CameraDevice
type NitroCropConfig (line 39) | struct NitroCropConfig
type CropResult (line 41) | struct CropResult
type MediaPreview (line 43) | struct MediaPreview
type NitroPreviewConfig (line 45) | struct NitroPreviewConfig
type NitroCameraConfig (line 47) | struct NitroCameraConfig
type CameraResult (line 49) | struct CameraResult
type margelo::nitro::multipleimagepicker (line 39) | namespace margelo::nitro::multipleimagepicker { struct NitroCropConfig; }
type NitroConfig (line 11) | struct NitroConfig
type MediaType (line 13) | enum class MediaType
type PickerResult (line 15) | struct PickerResult
type ResultType (line 17) | enum class ResultType
type SelectBoxStyle (line 19) | enum class SelectBoxStyle
type SelectMode (line 21) | enum class SelectMode
type PickerCropConfig (line 23) | struct PickerCropConfig
type CropRatio (line 25) | struct CropRatio
type Text (line 27) | struct Text
type Language (line 29) | enum class Language
type Theme (line 31) | enum class Theme
type Presentation (line 33) | enum class Presentation
type PickerCameraConfig (line 35) | struct PickerCameraConfig
type CameraDevice (line 37) | enum class CameraDevice
type NitroCropConfig (line 39) | struct NitroCropConfig
type CropResult (line 41) | struct CropResult
type MediaPreview (line 43) | struct MediaPreview
type NitroPreviewConfig (line 45) | struct NitroPreviewConfig
type NitroCameraConfig (line 47) | struct NitroCameraConfig
type CameraResult (line 49) | struct CameraResult
type margelo::nitro::multipleimagepicker (line 41) | namespace margelo::nitro::multipleimagepicker { struct CropResult; }
type NitroConfig (line 11) | struct NitroConfig
type MediaType (line 13) | enum class MediaType
type PickerResult (line 15) | struct PickerResult
type ResultType (line 17) | enum class ResultType
type SelectBoxStyle (line 19) | enum class SelectBoxStyle
type SelectMode (line 21) | enum class SelectMode
type PickerCropConfig (line 23) | struct PickerCropConfig
type CropRatio (line 25) | struct CropRatio
type Text (line 27) | struct Text
type Language (line 29) | enum class Language
type Theme (line 31) | enum class Theme
type Presentation (line 33) | enum class Presentation
type PickerCameraConfig (line 35) | struct PickerCameraConfig
type CameraDevice (line 37) | enum class CameraDevice
type NitroCropConfig (line 39) | struct NitroCropConfig
type CropResult (line 41) | struct CropResult
type MediaPreview (line 43) | struct MediaPreview
type NitroPreviewConfig (line 45) | struct NitroPreviewConfig
type NitroCameraConfig (line 47) | struct NitroCameraConfig
type CameraResult (line 49) | struct CameraResult
type margelo::nitro::multipleimagepicker (line 43) | namespace margelo::nitro::multipleimagepicker { struct MediaPreview; }
type NitroConfig (line 11) | struct NitroConfig
type MediaType (line 13) | enum class MediaType
type PickerResult (line 15) | struct PickerResult
type ResultType (line 17) | enum class ResultType
type SelectBoxStyle (line 19) | enum class SelectBoxStyle
type SelectMode (line 21) | enum class SelectMode
type PickerCropConfig (line 23) | struct PickerCropConfig
type CropRatio (line 25) | struct CropRatio
type Text (line 27) | struct Text
type Language (line 29) | enum class Language
type Theme (line 31) | enum class Theme
type Presentation (line 33) | enum class Presentation
type PickerCameraConfig (line 35) | struct PickerCameraConfig
type CameraDevice (line 37) | enum class CameraDevice
type NitroCropConfig (line 39) | struct NitroCropConfig
type CropResult (line 41) | struct CropResult
type MediaPreview (line 43) | struct MediaPreview
type NitroPreviewConfig (line 45) | struct NitroPreviewConfig
type NitroCameraConfig (line 47) | struct NitroCameraConfig
type CameraResult (line 49) | struct CameraResult
type margelo::nitro::multipleimagepicker (line 45) | namespace margelo::nitro::multipleimagepicker { struct NitroPreviewConfi...
type NitroConfig (line 11) | struct NitroConfig
type MediaType (line 13) | enum class MediaType
type PickerResult (line 15) | struct PickerResult
type ResultType (line 17) | enum class ResultType
type SelectBoxStyle (line 19) | enum class SelectBoxStyle
type SelectMode (line 21) | enum class SelectMode
type PickerCropConfig (line 23) | struct PickerCropConfig
type CropRatio (line 25) | struct CropRatio
type Text (line 27) | struct Text
type Language (line 29) | enum class Language
type Theme (line 31) | enum class Theme
type Presentation (line 33) | enum class Presentation
type PickerCameraConfig (line 35) | struct PickerCameraConfig
type CameraDevice (line 37) | enum class CameraDevice
type NitroCropConfig (line 39) | struct NitroCropConfig
type CropResult (line 41) | struct CropResult
type MediaPreview (line 43) | struct MediaPreview
type NitroPreviewConfig (line 45) | struct NitroPreviewConfig
type NitroCameraConfig (line 47) | struct NitroCameraConfig
type CameraResult (line 49) | struct CameraResult
type margelo::nitro::multipleimagepicker (line 47) | namespace margelo::nitro::multipleimagepicker { struct NitroCameraConfig; }
type NitroConfig (line 11) | struct NitroConfig
type MediaType (line 13) | enum class MediaType
type PickerResult (line 15) | struct PickerResult
type ResultType (line 17) | enum class ResultType
type SelectBoxStyle (line 19) | enum class SelectBoxStyle
type SelectMode (line 21) | enum class SelectMode
type PickerCropConfig (line 23) | struct PickerCropConfig
type CropRatio (line 25) | struct CropRatio
type Text (line 27) | struct Text
type Language (line 29) | enum class Language
type Theme (line 31) | enum class Theme
type Presentation (line 33) | enum class Presentation
type PickerCameraConfig (line 35) | struct PickerCameraConfig
type CameraDevice (line 37) | enum class CameraDevice
type NitroCropConfig (line 39) | struct NitroCropConfig
type CropResult (line 41) | struct CropResult
type MediaPreview (line 43) | struct MediaPreview
type NitroPreviewConfig (line 45) | struct NitroPreviewConfig
type NitroCameraConfig (line 47) | struct NitroCameraConfig
type CameraResult (line 49) | struct CameraResult
type margelo::nitro::multipleimagepicker (line 49) | namespace margelo::nitro::multipleimagepicker { struct CameraResult; }
type NitroConfig (line 11) | struct NitroConfig
type MediaType (line 13) | enum class MediaType
type PickerResult (line 15) | struct PickerResult
type ResultType (line 17) | enum class ResultType
type SelectBoxStyle (line 19) | enum class SelectBoxStyle
type SelectMode (line 21) | enum class SelectMode
type PickerCropConfig (line 23) | struct PickerCropConfig
type CropRatio (line 25) | struct CropRatio
type Text (line 27) | struct Text
type Language (line 29) | enum class Language
type Theme (line 31) | enum class Theme
type Presentation (line 33) | enum class Presentation
type PickerCameraConfig (line 35) | struct PickerCameraConfig
type CameraDevice (line 37) | enum class CameraDevice
type NitroCropConfig (line 39) | struct NitroCropConfig
type CropResult (line 41) | struct CropResult
type MediaPreview (line 43) | struct MediaPreview
type NitroPreviewConfig (line 45) | struct NitroPreviewConfig
type NitroCameraConfig (line 47) | struct NitroCameraConfig
type CameraResult (line 49) | struct CameraResult
type margelo::nitro::multipleimagepicker (line 100) | namespace margelo::nitro::multipleimagepicker {
type NitroConfig (line 11) | struct NitroConfig
type MediaType (line 13) | enum class MediaType
type PickerResult (line 15) | struct PickerResult
type ResultType (line 17) | enum class ResultType
type SelectBoxStyle (line 19) | enum class SelectBoxStyle
type SelectMode (line 21) | enum class SelectMode
type PickerCropConfig (line 23) | struct PickerCropConfig
type CropRatio (line 25) | struct CropRatio
type Text (line 27) | struct Text
type Language (line 29) | enum class Language
type Theme (line 31) | enum class Theme
type Presentation (line 33) | enum class Presentation
type PickerCameraConfig (line 35) | struct PickerCameraConfig
type CameraDevice (line 37) | enum class CameraDevice
type NitroCropConfig (line 39) | struct NitroCropConfig
type CropResult (line 41) | struct CropResult
type MediaPreview (line 43) | struct MediaPreview
type NitroPreviewConfig (line 45) | struct NitroPreviewConfig
type NitroCameraConfig (line 47) | struct NitroCameraConfig
type CameraResult (line 49) | struct CameraResult
FILE: nitrogen/generated/android/c++/JHybridMultipleImagePickerSpec.hpp
type margelo::nitro::multipleimagepicker (line 17) | namespace margelo::nitro::multipleimagepicker {
class JHybridMultipleImagePickerSpec (line 21) | class JHybridMultipleImagePickerSpec: public jni::HybridClass<JHybridM...
method JHybridMultipleImagePickerSpec (line 30) | explicit JHybridMultipleImagePickerSpec(jni::alias_ref<jhybridobject...
FILE: nitrogen/generated/android/c++/JLanguage.hpp
type margelo::nitro::multipleimagepicker (line 13) | namespace margelo::nitro::multipleimagepicker {
type JLanguage (line 20) | struct JLanguage final: public jni::JavaClass<JLanguage> {
method Language (line 28) | [[maybe_unused]]
method fromCpp (line 41) | [[maybe_unused]]
FILE: nitrogen/generated/android/c++/JMediaPreview.hpp
type margelo::nitro::multipleimagepicker (line 18) | namespace margelo::nitro::multipleimagepicker {
type JMediaPreview (line 25) | struct JMediaPreview final: public jni::JavaClass<JMediaPreview> {
method MediaPreview (line 33) | [[maybe_unused]]
method fromCpp (line 57) | [[maybe_unused]]
FILE: nitrogen/generated/android/c++/JMediaType.hpp
type margelo::nitro::multipleimagepicker (line 13) | namespace margelo::nitro::multipleimagepicker {
type JMediaType (line 20) | struct JMediaType final: public jni::JavaClass<JMediaType> {
method MediaType (line 28) | [[maybe_unused]]
method fromCpp (line 41) | [[maybe_unused]]
FILE: nitrogen/generated/android/c++/JNitroCameraConfig.hpp
type margelo::nitro::multipleimagepicker (line 29) | namespace margelo::nitro::multipleimagepicker {
type JNitroCameraConfig (line 36) | struct JNitroCameraConfig final: public jni::JavaClass<JNitroCameraCon...
method NitroCameraConfig (line 44) | [[maybe_unused]]
method fromCpp (line 80) | [[maybe_unused]]
FILE: nitrogen/generated/android/c++/JNitroConfig.hpp
type margelo::nitro::multipleimagepicker (line 43) | namespace margelo::nitro::multipleimagepicker {
type JNitroConfig (line 50) | struct JNitroConfig final: public jni::JavaClass<JNitroConfig> {
method NitroConfig (line 58) | [[maybe_unused]]
method fromCpp (line 157) | [[maybe_unused]]
FILE: nitrogen/generated/android/c++/JNitroCropConfig.hpp
type margelo::nitro::multipleimagepicker (line 23) | namespace margelo::nitro::multipleimagepicker {
type JNitroCropConfig (line 30) | struct JNitroCropConfig final: public jni::JavaClass<JNitroCropConfig> {
method NitroCropConfig (line 38) | [[maybe_unused]]
method fromCpp (line 77) | [[maybe_unused]]
FILE: nitrogen/generated/android/c++/JNitroPreviewConfig.hpp
type margelo::nitro::multipleimagepicker (line 17) | namespace margelo::nitro::multipleimagepicker {
type JNitroPreviewConfig (line 24) | struct JNitroPreviewConfig final: public jni::JavaClass<JNitroPreviewC...
method NitroPreviewConfig (line 32) | [[maybe_unused]]
method fromCpp (line 50) | [[maybe_unused]]
FILE: nitrogen/generated/android/c++/JPickerCameraConfig.hpp
type margelo::nitro::multipleimagepicker (line 17) | namespace margelo::nitro::multipleimagepicker {
type JPickerCameraConfig (line 24) | struct JPickerCameraConfig final: public jni::JavaClass<JPickerCameraC...
method PickerCameraConfig (line 32) | [[maybe_unused]]
method fromCpp (line 50) | [[maybe_unused]]
FILE: nitrogen/generated/android/c++/JPickerCropConfig.hpp
type margelo::nitro::multipleimagepicker (line 19) | namespace margelo::nitro::multipleimagepicker {
type JPickerCropConfig (line 26) | struct JPickerCropConfig final: public jni::JavaClass<JPickerCropConfi...
method PickerCropConfig (line 34) | [[maybe_unused]]
method fromCpp (line 67) | [[maybe_unused]]
FILE: nitrogen/generated/android/c++/JPickerResult.hpp
type margelo::nitro::multipleimagepicker (line 18) | namespace margelo::nitro::multipleimagepicker {
type JPickerResult (line 25) | struct JPickerResult final: public jni::JavaClass<JPickerResult> {
method PickerResult (line 33) | [[maybe_unused]]
method fromCpp (line 90) | [[maybe_unused]]
FILE: nitrogen/generated/android/c++/JPresentation.hpp
type margelo::nitro::multipleimagepicker (line 13) | namespace margelo::nitro::multipleimagepicker {
type JPresentation (line 20) | struct JPresentation final: public jni::JavaClass<JPresentation> {
method Presentation (line 28) | [[maybe_unused]]
method fromCpp (line 41) | [[maybe_unused]]
FILE: nitrogen/generated/android/c++/JResultType.hpp
type margelo::nitro::multipleimagepicker (line 13) | namespace margelo::nitro::multipleimagepicker {
type JResultType (line 20) | struct JResultType final: public jni::JavaClass<JResultType> {
method ResultType (line 28) | [[maybe_unused]]
method fromCpp (line 41) | [[maybe_unused]]
FILE: nitrogen/generated/android/c++/JSelectBoxStyle.hpp
type margelo::nitro::multipleimagepicker (line 13) | namespace margelo::nitro::multipleimagepicker {
type JSelectBoxStyle (line 20) | struct JSelectBoxStyle final: public jni::JavaClass<JSelectBoxStyle> {
method SelectBoxStyle (line 28) | [[maybe_unused]]
method fromCpp (line 41) | [[maybe_unused]]
FILE: nitrogen/generated/android/c++/JSelectMode.hpp
type margelo::nitro::multipleimagepicker (line 13) | namespace margelo::nitro::multipleimagepicker {
type JSelectMode (line 20) | struct JSelectMode final: public jni::JavaClass<JSelectMode> {
method SelectMode (line 28) | [[maybe_unused]]
method fromCpp (line 41) | [[maybe_unused]]
FILE: nitrogen/generated/android/c++/JText.hpp
type margelo::nitro::multipleimagepicker (line 16) | namespace margelo::nitro::multipleimagepicker {
type JText (line 23) | struct JText final: public jni::JavaClass<JText> {
method Text (line 31) | [[maybe_unused]]
method fromCpp (line 55) | [[maybe_unused]]
FILE: nitrogen/generated/android/c++/JTheme.hpp
type margelo::nitro::multipleimagepicker (line 13) | namespace margelo::nitro::multipleimagepicker {
type JTheme (line 20) | struct JTheme final: public jni::JavaClass<JTheme> {
method Theme (line 28) | [[maybe_unused]]
method fromCpp (line 41) | [[maybe_unused]]
FILE: nitrogen/generated/ios/MultipleImagePicker+autolinking.rb
function add_nitrogen_files (line 22) | def add_nitrogen_files(spec)
FILE: nitrogen/generated/ios/MultipleImagePicker-Swift-Cxx-Bridge.cpp
type margelo::nitro::multipleimagepicker::bridge::swift (line 14) | namespace margelo::nitro::multipleimagepicker::bridge::swift {
function Func_void_std__vector_PickerResult_ (line 17) | Func_void_std__vector_PickerResult_ create_Func_void_std__vector_Picke...
function Func_void_double (line 25) | Func_void_double create_Func_void_double(void* _Nonnull swiftClosureWr...
function Func_void_CropResult (line 33) | Func_void_CropResult create_Func_void_CropResult(void* _Nonnull swiftC...
function Func_void_CameraResult (line 41) | Func_void_CameraResult create_Func_void_CameraResult(void* _Nonnull sw...
function create_std__shared_ptr_margelo__nitro__multipleimagepicker__HybridMultipleImagePickerSpec_ (line 49) | std::shared_ptr<margelo::nitro::multipleimagepicker::HybridMultipleIma...
FILE: nitrogen/generated/ios/MultipleImagePicker-Swift-Cxx-Bridge.hpp
type margelo::nitro::multipleimagepicker (line 12) | namespace margelo::nitro::multipleimagepicker { enum class CameraDevice; }
type CameraDevice (line 12) | enum class CameraDevice
type CameraResult (line 14) | struct CameraResult
type CropRatio (line 16) | struct CropRatio
type CropResult (line 18) | struct CropResult
class HybridMultipleImagePickerSpec (line 20) | class HybridMultipleImagePickerSpec
type MediaPreview (line 22) | struct MediaPreview
type PickerCameraConfig (line 24) | struct PickerCameraConfig
type PickerCropConfig (line 26) | struct PickerCropConfig
type PickerResult (line 28) | struct PickerResult
type ResultType (line 30) | enum class ResultType
type Text (line 32) | struct Text
type margelo::nitro::multipleimagepicker (line 14) | namespace margelo::nitro::multipleimagepicker { struct CameraResult; }
type CameraDevice (line 12) | enum class CameraDevice
type CameraResult (line 14) | struct CameraResult
type CropRatio (line 16) | struct CropRatio
type CropResult (line 18) | struct CropResult
class HybridMultipleImagePickerSpec (line 20) | class HybridMultipleImagePickerSpec
type MediaPreview (line 22) | struct MediaPreview
type PickerCameraConfig (line 24) | struct PickerCameraConfig
type PickerCropConfig (line 26) | struct PickerCropConfig
type PickerResult (line 28) | struct PickerResult
type ResultType (line 30) | enum class ResultType
type Text (line 32) | struct Text
type margelo::nitro::multipleimagepicker (line 16) | namespace margelo::nitro::multipleimagepicker { struct CropRatio; }
type CameraDevice (line 12) | enum class CameraDevice
type CameraResult (line 14) | struct CameraResult
type CropRatio (line 16) | struct CropRatio
type CropResult (line 18) | struct CropResult
class HybridMultipleImagePickerSpec (line 20) | class HybridMultipleImagePickerSpec
type MediaPreview (line 22) | struct MediaPreview
type PickerCameraConfig (line 24) | struct PickerCameraConfig
type PickerCropConfig (line 26) | struct PickerCropConfig
type PickerResult (line 28) | struct PickerResult
type ResultType (line 30) | enum class ResultType
type Text (line 32) | struct Text
type margelo::nitro::multipleimagepicker (line 18) | namespace margelo::nitro::multipleimagepicker { struct CropResult; }
type CameraDevice (line 12) | enum class CameraDevice
type CameraResult (line 14) | struct CameraResult
type CropRatio (line 16) | struct CropRatio
type CropResult (line 18) | struct CropResult
class HybridMultipleImagePickerSpec (line 20) | class HybridMultipleImagePickerSpec
type MediaPreview (line 22) | struct MediaPreview
type PickerCameraConfig (line 24) | struct PickerCameraConfig
type PickerCropConfig (line 26) | struct PickerCropConfig
type PickerResult (line 28) | struct PickerResult
type ResultType (line 30) | enum class ResultType
type Text (line 32) | struct Text
type margelo::nitro::multipleimagepicker (line 20) | namespace margelo::nitro::multipleimagepicker { class HybridMultipleImag...
type CameraDevice (line 12) | enum class CameraDevice
type CameraResult (line 14) | struct CameraResult
type CropRatio (line 16) | struct CropRatio
type CropResult (line 18) | struct CropResult
class HybridMultipleImagePickerSpec (line 20) | class HybridMultipleImagePickerSpec
type MediaPreview (line 22) | struct MediaPreview
type PickerCameraConfig (line 24) | struct PickerCameraConfig
type PickerCropConfig (line 26) | struct PickerCropConfig
type PickerResult (line 28) | struct PickerResult
type ResultType (line 30) | enum class ResultType
type Text (line 32) | struct Text
type margelo::nitro::multipleimagepicker (line 22) | namespace margelo::nitro::multipleimagepicker { struct MediaPreview; }
type CameraDevice (line 12) | enum class CameraDevice
type CameraResult (line 14) | struct CameraResult
type CropRatio (line 16) | struct CropRatio
type CropResult (line 18) | struct CropResult
class HybridMultipleImagePickerSpec (line 20) | class HybridMultipleImagePickerSpec
type MediaPreview (line 22) | struct MediaPreview
type PickerCameraConfig (line 24) | struct PickerCameraConfig
type PickerCropConfig (line 26) | struct PickerCropConfig
type PickerResult (line 28) | struct PickerResult
type ResultType (line 30) | enum class ResultType
type Text (line 32) | struct Text
type margelo::nitro::multipleimagepicker (line 24) | namespace margelo::nitro::multipleimagepicker { struct PickerCameraConfi...
type CameraDevice (line 12) | enum class CameraDevice
type CameraResult (line 14) | struct CameraResult
type CropRatio (line 16) | struct CropRatio
type CropResult (line 18) | struct CropResult
class HybridMultipleImagePickerSpec (line 20) | class HybridMultipleImagePickerSpec
type MediaPreview (line 22) | struct MediaPreview
type PickerCameraConfig (line 24) | struct PickerCameraConfig
type PickerCropConfig (line 26) | struct PickerCropConfig
type PickerResult (line 28) | struct PickerResult
type ResultType (line 30) | enum class ResultType
type Text (line 32) | struct Text
type margelo::nitro::multipleimagepicker (line 26) | namespace margelo::nitro::multipleimagepicker { struct PickerCropConfig; }
type CameraDevice (line 12) | enum class CameraDevice
type CameraResult (line 14) | struct CameraResult
type CropRatio (line 16) | struct CropRatio
type CropResult (line 18) | struct CropResult
class HybridMultipleImagePickerSpec (line 20) | class HybridMultipleImagePickerSpec
type MediaPreview (line 22) | struct MediaPreview
type PickerCameraConfig (line 24) | struct PickerCameraConfig
type PickerCropConfig (line 26) | struct PickerCropConfig
type PickerResult (line 28) | struct PickerResult
type ResultType (line 30) | enum class ResultType
type Text (line 32) | struct Text
type margelo::nitro::multipleimagepicker (line 28) | namespace margelo::nitro::multipleimagepicker { struct PickerResult; }
type CameraDevice (line 12) | enum class CameraDevice
type CameraResult (line 14) | struct CameraResult
type CropRatio (line 16) | struct CropRatio
type CropResult (line 18) | struct CropResult
class HybridMultipleImagePickerSpec (line 20) | class HybridMultipleImagePickerSpec
type MediaPreview (line 22) | struct MediaPreview
type PickerCameraConfig (line 24) | struct PickerCameraConfig
type PickerCropConfig (line 26) | struct PickerCropConfig
type PickerResult (line 28) | struct PickerResult
type ResultType (line 30) | enum class ResultType
type Text (line 32) | struct Text
type margelo::nitro::multipleimagepicker (line 30) | namespace margelo::nitro::multipleimagepicker { enum class ResultType; }
type CameraDevice (line 12) | enum class CameraDevice
type CameraResult (line 14) | struct CameraResult
type CropRatio (line 16) | struct CropRatio
type CropResult (line 18) | struct CropResult
class HybridMultipleImagePickerSpec (line 20) | class HybridMultipleImagePickerSpec
type MediaPreview (line 22) | struct MediaPreview
type PickerCameraConfig (line 24) | struct PickerCameraConfig
type PickerCropConfig (line 26) | struct PickerCropConfig
type PickerResult (line 28) | struct PickerResult
type ResultType (line 30) | enum class ResultType
type Text (line 32) | struct Text
type margelo::nitro::multipleimagepicker (line 32) | namespace margelo::nitro::multipleimagepicker { struct Text; }
type CameraDevice (line 12) | enum class CameraDevice
type CameraResult (line 14) | struct CameraResult
type CropRatio (line 16) | struct CropRatio
type CropResult (line 18) | struct CropResult
class HybridMultipleImagePickerSpec (line 20) | class HybridMultipleImagePickerSpec
type MediaPreview (line 22) | struct MediaPreview
type PickerCameraConfig (line 24) | struct PickerCameraConfig
type PickerCropConfig (line 26) | struct PickerCropConfig
type PickerResult (line 28) | struct PickerResult
type ResultType (line 30) | enum class ResultType
type Text (line 32) | struct Text
type MultipleImagePicker (line 36) | namespace MultipleImagePicker { class HybridMultipleImagePickerSpec_cxx; }
class HybridMultipleImagePickerSpec_cxx (line 36) | class HybridMultipleImagePickerSpec_cxx
type margelo::nitro::multipleimagepicker::bridge::swift (line 62) | namespace margelo::nitro::multipleimagepicker::bridge::swift {
function create_std__optional_double_ (line 69) | inline std::optional<double> create_std__optional_double_(const double...
function create_std__optional_std__string_ (line 78) | inline std::optional<std::string> create_std__optional_std__string_(co...
function create_std__optional_bool_ (line 87) | inline std::optional<bool> create_std__optional_bool_(const bool& valu...
function create_std__vector_PickerResult_ (line 96) | inline std::vector<PickerResult> create_std__vector_PickerResult_(size...
function create_std__vector_CropRatio_ (line 107) | inline std::vector<CropRatio> create_std__vector_CropRatio_(size_t siz...
function create_std__optional_CropRatio_ (line 118) | inline std::optional<CropRatio> create_std__optional_CropRatio_(const ...
function create_std__optional_PickerCropConfig_ (line 127) | inline std::optional<PickerCropConfig> create_std__optional_PickerCrop...
function create_std__optional_Text_ (line 136) | inline std::optional<Text> create_std__optional_Text_(const Text& valu...
function create_std__optional_CameraDevice_ (line 145) | inline std::optional<CameraDevice> create_std__optional_CameraDevice_(...
function create_std__optional_PickerCameraConfig_ (line 154) | inline std::optional<PickerCameraConfig> create_std__optional_PickerCa...
class Func_void_std__vector_PickerResult__Wrapper (line 166) | class Func_void_std__vector_PickerResult__Wrapper final {
method Func_void_std__vector_PickerResult__Wrapper (line 168) | explicit Func_void_std__vector_PickerResult__Wrapper(std::function<v...
method call (line 169) | inline void call(std::vector<PickerResult> result) const {
function Func_void_std__vector_PickerResult__Wrapper (line 176) | inline Func_void_std__vector_PickerResult__Wrapper wrap_Func_void_std_...
method Func_void_std__vector_PickerResult__Wrapper (line 168) | explicit Func_void_std__vector_PickerResult__Wrapper(std::function<v...
method call (line 169) | inline void call(std::vector<PickerResult> result) const {
class Func_void_double_Wrapper (line 188) | class Func_void_double_Wrapper final {
method Func_void_double_Wrapper (line 190) | explicit Func_void_double_Wrapper(std::function<void(double /* rejec...
method call (line 191) | inline void call(double reject) const {
function Func_void_double_Wrapper (line 198) | inline Func_void_double_Wrapper wrap_Func_void_double(Func_void_double...
method Func_void_double_Wrapper (line 190) | explicit Func_void_double_Wrapper(std::function<void(double /* rejec...
method call (line 191) | inline void call(double reject) const {
class Func_void_CropResult_Wrapper (line 210) | class Func_void_CropResult_Wrapper final {
method Func_void_CropResult_Wrapper (line 212) | explicit Func_void_CropResult_Wrapper(std::function<void(const CropR...
method call (line 213) | inline void call(CropResult result) const {
function Func_void_CropResult_Wrapper (line 220) | inline Func_void_CropResult_Wrapper wrap_Func_void_CropResult(Func_voi...
method Func_void_CropResult_Wrapper (line 212) | explicit Func_void_CropResult_Wrapper(std::function<void(const CropR...
method call (line 213) | inline void call(CropResult result) const {
function create_std__vector_MediaPreview_ (line 229) | inline std::vector<MediaPreview> create_std__vector_MediaPreview_(size...
class Func_void_CameraResult_Wrapper (line 243) | class Func_void_CameraResult_Wrapper final {
method Func_void_CameraResult_Wrapper (line 245) | explicit Func_void_CameraResult_Wrapper(std::function<void(const Cam...
method call (line 246) | inline void call(CameraResult result) const {
function Func_void_CameraResult_Wrapper (line 253) | inline Func_void_CameraResult_Wrapper wrap_Func_void_CameraResult(Func...
method Func_void_CameraResult_Wrapper (line 245) | explicit Func_void_CameraResult_Wrapper(std::function<void(const Cam...
method call (line 246) | inline void call(CameraResult result) const {
function std__weak_ptr_margelo__nitro__multipleimagepicker__HybridMultipleImagePickerSpec_ (line 267) | inline std__weak_ptr_margelo__nitro__multipleimagepicker__HybridMultip...
function Result_void_ (line 271) | inline Result_void_ create_Result_void_() {
function Result_void_ (line 274) | inline Result_void_ create_Result_void_(const std::exception_ptr& erro...
FILE: nitrogen/generated/ios/MultipleImagePicker-Swift-Cxx-Umbrella.hpp
type margelo::nitro::multipleimagepicker (line 12) | namespace margelo::nitro::multipleimagepicker { enum class CameraDevice; }
type CameraDevice (line 12) | enum class CameraDevice
type CameraResult (line 14) | struct CameraResult
type CropRatio (line 16) | struct CropRatio
type CropResult (line 18) | struct CropResult
class HybridMultipleImagePickerSpec (line 20) | class HybridMultipleImagePickerSpec
type Language (line 22) | enum class Language
type MediaPreview (line 24) | struct MediaPreview
type MediaType (line 26) | enum class MediaType
type NitroCameraConfig (line 28) | struct NitroCameraConfig
type NitroConfig (line 30) | struct NitroConfig
type NitroCropConfig (line 32) | struct NitroCropConfig
type NitroPreviewConfig (line 34) | struct NitroPreviewConfig
type PickerCameraConfig (line 36) | struct PickerCameraConfig
type PickerCropConfig (line 38) | struct PickerCropConfig
type PickerResult (line 40) | struct PickerResult
type Presentation (line 42) | enum class Presentation
type ResultType (line 44) | enum class ResultType
type SelectBoxStyle (line 46) | enum class SelectBoxStyle
type SelectMode (line 48) | enum class SelectMode
type Text (line 50) | struct Text
type Theme (line 52) | enum class Theme
type margelo::nitro::multipleimagepicker (line 14) | namespace margelo::nitro::multipleimagepicker { struct CameraResult; }
type CameraDevice (line 12) | enum class CameraDevice
type CameraResult (line 14) | struct CameraResult
type CropRatio (line 16) | struct CropRatio
type CropResult (line 18) | struct CropResult
class HybridMultipleImagePickerSpec (line 20) | class HybridMultipleImagePickerSpec
type Language (line 22) | enum class Language
type MediaPreview (line 24) | struct MediaPreview
type MediaType (line 26) | enum class MediaType
type NitroCameraConfig (line 28) | struct NitroCameraConfig
type NitroConfig (line 30) | struct NitroConfig
type NitroCropConfig (line 32) | struct NitroCropConfig
type NitroPreviewConfig (line 34) | struct NitroPreviewConfig
type PickerCameraConfig (line 36) | struct PickerCameraConfig
type PickerCropConfig (line 38) | struct PickerCropConfig
type PickerResult (line 40) | struct PickerResult
type Presentation (line 42) | enum class Presentation
type ResultType (line 44) | enum class ResultType
type SelectBoxStyle (line 46) | enum class SelectBoxStyle
type SelectMode (line 48) | enum class SelectMode
type Text (line 50) | struct Text
type Theme (line 52) | enum class Theme
type margelo::nitro::multipleimagepicker (line 16) | namespace margelo::nitro::multipleimagepicker { struct CropRatio; }
type CameraDevice (line 12) | enum class CameraDevice
type CameraResult (line 14) | struct CameraResult
type CropRatio (line 16) | struct CropRatio
type CropResult (line 18) | struct CropResult
class HybridMultipleImagePickerSpec (line 20) | class HybridMultipleImagePickerSpec
type Language (line 22) | enum class Language
type MediaPreview (line 24) | struct MediaPreview
type MediaType (line 26) | enum class MediaType
type NitroCameraConfig (line 28) | struct NitroCameraConfig
type NitroConfig (line 30) | struct NitroConfig
type NitroCropConfig (line 32) | struct NitroCropConfig
type NitroPreviewConfig (line 34) | struct NitroPreviewConfig
type PickerCameraConfig (line 36) | struct PickerCameraConfig
type PickerCropConfig (line 38) | struct PickerCropConfig
type PickerResult (line 40) | struct PickerResult
type Presentation (line 42) | enum class Presentation
type ResultType (line 44) | enum class ResultType
type SelectBoxStyle (line 46) | enum class SelectBoxStyle
type SelectMode (line 48) | enum class SelectMode
type Text (line 50) | struct Text
type Theme (line 52) | enum class Theme
type margelo::nitro::multipleimagepicker (line 18) | namespace margelo::nitro::multipleimagepicker { struct CropResult; }
type CameraDevice (line 12) | enum class CameraDevice
type CameraResult (line 14) | struct CameraResult
type CropRatio (line 16) | struct CropRatio
type CropResult (line 18) | struct CropResult
class HybridMultipleImagePickerSpec (line 20) | class HybridMultipleImagePickerSpec
type Language (line 22) | enum class Language
type MediaPreview (line 24) | struct MediaPreview
type MediaType (line 26) | enum class MediaType
type NitroCameraConfig (line 28) | struct NitroCameraConfig
type NitroConfig (line 30) | struct NitroConfig
type NitroCropConfig (line 32) | struct NitroCropConfig
type NitroPreviewConfig (line 34) | struct NitroPreviewConfig
type PickerCameraConfig (line 36) | struct PickerCameraConfig
type PickerCropConfig (line 38) | struct PickerCropConfig
type PickerResult (line 40) | struct PickerResult
type Presentation (line 42) | enum class Presentation
type ResultType (line 44) | enum class ResultType
type SelectBoxStyle (line 46) | enum class SelectBoxStyle
type SelectMode (line 48) | enum class SelectMode
type Text (line 50) | struct Text
type Theme (line 52) | enum class Theme
type margelo::nitro::multipleimagepicker (line 20) | namespace margelo::nitro::multipleimagepicker { class HybridMultipleImag...
type CameraDevice (line 12) | enum class CameraDevice
type CameraResult (line 14) | struct CameraResult
type CropRatio (line 16) | struct CropRatio
type CropResult (line 18) | struct CropResult
class HybridMultipleImagePickerSpec (line 20) | class HybridMultipleImagePickerSpec
type Language (line 22) | enum class Language
type MediaPreview (line 24) | struct MediaPreview
type MediaType (line 26) | enum class MediaType
type NitroCameraConfig (line 28) | struct NitroCameraConfig
type NitroConfig (line 30) | struct NitroConfig
type NitroCropConfig (line 32) | struct NitroCropConfig
type NitroPreviewConfig (line 34) | struct NitroPreviewConfig
type PickerCameraConfig (line 36) | struct PickerCameraConfig
type PickerCropConfig (line 38) | struct PickerCropConfig
type PickerResult (line 40) | struct PickerResult
type Presentation (line 42) | enum class Presentation
type ResultType (line 44) | enum class ResultType
type SelectBoxStyle (line 46) | enum class SelectBoxStyle
type SelectMode (line 48) | enum class SelectMode
type Text (line 50) | struct Text
type Theme (line 52) | enum class Theme
type margelo::nitro::multipleimagepicker (line 22) | namespace margelo::nitro::multipleimagepicker { enum class Language; }
type CameraDevice (line 12) | enum class CameraDevice
type CameraResult (line 14) | struct CameraResult
type CropRatio (line 16) | struct CropRatio
type CropResult (line 18) | struct CropResult
class HybridMultipleImagePickerSpec (line 20) | class HybridMultipleImagePickerSpec
type Language (line 22) | enum class Language
type MediaPreview (line 24) | struct MediaPreview
type MediaType (line 26) | enum class MediaType
type NitroCameraConfig (line 28) | struct NitroCameraConfig
type NitroConfig (line 30) | struct NitroConfig
type NitroCropConfig (line 32) | struct NitroCropConfig
type NitroPreviewConfig (line 34) | struct NitroPreviewConfig
type PickerCameraConfig (line 36) | struct PickerCameraConfig
type PickerCropConfig (line 38) | struct PickerCropConfig
type PickerResult (line 40) | struct PickerResult
type Presentation (line 42) | enum class Presentation
type ResultType (line 44) | enum class ResultType
type SelectBoxStyle (line 46) | enum class SelectBoxStyle
type SelectMode (line 48) | enum class SelectMode
type Text (line 50) | struct Text
type Theme (line 52) | enum class Theme
type margelo::nitro::multipleimagepicker (line 24) | namespace margelo::nitro::multipleimagepicker { struct MediaPreview; }
type CameraDevice (line 12) | enum class CameraDevice
type CameraResult (line 14) | struct CameraResult
type CropRatio (line 16) | struct CropRatio
type CropResult (line 18) | struct CropResult
class HybridMultipleImagePickerSpec (line 20) | class HybridMultipleImagePickerSpec
type Language (line 22) | enum class Language
type MediaPreview (line 24) | struct MediaPreview
type MediaType (line 26) | enum class MediaType
type NitroCameraConfig (line 28) | struct NitroCameraConfig
type NitroConfig (line 30) | struct NitroConfig
type NitroCropConfig (line 32) | struct NitroCropConfig
type NitroPreviewConfig (line 34) | struct NitroPreviewConfig
type PickerCameraConfig (line 36) | struct PickerCameraConfig
type PickerCropConfig (line 38) | struct PickerCropConfig
type PickerResult (line 40) | struct PickerResult
type Presentation (line 42) | enum class Presentation
type ResultType (line 44) | enum class ResultType
type SelectBoxStyle (line 46) | enum class SelectBoxStyle
type SelectMode (line 48) | enum class SelectMode
type Text (line 50) | struct Text
type Theme (line 52) | enum class Theme
type margelo::nitro::multipleimagepicker (line 26) | namespace margelo::nitro::multipleimagepicker { enum class MediaType; }
type CameraDevice (line 12) | enum class CameraDevice
type CameraResult (line 14) | struct CameraResult
type CropRatio (line 16) | struct CropRatio
type CropResult (line 18) | struct CropResult
class HybridMultipleImagePickerSpec (line 20) | class HybridMultipleImagePickerSpec
type Language (line 22) | enum class Language
type MediaPreview (line 24) | struct MediaPreview
type MediaType (line 26) | enum class MediaType
type NitroCameraConfig (line 28) | struct NitroCameraConfig
type NitroConfig (line 30) | struct NitroConfig
type NitroCropConfig (line 32) | struct NitroCropConfig
type NitroPreviewConfig (line 34) | struct NitroPreviewConfig
type PickerCameraConfig (line 36) | struct PickerCameraConfig
type PickerCropConfig (line 38) | struct PickerCropConfig
type PickerResult (line 40) | struct PickerResult
type Presentation (line 42) | enum class Presentation
type ResultType (line 44) | enum class ResultType
type SelectBoxStyle (line 46) | enum class SelectBoxStyle
type SelectMode (line 48) | enum class SelectMode
type Text (line 50) | struct Text
type Theme (line 52) | enum class Theme
type margelo::nitro::multipleimagepicker (line 28) | namespace margelo::nitro::multipleimagepicker { struct NitroCameraConfig; }
type CameraDevice (line 12) | enum class CameraDevice
type CameraResult (line 14) | struct CameraResult
type CropRatio (line 16) | struct CropRatio
type CropResult (line 18) | struct CropResult
class HybridMultipleImagePickerSpec (line 20) | class HybridMultipleImagePickerSpec
type Language (line 22) | enum class Language
type MediaPreview (line 24) | struct MediaPreview
type MediaType (line 26) | enum class MediaType
type NitroCameraConfig (line 28) | struct NitroCameraConfig
type NitroConfig (line 30) | struct NitroConfig
type NitroCropConfig (line 32) | struct NitroCropConfig
type NitroPreviewConfig (line 34) | struct NitroPreviewConfig
type PickerCameraConfig (line 36) | struct PickerCameraConfig
type PickerCropConfig (line 38) | struct PickerCropConfig
type PickerResult (line 40) | struct PickerResult
type Presentation (line 42) | enum class Presentation
type ResultType (line 44) | enum class ResultType
type SelectBoxStyle (line 46) | enum class SelectBoxStyle
type SelectMode (line 48) | enum class SelectMode
type Text (line 50) | struct Text
type Theme (line 52) | enum class Theme
type margelo::nitro::multipleimagepicker (line 30) | namespace margelo::nitro::multipleimagepicker { struct NitroConfig; }
type CameraDevice (line 12) | enum class CameraDevice
type CameraResult (line 14) | struct CameraResult
type CropRatio (line 16) | struct CropRatio
type CropResult (line 18) | struct CropResult
class HybridMultipleImagePickerSpec (line 20) | class HybridMultipleImagePickerSpec
type Language (line 22) | enum class Language
type MediaPreview (line 24) | struct MediaPreview
type MediaType (line 26) | enum class MediaType
type NitroCameraConfig (line 28) | struct NitroCameraConfig
type NitroConfig (line 30) | struct NitroConfig
type NitroCropConfig (line 32) | struct NitroCropConfig
type NitroPreviewConfig (line 34) | struct NitroPreviewConfig
type PickerCameraConfig (line 36) | struct PickerCameraConfig
type PickerCropConfig (line 38) | struct PickerCropConfig
type PickerResult (line 40) | struct PickerResult
type Presentation (line 42) | enum class Presentation
type ResultType (line 44) | enum class ResultType
type SelectBoxStyle (line 46) | enum class SelectBoxStyle
type SelectMode (line 48) | enum class SelectMode
type Text (line 50) | struct Text
type Theme (line 52) | enum class Theme
type margelo::nitro::multipleimagepicker (line 32) | namespace margelo::nitro::multipleimagepicker { struct NitroCropConfig; }
type CameraDevice (line 12) | enum class CameraDevice
type CameraResult (line 14) | struct CameraResult
type CropRatio (line 16) | struct CropRatio
type CropResult (line 18) | struct CropResult
class HybridMultipleImagePickerSpec (line 20) | class HybridMultipleImagePickerSpec
type Language (line 22) | enum class Language
type MediaPreview (line 24) | struct MediaPreview
type MediaType (line 26) | enum class MediaType
type NitroCameraConfig (line 28) | struct NitroCameraConfig
type NitroConfig (line 30) | struct NitroConfig
type NitroCropConfig (line 32) | struct NitroCropConfig
type NitroPreviewConfig (line 34) | struct NitroPreviewConfig
type PickerCameraConfig (line 36) | struct PickerCameraConfig
type PickerCropConfig (line 38) | struct PickerCropConfig
type PickerResult (line 40) | struct PickerResult
type Presentation (line 42) | enum class Presentation
type ResultType (line 44) | enum class ResultType
type SelectBoxStyle (line 46) | enum class SelectBoxStyle
type SelectMode (line 48) | enum class SelectMode
type Text (line 50) | struct Text
type Theme (line 52) | enum class Theme
type margelo::nitro::multipleimagepicker (line 34) | namespace margelo::nitro::multipleimagepicker { struct NitroPreviewConfi...
type CameraDevice (line 12) | enum class CameraDevice
type CameraResult (line 14) | struct CameraResult
type CropRatio (line 16) | struct CropRatio
type CropResult (line 18) | struct CropResult
class HybridMultipleImagePickerSpec (line 20) | class HybridMultipleImagePickerSpec
type Language (line 22) | enum class Language
type MediaPreview (line 24) | struct MediaPreview
type MediaType (line 26) | enum class MediaType
type NitroCameraConfig (line 28) | struct NitroCameraConfig
type NitroConfig (line 30) | struct NitroConfig
type NitroCropConfig (line 32) | struct NitroCropConfig
type NitroPreviewConfig (line 34) | struct NitroPreviewConfig
type PickerCameraConfig (line 36) | struct PickerCameraConfig
type PickerCropConfig (line 38) | struct PickerCropConfig
type PickerResult (line 40) | struct PickerResult
type Presentation (line 42) | enum class Presentation
type ResultType (line 44) | enum class ResultType
type SelectBoxStyle (line 46) | enum class SelectBoxStyle
type SelectMode (line 48) | enum class SelectMode
type Text (line 50) | struct Text
type Theme (line 52) | enum class Theme
type margelo::nitro::multipleimagepicker (line 36) | namespace margelo::nitro::multipleimagepicker { struct PickerCameraConfi...
type CameraDevice (line 12) | enum class CameraDevice
type CameraResult (line 14) | struct CameraResult
type CropRatio (line 16) | struct CropRatio
type CropResult (line 18) | struct CropResult
class HybridMultipleImagePickerSpec (line 20) | class HybridMultipleImagePickerSpec
type Language (line 22) | enum class Language
type MediaPreview (line 24) | struct MediaPreview
type MediaType (line 26) | enum class MediaType
type NitroCameraConfig (line 28) | struct NitroCameraConfig
type NitroConfig (line 30) | struct NitroConfig
type NitroCropConfig (line 32) | struct NitroCropConfig
type NitroPreviewConfig (line 34) | struct NitroPreviewConfig
type PickerCameraConfig (line 36) | struct PickerCameraConfig
type PickerCropConfig (line 38) | struct PickerCropConfig
type PickerResult (line 40) | struct PickerResult
type Presentation (line 42) | enum class Presentation
type ResultType (line 44) | enum class ResultType
type SelectBoxStyle (line 46) | enum class SelectBoxStyle
type SelectMode (line 48) | enum class SelectMode
type Text (line 50) | struct Text
type Theme (line 52) | enum class Theme
type margelo::nitro::multipleimagepicker (line 38) | namespace margelo::nitro::multipleimagepicker { struct PickerCropConfig; }
type CameraDevice (line 12) | enum class CameraDevice
type CameraResult (line 14) | struct CameraResult
type CropRatio (line 16) | struct CropRatio
type CropResult (line 18) | struct CropResult
class HybridMultipleImagePickerSpec (line 20) | class HybridMultipleImagePickerSpec
type Language (line 22) | enum class Language
type MediaPreview (line 24) | struct MediaPreview
type MediaType (line 26) | enum class MediaType
type NitroCameraConfig (line 28) | struct NitroCameraConfig
type NitroConfig (line 30) | struct NitroConfig
type NitroCropConfig (line 32) | struct NitroCropConfig
type NitroPreviewConfig (line 34) | struct NitroPreviewConfig
type PickerCameraConfig (line 36) | struct PickerCameraConfig
type PickerCropConfig (line 38) | struct PickerCropConfig
type PickerResult (line 40) | struct PickerResult
type Presentation (line 42) | enum class Presentation
type ResultType (line 44) | enum class ResultType
type SelectBoxStyle (line 46) | enum class SelectBoxStyle
type SelectMode (line 48) | enum class SelectMode
type Text (line 50) | struct Text
type Theme (line 52) | enum class Theme
type margelo::nitro::multipleimagepicker (line 40) | namespace margelo::nitro::multipleimagepicker { struct PickerResult; }
type CameraDevice (line 12) | enum class CameraDevice
type CameraResult (line 14) | struct CameraResult
type CropRatio (line 16) | struct CropRatio
type CropResult (line 18) | struct CropResult
class HybridMultipleImagePickerSpec (line 20) | class HybridMultipleImagePickerSpec
type Language (line 22) | enum class Language
type MediaPreview (line 24) | struct MediaPreview
type MediaType (line 26) | enum class MediaType
type NitroCameraConfig (line 28) | struct NitroCameraConfig
type NitroConfig (line 30) | struct NitroConfig
type NitroCropConfig (line 32) | struct NitroCropConfig
type NitroPreviewConfig (line 34) | struct NitroPreviewConfig
type PickerCameraConfig (line 36) | struct PickerCameraConfig
type PickerCropConfig (line 38) | struct PickerCropConfig
type PickerResult (line 40) | struct PickerResult
type Presentation (line 42) | enum class Presentation
type ResultType (line 44) | enum class ResultType
type SelectBoxStyle (line 46) | enum class SelectBoxStyle
type SelectMode (line 48) | enum class SelectMode
type Text (line 50) | struct Text
type Theme (line 52) | enum class Theme
type margelo::nitro::multipleimagepicker (line 42) | namespace margelo::nitro::multipleimagepicker { enum class Presentation; }
type CameraDevice (line 12) | enum class CameraDevice
type CameraResult (line 14) | struct CameraResult
type CropRatio (line 16) | struct CropRatio
type CropResult (line 18) | struct CropResult
class HybridMultipleImagePickerSpec (line 20) | class HybridMultipleImagePickerSpec
type Language (line 22) | enum class Language
type MediaPreview (line 24) | struct MediaPreview
type MediaType (line 26) | enum class MediaType
type NitroCameraConfig (line 28) | struct NitroCameraConfig
type NitroConfig (line 30) | struct NitroConfig
type NitroCropConfig (line 32) | struct NitroCropConfig
type NitroPreviewConfig (line 34) | struct NitroPreviewConfig
type PickerCameraConfig (line 36) | struct PickerCameraConfig
type PickerCropConfig (line 38) | struct PickerCropConfig
type PickerResult (line 40) | struct PickerResult
type Presentation (line 42) | enum class Presentation
type ResultType (line 44) | enum class ResultType
type SelectBoxStyle (line 46) | enum class SelectBoxStyle
type SelectMode (line 48) | enum class SelectMode
type Text (line 50) | struct Text
type Theme (line 52) | enum class Theme
type margelo::nitro::multipleimagepicker (line 44) | namespace margelo::nitro::multipleimagepicker { enum class ResultType; }
type CameraDevice (line 12) | enum class CameraDevice
type CameraResult (line 14) | struct CameraResult
type CropRatio (line 16) | struct CropRatio
type CropResult (line 18) | struct CropResult
class HybridMultipleImagePickerSpec (line 20) | class HybridMultipleImagePickerSpec
type Language (line 22) | enum class Language
type MediaPreview (line 24) | struct MediaPreview
type MediaType (line 26) | enum class MediaType
type NitroCameraConfig (line 28) | struct NitroCameraConfig
type NitroConfig (line 30) | struct NitroConfig
type NitroCropConfig (line 32) | struct NitroCropConfig
type NitroPreviewConfig (line 34) | struct NitroPreviewConfig
type PickerCameraConfig (line 36) | struct PickerCameraConfig
type PickerCropConfig (line 38) | struct PickerCropConfig
type PickerResult (line 40) | struct PickerResult
type Presentation (line 42) | enum class Presentation
type ResultType (line 44) | enum class ResultType
type SelectBoxStyle (line 46) | enum class SelectBoxStyle
type SelectMode (line 48) | enum class SelectMode
type Text (line 50) | struct Text
type Theme (line 52) | enum class Theme
type margelo::nitro::multipleimagepicker (line 46) | namespace margelo::nitro::multipleimagepicker { enum class SelectBoxStyl...
type CameraDevice (line 12) | enum class CameraDevice
type CameraResult (line 14) | struct CameraResult
type CropRatio (line 16) | struct CropRatio
type CropResult (line 18) | struct CropResult
class HybridMultipleImagePickerSpec (line 20) | class HybridMultipleImagePickerSpec
type Language (line 22) | enum class Language
type MediaPreview (line 24) | struct MediaPreview
type MediaType (line 26) | enum class MediaType
type NitroCameraConfig (line 28) | struct NitroCameraConfig
type NitroConfig (line 30) | struct NitroConfig
type NitroCropConfig (line 32) | struct NitroCropConfig
type NitroPreviewConfig (line 34) | struct NitroPreviewConfig
type PickerCameraConfig (line 36) | struct PickerCameraConfig
type PickerCropConfig (line 38) | struct PickerCropConfig
type PickerResult (line 40) | struct PickerResult
type Presentation (line 42) | enum class Presentation
type ResultType (line 44) | enum class ResultType
type SelectBoxStyle (line 46) | enum class SelectBoxStyle
type SelectMode (line 48) | enum class SelectMode
type Text (line 50) | struct Text
type Theme (line 52) | enum class Theme
type margelo::nitro::multipleimagepicker (line 48) | namespace margelo::nitro::multipleimagepicker { enum class SelectMode; }
type CameraDevice (line 12) | enum class CameraDevice
type CameraResult (line 14) | struct CameraResult
type CropRatio (line 16) | struct CropRatio
type CropResult (line 18) | struct CropResult
class HybridMultipleImagePickerSpec (line 20) | class HybridMultipleImagePickerSpec
type Language (line 22) | enum class Language
type MediaPreview (line 24) | struct MediaPreview
type MediaType (line 26) | enum class MediaType
type NitroCameraConfig (line 28) | struct NitroCameraConfig
type NitroConfig (line 30) | struct NitroConfig
type NitroCropConfig (line 32) | struct NitroCropConfig
type NitroPreviewConfig (line 34) | struct NitroPreviewConfig
type PickerCameraConfig (line 36) | struct PickerCameraConfig
type PickerCropConfig (line 38) | struct PickerCropConfig
type PickerResult (line 40) | struct PickerResult
type Presentation (line 42) | enum class Presentation
type ResultType (line 44) | enum class ResultType
type SelectBoxStyle (line 46) | enum class SelectBoxStyle
type SelectMode (line 48) | enum class SelectMode
type Text (line 50) | struct Text
type Theme (line 52) | enum class Theme
type margelo::nitro::multipleimagepicker (line 50) | namespace margelo::nitro::multipleimagepicker { struct Text; }
type CameraDevice (line 12) | enum class CameraDevice
type CameraResult (line 14) | struct CameraResult
type CropRatio (line 16) | struct CropRatio
type CropResult (line 18) | struct CropResult
class HybridMultipleImagePickerSpec (line 20) | class HybridMultipleImagePickerSpec
type Language (line 22) | enum class Language
type MediaPreview (line 24) | struct MediaPreview
type MediaType (line 26) | enum class MediaType
type NitroCameraConfig (line 28) | struct NitroCameraConfig
type NitroConfig (line 30) | struct NitroConfig
type NitroCropConfig (line 32) | struct NitroCropConfig
type NitroPreviewConfig (line 34) | struct NitroPreviewConfig
type PickerCameraConfig (line 36) | struct PickerCameraConfig
type PickerCropConfig (line 38) | struct PickerCropConfig
type PickerResult (line 40) | struct PickerResult
type Presentation (line 42) | enum class Presentation
type ResultType (line 44) | enum class ResultType
type SelectBoxStyle (line 46) | enum class SelectBoxStyle
type SelectMode (line 48) | enum class SelectMode
type Text (line 50) | struct Text
type Theme (line 52) | enum class Theme
type margelo::nitro::multipleimagepicker (line 52) | namespace margelo::nitro::multipleimagepicker { enum class Theme; }
type CameraDevice (line 12) | enum class CameraDevice
type CameraResult (line 14) | struct CameraResult
type CropRatio (line 16) | struct CropRatio
type CropResult (line 18) | struct CropResult
class HybridMultipleImagePickerSpec (line 20) | class HybridMultipleImagePickerSpec
type Language (line 22) | enum class Language
type MediaPreview (line 24) | struct MediaPreview
type MediaType (line 26) | enum class MediaType
type NitroCameraConfig (line 28) | struct NitroCameraConfig
type NitroConfig (line 30) | struct NitroConfig
type NitroCropConfig (line 32) | struct NitroCropConfig
type NitroPreviewConfig (line 34) | struct NitroPreviewConfig
type PickerCameraConfig (line 36) | struct PickerCameraConfig
type PickerCropConfig (line 38) | struct PickerCropConfig
type PickerResult (line 40) | struct PickerResult
type Presentation (line 42) | enum class Presentation
type ResultType (line 44) | enum class ResultType
type SelectBoxStyle (line 46) | enum class SelectBoxStyle
type SelectMode (line 48) | enum class SelectMode
type Text (line 50) | struct Text
type Theme (line 52) | enum class Theme
type MultipleImagePicker (line 94) | namespace MultipleImagePicker { class HybridMultipleImagePickerSpec_cxx; }
class HybridMultipleImagePickerSpec_cxx (line 94) | class HybridMultipleImagePickerSpec_cxx
FILE: nitrogen/generated/ios/c++/HybridMultipleImagePickerSpecSwift.cpp
type margelo::nitro::multipleimagepicker (line 10) | namespace margelo::nitro::multipleimagepicker {
FILE: nitrogen/generated/ios/c++/HybridMultipleImagePickerSpecSwift.hpp
type MultipleImagePicker (line 13) | namespace MultipleImagePicker { class HybridMultipleImagePickerSpec_cxx; }
class HybridMultipleImagePickerSpec_cxx (line 13) | class HybridMultipleImagePickerSpec_cxx
type margelo::nitro::multipleimagepicker (line 16) | namespace margelo::nitro::multipleimagepicker { struct NitroConfig; }
type NitroConfig (line 16) | struct NitroConfig
type MediaType (line 18) | enum class MediaType
type PickerResult (line 20) | struct PickerResult
type ResultType (line 22) | enum class ResultType
type SelectBoxStyle (line 24) | enum class SelectBoxStyle
type SelectMode (line 26) | enum class SelectMode
type PickerCropConfig (line 28) | struct PickerCropConfig
type CropRatio (line 30) | struct CropRatio
type Text (line 32) | struct Text
type Language (line 34) | enum class Language
type Theme (line 36) | enum class Theme
type Presentation (line 38) | enum class Presentation
type PickerCameraConfig (line 40) | struct PickerCameraConfig
type CameraDevice (line 42) | enum class CameraDevice
type NitroCropConfig (line 44) | struct NitroCropConfig
type CropResult (line 46) | struct CropResult
type MediaPreview (line 48) | struct MediaPreview
type NitroPreviewConfig (line 50) | struct NitroPreviewConfig
type NitroCameraConfig (line 52) | struct NitroCameraConfig
type CameraResult (line 54) | struct CameraResult
class HybridMultipleImagePickerSpecSwift (line 95) | class HybridMultipleImagePickerSpecSwift: public virtual HybridMultipl...
method HybridMultipleImagePickerSpecSwift (line 98) | explicit HybridMultipleImagePickerSpecSwift(const MultipleImagePicke...
method getExternalMemorySize (line 110) | inline size_t getExternalMemorySize() noexcept override {
method openPicker (line 120) | inline void openPicker(const NitroConfig& config, const std::functio...
method openCrop (line 126) | inline void openCrop(const std::string& image, const NitroCropConfig...
method openPreview (line 132) | inline void openPreview(const std::vector<MediaPreview>& media, doub...
method openCamera (line 138) | inline void openCamera(const NitroCameraConfig& config, const std::f...
type margelo::nitro::multipleimagepicker (line 18) | namespace margelo::nitro::multipleimagepicker { enum class MediaType; }
type NitroConfig (line 16) | struct NitroConfig
type MediaType (line 18) | enum class MediaType
type PickerResult (line 20) | struct PickerResult
type ResultType (line 22) | enum class ResultType
type SelectBoxStyle (line 24) | enum class SelectBoxStyle
type SelectMode (line 26) | enum class SelectMode
type PickerCropConfig (line 28) | struct PickerCropConfig
type CropRatio (line 30) | struct CropRatio
type Text (line 32) | struct Text
type Language (line 34) | enum class Language
type Theme (line 36) | enum class Theme
type Presentation (line 38) | enum class Presentation
type PickerCameraConfig (line 40) | struct PickerCameraConfig
type CameraDevice (line 42) | enum class CameraDevice
type NitroCropConfig (line 44) | struct NitroCropConfig
type CropResult (line 46) | struct CropResult
type MediaPreview (line 48) | struct MediaPreview
type NitroPreviewConfig (line 50) | struct NitroPreviewConfig
type NitroCameraConfig (line 52) | struct NitroCameraConfig
type CameraResult (line 54) | struct CameraResult
class HybridMultipleImagePickerSpecSwift (line 95) | class HybridMultipleImagePickerSpecSwift: public virtual HybridMultipl...
method HybridMultipleImagePickerSpecSwift (line 98) | explicit HybridMultipleImagePickerSpecSwift(const MultipleImagePicke...
method getExternalMemorySize (line 110) | inline size_t getExternalMemorySize() noexcept override {
method openPicker (line 120) | inline void openPicker(const NitroConfig& config, const std::functio...
method openCrop (line 126) | inline void openCrop(const std::string& image, const NitroCropConfig...
method openPreview (line 132) | inline void openPreview(const std::vector<MediaPreview>& media, doub...
method openCamera (line 138) | inline void openCamera(const NitroCameraConfig& config, const std::f...
type margelo::nitro::multipleimagepicker (line 20) | namespace margelo::nitro::multipleimagepicker { struct PickerResult; }
type NitroConfig (line 16) | struct NitroConfig
type MediaType (line 18) | enum class MediaType
type PickerResult (line 20) | struct PickerResult
type ResultType (line 22) | enum class ResultType
type SelectBoxStyle (line 24) | enum class SelectBoxStyle
type SelectMode (line 26) | enum class SelectMode
type PickerCropConfig (line 28) | struct PickerCropConfig
type CropRatio (line 30) | struct CropRatio
type Text (line 32) | struct Text
type Language (line 34) | enum class Language
type Theme (line 36) | enum class Theme
type Presentation (line 38) | enum class Presentation
type PickerCameraConfig (line 40) | struct PickerCameraConfig
type CameraDevice (line 42) | enum class CameraDevice
type NitroCropConfig (line 44) | struct NitroCropConfig
type CropResult (line 46) | struct CropResult
type MediaPreview (line 48) | struct MediaPreview
type NitroPreviewConfig (line 50) | struct NitroPreviewConfig
type NitroCameraConfig (line 52) | struct NitroCameraConfig
type CameraResult (line 54) | struct CameraResult
class HybridMultipleImagePickerSpecSwift (line 95) | class HybridMultipleImagePickerSpecSwift: public virtual HybridMultipl...
method HybridMultipleImagePickerSpecSwift (line 98) | explicit HybridMultipleImagePickerSpecSwift(const MultipleImagePicke...
method getExternalMemorySize (line 110) | inline size_t getExternalMemorySize() noexcept override {
method openPicker (line 120) | inline void openPicker(const NitroConfig& config, const std::functio...
method openCrop (line 126) | inline void openCrop(const std::string& image, const NitroCropConfig...
method openPreview (line 132) | inline void openPreview(const std::vector<MediaPreview>& media, doub...
method openCamera (line 138) | inline void openCamera(const NitroCameraConfig& config, const std::f...
type margelo::nitro::multipleimagepicker (line 22) | namespace margelo::nitro::multipleimagepicker { enum class ResultType; }
type NitroConfig (line 16) | struct NitroConfig
type MediaType (line 18) | enum class MediaType
type PickerResult (line 20) | struct PickerResult
type ResultType (line 22) | enum class ResultType
type SelectBoxStyle (line 24) | enum class SelectBoxStyle
type SelectMode (line 26) | enum class SelectMode
type PickerCropConfig (line 28) | struct PickerCropConfig
type CropRatio (line 30) | struct CropRatio
type Text (line 32) | struct Text
type Language (line 34) | enum class Language
type Theme (line 36) | enum class Theme
type Presentation (line 38) | enum class Presentation
type PickerCameraConfig (line 40) | struct PickerCameraConfig
type CameraDevice (line 42) | enum class CameraDevice
type NitroCropConfig (line 44) | struct NitroCropConfig
type CropResult (line 46) | struct CropResult
type MediaPreview (line 48) | struct MediaPreview
type NitroPreviewConfig (line 50) | struct NitroPreviewConfig
type NitroCameraConfig (line 52) | struct NitroCameraConfig
type CameraResult (line 54) | struct CameraResult
class HybridMultipleImagePickerSpecSwift (line 95) | class HybridMultipleImagePickerSpecSwift: public virtual HybridMultipl...
method HybridMultipleImagePickerSpecSwift (line 98) | explicit HybridMultipleImagePickerSpecSwift(const MultipleImagePicke...
method getExternalMemorySize (line 110) | inline size_t getExternalMemorySize() noexcept override {
method openPicker (line 120) | inline void openPicker(const NitroConfig& config, const std::functio...
method openCrop (line 126) | inline void openCrop(const std::string& image, const NitroCropConfig...
method openPreview (line 132) | inline void openPreview(const std::vector<MediaPreview>& media, doub...
method openCamera (line 138) | inline void openCamera(const NitroCameraConfig& config, const std::f...
type margelo::nitro::multipleimagepicker (line 24) | namespace margelo::nitro::multipleimagepicker { enum class SelectBoxStyl...
type NitroConfig (line 16) | struct NitroConfig
type MediaType (line 18) | enum class MediaType
type PickerResult (line 20) | struct PickerResult
type ResultType (line 22) | enum class ResultType
type SelectBoxStyle (line 24) | enum class SelectBoxStyle
type SelectMode (line 26) | enum class SelectMode
type PickerCropConfig (line 28) | struct PickerCropConfig
type CropRatio (line 30) | struct CropRatio
type Text (line 32) | struct Text
type Language (line 34) | enum class Language
type Theme (line 36) | enum class Theme
type Presentation (line 38) | enum class Presentation
type PickerCameraConfig (line 40) | struct PickerCameraConfig
type CameraDevice (line 42) | enum class CameraDevice
type NitroCropConfig (line 44) | struct NitroCropConfig
type CropResult (line 46) | struct CropResult
type MediaPreview (line 48) | struct MediaPreview
type NitroPreviewConfig (line 50) | struct NitroPreviewConfig
type NitroCameraConfig (line 52) | struct NitroCameraConfig
type CameraResult (line 54) | struct CameraResult
class HybridMultipleImagePickerSpecSwift (line 95) | class HybridMultipleImagePickerSpecSwift: public virtual HybridMultipl...
method HybridMultipleImagePickerSpecSwift (line 98) | explicit HybridMultipleImagePickerSpecSwift(const MultipleImagePicke...
method getExternalMemorySize (line 110) | inline size_t getExternalMemorySize() noexcept override {
method openPicker (line 120) | inline void openPicker(const NitroConfig& config, const std::functio...
method openCrop (line 126) | inline void openCrop(const std::string& image, const NitroCropConfig...
method openPreview (line 132) | inline void openPreview(const std::vector<MediaPreview>& media, doub...
method openCamera (line 138) | inline void openCamera(const NitroCameraConfig& config, const std::f...
type margelo::nitro::multipleimagepicker (line 26) | namespace margelo::nitro::multipleimagepicker { enum class SelectMode; }
type NitroConfig (line 16) | struct NitroConfig
type MediaType (line 18) | enum class MediaType
type PickerResult (line 20) | struct PickerResult
type ResultType (line 22) | enum class ResultType
type SelectBoxStyle (line 24) | enum class SelectBoxStyle
type SelectMode (line 26) | enum class SelectMode
type PickerCropConfig (line 28) | struct PickerCropConfig
type CropRatio (line 30) | struct CropRatio
type Text (line 32) | struct Text
type Language (line 34) | enum class Language
type Theme (line 36) | enum class Theme
type Presentation (line 38) | enum class Presentation
type PickerCameraConfig (line 40) | struct PickerCameraConfig
type CameraDevice (line 42) | enum class CameraDevice
type NitroCropConfig (line 44) | struct NitroCropConfig
type CropResult (line 46) | struct CropResult
type MediaPreview (line 48) | struct MediaPreview
type NitroPreviewConfig (line 50) | struct NitroPreviewConfig
type NitroCameraConfig (line 52) | struct NitroCameraConfig
type CameraResult (line 54) | struct CameraResult
class HybridMultipleImagePickerSpecSwift (line 95) | class HybridMultipleImagePickerSpecSwift: public virtual HybridMultipl...
method HybridMultipleImagePickerSpecSwift (line 98) | explicit HybridMultipleImagePickerSpecSwift(const MultipleImagePicke...
method getExternalMemorySize (line 110) | inline size_t getExternalMemorySize() noexcept override {
method openPicker (line 120) | inline void openPicker(const NitroConfig& config, const std::functio...
method openCrop (line 126) | inline void openCrop(const std::string& image, const NitroCropConfig...
method openPreview (line 132) | inline void openPreview(const std::vector<MediaPreview>& media, doub...
method openCamera (line 138) | inline void openCamera(const NitroCameraConfig& config, const std::f...
type margelo::nitro::multipleimagepicker (line 28) | namespace margelo::nitro::multipleimagepicker { struct PickerCropConfig; }
type NitroConfig (line 16) | struct NitroConfig
type MediaType (line 18) | enum class MediaType
type PickerResult (line 20) | struct PickerResult
type ResultType (line 22) | enum class ResultType
type SelectBoxStyle (line 24) | enum class SelectBoxStyle
type SelectMode (line 26) | enum class SelectMode
type PickerCropConfig (line 28) | struct PickerCropConfig
type CropRatio (line 30) | struct CropRatio
type Text (line 32) | struct Text
type Language (line 34) | enum class Language
type Theme (line 36) | enum class Theme
type Presentation (line 38) | enum class Presentation
type PickerCameraConfig (line 40) | struct PickerCameraConfig
type CameraDevice (line 42) | enum class CameraDevice
type NitroCropConfig (line 44) | struct NitroCropConfig
type CropResult (line 46) | struct CropResult
type MediaPreview (line 48) | struct MediaPreview
type NitroPreviewConfig (line 50) | struct NitroPreviewConfig
type NitroCameraConfig (line 52) | struct NitroCameraConfig
type CameraResult (line 54) | struct CameraResult
class HybridMultipleImagePickerSpecSwift (line 95) | class HybridMultipleImagePickerSpecSwift: public virtual HybridMultipl...
method HybridMultipleImagePickerSpecSwift (line 98) | explicit HybridMultipleImagePickerSpecSwift(const MultipleImagePicke...
method getExternalMemorySize (line 110) | inline size_t getExternalMemorySize() noexcept override {
method openPicker (line 120) | inline void openPicker(const NitroConfig& config, const std::functio...
method openCrop (line 126) | inline void openCrop(const std::string& image, const NitroCropConfig...
method openPreview (line 132) | inline void openPreview(const std::vector<MediaPreview>& media, doub...
method openCamera (line 138) | inline void openCamera(const NitroCameraConfig& config, const std::f...
type margelo::nitro::multipleimagepicker (line 30) | namespace margelo::nitro::multipleimagepicker { struct CropRatio; }
type NitroConfig (line 16) | struct NitroConfig
type MediaType (line 18) | enum class MediaType
type PickerResult (line 20) | struct PickerResult
type ResultType (line 22) | enum class ResultType
type SelectBoxStyle (line 24) | enum class SelectBoxStyle
type SelectMode (line 26) | enum class SelectMode
type PickerCropConfig (line 28) | struct PickerCropConfig
type CropRatio (line 30) | struct CropRatio
type Text (line 32) | struct Text
type Language (line 34) | enum class Language
type Theme (line 36) | enum class Theme
type Presentation (line 38) | enum class Presentation
type PickerCameraConfig (line 40) | struct PickerCameraConfig
type CameraDevice (line 42) | enum class CameraDevice
type NitroCropConfig (line 44) | struct NitroCropConfig
type CropResult (line 46) | struct CropResult
type MediaPreview (line 48) | struct MediaPreview
type NitroPreviewConfig (line 50) | struct NitroPreviewConfig
type NitroCameraConfig (line 52) | struct NitroCameraConfig
type CameraResult (line 54) | struct CameraResult
class HybridMultipleImagePickerSpecSwift (line 95) | class HybridMultipleImagePickerSpecSwift: public virtual HybridMultipl...
method HybridMultipleImagePickerSpecSwift (line 98) | explicit HybridMultipleImagePickerSpecSwift(const MultipleImagePicke...
method getExternalMemorySize (line 110) | inline size_t getExternalMemorySize() noexcept override {
method openPicker (line 120) | inline void openPicker(const NitroConfig& config, const std::functio...
method openCrop (line 126) | inline void openCrop(const std::string& image, const NitroCropConfig...
method openPreview (line 132) | inline void openPreview(const std::vector<MediaPreview>& media, doub...
method openCamera (line 138) | inline void openCamera(const NitroCameraConfig& config, const std::f...
type margelo::nitro::multipleimagepicker (line 32) | namespace margelo::nitro::multipleimagepicker { struct Text; }
type NitroConfig (line 16) | struct NitroConfig
type MediaType (line 18) | enum class MediaType
type PickerResult (line 20) | struct PickerResult
type ResultType (line 22) | enum class ResultType
type SelectBoxStyle (line 24) | enum class SelectBoxStyle
type SelectMode (line 26) | enum class SelectMode
type PickerCropConfig (line 28) | struct PickerCropConfig
type CropRatio (line 30) | struct CropRatio
type Text (line 32) | struct Text
type Language (line 34) | enum class Language
type Theme (line 36) | enum class Theme
type Presentation (line 38) | enum class Presentation
type PickerCameraConfig (line 40) | struct PickerCameraConfig
type CameraDevice (line 42) | enum class CameraDevice
type NitroCropConfig (line 44) | struct NitroCropConfig
type CropResult (line 46) | struct CropResult
type MediaPreview (line 48) | struct MediaPreview
type NitroPreviewConfig (line 50) | struct NitroPreviewConfig
type NitroCameraConfig (line 52) | struct NitroCameraConfig
type CameraResult (line 54) | struct CameraResult
class HybridMultipleImagePickerSpecSwift (line 95) | class HybridMultipleImagePickerSpecSwift: public virtual HybridMultipl...
method HybridMultipleImagePickerSpecSwift (line 98) | explicit HybridMultipleImagePickerSpecSwift(const MultipleImagePicke...
method getExternalMemorySize (line 110) | inline size_t getExternalMemorySize() noexcept override {
method openPicker (line 120) | inline void openPicker(const NitroConfig& config, const std::functio...
method openCrop (line 126) | inline void openCrop(const std::string& image, const NitroCropConfig...
method openPreview (line 132) | inline void openPreview(const std::vector<MediaPreview>& media, doub...
method openCamera (line 138) | inline void openCamera(const NitroCameraConfig& config, const std::f...
type margelo::nitro::multipleimagepicker (line 34) | namespace margelo::nitro::multipleimagepicker { enum class Language; }
type NitroConfig (line 16) | struct NitroConfig
type MediaType (line 18) | enum class MediaType
type PickerResult (line 20) | struct PickerResult
type ResultType (line 22) | enum class ResultType
type SelectBoxStyle (line 24) | enum class SelectBoxStyle
type SelectMode (line 26) | enum class SelectMode
type PickerCropConfig (line 28) | struct PickerCropConfig
type CropRatio (line 30) | struct CropRatio
type Text (line 32) | struct Text
type Language (line 34) | enum class Language
type Theme (line 36) | enum class Theme
type Presentation (line 38) | enum class Presentation
type PickerCameraConfig (line 40) | struct PickerCameraConfig
type CameraDevice (line 42) | enum class CameraDevice
type NitroCropConfig (line 44) | struct NitroCropConfig
type CropResult (line 46) | struct CropResult
type MediaPreview (line 48) | struct MediaPreview
type NitroPreviewConfig (line 50) | struct NitroPreviewConfig
type NitroCameraConfig (line 52) | struct NitroCameraConfig
type CameraResult (line 54) | struct CameraResult
class HybridMultipleImagePickerSpecSwift (line 95) | class HybridMultipleImagePickerSpecSwift: public virtual HybridMultipl...
method HybridMultipleImagePickerSpecSwift (line 98) | explicit HybridMultipleImagePickerSpecSwift(const MultipleImagePicke...
method getExternalMemorySize (line 110) | inline size_t getExternalMemorySize() noexcept override {
method openPicker (line 120) | inline void openPicker(const NitroConfig& config, const std::functio...
method openCrop (line 126) | inline void openCrop(const std::string& image, const NitroCropConfig...
method openPreview (line 132) | inline void openPreview(const std::vector<MediaPreview>& media, doub...
method openCamera (line 138) | inline void openCamera(const NitroCameraConfig& config, const std::f...
type margelo::nitro::multipleimagepicker (line 36) | namespace margelo::nitro::multipleimagepicker { enum class Theme; }
type NitroConfig (line 16) | struct NitroConfig
type MediaType (line 18) | enum class MediaType
type PickerResult (line 20) | struct PickerResult
type ResultType (line 22) | enum class ResultType
type SelectBoxStyle (line 24) | enum class SelectBoxStyle
type SelectMode (line 26) | enum class SelectMode
type PickerCropConfig (line 28) | struct PickerCropConfig
type CropRatio (line 30) | struct CropRatio
type Text (line 32) | struct Text
type Language (line 34) | enum class Language
type Theme (line 36) | enum class Theme
type Presentation (line 38) | enum class Presentation
type PickerCameraConfig (line 40) | struct PickerCameraConfig
type CameraDevice (line 42) | enum class CameraDevice
type NitroCropConfig (line 44) | struct NitroCropConfig
type CropResult (line 46) | struct CropResult
type MediaPreview (line 48) | struct MediaPreview
type NitroPreviewConfig (line 50) | struct NitroPreviewConfig
type NitroCameraConfig (line 52) | struct NitroCameraConfig
type CameraResult (line 54) | struct CameraResult
class HybridMultipleImagePickerSpecSwift (line 95) | class HybridMultipleImagePickerSpecSwift: public virtual HybridMultipl...
method HybridMultipleImagePickerSpecSwift (line 98) | explicit HybridMultipleImagePickerSpecSwift(const MultipleImagePicke...
method getExternalMemorySize (line 110) | inline size_t getExternalMemorySize() noexcept override {
method openPicker (line 120) | inline void openPicker(const NitroConfig& config, const std::functio...
method openCrop (line 126) | inline void openCrop(const std::string& image, const NitroCropConfig...
method openPreview (line 132) | inline void openPreview(const std::vector<MediaPreview>& media, doub...
method openCamera (line 138) | inline void openCamera(const NitroCameraConfig& config, const std::f...
type margelo::nitro::multipleimagepicker (line 38) | namespace margelo::nitro::multipleimagepicker { enum class Presentation; }
type NitroConfig (line 16) | struct NitroConfig
type MediaType (line 18) | enum class MediaType
type PickerResult (line 20) | struct PickerResult
type ResultType (line 22) | enum class ResultType
type SelectBoxStyle (line 24) | enum class SelectBoxStyle
type SelectMode (line 26) | enum class SelectMode
type PickerCropConfig (line 28) | struct PickerCropConfig
type CropRatio (line 30) | struct CropRatio
type Text (line 32) | struct Text
type Language (line 34) | enum class Language
type Theme (line 36) | enum class Theme
type Presentation (line 38) | enum class Presentation
type PickerCameraConfig (line 40) | struct PickerCameraConfig
type CameraDevice (line 42) | enum class CameraDevice
type NitroCropConfig (line 44) | struct NitroCropConfig
type CropResult (line 46) | struct CropResult
type MediaPreview (line 48) | struct MediaPreview
type NitroPreviewConfig (line 50) | struct NitroPreviewConfig
type NitroCameraConfig (line 52) | struct NitroCameraConfig
type CameraResult (line 54) | struct CameraResult
class HybridMultipleImagePickerSpecSwift (line 95) | class HybridMultipleImagePickerSpecSwift: public virtual HybridMultipl...
method HybridMultipleImagePickerSpecSwift (line 98) | explicit HybridMultipleImagePickerSpecSwift(const MultipleImagePicke...
method getExternalMemorySize (line 110) | inline size_t getExternalMemorySize() noexcept override {
method openPicker (line 120) | inline void openPicker(const NitroConfig& config, const std::functio...
method openCrop (line 126) | inline void openCrop(const std::string& image, const NitroCropConfig...
method openPreview (line 132) | inline void openPreview(const std::vector<MediaPreview>& media, doub...
method openCamera (line 138) | inline void openCamera(const NitroCameraConfig& config, const std::f...
type margelo::nitro::multipleimagepicker (line 40) | namespace margelo::nitro::multipleimagepicker { struct PickerCameraConfi...
type NitroConfig (line 16) | struct NitroConfig
type MediaType (line 18) | enum class MediaType
type PickerResult (line 20) | struct PickerResult
type ResultType (line 22) | enum class ResultType
type SelectBoxStyle (line 24) | enum class SelectBoxStyle
type SelectMode (line 26) | enum class SelectMode
type PickerCropConfig (line 28) | struct PickerCropConfig
type CropRatio (line 30) | struct CropRatio
type Text (line 32) | struct Text
type Language (line 34) | enum class Language
type Theme (line 36) | enum class Theme
type Presentation (line 38) | enum class Presentation
type PickerCameraConfig (line 40) | struct PickerCameraConfig
type CameraDevice (line 42) | enum class CameraDevice
type NitroCropConfig (line 44) | struct NitroCropConfig
type CropResult (line 46) | struct CropResult
type MediaPreview (line 48) | struct MediaPreview
type NitroPreviewConfig (line 50) | struct NitroPreviewConfig
type NitroCameraConfig (line 52) | struct NitroCameraConfig
type CameraResult (line 54) | struct CameraResult
class HybridMultipleImagePickerSpecSwift (line 95) | class HybridMultipleImagePickerSpecSwift: public virtual HybridMultipl...
method HybridMultipleImagePickerSpecSwift (line 98) | explicit HybridMultipleImagePickerSpecSwift(const MultipleImagePicke...
method getExternalMemorySize (line 110) | inline size_t getExternalMemorySize() noexcept override {
method openPicker (line 120) | inline void openPicker(const NitroConfig& config, const std::functio...
method openCrop (line 126) | inline void openCrop(const std::string& image, const NitroCropConfig...
method openPreview (line 132) | inline void openPreview(const std::vector<MediaPreview>& media, doub...
method openCamera (line 138) | inline void openCamera(const NitroCameraConfig& config, const std::f...
type margelo::nitro::multipleimagepicker (line 42) | namespace margelo::nitro::multipleimagepicker { enum class CameraDevice; }
type NitroConfig (line 16) | struct NitroConfig
type MediaType (line 18) | enum class MediaType
type PickerResult (line 20) | struct PickerResult
type ResultType (line 22) | enum class ResultType
type SelectBoxStyle (line 24) | enum class SelectBoxStyle
type SelectMode (line 26) | enum class SelectMode
type PickerCropConfig (line 28) | struct PickerCropConfig
type CropRatio (line 30) | struct CropRatio
type Text (line 32) | struct Text
type Language (line 34) | enum class Language
type Theme (line 36) | enum class Theme
type Presentation (line 38) | enum class Presentation
type PickerCameraConfig (line 40) | struct PickerCameraConfig
type CameraDevice (line 42) | enum class CameraDevice
type NitroCropConfig (line 44) | struct NitroCropConfig
type CropResult (line 46) | struct CropResult
type MediaPreview (line 48) | struct MediaPreview
type NitroPreviewConfig (line 50) | struct NitroPreviewConfig
type NitroCameraConfig (line 52) | struct NitroCameraConfig
type CameraResult (line 54) | struct CameraResult
class HybridMultipleImagePickerSpecSwift (line 95) | class HybridMultipleImagePickerSpecSwift: public virtual HybridMultipl...
method HybridMultipleImagePickerSpecSwift (line 98) | explicit HybridMultipleImagePickerSpecSwift(const MultipleImagePicke...
method getExternalMemorySize (line 110) | inline size_t getExternalMemorySize() noexcept override {
method openPicker (line 120) | inline void openPicker(const NitroConfig& config, const std::functio...
method openCrop (line 126) | inline void openCrop(const std::string& image, const NitroCropConfig...
method openPreview (line 132) | inline void openPreview(const std::vector<MediaPreview>& media, doub...
method openCamera (line 138) | inline void openCamera(const NitroCameraConfig& config, const std::f...
type margelo::nitro::multipleimagepicker (line 44) | namespace margelo::nitro::multipleimagepicker { struct NitroCropConfig; }
type NitroConfig (line 16) | struct NitroConfig
type MediaType (line 18) | enum class MediaType
type PickerResult (line 20) | struct PickerResult
type ResultType (line 22) | enum class ResultType
type SelectBoxStyle (line 24) | enum class SelectBoxStyle
type SelectMode (line 26) | enum class SelectMode
type PickerCropConfig (line 28) | struct PickerCropConfig
type CropRatio (line 30) | struct CropRatio
type Text (line 32) | struct Text
type Language (line 34) | enum class Language
type Theme (line 36) | enum class Theme
type Presentation (line 38) | enum class Presentation
type PickerCameraConfig (line 40) | struct PickerCameraConfig
type CameraDevice (line 42) | enum class CameraDevice
type NitroCropConfig (line 44) | struct NitroCropConfig
type CropResult (line 46) | struct CropResult
type MediaPreview (line 48) | struct MediaPreview
type NitroPreviewConfig (line 50) | struct NitroPreviewConfig
type NitroCameraConfig (line 52) | struct NitroCameraConfig
type CameraResult (line 54) | struct CameraResult
class HybridMultipleImagePickerSpecSwift (line 95) | class HybridMultipleImagePickerSpecSwift: public virtual HybridMultipl...
method HybridMultipleImagePickerSpecSwift (line 98) | explicit HybridMultipleImagePickerSpecSwift(const MultipleImagePicke...
method getExternalMemorySize (line 110) | inline size_t getExternalMemorySize() noexcept override {
method openPicker (line 120) | inline void openPicker(const NitroConfig& config, const std::functio...
method openCrop (line 126) | inline void openCrop(const std::string& image, const NitroCropConfig...
method openPreview (line 132) | inline void openPreview(const std::vector<MediaPreview>& media, doub...
method openCamera (line 138) | inline void openCamera(const NitroCameraConfig& config, const std::f...
type margelo::nitro::multipleimagepicker (line 46) | namespace margelo::nitro::multipleimagepicker { struct CropResult; }
type NitroConfig (line 16) | struct NitroConfig
type MediaType (line 18) | enum class MediaType
type PickerResult (line 20) | struct PickerResult
type ResultType (line 22) | enum class ResultType
type SelectBoxStyle (line 24) | enum class SelectBoxStyle
type SelectMode (line 26) | enum class SelectMode
type PickerCropConfig (line 28) | struct PickerCropConfig
type CropRatio (line 30) | struct CropRatio
type Text (line 32) | struct Text
type Language (line 34) | enum class Language
type Theme (line 36) | enum class Theme
type Presentation (line 38) | enum class Presentation
type PickerCameraConfig (line 40) | struct PickerCameraConfig
type CameraDevice (line 42) | enum class CameraDevice
type NitroCropConfig (line 44) | struct NitroCropConfig
type CropResult (line 46) | struct CropResult
type MediaPreview (line 48) | struct MediaPreview
type NitroPreviewConfig (line 50) | struct NitroPreviewConfig
type NitroCameraConfig (line 52) | struct NitroCameraConfig
type CameraResult (line 54) | struct CameraResult
class HybridMultipleImagePickerSpecSwift (line 95) | class HybridMultipleImagePickerSpecSwift: public virtual HybridMultipl...
method HybridMultipleImagePickerSpecSwift (line 98) | explicit HybridMultipleImagePickerSpecSwift(const MultipleImagePicke...
method getExternalMemorySize (line 110) | inline size_t getExternalMemorySize() noexcept override {
method openPicker (line 120) | inline void openPicker(const NitroConfig& config, const std::functio...
method openCrop (line 126) | inline void openCrop(const std::string& image, const NitroCropConfig...
method openPreview (line 132) | inline void openPreview(const std::vector<MediaPreview>& media, doub...
method openCamera (line 138) | inline void openCamera(const NitroCameraConfig& config, const std::f...
type margelo::nitro::multipleimagepicker (line 48) | namespace margelo::nitro::multipleimagepicker { struct MediaPreview; }
type NitroConfig (line 16) | struct NitroConfig
type MediaType (line 18) | enum class MediaType
type PickerResult (line 20) | struct PickerResult
type ResultType (line 22) | enum class ResultType
type SelectBoxStyle (line 24) | enum class SelectBoxStyle
type SelectMode (line 26) | enum class SelectMode
type PickerCropConfig (line 28) | struct PickerCropConfig
type CropRatio (line 30) | struct CropRatio
type Text (line 32) | struct Text
type Language (line 34) | enum class Language
type Theme (line 36) | enum class Theme
type Presentation (line 38) | enum class Presentation
type PickerCameraConfig (line 40) | struct PickerCameraConfig
type CameraDevice (line 42) | enum class CameraDevice
type NitroCropConfig (line 44) | struct NitroCropConfig
type CropResult (line 46) | struct CropResult
type MediaPreview (line 48) | struct MediaPreview
type NitroPreviewConfig (line 50) | struct NitroPreviewConfig
type NitroCameraConfig (line 52) | struct NitroCameraConfig
type CameraResult (line 54) | struct CameraResult
class HybridMultipleImagePickerSpecSwift (line 95) | class HybridMultipleImagePickerSpecSwift: public virtual HybridMultipl...
method HybridMultipleImagePickerSpecSwift (line 98) | explicit HybridMultipleImagePickerSpecSwift(const MultipleImagePicke...
method getExternalMemorySize (line 110) | inline size_t getExternalMemorySize() noexcept override {
method openPicker (line 120) | inline void openPicker(const NitroConfig& config, const std::functio...
method openCrop (line 126) | inline void openCrop(const std::string& image, const NitroCropConfig...
method openPreview (line 132) | inline void openPreview(const std::vector<MediaPreview>& media, doub...
method openCamera (line 138) | inline void openCamera(const NitroCameraConfig& config, const std::f...
type margelo::nitro::multipleimagepicker (line 50) | namespace margelo::nitro::multipleimagepicker { struct NitroPreviewConfi...
type NitroConfig (line 16) | struct NitroConfig
type MediaType (line 18) | enum class MediaType
type PickerResult (line 20) | struct PickerResult
type ResultType (line 22) | enum class ResultType
type SelectBoxStyle (line 24) | enum class SelectBoxStyle
type SelectMode (line 26) | enum class SelectMode
type PickerCropConfig (line 28) | struct PickerCropConfig
type CropRatio (line 30) | struct CropRatio
type Text (line 32) | struct Text
type Language (line 34) | enum class Language
type Theme (line 36) | enum class Theme
type Presentation (line 38) | enum class Presentation
type PickerCameraConfig (line 40) | struct PickerCameraConfig
type CameraDevice (line 42) | enum class CameraDevice
type NitroCropConfig (line 44) | struct NitroCropConfig
type CropResult (line 46) | struct CropResult
type MediaPreview (line 48) | struct MediaPreview
type NitroPreviewConfig (line 50) | struct NitroPreviewConfig
type NitroCameraConfig (line 52) | struct NitroCameraConfig
type CameraResult (line 54) | struct CameraResult
class HybridMultipleImagePickerSpecSwift (line 95) | class HybridMultipleImagePickerSpecSwift: public virtual HybridMultipl...
method HybridMultipleImagePickerSpecSwift (line 98) | explicit HybridMultipleImagePickerSpecSwift(const MultipleImagePicke...
method getExternalMemorySize (line 110) | inline size_t getExternalMemorySize() noexcept override {
method openPicker (line 120) | inline void openPicker(const NitroConfig& config, const std::functio...
method openCrop (line 126) | inline void openCrop(const std::string& image, const NitroCropConfig...
method openPreview (line 132) | inline void openPreview(const std::vector<MediaPreview>& media, doub...
method openCamera (line 138) | inline void openCamera(const NitroCameraConfig& config, const std::f...
type margelo::nitro::multipleimagepicker (line 52) | namespace margelo::nitro::multipleimagepicker { struct NitroCameraConfig; }
type NitroConfig (line 16) | struct NitroConfig
type MediaType (line 18) | enum class MediaType
type PickerResult (line 20) | struct PickerResult
type ResultType (line 22) | enum class ResultType
type SelectBoxStyle (line 24) | enum class SelectBoxStyle
type SelectMode (line 26) | enum class SelectMode
type PickerCropConfig (line 28) | struct PickerCropConfig
type CropRatio (line 30) | struct CropRatio
type Text (line 32) | struct Text
type Language (line 34) | enum class Language
type Theme (line 36) | enum class Theme
type Presentation (line 38) | enum class Presentation
type PickerCameraConfig (line 40) | struct PickerCameraConfig
type CameraDevice (line 42) | enum class CameraDevice
type NitroCropConfig (line 44) | struct NitroCropConfig
type CropResult (line 46) | struct CropResult
type MediaPreview (line 48) | struct MediaPreview
type NitroPreviewConfig (line 50) | struct NitroPreviewConfig
type NitroCameraConfig (line 52) | struct NitroCameraConfig
type CameraResult (line 54) | struct CameraResult
class HybridMultipleImagePickerSpecSwift (line 95) | class HybridMultipleImagePickerSpecSwift: public virtual HybridMultipl...
method HybridMultipleImagePickerSpecSwift (line 98) | explicit HybridMultipleImagePickerSpecSwift(const MultipleImagePicke...
method getExternalMemorySize (line 110) | inline size_t getExternalMemorySize() noexcept override {
method openPicker (line 120) | inline void openPicker(const NitroConfig& config, const std::functio...
method openCrop (line 126) | inline void openCrop(const std::string& image, const NitroCropConfig...
method openPreview (line 132) | inline void openPreview(const std::vector<MediaPreview>& media, doub...
method openCamera (line 138) | inline void openCamera(const NitroCameraConfig& config, const std::f...
type margelo::nitro::multipleimagepicker (line 54) | namespace margelo::nitro::multipleimagepicker { struct CameraResult; }
type NitroConfig (line 16) | struct NitroConfig
type MediaType (line 18) | enum class MediaType
type PickerResult (line 20) | struct PickerResult
type ResultType (line 22) | enum class ResultType
type SelectBoxStyle (line 24) | enum class SelectBoxStyle
type SelectMode (line 26) | enum class SelectMode
type PickerCropConfig (line 28) | struct PickerCropConfig
type CropRatio (line 30) | struct CropRatio
type Text (line 32) | struct Text
type Language (line 34) | enum class Language
type Theme (line 36) | enum class Theme
type Presentation (line 38) | enum class Presentation
type PickerCameraConfig (line 40) | struct PickerCameraConfig
type CameraDevice (line 42) | enum class CameraDevice
type NitroCropConfig (line 44) | struct NitroCropConfig
type CropResult (line 46) | struct CropResult
type MediaPreview (line 48) | struct MediaPreview
type NitroPreviewConfig (line 50) | struct NitroPreviewConfig
type NitroCameraConfig (line 52) | struct NitroCameraConfig
type CameraResult (line 54) | struct CameraResult
class HybridMultipleImagePickerSpecSwift (line 95) | class HybridMultipleImagePickerSpecSwift: public virtual HybridMultipl...
method HybridMultipleImagePickerSpecSwift (line 98) | explicit HybridMultipleImagePickerSpecSwift(const MultipleImagePicke...
method getExternalMemorySize (line 110) | inline size_t getExternalMemorySize() noexcept override {
method openPicker (line 120) | inline void openPicker(const NitroConfig& config, const std::functio...
method openCrop (line 126) | inline void openCrop(const std::string& image, const NitroCropConfig...
method openPreview (line 132) | inline void openPreview(const std::vector<MediaPreview>& media, doub...
method openCamera (line 138) | inline void openCamera(const NitroCameraConfig& config, const std::f...
type margelo::nitro::multipleimagepicker (line 83) | namespace margelo::nitro::multipleimagepicker {
type NitroConfig (line 16) | struct NitroConfig
type MediaType (line 18) | enum class MediaType
type PickerResult (line 20) | struct PickerResult
type ResultType (line 22) | enum class ResultType
type SelectBoxStyle (line 24) | enum class SelectBoxStyle
type SelectMode (line 26) | enum class SelectMode
type PickerCropConfig (line 28) | struct PickerCropConfig
type CropRatio (line 30) | struct CropRatio
type Text (line 32) | struct Text
type Language (line 34) | enum class Language
type Theme (line 36) | enum class Theme
type Presentation (line 38) | enum class Presentation
type PickerCameraConfig (line 40) | struct PickerCameraConfig
type CameraDevice (line 42) | enum class CameraDevice
type NitroCropConfig (line 44) | struct NitroCropConfig
type CropResult (line 46) | struct CropResult
type MediaPreview (line 48) | struct MediaPreview
type NitroPreviewConfig (line 50) | struct NitroPreviewConfig
type NitroCameraConfig (line 52) | struct NitroCameraConfig
type CameraResult (line 54) | struct CameraResult
class HybridMultipleImagePickerSpecSwift (line 95) | class HybridMultipleImagePickerSpecSwift: public virtual HybridMultipl...
method HybridMultipleImagePickerSpecSwift (line 98) | explicit HybridMultipleImagePickerSpecSwift(const MultipleImagePicke...
method getExternalMemorySize (line 110) | inline size_t getExternalMemorySize() noexcept override {
method openPicker (line 120) | inline void openPicker(const NitroConfig& config, const std::functio...
method openCrop (line 126) | inline void openCrop(const std::string& image, const NitroCropConfig...
method openPreview (line 132) | inline void openPreview(const std::vector<MediaPreview>& media, doub...
method openCamera (line 138) | inline void openCamera(const NitroCameraConfig& config, const std::f...
FILE: nitrogen/generated/shared/c++/CameraDevice.hpp
type margelo::nitro::multipleimagepicker (line 26) | namespace margelo::nitro::multipleimagepicker {
type CameraDevice (line 31) | enum class CameraDevice {
type margelo::nitro (line 38) | namespace margelo::nitro {
type JSIConverter<CameraDevice> (line 44) | struct JSIConverter<CameraDevice> final {
method CameraDevice (line 45) | static inline CameraDevice fromJSI(jsi::Runtime& runtime, const jsi:...
method toJSI (line 54) | static inline jsi::Value toJSI(jsi::Runtime& runtime, CameraDevice a...
method canConvert (line 63) | static inline bool canConvert(jsi::Runtime& runtime, const jsi::Valu...
FILE: nitrogen/generated/shared/c++/CameraResult.hpp
type margelo::nitro::multipleimagepicker (line 22) | namespace margelo::nitro::multipleimagepicker { enum class ResultType; }
type ResultType (line 22) | enum class ResultType
type CameraResult (line 33) | struct CameraResult {
method CameraResult (line 44) | CameraResult() = default;
method CameraResult (line 45) | explicit CameraResult(std::string path, ResultType type, std::option...
type margelo::nitro::multipleimagepicker (line 28) | namespace margelo::nitro::multipleimagepicker {
type ResultType (line 22) | enum class ResultType
type CameraResult (line 33) | struct CameraResult {
method CameraResult (line 44) | CameraResult() = default;
method CameraResult (line 45) | explicit CameraResult(std::string path, ResultType type, std::option...
type margelo::nitro (line 50) | namespace margelo::nitro {
type JSIConverter<CameraResult> (line 56) | struct JSIConverter<CameraResult> final {
method CameraResult (line 57) | static inline CameraResult fromJSI(jsi::Runtime& runtime, const jsi:...
method toJSI (line 69) | static inline jsi::Value toJSI(jsi::Runtime& runtime, const CameraRe...
method canConvert (line 80) | static inline bool canConvert(jsi::Runtime& runtime, const jsi::Valu...
FILE: nitrogen/generated/shared/c++/CropRatio.hpp
type margelo::nitro::multipleimagepicker (line 26) | namespace margelo::nitro::multipleimagepicker {
type CropRatio (line 31) | struct CropRatio {
method CropRatio (line 38) | CropRatio() = default;
method CropRatio (line 39) | explicit CropRatio(std::optional<std::string> title, double width, d...
type margelo::nitro (line 44) | namespace margelo::nitro {
type JSIConverter<CropRatio> (line 50) | struct JSIConverter<CropRatio> final {
method CropRatio (line 51) | static inline CropRatio fromJSI(jsi::Runtime& runtime, const jsi::Va...
method toJSI (line 59) | static inline jsi::Value toJSI(jsi::Runtime& runtime, const CropRati...
method canConvert (line 66) | static inline bool canConvert(jsi::Runtime& runtime, const jsi::Valu...
FILE: nitrogen/generated/shared/c++/CropResult.hpp
type margelo::nitro::multipleimagepicker (line 25) | namespace margelo::nitro::multipleimagepicker {
type CropResult (line 30) | struct CropResult {
method CropResult (line 37) | CropResult() = default;
method CropResult (line 38) | explicit CropResult(std::string path, double width, double height): ...
type margelo::nitro (line 43) | namespace margelo::nitro {
type JSIConverter<CropResult> (line 49) | struct JSIConverter<CropResult> final {
method CropResult (line 50) | static inline CropResult fromJSI(jsi::Runtime& runtime, const jsi::V...
method toJSI (line 58) | static inline jsi::Value toJSI(jsi::Runtime& runtime, const CropResu...
method canConvert (line 65) | static inline bool canConvert(jsi::Runtime& runtime, const jsi::Valu...
FILE: nitrogen/generated/shared/c++/HybridMultipleImagePickerSpec.cpp
type margelo::nitro::multipleimagepicker (line 10) | namespace margelo::nitro::multipleimagepicker {
FILE: nitrogen/generated/shared/c++/HybridMultipleImagePickerSpec.hpp
type margelo::nitro::multipleimagepicker (line 17) | namespace margelo::nitro::multipleimagepicker { struct NitroConfig; }
type NitroConfig (line 17) | struct NitroConfig
type PickerResult (line 19) | struct PickerResult
type NitroCropConfig (line 21) | struct NitroCropConfig
type CropResult (line 23) | struct CropResult
type MediaPreview (line 25) | struct MediaPreview
type NitroPreviewConfig (line 27) | struct NitroPreviewConfig
type NitroCameraConfig (line 29) | struct NitroCameraConfig
type CameraResult (line 31) | struct CameraResult
class HybridMultipleImagePickerSpec (line 62) | class HybridMultipleImagePickerSpec: public virtual HybridObject {
method HybridMultipleImagePickerSpec (line 65) | explicit HybridMultipleImagePickerSpec(): HybridObject(TAG) { }
type margelo::nitro::multipleimagepicker (line 19) | namespace margelo::nitro::multipleimagepicker { struct PickerResult; }
type NitroConfig (line 17) | struct NitroConfig
type PickerResult (line 19) | struct PickerResult
type NitroCropConfig (line 21) | struct NitroCropConfig
type CropResult (line 23) | struct CropResult
type MediaPreview (line 25) | struct MediaPreview
type NitroPreviewConfig (line 27) | struct NitroPreviewConfig
type NitroCameraConfig (line 29) | struct NitroCameraConfig
type CameraResult (line 31) | struct CameraResult
class HybridMultipleImagePickerSpec (line 62) | class HybridMultipleImagePickerSpec: public virtual HybridObject {
method HybridMultipleImagePickerSpec (line 65) | explicit HybridMultipleImagePickerSpec(): HybridObject(TAG) { }
type margelo::nitro::multipleimagepicker (line 21) | namespace margelo::nitro::multipleimagepicker { struct NitroCropConfig; }
type NitroConfig (line 17) | struct NitroConfig
type PickerResult (line 19) | struct PickerResult
type NitroCropConfig (line 21) | struct NitroCropConfig
type CropResult (line 23) | struct CropResult
type MediaPreview (line 25) | struct MediaPreview
type NitroPreviewConfig (line 27) | struct NitroPreviewConfig
type NitroCameraConfig (line 29) | struct NitroCameraConfig
type CameraResult (line 31) | struct CameraResult
class HybridMultipleImagePickerSpec (line 62) | class HybridMultipleImagePickerSpec: public virtual HybridObject {
method HybridMultipleImagePickerSpec (line 65) | explicit HybridMultipleImagePickerSpec(): HybridObject(TAG) { }
type margelo::nitro::multipleimagepicker (line 23) | namespace margelo::nitro::multipleimagepicker { struct CropResult; }
type NitroConfig (line 17) | struct NitroConfig
type PickerResult (line 19) | struct PickerResult
type NitroCropConfig (line 21) | struct NitroCropConfig
type CropResult (line 23) | struct CropResult
type MediaPreview (line 25) | struct MediaPreview
type NitroPreviewConfig (line 27) | struct NitroPreviewConfig
type NitroCameraConfig (line 29) | struct NitroCameraConfig
type CameraResult (line 31) | struct CameraResult
class HybridMultipleImagePickerSpec (line 62) | class HybridMultipleImagePickerSpec: public virtual HybridObject {
method HybridMultipleImagePickerSpec (line 65) | explicit HybridMultipleImagePickerSpec(): HybridObject(TAG) { }
type margelo::nitro::multipleimagepicker (line 25) | namespace margelo::nitro::multipleimagepicker { struct MediaPreview; }
type NitroConfig (line 17) | struct NitroConfig
type PickerResult (line 19) | struct PickerResult
type NitroCropConfig (line 21) | struct NitroCropConfig
type CropResult (line 23) | struct CropResult
type MediaPreview (line 25) | struct MediaPreview
type NitroPreviewConfig (line 27) | struct NitroPreviewConfig
type NitroCameraConfig (line 29) | struct NitroCameraConfig
type CameraResult (line 31) | struct CameraResult
class HybridMultipleImagePickerSpec (line 62) | class HybridMultipleImagePickerSpec: public virtual HybridObject {
method HybridMultipleImagePickerSpec (line 65) | explicit HybridMultipleImagePickerSpec(): HybridObject(TAG) { }
type margelo::nitro::multipleimagepicker (line 27) | namespace margelo::nitro::multipleimagepicker { struct NitroPreviewConfi...
type NitroConfig (line 17) | struct NitroConfig
type PickerResult (line 19) | struct PickerResult
type NitroCropConfig (line 21) | struct NitroCropConfig
type CropResult (line 23) | struct CropResult
type MediaPreview (line 25) | struct MediaPreview
type NitroPreviewConfig (line 27) | struct NitroPreviewConfig
type NitroCameraConfig (line 29) | struct NitroCameraConfig
type CameraResult (line 31) | struct CameraResult
class HybridMultipleImagePickerSpec (line 62) | class HybridMultipleImagePickerSpec: public virtual HybridObject {
method HybridMultipleImagePickerSpec (line 65) | explicit HybridMultipleImagePickerSpec(): HybridObject(TAG) { }
type margelo::nitro::multipleimagepicker (line 29) | namespace margelo::nitro::multipleimagepicker { struct NitroCameraConfig; }
type NitroConfig (line 17) | struct NitroConfig
type PickerResult (line 19) | struct PickerResult
type NitroCropConfig (line 21) | struct NitroCropConfig
type CropResult (line 23) | struct CropResult
type MediaPreview (line 25) | struct MediaPreview
type NitroPreviewConfig (line 27) | struct NitroPreviewConfig
type NitroCameraConfig (line 29) | struct NitroCameraConfig
type CameraResult (line 31) | struct CameraResult
class HybridMultipleImagePickerSpec (line 62) | class HybridMultipleImagePickerSpec: public virtual HybridObject {
method HybridMultipleImagePickerSpec (line 65) | explicit HybridMultipleImagePickerSpec(): HybridObject(TAG) { }
type margelo::nitro::multipleimagepicker (line 31) | namespace margelo::nitro::multipleimagepicker { struct CameraResult; }
type NitroConfig (line 17) | struct NitroConfig
type PickerResult (line 19) | struct PickerResult
type NitroCropConfig (line 21) | struct NitroCropConfig
type CropResult (line 23) | struct CropResult
type MediaPreview (line 25) | struct MediaPreview
type NitroPreviewConfig (line 27) | struct NitroPreviewConfig
type NitroCameraConfig (line 29) | struct NitroCameraConfig
type CameraResult (line 31) | struct CameraResult
class HybridMultipleImagePickerSpec (line 62) | class HybridMultipleImagePickerSpec: public virtual HybridObject {
method HybridMultipleImagePickerSpec (line 65) | explicit HybridMultipleImagePickerSpec(): HybridObject(TAG) { }
type margelo::nitro::multipleimagepicker (line 45) | namespace margelo::nitro::multipleimagepicker {
type NitroConfig (line 17) | struct NitroConfig
type PickerResult (line 19) | struct PickerResult
type NitroCropConfig (line 21) | struct NitroCropConfig
type CropResult (line 23) | struct CropResult
type MediaPreview (line 25) | struct MediaPreview
type NitroPreviewConfig (line 27) | struct NitroPreviewConfig
type NitroCameraConfig (line 29) | struct NitroCameraConfig
type CameraResult (line 31) | struct CameraResult
class HybridMultipleImagePickerSpec (line 62) | class HybridMultipleImagePickerSpec: public virtual HybridObject {
method HybridMultipleImagePickerSpec (line 65) | explicit HybridMultipleImagePickerSpec(): HybridObject(TAG) { }
FILE: nitrogen/generated/shared/c++/Language.hpp
type margelo::nitro::multipleimagepicker (line 26) | namespace margelo::nitro::multipleimagepicker {
type Language (line 31) | enum class Language {
type margelo::nitro (line 49) | namespace margelo::nitro {
type JSIConverter<Language> (line 55) | struct JSIConverter<Language> final {
method Language (line 56) | static inline Language fromJSI(jsi::Runtime& runtime, const jsi::Val...
method toJSI (line 76) | static inline jsi::Value toJSI(jsi::Runtime& runtime, Language arg) {
method canConvert (line 96) | static inline bool canConvert(jsi::Runtime& runtime, const jsi::Valu...
FILE: nitrogen/generated/shared/c++/MediaPreview.hpp
type margelo::nitro::multipleimagepicker (line 22) | namespace margelo::nitro::multipleimagepicker { enum class ResultType; }
type ResultType (line 22) | enum class ResultType
type MediaPreview (line 33) | struct MediaPreview {
method MediaPreview (line 41) | MediaPreview() = default;
method MediaPreview (line 42) | explicit MediaPreview(ResultType type, std::optional<std::string> pa...
type margelo::nitro::multipleimagepicker (line 28) | namespace margelo::nitro::multipleimagepicker {
type ResultType (line 22) | enum class ResultType
type MediaPreview (line 33) | struct MediaPreview {
method MediaPreview (line 41) | MediaPreview() = default;
method MediaPreview (line 42) | explicit MediaPreview(ResultType type, std::optional<std::string> pa...
type margelo::nitro (line 47) | namespace margelo::nitro {
type JSIConverter<MediaPreview> (line 53) | struct JSIConverter<MediaPreview> final {
method MediaPreview (line 54) | static inline MediaPreview fromJSI(jsi::Runtime& runtime, const jsi:...
method toJSI (line 63) | static inline jsi::Value toJSI(jsi::Runtime& runtime, const MediaPre...
method canConvert (line 71) | static inline bool canConvert(jsi::Runtime& runtime, const jsi::Valu...
FILE: nitrogen/generated/shared/c++/MediaType.hpp
type margelo::nitro::multipleimagepicker (line 26) | namespace margelo::nitro::multipleimagepicker {
type MediaType (line 31) | enum class MediaType {
type margelo::nitro (line 39) | namespace margelo::nitro {
type JSIConverter<MediaType> (line 45) | struct JSIConverter<MediaType> final {
method MediaType (line 46) | static inline MediaType fromJSI(jsi::Runtime& runtime, const jsi::Va...
method toJSI (line 56) | static inline jsi::Value toJSI(jsi::Runtime& runtime, MediaType arg) {
method canConvert (line 66) | static inline bool canConvert(jsi::Runtime& runtime, const jsi::Valu...
FILE: nitrogen/generated/shared/c++/NitroCameraConfig.hpp
type margelo::nitro::multipleimagepicker (line 22) | namespace margelo::nitro::multipleimagepicker { enum class MediaType; }
type MediaType (line 22) | enum class MediaType
type Presentation (line 24) | enum class Presentation
type Language (line 26) | enum class Language
type PickerCropConfig (line 28) | struct PickerCropConfig
type CameraDevice (line 30) | enum class CameraDevice
type NitroCameraConfig (line 44) | struct NitroCameraConfig {
method NitroCameraConfig (line 56) | NitroCameraConfig() = default;
method NitroCameraConfig (line 57) | explicit NitroCameraConfig(MediaType mediaType, Presentation present...
type margelo::nitro::multipleimagepicker (line 24) | namespace margelo::nitro::multipleimagepicker { enum class Presentation; }
type MediaType (line 22) | enum class MediaType
type Presentation (line 24) | enum class Presentation
type Language (line 26) | enum class Language
type PickerCropConfig (line 28) | struct PickerCropConfig
type CameraDevice (line 30) | enum class CameraDevice
type NitroCameraConfig (line 44) | struct NitroCameraConfig {
method NitroCameraConfig (line 56) | NitroCameraConfig() = default;
method NitroCameraConfig (line 57) | explicit NitroCameraConfig(MediaType mediaType, Presentation present...
type margelo::nitro::multipleimagepicker (line 26) | namespace margelo::nitro::multipleimagepicker { enum class Language; }
type MediaType (line 22) | enum class MediaType
type Presentation (line 24) | enum class Presentation
type Language (line 26) | enum class Language
type PickerCropConfig (line 28) | struct PickerCropConfig
type CameraDevice (line 30) | enum class CameraDevice
type NitroCameraConfig (line 44) | struct NitroCameraConfig {
method NitroCameraConfig (line 56) | NitroCameraConfig() = default;
method NitroCameraConfig (line 57) | explicit NitroCameraConfig(MediaType mediaType, Presentation present...
type margelo::nitro::multipleimagepicker (line 28) | namespace margelo::nitro::multipleimagepicker { struct PickerCropConfig; }
type MediaType (line 22) | enum class MediaType
type Presentation (line 24) | enum class Presentation
type Language (line 26) | enum class Language
type PickerCropConfig (line 28) | struct PickerCropConfig
type CameraDevice (line 30) | enum class CameraDevice
type NitroCameraConfig (line 44) | struct NitroCameraConfig {
method NitroCameraConfig (line 56) | NitroCameraConfig() = default;
method NitroCameraConfig (line 57) | explicit NitroCameraConfig(MediaType mediaType, Presentation present...
type margelo::nitro::multipleimagepicker (line 30) | namespace margelo::nitro::multipleimagepicker { enum class CameraDevice; }
type MediaType (line 22) | enum class MediaType
type Presentation (line 24) | enum class Presentation
type Language (line 26) | enum class Language
type PickerCropConfig (line 28) | struct PickerCropConfig
type CameraDevice (line 30) | enum class CameraDevice
type NitroCameraConfig (line 44) | struct NitroCameraConfig {
method NitroCameraConfig (line 56) | NitroCameraConfig() = default;
method NitroCameraConfig (line 57) | explicit NitroCameraConfig(MediaType mediaType, Presentation present...
type margelo::nitro::multipleimagepicker (line 39) | namespace margelo::nitro::multipleimagepicker {
type MediaType (line 22) | enum class MediaType
type Presentation (line 24) | enum class Presentation
type Language (line 26) | enum class Language
type PickerCropConfig (line 28) | struct PickerCropConfig
type CameraDevice (line 30) | enum class CameraDevice
type NitroCameraConfig (line 44) | struct NitroCameraConfig {
method NitroCameraConfig (line 56) | NitroCameraConfig() = default;
method NitroCameraConfig (line 57) | explicit NitroCameraConfig(MediaType mediaType, Presentation present...
type margelo::nitro (line 62) | namespace margelo::nitro {
type JSIConverter<NitroCameraConfig> (line 68) | struct JSIConverter<NitroCameraConfig> final {
method NitroCameraConfig (line 69) | static inline NitroCameraConfig fromJSI(jsi::Runtime& runtime, const...
method toJSI (line 82) | static inline jsi::Value toJSI(jsi::Runtime& runtime, const NitroCam...
method canConvert (line 94) | static inline bool canConvert(jsi::Runtime& runtime, const jsi::Valu...
FILE: nitrogen/generated/shared/c++/NitroConfig.hpp
type margelo::nitro::multipleimagepicker (line 22) | namespace margelo::nitro::multipleimagepicker { enum class MediaType; }
type MediaType (line 22) | enum class MediaType
type PickerResult (line 24) | struct PickerResult
type SelectBoxStyle (line 26) | enum class SelectBoxStyle
type SelectMode (line 28) | enum class SelectMode
type PickerCropConfig (line 30) | struct PickerCropConfig
type Text (line 32) | struct Text
type Language (line 34) | enum class Language
type Theme (line 36) | enum class Theme
type Presentation (line 38) | enum class Presentation
type PickerCameraConfig (line 40) | struct PickerCameraConfig
type NitroConfig (line 60) | struct NitroConfig {
method NitroConfig (line 90) | NitroConfig() = default;
method NitroConfig (line 91) | explicit NitroConfig(MediaType mediaType, std::vector<PickerResult> ...
type margelo::nitro::multipleimagepicker (line 24) | namespace margelo::nitro::multipleimagepicker { struct PickerResult; }
type MediaType (line 22) | enum class MediaType
type PickerResult (line 24) | struct PickerResult
type SelectBoxStyle (line 26) | enum class SelectBoxStyle
type SelectMode (line 28) | enum class SelectMode
type PickerCropConfig (line 30) | struct PickerCropConfig
type Text (line 32) | struct Text
type Language (line 34) | enum class Language
type Theme (line 36) | enum class Theme
type Presentation (line 38) | enum class Presentation
type PickerCameraConfig (line 40) | struct PickerCameraConfig
type NitroConfig (line 60) | struct NitroConfig {
method NitroConfig (line 90) | NitroConfig() = default;
method NitroConfig (line 91) | explicit NitroConfig(MediaType mediaType, std::vector<PickerResult> ...
type margelo::nitro::multipleimagepicker (line 26) | namespace margelo::nitro::multipleimagepicker { enum class SelectBoxStyl...
type MediaType (line 22) | enum class MediaType
type PickerResult (line 24) | struct PickerResult
type SelectBoxStyle (line 26) | enum class SelectBoxStyle
type SelectMode (line 28) | enum class SelectMode
type PickerCropConfig (line 30) | struct PickerCropConfig
type Text (line 32) | struct Text
type Language (line 34) | enum class Language
type Theme (line 36) | enum class Theme
type Presentation (line 38) | enum class Presentation
type PickerCameraConfig (line 40) | struct PickerCameraConfig
type NitroConfig (line 60) | struct NitroConfig {
method NitroConfig (line 90) | NitroConfig() = default;
method NitroConfig (line 91) | explicit NitroConfig(MediaType mediaType, std::vector<PickerResult> ...
type margelo::nitro::multipleimagepicker (line 28) | namespace margelo::nitro::multipleimagepicker { enum class SelectMode; }
type MediaType (line 22) | enum class MediaType
type PickerResult (line 24) | struct PickerResult
type SelectBoxStyle (line 26) | enum class SelectBoxStyle
type SelectMode (line 28) | enum class SelectMode
type PickerCropConfig (line 30) | struct PickerCropConfig
type Text (line 32) | struct Text
type Language (line 34) | enum class Language
type Theme (line 36) | enum class Theme
type Presentation (line 38) | enum class Presentation
type PickerCameraConfig (line 40) | struct PickerCameraConfig
type NitroConfig (line 60) | struct NitroConfig {
method NitroConfig (line 90) | NitroConfig() = default;
method NitroConfig (line 91) | explicit NitroConfig(MediaType mediaType, std::vector<PickerResult> ...
type margelo::nitro::multipleimagepicker (line 30) | namespace margelo::nitro::multipleimagepicker { struct PickerCropConfig; }
type MediaType (line 22) | enum class MediaType
type PickerResult (line 24) | struct PickerResult
type SelectBoxStyle (line 26) | enum class SelectBoxStyle
type SelectMode (line 28) | enum class SelectMode
type PickerCropConfig (line 30) | struct PickerCropConfig
type Text (line 32) | struct Text
type Language (line 34) | enum class Language
type Theme (line 36) | enum class Theme
type Presentation (line 38) | enum class Presentation
type PickerCameraConfig (line 40) | struct PickerCameraConfig
type NitroConfig (line 60) | struct NitroConfig {
method NitroConfig (line 90) | NitroConfig() = default;
method NitroConfig (line 91) | explicit NitroConfig(MediaType mediaType, std::vector<PickerResult> ...
type margelo::nitro::multipleimagepicker (line 32) | namespace margelo::nitro::multipleimagepicker { struct Text; }
type MediaType (line 22) | enum class MediaType
type PickerResult (line 24) | struct PickerResult
type SelectBoxStyle (line 26) | enum class SelectBoxStyle
type SelectMode (line 28) | enum class SelectMode
type PickerCropConfig (line 30) | struct PickerCropConfig
type Text (line 32) | struct Text
type Language (line 34) | enum class Language
type Theme (line 36) | enum class Theme
type Presentation (line 38) | enum class Presentation
type PickerCameraConfig (line 40) | struct PickerCameraConfig
type NitroConfig (line 60) | struct NitroConfig {
method NitroConfig (line 90) | NitroConfig() = default;
method NitroConfig (line 91) | explicit NitroConfig(MediaType mediaType, std::vector<PickerResult> ...
type margelo::nitro::multipleimagepicker (line 34) | namespace margelo::nitro::multipleimagepicker { enum class Language; }
type MediaType (line 22) | enum class MediaType
type PickerResult (line 24) | struct PickerResult
type SelectBoxStyle (line 26) | enum class SelectBoxStyle
type SelectMode (line 28) | enum class SelectMode
type PickerCropConfig (line 30) | struct PickerCropConfig
type Text (line 32) | struct Text
type Language (line 34) | enum class Language
type Theme (line 36) | enum class Theme
type Presentation (line 38) | enum class Presentation
type PickerCameraConfig (line 40) | struct PickerCameraConfig
type NitroConfig (line 60) | struct NitroConfig {
method NitroConfig (line 90) | NitroConfig() = default;
method NitroConfig (line 91) | explicit NitroConfig(MediaType mediaType, std::vector<PickerResult> ...
type margelo::nitro::multipleimagepicker (line 36) | namespace margelo::nitro::multipleimagepicker { enum class Theme; }
type MediaType (line 22) | enum class MediaType
type PickerResult (line 24) | struct PickerResult
type SelectBoxStyle (line 26) | enum class SelectBoxStyle
type SelectMode (line 28) | enum class SelectMode
type PickerCropConfig (line 30) | struct PickerCropConfig
type Text (line 32) | struct Text
type Language (line 34) | enum class Language
type Theme (line 36) | enum class Theme
type Presentation (line 38) | enum class Presentation
type PickerCameraConfig (line 40) | struct PickerCameraConfig
type NitroConfig (line 60) | struct NitroConfig {
method NitroConfig (line 90) | NitroConfig() = default;
method NitroConfig (line 91) | explicit NitroConfig(MediaType mediaType, std::vector<PickerResult> ...
type margelo::nitro::multipleimagepicker (line 38) | namespace margelo::nitro::multipleimagepicker { enum class Presentation; }
type MediaType (line 22) | enum class MediaType
type PickerResult (line 24) | struct PickerResult
type SelectBoxStyle (line 26) | enum class SelectBoxStyle
type SelectMode (line 28) | enum class SelectMode
type PickerCropConfig (line 30) | struct PickerCropConfig
type Text (line 32) | struct Text
type Language (line 34) | enum class Language
type Theme (line 36) | enum class Theme
type Presentation (line 38) | enum class Presentation
type PickerCameraConfig (line 40) | struct PickerCameraConfig
type NitroConfig (line 60) | struct NitroConfig {
method NitroConfig (line 90) | NitroConfig() = default;
method NitroConfig (line 91) | explicit NitroConfig(MediaType mediaType, std::vector<PickerResult> ...
type margelo::nitro::multipleimagepicker (line 40) | namespace margelo::nitro::multipleimagepicker { struct PickerCameraConfi...
type MediaType (line 22) | enum class MediaType
type PickerResult (line 24) | struct PickerResult
type SelectBoxStyle (line 26) | enum class SelectBoxStyle
type SelectMode (line 28) | enum class SelectMode
type PickerCropConfig (line 30) | struct PickerCropConfig
type Text (line 32) | struct Text
type Language (line 34) | enum class Language
type Theme (line 36) | enum class Theme
type Presentation (line 38) | enum class Presentation
type PickerCameraConfig (line 40) | struct PickerCameraConfig
type NitroConfig (line 60) | struct NitroConfig {
method NitroConfig (line 90) | NitroConfig() = default;
method NitroConfig (line 91) | explicit NitroConfig(MediaType mediaType, std::vector<PickerResult> ...
type margelo::nitro::multipleimagepicker (line 55) | namespace margelo::nitro::multipleimagepicker {
type MediaType (line 22) | enum class MediaType
type PickerResult (line 24) | struct PickerResult
type SelectBoxStyle (line 26) | enum class SelectBoxStyle
type SelectMode (line 28) | enum class SelectMode
type PickerCropConfig (line 30) | struct PickerCropConfig
type Text (line 32) | struct Text
type Language (line 34) | enum class Language
type Theme (line 36) | enum class Theme
type Presentation (line 38) | enum class Presentation
type PickerCameraConfig (line 40) | struct PickerCameraConfig
type NitroConfig (line 60) | struct NitroConfig {
method NitroConfig (line 90) | NitroConfig() = default;
method NitroConfig (line 91) | explicit NitroConfig(MediaType mediaType, std::vector<PickerResult> ...
type margelo::nitro (line 96) | namespace margelo::nitro {
type JSIConverter<NitroConfig> (line 102) | struct JSIConverter<NitroConfig> final {
method NitroConfig (line 103) | static inline NitroConfig fromJSI(jsi::Runtime& runtime, const jsi::...
method toJSI (line 134) | static inline jsi::Value toJSI(jsi::Runtime& runtime, const NitroCon...
method canConvert (line 164) | static inline bool canConvert(jsi::Runtime& runtime, const jsi::Valu...
FILE: nitrogen/generated/shared/c++/NitroCropConfig.hpp
type margelo::nitro::multipleimagepicker (line 22) | namespace margelo::nitro::multipleimagepicker { enum class Language; }
type Language (line 22) | enum class Language
type Presentation (line 24) | enum class Presentation
type CropRatio (line 26) | struct CropRatio
type NitroCropConfig (line 39) | struct NitroCropConfig {
method NitroCropConfig (line 49) | NitroCropConfig() = default;
method NitroCropConfig (line 50) | explicit NitroCropConfig(Language language, Presentation presentatio...
type margelo::nitro::multipleimagepicker (line 24) | namespace margelo::nitro::multipleimagepicker { enum class Presentation; }
type Language (line 22) | enum class Language
type Presentation (line 24) | enum class Presentation
type CropRatio (line 26) | struct CropRatio
type NitroCropConfig (line 39) | struct NitroCropConfig {
method NitroCropConfig (line 49) | NitroCropConfig() = default;
method NitroCropConfig (line 50) | explicit NitroCropConfig(Language language, Presentation presentatio...
type margelo::nitro::multipleimagepicker (line 26) | namespace margelo::nitro::multipleimagepicker { struct CropRatio; }
type Language (line 22) | enum class Language
type Presentation (line 24) | enum class Presentation
type CropRatio (line 26) | struct CropRatio
type NitroCropConfig (line 39) | struct NitroCropConfig {
method NitroCropConfig (line 49) | NitroCropConfig() = default;
method NitroCropConfig (line 50) | explicit NitroCropConfig(Language language, Presentation presentatio...
type margelo::nitro::multipleimagepicker (line 34) | namespace margelo::nitro::multipleimagepicker {
type Language (line 22) | enum class Language
type Presentation (line 24) | enum class Presentation
type CropRatio (line 26) | struct CropRatio
type NitroCropConfig (line 39) | struct NitroCropConfig {
method NitroCropConfig (line 49) | NitroCropConfig() = default;
method NitroCropConfig (line 50) | explicit NitroCropConfig(Language language, Presentation presentatio...
type margelo::nitro (line 55) | namespace margelo::nitro {
type JSIConverter<NitroCropConfig> (line 61) | struct JSIConverter<NitroCropConfig> final {
method NitroCropConfig (line 62) | static inline NitroCropConfig fromJSI(jsi::Runtime& runtime, const j...
method toJSI (line 73) | static inline jsi::Value toJSI(jsi::Runtime& runtime, const NitroCro...
method canConvert (line 83) | static inline bool canConvert(jsi::Runtime& runtime, const jsi::Valu...
FILE: nitrogen/generated/shared/c++/NitroPreviewConfig.hpp
type margelo::nitro::multipleimagepicker (line 22) | namespace margelo::nitro::multipleimagepicker { enum class Language; }
type Language (line 22) | enum class Language
type NitroPreviewConfig (line 32) | struct NitroPreviewConfig {
method NitroPreviewConfig (line 38) | NitroPreviewConfig() = default;
method NitroPreviewConfig (line 39) | explicit NitroPreviewConfig(Language language, std::optional<bool> v...
type margelo::nitro::multipleimagepicker (line 27) | namespace margelo::nitro::multipleimagepicker {
type Language (line 22) | enum class Language
type NitroPreviewConfig (line 32) | struct NitroPreviewConfig {
method NitroPreviewConfig (line 38) | NitroPreviewConfig() = default;
method NitroPreviewConfig (line 39) | explicit NitroPreviewConfig(Language language, std::optional<bool> v...
type margelo::nitro (line 44) | namespace margelo::nitro {
type JSIConverter<NitroPreviewConfig> (line 50) | struct JSIConverter<NitroPreviewConfig> final {
method NitroPreviewConfig (line 51) | static inline NitroPreviewConfig fromJSI(jsi::Runtime& runtime, cons...
method toJSI (line 58) | static inline jsi::Value toJSI(jsi::Runtime& runtime, const NitroPre...
method canConvert (line 64) | static inline bool canConvert(jsi::Runtime& runtime, const jsi::Valu...
FILE: nitrogen/generated/shared/c++/PickerCameraConfig.hpp
type margelo::nitro::multipleimagepicker (line 22) | namespace margelo::nitro::multipleimagepicker { enum class CameraDevice; }
type CameraDevice (line 22) | enum class CameraDevice
type PickerCameraConfig (line 32) | struct PickerCameraConfig {
method PickerCameraConfig (line 38) | PickerCameraConfig() = default;
method PickerCameraConfig (line 39) | explicit PickerCameraConfig(std::optional<CameraDevice> cameraDevice...
type margelo::nitro::multipleimagepicker (line 27) | namespace margelo::nitro::multipleimagepicker {
type CameraDevice (line 22) | enum class CameraDevice
type PickerCameraConfig (line 32) | struct PickerCameraConfig {
method PickerCameraConfig (line 38) | PickerCameraConfig() = default;
method PickerCameraConfig (line 39) | explicit PickerCameraConfig(std::optional<CameraDevice> cameraDevice...
type margelo::nitro (line 44) | namespace margelo::nitro {
type JSIConverter<PickerCameraConfig> (line 50) | struct JSIConverter<PickerCameraConfig> final {
method PickerCameraConfig (line 51) | static inline PickerCameraConfig fromJSI(jsi::Runtime& runtime, cons...
method toJSI (line 58) | static inline jsi::Value toJSI(jsi::Runtime& runtime, const PickerCa...
method canConvert (line 64) | static inline bool canConvert(jsi::Runtime& runtime, const jsi::Valu...
FILE: nitrogen/generated/shared/c++/PickerCropConfig.hpp
type margelo::nitro::multipleimagepicker (line 22) | namespace margelo::nitro::multipleimagepicker { struct CropRatio; }
type CropRatio (line 22) | struct CropRatio
type PickerCropConfig (line 33) | struct PickerCropConfig {
method PickerCropConfig (line 41) | PickerCropConfig() = default;
method PickerCropConfig (line 42) | explicit PickerCropConfig(std::optional<bool> circle, std::vector<Cr...
type margelo::nitro::multipleimagepicker (line 28) | namespace margelo::nitro::multipleimagepicker {
type CropRatio (line 22) | struct CropRatio
type PickerCropConfig (line 33) | struct PickerCropConfig {
method PickerCropConfig (line 41) | PickerCropConfig() = default;
method PickerCropConfig (line 42) | explicit PickerCropConfig(std::optional<bool> circle, std::vector<Cr...
type margelo::nitro (line 47) | namespace margelo::nitro {
type JSIConverter<PickerCropConfig> (line 53) | struct JSIConverter<PickerCropConfig> final {
method PickerCropConfig (line 54) | static inline PickerCropConfig fromJSI(jsi::Runtime& runtime, const ...
method toJSI (line 63) | static inline jsi::Value toJSI(jsi::Runtime& runtime, const PickerCr...
method canConvert (line 71) | static inline bool canConvert(jsi::Runtime& runtime, const jsi::Valu...
FILE: nitrogen/generated/shared/c++/PickerResult.hpp
type margelo::nitro::multipleimagepicker (line 22) | namespace margelo::nitro::multipleimagepicker { enum class ResultType; }
type ResultType (line 22) | enum class ResultType
type PickerResult (line 33) | struct PickerResult {
method PickerResult (line 52) | PickerResult() = default;
method PickerResult (line 53) | explicit PickerResult(std::string localIdentifier, double width, dou...
type margelo::nitro::multipleimagepicker (line 28) | namespace margelo::nitro::multipleimagepicker {
type ResultType (line 22) | enum class ResultType
type PickerResult (line 33) | struct PickerResult {
method PickerResult (line 52) | PickerResult() = default;
method PickerResult (line 53) | explicit PickerResult(std::string localIdentifier, double width, dou...
type margelo::nitro (line 58) | namespace margelo::nitro {
type JSIConverter<PickerResult> (line 64) | struct JSIConverter<PickerResult> final {
method PickerResult (line 65) | static inline PickerResult fromJSI(jsi::Runtime& runtime, const jsi:...
method toJSI (line 85) | static inline jsi::Value toJSI(jsi::Runtime& runtime, const PickerRe...
method canConvert (line 104) | static inline bool canConvert(jsi::Runtime& runtime, const jsi::Valu...
FILE: nitrogen/generated/shared/c++/Presentation.hpp
type margelo::nitro::multipleimagepicker (line 26) | namespace margelo::nitro::multipleimagepicker {
type Presentation (line 31) | enum class Presentation {
type margelo::nitro (line 38) | namespace margelo::nitro {
type JSIConverter<Presentation> (line 44) | struct JSIConverter<Presentation> final {
method Presentation (line 45) | static inline Presentation fromJSI(jsi::Runtime& runtime, const jsi:...
method toJSI (line 54) | static inline jsi::Value toJSI(jsi::Runtime& runtime, Presentation a...
method canConvert (line 63) | static inline bool canConvert(jsi::Runtime& runtime, const jsi::Valu...
FILE: nitrogen/generated/shared/c++/ResultType.hpp
type margelo::nitro::multipleimagepicker (line 26) | namespace margelo::nitro::multipleimagepicker {
type ResultType (line 31) | enum class ResultType {
type margelo::nitro (line 38) | namespace margelo::nitro {
type JSIConverter<ResultType> (line 44) | struct JSIConverter<ResultType> final {
method ResultType (line 45) | static inline ResultType fromJSI(jsi::Runtime& runtime, const jsi::V...
method toJSI (line 54) | static inline jsi::Value toJSI(jsi::Runtime& runtime, ResultType arg) {
method canConvert (line 63) | static inline bool canConvert(jsi::Runtime& runtime, const jsi::Valu...
FILE: nitrogen/generated/shared/c++/SelectBoxStyle.hpp
type margelo::nitro::multipleimagepicker (line 26) | namespace margelo::nitro::multipleimagepicker {
type SelectBoxStyle (line 31) | enum class SelectBoxStyle {
type margelo::nitro (line 38) | namespace margelo::nitro {
type JSIConverter<SelectBoxStyle> (line 44) | struct JSIConverter<SelectBoxStyle> final {
method SelectBoxStyle (line 45) | static inline SelectBoxStyle fromJSI(jsi::Runtime& runtime, const js...
method toJSI (line 54) | static inline jsi::Value toJSI(jsi::Runtime& runtime, SelectBoxStyle...
method canConvert (line 63) | static inline bool canConvert(jsi::Runtime& runtime, const jsi::Valu...
FILE: nitrogen/generated/shared/c++/SelectMode.hpp
type margelo::nitro::multipleimagepicker (line 26) | namespace margelo::nitro::multipleimagepicker {
type SelectMode (line 31) | enum class SelectMode {
type margelo::nitro (line 38) | namespace margelo::nitro {
type JSIConverter<SelectMode> (line 44) | struct JSIConverter<SelectMode> final {
method SelectMode (line 45) | static inline SelectMode fromJSI(jsi::Runtime& runtime, const jsi::V...
method toJSI (line 54) | static inline jsi::Value toJSI(jsi::Runtime& runtime, SelectMode arg) {
method canConvert (line 63) | static inline bool canConvert(jsi::Runtime& runtime, const jsi::Valu...
FILE: nitrogen/generated/shared/c++/Text.hpp
type margelo::nitro::multipleimagepicker (line 26) | namespace margelo::nitro::multipleimagepicker {
type Text (line 31) | struct Text {
method Text (line 39) | Text() = default;
method Text (line 40) | explicit Text(std::optional<std::string> finish, std::optional<std::...
type margelo::nitro (line 45) | namespace margelo::nitro {
type JSIConverter<Text> (line 51) | struct JSIConverter<Text> final {
method Text (line 52) | static inline Text fromJSI(jsi::Runtime& runtime, const jsi::Value& ...
method toJSI (line 61) | static inline jsi::Value toJSI(jsi::Runtime& runtime, const Text& ar...
method canConvert (line 69) | static inline bool canConvert(jsi::Runtime& runtime, const jsi::Valu...
FILE: nitrogen/generated/shared/c++/Theme.hpp
type margelo::nitro::multipleimagepicker (line 26) | namespace margelo::nitro::multipleimagepicker {
type Theme (line 31) | enum class Theme {
type margelo::nitro (line 38) | namespace margelo::nitro {
type JSIConverter<Theme> (line 44) | struct JSIConverter<Theme> final {
method Theme (line 45) | static inline Theme fromJSI(jsi::Runtime& runtime, const jsi::Value&...
method toJSI (line 54) | static inline jsi::Value toJSI(jsi::Runtime& runtime, Theme arg) {
method canConvert (line 63) | static inline bool canConvert(jsi::Runtime& runtime, const jsi::Valu...
FILE: src/index.ts
type IPromisePicker (line 31) | type IPromisePicker<T extends Config> = T['selectMode'] extends 'single'
function openPicker (line 35) | async function openPicker<T extends Config>(
function openCropper (line 68) | async function openCropper(
function openPreview (line 97) | function openPreview(
function openCamera (line 124) | async function openCamera(config?: CameraConfig): Promise<CameraResult> {
constant DEFAULT_COUNT (line 159) | const DEFAULT_COUNT = 20
constant LANGUAGES (line 193) | const LANGUAGES = [
FILE: src/specs/MultipleImagePicker.nitro.ts
type MultipleImagePicker (line 13) | interface MultipleImagePicker
FILE: src/types/camera.ts
type CameraDevice (line 6) | type CameraDevice = 'front' | 'back'
type PickerCameraConfig (line 8) | type PickerCameraConfig = {
type NitroCameraConfig (line 22) | interface NitroCameraConfig extends PickerCameraConfig {
type CameraConfig (line 40) | interface CameraConfig
type CameraResult (line 136) | interface CameraResult extends BaseResult {
FILE: src/types/config.ts
type Theme (line 1) | type Theme = 'light' | 'dark'
type Presentation (line 3) | type Presentation = 'fullScreenModal' | 'formSheet'
type Language (line 5) | type Language =
type MediaType (line 20) | type MediaType = 'video' | 'image' | 'all'
FILE: src/types/crop.ts
type CropRatio (line 3) | type CropRatio = { title?: string; width: number; height: number }
type PickerCropConfig (line 9) | type PickerCropConfig = {
type NitroCropConfig (line 33) | interface NitroCropConfig extends PickerCropConfig {
type CropConfig (line 43) | interface CropConfig
type CropResult (line 90) | interface CropResult {
FILE: src/types/error.ts
type MultipleImagePickerError (line 1) | enum MultipleImagePickerError {
type CameraError (line 5) | enum CameraError {
FILE: src/types/picker.ts
type SelectBoxStyle (line 7) | type SelectBoxStyle = 'number' | 'tick'
type SelectMode (line 9) | type SelectMode = 'single' | 'multiple'
type Text (line 15) | interface Text {
type NitroConfig (line 30) | interface NitroConfig {
type Config (line 221) | interface Config
FILE: src/types/preview.ts
type NitroPreviewConfig (line 5) | type NitroPreviewConfig = {
type PreviewConfig (line 16) | interface PreviewConfig
type MediaPreview (line 43) | interface MediaPreview {
FILE: src/types/result.ts
type ResultType (line 7) | type ResultType = 'image' | 'video'
type BaseResult (line 22) | interface BaseResult {
type PickerResult (line 88) | interface PickerResult extends BaseResult {
Condensed preview — 239 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (581K chars).
[
{
"path": ".circleci/config.yml",
"chars": 2150,
"preview": "version: 2.1\n\nexecutors:\n default:\n docker:\n - image: circleci/node:10\n working_directory: ~/project\n\ncomman"
},
{
"path": ".github/FUNDING.yml",
"chars": 667,
"preview": "# These are supported funding model platforms\n\ngithub: baronha\npatreon: baronha\nopen_collective: # Replace with a single"
},
{
"path": ".github/workflows/docs.yml",
"chars": 1235,
"preview": "name: Deploy to GitHub Pages\n\non:\n push:\n branches:\n - main\n paths:\n - 'docs/**'\n \njobs:\n build:\n"
},
{
"path": ".gitignore",
"chars": 749,
"preview": "# OSX\n#\n.DS_Store\n\n# XDE\n.expo/\n\n# VSCode\n.vscode/\njsconfig.json\n\n# Xcode\n#\nbuild/\n*.pbxuser\n!default.pbxuser\n*.mode1v3\n"
},
{
"path": ".npmignore",
"chars": 62,
"preview": "example/\nfiles/\nnode_modules/\nnpm-debug.log\npackage-lock.json\n"
},
{
"path": "CONTRIBUTING.md",
"chars": 8566,
"preview": "# Contributing\n\nWe want this community to be friendly and respectful to each other. Please follow it in all your interac"
},
{
"path": "LICENSE",
"chars": 1066,
"preview": "MIT License\n\nCopyright (c) 2020 Baron Ha.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\n"
},
{
"path": "MultipleImagePicker.podspec",
"chars": 1821,
"preview": "require \"json\"\n\npackage = JSON.parse(File.read(File.join(__dir__, \"package.json\")))\n\nPod::Spec.new do |s|\n s.name "
},
{
"path": "README.md",
"chars": 7097,
"preview": "![Logo][Logo]\n\n<p align=\"center\">\n <img src=\"./files/banner.png\" width=\"100%\">\n</p>\n\n[![iOS][iOS]][iOS-URL] [![Android]"
},
{
"path": "android/CMakeLists.txt",
"chars": 688,
"preview": "project(MultipleImagePicker)\ncmake_minimum_required(VERSION 3.9.0)\n\nset (PACKAGE_NAME MultipleImagePicker)\nset (CMAKE_VE"
},
{
"path": "android/build.gradle",
"chars": 4501,
"preview": "buildscript {\n repositories {\n google()\n mavenCentral()\n }\n\n dependencies {\n classpath \"co"
},
{
"path": "android/gradle.properties",
"chars": 204,
"preview": "MultipleImagePicker_kotlinVersion=1.9.24\nMultipleImagePicker_minSdkVersion=23\nMultipleImagePicker_targetSdkVersion=34\nMu"
},
{
"path": "android/src/main/AndroidManifest.xml",
"chars": 1364,
"preview": "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\" xmlns:tools=\"http://schemas.android.com/tools\">\n "
},
{
"path": "android/src/main/cpp/cpp-adapter.cpp",
"chars": 178,
"preview": "#include <jni.h>\n#include \"MultipleImagePickerOnLoad.hpp\"\n\nJNIEXPORT jint JNICALL JNI_OnLoad(JavaVM* vm, void*) {\n retu"
},
{
"path": "android/src/main/java/com/margelo/nitro/multipleimagepicker/CameraEngine.kt",
"chars": 1785,
"preview": "package com.margelo.nitro.multipleimagepicker\n\nimport android.content.Context\nimport android.graphics.Color\nimport andro"
},
{
"path": "android/src/main/java/com/margelo/nitro/multipleimagepicker/Constant.kt",
"chars": 103,
"preview": "package com.margelo.nitro.multipleimagepicker\n\nobject Constant {\n const val TOOLBAR_TEXT_SIZE = 12\n}"
},
{
"path": "android/src/main/java/com/margelo/nitro/multipleimagepicker/CropEngine.kt",
"chars": 3530,
"preview": "package com.margelo.nitro.multipleimagepicker\n\n\nimport android.content.Context\nimport android.graphics.Bitmap\nimport and"
},
{
"path": "android/src/main/java/com/margelo/nitro/multipleimagepicker/ExoPlayerEngine.kt",
"chars": 4407,
"preview": "package com.margelo.nitro.multipleimagepicker\n\nimport android.content.Context\nimport android.net.Uri\nimport android.view"
},
{
"path": "android/src/main/java/com/margelo/nitro/multipleimagepicker/GlideEngine.kt",
"chars": 2489,
"preview": "package com.margelo.nitro.multipleimagepicker\n\nimport android.content.Context\nimport android.widget.ImageView\nimport com"
},
{
"path": "android/src/main/java/com/margelo/nitro/multipleimagepicker/ImageLoaderUtils.kt",
"chars": 740,
"preview": "package com.margelo.nitro.multipleimagepicker\n\nimport android.app.Activity\nimport android.content.Context\nimport android"
},
{
"path": "android/src/main/java/com/margelo/nitro/multipleimagepicker/LoadingDialog.kt",
"chars": 909,
"preview": "package com.margelo.nitro.multipleimagepicker\n\n\nimport android.app.Dialog\nimport android.content.Context\nimport android."
},
{
"path": "android/src/main/java/com/margelo/nitro/multipleimagepicker/MultipleImagePicker.kt",
"chars": 1271,
"preview": "package com.margelo.nitro.multipleimagepicker\n\nimport com.margelo.nitro.NitroModules\n\n\nclass MultipleImagePicker : Hybri"
},
{
"path": "android/src/main/java/com/margelo/nitro/multipleimagepicker/MultipleImagePickerImp.kt",
"chars": 25112,
"preview": "package com.margelo.nitro.multipleimagepicker\n\nimport android.app.Activity\nimport android.content.Context\nimport android"
},
{
"path": "android/src/main/java/com/margelo/nitro/multipleimagepicker/MultipleImagePickerPackage.java",
"chars": 781,
"preview": "package com.margelo.nitro.multipleimagepicker;\n\n\nimport androidx.annotation.NonNull;\nimport androidx.annotation.Nullable"
},
{
"path": "android/src/main/java/com/margelo/nitro/multipleimagepicker/PictureSelectorEngineImp.kt",
"chars": 2340,
"preview": "package com.margelo.nitro.multipleimagepicker\n\nimport android.util.Log\nimport com.luck.picture.lib.basic.IBridgeLoaderFa"
},
{
"path": "android/src/main/java/com/margelo/nitro/multipleimagepicker/VideoThumbnailEngine.kt",
"chars": 2187,
"preview": "package com.margelo.nitro.multipleimagepicker\n\nimport android.content.Context\nimport android.graphics.Bitmap\nimport andr"
},
{
"path": "android/src/main/res/anim/anim_modal_in.xml",
"chars": 543,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n\n<set xmlns:android=\"http://schemas.android.com/apk/res/android\"\n android:inte"
},
{
"path": "android/src/main/res/drawable/checkbox_selector.xml",
"chars": 300,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<selector xmlns:android=\"http://schemas.android.com/apk/res/android\">\n <item a"
},
{
"path": "android/src/main/res/drawable/complete_button.xml",
"chars": 330,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<shape xmlns:android=\"http://schemas.android.com/apk/res/android\">\n <solid and"
},
{
"path": "android/src/main/res/drawable/ic_checkmark.xml",
"chars": 1005,
"preview": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n android:width=\"24dp\"\n android:height=\"24dp\"\n "
},
{
"path": "android/src/main/res/drawable/ic_down.xml",
"chars": 397,
"preview": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n android:width=\"24dp\"\n android:height=\"24dp\"\n "
},
{
"path": "android/src/main/res/drawable/num_oval.xml",
"chars": 383,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<shape xmlns:android=\"http://schemas.android.com/apk/res/android\"\n android:sha"
},
{
"path": "android/src/main/res/drawable/picture_not_selected.xml",
"chars": 327,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<shape xmlns:android=\"http://schemas.android.com/apk/res/android\"\n android:sha"
},
{
"path": "android/src/main/res/drawable/picture_selector.xml",
"chars": 326,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<selector android:id=\"@+id/picture_selector\" xmlns:android=\"http://schemas.androi"
},
{
"path": "android/src/main/res/drawable/preview_gallery_item.xml",
"chars": 262,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<shape xmlns:android=\"http://schemas.android.com/apk/res/android\">\n <solid and"
},
{
"path": "android/src/main/res/drawable/preview_gallery_white_bg.xml",
"chars": 504,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layer-list xmlns:android=\"http://schemas.android.com/apk/res/android\">\n <item"
},
{
"path": "android/src/main/res/layout/loading_dialog.xml",
"chars": 559,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n andr"
},
{
"path": "android/src/main/res/values/colors.xml",
"chars": 939,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n <color name=\"app_color_grey\">#393a3e</color>\n <color name=\"app_col"
},
{
"path": "android/src/main/res/values/styles.xml",
"chars": 2819,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n\n <style name=\"Base.Theme.NoActionBar\" parent=\"Theme.AppCompat.Lig"
},
{
"path": "babel.config.js",
"chars": 77,
"preview": "module.exports = {\n presets: ['module:metro-react-native-babel-preset'],\n};\n"
},
{
"path": "docs/.gitignore",
"chars": 233,
"preview": "# Dependencies\n/node_modules\n\n# Production\n/build\n\n# Generated files\n.docusaurus\n.cache-loader\n\n# Misc\n.DS_Store\n.env.lo"
},
{
"path": "docs/docs/CAMERA.mdx",
"chars": 5422,
"preview": "---\nid: camera\ntitle: Camera 📸\nsidebar_label: Camera 📸\nslug: /camera\n---\n\nimport ReactPlayer from 'react-player'\n\nThe ca"
},
{
"path": "docs/docs/CONFIG.mdx",
"chars": 6517,
"preview": "---\nid: config\ntitle: Configuration\nsidebar_label: Configuration\nslug: /config\n---\n\n# Configuration\n\n### `selectMode`\n\nM"
},
{
"path": "docs/docs/CROP.mdx",
"chars": 1717,
"preview": "---\nid: crop\ntitle: Crop 🍕\nsidebar_label: Crop 🍕\nslug: /crop\n---\n\n## Usage\n\n```typescript\nimport { openCropper } from '@"
},
{
"path": "docs/docs/GETTING_STARTED.mdx",
"chars": 3245,
"preview": "---\nid: getting-started\ntitle: Getting Started\nsidebar_label: Getting Started\nsidebar_id: getting-started\nslug: /getting"
},
{
"path": "docs/docs/PREVIEW.mdx",
"chars": 2782,
"preview": "---\nid: preview\ntitle: Preview 🎑\nsidebar_label: Preview 🎑\nslug: /preview\n---\n\nimport ReactPlayer from 'react-player'\n\n##"
},
{
"path": "docs/docs/RESULT.mdx",
"chars": 1516,
"preview": "---\nid: result\ntitle: Result\nsidebar_label: Result\nslug: /result\n---\n\nThe result object returned for each selected media"
},
{
"path": "docs/docs/SHOWCASE/index.mdx",
"chars": 931,
"preview": "---\nid: showcase\ntitle: Showcase ✨\nsidebar_label: Showcase ✨\nslug: /showcase\n---\n\nimport style from './showcase.css'\nimp"
},
{
"path": "docs/docs/SHOWCASE/showcase.css",
"chars": 984,
"preview": ".showcaseContainer {\n display: flex;\n /* justify-content: space-between; */\n flex-wrap: wrap;\n gap: 20px;\n}\n\n.showca"
},
{
"path": "docs/docs/SHOWCASE/showcase.json",
"chars": 795,
"preview": "[\n {\n \"banner\": \"https://github.com/user-attachments/assets/84ec6432-1557-4649-965c-6100d9c4c12d\",\n \"title\": \"✨ B"
},
{
"path": "docs/docs/USAGE.mdx",
"chars": 757,
"preview": "---\nid: usage\ntitle: Usage\nsidebar_label: Usage\nslug: /usage\n---\n\nHere is a simple usage of the Multiple Image Picker. <"
},
{
"path": "docs/docs/index.md",
"chars": 4016,
"preview": "---\nid: index\ntitle: Multiple Image Picker | BAO HA\nhide_title: true\nsidebar_label: Multiple Image Picker\ndescription: 🏞"
},
{
"path": "docs/docusaurus.config.ts",
"chars": 4635,
"preview": "import { themes as prismThemes } from 'prism-react-renderer'\nimport type { Config } from '@docusaurus/types'\nimport type"
},
{
"path": "docs/package.json",
"chars": 1365,
"preview": "{\n \"name\": \"docs\",\n \"version\": \"2.2.6\",\n \"private\": true,\n \"scripts\": {\n \"docusaurus\": \"docusaurus\",\n \"start\":"
},
{
"path": "docs/patches/@gorhom+docusaurus-preset+1.0.2.patch",
"chars": 1373,
"preview": "diff --git a/node_modules/@gorhom/docusaurus-preset/lib/index.js b/node_modules/@gorhom/docusaurus-preset/lib/index.js\ni"
},
{
"path": "docs/sidebars.ts",
"chars": 761,
"preview": "import type { SidebarsConfig } from '@docusaurus/plugin-content-docs'\n\n// This runs in Node.js - Don't use client-side c"
},
{
"path": "docs/src/css/custom.css",
"chars": 0,
"preview": ""
},
{
"path": "docs/static/.nojekyll",
"chars": 0,
"preview": ""
},
{
"path": "docs/tsconfig.json",
"chars": 215,
"preview": "{\n // This file is not used in compilation. It is here just for a nice editor experience.\n \"extends\": \"@docusaurus/tsc"
},
{
"path": "example/.gitignore",
"chars": 389,
"preview": "# Learn more https://docs.github.com/en/get-started/getting-started-with-git/ignoring-files\n\n# dependencies\nnode_modules"
},
{
"path": "example/App.tsx",
"chars": 225,
"preview": "import { LogBox, UIManager } from 'react-native'\nimport App from './src'\n\nLogBox.ignoreAllLogs()\n\nUIManager.setLayoutAni"
},
{
"path": "example/Gemfile",
"chars": 319,
"preview": "source 'https://rubygems.org'\n\n# You may use http://rbenv.org/ or https://rvm.io/ to install and use this version\nruby \""
},
{
"path": "example/README.md",
"chars": 250,
"preview": "# Example\n\nThis website is built using [Expo](https://docs.expo.dev/)\n\nhttps://github.com/user-attachments/assets/79580b"
},
{
"path": "example/app.json",
"chars": 1519,
"preview": "{\n \"expo\": {\n \"name\": \"MultipleImagePickerExample\",\n \"slug\": \"MultipleImagePickerExample\",\n \"version\": \"1.0.0\""
},
{
"path": "example/babel.config.js",
"chars": 559,
"preview": "const path = require('path')\nmodule.exports = function (api) {\n api.cache(true)\n return {\n presets: ['babel-preset-"
},
{
"path": "example/metro.config.js",
"chars": 950,
"preview": "// Learn more https://docs.expo.io/guides/customizing-metro\nconst { getDefaultConfig } = require('expo/metro-config')\nco"
},
{
"path": "example/package.json",
"chars": 1145,
"preview": "{\n \"name\": \"multipleimagepickerexample\",\n \"version\": \"2.2.3\",\n \"main\": \"expo/AppEntry.js\",\n \"scripts\": {\n \"start\""
},
{
"path": "example/react-native.config.js",
"chars": 253,
"preview": "const path = require('path')\nconst pkg = require('../package.json')\n\nmodule.exports = {\n project: {\n ios: {\n au"
},
{
"path": "example/src/assets/index.ts",
"chars": 146,
"preview": "const images = {\n logo: require('./logo.png'),\n plusSign: require('./plus-sign.png'),\n check: require('./check.png'),"
},
{
"path": "example/src/common/const.ts",
"chars": 910,
"preview": "import { Platform } from 'react-native'\n\nexport const IS_IOS = Platform.OS === 'ios'\nexport const IS_ANDROID = Platform."
},
{
"path": "example/src/components/BottomSheet.tsx",
"chars": 142,
"preview": "import React from 'react'\nimport { View } from 'react-native'\n\nexport function BottomSheet() {\n return (\n <View>\n "
},
{
"path": "example/src/components/Button.tsx",
"chars": 1242,
"preview": "import React from 'react'\nimport {\n StyleSheet,\n TouchableOpacity,\n TouchableOpacityProps,\n} from 'react-native'\nimpo"
},
{
"path": "example/src/components/CheckBox.tsx",
"chars": 1172,
"preview": "import React from 'react'\nimport {\n Image,\n StyleSheet,\n TouchableOpacity,\n TouchableOpacityProps,\n} from 'react-nat"
},
{
"path": "example/src/components/CodeTag.tsx",
"chars": 747,
"preview": "import React from 'react'\nimport { View } from './View'\nimport { StyleSheet, TextProps, ViewProps } from 'react-native'\n"
},
{
"path": "example/src/components/Container.tsx",
"chars": 635,
"preview": "import React from 'react'\nimport { StyleSheet, ViewProps } from 'react-native'\nimport useTheme from '../hook/useTheme'\ni"
},
{
"path": "example/src/components/CounterView.tsx",
"chars": 1774,
"preview": "import React from 'react'\nimport { View } from './View'\nimport { Row, RowProps } from './Row'\nimport { StyleSheet, Touch"
},
{
"path": "example/src/components/Divider.tsx",
"chars": 400,
"preview": "import React from 'react'\nimport { StyleSheet } from 'react-native'\nimport useTheme from '../hook/useTheme'\nimport { Vie"
},
{
"path": "example/src/components/Input.tsx",
"chars": 674,
"preview": "import React from 'react'\nimport { StyleSheet, TextInput, TextInputProps } from 'react-native'\nimport useTheme from '../"
},
{
"path": "example/src/components/Row.tsx",
"chars": 545,
"preview": "import React from 'react'\nimport { StyleSheet, ViewStyle } from 'react-native'\nimport { View, ViewProps } from './View'\n"
},
{
"path": "example/src/components/SectionView.tsx",
"chars": 1924,
"preview": "import React from 'react'\nimport { Row } from './Row'\nimport { CodeTag } from './CodeTag'\nimport { View } from './View'\n"
},
{
"path": "example/src/components/SegmentControl.tsx",
"chars": 251,
"preview": "import React from 'react'\nimport SegmentedControl, {\n SegmentedControlProps,\n} from '@react-native-segmented-control/se"
},
{
"path": "example/src/components/Text.tsx",
"chars": 329,
"preview": "import React from 'react'\nimport { Text as RNText, TextProps } from 'react-native'\nimport useTheme from '../hook/useThem"
},
{
"path": "example/src/components/View.tsx",
"chars": 582,
"preview": "import React from 'react'\nimport { View as RNView, ViewProps as RNViewProps } from 'react-native'\nimport useTheme from '"
},
{
"path": "example/src/components/index.tsx",
"chars": 317,
"preview": "export * from './Container'\nexport * from './Button'\nexport * from './SegmentControl'\nexport * from './Text'\nexport * fr"
},
{
"path": "example/src/hook/context.ts",
"chars": 390,
"preview": "import { createContext, useContext } from 'react'\nimport {\n Config,\n defaultOptions,\n} from '@baronha/react-native-mul"
},
{
"path": "example/src/hook/index.ts",
"chars": 27,
"preview": "export * from './useTheme'\n"
},
{
"path": "example/src/hook/useTheme.ts",
"chars": 216,
"preview": "import { useColorScheme } from 'react-native'\nimport * as color from '../theme/color'\n\nexport default function useTheme("
},
{
"path": "example/src/index.tsx",
"chars": 22010,
"preview": "import React, { useCallback, useMemo, useState } from 'react'\nimport {\n ActionSheetIOS,\n Alert,\n Appearance,\n ColorS"
},
{
"path": "example/src/theme/color.ts",
"chars": 465,
"preview": "export const light = {\n background: '#ffffff',\n foreground: '#000000',\n primary: '#000000',\n\n // background level\n "
},
{
"path": "example/src/theme/size.ts",
"chars": 190,
"preview": "import { Dimensions } from 'react-native'\n\nexport const { width: WIDTH, height: HEIGHT } = Dimensions.get('window')\nexpo"
},
{
"path": "example/tsconfig.json",
"chars": 81,
"preview": "{\n \"compilerOptions\": {\n \"outDir\": \"./lib\"\n },\n \"extends\": \"../tsconfig\"\n}\n"
},
{
"path": "ios/Assets.swift",
"chars": 593,
"preview": "//\n// Assets.swift\n// Pods\n//\n// Created by BAO HA on 4/12/24.\n//\n\nimport UIKit\n\nclass Assets {\n class func bundle"
},
{
"path": "ios/Assets.xcassets/Contents.json",
"chars": 62,
"preview": "{\n \"info\" : {\n \"version\" : 1,\n \"author\" : \"xcode\"\n }\n}"
},
{
"path": "ios/Assets.xcassets/close.imageset/Contents.json",
"chars": 303,
"preview": "{\n \"images\" : [\n {\n \"filename\" : \"close.png\",\n \"idiom\" : \"universal\",\n \"scale\" : \"1x\"\n },\n {\n "
},
{
"path": "ios/ErrorCode.swift",
"chars": 113,
"preview": "//\n// ErrorCode.swift\n// Pods\n//\n// Created by BAO HA on 3/12/24.\n//\n\n// enum ErrorCode: Int, Error {\n//\n// }\n"
},
{
"path": "ios/HybridMultipleImagePicker+Camera.swift",
"chars": 5042,
"preview": "//\n// HybridMultipleImagePicker+Camera.swift\n// Pods\n//\n// Created by BAO HA on 13/12/24.\n//\n\nimport AVFoundation\nimp"
},
{
"path": "ios/HybridMultipleImagePicker+Config.swift",
"chars": 8763,
"preview": "//\n// HybridMultipleImagePicker+Config.swift\n// react-native-multiple-image-picker\n//\n// Created by BAO HA on 15/10/2"
},
{
"path": "ios/HybridMultipleImagePicker+Crop.swift",
"chars": 3322,
"preview": "//\n// HybridMultipleImagePicker+Crop.swift\n// Pods\n//\n// Created by BAO HA on 9/12/24.\n//\n\nimport HXPhotoPicker\n\nexte"
},
{
"path": "ios/HybridMultipleImagePicker+Preview.swift",
"chars": 2535,
"preview": "//\n// HybridMultipleImagePicker+Preview.swift\n// Pods\n//\n// Created by BAO HA on 11/12/24.\n//\n\nimport HXPhotoPicker\n\n"
},
{
"path": "ios/HybridMultipleImagePicker+Result.swift",
"chars": 1504,
"preview": "//\n// HybridMultipleImagePicker+Result.swift\n// Pods\n//\n// Created by BAO HA on 24/10/24.\n//\n\nimport HXPhotoPicker\n\ne"
},
{
"path": "ios/HybridMultipleImagePicker.swift",
"chars": 3590,
"preview": "//\n// HybridMultipleImagePicker.swift\n//\n// Created by Marc Rousavy on 18.07.24.\n//\n\nimport Foundation\nimport HXPhotoP"
},
{
"path": "ios/MultipleImagePickerOnLoad.mm",
"chars": 476,
"preview": "//\n// MultipleImagePickerOnLoad.mm\n// MultipleImagePicker\n//\n// Created by Marc Rousavy on 22.07.24.\n//\n\n#import <Fou"
},
{
"path": "ios/PHAsset+Thumbnail.swift",
"chars": 1383,
"preview": "//\n// PHAsset+Thumbnail.swift\n// Pods\n//\n// Created by BAO HA on 24/10/24.\n//\n\nimport Photos\n\nextension PHAsset {\n "
},
{
"path": "ios/PhotoCancelItem.swift",
"chars": 1375,
"preview": "//\n// PhotoCancelItem.swift\n// Pods\n//\n// Created by BAO HA on 4/12/24.\n//\n\nimport HXPhotoPicker\nimport UIKit\n\nextens"
},
{
"path": "ios/TopViewController.swift",
"chars": 373,
"preview": "//\n// TopViewController.swift\n// Pods\n//\n// Created by BAO HA on 11/12/24.\n//\n\nimport UIKit\n\nfunc getTopViewControlle"
},
{
"path": "ios/UIColor+Hex.swift",
"chars": 829,
"preview": "//\n// UIColor+Hex.swift\n// react-native-multiple-image-picker\n//\n// Created by BAO HA on 15/10/2024.\n//\n\nimport UIKit"
},
{
"path": "ios/UIColor+React.swift",
"chars": 185,
"preview": "//\n// UIColor+React.swift\n// Pods\n//\n// Created by BAO HA on 16/10/24.\n//\n\nimport React\nimport UIKit\n\nfunc getReactCo"
},
{
"path": "ios/UIImage.swift",
"chars": 744,
"preview": "//\n// UIImage.swift\n// Pods\n//\n// Created by BAO HA on 16/12/24.\n//\n\nextension UIImage {\n func getPath(fileName na"
},
{
"path": "ios/URL+Mime.swift",
"chars": 1061,
"preview": "//\n// URL+Mime.swift\n// Pods\n//\n// Created by BAO HA on 23/10/24.\n//\n\nimport Foundation\nimport MobileCoreServices\nimp"
},
{
"path": "ios/Utils.swift",
"chars": 933,
"preview": "//\n// Utils.swift\n// Pods\n//\n// Created by BAO HA on 11/12/24.\n//\n\nimport MobileCoreServices\nimport UniformTypeIdenti"
},
{
"path": "nitro.json",
"chars": 458,
"preview": "{\n \"$schema\": \"https://nitro.margelo.com/nitro.schema.json\",\n \"cxxNamespace\": [\"multipleimagepicker\"],\n \"ios\": {\n "
},
{
"path": "nitrogen/generated/.gitattributes",
"chars": 21,
"preview": "* linguist-generated\n"
},
{
"path": "nitrogen/generated/android/MultipleImagePicker+autolinking.cmake",
"chars": 2864,
"preview": "#\n# MultipleImagePicker+autolinking.cmake\n# This file was generated by nitrogen. DO NOT MODIFY THIS FILE.\n# https://gith"
},
{
"path": "nitrogen/generated/android/MultipleImagePicker+autolinking.gradle",
"chars": 712,
"preview": "///\n/// MultipleImagePicker+autolinking.gradle\n/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.\n/// htt"
},
{
"path": "nitrogen/generated/android/MultipleImagePickerOnLoad.cpp",
"chars": 2169,
"preview": "///\n/// MultipleImagePickerOnLoad.cpp\n/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.\n/// https://gith"
},
{
"path": "nitrogen/generated/android/MultipleImagePickerOnLoad.hpp",
"chars": 759,
"preview": "///\n/// MultipleImagePickerOnLoad.hpp\n/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.\n/// https://gith"
},
{
"path": "nitrogen/generated/android/c++/JCameraDevice.hpp",
"chars": 1888,
"preview": "///\n/// JCameraDevice.hpp\n/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.\n/// https://github.com/mrous"
},
{
"path": "nitrogen/generated/android/c++/JCameraResult.hpp",
"chars": 3462,
"preview": "///\n/// JCameraResult.hpp\n/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.\n/// https://github.com/mrous"
},
{
"path": "nitrogen/generated/android/c++/JCropRatio.hpp",
"chars": 1906,
"preview": "///\n/// JCropRatio.hpp\n/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.\n/// https://github.com/mrousavy"
},
{
"path": "nitrogen/generated/android/c++/JCropResult.hpp",
"chars": 1794,
"preview": "///\n/// JCropResult.hpp\n/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.\n/// https://github.com/mrousav"
},
{
"path": "nitrogen/generated/android/c++/JFunc_void_CameraResult.hpp",
"chars": 2605,
"preview": "///\n/// JFunc_void_CameraResult.hpp\n/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.\n/// https://github"
},
{
"path": "nitrogen/generated/android/c++/JFunc_void_CropResult.hpp",
"chars": 2480,
"preview": "///\n/// JFunc_void_CropResult.hpp\n/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.\n/// https://github.c"
},
{
"path": "nitrogen/generated/android/c++/JFunc_void_double.hpp",
"chars": 2207,
"preview": "///\n/// JFunc_void_double.hpp\n/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.\n/// https://github.com/m"
},
{
"path": "nitrogen/generated/android/c++/JFunc_void_std__vector_PickerResult_.hpp",
"chars": 3637,
"preview": "///\n/// JFunc_void_std__vector_PickerResult_.hpp\n/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.\n/// h"
},
{
"path": "nitrogen/generated/android/c++/JHybridMultipleImagePickerSpec.cpp",
"chars": 8100,
"preview": "///\n/// JHybridMultipleImagePickerSpec.cpp\n/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.\n/// https:/"
},
{
"path": "nitrogen/generated/android/c++/JHybridMultipleImagePickerSpec.hpp",
"chars": 2566,
"preview": "///\n/// HybridMultipleImagePickerSpec.hpp\n/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.\n/// https://"
},
{
"path": "nitrogen/generated/android/c++/JLanguage.hpp",
"chars": 3565,
"preview": "///\n/// JLanguage.hpp\n/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.\n/// https://github.com/mrousavy/"
},
{
"path": "nitrogen/generated/android/c++/JMediaPreview.hpp",
"chars": 2625,
"preview": "///\n/// JMediaPreview.hpp\n/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.\n/// https://github.com/mrous"
},
{
"path": "nitrogen/generated/android/c++/JMediaType.hpp",
"chars": 2005,
"preview": "///\n/// JMediaType.hpp\n/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.\n/// https://github.com/mrousavy"
},
{
"path": "nitrogen/generated/android/c++/JNitroCameraConfig.hpp",
"chars": 4335,
"preview": "///\n/// JNitroCameraConfig.hpp\n/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.\n/// https://github.com/"
},
{
"path": "nitrogen/generated/android/c++/JNitroConfig.hpp",
"chars": 11917,
"preview": "///\n/// JNitroConfig.hpp\n/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.\n/// https://github.com/mrousa"
},
{
"path": "nitrogen/generated/android/c++/JNitroCropConfig.hpp",
"chars": 4028,
"preview": "///\n/// JNitroCropConfig.hpp\n/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.\n/// https://github.com/mr"
},
{
"path": "nitrogen/generated/android/c++/JNitroPreviewConfig.hpp",
"chars": 2031,
"preview": "///\n/// JNitroPreviewConfig.hpp\n/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.\n/// https://github.com"
},
{
"path": "nitrogen/generated/android/c++/JPickerCameraConfig.hpp",
"chars": 2221,
"preview": "///\n/// JPickerCameraConfig.hpp\n/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.\n/// https://github.com"
},
{
"path": "nitrogen/generated/android/c++/JPickerCropConfig.hpp",
"chars": 3438,
"preview": "///\n/// JPickerCropConfig.hpp\n/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.\n/// https://github.com/m"
},
{
"path": "nitrogen/generated/android/c++/JPickerResult.hpp",
"chars": 5604,
"preview": "///\n/// JPickerResult.hpp\n/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.\n/// https://github.com/mrous"
},
{
"path": "nitrogen/generated/android/c++/JPresentation.hpp",
"chars": 1948,
"preview": "///\n/// JPresentation.hpp\n/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.\n/// https://github.com/mrous"
},
{
"path": "nitrogen/generated/android/c++/JResultType.hpp",
"chars": 1860,
"preview": "///\n/// JResultType.hpp\n/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.\n/// https://github.com/mrousav"
},
{
"path": "nitrogen/generated/android/c++/JSelectBoxStyle.hpp",
"chars": 1924,
"preview": "///\n/// JSelectBoxStyle.hpp\n/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.\n/// https://github.com/mro"
},
{
"path": "nitrogen/generated/android/c++/JSelectMode.hpp",
"chars": 1876,
"preview": "///\n/// JSelectMode.hpp\n/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.\n/// https://github.com/mrousav"
},
{
"path": "nitrogen/generated/android/c++/JText.hpp",
"chars": 2521,
"preview": "///\n/// JText.hpp\n/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.\n/// https://github.com/mrousavy/nitr"
},
{
"path": "nitrogen/generated/android/c++/JTheme.hpp",
"chars": 1776,
"preview": "///\n/// JTheme.hpp\n/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.\n/// https://github.com/mrousavy/nit"
},
{
"path": "nitrogen/generated/android/kotlin/com/margelo/nitro/multipleimagepicker/CameraDevice.kt",
"chars": 492,
"preview": "///\n/// CameraDevice.kt\n/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.\n/// https://github.com/mrousav"
},
{
"path": "nitrogen/generated/android/kotlin/com/margelo/nitro/multipleimagepicker/CameraResult.kt",
"chars": 698,
"preview": "///\n/// CameraResult.kt\n/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.\n/// https://github.com/mrousav"
},
{
"path": "nitrogen/generated/android/kotlin/com/margelo/nitro/multipleimagepicker/CropRatio.kt",
"chars": 581,
"preview": "///\n/// CropRatio.kt\n/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.\n/// https://github.com/mrousavy/n"
},
{
"path": "nitrogen/generated/android/kotlin/com/margelo/nitro/multipleimagepicker/CropResult.kt",
"chars": 582,
"preview": "///\n/// CropResult.kt\n/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.\n/// https://github.com/mrousavy/"
},
{
"path": "nitrogen/generated/android/kotlin/com/margelo/nitro/multipleimagepicker/Func_void_CameraResult.kt",
"chars": 2319,
"preview": "///\n/// Func_void_CameraResult.kt\n/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.\n/// https://github.c"
},
{
"path": "nitrogen/generated/android/kotlin/com/margelo/nitro/multipleimagepicker/Func_void_CropResult.kt",
"chars": 2293,
"preview": "///\n/// Func_void_CropResult.kt\n/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.\n/// https://github.com"
},
{
"path": "nitrogen/generated/android/kotlin/com/margelo/nitro/multipleimagepicker/Func_void_double.kt",
"chars": 2232,
"preview": "///\n/// Func_void_double.kt\n/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.\n/// https://github.com/mro"
},
{
"path": "nitrogen/generated/android/kotlin/com/margelo/nitro/multipleimagepicker/Func_void_std__vector_PickerResult_.kt",
"chars": 2443,
"preview": "///\n/// Func_void_std__vector_PickerResult_.kt\n/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.\n/// htt"
},
{
"path": "nitrogen/generated/android/kotlin/com/margelo/nitro/multipleimagepicker/HybridMultipleImagePickerSpec.kt",
"chars": 2804,
"preview": "///\n/// HybridMultipleImagePickerSpec.kt\n/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.\n/// https://g"
},
{
"path": "nitrogen/generated/android/kotlin/com/margelo/nitro/multipleimagepicker/Language.kt",
"chars": 555,
"preview": "///\n/// Language.kt\n/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.\n/// https://github.com/mrousavy/ni"
},
{
"path": "nitrogen/generated/android/kotlin/com/margelo/nitro/multipleimagepicker/MediaPreview.kt",
"chars": 630,
"preview": "///\n/// MediaPreview.kt\n/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.\n/// https://github.com/mrousav"
},
{
"path": "nitrogen/generated/android/kotlin/com/margelo/nitro/multipleimagepicker/MediaType.kt",
"chars": 491,
"preview": "///\n/// MediaType.kt\n/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.\n/// https://github.com/mrousavy/n"
},
{
"path": "nitrogen/generated/android/kotlin/com/margelo/nitro/multipleimagepicker/MultipleImagePickerOnLoad.kt",
"chars": 1118,
"preview": "///\n/// MultipleImagePickerOnLoad.kt\n/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.\n/// https://githu"
},
{
"path": "nitrogen/generated/android/kotlin/com/margelo/nitro/multipleimagepicker/NitroCameraConfig.kt",
"chars": 798,
"preview": "///\n/// NitroCameraConfig.kt\n/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.\n/// https://github.com/mr"
},
{
"path": "nitrogen/generated/android/kotlin/com/margelo/nitro/multipleimagepicker/NitroConfig.kt",
"chars": 1380,
"preview": "///\n/// NitroConfig.kt\n/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.\n/// https://github.com/mrousavy"
},
{
"path": "nitrogen/generated/android/kotlin/com/margelo/nitro/multipleimagepicker/NitroCropConfig.kt",
"chars": 714,
"preview": "///\n/// NitroCropConfig.kt\n/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.\n/// https://github.com/mrou"
},
{
"path": "nitrogen/generated/android/kotlin/com/margelo/nitro/multipleimagepicker/NitroPreviewConfig.kt",
"chars": 598,
"preview": "///\n/// NitroPreviewConfig.kt\n/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.\n/// https://github.com/m"
},
{
"path": "nitrogen/generated/android/kotlin/com/margelo/nitro/multipleimagepicker/PickerCameraConfig.kt",
"chars": 613,
"preview": "///\n/// PickerCameraConfig.kt\n/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.\n/// https://github.com/m"
},
{
"path": "nitrogen/generated/android/kotlin/com/margelo/nitro/multipleimagepicker/PickerCropConfig.kt",
"chars": 653,
"preview": "///\n/// PickerCropConfig.kt\n/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.\n/// https://github.com/mro"
},
{
"path": "nitrogen/generated/android/kotlin/com/margelo/nitro/multipleimagepicker/PickerResult.kt",
"chars": 917,
"preview": "///\n/// PickerResult.kt\n/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.\n/// https://github.com/mrousav"
},
{
"path": "nitrogen/generated/android/kotlin/com/margelo/nitro/multipleimagepicker/Presentation.kt",
"chars": 507,
"preview": "///\n/// Presentation.kt\n/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.\n/// https://github.com/mrousav"
},
{
"path": "nitrogen/generated/android/kotlin/com/margelo/nitro/multipleimagepicker/ResultType.kt",
"chars": 487,
"preview": "///\n/// ResultType.kt\n/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.\n/// https://github.com/mrousavy/"
},
{
"path": "nitrogen/generated/android/kotlin/com/margelo/nitro/multipleimagepicker/SelectBoxStyle.kt",
"chars": 499,
"preview": "///\n/// SelectBoxStyle.kt\n/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.\n/// https://github.com/mrous"
},
{
"path": "nitrogen/generated/android/kotlin/com/margelo/nitro/multipleimagepicker/SelectMode.kt",
"chars": 491,
"preview": "///\n/// SelectMode.kt\n/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.\n/// https://github.com/mrousavy/"
},
{
"path": "nitrogen/generated/android/kotlin/com/margelo/nitro/multipleimagepicker/Text.kt",
"chars": 596,
"preview": "///\n/// Text.kt\n/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.\n/// https://github.com/mrousavy/nitro\n"
},
{
"path": "nitrogen/generated/android/kotlin/com/margelo/nitro/multipleimagepicker/Theme.kt",
"chars": 471,
"preview": "///\n/// Theme.kt\n/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.\n/// https://github.com/mrousavy/nitro"
},
{
"path": "nitrogen/generated/ios/MultipleImagePicker+autolinking.rb",
"chars": 2027,
"preview": "#\n# MultipleImagePicker+autolinking.rb\n# This file was generated by nitrogen. DO NOT MODIFY THIS FILE.\n# https://github."
},
{
"path": "nitrogen/generated/ios/MultipleImagePicker-Swift-Cxx-Bridge.cpp",
"chars": 3530,
"preview": "///\n/// MultipleImagePicker-Swift-Cxx-Bridge.cpp\n/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.\n/// h"
},
{
"path": "nitrogen/generated/ios/MultipleImagePicker-Swift-Cxx-Bridge.hpp",
"chars": 12559,
"preview": "///\n/// MultipleImagePicker-Swift-Cxx-Bridge.hpp\n/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.\n/// h"
},
{
"path": "nitrogen/generated/ios/MultipleImagePicker-Swift-Cxx-Umbrella.hpp",
"chars": 5218,
"preview": "///\n/// MultipleImagePicker-Swift-Cxx-Umbrella.hpp\n/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.\n///"
},
{
"path": "nitrogen/generated/ios/MultipleImagePickerAutolinking.mm",
"chars": 978,
"preview": "///\n/// MultipleImagePickerAutolinking.mm\n/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.\n/// https://"
},
{
"path": "nitrogen/generated/ios/MultipleImagePickerAutolinking.swift",
"chars": 1131,
"preview": "///\n/// MultipleImagePickerAutolinking.swift\n/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.\n/// https"
},
{
"path": "nitrogen/generated/ios/c++/HybridMultipleImagePickerSpecSwift.cpp",
"chars": 350,
"preview": "///\n/// HybridMultipleImagePickerSpecSwift.cpp\n/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.\n/// htt"
},
{
"path": "nitrogen/generated/ios/c++/HybridMultipleImagePickerSpecSwift.hpp",
"chars": 6971,
"preview": "///\n/// HybridMultipleImagePickerSpecSwift.hpp\n/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.\n/// htt"
},
{
"path": "nitrogen/generated/ios/swift/CameraDevice.swift",
"chars": 882,
"preview": "///\n/// CameraDevice.swift\n/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.\n/// https://github.com/mrou"
},
{
"path": "nitrogen/generated/ios/swift/CameraResult.swift",
"chars": 4366,
"preview": "///\n/// CameraResult.swift\n/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.\n/// https://github.com/mrou"
},
{
"path": "nitrogen/generated/ios/swift/CropRatio.swift",
"chars": 1691,
"preview": "///\n/// CropRatio.swift\n/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.\n/// https://github.com/mrousav"
},
{
"path": "nitrogen/generated/ios/swift/CropResult.swift",
"chars": 1121,
"preview": "///\n/// CropResult.swift\n/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.\n/// https://github.com/mrousa"
},
{
"path": "nitrogen/generated/ios/swift/Func_void_CameraResult.swift",
"chars": 1437,
"preview": "///\n/// Func_void_CameraResult.swift\n/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.\n/// https://githu"
},
{
"path": "nitrogen/generated/ios/swift/Func_void_CropResult.swift",
"chars": 1417,
"preview": "///\n/// Func_void_CropResult.swift\n/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.\n/// https://github."
},
{
"path": "nitrogen/generated/ios/swift/Func_void_double.swift",
"chars": 1372,
"preview": "///\n/// Func_void_double.swift\n/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.\n/// https://github.com/"
},
{
"path": "nitrogen/generated/ios/swift/Func_void_std__vector_PickerResult_.swift",
"chars": 1567,
"preview": "///\n/// Func_void_std__vector_PickerResult_.swift\n/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.\n/// "
},
{
"path": "nitrogen/generated/ios/swift/HybridMultipleImagePickerSpec.swift",
"chars": 2170,
"preview": "///\n/// HybridMultipleImagePickerSpec.swift\n/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.\n/// https:"
},
{
"path": "nitrogen/generated/ios/swift/HybridMultipleImagePickerSpec_cxx.swift",
"chars": 7649,
"preview": "///\n/// HybridMultipleImagePickerSpec_cxx.swift\n/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.\n/// ht"
},
{
"path": "nitrogen/generated/ios/swift/Language.swift",
"chars": 1678,
"preview": "///\n/// Language.swift\n/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.\n/// https://github.com/mrousavy"
},
{
"path": "nitrogen/generated/ios/swift/MediaPreview.swift",
"chars": 3161,
"preview": "///\n/// MediaPreview.swift\n/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.\n/// https://github.com/mrou"
},
{
"path": "nitrogen/generated/ios/swift/MediaType.swift",
"chars": 941,
"preview": "///\n/// MediaType.swift\n/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.\n/// https://github.com/mrousav"
},
{
"path": "nitrogen/generated/ios/swift/NitroCameraConfig.swift",
"chars": 4604,
"preview": "///\n/// NitroCameraConfig.swift\n/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.\n/// https://github.com"
},
{
"path": "nitrogen/generated/ios/swift/NitroConfig.swift",
"chars": 15098,
"preview": "///\n/// NitroConfig.swift\n/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.\n/// https://github.com/mrous"
},
{
"path": "nitrogen/generated/ios/swift/NitroCropConfig.swift",
"chars": 3635,
"preview": "///\n/// NitroCropConfig.swift\n/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.\n/// https://github.com/m"
},
{
"path": "nitrogen/generated/ios/swift/NitroPreviewConfig.swift",
"chars": 1415,
"preview": "///\n/// NitroPreviewConfig.swift\n/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.\n/// https://github.co"
},
{
"path": "nitrogen/generated/ios/swift/PickerCameraConfig.swift",
"chars": 1928,
"preview": "///\n/// PickerCameraConfig.swift\n/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.\n/// https://github.co"
},
{
"path": "nitrogen/generated/ios/swift/PickerCropConfig.swift",
"chars": 3209,
"preview": "///\n/// PickerCropConfig.swift\n/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.\n/// https://github.com/"
},
{
"path": "nitrogen/generated/ios/swift/PickerResult.swift",
"chars": 7657,
"preview": "///\n/// PickerResult.swift\n/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.\n/// https://github.com/mrou"
},
{
"path": "nitrogen/generated/ios/swift/Presentation.swift",
"chars": 942,
"preview": "///\n/// Presentation.swift\n/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.\n/// https://github.com/mrou"
},
{
"path": "nitrogen/generated/ios/swift/ResultType.swift",
"chars": 872,
"preview": "///\n/// ResultType.swift\n/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.\n/// https://github.com/mrousa"
},
{
"path": "nitrogen/generated/ios/swift/SelectBoxStyle.swift",
"chars": 900,
"preview": "///\n/// SelectBoxStyle.swift\n/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.\n/// https://github.com/mr"
},
{
"path": "nitrogen/generated/ios/swift/SelectMode.swift",
"chars": 888,
"preview": "///\n/// SelectMode.swift\n/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.\n/// https://github.com/mrousa"
}
]
// ... and 39 more files (download for full content)
About this extraction
This page contains the full source code of the baronha/react-native-multiple-image-picker GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 239 files (528.8 KB), approximately 137.6k tokens, and a symbol index with 617 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.