Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b3c6210ffc | ||
|
|
d3df63fbb2 | ||
|
|
057c6bd978 | ||
|
|
3fbc237fd6 | ||
|
|
6603ab3215 | ||
|
|
9f49f02401 | ||
|
|
14dc560092 | ||
|
|
2dcaff6772 | ||
|
|
68190997b6 | ||
|
|
74f55fc342 | ||
|
|
e32378e8ed | ||
|
|
764a04710b | ||
|
|
837602af36 | ||
|
|
af22acc509 | ||
|
|
994fadc8dd | ||
|
|
987b109e46 | ||
|
|
226b2a6412 | ||
|
|
d1a2929130 | ||
|
|
a04de8a0e0 | ||
|
|
20a4ecf8a8 | ||
|
|
9e8a90d523 | ||
|
|
9c79b293d8 | ||
|
|
77eb67c5b6 | ||
|
|
190c489b76 | ||
|
|
6c898afd0e | ||
|
|
b55b04d5fd | ||
|
|
0c7b413a76 | ||
|
|
731c5b07b4 | ||
|
|
96c72dda46 | ||
|
|
29ee948c98 | ||
|
|
2fc8f5a3bc | ||
|
|
7a570fb05a | ||
|
|
aed09045d6 | ||
|
|
ad810c8b11 | ||
|
|
e445cb4bc8 | ||
|
|
9b22a71343 | ||
|
|
e49a241243 | ||
|
|
2e06dcae54 | ||
|
|
a24ea1df58 | ||
|
|
50646306c5 | ||
|
|
6fbb2192ad | ||
|
|
7c3cda4f79 | ||
|
|
a78e569f54 | ||
|
|
3fee1c0e6e | ||
|
|
31aee40ee3 | ||
|
|
21c49280d4 | ||
|
|
ce1a818564 | ||
|
|
241d378a54 | ||
|
|
d1bf616248 | ||
|
|
a99c60efd5 | ||
|
|
331ecb163f | ||
|
|
1003ddb2ec | ||
|
|
5ca4e44a49 | ||
|
|
4103b4eb7d | ||
|
|
f8023bf04c | ||
|
|
1b3e87f930 | ||
|
|
5e3ed6d5e4 | ||
|
|
f46f340623 | ||
|
|
99f18da4ed | ||
|
|
999cc00275 | ||
|
|
363d36b0bb | ||
|
|
37d11f1867 | ||
|
|
7ecaaf5bd9 | ||
|
|
9ff7299176 | ||
|
|
f1bd9a7e27 | ||
|
|
83b52a3b61 | ||
|
|
16dfad4dc8 | ||
|
|
0f6493e28d | ||
|
|
0d55f9c8c9 | ||
|
|
fa85f7cf36 | ||
|
|
28997c1062 | ||
|
|
d6050beb2a | ||
|
|
5f4e90059e | ||
|
|
c3a375b292 | ||
|
|
1648e8598b | ||
|
|
e2d2b27494 | ||
|
|
ff8b167764 | ||
|
|
eee366bebc | ||
|
|
72fa3e14ef | ||
|
|
6324eb041b | ||
|
|
480ec19161 | ||
|
|
39a9e63fe9 | ||
|
|
7ffc38a808 | ||
|
|
97dcf1aca6 | ||
|
|
4dcc613a70 | ||
|
|
b07ab9e848 | ||
|
|
7411365343 | ||
|
|
e6e8745f05 | ||
|
|
e9f737cfeb | ||
|
|
b0cfebadb4 | ||
|
|
eb957dec79 | ||
|
|
eb4927760b | ||
|
|
3719d67596 | ||
|
|
df9ac710d5 | ||
|
|
73109da98d | ||
|
|
c904bc6a5f | ||
|
|
1374ab2bf4 | ||
|
|
429dcdc1d0 | ||
|
|
5de4ae3e61 | ||
|
|
537afa4c7d |
No files matched your search
@@ -0,0 +1 @@
|
||||
/* @EvanBacon
|
||||
@@ -1,4 +1,4 @@
|
||||
name: "\U0001F41B Expo Config Plugin Bug Report"
|
||||
name: 🐛 Expo Config Plugin Bug Report
|
||||
description: Report a reproducible bug with one of the Expo Config Plugins.
|
||||
labels: bug
|
||||
body:
|
||||
@@ -36,11 +36,13 @@ body:
|
||||
- '@config-plugins/react-native-adjust'
|
||||
- '@config-plugins/react-native-ble-plx'
|
||||
- '@config-plugins/react-native-blob-util'
|
||||
- '@config-plugins/react-native-branch'
|
||||
- '@config-plugins/react-native-callkeep'
|
||||
- '@config-plugins/react-native-dynamic-app-icon'
|
||||
- '@config-plugins/react-native-google-cast'
|
||||
- '@config-plugins/react-native-pdf'
|
||||
- '@config-plugins/react-native-quick-actions'
|
||||
- '@config-plugins/react-native-siri-shortcut'
|
||||
- '@config-plugins/react-native-webrtc'
|
||||
validations:
|
||||
required: true
|
||||
|
||||
@@ -1,44 +1,47 @@
|
||||
---
|
||||
blank_issues_enabled: false
|
||||
contact_links:
|
||||
- name: "\U0001F914 Question about an Expo Config Plugin"
|
||||
- name: 🤔 Question about an Expo Config Plugin
|
||||
about: >-
|
||||
If you have a question about an Expo Config Plugin, please ask it on the
|
||||
forums, discord, Twitter, or Stack Overflow.
|
||||
url: 'https://forums.expo.io/'
|
||||
url: https://forums.expo.io/
|
||||
- about: E2E tests and automation for mobile
|
||||
name: "\U0001F4E6 detox issues"
|
||||
url: 'https://github.com/wix/Detox/issues'
|
||||
name: 📦 detox issues
|
||||
url: https://github.com/wix/Detox/issues
|
||||
- about: FFmpeg Kit for React Native
|
||||
name: "\U0001F4E6 ffmpeg-kit-react-native issues"
|
||||
url: 'https://github.com/tanersener/ffmpeg-kit/issues'
|
||||
name: 📦 ffmpeg-kit-react-native issues
|
||||
url: https://github.com/tanersener/ffmpeg-kit/issues
|
||||
- about: Adjust React Native SDK
|
||||
name: "\U0001F4E6 react-native-adjust issues"
|
||||
url: 'https://github.com/adjust/react_native_sdk/issues'
|
||||
name: 📦 react-native-adjust issues
|
||||
url: https://github.com/adjust/react_native_sdk/issues
|
||||
- about: React Native Bluetooth Low Energy library
|
||||
name: "\U0001F4E6 react-native-ble-plx issues"
|
||||
url: 'https://github.com/Polidea/react-native-ble-plx/issues'
|
||||
name: 📦 react-native-ble-plx issues
|
||||
url: https://github.com/Polidea/react-native-ble-plx/issues
|
||||
- about: >-
|
||||
A module provides upload, download, and files access API. Supports file
|
||||
stream read/write for process large files.
|
||||
name: "\U0001F4E6 react-native-blob-util issues"
|
||||
url: 'https://github.com/RonRadtke/react-native-blob-util/issues'
|
||||
name: 📦 react-native-blob-util issues
|
||||
url: https://github.com/RonRadtke/react-native-blob-util/issues
|
||||
- about: iOS 10 CallKit and Android ConnectionService Framework For React Native
|
||||
name: "\U0001F4E6 react-native-callkeep issues"
|
||||
url: 'https://github.com/react-native-webrtc/react-native-callkeep/issues'
|
||||
name: 📦 react-native-callkeep issues
|
||||
url: https://github.com/react-native-webrtc/react-native-callkeep/issues
|
||||
- about: Programmatically change the app icon in React Native.
|
||||
name: "\U0001F4E6 react-native-dynamic-app-icon issues"
|
||||
url: 'https://github.com/idearockers/react-native-dynamic-app-icon/issues'
|
||||
name: 📦 react-native-dynamic-app-icon issues
|
||||
url: https://github.com/idearockers/react-native-dynamic-app-icon/issues
|
||||
- about: React Native wrapper for the Google Cast SDK for iOS and Android
|
||||
name: "\U0001F4E6 react-native-google-cast issues"
|
||||
name: 📦 react-native-google-cast issues
|
||||
url: >-
|
||||
https://github.com/react-native-google-cast/react-native-google-cast/issues
|
||||
- about: 'A react native PDF view component, support ios and android platform'
|
||||
name: "\U0001F4E6 react-native-pdf issues"
|
||||
url: 'https://github.com/wonday/react-native-pdf/issues'
|
||||
- about: A react native PDF view component, support ios and android platform
|
||||
name: 📦 react-native-pdf issues
|
||||
url: https://github.com/wonday/react-native-pdf/issues
|
||||
- about: A react-native interface for Touch 3D home screen quick actions
|
||||
name: "\U0001F4E6 react-native-quick-actions issues"
|
||||
url: 'https://github.com/jordanbyron/react-native-quick-actions/issues'
|
||||
name: 📦 react-native-quick-actions issues
|
||||
url: https://github.com/jordanbyron/react-native-quick-actions/issues
|
||||
- about: A React Native library that enables you to use iOS 12+ Siri Shortcuts.
|
||||
name: 📦 react-native-siri-shortcut issues
|
||||
url: https://github.com/Gustash/react-native-siri-shortcut/issues
|
||||
- about: WebRTC for React Native
|
||||
name: "\U0001F4E6 react-native-webrtc issues"
|
||||
url: 'https://github.com/react-native-webrtc/react-native-webrtc/issues'
|
||||
name: 📦 react-native-webrtc issues
|
||||
url: https://github.com/react-native-webrtc/react-native-webrtc/issues
|
||||
@@ -0,0 +1,24 @@
|
||||
<!--
|
||||
🚨 We use semantic release (a bot publishes everything automatically)
|
||||
🚨 so please use conventional commit style for the PR title:
|
||||
🚨 https://www.conventionalcommits.org/en/v1.0.0/
|
||||
🚨 Example: feat(detox): add new step
|
||||
-->
|
||||
|
||||
# Why
|
||||
|
||||
<!--
|
||||
Please describe the motivation for this PR, and link to relevant GitHub issues, forums posts, or feature requests.
|
||||
-->
|
||||
|
||||
# How
|
||||
|
||||
<!--
|
||||
How did you build this feature or fix this bug and why?
|
||||
-->
|
||||
|
||||
# Test Plan
|
||||
|
||||
<!--
|
||||
Please describe how you tested this change and how a reviewer could reproduce your test, especially if this PR does not include automated tests! If possible, please also provide terminal output and/or screenshots demonstrating your test/reproduction.
|
||||
-->
|
||||
@@ -0,0 +1,97 @@
|
||||
# AUTO GENERATED:
|
||||
# This file was generated by running the following in the root directory:
|
||||
#
|
||||
# yarn update-dependabot-config
|
||||
|
||||
version: 2
|
||||
updates:
|
||||
- package-ecosystem: npm
|
||||
directory: packages/android-jsc-intl
|
||||
schedule:
|
||||
interval: daily
|
||||
time: '09:00'
|
||||
timezone: America/Los_Angeles
|
||||
- package-ecosystem: npm
|
||||
directory: packages/detox
|
||||
schedule:
|
||||
interval: daily
|
||||
time: '09:00'
|
||||
timezone: America/Los_Angeles
|
||||
- package-ecosystem: npm
|
||||
directory: packages/ffmpeg-kit-react-native
|
||||
schedule:
|
||||
interval: daily
|
||||
time: '09:00'
|
||||
timezone: America/Los_Angeles
|
||||
- package-ecosystem: npm
|
||||
directory: packages/ios-stickers
|
||||
schedule:
|
||||
interval: daily
|
||||
time: '09:00'
|
||||
timezone: America/Los_Angeles
|
||||
- package-ecosystem: npm
|
||||
directory: packages/react-native-adjust
|
||||
schedule:
|
||||
interval: daily
|
||||
time: '09:00'
|
||||
timezone: America/Los_Angeles
|
||||
- package-ecosystem: npm
|
||||
directory: packages/react-native-ble-plx
|
||||
schedule:
|
||||
interval: daily
|
||||
time: '09:00'
|
||||
timezone: America/Los_Angeles
|
||||
- package-ecosystem: npm
|
||||
directory: packages/react-native-blob-util
|
||||
schedule:
|
||||
interval: daily
|
||||
time: '09:00'
|
||||
timezone: America/Los_Angeles
|
||||
- package-ecosystem: npm
|
||||
directory: packages/react-native-branch
|
||||
schedule:
|
||||
interval: daily
|
||||
time: '09:00'
|
||||
timezone: America/Los_Angeles
|
||||
- package-ecosystem: npm
|
||||
directory: packages/react-native-callkeep
|
||||
schedule:
|
||||
interval: daily
|
||||
time: '09:00'
|
||||
timezone: America/Los_Angeles
|
||||
- package-ecosystem: npm
|
||||
directory: packages/react-native-dynamic-app-icon
|
||||
schedule:
|
||||
interval: daily
|
||||
time: '09:00'
|
||||
timezone: America/Los_Angeles
|
||||
- package-ecosystem: npm
|
||||
directory: packages/react-native-google-cast
|
||||
schedule:
|
||||
interval: daily
|
||||
time: '09:00'
|
||||
timezone: America/Los_Angeles
|
||||
- package-ecosystem: npm
|
||||
directory: packages/react-native-pdf
|
||||
schedule:
|
||||
interval: daily
|
||||
time: '09:00'
|
||||
timezone: America/Los_Angeles
|
||||
- package-ecosystem: npm
|
||||
directory: packages/react-native-quick-actions
|
||||
schedule:
|
||||
interval: daily
|
||||
time: '09:00'
|
||||
timezone: America/Los_Angeles
|
||||
- package-ecosystem: npm
|
||||
directory: packages/react-native-siri-shortcut
|
||||
schedule:
|
||||
interval: daily
|
||||
time: '09:00'
|
||||
timezone: America/Los_Angeles
|
||||
- package-ecosystem: npm
|
||||
directory: packages/react-native-webrtc
|
||||
schedule:
|
||||
interval: daily
|
||||
time: '09:00'
|
||||
timezone: America/Los_Angeles
|
||||
@@ -1,25 +0,0 @@
|
||||
name: PR Title
|
||||
on:
|
||||
pull_request:
|
||||
branches:
|
||||
- "*"
|
||||
types:
|
||||
- opened
|
||||
- reopened
|
||||
- edited
|
||||
- synchronize
|
||||
|
||||
jobs:
|
||||
main:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: aslafy-z/[email protected]
|
||||
# continue-on-error: true
|
||||
id: title-check
|
||||
with:
|
||||
success-state: PR title is valid
|
||||
failure-state: "PR title does not follow the conventional commit spec: https://www.conventionalcommits.org/en/v1.0.0/"
|
||||
context-name: pr-title
|
||||
preset: conventional-changelog-angular@latest
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ github.token }}
|
||||
@@ -24,14 +24,14 @@ jobs:
|
||||
|
||||
# If the dry run fails then it will prevent us from automatically breaking the repo.
|
||||
- name: Semantic release (dry run)
|
||||
run: npx multi-semantic-release --dry-run
|
||||
run: npx multi-semantic-release --dry-run --ignore-private-packages
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ github.token }}
|
||||
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
|
||||
- name: Semantic release
|
||||
# use `--ignore-packages` to ignore packages on bumping process
|
||||
# npx multi-semantic-release --ignore-packages=packages/a/**,packages/b/**
|
||||
run: npx multi-semantic-release
|
||||
run: npx multi-semantic-release --ignore-private-packages
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ github.token }}
|
||||
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
|
||||
@@ -40,6 +40,8 @@ jobs:
|
||||
ios-stickers,
|
||||
react-native-ble-plx,
|
||||
react-native-blob-util,
|
||||
react-native-branch,
|
||||
react-native-siri-shortcut,
|
||||
react-native-google-cast,
|
||||
react-native-pdf,
|
||||
# react-native-quick-actions,
|
||||
@@ -54,8 +56,12 @@ jobs:
|
||||
uses: actions/setup-node@v1
|
||||
with:
|
||||
node-version: ${{ matrix.node }}
|
||||
- name: Lint ${{ matrix.package }}
|
||||
run: yarn lint --max-warnings 0
|
||||
working-directory: packages/${{ matrix.package }}
|
||||
- name: Test ${{ matrix.package }}
|
||||
run: cd packages/${{ matrix.package }} && yarn test
|
||||
run: yarn test
|
||||
working-directory: packages/${{ matrix.package }}
|
||||
env:
|
||||
CI: true
|
||||
EXPO_DEBUG: true
|
||||
@@ -51,4 +51,15 @@ xcuserdata
|
||||
# VSCode
|
||||
.history/
|
||||
|
||||
# packages/*/build/
|
||||
# Ignore build folders
|
||||
|
||||
packages/*/build/**
|
||||
packages/*/plugin/build/**
|
||||
packages/@*/*/build/**
|
||||
|
||||
|
||||
# App native folders
|
||||
|
||||
apps/*/ios/*
|
||||
apps/*/android/*
|
||||
apps/*/web-build/*
|
||||
@@ -49,6 +49,7 @@ module.exports = {
|
||||
},
|
||||
],
|
||||
"@semantic-release/changelog",
|
||||
"@semantic-release/npm",
|
||||
[
|
||||
"@semantic-release/git",
|
||||
{
|
||||
@@ -57,6 +58,5 @@ module.exports = {
|
||||
},
|
||||
],
|
||||
"@semantic-release/github",
|
||||
"@semantic-release/npm",
|
||||
],
|
||||
};
|
||||
@@ -5,10 +5,22 @@
|
||||
To submit a pull request:
|
||||
|
||||
1. Fork the [repository](https://github.com/expo/config-plugins) and create a feature branch. (Existing contributors can create feature branches without forking. Prefix the branch name with `@your-github-username/`.)
|
||||
2. Use [conventional commits](https://www.conventionalcommits.org/en/v1.0.0/) including in the PR tile.
|
||||
3. Fill out the entire PR template. Ensure your code is tested locally and has continuous tests in CI.
|
||||
4. Make sure all tests pass on GitHub Actions.
|
||||
5. Wait for a review and adjust the code if necessary.
|
||||
2. Run `yarn` in the root directory to generate the build files.
|
||||
3. Use [conventional commits](https://www.conventionalcommits.org/en/v1.0.0/) including in the PR tile.
|
||||
4. Fill out the entire PR template. Ensure your code is tested locally and has continuous tests in CI.
|
||||
5. Make sure all tests pass on GitHub Actions.
|
||||
6. Wait for a review and adjust the code if necessary.
|
||||
|
||||
## Creating a plugin
|
||||
|
||||
- Plugins can be generated by running `yarn gen`.
|
||||
- Add plugins to the example in [`apps/app`](/apps/app/package.json) to test them.
|
||||
- The example app should always stay in a state of regeneration.
|
||||
|
||||
Be sure to run the following scripts in the **root directory** to update automation tools:
|
||||
|
||||
- Update dependabot: `yarn update-dependabot-config`
|
||||
- Update the issue template: `yarn update-issue-template`
|
||||
|
||||
## Publishing a release
|
||||
|
||||
|
||||
@@ -1,10 +1,62 @@
|
||||
# Expo Config Plugins
|
||||
|
||||
A collection of custom WIP config plugins for Expo dev clients. Use at your own discretion.
|
||||
- A collection of [Expo config plugins](https://docs.expo.dev/guides/config-plugins/) for configuring the `expo prebuild` command.
|
||||
- This repo is to Expo config plugins as [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped) is to TypeScript.
|
||||
- We prefer packages ship their own Expo config plugin (to ensure versioning is aligned), but if they haven't adopted the system yet, the community can add a package here.
|
||||
- All packages here are community maintained. Feel free to improve docs, packages, tests, etc.
|
||||
- We maintain a 1-1 mapping of **native packages** ⇔ `@config-plugins/*`. This means there should be no general utility packages here -- those are better suited for a different repo / NPM namespace.
|
||||
|
||||
## Awesome
|
||||
|
||||
## Creating a plugin
|
||||
Here is a list of known packages that have a built-in Config Plugin.
|
||||
|
||||
- Plugins can be generated by running `yarn gen`.
|
||||
- Add plugins to the example in [`apps/app`](/apps/app/package.json) to test them.
|
||||
- The example app should always stay in a state of regeneration.
|
||||
> Not all packages need a config plugin, packages that don't appear here might still work with managed EAS.
|
||||
|
||||
- [React Native Firebase](https://rnfirebase.io/) (`@react-native-firebase/perf`, `@react-native-firebase/app`)
|
||||
- [react-native-nfc-manager](https://github.com/revtel/react-native-nfc-manager)
|
||||
- [react-native-health](https://github.com/agencyenterprise/react-native-health)
|
||||
- [@react-native-mapbox-gl/maps](https://github.com/rnmapbox/maps)
|
||||
- [@logrocket/react-native](https://www.npmjs.com/package/@logrocket/react-native)
|
||||
- [sentry-expo](https://www.npmjs.com/package/sentry-expo)
|
||||
- [@leanplum/react-native-sdk](https://github.com/Leanplum/Leanplum-ReactNative-SDK#readme)
|
||||
- [react-native-fbsdk-next](https://www.npmjs.com/package/react-native-fbsdk-next)
|
||||
- [@stripe/stripe-react-native](https://www.npmjs.com/package/@stripe/stripe-react-native)
|
||||
- [@react-native-voice/voice](https://www.npmjs.com/package/@react-native-voice/voice)
|
||||
- [react-native-imglysdk](https://www.npmjs.com/package/react-native-imglysdk)
|
||||
- [@viro-community/react-viro](https://github.com/virocommunity/viro) -- [Guide](https://viro-community.readme.io/docs/integrating-with-expo)
|
||||
- [react-native-msal](https://www.npmjs.com/package/react-native-msal)
|
||||
- [react-native-spotlight-search](https://www.npmjs.com/package/react-native-spotlight-search)
|
||||
- [newrelic-react-native-agent](https://www.npmjs.com/package/newrelic-react-native-agent)
|
||||
- [react-native-videoeditorsdk](https://www.npmjs.com/package/react-native-videoeditorsdk)
|
||||
- [notifee](https://notifee.app/)
|
||||
- [App Clips](https://github.com/bndkt/react-native-app-clip/)
|
||||
- [iOS Safari Extensions](https://github.com/andrew-levy/react-native-safari-extension/)
|
||||
|
||||
### Complementary
|
||||
|
||||
More out-of-tree plugins which can be used to configure more packages.
|
||||
|
||||
- [onesignal-expo-plugin](https://github.com/OneSignal/onesignal-expo-plugin) (for use with `react-native-onesignal`)
|
||||
- [@lyrahealth-inc/react-native-orientation-plugin](@lyrahealth-inc/react-native-orientation-plugin) (for use with `react-native-orientation-plugin`)
|
||||
- [airship-expo-plugin](https://www.npmjs.com/package/airship-expo-plugin) (for use with `urbanairship-react-native`)
|
||||
- [config-plugin-react-native-intercom](https://www.npmjs.com/package/config-plugin-react-native-intercom) (for use with `intercom-react-native`)
|
||||
- [@allboatsrise/expo-marketingcloudsdk](https://www.npmjs.com/package/@allboatsrise/expo-marketingcloudsdk) (for use with `react-native-marketingcloudsdk`)
|
||||
- [@ouvio/react-native-background-location-plugin](https://www.npmjs.com/package/@ouvio/react-native-background-location-plugin) (for use with `react-native-background-location-plugin`)
|
||||
- [expo-community-flipper](https://www.npmjs.com/package/expo-community-flipper) (for use with Flipper)
|
||||
|
||||
### No Plugin Required
|
||||
|
||||
Just install and rebuild! If a package doesn't require any futher setup then it most likely doesn't need an Expo config plugin. Most packages work without a config plugin (including packages not listed below):
|
||||
|
||||
- [react-native-share](https://github.com/react-native-share/react-native-share)
|
||||
- [@react-native-menu/menu](https://github.com/react-native-menu/menu)
|
||||
- [react-native-blurhash](https://github.com/mrousavy/react-native-blurhash)
|
||||
- [react-native-app-shortcuts](https://github.com/lokyoung/react-native-app-shortcuts)
|
||||
- [react-native-multiple-image-picker](https://github.com/baronha/react-native-multiple-image-picker)
|
||||
- [`@shopify/flash-list`](https://github.com/Shopify/flash-list)
|
||||
|
||||
> Feel free to [open a PR](https://github.com/expo/config-plugins/edit/main/README.md) with missing packages.
|
||||
|
||||
## Contributing!
|
||||
|
||||
See the [contributing guide](/CONTRIBUTING.md).
|
||||
@@ -1,9 +1,3 @@
|
||||
// export { default } from './src/react-native-quick-actions/App';
|
||||
// export { default } from './src/react-native-pdf/App';
|
||||
// export { default } from './src/react-native-dynamic-app-icon/App';
|
||||
// export { default } from './src/react-native-google-cast/App';
|
||||
// export { default } from './src/detox/App';
|
||||
// export { default } from './src/react-native-ble-plx/App';
|
||||
export { default } from './src/react-native-webrtc/App';
|
||||
export { default } from './src/detox/App';
|
||||
// export { default } from './src/android-jsc-intl/App';
|
||||
// export { default } from './src/ffmpeg-kit-react-native/App';
|
||||
// export { default } from './src/android-jsc-adjust/App';
|
||||
@@ -4,7 +4,7 @@
|
||||
"slug": "app",
|
||||
"version": "1.0.0",
|
||||
"orientation": "portrait",
|
||||
"icon": "./assets/icons/winter.png",
|
||||
"icon": "https://icogen.vercel.app/api/icon",
|
||||
"splash": {
|
||||
"image": "./assets/splash.png",
|
||||
"resizeMode": "contain",
|
||||
@@ -16,86 +16,25 @@
|
||||
"assetBundlePatterns": ["**/*"],
|
||||
"ios": {
|
||||
"supportsTablet": true,
|
||||
"bundleIdentifier": "dev.bacon.app",
|
||||
"config": {
|
||||
"branch": {
|
||||
"apiKey": "key_live_f9f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8"
|
||||
}
|
||||
}
|
||||
"bundleIdentifier": "dev.bacon.app"
|
||||
},
|
||||
"android": {
|
||||
"adaptiveIcon": {
|
||||
"foregroundImage": "./assets/adaptive-icon.png",
|
||||
"backgroundColor": "#FFFFFF"
|
||||
},
|
||||
"config": {
|
||||
"branch": {
|
||||
"apiKey": "key_live_f9f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8"
|
||||
}
|
||||
},
|
||||
"package": "com.bacon.app"
|
||||
},
|
||||
"web": {
|
||||
"favicon": "./assets/favicon.png"
|
||||
},
|
||||
"plugins": [
|
||||
[
|
||||
"@config-plugins/react-native-dynamic-app-icon",
|
||||
[
|
||||
"./assets/icons/spring.png",
|
||||
"./assets/icons/summer.png",
|
||||
"./assets/icons/autumn.png",
|
||||
"./assets/icons/fall.png",
|
||||
"./assets/icons/solstice.png"
|
||||
]
|
||||
],
|
||||
[
|
||||
"@config-plugins/react-native-quick-actions",
|
||||
[
|
||||
{
|
||||
"title": "Take Photo",
|
||||
"type": "photo",
|
||||
"iconType": "UIApplicationShortcutIconTypeCapturePhoto"
|
||||
}
|
||||
]
|
||||
],
|
||||
[
|
||||
"@config-plugins/ffmpeg-kit-react-native",
|
||||
{
|
||||
"package": "min"
|
||||
}
|
||||
],
|
||||
"@config-plugins/detox",
|
||||
|
||||
"@config-plugins/react-native-adjust",
|
||||
"@config-plugins/react-native-branch",
|
||||
"@config-plugins/react-native-google-cast",
|
||||
"@config-plugins/react-native-ble-plx",
|
||||
"@config-plugins/react-native-webrtc",
|
||||
"@config-plugins/react-native-callkeep",
|
||||
"@config-plugins/react-native-blob-util",
|
||||
"@config-plugins/react-native-pdf",
|
||||
"@config-plugins/android-jsc-intl",
|
||||
[
|
||||
"@config-plugins/ios-stickers",
|
||||
{
|
||||
"name": "Stickers",
|
||||
"icon": "./assets/imessage-icon.png",
|
||||
"columns": 4,
|
||||
"stickers": [
|
||||
"./assets/stickers/annoyed.png",
|
||||
"./assets/stickers/cuddle.png",
|
||||
"./assets/stickers/crazy.png",
|
||||
"./assets/stickers/cant.png",
|
||||
"./assets/stickers/donno.png",
|
||||
"./assets/stickers/cozzy.png",
|
||||
"./assets/stickers/dork.png",
|
||||
"./assets/stickers/focus.png",
|
||||
"./assets/stickers/avocool.png",
|
||||
"./assets/stickers/coder-girl.png",
|
||||
"./assets/stickers/teapot.png"
|
||||
]
|
||||
}
|
||||
]
|
||||
"@config-plugins/android-jsc-intl"
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -21,55 +21,37 @@
|
||||
"android": "expo run:android"
|
||||
},
|
||||
"dependencies": {
|
||||
"@config-plugins/android-jsc-intl": "1.0.1",
|
||||
"@config-plugins/detox": "1.0.1",
|
||||
"@config-plugins/ffmpeg-kit-react-native": "1.0.0",
|
||||
"@config-plugins/ios-stickers": "1.0.0",
|
||||
"@config-plugins/react-native-adjust": "1.0.0",
|
||||
"@config-plugins/react-native-ble-plx": "1.0.0",
|
||||
"@config-plugins/react-native-blob-util": "1.0.1",
|
||||
"@config-plugins/react-native-branch": "1.0.0",
|
||||
"@config-plugins/react-native-callkeep": "1.0.0",
|
||||
"@config-plugins/react-native-dynamic-app-icon": "1.0.0",
|
||||
"@config-plugins/react-native-google-cast": "1.0.0",
|
||||
"@config-plugins/react-native-pdf": "1.0.0",
|
||||
"@config-plugins/react-native-quick-actions": "1.0.0",
|
||||
"@config-plugins/react-native-webrtc": "1.0.0",
|
||||
"expo": "^44.0.0",
|
||||
"expo-localization": "~12.0.0",
|
||||
"expo-splash-screen": "~0.14.0",
|
||||
"expo-status-bar": "~1.2.0",
|
||||
"expo-updates": "~0.11.2",
|
||||
"@config-plugins/android-jsc-intl": "*",
|
||||
"@config-plugins/detox": "*",
|
||||
"@config-plugins/react-native-adjust": "*",
|
||||
"@config-plugins/react-native-callkeep": "*",
|
||||
"expo": "^45.0.0",
|
||||
"detox": "^19.6.9",
|
||||
"expo-localization": "~13.0.0",
|
||||
"expo-splash-screen": "~0.15.1",
|
||||
"expo-status-bar": "~1.3.0",
|
||||
"expo-updates": "~0.13.1",
|
||||
"fbjs": "^0.8.18",
|
||||
"ffmpeg-kit-react-native": "^4.5.0",
|
||||
"i18n-js": "^3.8.0",
|
||||
"luxon": "^1.27.0",
|
||||
"react": "17.0.1",
|
||||
"react-dom": "17.0.1",
|
||||
"react-native": "0.64.3",
|
||||
"react-native-adjust": "^4.29.5",
|
||||
"react-native-blob-util": "^0.13.17",
|
||||
"react-native-callkeep": "^4.2.0",
|
||||
"react-native-branch": "^5.3.0",
|
||||
"react-native-dynamic-app-icon": "^1.1.0",
|
||||
"react-native-google-cast": "^4.1.2",
|
||||
"react-native-pdf": "^6.4.0",
|
||||
"react-native-quick-actions": "^0.3.13",
|
||||
"react-native-safe-area-context": "3.3.2",
|
||||
"react-native-web": "0.17.1",
|
||||
"react-native-webrtc": "^1.89.3"
|
||||
"react": "17.0.2",
|
||||
"react-dom": "17.0.2",
|
||||
"react-native": "0.68.2",
|
||||
"react-native-adjust": "^4.29.6",
|
||||
"react-native-callkeep": "^4.3.3",
|
||||
"react-native-safe-area-context": "4.2.4",
|
||||
"react-native-web": "0.17.7"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@babel/core": "^7.12.9",
|
||||
"@babel/plugin-syntax-jsx": "^7.16.0",
|
||||
"@expo/metro-config": "~0.3.7",
|
||||
"@expo/xcpretty": "^4.1.0",
|
||||
"@expo/xcpretty": "^4.1.2",
|
||||
"@types/jest": "^26.0.19",
|
||||
"@types/luxon": "^1.27.1",
|
||||
"@types/react": "~17.0.21",
|
||||
"@types/react-native": "~0.64.12",
|
||||
"babel-jest": "~25.2.6",
|
||||
"detox": "^19.1.0",
|
||||
"jest": "^26.6.3",
|
||||
"jest-circus": "^26.5.2",
|
||||
"ts-jest": "^26.4.4",
|
||||
|
||||
@@ -1,142 +0,0 @@
|
||||
import Entypo from '@expo/vector-icons/Entypo';
|
||||
import React from 'react';
|
||||
import { Image, SafeAreaView, Text, View } from 'react-native';
|
||||
import AppIcon from 'react-native-dynamic-app-icon';
|
||||
import TouchableBounce from 'react-native/Libraries/Components/Touchable/TouchableBounce';
|
||||
|
||||
function useIconName() {
|
||||
const [icon, _setIcon] = React.useState(null);
|
||||
|
||||
React.useEffect(() => {
|
||||
let isMounted = true;
|
||||
AppIcon.getIconName((result) => {
|
||||
if (isMounted) _setIcon(result.iconName);
|
||||
});
|
||||
return () => (isMounted = false);
|
||||
}, []);
|
||||
|
||||
const setIcon = React.useCallback(
|
||||
(icon) => {
|
||||
AppIcon.setAppIcon(icon);
|
||||
_setIcon(icon || null);
|
||||
},
|
||||
[_setIcon]
|
||||
);
|
||||
return [icon === "default" ? null : icon, setIcon];
|
||||
}
|
||||
|
||||
|
||||
const icons = [
|
||||
{ name: "Auto", source: require("../../assets/icons/winter.png"), iconId: null },
|
||||
{ name: "Spring", source: require("../../assets/icons/spring.png"), iconId: '0' },
|
||||
{ name: "Summer", source: require("../../assets/icons/summer.png"), iconId: '1' },
|
||||
{ name: "Autumn", source: require("../../assets/icons/autumn.png"), iconId: '2' },
|
||||
{ name: "Fall", source: require("../../assets/icons/fall.png"), iconId: '3' },
|
||||
{ name: "Solstice", source: require("../../assets/icons/solstice.png"), iconId: '4' },
|
||||
|
||||
];
|
||||
|
||||
export default function App() {
|
||||
const [_icon, setIcon] = useIconName();
|
||||
|
||||
return (
|
||||
<SafeAreaView
|
||||
style={{
|
||||
flex: 1,
|
||||
justifyContent: "center",
|
||||
alignItems: "center",
|
||||
}}
|
||||
>
|
||||
<View style={{ width: "100%" }}>
|
||||
{icons.map((icon, index) => {
|
||||
return (
|
||||
<Item
|
||||
onPress={() => {
|
||||
setIcon(icon.iconId);
|
||||
}}
|
||||
isSelected={icon.iconId === _icon}
|
||||
name={icon.name}
|
||||
source={icon.source}
|
||||
key={String(index)}
|
||||
/>
|
||||
);
|
||||
})}
|
||||
</View>
|
||||
</SafeAreaView>
|
||||
);
|
||||
}
|
||||
|
||||
function Item({ ...props }) {
|
||||
return (
|
||||
<TouchableBounce
|
||||
onPress={props.onPress}
|
||||
style={{ marginVertical: 8, marginHorizontal: 24 }}
|
||||
>
|
||||
<View
|
||||
|
||||
style={{
|
||||
flexDirection: "row",
|
||||
justifyContent: "space-between",
|
||||
alignItems: "stretch",
|
||||
shadowColor: "#000",
|
||||
shadowOffset: {
|
||||
width: 0,
|
||||
height: 4,
|
||||
},
|
||||
shadowOpacity: props.isSelected ? 0.35 : 0.2,
|
||||
shadowRadius: 8.46,
|
||||
|
||||
backgroundColor: props.isSelected ? "#000" : "#F1F1F1",
|
||||
elevation: 9,
|
||||
paddingHorizontal: 12,
|
||||
paddingVertical: 12,
|
||||
borderRadius: 20,
|
||||
}}
|
||||
>
|
||||
<View
|
||||
style={{
|
||||
flexDirection: "row",
|
||||
flex: 1,
|
||||
alignItems: "center",
|
||||
}}
|
||||
>
|
||||
<View
|
||||
style={{
|
||||
flexDirection: "row",
|
||||
flex: 1,
|
||||
alignItems: "center",
|
||||
}}
|
||||
>
|
||||
<Image
|
||||
source={props.source}
|
||||
style={{
|
||||
width: 64,
|
||||
aspectRatio: 1,
|
||||
resizeMode: "cover",
|
||||
borderRadius: 16,
|
||||
}}
|
||||
/>
|
||||
<Text
|
||||
style={{
|
||||
marginLeft: 20,
|
||||
fontSize: 18,
|
||||
fontWeight: "700",
|
||||
color: props.isSelected ? "white" : "black",
|
||||
}}
|
||||
>
|
||||
{props.name}
|
||||
</Text>
|
||||
</View>
|
||||
{props.isSelected && (
|
||||
<Entypo
|
||||
style={{ marginRight: 8 }}
|
||||
name="check"
|
||||
size={20}
|
||||
color="white"
|
||||
/>
|
||||
)}
|
||||
</View>
|
||||
</View>
|
||||
</TouchableBounce>
|
||||
);
|
||||
}
|
||||
@@ -1,87 +0,0 @@
|
||||
import React from "react";
|
||||
import { View, Text, Button } from "react-native";
|
||||
import GoogleCast, {
|
||||
CastState,
|
||||
CastButton,
|
||||
useCastState,
|
||||
useRemoteMediaClient,
|
||||
} from "react-native-google-cast";
|
||||
|
||||
export default function HomeScreen() {
|
||||
const castState = useCastState();
|
||||
const client = useRemoteMediaClient();
|
||||
|
||||
GoogleCast.showIntroductoryOverlay();
|
||||
|
||||
const isConnected = castState === CastState.CONNECTED;
|
||||
|
||||
function cast() {
|
||||
client
|
||||
.loadMedia({
|
||||
mediaInfo: {
|
||||
contentUrl:
|
||||
"https://commondatastorage.googleapis.com/gtv-videos-bucket/CastVideos/mp4/BigBuckBunny.mp4",
|
||||
contentType: "video/mp4",
|
||||
metadata: {
|
||||
images: [
|
||||
{
|
||||
url:
|
||||
"https://commondatastorage.googleapis.com/gtv-videos-bucket/CastVideos/images/480x270/BigBuckBunny.jpg",
|
||||
},
|
||||
],
|
||||
title: "Big Buck Bunny",
|
||||
subtitle:
|
||||
"A large and lovable rabbit deals with three tiny bullies, led by a flying squirrel, who are determined to squelch his happiness.",
|
||||
studio: "Blender Foundation",
|
||||
type: "movie",
|
||||
},
|
||||
streamDuration: 596, // seconds
|
||||
},
|
||||
startTime: 10, // seconds
|
||||
})
|
||||
.then(console.log)
|
||||
.catch(console.warn);
|
||||
}
|
||||
|
||||
return (
|
||||
<View style={{ flex: 1, justifyContent: "center", alignItems: "center" }}>
|
||||
<Text>State: {castState}</Text>
|
||||
<CastButton style={{ width: 24, height: 24 }} />
|
||||
<Button
|
||||
title="Overlay"
|
||||
onPress={() => {
|
||||
GoogleCast.showIntroductoryOverlay();
|
||||
}}
|
||||
/>
|
||||
<Button
|
||||
title="Expanded Controls"
|
||||
onPress={() => {
|
||||
GoogleCast.showExpandedControls();
|
||||
}}
|
||||
/>
|
||||
|
||||
<Button
|
||||
title="Cast"
|
||||
disabled={!isConnected}
|
||||
onPress={() => {
|
||||
cast();
|
||||
}}
|
||||
/>
|
||||
<Button
|
||||
title="Pause"
|
||||
disabled={!isConnected}
|
||||
onPress={() => {
|
||||
// cast()
|
||||
client.pause();
|
||||
}}
|
||||
/>
|
||||
<Button
|
||||
title="Disconnect"
|
||||
disabled={!isConnected}
|
||||
onPress={() => {
|
||||
GoogleCast.sessionManager.endCurrentSession(true);
|
||||
}}
|
||||
/>
|
||||
</View>
|
||||
);
|
||||
}
|
||||
@@ -1,41 +0,0 @@
|
||||
import React from 'react';
|
||||
import { SafeAreaView, StyleSheet, useWindowDimensions } from 'react-native';
|
||||
import Pdf from 'react-native-pdf';
|
||||
|
||||
const source = {
|
||||
uri: "https://samples.leanpub.com/thereactnativebook-sample.pdf",
|
||||
cache: true,
|
||||
};
|
||||
export default function App() {
|
||||
const { width, height } = useWindowDimensions()
|
||||
|
||||
return (
|
||||
<SafeAreaView style={styles.container}>
|
||||
<Pdf
|
||||
source={source}
|
||||
onLoadComplete={(numberOfPages, filePath) => {
|
||||
console.log(`Number of pages: ${numberOfPages}`);
|
||||
}}
|
||||
onPageChanged={(page, numberOfPages) => {
|
||||
console.log(`Current page: ${page}`);
|
||||
}}
|
||||
onError={(error) => {
|
||||
console.log(error);
|
||||
}}
|
||||
onPressLink={(uri) => {
|
||||
console.log(`Link pressed: ${uri}`);
|
||||
}}
|
||||
style={{ flex: 1, width, height }}
|
||||
/>
|
||||
</SafeAreaView>
|
||||
);
|
||||
}
|
||||
|
||||
const styles = StyleSheet.create({
|
||||
container: {
|
||||
flex: 1,
|
||||
justifyContent: "flex-start",
|
||||
alignItems: "center",
|
||||
},
|
||||
|
||||
});
|
||||
@@ -1,58 +0,0 @@
|
||||
import QuickActions from "react-native-quick-actions";
|
||||
import React from "react";
|
||||
import { Text, View } from "react-native";
|
||||
|
||||
import { DeviceEventEmitter } from "react-native";
|
||||
|
||||
function useQuickAction(): QuickActions.ShortcutItem | null {
|
||||
const [item, setItem] = React.useState<QuickActions.ShortcutItem | null>(null);
|
||||
const isMounted = React.useRef(true)
|
||||
React.useEffect(() => {
|
||||
QuickActions.popInitialAction().then(action => {
|
||||
if (isMounted.current) setItem(action);
|
||||
})
|
||||
const sub = DeviceEventEmitter.addListener("quickActionShortcut", data => {
|
||||
if (isMounted.current) {
|
||||
setItem(data);
|
||||
}
|
||||
});
|
||||
return () => {
|
||||
isMounted.current = false;
|
||||
sub.remove();
|
||||
}
|
||||
}, []);
|
||||
return item;
|
||||
}
|
||||
|
||||
function App() {
|
||||
const action = useQuickAction();
|
||||
|
||||
React.useEffect(() => {
|
||||
QuickActions.setShortcutItems([
|
||||
{
|
||||
title: 'Play Song',
|
||||
subtitle: 'NDA - Billie Eilish',
|
||||
icon: 'Play',
|
||||
type: 'alpha',
|
||||
} as any,
|
||||
{
|
||||
title: 'Shuffle',
|
||||
icon: 'Shuffle',
|
||||
type: 'beta',
|
||||
} as any,
|
||||
{
|
||||
title: 'Like Song',
|
||||
icon: 'Love',
|
||||
type: 'gamma',
|
||||
} as any,
|
||||
])
|
||||
}, [])
|
||||
|
||||
return (
|
||||
<View style={{ flex: 1, justifyContent: "center", alignItems: "center" }}>
|
||||
<Text>Quick Actions</Text>
|
||||
{action && <Text>{JSON.stringify(action, null, 2)}</Text>}
|
||||
</View>
|
||||
);
|
||||
}
|
||||
export default App;
|
||||
@@ -1,66 +0,0 @@
|
||||
|
||||
import React, { useState } from 'react';
|
||||
import { Button, SafeAreaView, StatusBar, StyleSheet, View } from 'react-native';
|
||||
import { mediaDevices, RTCView } from 'react-native-webrtc';
|
||||
|
||||
const App = () => {
|
||||
const [stream, setStream] = useState(null);
|
||||
const start = async () => {
|
||||
console.log('start');
|
||||
if (!stream) {
|
||||
let s;
|
||||
try {
|
||||
s = await mediaDevices.getUserMedia({ video: true });
|
||||
setStream(s);
|
||||
} catch(e) {
|
||||
console.error(e);
|
||||
}
|
||||
}
|
||||
};
|
||||
const stop = () => {
|
||||
console.log('stop');
|
||||
if (stream) {
|
||||
stream.release();
|
||||
setStream(null);
|
||||
}
|
||||
};
|
||||
return (
|
||||
<>
|
||||
<StatusBar barStyle="dark-content" />
|
||||
<SafeAreaView style={styles.body}>
|
||||
{
|
||||
stream &&
|
||||
<RTCView
|
||||
streamURL={stream.toURL()}
|
||||
style={styles.stream} />
|
||||
}
|
||||
<View
|
||||
style={styles.footer}>
|
||||
<Button
|
||||
title = "Start"
|
||||
onPress = {start} />
|
||||
<Button
|
||||
title = "Stop"
|
||||
onPress = {stop} />
|
||||
</View>
|
||||
</SafeAreaView>
|
||||
</>
|
||||
);
|
||||
};
|
||||
|
||||
const styles = StyleSheet.create({
|
||||
body: {
|
||||
...StyleSheet.absoluteFillObject
|
||||
},
|
||||
stream: {
|
||||
flex: 1
|
||||
},
|
||||
footer: {
|
||||
position: 'absolute',
|
||||
bottom: 0,
|
||||
left: 0,
|
||||
right: 0
|
||||
},
|
||||
});
|
||||
|
||||
export default App;
|
||||
@@ -0,0 +1,80 @@
|
||||
node_modules/**/*
|
||||
.expo/*
|
||||
npm-debug.*
|
||||
*.jks
|
||||
*.p8
|
||||
*.p12
|
||||
*.key
|
||||
*.mobileprovision
|
||||
*.orig.*
|
||||
web-build/
|
||||
|
||||
# macOS
|
||||
.DS_Store
|
||||
|
||||
|
||||
/artifacts
|
||||
|
||||
/scripts/start.command
|
||||
/ios
|
||||
/android
|
||||
# @generated expo-cli sync-e7dcf75f4e856f7b6f3239b3f3a7dd614ee755a8
|
||||
# The following patterns were generated by expo-cli
|
||||
|
||||
# OSX
|
||||
#
|
||||
.DS_Store
|
||||
|
||||
# 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/IntelliJ
|
||||
#
|
||||
build/
|
||||
.idea
|
||||
.gradle
|
||||
local.properties
|
||||
*.iml
|
||||
*.hprof
|
||||
|
||||
# node.js
|
||||
#
|
||||
node_modules/
|
||||
npm-debug.log
|
||||
yarn-error.log
|
||||
|
||||
# BUCK
|
||||
buck-out/
|
||||
\.buckd/
|
||||
*.keystore
|
||||
!debug.keystore
|
||||
|
||||
# Bundle artifacts
|
||||
*.jsbundle
|
||||
|
||||
# CocoaPods
|
||||
/ios/Pods/
|
||||
|
||||
# Expo
|
||||
.expo/
|
||||
web-build/
|
||||
dist/
|
||||
|
||||
# @end expo-cli
|
||||
@@ -0,0 +1,16 @@
|
||||
const path = require("path");
|
||||
const folderName = path.basename(__dirname);
|
||||
const cleanName = folderName.replace(/[_\s-]/g, "");
|
||||
const appId = "dev.bacon." + cleanName;
|
||||
|
||||
module.exports = ({ config }) => {
|
||||
if (!config.extra) config.extra = {};
|
||||
// Expose CI env variables to the app
|
||||
config.extra.CI = process.env.CI;
|
||||
|
||||
if (!config.ios) config.ios = {};
|
||||
config.ios.bundleIdentifier = appId;
|
||||
if (!config.android) config.android = {};
|
||||
config.android.package = appId;
|
||||
return config;
|
||||
};
|
||||
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"expo": {
|
||||
"icon": "https://icogen.vercel.app/api/icon",
|
||||
"plugins": [
|
||||
[
|
||||
"@config-plugins/ffmpeg-kit-react-native",
|
||||
{
|
||||
"package": "min"
|
||||
}
|
||||
]
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
module.exports = function(api) {
|
||||
api.cache(true);
|
||||
return {
|
||||
presets: ['babel-preset-expo'],
|
||||
};
|
||||
};
|
||||
@@ -0,0 +1,5 @@
|
||||
import { registerRootComponent } from "expo";
|
||||
|
||||
import App from "./src/App";
|
||||
|
||||
registerRootComponent(App);
|
||||
@@ -0,0 +1,6 @@
|
||||
// Learn more https://docs.expo.io/guides/customizing-metro
|
||||
const { getDefaultConfig } = require("@expo/metro-config");
|
||||
|
||||
const config = getDefaultConfig(__dirname);
|
||||
|
||||
module.exports = config;
|
||||
@@ -0,0 +1,25 @@
|
||||
{
|
||||
"name": "@config-plugins-app/ffmpeg-kit-react-native",
|
||||
"main": "./index.js",
|
||||
"version": "1.0.0",
|
||||
"scripts": {
|
||||
"start": "expo start --dev-client",
|
||||
"ios": "expo run:ios",
|
||||
"android": "expo run:android"
|
||||
},
|
||||
"dependencies": {
|
||||
"@config-plugins/ffmpeg-kit-react-native": "*",
|
||||
"expo": "^45.0.0",
|
||||
"expo-splash-screen": "~0.15.1",
|
||||
"react": "17.0.2",
|
||||
"react-native": "0.68.2",
|
||||
"ffmpeg-kit-react-native": "^4.5.1",
|
||||
"expo-status-bar": "~1.3.0",
|
||||
"react-dom": "17.0.2",
|
||||
"react-native-web": "0.17.7"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@babel/core": "^7.12.9"
|
||||
},
|
||||
"private": true
|
||||
}
|
||||
@@ -0,0 +1,80 @@
|
||||
node_modules/**/*
|
||||
.expo/*
|
||||
npm-debug.*
|
||||
*.jks
|
||||
*.p8
|
||||
*.p12
|
||||
*.key
|
||||
*.mobileprovision
|
||||
*.orig.*
|
||||
web-build/
|
||||
|
||||
# macOS
|
||||
.DS_Store
|
||||
|
||||
|
||||
/artifacts
|
||||
|
||||
/scripts/start.command
|
||||
/ios
|
||||
/android
|
||||
# @generated expo-cli sync-e7dcf75f4e856f7b6f3239b3f3a7dd614ee755a8
|
||||
# The following patterns were generated by expo-cli
|
||||
|
||||
# OSX
|
||||
#
|
||||
.DS_Store
|
||||
|
||||
# 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/IntelliJ
|
||||
#
|
||||
build/
|
||||
.idea
|
||||
.gradle
|
||||
local.properties
|
||||
*.iml
|
||||
*.hprof
|
||||
|
||||
# node.js
|
||||
#
|
||||
node_modules/
|
||||
npm-debug.log
|
||||
yarn-error.log
|
||||
|
||||
# BUCK
|
||||
buck-out/
|
||||
\.buckd/
|
||||
*.keystore
|
||||
!debug.keystore
|
||||
|
||||
# Bundle artifacts
|
||||
*.jsbundle
|
||||
|
||||
# CocoaPods
|
||||
/ios/Pods/
|
||||
|
||||
# Expo
|
||||
.expo/
|
||||
web-build/
|
||||
dist/
|
||||
|
||||
# @end expo-cli
|
||||
@@ -0,0 +1,16 @@
|
||||
const path = require("path");
|
||||
const folderName = path.basename(__dirname);
|
||||
const cleanName = folderName.replace(/[_\s-]/g, "");
|
||||
const appId = "dev.bacon." + cleanName;
|
||||
|
||||
module.exports = ({ config }) => {
|
||||
if (!config.extra) config.extra = {};
|
||||
// Expose CI env variables to the app
|
||||
config.extra.CI = process.env.CI;
|
||||
|
||||
if (!config.ios) config.ios = {};
|
||||
config.ios.bundleIdentifier = appId;
|
||||
if (!config.android) config.android = {};
|
||||
config.android.package = appId;
|
||||
return config;
|
||||
};
|
||||
@@ -0,0 +1,28 @@
|
||||
{
|
||||
"expo": {
|
||||
"icon": "https://icogen.vercel.app/api/icon",
|
||||
"plugins": [
|
||||
[
|
||||
"@config-plugins/ios-stickers",
|
||||
{
|
||||
"name": "Stickers",
|
||||
"icon": "./assets/imessage-icon.png",
|
||||
"columns": 4,
|
||||
"stickers": [
|
||||
"./assets/stickers/annoyed.png",
|
||||
"./assets/stickers/cuddle.png",
|
||||
"./assets/stickers/crazy.png",
|
||||
"./assets/stickers/cant.png",
|
||||
"./assets/stickers/donno.png",
|
||||
"./assets/stickers/cozzy.png",
|
||||
"./assets/stickers/dork.png",
|
||||
"./assets/stickers/focus.png",
|
||||
"./assets/stickers/avocool.png",
|
||||
"./assets/stickers/coder-girl.png",
|
||||
"./assets/stickers/teapot.png"
|
||||
]
|
||||
}
|
||||
]
|
||||
]
|
||||
}
|
||||
}
|
||||
|
Before Width: | Height: | Size: 54 KiB After Width: | Height: | Size: 54 KiB |
|
Before Width: | Height: | Size: 173 KiB After Width: | Height: | Size: 173 KiB |
|
Before Width: | Height: | Size: 145 KiB After Width: | Height: | Size: 145 KiB |
|
Before Width: | Height: | Size: 130 KiB After Width: | Height: | Size: 130 KiB |
|
Before Width: | Height: | Size: 230 KiB After Width: | Height: | Size: 230 KiB |
|
Before Width: | Height: | Size: 141 KiB After Width: | Height: | Size: 141 KiB |
|
Before Width: | Height: | Size: 133 KiB After Width: | Height: | Size: 133 KiB |
|
Before Width: | Height: | Size: 177 KiB After Width: | Height: | Size: 177 KiB |
|
Before Width: | Height: | Size: 179 KiB After Width: | Height: | Size: 179 KiB |
|
Before Width: | Height: | Size: 157 KiB After Width: | Height: | Size: 157 KiB |
|
Before Width: | Height: | Size: 182 KiB After Width: | Height: | Size: 182 KiB |
|
Before Width: | Height: | Size: 164 KiB After Width: | Height: | Size: 164 KiB |
|
Before Width: | Height: | Size: 176 KiB After Width: | Height: | Size: 176 KiB |
@@ -0,0 +1,6 @@
|
||||
module.exports = function(api) {
|
||||
api.cache(true);
|
||||
return {
|
||||
presets: ['babel-preset-expo'],
|
||||
};
|
||||
};
|
||||
@@ -0,0 +1,5 @@
|
||||
import { registerRootComponent } from "expo";
|
||||
|
||||
import App from "./src/App";
|
||||
|
||||
registerRootComponent(App);
|
||||
@@ -0,0 +1,6 @@
|
||||
// Learn more https://docs.expo.io/guides/customizing-metro
|
||||
const { getDefaultConfig } = require("@expo/metro-config");
|
||||
|
||||
const config = getDefaultConfig(__dirname);
|
||||
|
||||
module.exports = config;
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"name": "@config-plugins-app/ios-stickers",
|
||||
"main": "./index.js",
|
||||
"version": "1.0.0",
|
||||
"scripts": {
|
||||
"start": "expo start --dev-client",
|
||||
"ios": "expo run:ios",
|
||||
"android": "expo run:android"
|
||||
},
|
||||
"dependencies": {
|
||||
"@config-plugins/ios-stickers": "*",
|
||||
"expo": "^45.0.0",
|
||||
"expo-splash-screen": "~0.15.1",
|
||||
"react": "17.0.2",
|
||||
"react-native": "0.68.2",
|
||||
"expo-status-bar": "~1.3.0",
|
||||
"react-dom": "17.0.2",
|
||||
"react-native-web": "0.17.7"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@babel/core": "^7.12.9"
|
||||
},
|
||||
"private": true
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
import React from "react";
|
||||
import { Text, View } from "react-native";
|
||||
|
||||
export default function App() {
|
||||
return (
|
||||
<View style={{ flex: 1, justifyContent: "center", alignItems: "center" }}>
|
||||
<Text>Open iMessage to find the app</Text>
|
||||
</View>
|
||||
);
|
||||
}
|
||||
@@ -0,0 +1,80 @@
|
||||
node_modules/**/*
|
||||
.expo/*
|
||||
npm-debug.*
|
||||
*.jks
|
||||
*.p8
|
||||
*.p12
|
||||
*.key
|
||||
*.mobileprovision
|
||||
*.orig.*
|
||||
web-build/
|
||||
|
||||
# macOS
|
||||
.DS_Store
|
||||
|
||||
|
||||
/artifacts
|
||||
|
||||
/scripts/start.command
|
||||
/ios
|
||||
/android
|
||||
# @generated expo-cli sync-e7dcf75f4e856f7b6f3239b3f3a7dd614ee755a8
|
||||
# The following patterns were generated by expo-cli
|
||||
|
||||
# OSX
|
||||
#
|
||||
.DS_Store
|
||||
|
||||
# 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/IntelliJ
|
||||
#
|
||||
build/
|
||||
.idea
|
||||
.gradle
|
||||
local.properties
|
||||
*.iml
|
||||
*.hprof
|
||||
|
||||
# node.js
|
||||
#
|
||||
node_modules/
|
||||
npm-debug.log
|
||||
yarn-error.log
|
||||
|
||||
# BUCK
|
||||
buck-out/
|
||||
\.buckd/
|
||||
*.keystore
|
||||
!debug.keystore
|
||||
|
||||
# Bundle artifacts
|
||||
*.jsbundle
|
||||
|
||||
# CocoaPods
|
||||
/ios/Pods/
|
||||
|
||||
# Expo
|
||||
.expo/
|
||||
web-build/
|
||||
dist/
|
||||
|
||||
# @end expo-cli
|
||||
@@ -0,0 +1,16 @@
|
||||
const path = require("path");
|
||||
const folderName = path.basename(__dirname);
|
||||
const cleanName = folderName.replace(/[_\s-]/g, "");
|
||||
const appId = "dev.bacon." + cleanName;
|
||||
|
||||
module.exports = ({ config }) => {
|
||||
if (!config.extra) config.extra = {};
|
||||
// Expose CI env variables to the app
|
||||
config.extra.CI = process.env.CI;
|
||||
|
||||
if (!config.ios) config.ios = {};
|
||||
config.ios.bundleIdentifier = appId;
|
||||
if (!config.android) config.android = {};
|
||||
config.android.package = appId;
|
||||
return config;
|
||||
};
|
||||
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"expo": {
|
||||
"icon": "https://icogen.vercel.app/api/icon?icon=1f9b7&color_hex=0000ff",
|
||||
"plugins": [
|
||||
"@config-plugins/react-native-ble-plx"
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
module.exports = function(api) {
|
||||
api.cache(true);
|
||||
return {
|
||||
presets: ['babel-preset-expo'],
|
||||
};
|
||||
};
|
||||
@@ -0,0 +1,5 @@
|
||||
import { registerRootComponent } from "expo";
|
||||
|
||||
import App from "./src/App";
|
||||
|
||||
registerRootComponent(App);
|
||||
@@ -0,0 +1,6 @@
|
||||
// Learn more https://docs.expo.io/guides/customizing-metro
|
||||
const { getDefaultConfig } = require("@expo/metro-config");
|
||||
|
||||
const config = getDefaultConfig(__dirname);
|
||||
|
||||
module.exports = config;
|
||||
@@ -0,0 +1,28 @@
|
||||
{
|
||||
"name": "@config-plugins-app/react-native-ble-plx",
|
||||
"main": "./index.js",
|
||||
"version": "1.0.0",
|
||||
"scripts": {
|
||||
"start": "expo start --dev-client",
|
||||
"ios": "expo run:ios",
|
||||
"android": "expo run:android"
|
||||
},
|
||||
"dependencies": {
|
||||
"@config-plugins/react-native-ble-plx": "*",
|
||||
"expo": "^45.0.0",
|
||||
"expo-splash-screen": "~0.15.1",
|
||||
"react": "17.0.2",
|
||||
"react-native": "0.68.2",
|
||||
"react-native-ble-plx": "^2.0.3",
|
||||
"expo-status-bar": "~1.3.0",
|
||||
"react-dom": "17.0.2",
|
||||
"react-native-web": "0.17.7"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@babel/core": "^7.12.9",
|
||||
"@types/react": "~17.0.21",
|
||||
"@types/react-native": "~0.64.12",
|
||||
"typescript": "~4.3.5"
|
||||
},
|
||||
"private": true
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"compilerOptions": {},
|
||||
"extends": "expo/tsconfig.base"
|
||||
}
|
||||
@@ -0,0 +1,80 @@
|
||||
node_modules/**/*
|
||||
.expo/*
|
||||
npm-debug.*
|
||||
*.jks
|
||||
*.p8
|
||||
*.p12
|
||||
*.key
|
||||
*.mobileprovision
|
||||
*.orig.*
|
||||
web-build/
|
||||
|
||||
# macOS
|
||||
.DS_Store
|
||||
|
||||
|
||||
/artifacts
|
||||
|
||||
/scripts/start.command
|
||||
/ios
|
||||
/android
|
||||
# @generated expo-cli sync-e7dcf75f4e856f7b6f3239b3f3a7dd614ee755a8
|
||||
# The following patterns were generated by expo-cli
|
||||
|
||||
# OSX
|
||||
#
|
||||
.DS_Store
|
||||
|
||||
# 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/IntelliJ
|
||||
#
|
||||
build/
|
||||
.idea
|
||||
.gradle
|
||||
local.properties
|
||||
*.iml
|
||||
*.hprof
|
||||
|
||||
# node.js
|
||||
#
|
||||
node_modules/
|
||||
npm-debug.log
|
||||
yarn-error.log
|
||||
|
||||
# BUCK
|
||||
buck-out/
|
||||
\.buckd/
|
||||
*.keystore
|
||||
!debug.keystore
|
||||
|
||||
# Bundle artifacts
|
||||
*.jsbundle
|
||||
|
||||
# CocoaPods
|
||||
/ios/Pods/
|
||||
|
||||
# Expo
|
||||
.expo/
|
||||
web-build/
|
||||
dist/
|
||||
|
||||
# @end expo-cli
|
||||
@@ -0,0 +1,16 @@
|
||||
const path = require("path");
|
||||
const folderName = path.basename(__dirname);
|
||||
const cleanName = folderName.replace(/[_\s-]/g, "");
|
||||
const appId = "dev.bacon." + cleanName;
|
||||
|
||||
module.exports = ({ config }) => {
|
||||
if (!config.extra) config.extra = {};
|
||||
// Expose CI env variables to the app
|
||||
config.extra.CI = process.env.CI;
|
||||
|
||||
if (!config.ios) config.ios = {};
|
||||
config.ios.bundleIdentifier = appId;
|
||||
if (!config.android) config.android = {};
|
||||
config.android.package = appId;
|
||||
return config;
|
||||
};
|
||||
@@ -0,0 +1,22 @@
|
||||
{
|
||||
"expo": {
|
||||
"icon": "https://icogen.vercel.app/api/icon?icon=1f334",
|
||||
"ios": {
|
||||
"config": {
|
||||
"branch": {
|
||||
"apiKey": "key_live_f9f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8"
|
||||
}
|
||||
}
|
||||
},
|
||||
"android": {
|
||||
"config": {
|
||||
"branch": {
|
||||
"apiKey": "key_live_f9f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8"
|
||||
}
|
||||
}
|
||||
},
|
||||
"plugins": [
|
||||
"@config-plugins/react-native-branch"
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
module.exports = function(api) {
|
||||
api.cache(true);
|
||||
return {
|
||||
presets: ['babel-preset-expo'],
|
||||
};
|
||||
};
|
||||
@@ -0,0 +1,5 @@
|
||||
import { registerRootComponent } from "expo";
|
||||
|
||||
import App from "./src/App";
|
||||
|
||||
registerRootComponent(App);
|
||||
@@ -0,0 +1,6 @@
|
||||
// Learn more https://docs.expo.io/guides/customizing-metro
|
||||
const { getDefaultConfig } = require("@expo/metro-config");
|
||||
|
||||
const config = getDefaultConfig(__dirname);
|
||||
|
||||
module.exports = config;
|
||||
@@ -0,0 +1,25 @@
|
||||
{
|
||||
"name": "@config-plugins-app/react-native-branch",
|
||||
"main": "./index.js",
|
||||
"version": "1.0.0",
|
||||
"scripts": {
|
||||
"start": "expo start --dev-client",
|
||||
"ios": "expo run:ios",
|
||||
"android": "expo run:android"
|
||||
},
|
||||
"dependencies": {
|
||||
"@config-plugins/react-native-branch": "*",
|
||||
"expo": "^45.0.0",
|
||||
"expo-splash-screen": "~0.15.1",
|
||||
"react": "17.0.2",
|
||||
"react-native": "0.68.2",
|
||||
"react-native-branch": "^5.4.0",
|
||||
"expo-status-bar": "~1.3.0",
|
||||
"react-dom": "17.0.2",
|
||||
"react-native-web": "0.17.7"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@babel/core": "^7.12.9"
|
||||
},
|
||||
"private": true
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
import React from "react";
|
||||
import { Text, View } from "react-native";
|
||||
|
||||
export default function App() {
|
||||
return (
|
||||
<View style={{ flex: 1, justifyContent: "center", alignItems: "center" }}>
|
||||
<Text>Branch</Text>
|
||||
</View>
|
||||
);
|
||||
}
|
||||
@@ -0,0 +1,80 @@
|
||||
node_modules/**/*
|
||||
.expo/*
|
||||
npm-debug.*
|
||||
*.jks
|
||||
*.p8
|
||||
*.p12
|
||||
*.key
|
||||
*.mobileprovision
|
||||
*.orig.*
|
||||
web-build/
|
||||
|
||||
# macOS
|
||||
.DS_Store
|
||||
|
||||
|
||||
/artifacts
|
||||
|
||||
/scripts/start.command
|
||||
/ios
|
||||
/android
|
||||
# @generated expo-cli sync-e7dcf75f4e856f7b6f3239b3f3a7dd614ee755a8
|
||||
# The following patterns were generated by expo-cli
|
||||
|
||||
# OSX
|
||||
#
|
||||
.DS_Store
|
||||
|
||||
# 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/IntelliJ
|
||||
#
|
||||
build/
|
||||
.idea
|
||||
.gradle
|
||||
local.properties
|
||||
*.iml
|
||||
*.hprof
|
||||
|
||||
# node.js
|
||||
#
|
||||
node_modules/
|
||||
npm-debug.log
|
||||
yarn-error.log
|
||||
|
||||
# BUCK
|
||||
buck-out/
|
||||
\.buckd/
|
||||
*.keystore
|
||||
!debug.keystore
|
||||
|
||||
# Bundle artifacts
|
||||
*.jsbundle
|
||||
|
||||
# CocoaPods
|
||||
/ios/Pods/
|
||||
|
||||
# Expo
|
||||
.expo/
|
||||
web-build/
|
||||
dist/
|
||||
|
||||
# @end expo-cli
|
||||
@@ -0,0 +1,16 @@
|
||||
const path = require("path");
|
||||
const folderName = path.basename(__dirname);
|
||||
const cleanName = folderName.replace(/[_\s-]/g, "");
|
||||
const appId = "dev.bacon." + cleanName;
|
||||
|
||||
module.exports = ({ config }) => {
|
||||
if (!config.extra) config.extra = {};
|
||||
// Expose CI env variables to the app
|
||||
config.extra.CI = process.env.CI;
|
||||
|
||||
if (!config.ios) config.ios = {};
|
||||
config.ios.bundleIdentifier = appId;
|
||||
if (!config.android) config.android = {};
|
||||
config.android.package = appId;
|
||||
return config;
|
||||
};
|
||||
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"expo": {
|
||||
"icon": "./assets/icons/winter.png",
|
||||
"plugins": [
|
||||
[
|
||||
"@config-plugins/react-native-dynamic-app-icon",
|
||||
[
|
||||
"./assets/icons/spring.png",
|
||||
"./assets/icons/summer.png",
|
||||
"./assets/icons/autumn.png",
|
||||
"./assets/icons/fall.png",
|
||||
"./assets/icons/solstice.png"
|
||||
]
|
||||
]
|
||||
]
|
||||
}
|
||||
}
|
||||
|
Before Width: | Height: | Size: 87 KiB After Width: | Height: | Size: 87 KiB |
|
Before Width: | Height: | Size: 87 KiB After Width: | Height: | Size: 87 KiB |
|
Before Width: | Height: | Size: 86 KiB After Width: | Height: | Size: 86 KiB |
|
Before Width: | Height: | Size: 90 KiB After Width: | Height: | Size: 90 KiB |
|
Before Width: | Height: | Size: 90 KiB After Width: | Height: | Size: 90 KiB |
|
Before Width: | Height: | Size: 83 KiB After Width: | Height: | Size: 83 KiB |
@@ -0,0 +1,6 @@
|
||||
module.exports = function(api) {
|
||||
api.cache(true);
|
||||
return {
|
||||
presets: ['babel-preset-expo'],
|
||||
};
|
||||
};
|
||||
@@ -0,0 +1,5 @@
|
||||
import { registerRootComponent } from "expo";
|
||||
|
||||
import App from "./src/App";
|
||||
|
||||
registerRootComponent(App);
|
||||
@@ -0,0 +1,6 @@
|
||||
// Learn more https://docs.expo.io/guides/customizing-metro
|
||||
const { getDefaultConfig } = require("@expo/metro-config");
|
||||
|
||||
const config = getDefaultConfig(__dirname);
|
||||
|
||||
module.exports = config;
|
||||
@@ -0,0 +1,25 @@
|
||||
{
|
||||
"name": "@config-plugins-app/react-native-dynamic-app-icon",
|
||||
"main": "./index.js",
|
||||
"version": "1.0.0",
|
||||
"scripts": {
|
||||
"start": "expo start --dev-client",
|
||||
"ios": "expo run:ios",
|
||||
"android": "expo run:android"
|
||||
},
|
||||
"dependencies": {
|
||||
"@config-plugins/react-native-dynamic-app-icon": "*",
|
||||
"expo": "^45.0.0",
|
||||
"expo-splash-screen": "~0.15.1",
|
||||
"react": "17.0.2",
|
||||
"react-native": "0.68.2",
|
||||
"react-native-dynamic-app-icon": "^1.1.0",
|
||||
"expo-status-bar": "~1.3.0",
|
||||
"react-dom": "17.0.2",
|
||||
"react-native-web": "0.17.7"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@babel/core": "^7.12.9"
|
||||
},
|
||||
"private": true
|
||||
}
|
||||
@@ -0,0 +1,159 @@
|
||||
import Entypo from "@expo/vector-icons/Entypo";
|
||||
import React from "react";
|
||||
import { Image, SafeAreaView, Text, View } from "react-native";
|
||||
import AppIcon from "react-native-dynamic-app-icon";
|
||||
import TouchableBounce from "react-native/Libraries/Components/Touchable/TouchableBounce";
|
||||
|
||||
function useIconName() {
|
||||
const [icon, _setIcon] = React.useState(null);
|
||||
|
||||
React.useEffect(() => {
|
||||
let isMounted = true;
|
||||
AppIcon.getIconName((result) => {
|
||||
if (isMounted) _setIcon(result.iconName);
|
||||
});
|
||||
return () => (isMounted = false);
|
||||
}, []);
|
||||
|
||||
const setIcon = React.useCallback(
|
||||
(icon) => {
|
||||
AppIcon.setAppIcon(icon);
|
||||
_setIcon(icon || null);
|
||||
},
|
||||
[_setIcon]
|
||||
);
|
||||
return [icon === "default" ? null : icon, setIcon];
|
||||
}
|
||||
|
||||
const icons = [
|
||||
{
|
||||
name: "Auto",
|
||||
source: require("../assets/icons/winter.png"),
|
||||
iconId: null,
|
||||
},
|
||||
{
|
||||
name: "Spring",
|
||||
source: require("../assets/icons/spring.png"),
|
||||
iconId: "0",
|
||||
},
|
||||
{
|
||||
name: "Summer",
|
||||
source: require("../assets/icons/summer.png"),
|
||||
iconId: "1",
|
||||
},
|
||||
{
|
||||
name: "Autumn",
|
||||
source: require("../assets/icons/autumn.png"),
|
||||
iconId: "2",
|
||||
},
|
||||
{ name: "Fall", source: require("../assets/icons/fall.png"), iconId: "3" },
|
||||
{
|
||||
name: "Solstice",
|
||||
source: require("../assets/icons/solstice.png"),
|
||||
iconId: "4",
|
||||
},
|
||||
];
|
||||
|
||||
export default function App() {
|
||||
const [_icon, setIcon] = useIconName();
|
||||
|
||||
return (
|
||||
<SafeAreaView
|
||||
style={{
|
||||
flex: 1,
|
||||
justifyContent: "center",
|
||||
alignItems: "center",
|
||||
}}
|
||||
>
|
||||
<View style={{ width: "100%" }}>
|
||||
{icons.map((icon, index) => {
|
||||
return (
|
||||
<Item
|
||||
onPress={() => {
|
||||
setIcon(icon.iconId);
|
||||
}}
|
||||
isSelected={icon.iconId === _icon}
|
||||
name={icon.name}
|
||||
source={icon.source}
|
||||
key={String(index)}
|
||||
/>
|
||||
);
|
||||
})}
|
||||
</View>
|
||||
</SafeAreaView>
|
||||
);
|
||||
}
|
||||
|
||||
function Item({ ...props }) {
|
||||
return (
|
||||
<TouchableBounce
|
||||
onPress={props.onPress}
|
||||
style={{ marginVertical: 8, marginHorizontal: 24 }}
|
||||
>
|
||||
<View
|
||||
style={{
|
||||
flexDirection: "row",
|
||||
justifyContent: "space-between",
|
||||
alignItems: "stretch",
|
||||
shadowColor: "#000",
|
||||
shadowOffset: {
|
||||
width: 0,
|
||||
height: 4,
|
||||
},
|
||||
shadowOpacity: props.isSelected ? 0.35 : 0.2,
|
||||
shadowRadius: 8.46,
|
||||
|
||||
backgroundColor: props.isSelected ? "#000" : "#F1F1F1",
|
||||
elevation: 9,
|
||||
paddingHorizontal: 12,
|
||||
paddingVertical: 12,
|
||||
borderRadius: 20,
|
||||
}}
|
||||
>
|
||||
<View
|
||||
style={{
|
||||
flexDirection: "row",
|
||||
flex: 1,
|
||||
alignItems: "center",
|
||||
}}
|
||||
>
|
||||
<View
|
||||
style={{
|
||||
flexDirection: "row",
|
||||
flex: 1,
|
||||
alignItems: "center",
|
||||
}}
|
||||
>
|
||||
<Image
|
||||
source={props.source}
|
||||
style={{
|
||||
width: 64,
|
||||
aspectRatio: 1,
|
||||
resizeMode: "cover",
|
||||
borderRadius: 16,
|
||||
}}
|
||||
/>
|
||||
<Text
|
||||
style={{
|
||||
marginLeft: 20,
|
||||
fontSize: 18,
|
||||
fontWeight: "700",
|
||||
color: props.isSelected ? "white" : "black",
|
||||
}}
|
||||
>
|
||||
{props.name}
|
||||
</Text>
|
||||
</View>
|
||||
{props.isSelected && (
|
||||
<Entypo
|
||||
style={{ marginRight: 8 }}
|
||||
name="check"
|
||||
size={20}
|
||||
color="white"
|
||||
/>
|
||||
)}
|
||||
</View>
|
||||
</View>
|
||||
</TouchableBounce>
|
||||
);
|
||||
}
|
||||
@@ -0,0 +1,80 @@
|
||||
node_modules/**/*
|
||||
.expo/*
|
||||
npm-debug.*
|
||||
*.jks
|
||||
*.p8
|
||||
*.p12
|
||||
*.key
|
||||
*.mobileprovision
|
||||
*.orig.*
|
||||
web-build/
|
||||
|
||||
# macOS
|
||||
.DS_Store
|
||||
|
||||
|
||||
/artifacts
|
||||
|
||||
/scripts/start.command
|
||||
/ios
|
||||
/android
|
||||
# @generated expo-cli sync-e7dcf75f4e856f7b6f3239b3f3a7dd614ee755a8
|
||||
# The following patterns were generated by expo-cli
|
||||
|
||||
# OSX
|
||||
#
|
||||
.DS_Store
|
||||
|
||||
# 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/IntelliJ
|
||||
#
|
||||
build/
|
||||
.idea
|
||||
.gradle
|
||||
local.properties
|
||||
*.iml
|
||||
*.hprof
|
||||
|
||||
# node.js
|
||||
#
|
||||
node_modules/
|
||||
npm-debug.log
|
||||
yarn-error.log
|
||||
|
||||
# BUCK
|
||||
buck-out/
|
||||
\.buckd/
|
||||
*.keystore
|
||||
!debug.keystore
|
||||
|
||||
# Bundle artifacts
|
||||
*.jsbundle
|
||||
|
||||
# CocoaPods
|
||||
/ios/Pods/
|
||||
|
||||
# Expo
|
||||
.expo/
|
||||
web-build/
|
||||
dist/
|
||||
|
||||
# @end expo-cli
|
||||
@@ -0,0 +1,16 @@
|
||||
const path = require("path");
|
||||
const folderName = path.basename(__dirname);
|
||||
const cleanName = folderName.replace(/[_\s-]/g, "");
|
||||
const appId = "dev.bacon." + cleanName;
|
||||
|
||||
module.exports = ({ config }) => {
|
||||
if (!config.extra) config.extra = {};
|
||||
// Expose CI env variables to the app
|
||||
config.extra.CI = process.env.CI;
|
||||
|
||||
if (!config.ios) config.ios = {};
|
||||
config.ios.bundleIdentifier = appId;
|
||||
if (!config.android) config.android = {};
|
||||
config.android.package = appId;
|
||||
return config;
|
||||
};
|
||||
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"expo": {
|
||||
"icon": "https://icogen.vercel.app/api/icon",
|
||||
"plugins": [
|
||||
"@config-plugins/react-native-google-cast"
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
module.exports = function(api) {
|
||||
api.cache(true);
|
||||
return {
|
||||
presets: ['babel-preset-expo'],
|
||||
};
|
||||
};
|
||||
@@ -0,0 +1,5 @@
|
||||
import { registerRootComponent } from "expo";
|
||||
|
||||
import App from "./src/App";
|
||||
|
||||
registerRootComponent(App);
|
||||
@@ -0,0 +1,6 @@
|
||||
// Learn more https://docs.expo.io/guides/customizing-metro
|
||||
const { getDefaultConfig } = require("@expo/metro-config");
|
||||
|
||||
const config = getDefaultConfig(__dirname);
|
||||
|
||||
module.exports = config;
|
||||
@@ -0,0 +1,25 @@
|
||||
{
|
||||
"name": "@config-plugins-app/react-native-google-cast",
|
||||
"main": "./index.js",
|
||||
"version": "1.0.0",
|
||||
"scripts": {
|
||||
"start": "expo start --dev-client",
|
||||
"ios": "expo run:ios",
|
||||
"android": "expo run:android"
|
||||
},
|
||||
"dependencies": {
|
||||
"@config-plugins/react-native-google-cast": "*",
|
||||
"expo": "^45.0.0",
|
||||
"expo-splash-screen": "~0.15.1",
|
||||
"react": "17.0.2",
|
||||
"react-native": "0.68.2",
|
||||
"react-native-google-cast": "^4.1.2",
|
||||
"expo-status-bar": "~1.3.0",
|
||||
"react-dom": "17.0.2",
|
||||
"react-native-web": "0.17.7"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@babel/core": "^7.12.9"
|
||||
},
|
||||
"private": true
|
||||
}
|
||||
@@ -0,0 +1,86 @@
|
||||
import React from "react";
|
||||
import { View, Text, Button } from "react-native";
|
||||
import GoogleCast, {
|
||||
CastState,
|
||||
CastButton,
|
||||
useCastState,
|
||||
useRemoteMediaClient,
|
||||
} from "react-native-google-cast";
|
||||
|
||||
export default function HomeScreen() {
|
||||
const castState = useCastState();
|
||||
const client = useRemoteMediaClient();
|
||||
|
||||
GoogleCast.showIntroductoryOverlay();
|
||||
|
||||
const isConnected = castState === CastState.CONNECTED;
|
||||
|
||||
function cast() {
|
||||
client
|
||||
.loadMedia({
|
||||
mediaInfo: {
|
||||
contentUrl:
|
||||
"https://commondatastorage.googleapis.com/gtv-videos-bucket/CastVideos/mp4/BigBuckBunny.mp4",
|
||||
contentType: "video/mp4",
|
||||
metadata: {
|
||||
images: [
|
||||
{
|
||||
url: "https://commondatastorage.googleapis.com/gtv-videos-bucket/CastVideos/images/480x270/BigBuckBunny.jpg",
|
||||
},
|
||||
],
|
||||
title: "Big Buck Bunny",
|
||||
subtitle:
|
||||
"A large and lovable rabbit deals with three tiny bullies, led by a flying squirrel, who are determined to squelch his happiness.",
|
||||
studio: "Blender Foundation",
|
||||
type: "movie",
|
||||
},
|
||||
streamDuration: 596, // seconds
|
||||
},
|
||||
startTime: 10, // seconds
|
||||
})
|
||||
.then(console.log)
|
||||
.catch(console.warn);
|
||||
}
|
||||
|
||||
return (
|
||||
<View style={{ flex: 1, justifyContent: "center", alignItems: "center" }}>
|
||||
<Text>State: {castState}</Text>
|
||||
<CastButton style={{ width: 24, height: 24 }} />
|
||||
<Button
|
||||
title="Overlay"
|
||||
onPress={() => {
|
||||
GoogleCast.showIntroductoryOverlay();
|
||||
}}
|
||||
/>
|
||||
<Button
|
||||
title="Expanded Controls"
|
||||
onPress={() => {
|
||||
GoogleCast.showExpandedControls();
|
||||
}}
|
||||
/>
|
||||
|
||||
<Button
|
||||
title="Cast"
|
||||
disabled={!isConnected}
|
||||
onPress={() => {
|
||||
cast();
|
||||
}}
|
||||
/>
|
||||
<Button
|
||||
title="Pause"
|
||||
disabled={!isConnected}
|
||||
onPress={() => {
|
||||
// cast()
|
||||
client.pause();
|
||||
}}
|
||||
/>
|
||||
<Button
|
||||
title="Disconnect"
|
||||
disabled={!isConnected}
|
||||
onPress={() => {
|
||||
GoogleCast.sessionManager.endCurrentSession(true);
|
||||
}}
|
||||
/>
|
||||
</View>
|
||||
);
|
||||
}
|
||||
@@ -0,0 +1,80 @@
|
||||
node_modules/**/*
|
||||
.expo/*
|
||||
npm-debug.*
|
||||
*.jks
|
||||
*.p8
|
||||
*.p12
|
||||
*.key
|
||||
*.mobileprovision
|
||||
*.orig.*
|
||||
web-build/
|
||||
|
||||
# macOS
|
||||
.DS_Store
|
||||
|
||||
|
||||
/artifacts
|
||||
|
||||
/scripts/start.command
|
||||
/ios
|
||||
/android
|
||||
# @generated expo-cli sync-e7dcf75f4e856f7b6f3239b3f3a7dd614ee755a8
|
||||
# The following patterns were generated by expo-cli
|
||||
|
||||
# OSX
|
||||
#
|
||||
.DS_Store
|
||||
|
||||
# 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/IntelliJ
|
||||
#
|
||||
build/
|
||||
.idea
|
||||
.gradle
|
||||
local.properties
|
||||
*.iml
|
||||
*.hprof
|
||||
|
||||
# node.js
|
||||
#
|
||||
node_modules/
|
||||
npm-debug.log
|
||||
yarn-error.log
|
||||
|
||||
# BUCK
|
||||
buck-out/
|
||||
\.buckd/
|
||||
*.keystore
|
||||
!debug.keystore
|
||||
|
||||
# Bundle artifacts
|
||||
*.jsbundle
|
||||
|
||||
# CocoaPods
|
||||
/ios/Pods/
|
||||
|
||||
# Expo
|
||||
.expo/
|
||||
web-build/
|
||||
dist/
|
||||
|
||||
# @end expo-cli
|
||||
@@ -0,0 +1,16 @@
|
||||
const path = require("path");
|
||||
const folderName = path.basename(__dirname);
|
||||
const cleanName = folderName.replace(/[_\s-]/g, "");
|
||||
const appId = "dev.bacon." + cleanName;
|
||||
|
||||
module.exports = ({ config }) => {
|
||||
if (!config.extra) config.extra = {};
|
||||
// Expose CI env variables to the app
|
||||
config.extra.CI = process.env.CI;
|
||||
|
||||
if (!config.ios) config.ios = {};
|
||||
config.ios.bundleIdentifier = appId;
|
||||
if (!config.android) config.android = {};
|
||||
config.android.package = appId;
|
||||
return config;
|
||||
};
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"expo": {
|
||||
"icon": "https://icogen.vercel.app/api/icon?icon=🎆",
|
||||
"plugins": [
|
||||
"@config-plugins/react-native-blob-util",
|
||||
"@config-plugins/react-native-pdf"
|
||||
]
|
||||
}
|
||||
}
|
||||