commit c2d731789738825bda36f06b673c0ee3f3a335b2 Author: kimnato Date: Wed Aug 6 13:49:11 2025 +0800 completion diff --git a/ioneapps-maagapp-ee31119a522d/.buckconfig b/ioneapps-maagapp-ee31119a522d/.buckconfig new file mode 100644 index 0000000..934256c --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/.buckconfig @@ -0,0 +1,6 @@ + +[android] + target = Google Inc.:Google APIs:23 + +[maven_repositories] + central = https://repo1.maven.org/maven2 diff --git a/ioneapps-maagapp-ee31119a522d/.dockerignore b/ioneapps-maagapp-ee31119a522d/.dockerignore new file mode 100644 index 0000000..e8c00ae --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/.dockerignore @@ -0,0 +1,13 @@ +# ------------------------------------------------------------------------------ +# IGNORE ALL: +# ------------------------------------------------------------------------------ +* + +# ------------------------------------------------------------------------------ +# EXCEPT THE FOLLOWING: +# ------------------------------------------------------------------------------ + +# DIRECTORIES + +# FILES +!package.json diff --git a/ioneapps-maagapp-ee31119a522d/.editorconfig b/ioneapps-maagapp-ee31119a522d/.editorconfig new file mode 100644 index 0000000..dd027f6 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/.editorconfig @@ -0,0 +1,35 @@ +# For more information about the properties used in +# this file, please see the EditorConfig documentation: +# http://editorconfig.org/ + +root = true + +[*] +# Applied to the following file types: +# - js +# - coffee +# - opts +# - Makefile +# - md +# - Dockerfile +# - xml +# - opts +# - dot files +charset = utf-8 +end_of_line = lf +indent_style = tab +insert_final_newline = true +trim_trailing_whitespace = true + +[*.json] +indent_size = 2 +indent_style = space + +[{*.yml,*.yaml,*.java,*.kt,*.kts,*.py,*.sql,*.gradle}] +# Applied to the following file types: +# - java +# - kotlin +# - python +# - sql +# - yaml (http://www.yaml.org/spec/1.2/spec.html#id2777534) +indent_style = space diff --git a/ioneapps-maagapp-ee31119a522d/.env b/ioneapps-maagapp-ee31119a522d/.env new file mode 100644 index 0000000..a72e826 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/.env @@ -0,0 +1,5 @@ +APP_ID=com.ioneres.maagap +BUCKET_PREFIX=maagap-prod- +debug=false +ENV=prod +MOBILE_API_URL=https://87kprj6t9i.execute-api.ap-southeast-1.amazonaws.com/staging diff --git a/ioneapps-maagapp-ee31119a522d/.env.alpha b/ioneapps-maagapp-ee31119a522d/.env.alpha new file mode 100644 index 0000000..7de0491 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/.env.alpha @@ -0,0 +1,5 @@ +APP_ID=com.ioneres.maagap +BUCKET_PREFIX=maagap-alpha- +debug=true +ENV=alpha +MOBILE_API_URL=https://87kprj6t9i.execute-api.ap-southeast-1.amazonaws.com/staging diff --git a/ioneapps-maagapp-ee31119a522d/.env.beta b/ioneapps-maagapp-ee31119a522d/.env.beta new file mode 100644 index 0000000..b38a3c8 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/.env.beta @@ -0,0 +1,5 @@ +APP_ID=com.ioneres.maagap +BUCKET_PREFIX=maagap-beta- +debug=true +ENV=beta +MOBILE_API_URL=https://87kprj6t9i.execute-api.ap-southeast-1.amazonaws.com/staging diff --git a/ioneapps-maagapp-ee31119a522d/.env.dev b/ioneapps-maagapp-ee31119a522d/.env.dev new file mode 100644 index 0000000..6c51b27 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/.env.dev @@ -0,0 +1,5 @@ +APP_ID=com.ioneres.maagap +BUCKET_PREFIX=maagap-dev- +debug=true +ENV=dev +MOBILE_API_URL=https://87kprj6t9i.execute-api.ap-southeast-1.amazonaws.com/staging diff --git a/ioneapps-maagapp-ee31119a522d/.env.qa b/ioneapps-maagapp-ee31119a522d/.env.qa new file mode 100644 index 0000000..13970b5 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/.env.qa @@ -0,0 +1,5 @@ +APP_ID=com.ioneres.maagap +BUCKET_PREFIX=maagap-qa- +debug=true +ENV=qa +MOBILE_API_URL=https://87kprj6t9i.execute-api.ap-southeast-1.amazonaws.com/staging diff --git a/ioneapps-maagapp-ee31119a522d/.env.rnd b/ioneapps-maagapp-ee31119a522d/.env.rnd new file mode 100644 index 0000000..fac05d7 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/.env.rnd @@ -0,0 +1,5 @@ +APP_ID=com.ioneres.maagap +BUCKET_PREFIX=maagap-rnd- +debug=true +ENV=rnd +MOBILE_API_URL=https://87kprj6t9i.execute-api.ap-southeast-1.amazonaws.com/staging diff --git a/ioneapps-maagapp-ee31119a522d/.eslintignore b/ioneapps-maagapp-ee31119a522d/.eslintignore new file mode 100644 index 0000000..f98279e --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/.eslintignore @@ -0,0 +1,10 @@ +.vscode +android +coverage +docker +e2e +fastlane +ios +scripts +node_modules +babel.config.js diff --git a/ioneapps-maagapp-ee31119a522d/.eslintrc.js b/ioneapps-maagapp-ee31119a522d/.eslintrc.js new file mode 100644 index 0000000..1b65ece --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/.eslintrc.js @@ -0,0 +1,34 @@ +module.exports = { + root: true, + // extends: '@react-native-community', + "env": { + "browser": true + }, + "extends": "airbnb", + "globals": { + "__DEV__": true + }, + "parser": "babel-eslint", + "parserOptions": { + "ecmaVersion": 6, + "ecmaFeatures": { "legacyDecorators": true } + }, + "rules": { + "react/jsx-filename-extension": ["error", { extensions: [".js", ".jsx"] }], + "indent": [2, "tab", { "SwitchCase": 1, "VariableDeclarator": 1 }], + "no-tabs": 0, + "max-len": [2, { "code": 120, "tabWidth": 1, "ignoreComments": true, "ignoreTrailingComments": true, "ignoreUrls": true, "ignoreStrings": true, "ignoreTemplateLiterals": true, "ignoreRegExpLiterals": true }], + "arrow-parens": 0, + "react/jsx-indent": [2, "tab"], + "react/jsx-indent-props": [2, "tab"], + "react/forbid-prop-types": 0, + "react/prefer-stateless-function": 0, + "import/prefer-default-export": 0, + "quotes": [2, "single", "avoid-escape"], + }, + "settings": { + "import/resolver": { + "babel-module": {} + } + } +}; diff --git a/ioneapps-maagapp-ee31119a522d/.flowconfig b/ioneapps-maagapp-ee31119a522d/.flowconfig new file mode 100644 index 0000000..9edb1be --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/.flowconfig @@ -0,0 +1,75 @@ +[ignore] +; We fork some components by platform +.*/*[.]android.js + +; Ignore "BUCK" generated dirs +/\.buckd/ + +; Ignore polyfills +node_modules/react-native/Libraries/polyfills/.* + +; These should not be required directly +; require from fbjs/lib instead: require('fbjs/lib/warning') +node_modules/warning/.* + +; Flow doesn't support platforms +.*/Libraries/Utilities/LoadingView.js + +[untyped] +.*/node_modules/@react-native-community/cli/.*/.* + +[include] + +[libs] +node_modules/react-native/Libraries/react-native/react-native-interface.js +node_modules/react-native/flow/ + +[options] +emoji=true + +esproposal.optional_chaining=enable +esproposal.nullish_coalescing=enable + +module.file_ext=.js +module.file_ext=.json +module.file_ext=.ios.js + +munge_underscores=true + +module.name_mapper='^react-native$' -> '/node_modules/react-native/Libraries/react-native/react-native-implementation' +module.name_mapper='^react-native/\(.*\)$' -> '/node_modules/react-native/\1' +module.name_mapper='^[./a-zA-Z0-9$_-]+\.\(bmp\|gif\|jpg\|jpeg\|png\|psd\|svg\|webp\|m4v\|mov\|mp4\|mpeg\|mpg\|webm\|aac\|aiff\|caf\|m4a\|mp3\|wav\|html\|pdf\)$' -> '/node_modules/react-native/Libraries/Image/RelativeImageStub' + +suppress_type=$FlowIssue +suppress_type=$FlowFixMe +suppress_type=$FlowFixMeProps +suppress_type=$FlowFixMeState + +suppress_comment=\\(.\\|\n\\)*\\$FlowFixMe\\($\\|[^(]\\|(\\(\\)? *\\(site=[a-z,_]*react_native\\(_ios\\)?_\\(oss\\|fb\\)[a-z,_]*\\)?)\\) +suppress_comment=\\(.\\|\n\\)*\\$FlowIssue\\((\\(\\)? *\\(site=[a-z,_]*react_native\\(_ios\\)?_\\(oss\\|fb\\)[a-z,_]*\\)?)\\)?:? #[0-9]+ +suppress_comment=\\(.\\|\n\\)*\\$FlowExpectedError + +[lints] +sketchy-null-number=warn +sketchy-null-mixed=warn +sketchy-number=warn +untyped-type-import=warn +nonstrict-import=warn +deprecated-type=warn +unsafe-getters-setters=warn +inexact-spread=warn +unnecessary-invariant=warn +signature-verification-failure=warn +deprecated-utility=error + +[strict] +deprecated-type +nonstrict-import +sketchy-null +unclear-type +unsafe-getters-setters +untyped-import +untyped-type-import + +[version] +^0.105.0 \ No newline at end of file diff --git a/ioneapps-maagapp-ee31119a522d/.gitattributes b/ioneapps-maagapp-ee31119a522d/.gitattributes new file mode 100644 index 0000000..d42ff18 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/.gitattributes @@ -0,0 +1 @@ +*.pbxproj -text diff --git a/ioneapps-maagapp-ee31119a522d/.gitignore b/ioneapps-maagapp-ee31119a522d/.gitignore new file mode 100644 index 0000000..9a94917 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/.gitignore @@ -0,0 +1,112 @@ +# 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 + +# node.js +# +node_modules +npm-debug.log +yarn-error.log + +# VS Code +# +.vscode/ +.settings + +# BUCK +buck-out/ +\.buckd/ +*.keystore + +# VS Code +# +.vscode/ +.settings + +# fastlane +# +# It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the +# screenshots whenever they are needed. +# For more information about the recommended setup visit: +# https://docs.fastlane.tools/best-practices/source-control/ + +fastlane/report.xml +fastlane/Preview.html +fastlane/screenshots +fastlane/README.md + +coverage/ +*.mobileprovision +*.dSYM.zip +ios/Nixplay/main.jsbundle +ios/Nixplay/main.jsbundle.meta +.vscode/launch.json +android/app/src/main/assets/crashlytics-build.properties +android/app/src/main/res/values/com_crashlytics_export_strings.xml + +third-party/ + +# cocoapods +ios/Pods +android/app/fabric.properties +reactNativeQueue.realm* + +# Google services.json +# android/app/google-services.json + +# Java class files +*.class +android/app/build/* +android/app/bin +android/app/.classpath +android/app/.project +android/.project + +# Language files +language.csv + + +#Jenkins rvm +rvm.env +*.cer +fastlane/metadata/ +src/config/revision.json +GoogleService-Info.plist +device-udid-export.txt +firebase-debug.log +android/app/.classpath +android/app/rnd/release/app-rnd-release.apk + +android/app/beneficiary/* +android/app/rnd/* +android/app/rndBE/* +android/app/rndSW/* +android/app/prodSW/* diff --git a/ioneapps-maagapp-ee31119a522d/.nvmrc b/ioneapps-maagapp-ee31119a522d/.nvmrc new file mode 100644 index 0000000..f599e28 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/.nvmrc @@ -0,0 +1 @@ +10 diff --git a/ioneapps-maagapp-ee31119a522d/.watchmanconfig b/ioneapps-maagapp-ee31119a522d/.watchmanconfig new file mode 100644 index 0000000..9e26dfe --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/.watchmanconfig @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/ioneapps-maagapp-ee31119a522d/CHANGELOG.md b/ioneapps-maagapp-ee31119a522d/CHANGELOG.md new file mode 100644 index 0000000..1a8f1ee --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/CHANGELOG.md @@ -0,0 +1,61 @@ +Changelog 2019-06-05 10:46:50 +- Customise android transition config +- upgrade react-native-webview + +Changelog 2019-05-28 11:24:32 +- Added svg transform +- migrate ios svg library to podfile +- added metro config + +Changelog 2019-05-24 15:21:03: +- Changed NixShareModule, handle dynamic android content provider uri +- Changed react-native-nixplay-core +- Changed react-native-creedon-imagepicker +- Added shareExtension reducer +- Added shareExtension saga +- Added shareExtension reducer unit test +- Added shareExtension saga unit test +- Changed ShareExtPreview ui/ux +- Changed ShareExtPlaylist ui/ux +- Changed Prompt Natification after upload completed +- Show warning messagewhen user selected contents exist max + +Changelog 2019-05-03 18:45:39: +- react-natvie async-storage → @react-native-community/async-storage 1.2.4 +- migration is not support 1.2.x to 1.3.x , we stick to 1.2.x now + +Change logs 2019-04-26 16:50:16: +upgrade rn 59 +- default node verion 10.x +- react-native-languages → react-native-localize +- react-natvie async-storage → @react-native-community/async-storage +- reat-native slider → @react-native-community_slider +- react-natvie netinfo → @react-native-community/netinfo +- react-native-enhanced-webview → react-native-webview +- upgrade babel babel/core": "^7.4.0" +- .babelrc → babel.config.js +- upgrade jest + - toThrow(error.message) → toThrow(error) + - .toThrow(error.error.message) → toMatch(error.error.message) +- android project.supportLibVersion "27.1.1" → "28.0.0" +- upgrade react-navigation + - added react-native-gesture-handler + - Added export const Root = createAppContainer(RootStack); + - headerSetting.navigationOptions → headerSettings.defaultNavigationOptions +- upfrade react-native firebase + - com.google.gms.googleservices.GoogleServicesPlugin.config.disableVersionCheck = true +- Android Share Extension + - changed Theme.Share.Transparent → default "AppTheme" +- CustomMainReactPackage.java + - spec.getType() → ("http".equals(NetworkingModule.class) || "https".equals(NetworkingModule.class)) +- Added CustomNetworkModule.java +- gradle-4.6 → gradle-5.1.1 +- upgrade react-native-intercom +- depreceated postinstall.sh +- src/components/reduxForm/renderer.js Slider default valude = 0 +- webViewComponent.js using react-native-webview +- src/locale/i18n.js upgrade for RNLocalize +- react-native-video 4.3.1 → 4.4.0(customized) +- Textinput multi charaters input method fixed +- update redux-saga +- __tests__ migrate delay to redux-saga/effect diff --git a/ioneapps-maagapp-ee31119a522d/Gemfile b/ioneapps-maagapp-ee31119a522d/Gemfile new file mode 100644 index 0000000..adc416e --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/Gemfile @@ -0,0 +1,8 @@ +source "https://rubygems.org" + +gem "fastlane" +gem "cocoapods" +gem 'rb-readline' +gem 'pry' +plugins_path = File.join(File.dirname(__FILE__), 'fastlane', 'Pluginfile') +eval_gemfile(plugins_path) if File.exist?(plugins_path) diff --git a/ioneapps-maagapp-ee31119a522d/Gemfile.lock b/ioneapps-maagapp-ee31119a522d/Gemfile.lock new file mode 100644 index 0000000..4133eba --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/Gemfile.lock @@ -0,0 +1,227 @@ +GEM + remote: https://rubygems.org/ + specs: + CFPropertyList (3.0.1) + activesupport (4.2.11.1) + i18n (~> 0.7) + minitest (~> 5.1) + thread_safe (~> 0.3, >= 0.3.4) + tzinfo (~> 1.1) + addressable (2.7.0) + public_suffix (>= 2.0.2, < 5.0) + algoliasearch (1.27.1) + httpclient (~> 2.8, >= 2.8.3) + json (>= 1.5.1) + atomos (0.1.3) + babosa (1.0.3) + claide (1.0.3) + cocoapods (1.8.3) + activesupport (>= 4.0.2, < 5) + claide (>= 1.0.2, < 2.0) + cocoapods-core (= 1.8.3) + cocoapods-deintegrate (>= 1.0.3, < 2.0) + cocoapods-downloader (>= 1.2.2, < 2.0) + cocoapods-plugins (>= 1.0.0, < 2.0) + cocoapods-search (>= 1.0.0, < 2.0) + cocoapods-stats (>= 1.0.0, < 2.0) + cocoapods-trunk (>= 1.4.0, < 2.0) + cocoapods-try (>= 1.1.0, < 2.0) + colored2 (~> 3.1) + escape (~> 0.0.4) + fourflusher (>= 2.3.0, < 3.0) + gh_inspector (~> 1.0) + molinillo (~> 0.6.6) + nap (~> 1.0) + ruby-macho (~> 1.4) + xcodeproj (>= 1.11.1, < 2.0) + cocoapods-core (1.8.3) + activesupport (>= 4.0.2, < 6) + algoliasearch (~> 1.0) + concurrent-ruby (~> 1.1) + fuzzy_match (~> 2.0.4) + nap (~> 1.0) + cocoapods-deintegrate (1.0.4) + cocoapods-downloader (1.2.2) + cocoapods-plugins (1.0.0) + nap + cocoapods-search (1.0.0) + cocoapods-stats (1.1.0) + cocoapods-trunk (1.4.1) + nap (>= 0.8, < 2.0) + netrc (~> 0.11) + cocoapods-try (1.1.0) + coderay (1.1.2) + colored (1.2) + colored2 (3.1.2) + commander-fastlane (4.4.6) + highline (~> 1.7.2) + concurrent-ruby (1.1.5) + declarative (0.0.10) + declarative-option (0.1.0) + digest-crc (0.4.1) + domain_name (0.5.20190701) + unf (>= 0.0.5, < 1.0.0) + dotenv (2.7.5) + emoji_regex (1.0.1) + escape (0.0.4) + excon (0.67.0) + faraday (0.17.0) + multipart-post (>= 1.2, < 3) + faraday-cookie_jar (0.0.6) + faraday (>= 0.7.4) + http-cookie (~> 1.0.0) + faraday_middleware (0.13.1) + faraday (>= 0.7.4, < 1.0) + fastimage (2.1.7) + fastlane (2.134.0) + CFPropertyList (>= 2.3, < 4.0.0) + addressable (>= 2.3, < 3.0.0) + babosa (>= 1.0.2, < 2.0.0) + bundler (>= 1.12.0, < 3.0.0) + colored + commander-fastlane (>= 4.4.6, < 5.0.0) + dotenv (>= 2.1.1, < 3.0.0) + emoji_regex (>= 0.1, < 2.0) + excon (>= 0.45.0, < 1.0.0) + faraday (~> 0.17) + faraday-cookie_jar (~> 0.0.6) + faraday_middleware (~> 0.13.1) + fastimage (>= 2.1.0, < 3.0.0) + gh_inspector (>= 1.1.2, < 2.0.0) + google-api-client (>= 0.21.2, < 0.24.0) + google-cloud-storage (>= 1.15.0, < 2.0.0) + highline (>= 1.7.2, < 2.0.0) + json (< 3.0.0) + jwt (~> 2.1.0) + mini_magick (>= 4.9.4, < 5.0.0) + multi_xml (~> 0.5) + multipart-post (~> 2.0.0) + plist (>= 3.1.0, < 4.0.0) + public_suffix (~> 2.0.0) + rubyzip (>= 1.3.0, < 2.0.0) + security (= 0.1.3) + simctl (~> 1.6.3) + slack-notifier (>= 2.0.0, < 3.0.0) + terminal-notifier (>= 2.0.0, < 3.0.0) + terminal-table (>= 1.4.5, < 2.0.0) + tty-screen (>= 0.6.3, < 1.0.0) + tty-spinner (>= 0.8.0, < 1.0.0) + word_wrap (~> 1.0.0) + xcodeproj (>= 1.8.1, < 2.0.0) + xcpretty (~> 0.3.0) + xcpretty-travis-formatter (>= 0.0.3) + fastlane-plugin-firebase_app_distribution (0.1.4) + fourflusher (2.3.1) + fuzzy_match (2.0.4) + gh_inspector (1.1.3) + google-api-client (0.23.9) + addressable (~> 2.5, >= 2.5.1) + googleauth (>= 0.5, < 0.7.0) + httpclient (>= 2.8.1, < 3.0) + mime-types (~> 3.0) + representable (~> 3.0) + retriable (>= 2.0, < 4.0) + signet (~> 0.9) + google-cloud-core (1.3.2) + google-cloud-env (~> 1.0) + google-cloud-env (1.2.1) + faraday (~> 0.11) + google-cloud-storage (1.16.0) + digest-crc (~> 0.4) + google-api-client (~> 0.23) + google-cloud-core (~> 1.2) + googleauth (>= 0.6.2, < 0.10.0) + googleauth (0.6.7) + faraday (~> 0.12) + jwt (>= 1.4, < 3.0) + memoist (~> 0.16) + multi_json (~> 1.11) + os (>= 0.9, < 2.0) + signet (~> 0.7) + highline (1.7.10) + http-cookie (1.0.3) + domain_name (~> 0.5) + httpclient (2.8.3) + i18n (0.9.5) + concurrent-ruby (~> 1.0) + json (2.2.0) + jwt (2.1.0) + memoist (0.16.0) + method_source (0.9.2) + mime-types (3.3) + mime-types-data (~> 3.2015) + mime-types-data (3.2019.1009) + mini_magick (4.9.5) + minitest (5.12.2) + molinillo (0.6.6) + multi_json (1.14.1) + multi_xml (0.6.0) + multipart-post (2.0.0) + nanaimo (0.2.6) + nap (1.1.0) + naturally (2.2.0) + netrc (0.11.0) + os (1.0.1) + plist (3.5.0) + pry (0.12.2) + coderay (~> 1.1.0) + method_source (~> 0.9.0) + public_suffix (2.0.5) + rb-readline (0.5.5) + representable (3.0.4) + declarative (< 0.1.0) + declarative-option (< 0.2.0) + uber (< 0.2.0) + retriable (3.1.2) + rouge (2.0.7) + ruby-macho (1.4.0) + rubyzip (1.3.0) + security (0.1.3) + signet (0.12.0) + addressable (~> 2.3) + faraday (~> 0.9) + jwt (>= 1.5, < 3.0) + multi_json (~> 1.10) + simctl (1.6.6) + CFPropertyList + naturally + slack-notifier (2.3.2) + terminal-notifier (2.0.0) + terminal-table (1.8.0) + unicode-display_width (~> 1.1, >= 1.1.1) + thread_safe (0.3.6) + tty-cursor (0.7.0) + tty-screen (0.7.0) + tty-spinner (0.9.1) + tty-cursor (~> 0.7) + tzinfo (1.2.5) + thread_safe (~> 0.1) + uber (0.1.0) + unf (0.1.4) + unf_ext + unf_ext (0.0.7.6) + unicode-display_width (1.6.0) + word_wrap (1.0.0) + xcodeproj (1.13.0) + CFPropertyList (>= 2.3.3, < 4.0) + atomos (~> 0.1.3) + claide (>= 1.0.2, < 2.0) + colored2 (~> 3.1) + nanaimo (~> 0.2.6) + xcpretty (0.3.0) + rouge (~> 2.0.7) + xcpretty-travis-formatter (1.0.0) + xcpretty (~> 0.2, >= 0.0.7) + +PLATFORMS + ruby + +DEPENDENCIES + cocoapods + fastlane + fastlane-plugin-firebase_app_distribution + pry + rb-readline + +BUNDLED WITH + 2.0.2 diff --git a/ioneapps-maagapp-ee31119a522d/README-lang.md b/ioneapps-maagapp-ee31119a522d/README-lang.md new file mode 100644 index 0000000..1e99b0e --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/README-lang.md @@ -0,0 +1,83 @@ +## Localization Rules + +1. Files is separated by categories. __DO NOT__ just stuff everything in `common`. See below. +2. Include punctuations in the json. Duplicates are ok if necessary. For example: + ``` + { + "Friends": "Friends", + "friends": "friends", + "signOut?": "Sign out?", + "signout": "Sign out" + } + ``` +3. When creating files in `en`, create the same files in the other language also, even if its an empty object. + __DO NOT__ give an empty string, empty string does not fallback to `en` +4. __DO NOT__ have more that 1 first level key in the json file, because it is used in the script for importing the texts as filename. +5. __DO NOT__ fill other language files with english. Just leave the field blank, so that the translators know which one to translate. +6. Check if your text available or not before you add new text. +7. The key of your text should be related to the content, not to the component using it. This will help preventing duplicates. +8. __BE CAREFUL__ when changing the existing key, check for all occurrence of previous key. + +### IMPORTANT +__NEVER__ do something like this: +``` +i18n.t('common.friend').toLowerCase().concat('s') +``` +Firstly, its the wrong category, should be `friends`. +Secondly, not all plural ends with `s` or `es`. For example, friend and friends: + - German: `Freund` and `Freunde` + - Chinese Simplified: `朋友` and `朋友们` +Thirdly, `toLowerCase` is tolerable, but better not, because same as the reason above, you cannot guarantee all language follow the same rules. + + +### Categories: +1. Common: + anything that you cannot guess the category when you read it + +2. Users: + - first / last name + - email + - username + - password + - country + - accounts + - tnc / privacy + +3. Contents: + - photo + - video + - item + - caption + - upload + - download + +4. Albums +5. Playlists +6. Frames +7. Friends + +#### Exception: +- Frame Settings + + +## Updating languages copy +`babel-node` is a command that comes with `@babel/node` + +``` +npm i -g @babel/core @babel/node + +``` + +### Exporting +Output folder will be the folder where you run the command +``` +babel-node src/locale/export-to-csv.js +``` + +### Importing +``` +babel-node src/locale/import-from-csv.js ./path/to/csv/lang.csv ./path/to/locale/folder + +# example: babel-node src/locale/import-from-csv.js language.csv src/locale/lang/ +``` + diff --git a/ioneapps-maagapp-ee31119a522d/README.md b/ioneapps-maagapp-ee31119a522d/README.md new file mode 100644 index 0000000..b5a35af --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/README.md @@ -0,0 +1,411 @@ +# MAAGApp Mobile App + +## 1. Setup +### 1.1 Compatibility +To run this mobile app, we need to have node `8.x.x` installed. +To install and manage multiple versions of node, we can use [nvm](https://github.com/creationix/nvm) +We also need to have installed Ruby version 2.3.X to use Gem. + +### 1.2 Install + +Install [cocoapod](https://guides.cocoapods.org/using/getting-started.html) + +Clone the repository and then install all dependencies by running the following command +```bash +nvm use +npm install +``` +### 1.3 Run +To run on iOS simulator + +pre install pod + +```bash +npm run pod +``` + +or + +```bash +cd ios +pod install +cd ../ +npm run ios +``` + +#### Run specific scheme +```bash +npm run ios -- --scheme "Nixplay" --device "e32c0db8ed7e5ac2be743dcada78b57ac944fd6e" +``` +or + +```bash +npm run ios:rnd -- --simulator "iPhone X" +``` + +or + +```bash +npm run ios:rnd -- --device "iPhone X" +``` + +```bash +npm run ios:qa -- --device "iPhone X" +``` + +To run on Android emulator +```bash +npm run android +``` + +To run the unit tests +```bash +npm test +``` + +To run the unit tests in watch mode +```bash +npm run test:watch +``` +## 2. Deploying Alpha build (We will use this until we release to PROD) +### 2.1 Increment build number +Alpha build is built using the develop branch with only the build number set to `git rev-list --count develop`. To create a new alpha build simply run the following command to update build number and commit it: + +Update package.json version +e.g + +"version": "3.0.1" + +1. run `jq -r '.version' package.json` to echo +1. `npm run create:release:branch` create release branch with version name +1. `npm run prerelease` bumped version code when release to qa +2. `git flow release finish` to close release branch + + +### 2.2 Release an iOS build +After running the prerelease script, we can release iOS build by running the following command: +```bash +npm run ios:release:alpha +``` + +### 2.3 Release an Android build +After running the prerelease script, we can release Android build by running the following command: +```bash +npm run android:release:alpha +``` + +## 3. Deploying to QA +### 3.1 Before you begin + +#### 3.1.A Setup prpvisioning profile +You need to install Fabric app to your mac. You need a account with https://fabric.io/, ask `Kumar` / `James` to send an invite so an account on Fabric can be created. After creating an account you can download and install the Fabric app. + +You need 2 passwords to successfully deploy the app to crashlytics 1) the passcode for decrypting developer certificates to use with match and 2) the password for **mobile@nix-digital.com** apple developer account. Again ask `Kumar` / `James` for these. + +You also need to install Fastlane CLI. Run the following command to do so: +```bash +gem install fastlane -NV +``` + +#### 3.1.B sync certificat +If certificate is outdate/not be synced run the following commnad to sync up from repo + + + +`fastlane ios certificates --env=` + +e.g. +```bash +fastlane ios certificates --env=rnd +``` + +for specific type of cert + +`fastlane ios read_dev_cert --env=` +`fastlane ios read_adhoc_cert --env=` +`fastlane ios read_appstore_cert --env=` + + +### 3.2 Create release branch +You can either use gitflow or simply use git to create a new branch: +```bash +git flow release start +``` +or + +```bash +git checkout -b release/ +``` + +### 3.3 Bump build number +Bump build number and run other prerelease scripts like npm install etc +```bash +npm run prerelease +``` + +### 3.3.1 Bump version number +```bash +npm --no-git-tag-version version [major|minor|patch] patch -m "Upgrade to version %s" +``` + +example output + +``` bash +npm --no-git-tag-version version patch -m "Upgrade to version %s" +v0.1.2 +[RNV] Versioning Android... +[RNV] Android updated +[RNV] Versioning iOS... +[RNV] iOS updated +[RNV] Amending... +[RNV] Adjusting Git tag... +[RNV] Done +``` + +### 3.4 Release to QA +Release iOS version to QA: + +```bash +npm run ios:release:qa +``` +Release Android version to QA: +```bash +npm run android:release:qa +``` + +#### 3.4.1 Extra command +Release to Alpha: + +```bash +npm run ios:release:alpha +npm run android:release:alpha +``` + + +### 3.5 Merge the release branch back to Develop and Master + +## 4. Workflow +Always create a new git branch to work on a user story. After a user story is completed then commit the code and push your changes. Login to https://git.nixplay.ninja/ and create a **Merge Request**, make sure to assign it to someone. The assignee should review the code and discuss if any issues with the committer and if no issues then merge it back to the develop branch. + +> Note: Please never use **--no-verify** when pushing your changes to any branch including feature branches. + +### 4.1 Create a new branch +You can either create a new branch using `git` or use `gitflow` if you have that set up +To create and switch to a new branch you can: +```bash +git checkout -b +``` + +Work on a user story and make sure to add unit tests to cover your changes and to fix any broken unit tests due to the changes made. + +### 4.2 Commit your changes and create merge request +Continue to commit changes regularly but make sure all tests and eslint issues is fixed before pushing. If you think a user story is done then go to https://git.nixplay.ninja/ and create a new merge request and assign it to someone to merge. + +> Note: Do not commit directly to master or develop branch unless the changes is minimal. This means changing this README file is okay to commit directly to develop branch or changing the padding of a component. Any changes that requires more changes than that should be committed to feature branch. + +### 4.3 Merge back from develop branch often +When we are working on a feature branch we may diverge from the develop branch. To ensure what we are doing is as upto date as possible and also to avoid merge conflicts, we should merge develop branch to our feature branch as often as possible. + +### 5 Update reducerVersion when modifying the index reducer +Whenever we modify `src/reducers/index.js` we should also make sure we update the reducerVersion in `src/config/ReduxPersist.js` to prevent the app from crashing. + +## Troubleshooting +iOS error `No bundle url present`, can try: +- https://www.andrewcbancroft.com/2017/04/22/solving-react-natives-no-bundle-url-present-error/ + + +iOS error related to bundle url, you can also try: +- Kill the existing bundler process and then run the bundler + ```bash + watchman watch-del-all + yarn cache clean + npm start -- --reset-cache + ``` + +iOS error `Entry, :CFBundleIdentifier, Does Not Exist`, can try: +- Run + ```bash + npm run build:ios + ``` + +Android stuck on splash screen, can try: +- Uninstall the app, then run + ```bash + npm run android + ``` + +If you see a version mismatch error message then try running the following command: +```bash +npm run ios:reset +``` + +Android build failed + +``` +Could not find manifest-merger.jar ... +``` + +run `rm -rf $HOME/.gradle/caches` +run `./android/gradlew cleanBuildCache -p ./android` + +## Update app icon with single command +``` bash +https://blog.bam.tech/developper-news/change-your-react-native-app-icons-in-a-single-command-line +``` + + +# Testing Subscription +Library used: [react-native-iap](https://github.com/dooboolab/react-native-iap) + +Subscription flow: +![Subscription Flow](https://miro.medium.com/max/1400/1*LuTwkpUazCzJugMaYBZm2Q.png) +Reference: https://medium.com/dooboolab/react-native-iap-v3-1259e0b0c017 + +### Creating subscription item for iOS +`Apple Store Connect` > `My Apps` > Select an App > `Features` > `In-App Purchases` > Create your item + +__IMPORTANT:__ Your item need to be `Ready to Submit` in RND and QA for it to purchasable. + +__IMPORTANT 2:__ Product ID is unique and is for all apps. Even if you delete the item, you still cannot create with the same product ID even in another env. + +### Creating subscription item for Android +`Google Play Console` > Select an App > `Store presence` > `In-app products` > `Subscriptions` > Create your item + +__NOTE:__ Once you activate the subscription item, there is no way to deactivate or delete. + +### Setting up sandbox on iOS +Create an email address under: +`Apple Store Connect` > `Users and Access` > `Testers` + +__Note:__ Cannot create with email that is used for existing appleID, you can create using a non-existing email address. +There will be no purchase related email sent for sandbox purchase. + +### Setting up sandbox on Android +1. Make sure the email address you register for testing is the primary account in your phone. + That means the account is the first ever account you use in your phone. + If not, remove all gmail account, then login with that email. + Or, create another user profile in your phone (if the function is enabled), and use the email address registered as a user +2. Add email address in `Google Play Console > Settings > Account Details > License Testing` +3. Add email address in one of the list in `Google Play Console > Manage email lists` +4. Open this url with the email account you register: + - RND: `https://play.google.com/apps/testing/com.creedon.Nixplay.rnd` + - QA: `https://play.google.com/apps/testing/com.creedon.Nixplay.qa` + +__Extra:__ The enabled countries might matters. Go to ` App (RND / QA) > Store presence > Pricing & distribution > Countries`, and enable the country. + +### Subscription renewal timing +There is no way to manually unsubscribe in iOS sandbox, need to wait. +For Android, can unsubsribe in playstore. +Here are the info for the timings: +- https://help.apple.com/app-store-connect/#/dev7e89e149d +- https://developer.android.com/google/play/billing/billing_testing#testing-renewals + + +# Trouble Shooting + +## xcrun: error: unable to find utility "instruments", not a developer + +- if you have the following error message +``` sh +Found Xcode project TestProject.xcodeproj +xcrun: error: unable to find utility "instruments", not a developer +tool or in PATH + +Command failed: xcrun instruments -s +xcrun: error: unable to find utility "instruments", not a developer +tool or in PATH +``` + +``` +sudo xcode-select -s /Applications/Xcode.app +xcode-select --install +``` + +## Gem::Ext::BuildError: ERROR: Failed to build gem native extension. + +- if you have the following error + +``` sh +Fetching json 1.8.1 +Installing json 1.8.1 with native extensions +Gem::Ext::BuildError: ERROR: Failed to build gem native extension. + + current directory: /usr/local/rvm/gems/ruby-2.3.4/gems/json-1.8.1/ext/json/ext/generator +/usr/local/rvm/rubies/ruby-2.3.4/bin/ruby -r ./siteconf20180608-11801-sqv5ra.rb extconf.rb +creating Makefile + +current directory: /usr/local/rvm/gems/ruby-2.3.4/gems/json-1.8.1/ext/json/ext/generator +make "DESTDIR=" clean + +current directory: /usr/local/rvm/gems/ruby-2.3.4/gems/json-1.8.1/ext/json/ext/generator +make "DESTDIR=" +compiling generator.c +In file included from generator.c:1: +./../fbuffer/fbuffer.h:175:47: error: too few arguments provided to function-like macro invocation + VALUE result = rb_str_new(FBUFFER_PAIR(fb)); + ^ +/usr/local/rvm/rubies/ruby-2.3.4/include/ruby-2.3.0/ruby/intern.h:798:9: note: macro 'rb_str_new' defined here +#define rb_str_new(str, len) __extension__ ( \ + ^ +In file included from generator.c:1: +./../fbuffer/fbuffer.h:175:11: warning: incompatible pointer to integer conversion initializing 'VALUE' (aka 'unsigned +long') with an expression of type 'VALUE (const char *, long)' (aka 'unsigned long (const char *, long)') +[-Wint-conversion] + VALUE result = rb_str_new(FBUFFER_PAIR(fb)); + ^ ~~~~~~~~~~ +1 warning and 1 error generated. +make: *** [generator.o] Error 1 + +make failed, exit code 2 + +Gem files will remain installed in /usr/local/rvm/gems/ruby-2.3.4/gems/json-1.8.1 for inspection. +Results logged to /usr/local/rvm/gems/ruby-2.3.4/extensions/x86_64-darwin-16/2.3.0/json-1.8.1/gem_make.out + +An error occurred while installing json (1.8.1), and Bundler cannot continue. +Make sure that `gem install json -v '1.8.1' --source 'https://rubygems.org/'` succeeds before bundling. +``` + +run the following command to update gem file +``` +https://github.com/flori/json/issues/229 +``` + +## 'config.h' file not found +Copy and paste the following commands +``` +cd ./node_modules/react-native +./scripts/ios-install-third-party.sh +cd third-party/glog-0.3.4 +./configure +cd ../../../.. +``` + +## clean the cache + +```bash +npm run clean +``` + +you can run any one of the command individually + +``` +watchman watch-del-all +rm -rf node_modules +npm cache clean +rm -rf android/build/ +rm -rf ./android/app/build/ +rm -rf ./android/.gradle/ +rm -rf ./android/.idea/ +rm -rf ./ios/build +rm -rf ~/Library/Developer/Xcode/DerivedData && npm install +``` + + +## Android subscription `item not found` in RND and QA +Check the `Setting up sandbox on Android` section above diff --git a/ioneapps-maagapp-ee31119a522d/__mocks__/@react-native-community/async-storage.js b/ioneapps-maagapp-ee31119a522d/__mocks__/@react-native-community/async-storage.js new file mode 100644 index 0000000..bece15e --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/__mocks__/@react-native-community/async-storage.js @@ -0,0 +1,8 @@ +/* global jest: true */ + +jest.mock('@react-native-community/async-storage', () => ({ + getItem: () => Promise.resolve(), + setItem: () => Promise.resolve(), + mergeItem: () => Promise.resolve(), + removeItem: () => Promise.resolve(), +})); diff --git a/ioneapps-maagapp-ee31119a522d/__mocks__/@react-native-community/geolocation.js b/ioneapps-maagapp-ee31119a522d/__mocks__/@react-native-community/geolocation.js new file mode 100644 index 0000000..f71fd99 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/__mocks__/@react-native-community/geolocation.js @@ -0,0 +1,11 @@ +/* global jest: true */ + +const geolocation = { + setRNConfiguration: jest.fn(() => {}), + getCurrentPosition: jest.fn(() => {}), + watchPosition: jest.fn(() => {}), + clearWatch: jest.fn(() => {}), + stopObserving: jest.fn(() => {}), +}; + +export default geolocation; diff --git a/ioneapps-maagapp-ee31119a522d/__mocks__/@react-native-community/google-signin.js b/ioneapps-maagapp-ee31119a522d/__mocks__/@react-native-community/google-signin.js new file mode 100644 index 0000000..3806030 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/__mocks__/@react-native-community/google-signin.js @@ -0,0 +1,35 @@ +/* global jest: false */ +import { NativeModules } from 'react-native'; + +jest.mock('@react-native-community/google-signin', () => { + const mockGoogleSignin = require.requireActual('@react-native-community/google-signin'); + + mockGoogleSignin.GoogleSignin.hasPlayServices = () => Promise.resolve(true); + mockGoogleSignin.GoogleSignin.configure = () => Promise.resolve(); + mockGoogleSignin.GoogleSignin.currentUserAsync = () => Promise.resolve({ + name: 'name', + email: 'test@example.com', + // .... other user data + }); + + // ... and other functions you want to mock + + return mockGoogleSignin; +}); + +NativeModules.RNGoogleSignin = { + BUTTON_SIZE_ICON: 0, + BUTTON_SIZE_STANDARD: 0, + BUTTON_SIZE_WIDE: 0, + BUTTON_COLOR_AUTO: 0, + BUTTON_COLOR_LIGHT: 0, + BUTTON_COLOR_DARK: 0, + SIGN_IN_CANCELLED: '0', + IN_PROGRESS: '1', + PLAY_SERVICES_NOT_AVAILABLE: '2', + SIGN_IN_REQUIRED: '3', + configure: jest.fn(), + currentUserAsync: jest.fn(), +}; + +export { NativeModules }; diff --git a/ioneapps-maagapp-ee31119a522d/__mocks__/@react-native-community/netinfo.js b/ioneapps-maagapp-ee31119a522d/__mocks__/@react-native-community/netinfo.js new file mode 100644 index 0000000..7144f0f --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/__mocks__/@react-native-community/netinfo.js @@ -0,0 +1,7 @@ +/* global jest: true */ + +jest.mock('@react-native-community/netinfo', () => ({ + getConnectionInfo: () => Promise.resolve(), + addEventListener: jest.fn(), + isConnected: jest.fn(), +})); diff --git a/ioneapps-maagapp-ee31119a522d/__mocks__/@react-native-community/push-notification-ios.js b/ioneapps-maagapp-ee31119a522d/__mocks__/@react-native-community/push-notification-ios.js new file mode 100644 index 0000000..f14e06a --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/__mocks__/@react-native-community/push-notification-ios.js @@ -0,0 +1,5 @@ +/* global jest: true */ + +jest.mock('@react-native-community/push-notification-ios', () => ({ + +})); diff --git a/ioneapps-maagapp-ee31119a522d/__mocks__/react-native-config.js b/ioneapps-maagapp-ee31119a522d/__mocks__/react-native-config.js new file mode 100644 index 0000000..090ac91 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/__mocks__/react-native-config.js @@ -0,0 +1,9 @@ +// __mocks__/react-native-config.js +export default { + FOO_BAR: 'baz', + FILE_SIZE_LIMIT: 20000000, + MAX_WIDTH: 1820, + MAX_HEIGHT: 1820, + DEFAULT_VIDEO_LENGTH: 15, + DEFAULT_MIN_VIDEO_LENGTH: 3, +}; diff --git a/ioneapps-maagapp-ee31119a522d/__mocks__/react-native-creedon-imagepicker.js b/ioneapps-maagapp-ee31119a522d/__mocks__/react-native-creedon-imagepicker.js new file mode 100644 index 0000000..8bae1b7 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/__mocks__/react-native-creedon-imagepicker.js @@ -0,0 +1,16 @@ +/* global jest: false */ +import { NativeModules } from 'react-native'; + +NativeModules.RNCreedonImagepicker = { + assets: jest.fn(), + launchImageLibrary: jest.fn(), + cleanupTempFiles: jest.fn(), + addListener: jest.fn(), +}; + +const mockRNCreedonImagepicker = jest.genMockFromModule('react-native-creedon-imagepicker'); +mockRNCreedonImagepicker.assets = () => Promise.resolve(); +mockRNCreedonImagepicker.launchImageLibrary = () => Promise.resolve(); +mockRNCreedonImagepicker.cleanupTempFiles = () => Promise.resolve(); + +module.exports = mockRNCreedonImagepicker; diff --git a/ioneapps-maagapp-ee31119a522d/__mocks__/react-native-device-info.js b/ioneapps-maagapp-ee31119a522d/__mocks__/react-native-device-info.js new file mode 100644 index 0000000..78b3280 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/__mocks__/react-native-device-info.js @@ -0,0 +1,12 @@ +/* global jest: true */ +const deviceInfo = { + getVersion: () => '1.0.0', + getBuildNumber: () => '100', + getUniqueID: () => '0', + getDeviceId: () => '0', + getModel: () => 'model', + getIPAddress: jest.fn(), + // add more methods as needed +}; + +export default deviceInfo; diff --git a/ioneapps-maagapp-ee31119a522d/__mocks__/react-native-firebase.js b/ioneapps-maagapp-ee31119a522d/__mocks__/react-native-firebase.js new file mode 100644 index 0000000..78d88c0 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/__mocks__/react-native-firebase.js @@ -0,0 +1,14 @@ +/* global jest: true */ + +const firebase = { + messaging: jest.fn(() => ({ + hasPermission: jest.fn(() => new Promise(resolve => resolve(true))), + })), + analytics: jest.fn(() => ({ + logEvent: jest.fn(), + setUserId: jest.fn(), + setUserProperties: jest.fn(), + })), +}; + +export default firebase; diff --git a/ioneapps-maagapp-ee31119a522d/__mocks__/react-native-fs.js b/ioneapps-maagapp-ee31119a522d/__mocks__/react-native-fs.js new file mode 100644 index 0000000..f774d08 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/__mocks__/react-native-fs.js @@ -0,0 +1,44 @@ +/* global jest: true */ +jest.mock('react-native-fs', () => Promise.resolve({ + mkdir: jest.fn(), + moveFile: jest.fn(), + copyFile: jest.fn(), + pathForBundle: jest.fn(), + pathForGroup: jest.fn(), + getFSInfo: jest.fn(), + getAllExternalFilesDirs: jest.fn(), + unlink: jest.fn(), + exists: jest.fn(), + stopDownload: jest.fn(), + resumeDownload: jest.fn(), + isResumable: jest.fn(), + stopUpload: jest.fn(), + completeHandlerIOS: jest.fn(), + readDir: jest.fn(), + readDirAssets: jest.fn(), + existsAssets: jest.fn(), + readdir: jest.fn(), + setReadable: jest.fn(), + stat: jest.fn(), + readFile: jest.fn(), + read: jest.fn(), + readFileAssets: jest.fn(), + hash: jest.fn(), + copyFileAssets: jest.fn(), + copyFileAssetsIOS: jest.fn(), + copyAssetsVideoIOS: jest.fn(), + writeFile: jest.fn(), + appendFile: jest.fn(), + write: jest.fn(), + downloadFile: jest.fn(), + uploadFiles: jest.fn(), + touch: jest.fn(), + MainBundlePath: jest.fn(), + CachesDirectoryPath: jest.fn(), + DocumentDirectoryPath: jest.fn(), + ExternalDirectoryPath: jest.fn(), + ExternalStorageDirectoryPath: jest.fn(), + TemporaryDirectoryPath: jest.fn(), + LibraryDirectoryPath: jest.fn(), + PicturesDirectoryPath: jest.fn(), +})); diff --git a/ioneapps-maagapp-ee31119a522d/__mocks__/react-native-gesture-handler.js b/ioneapps-maagapp-ee31119a522d/__mocks__/react-native-gesture-handler.js new file mode 100644 index 0000000..ee7ff50 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/__mocks__/react-native-gesture-handler.js @@ -0,0 +1,14 @@ +/* global jest: false */ +jest.mock('NativeModules', () => ({ + UIManager: { + RCTView: () => {}, + }, + RNGestureHandlerModule: { + attachGestureHandler: jest.fn(), + createGestureHandler: jest.fn(), + dropGestureHandler: jest.fn(), + updateGestureHandler: jest.fn(), + State: {}, + Directions: {}, + }, +})); diff --git a/ioneapps-maagapp-ee31119a522d/__mocks__/react-native-google-signin.js b/ioneapps-maagapp-ee31119a522d/__mocks__/react-native-google-signin.js new file mode 100644 index 0000000..3806030 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/__mocks__/react-native-google-signin.js @@ -0,0 +1,35 @@ +/* global jest: false */ +import { NativeModules } from 'react-native'; + +jest.mock('@react-native-community/google-signin', () => { + const mockGoogleSignin = require.requireActual('@react-native-community/google-signin'); + + mockGoogleSignin.GoogleSignin.hasPlayServices = () => Promise.resolve(true); + mockGoogleSignin.GoogleSignin.configure = () => Promise.resolve(); + mockGoogleSignin.GoogleSignin.currentUserAsync = () => Promise.resolve({ + name: 'name', + email: 'test@example.com', + // .... other user data + }); + + // ... and other functions you want to mock + + return mockGoogleSignin; +}); + +NativeModules.RNGoogleSignin = { + BUTTON_SIZE_ICON: 0, + BUTTON_SIZE_STANDARD: 0, + BUTTON_SIZE_WIDE: 0, + BUTTON_COLOR_AUTO: 0, + BUTTON_COLOR_LIGHT: 0, + BUTTON_COLOR_DARK: 0, + SIGN_IN_CANCELLED: '0', + IN_PROGRESS: '1', + PLAY_SERVICES_NOT_AVAILABLE: '2', + SIGN_IN_REQUIRED: '3', + configure: jest.fn(), + currentUserAsync: jest.fn(), +}; + +export { NativeModules }; diff --git a/ioneapps-maagapp-ee31119a522d/__mocks__/react-native-haptic-feedback.js b/ioneapps-maagapp-ee31119a522d/__mocks__/react-native-haptic-feedback.js new file mode 100644 index 0000000..666515c --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/__mocks__/react-native-haptic-feedback.js @@ -0,0 +1,15 @@ +/* global jest: false */ +jest.mock('react-native-haptic-feedback', () => ({ + trigger: jest.fn(), +})); + +// import { NativeModules } from 'react-native'; + +// NativeModules.RNReactNativeHapticFeedback = { +// trigger: jest.fn(), +// }; + +// const ReactNativeHapticFeedback = jest.genMockFromModule('react-native-haptic-feedback'); + + +// module.exports = ReactNativeHapticFeedback; diff --git a/ioneapps-maagapp-ee31119a522d/__mocks__/react-native-keychain.js b/ioneapps-maagapp-ee31119a522d/__mocks__/react-native-keychain.js new file mode 100644 index 0000000..22ac826 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/__mocks__/react-native-keychain.js @@ -0,0 +1,5 @@ +/* global jest: false */ + +export const setGenericPassword = () => jest.fn(); +export const getGenericPassword = () => jest.fn(Promise.resolve('')); +export const resetGenericPassword = () => jest.fn(); diff --git a/ioneapps-maagapp-ee31119a522d/__mocks__/react-native-localize.js b/ioneapps-maagapp-ee31119a522d/__mocks__/react-native-localize.js new file mode 100644 index 0000000..0d4fa6a --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/__mocks__/react-native-localize.js @@ -0,0 +1,60 @@ +/* global jest: true */ +// https://github.com/react-native-community/react-native-localize/blob/master/README.md#how-to-test-your-code +const getLocales = () => [ + // you can choose / add the locales you want + { + countryCode: 'US', + languageTag: 'en', + languageCode: 'en', + isRTL: false, + }, + { + countryCode: 'DE', + languageTag: 'de', + languageCode: 'de', + isRTL: false, + }, + { + countryCode: 'JA', + languageTag: 'ja', + languageCode: 'ja', + isRTL: false, + }, +]; + +// use a provided translation, or return undefined to test your fallback +const findBestAvailableLanguage = () => ({ + languageTag: 'en', + isRTL: false, +}); + +const getNumberFormatSettings = () => ({ + decimalSeparator: '.', + groupingSeparator: ',', +}); + +const getCalendar = () => 'gregorian'; // or 'japanese', 'buddhist' +const getCountry = () => 'US'; // the country code you want +const getCurrencies = () => ['USD', 'EUR']; // can be empty array +const getTemperatureUnit = () => 'celsius'; // or 'fahrenheit' +const getTimeZone = () => 'Europe/Paris'; // the timezone you want +const uses24HourClock = () => true; +const usesMetricSystem = () => true; + +const addEventListener = jest.fn(); +const removeEventListener = jest.fn(); + +export { + findBestAvailableLanguage, + getLocales, + getNumberFormatSettings, + getCalendar, + getCountry, + getCurrencies, + getTemperatureUnit, + getTimeZone, + uses24HourClock, + usesMetricSystem, + addEventListener, + removeEventListener, +}; diff --git a/ioneapps-maagapp-ee31119a522d/__mocks__/react-native-nixplay-core.js b/ioneapps-maagapp-ee31119a522d/__mocks__/react-native-nixplay-core.js new file mode 100644 index 0000000..04478bb --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/__mocks__/react-native-nixplay-core.js @@ -0,0 +1,10 @@ +/* global jest: true */ +const NixplayCore = jest.genMockFromModule('react-native-nixplay-core'); + +NixplayCore.setUploadSessionIdentifier = () => Promise.resolve(); +NixplayCore.setApiURL = () => Promise.resolve(); +NixplayCore.setBucketPrefix = () => Promise.resolve(); +NixplayCore.setFileSizeLimit = () => Promise.resolve(); +NixplayCore.startUpload = () => Promise.resolve(); + +export default NixplayCore; diff --git a/ioneapps-maagapp-ee31119a522d/__mocks__/react-native-push-notification.js b/ioneapps-maagapp-ee31119a522d/__mocks__/react-native-push-notification.js new file mode 100644 index 0000000..75e037b --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/__mocks__/react-native-push-notification.js @@ -0,0 +1,13 @@ +/* global jest: true */ + +const PushNotification = jest.genMockFromModule('react-native-push-notification'); + +PushNotification.configure = jest.fn(); +PushNotification.onRegister = jest.fn(); +PushNotification.onNotification = jest.fn(); +PushNotification.addEventListener = jest.fn(); +PushNotification.requestPermissions = jest.fn(); +PushNotification.cancelAllLocalNotifications = jest.fn(); +PushNotification.setApplicationIconBadgeNumber = jest.fn(); + +export default PushNotification; diff --git a/ioneapps-maagapp-ee31119a522d/__mocks__/react-native-reanimated.js b/ioneapps-maagapp-ee31119a522d/__mocks__/react-native-reanimated.js new file mode 100644 index 0000000..d184a67 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/__mocks__/react-native-reanimated.js @@ -0,0 +1,3 @@ +const NativeEventEmitter = {}; + +export default NativeEventEmitter; diff --git a/ioneapps-maagapp-ee31119a522d/__mocks__/react-native-safe-area.js b/ioneapps-maagapp-ee31119a522d/__mocks__/react-native-safe-area.js new file mode 100644 index 0000000..14c1b1d --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/__mocks__/react-native-safe-area.js @@ -0,0 +1,14 @@ +/* global jest: true */ +const SafeArea = {}; + +SafeArea.getSafeAreaInsetsForRootView = () => ({ + safeAreaInsets: { + top: 0, + bottom: 0, + left: 0, + right: 0, + }, +}); +SafeArea.addEventListener = jest.fn(); + +export default SafeArea; diff --git a/ioneapps-maagapp-ee31119a522d/__mocks__/react-native-share-extension.js b/ioneapps-maagapp-ee31119a522d/__mocks__/react-native-share-extension.js new file mode 100644 index 0000000..7d914b4 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/__mocks__/react-native-share-extension.js @@ -0,0 +1,7 @@ +/* global jest: true */ + +const ShareExtension = { + data: jest.fn(() => Promise.resolve({})), + close: jest.fn(() => Promise.resolve(true)), +}; +export default ShareExtension; diff --git a/ioneapps-maagapp-ee31119a522d/__mocks__/redux-persist-filesystem-storage.js b/ioneapps-maagapp-ee31119a522d/__mocks__/redux-persist-filesystem-storage.js new file mode 100644 index 0000000..193cb85 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/__mocks__/redux-persist-filesystem-storage.js @@ -0,0 +1,8 @@ +/* global jest: true */ + +const FilesystemStorage = { + getItem: jest.fn(() => Promise.resolve()), + setItem: jest.fn(() => Promise.resolve()), +}; + +export default FilesystemStorage; diff --git a/ioneapps-maagapp-ee31119a522d/__tests__/reducers/albums.js b/ioneapps-maagapp-ee31119a522d/__tests__/reducers/albums.js new file mode 100644 index 0000000..ba9bc0c --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/__tests__/reducers/albums.js @@ -0,0 +1,159 @@ +/* global describe: true, test:true, expect:true */ +import { albums as albumsReducer, initialState } from '~/reducers/albums'; +import _ from 'lodash'; +import { + GET_ALBUMS, + CREATE_ALBUM, + GET_ALBUMS_SUCCESS, + GET_ALBUMS_ERROR, + CREATE_ALBUM_ERROR, + GET_ALBUM_CONTENT, + GET_ALBUM_CONTENT_SUCCESS, + GET_ALBUM_CONTENT_ERROR, + CREATE_ALBUM_SUCCESS, + LOGOUT_SUCCESS, + +} from '~/store/actionTypes'; +import { + DEFAULT_ALBUM_NAME, + DEFAULT_ALBUM_TYPE, +} from '~/store/contentTypes'; + +describe('albums reducer', () => { + test('CASE 1: should return initial state', () => { + expect(albumsReducer(undefined, { type: 'Default' })) + .toEqual(initialState); + }); + + test('CASE 2: should return state with loading when type is GET_ALBUMS or CREATE_ALBUM', () => { + const expectedState = { ...initialState, meta: { ...initialState.meta, loading: true } }; + expect(albumsReducer(initialState, { type: GET_ALBUMS })).toEqual(expectedState); + expect(albumsReducer(initialState, { type: CREATE_ALBUM })).toEqual(expectedState); + }); + + test('CASE 3: should return albums with meta property when type is GET_ALBUMS_SUCCESS', () => { + const albums = [{ id: 1 }, { id: 2 }]; + const stateResult = albumsReducer(undefined, { type: GET_ALBUMS_SUCCESS, payload: { albums } }); + expect(stateResult).toHaveProperty('albums'); + expect(stateResult.albums).toHaveLength(albums.length); + stateResult.albums.forEach(album => { + expect(album).toHaveProperty('meta'); + }); + }); + + test('CASE 5: should return correct state when type is GET_ALBUMS_ERROR or CREATE_ALBUM_ERROR', () => { + const albumErr = new Error('getAlbumsError'); + const expectedState = { ...initialState, meta: { error: albumErr, loading: false } }; + expect(albumsReducer(initialState, { + type: GET_ALBUMS_ERROR, + payload: { error: albumErr }, + })).toEqual(expectedState); + expect(albumsReducer(initialState, { + type: CREATE_ALBUM_ERROR, + payload: { error: albumErr }, + })).toEqual(expectedState); + }); + + test('CASE 6: should return state with album loading to TRUE when type is GET_ALBUM_CONTENT', () => { + const albums = [{ id: 1 }, { id: 2 }]; + const payload = { + albumId: 1, + }; + const originalState = { ...initialState, albums, meta: { error: '' } }; + const stateResult = albumsReducer({ ...originalState, albums, meta: { error: '' } }, { + type: GET_ALBUM_CONTENT, + payload, + }); + const expectedStateAlbums = [ + { id: 1, meta: { error: '', loading: true } }, + { id: 2 }, + ]; + expect(stateResult.albums).toEqual(expectedStateAlbums); + }); + + test('CASE 7: should return state with album content when type is GET_ALBUM_CONTENT_SUCCESS', () => { + const albums = [{ id: 1 }, { id: 2 }]; + const content = [ + { id: 5 }, // photo id + { id: 4 }, // photo id + ]; + const payload = { + albumId: 1, + content, + }; + const originalState = { ...initialState, albums, meta: { error: '' } }; + const stateResult = albumsReducer({ ...originalState, albums, meta: { error: '' } }, { + type: GET_ALBUM_CONTENT_SUCCESS, + payload, + }); + expect(stateResult.albums[0]).toHaveProperty('content', _.orderBy(content, ['id'], ['desc'])); + // expect(stateResult.albums[0]).toHaveProperty('cover'); + // expect(stateResult.albums[0]).toHaveProperty('thumbs'); + }); + + test('CASE 8: should return state with album error when type is GET_ALBUM_CONTENT_ERROR', () => { + const albums = [{ id: 1 }, { id: 2 }]; + const albumErr = new Error('getAlbumsContentError'); + const payload = { + albumId: 1, + error: albumErr, + }; + const originalState = { ...initialState, albums, meta: { error: '' } }; + const stateResult = albumsReducer({ ...originalState, albums, meta: { error: '' } }, { + type: GET_ALBUM_CONTENT_ERROR, + payload, + }); + const expectedStateAlbums = [ + { id: 1, meta: { error: albumErr, loading: false } }, + { id: 2 }, + ]; + expect(stateResult.albums).toEqual(expectedStateAlbums); + }); + + test('CASE 9: should add album on CREATE_ALBUM_SUCCESS with meta', () => { + const albums = [{ id: 2 }, { id: 3 }]; + const payload = { + album: { id: 1 }, + }; + const originalState = { ...initialState, albums, meta: { error: '' } }; + const stateResult = albumsReducer({ albums, ...originalState, meta: { error: '' } }, { + type: CREATE_ALBUM_SUCCESS, + payload, + }); + const expectedStateAlbums = [ + { id: 1, meta: { error: '', loading: false } }, + { id: 2 }, + { id: 3 }, + ]; + expect(stateResult.albums).toEqual(expectedStateAlbums); + }); + + test('CASE 10: should empty the state on LOGOUT_SUCCESS', () => { + const existingState = [{ id: 1 }, { id: 2 }]; + expect(albumsReducer(existingState, { type: LOGOUT_SUCCESS })) + .toEqual(initialState); + }); + + test('CASE 11: should return albums with defaultAlbumId property when type is GET_ALBUMS_SUCCESS', () => { + const albums = [{ id: 1, name: DEFAULT_ALBUM_NAME, type: DEFAULT_ALBUM_TYPE }, { id: 2 }]; + const stateResult = albumsReducer(undefined, { type: GET_ALBUMS_SUCCESS, payload: { albums } }); + expect(stateResult).toHaveProperty('albums'); + expect(stateResult).toHaveProperty('defaultAlbumId'); + expect(stateResult.albums).toHaveLength(albums.length); + expect(stateResult.defaultAlbumId).toEqual(1); + stateResult.albums.forEach(album => { + expect(album).toHaveProperty('meta'); + }); + }); + test('CASE 12: should return albums with defaultAlbumId 0 property when type is GET_ALBUMS_SUCCESS', () => { + const albums = [{ id: 1 }, { id: 2 }]; + const stateResult = albumsReducer(undefined, { type: GET_ALBUMS_SUCCESS, payload: { albums } }); + expect(stateResult).toHaveProperty('albums'); + expect(stateResult).toHaveProperty('defaultAlbumId'); + expect(stateResult.albums).toHaveLength(albums.length); + expect(stateResult.defaultAlbumId).toEqual(0); + stateResult.albums.forEach(album => { + expect(album).toHaveProperty('meta'); + }); + }); +}); diff --git a/ioneapps-maagapp-ee31119a522d/__tests__/reducers/app.js b/ioneapps-maagapp-ee31119a522d/__tests__/reducers/app.js new file mode 100644 index 0000000..d2bc7a1 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/__tests__/reducers/app.js @@ -0,0 +1,71 @@ +/* global describe: true, test:true, expect:true */ +import { app } from '~/reducers/app'; +import { + CHANGE_APP_ROOT, + UPDATE_APP_STATE, + UPDATE_SHOW_NOTIFICATION, + ACCEPT_TNC_LICENSE, + ACCEPT_TNC_LICENSE_SUCCESS, + ACCEPT_TNC_LICENSE_ERROR, +} from '~/store/actionTypes'; + + +describe('app reducer', () => { + test('CASE 1: should return initial state', () => { + const expectedState = { + root: 'splash', + sharedPlaylistOnboardingTutorialState: 0, + location: 'United States', + appStatus: 'active', + hasLoggedInOnce: false, + showNotification: false, + fromSplashScreen: false, + ssid: '', + config: {}, + }; + expect(app(undefined, { type: 'Default' })) + .toEqual(expectedState); + }); + + test('CASE 2: should return the correct state when actionType is `CHANGE_APP_ROOT` and payload is valid root', () => { + const expectedState = { root: 'home' }; + expect(app({}, { type: CHANGE_APP_ROOT, payload: { root: 'home' } })) + .toEqual(expectedState); + }); + + test('CASE 3: should return the initial state when actionType is `CHANGE_APP_ROOT` and payload is not valid root', () => { + const expectedState = {}; + expect(app({}, { type: CHANGE_APP_ROOT, payload: { root: 'something else' } })) + .toEqual(expectedState); + }); + + test('CASE 8: default should return the appStatus active', () => { + const expectedState = { appStatus: 'active' }; + expect(app({ appStatus: 'active' }, { type: UPDATE_APP_STATE, payload: 'active' })) + .toEqual(expectedState); + }); + + test('CASE 9: default should return the showNotification false', () => { + const expectedState = { showNotification: false }; + expect(app({ showNotification: false }, { type: UPDATE_SHOW_NOTIFICATION, payload: false })) + .toEqual(expectedState); + }); + + test('CASE 10: default should return the state ACCEPT_TNC_LICENSE', () => { + const expectedState = { config: { user_accepted_tnc: true } }; + expect(app({ config: { user_accepted_tnc: true } }, { type: ACCEPT_TNC_LICENSE, payload: false })) + .toEqual(expectedState); + }); + + test('CASE 11: default should return the state ACCEPT_TNC_LICENSE_SUCCESS', () => { + const expectedState = { config: { user_accepted_tnc: true } }; + expect(app({ config: { user_accepted_tnc: true } }, { type: ACCEPT_TNC_LICENSE_SUCCESS, payload: false })) + .toEqual(expectedState); + }); + + test('CASE 12: default should return the config error', () => { + const expectedState = { config: {} }; + expect(app({ config: {} }, { type: ACCEPT_TNC_LICENSE_ERROR, payload: false })) + .toEqual(expectedState); + }); +}); diff --git a/ioneapps-maagapp-ee31119a522d/__tests__/reducers/avatar.js b/ioneapps-maagapp-ee31119a522d/__tests__/reducers/avatar.js new file mode 100644 index 0000000..83df7c3 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/__tests__/reducers/avatar.js @@ -0,0 +1,122 @@ +/* global describe: true, test:true, expect:true */ +import { + avatar as avatarReducer, + initialState, +} from '~/reducers/avatar'; +import { + GET_AVATAR_UPLOADPOLICY, + GET_AVATAR_UPLOADPOLICY_SUCCESS, + GET_AVATAR_UPLOADPOLICY_ERROR, + GET_AVATAR, + GET_AVATAR_SUCCESS, + GET_AVATAR_ERROR, + ACTIVATE_AVATAR, + ACTIVATE_AVATAR_SUCCESS, + ACTIVATE_AVATAR_ERROR, + DELETE_AVATAR, + DELETE_AVATAR_SUCCESS, + DELETE_AVATAR_ERROR, +} from '~/store/actionTypes'; + +describe('avatar reducer', () => { + test('CASE 1: should return initial state', () => { + expect(avatarReducer(undefined, { type: 'Default' })) + .toEqual(initialState); + }); + test('CASE 2: should return state with meta set to loading when type is GET_AVATAR', () => { + const expectedState = { ...initialState, meta: { ...initialState.meta, loading: true } }; + const stateResult = avatarReducer(initialState, { + type: GET_AVATAR, payload: {}, + }); + expect(stateResult).toEqual(expectedState); + }); + test('CASE 3: should return state with meta set to loading when type is ACTIVATE_AVATAR', () => { + const expectedState = { ...initialState, meta: { ...initialState.meta, loading: true } }; + const stateResult = avatarReducer(initialState, { + type: ACTIVATE_AVATAR, payload: {}, + }); + expect(stateResult).toEqual(expectedState); + }); + test('CASE 4: should return state with meta set to loading when type is GET_AVATAR_UPLOADPOLICY', () => { + const expectedState = { ...initialState, meta: { ...initialState.meta, loading: true } }; + const stateResult = avatarReducer(initialState, { + type: GET_AVATAR_UPLOADPOLICY, payload: {}, + }); + expect(stateResult).toEqual(expectedState); + }); + test('CASE 5: should return state with meta set to loading when type is DELETE_AVATAR', () => { + const expectedState = { ...initialState, meta: { ...initialState.meta, loading: true } }; + const stateResult = avatarReducer(initialState, { + type: DELETE_AVATAR, payload: {}, + }); + expect(stateResult).toEqual(expectedState); + }); + test('CASE 6: should return state with error when type is GET_AVATAR_ERROR', () => { + const error = new Error('getAvatarError'); + const expectedState = { ...initialState, meta: { ...initialState.meta, error } }; + const stateResult = avatarReducer(initialState, { + type: GET_AVATAR_ERROR, payload: { error }, + }); + expect(stateResult).toEqual(expectedState); + }); + test('CASE 6: should return state with error when type is ACTIVATE_AVATAR_ERROR', () => { + const error = new Error('activateAvatarError'); + const expectedState = { ...initialState, meta: { ...initialState.meta, error } }; + const stateResult = avatarReducer(initialState, { + type: ACTIVATE_AVATAR_ERROR, payload: { error }, + }); + expect(stateResult).toEqual(expectedState); + }); + test('CASE 8: should return state with error when type is GET_AVATAR_UPLOADPOLICY_ERROR', () => { + const error = new Error('getUploadPolicyAvatarError'); + const expectedState = { ...initialState, meta: { ...initialState.meta, error } }; + const stateResult = avatarReducer(initialState, { + type: GET_AVATAR_UPLOADPOLICY_ERROR, payload: { error }, + }); + expect(stateResult).toEqual(expectedState); + }); + test('CASE 9: should return state with error when type is DELETE_AVATAR_ERROR', () => { + const error = new Error('deleteAvatarError'); + const expectedState = { ...initialState, meta: { ...initialState.meta, error } }; + const stateResult = avatarReducer(initialState, { + type: DELETE_AVATAR_ERROR, payload: { error }, + }); + expect(stateResult).toEqual(expectedState); + }); + test('CASE 10: should return state with meta set to loading when type is GET_AVATAR_SUCCESS', () => { + const payload = { uri: undefined }; + const meta = { loading: false, error: '' }; + const stateResult = avatarReducer(initialState, { + type: GET_AVATAR_SUCCESS, payload, + }); + expect(stateResult.source).toEqual(payload); + expect(stateResult).toHaveProperty('meta', meta); + }); + test('CASE 11: should return state with meta set to loading when type is ACTIVATE_AVATAR_SUCCESS', () => { + const payload = { uri: undefined }; + const meta = { loading: false, error: '' }; + const stateResult = avatarReducer(initialState, { + type: ACTIVATE_AVATAR_SUCCESS, payload, + }); + expect(stateResult.source).toEqual(payload); + expect(stateResult).toHaveProperty('meta', meta); + }); + test('CASE 12: should return state with meta set to loading when type is GET_AVATAR_UPLOADPOLICY_SUCCESS', () => { + const payload = { }; + const meta = { loading: false, error: '' }; + const stateResult = avatarReducer(initialState, { + type: GET_AVATAR_UPLOADPOLICY_SUCCESS, payload, + }); + expect(stateResult.uploadPolicy).toEqual(payload); + expect(stateResult).toHaveProperty('meta', meta); + }); + test('CASE 13: should return state with meta set to loading when type is DELETE_AVATAR_SUCCESS', () => { + const payload = { }; + const meta = { loading: false, error: '' }; + const stateResult = avatarReducer(initialState, { + type: DELETE_AVATAR_SUCCESS, payload, + }); + expect(stateResult).toEqual(initialState); + expect(stateResult).toHaveProperty('meta', meta); + }); +}); diff --git a/ioneapps-maagapp-ee31119a522d/__tests__/reducers/framePairing.js b/ioneapps-maagapp-ee31119a522d/__tests__/reducers/framePairing.js new file mode 100644 index 0000000..eadf87a --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/__tests__/reducers/framePairing.js @@ -0,0 +1,74 @@ +/* global describe: true, test:true, expect:true */ +import { framePairing as framePairingReducer, initialState } from '~/reducers/framePairing'; +import { + FRAME_DISCOVER_START, + FRAME_DISCOVER_STARTED_SUCCESS, + FRAME_DISCOVER_ERROR, + FRAME_DISCOVER_SUCCESS, +} from '~/store/actionTypes'; + +describe('framePairing reducer', () => { + test('CASE 1: should return initial state', () => { + expect(framePairingReducer(undefined, { type: 'Default' })) + .toEqual(initialState); + }); + + test('CASE 2: should return state with loading when type is FRAME_DISCOVER_START or FRAME_DISCOVER_STARTED_SUCCESS', () => { + const expectedState = { ...initialState, meta: { ...initialState.meta, loading: true } }; + expect(framePairingReducer(initialState, { + type: FRAME_DISCOVER_START, + })).toEqual(expectedState); + expect(framePairingReducer(initialState, { + type: FRAME_DISCOVER_STARTED_SUCCESS, + })).toEqual(expectedState); + }); + + test('CASE 3: should return frames with meta property when type is FRAME_DISCOVER_SUCCESS', () => { + const services = [{ + txt: { + serialNumber: '', + model: 1, + }, + }, + { + txt: { + serialNumber: '', + model: 2, + }, + }]; + const specs = { + 1: { + name: '', + colors: [1, 2], + photo: [ + '', + '', + ], + }, + 2: { + name: '', + colors: [1, 2], + photo: [ + '', + '', + ], + }, + }; + const stateResult = framePairingReducer(undefined, { + type: FRAME_DISCOVER_SUCCESS, + payload: { services, specs }, + }); + expect(stateResult).toHaveProperty('frames'); + expect(stateResult.frames).toHaveLength(services.length); + expect(stateResult).toHaveProperty('meta'); + }); + + test('CASE 5: should return correct state when type is FRAME_DISCOVER_ERROR', () => { + const err = new Error('discoverFrameErr'); + const expectedState = { ...initialState, meta: { error: err, loading: false } }; + expect(framePairingReducer(initialState, { + type: FRAME_DISCOVER_ERROR, + payload: { error: err }, + })).toEqual(expectedState); + }); +}); diff --git a/ioneapps-maagapp-ee31119a522d/__tests__/reducers/frames.js b/ioneapps-maagapp-ee31119a522d/__tests__/reducers/frames.js new file mode 100644 index 0000000..dfc692d --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/__tests__/reducers/frames.js @@ -0,0 +1,438 @@ +/* global describe: true, test:true, expect:true */ +import { frames as framesReducer, initialState } from '~/reducers/frames'; +import Factory from 'helper/factories/api'; +import { + GET_FRAMES, + GET_FRAMES_SUCCESS, + GET_FRAMES_ERROR, + LOGOUT_SUCCESS, + GET_FRAME_STATE_SUCCESS, + GET_FRAME_STATE_ERROR, + SET_CURRENT_FRAME_PLAYLIST, + GET_FRAMES_STATUS_SUCCESS, + SET_FRAME_POWER_STATE_SUCCESS, + SET_CURRENT_FRAME, + UPDATE_FRAME_PLAYLIST_ASSIGNMENT, + GET_FRAME_STATE, + UNPAIR_FRAME, + UNPAIR_FRAME_SUCCESS, + UNPAIR_FRAME_ERROR, +} from '~/store/actionTypes'; +import { FRAME_ORIENTATION, FRAME_POWER } from '~/store/frameConstants'; + +describe('frames reducer', () => { + test('CASE 1: should return initial state', () => { + expect(framesReducer(undefined, { type: 'Default' })) + .toEqual(initialState); + }); + + test('CASE 2: should return state with meta set to loading when type is GET_FRAMES', () => { + const frames = [{ id: 1 }, { id: 2 }]; + const expectedState = { ...initialState, meta: { ...initialState.meta, loading: true } }; + const stateResult = framesReducer(initialState, { + type: GET_FRAMES, payload: { frames }, + }); + expect(stateResult).toEqual(expectedState); + }); + + test('CASE 3a: should return with removed frame with existing frameState when type is GET_FRAMES_SUCCESS', () => { + const frames = [{ + id: 1, + }]; + const currentState = { + framePreventPlaylistAssignChange: {}, + frames: ['1ea790afd4c67c77', 'U6XYMRIEWBJ82RLL'].map((f, i) => ( + { id: i, ...Factory.build('FrameState', { frameId: f }) })), + }; + const meta = { loading: false, error: '' }; + const specs = { 'W08A-01': { colors: [], photo: {} } }; + const stateResult = framesReducer(currentState, { + type: GET_FRAMES_SUCCESS, payload: { frames, specs }, + }); + expect(stateResult.frames[0]).toHaveProperty('meta', meta); + expect(stateResult.frames[0]).toHaveProperty('orientation'); + expect(stateResult.frames[0]).toHaveProperty('power'); + expect(stateResult.frames).toHaveLength(frames.length); + }); + + test('CASE 3b: should return with added frame with existing frameState and needUpdate as true when type is GET_FRAMES_SUCCESS', () => { + const frames = [ + { id: 1, softwareVersion: '5.0.0' }, + { id: 2 }, + { id: 3 }, + ]; + const currentState = { + framePreventPlaylistAssignChange: {}, + frames: ['1ea790afd4c67c77', 'U6XYMRIEWBJ82RLL'].map((f, i) => ( + { id: i, softwareVersion: '5.0.0', ...Factory.build('FrameState', { frameId: f }) })), + }; + + const meta = { loading: false, error: '' }; + const specs = { 'W08A-01': { colors: [], photo: {}, minVersionSupported: '6.0.0' } }; + const stateResult = framesReducer(currentState, { + type: GET_FRAMES_SUCCESS, payload: { frames, specs }, + }); + expect(stateResult.frames[0]).toHaveProperty('meta', meta); + expect(stateResult.frames[0]).toHaveProperty('orientation'); + expect(stateResult.frames[0]).toHaveProperty('power'); + expect(stateResult.frames[0]).toHaveProperty('needUpdate', true); + expect(stateResult.frames).toHaveLength(frames.length); + }); + + test('CASE 3c: should return with added frame with existing frameState and needUpdate set to false when type is GET_FRAMES_SUCCESS and checkEnabled is false', () => { + const frames = [ + { id: 1, softwareVersion: '5.0.0' }, + { id: 2 }, + { id: 3 }, + ]; + const currentState = { + framePreventPlaylistAssignChange: {}, + frames: ['1ea790afd4c67c77', 'U6XYMRIEWBJ82RLL'].map((f, i) => ( + { id: i, softwareVersion: '5.0.0', ...Factory.build('FrameState', { frameId: f }) })), + }; + + const meta = { loading: false, error: '' }; + const specs = { 'W08A-01': { colors: [], photo: {}, minVersionSupported: '6.0.0' } }; + const stateResult = framesReducer(currentState, { + type: GET_FRAMES_SUCCESS, payload: { frames, specs, checkEnabled: false }, + }); + expect(stateResult.frames[0]).toHaveProperty('meta', meta); + expect(stateResult.frames[0]).toHaveProperty('orientation'); + expect(stateResult.frames[0]).toHaveProperty('power'); + expect(stateResult.frames[0]).toHaveProperty('needUpdate', false); + expect(stateResult.frames).toHaveLength(frames.length); + }); + + test('CASE 5: should return state with error and loading = `false` when type is GET_FRAMES_ERROR', () => { + const error = new Error('getFramesError'); + const expectedState = { + ...initialState, + meta: + { ...initialState.meta, error, loading: false }, + }; + const stateResult = framesReducer(initialState, { + type: GET_FRAMES_ERROR, payload: { error }, + }); + expect(stateResult).toEqual(expectedState); + }); + + test('CASE 6: should empty the state on LOGOUT_SUCCESS', () => { + const existingState = [{ id: 1 }, { id: 2 }]; + expect(framesReducer(existingState, { type: LOGOUT_SUCCESS })) + .toEqual(initialState); + }); + + test('CASE 7a: should return state with frameState on GET_FRAME_STATE_SUCCESS', () => { + const playlistId = 321; + const existingState = { framePreventPlaylistPlayingChange: {}, framePreventPowerChange: {}, frames: [{ id: 1, frameId: '1ea790afd4c67c77', playlists: [{ id: playlistId }] }, { id: 2 }] }; + const expectedState = { + framePreventPlaylistPlayingChange: {}, + framePreventPowerChange: {}, + frames: [ + { + id: 1, + frameId: '1ea790afd4c67c77', + orientation: FRAME_ORIENTATION.LANDSCAPE, + slideshow: playlistId, + playlists: [{ id: playlistId }], + power: 'on', + }, + { id: 2 }, + ], + meta: { stateLoading: false, error: '' }, + }; + + const frameState = Factory.build('FrameState', { frameId: existingState.frames[0].frameId, slideshow: { value: playlistId } }); + expect(framesReducer(existingState, { type: GET_FRAME_STATE_SUCCESS, payload: { frameState } })) + .toEqual(expectedState); + }); + + test('CASE 7b: should return state with slideshow=`-1` on GET_FRAME_STATE_SUCCESS when playlist is no longer assigned', () => { + const playlistId = 321; + const existingState = { framePreventPlaylistPlayingChange: {}, framePreventPowerChange: {}, frames: [{ id: 1, frameId: '1ea790afd4c67c77', playlists: [] }, { id: 2 }] }; + const expectedState = { + framePreventPlaylistPlayingChange: {}, + framePreventPowerChange: {}, + frames: [ + { + id: 1, + frameId: '1ea790afd4c67c77', + orientation: FRAME_ORIENTATION.LANDSCAPE, + slideshow: -1, + playlists: [], + power: 'on', + }, + { id: 2 }, + ], + meta: { stateLoading: false, error: '' }, + }; + + const frameState = Factory.build('FrameState', { frameId: existingState.frames[0].frameId, slideshow: { value: playlistId } }); + expect(framesReducer(existingState, { type: GET_FRAME_STATE_SUCCESS, payload: { frameState } })) + .toEqual(expectedState); + }); + + test('CASE 7c: should return state with slideshow=`-1` on GET_FRAME_STATE_SUCCESS when frameState.slideshow is `null`', () => { + const playlistId = 'null'; + const existingState = { framePreventPlaylistPlayingChange: {}, framePreventPowerChange: {}, frames: [{ id: 1, frameId: '1ea790afd4c67c77', playlists: [] }, { id: 2 }] }; + const expectedState = { + framePreventPlaylistPlayingChange: {}, + framePreventPowerChange: {}, + frames: [ + { + id: 1, + frameId: '1ea790afd4c67c77', + orientation: FRAME_ORIENTATION.LANDSCAPE, + slideshow: -1, + playlists: [], + power: 'on', + }, + { id: 2 }, + ], + meta: { stateLoading: false, error: '' }, + }; + + const frameState = Factory.build('FrameState', { frameId: existingState.frames[0].frameId, slideshow: { value: playlistId } }); + expect(framesReducer(existingState, { type: GET_FRAME_STATE_SUCCESS, payload: { frameState } })) + .toEqual(expectedState); + }); + + test('CASE 8: should return state with corrent frame playlist on SET_CURRENT_FRAME_PLAYLIST', () => { + const existingState = { + frames: [ + { + id: 1, + frameId: '1ea790afd4c67c77', + orientation: FRAME_ORIENTATION.LANDSCAPE, + slideshow: 123, + power: 'on', + }, + { id: 2 }, + ], + }; + + const payload = { + framePk: 1, + playlistId: 234, + }; + expect(framesReducer(existingState, { type: SET_CURRENT_FRAME_PLAYLIST, payload }).frames[0]) + .toHaveProperty('slideshow', 234); + }); + + test('CASE 9: should return state with correct frameState on GET_FRAMES_STATUS_SUCCESS', () => { + const framesStatus = { + frames: [ + { lastSeen: null, lastConnected: null, framePk: 17544 }, + { lastSeen: 1535338881548, lastConnected: 1535338819374, framePk: 18122 }, + { + connected: true, lastSeen: 1539065938946, lastConnected: 1539065965182, framePk: 18429, + }, + { + connected: true, lastSeen: 1539066031822, lastConnected: 1539066063638, framePk: 18438, + }, + ], + }; + + const currentState = { + frames: [17544, 18122, 18429, 18438, 18433].map((f) => ( + { id: f, ...Factory.build('FrameState') })), + }; + + const payload = { framesStatus }; + const newState = framesReducer(currentState, { type: GET_FRAMES_STATUS_SUCCESS, payload }); + expect(newState.frames) + .toEqual(expect.arrayContaining(framesStatus.frames.map(() => + expect.objectContaining({ online: expect.any(Boolean) })))); + }); + + test('CASE 10: should return state with frameState on SET_FRAME_POWER_STATE_SUCCESS', () => { + const emptyObject = {}; + const currentState = { + framePreventPowerChange: { 1: true }, + }; + + const payload = { framePk: 1, powerState: FRAME_POWER.OFF }; + const newState = framesReducer(currentState, { type: SET_FRAME_POWER_STATE_SUCCESS, payload }); + expect(newState) + .toHaveProperty('framePreventPowerChange', emptyObject); + }); + + test('CASE 11: should return currentFrameId set to the payload.id when action is SET_CURRENT_FRAME', () => { + const currentState = { + frames: [ + { id: 1 }, + { id: 2 }, + ], + currentFrameId: 2, + }; + + const payload = { id: 1 }; + const newState = framesReducer(currentState, { type: SET_CURRENT_FRAME, payload }); + expect(newState) + .toHaveProperty('currentFrameId', 1); + }); + + test('CASE 12: should return state with loading = `false` on GET_FRAME_STATE_ERROR', () => { + const currentState = { + framePreventPlaylistAssignChange: {}, + framePreventPlaylistPlayingChange: {}, + framePreventPowerChange: {}, + frames: [], + currentFrameId: 0, + meta: { + loading: true, + stateLoading: false, + statusLoading: false, + error: '', + }, + }; + + const newState = framesReducer(initialState, { type: GET_FRAME_STATE_ERROR }); + expect(newState) + .toEqual(currentState); + }); + + test('CASE 13a: should return state with updated playlists when operation = `add` on UPDATE_FRAME_PLAYLIST_ASSIGNMENT', () => { + const frameIds = [17544, 18122, 18429, 18438, 18433]; + const currentState = { + frames: frameIds.map((f) => ( + Factory.build('Frame', { id: f }) + )), + currentFrameId: 0, + meta: { loading: false, error: '' }, + }; + const playlistIds = [103]; + const payload = { frameIds, playlistIds, operation: 'add' }; + const newState = framesReducer( + currentState, + { type: UPDATE_FRAME_PLAYLIST_ASSIGNMENT, payload }, + ); + expect(newState.frames) + .toEqual(expect.arrayContaining([ + expect.objectContaining({ + playlists: [ + { id: expect.any(Number) }, + { id: expect.any(Number) }, + { id: expect.any(Number) }, + ], + })])); + }); + + test('CASE 13b: should return state with removed playlists when operation = `remove` on UPDATE_FRAME_PLAYLIST_ASSIGNMENT', () => { + const frameIds = [17544, 18122, 18429, 18438, 18433]; + const currentState = { + frames: frameIds.map((f) => ( + Factory.build('Frame', { id: f }) + )), + currentFrameId: 0, + meta: { loading: false, error: '' }, + }; + const playlistIds = [currentState.frames[0].playlists[0].id]; + const payload = { frameIds, playlistIds, operation: 'remove' }; + const newState = framesReducer( + currentState, + { type: UPDATE_FRAME_PLAYLIST_ASSIGNMENT, payload }, + ); + expect(newState.frames) + .toEqual(expect.arrayContaining([ + expect.objectContaining({ + playlists: [ + { id: expect.any(Number) }, + ], + })])); + }); + + test('CASE 13c: should return state with new playlists when operation is not specified on UPDATE_FRAME_PLAYLIST_ASSIGNMENT', () => { + const frameIds = [17544, 18122, 18429, 18438, 18433]; + const currentState = { + frames: frameIds.map((f) => ( + Factory.build('Frame', { id: f }) + )), + currentFrameId: 0, + meta: { loading: false, error: '' }, + }; + const playlistIds = [111]; + const payload = { frameIds, playlistIds }; + const newState = framesReducer( + currentState, + { type: UPDATE_FRAME_PLAYLIST_ASSIGNMENT, payload }, + ); + expect(newState.frames) + .toEqual(expect.arrayContaining([ + expect.objectContaining({ + playlists: [ + { id: playlistIds[0] }, + ], + })])); + }); + + test('CASE 14: should return state loading = `false` when action is GET_FRAME_STATE', () => { + const frameIds = [17544, 18122, 18429, 18438, 18433]; + const currentState = { + frames: frameIds.map((f) => ( + Factory.build('Frame', { id: f }) + )), + currentFrameId: 0, + meta: { error: '' }, + }; + const newState = framesReducer( + currentState, + { type: GET_FRAME_STATE }, + ); + expect(newState.meta) + .toEqual({ stateLoading: true, error: '' }); + }); + + test('CASE 15: should return state loading = `true` when action is UNPAIR_FRAME', () => { + const frameIds = [17544, 18122, 18429, 18438, 18433]; + const currentState = { + frames: frameIds.map((f) => ( + Factory.build('Frame', { id: f }) + )), + currentFrameId: 0, + meta: { error: '' }, + }; + const newState = framesReducer( + currentState, + { type: UNPAIR_FRAME }, + ); + expect(newState.meta) + .toEqual({ loading: true, error: '' }); + }); + test('CASE 16: should return state loading = `false` when action is UNPAIR_FRAME_SUCCESS', () => { + const frameIds = [17544, 18122, 18429, 18438, 18433]; + + const specs = { 'W08A-01': { colors: [], photo: {} } }; + const currentState = { + frames: frameIds.map((f) => ( + Factory.build('Frame', { id: f }) + )), + specs, + currentFrameId: 0, + meta: { error: '', loading: false }, + }; + const newState = framesReducer( + currentState, + { type: UNPAIR_FRAME_SUCCESS, payload: { framePk: 0 } }, + ); + expect(newState.meta) + .toEqual({ loading: false, error: '' }); + }); + test('CASE 17: should return state loading = `false` error message when action is UNPAIR_FRAME_ERROR', () => { + const error = 'unpair frame error'; + const frameIds = [17544, 18122, 18429, 18438, 18433]; + const currentState = { + frames: frameIds.map((f) => ( + Factory.build('Frame', { id: f }) + )), + currentFrameId: 0, + meta: { error: '' }, + }; + const newState = framesReducer( + currentState, + { type: UNPAIR_FRAME_ERROR, payload: { error } }, + ); + expect(newState.meta) + .toEqual({ loading: false, error }); + }); +}); diff --git a/ioneapps-maagapp-ee31119a522d/__tests__/reducers/friendActivities.js b/ioneapps-maagapp-ee31119a522d/__tests__/reducers/friendActivities.js new file mode 100644 index 0000000..6a86a8b --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/__tests__/reducers/friendActivities.js @@ -0,0 +1,83 @@ +/* global describe: true, test:true, expect:true */ +import { initialState, friendActivities } from '~/reducers/friendActivities'; +import { + GET_COMMENTS_SUCCESS, + DELETE_ACTIVITY_PHOTO, + DELETE_ACTIVITY_PHOTO_ERROR, + DELETE_ACTIVITY_PHOTO_SUCCESS, +} from '~/store/actionTypes'; +import Factory from 'helper/factories/api'; + +describe('friendActivities reducer', () => { + test('CASE 1: should return initial state', () => { + expect(friendActivities(undefined, { type: 'Default' })) + .toEqual(initialState); + }); + + test('CASE 2a: should return with comments when comment is related to the friend and actionType is GET_COMMENTS_SUCCESS', () => { + const friend = { username: 'friend@mynixplay.com' }; + const originalState = { + friend, + nextTimestamp: 0, + activities: [], + }; + const comments = Factory.buildList('Comment', 2, { friend: friend.username }); + const payload = { comments }; + const newState = friendActivities(originalState, { type: GET_COMMENTS_SUCCESS, payload }); + expect(newState.mediaViewer.comments) + .toHaveLength(2); + }); + + test('CASE 2b: should return without comments when comment is not related to the friend and actionType is GET_COMMENTS_SUCCESS', () => { + const friend = { username: 'friend@mynixplay.com' }; + const originalState = { + friend, + nextTimestamp: 0, + activities: [], + }; + const comments = Factory.buildList('Comment', 2, { friend: 'other@mynixplay.com' }); + const payload = { comments }; + const newState = friendActivities(originalState, { type: GET_COMMENTS_SUCCESS, payload }); + expect(newState.mediaViewer.comments) + .toHaveLength(0); + }); + + test('CASE 3: friendActivities should update meta loading state when type is DELETE_ACTIVITY_PHOTO', (s3Key = '', albumId = '', timestamp = '', friend = '') => { + const existingState = { ...initialState, meta: { loading: true, error: '' } }; + const stateResult = friendActivities(existingState, { + type: DELETE_ACTIVITY_PHOTO, + payload: { + s3Key, + albumId, + timestamp, + friend, + }, + }); + expect(stateResult).toEqual(existingState); + }); + + test('CASE 4: friendActivities should update meta loading state when type is DELETE_ACTIVITY_PHOTO_ERROR', () => { + const existingState = { ...initialState, actions: { submitting: false, error: '' } }; + const stateResult = friendActivities(existingState, { + type: DELETE_ACTIVITY_PHOTO_ERROR, + payload: { + error: '', + }, + }); + expect(stateResult).toEqual(existingState); + }); + + test('CASE 5: friendActivities should update meta loading state when type is DELETE_ACTIVITY_PHOTO_SUCCESS', (s3Key = '', albumId = '', timestamp = '', friend = '') => { + const existingState = { ...initialState, meta: { loading: false, error: '' } }; + const stateResult = friendActivities(existingState, { + type: DELETE_ACTIVITY_PHOTO_SUCCESS, + payload: { + s3Key, + albumId, + timestamp, + friend, + }, + }); + expect(stateResult).toEqual(existingState); + }); +}); diff --git a/ioneapps-maagapp-ee31119a522d/__tests__/reducers/friends.js b/ioneapps-maagapp-ee31119a522d/__tests__/reducers/friends.js new file mode 100644 index 0000000..e549603 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/__tests__/reducers/friends.js @@ -0,0 +1,187 @@ +/* global describe: true, test:true, expect:true */ +import { + friends as friendsReducer, + initialState, + initAddFriend, + addFriend as addFriendReducer, +} from '~/reducers/friends'; +import { + GET_FRIENDS, + GET_FRIENDS_SUCCESS, + GET_FRIENDS_ERROR, + UPDATE_SEEN_TIMESTAMP_SUCCESS, + LOGOUT_SUCCESS, + UPDATE_ADD_FRIEND, + ACCEPT_FRIEND_INVITE_SUCCESS, + ACCEPT_FRIEND_INVITE_ERROR, + REJECT_FRIEND_INVITE_SUCCESS, + REJECT_FRIEND_INVITE_ERROR, + RESET_ADD_FRIEND_ERROR, + RESET_ADD_FRIEND_PLAYLIST, +} from '~/store/actionTypes'; + +describe('friends reducer', () => { + test('CASE 1: should return initial state', () => { + expect(friendsReducer(undefined, { type: 'Default' })) + .toEqual(initialState); + }); + + test('CASE 2: should return state with meta set to loading when type is GET_FRIENDS', () => { + const expectedState = { ...initialState, meta: { ...initialState.meta, loading: true } }; + const stateResult = friendsReducer(initialState, { + type: GET_FRIENDS, payload: {}, + }); + expect(stateResult).toEqual(expectedState); + }); + + test('CASE 3: should return state with meta set to loading when type is GET_FRIENDS_SUCCESS', () => { + const friends = [{ username: '1', activity: { timestamp: 0 } }, { username: '2', activity: { timestamp: 0 } }]; + const invites = [{ requester: '1' }, { requester: '2' }]; + const meta = { loading: false, error: '' }; + const stateResult = friendsReducer(initialState, { + type: GET_FRIENDS_SUCCESS, payload: { friends: { friends, invites } }, + }); + expect(stateResult.friends).toEqual([]); + expect(stateResult.invites[0]).toHaveProperty('meta', meta); + }); + + test('CASE 4: should return state with error when type is GET_FRIENDS_ERROR', () => { + const error = new Error('getFriendsError'); + const expectedState = { ...initialState, meta: { ...initialState.meta, error } }; + const stateResult = friendsReducer(initialState, { + type: GET_FRIENDS_ERROR, payload: { error }, + }); + expect(stateResult).toEqual(expectedState); + }); + + test('CASE 5: should return state when type is UPDATE_SEEN_TIMESTAMP_SUCCESS', () => { + const meta = { loading: false, error: '' }; + const stateResult = friendsReducer(initialState, { type: UPDATE_SEEN_TIMESTAMP_SUCCESS }); + expect(stateResult).toHaveProperty('meta', meta); + }); + + test('CASE 6: should return state with loading = false when type is ACCEPT_FRIEND_INVITE_SUCCESS', () => { + const meta = { loading: false, error: '' }; + const stateResult = friendsReducer(initialState, { type: ACCEPT_FRIEND_INVITE_SUCCESS }); + expect(stateResult).toHaveProperty('meta', meta); + }); + + test('CASE 7: should return state with loading = false when type is ACCEPT_FRIEND_INVITE_ERROR', () => { + const meta = { loading: false, error: '' }; + const stateResult = friendsReducer(initialState, { type: ACCEPT_FRIEND_INVITE_ERROR, payload: { error: '' } }); + expect(stateResult).toHaveProperty('meta', meta); + }); + + test('CASE 8: should return state with loading = false when type is REJECT_FRIEND_INVITE_SUCCESS', () => { + const meta = { loading: false, error: '' }; + const stateResult = friendsReducer(initialState, { type: REJECT_FRIEND_INVITE_SUCCESS }); + expect(stateResult).toHaveProperty('meta', meta); + }); + + test('CASE 9: should return state with loading = false when type is REJECT_FRIEND_INVITE_ERROR', () => { + const meta = { loading: false, error: '' }; + const stateResult = friendsReducer(initialState, { type: REJECT_FRIEND_INVITE_ERROR, payload: { error: '' } }); + expect(stateResult).toHaveProperty('meta', meta); + }); + + test('CASE 10: should empty the state on LOGOUT_SUCCESS', () => { + const existingState = {}; + expect(friendsReducer(existingState, { type: LOGOUT_SUCCESS })) + .toEqual(initialState); + }); + + test('CASE 11: addFriend should return initial state', () => { + expect(addFriendReducer(undefined, { type: 'Default' })) + .toEqual(initAddFriend); + }); + + test('CASE 12: addFriend should return state when type is UPDATE_ADD_FRIEND', () => { + const stateResult = friendsReducer(initAddFriend, { + type: UPDATE_ADD_FRIEND, + payload: { + lookupKey: '', + friendName: '', + playlistId: -1, + hasError: '', + isNewPlaylist: 0, + popCount: 2, + }, + }); + expect(stateResult).toEqual(initAddFriend); + }); + + test('CASE 13: addFriend should update error state when type is UPDATE_ADD_FRIEND', (hasError = '') => { + const { + lookupKey, + friendName, + playlistId, + isNewPlaylist, + } = initAddFriend; + const stateResult = friendsReducer(initAddFriend, { + type: RESET_ADD_FRIEND_ERROR, + payload: { + lookupKey, + friendName, + playlistId, + hasError, + isNewPlaylist, + }, + }); + expect(stateResult).toEqual(initAddFriend); + }); + + test('CASE 14: addFriend should update error state when type is RESET_ADD_FRIEND_ERROR', (hasError = '') => { + const stateResult = friendsReducer(initAddFriend, { + type: RESET_ADD_FRIEND_ERROR, + payload: { hasError }, + }); + expect(stateResult).toEqual(initAddFriend); + }); + + test('CASE 15: addFriend should update error state when type is RESET_ADD_FRIEND_PLAYLIST', (isNewPlaylist = 0) => { + const stateResult = friendsReducer(initAddFriend, { + type: RESET_ADD_FRIEND_PLAYLIST, + payload: { isNewPlaylist }, + }); + expect(stateResult).toEqual(initAddFriend); + }); + + test('CASE 16: Badge should be true when a new friend invite has been added to state GET_FRIENDS_SUCCESS', () => { + const existingState = { ...initialState, invites: [{ requester: '1' }, { requester: '2' }] }; + const friends = { + invites: [{ requester: '1' }, { requester: '3' }], + friends: [{ username: '1', activity: { timestamp: 0 } }], + }; + const stateResult = friendsReducer(existingState, { + type: GET_FRIENDS_SUCCESS, + payload: { friends }, + }); + expect(stateResult).toHaveProperty('isBadged', true); + }); + + test('CASE 17: Badge should be true when a new friend invite GET_FRIENDS_SUCCESS', () => { + const existingState = { ...initialState, invites: [{ requester: '1' }, { requester: '2' }] }; + const friends = { + invites: [{ requester: '1' }], + friends: [{ username: '1', activity: { timestamp: 0 } }], + }; + const stateResult = friendsReducer(existingState, { + type: GET_FRIENDS_SUCCESS, + payload: { friends }, + }); + expect(stateResult).toHaveProperty('isBadged', false); + }); + + test('CASE 18: Badge should be true when a friend gets a new activity', () => { + const existingState = { ...initialState, invites: [], friends: [{ username: '1', activity: { timestamp: 1 } }] }; + const friends = { + invites: [], + friends: [{ username: '1', activity: { timestamp: 2 } }], + }; + const stateResult = friendsReducer(existingState, { + type: GET_FRIENDS_SUCCESS, + payload: { friends }, + }); + expect(stateResult).toHaveProperty('isBadged', false); + }); +}); diff --git a/ioneapps-maagapp-ee31119a522d/__tests__/reducers/fujifilmCategories.js b/ioneapps-maagapp-ee31119a522d/__tests__/reducers/fujifilmCategories.js new file mode 100644 index 0000000..9fdfc51 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/__tests__/reducers/fujifilmCategories.js @@ -0,0 +1,37 @@ +/* global describe: true, test:true, expect:true */ +import { fujifilmCategories as fujifilmCategoriesReducer, initialState } from '~/reducers/fujifilmCategories'; +import { + GET_FUJIFILM_CHILD_CATEGORY_PROPDUCTS_SUCCESS, +} from '~/store/actionTypes'; + +describe('fujifilmCategories reducer', () => { + test('CASE 1: should return initial state', () => { + expect(fujifilmCategoriesReducer(undefined, { type: 'Default' })) + .toEqual(initialState); + }); + test('CASE 2: should return correct state when type is GET_FUJIFILM_CHILD_CATEGORY_PROPDUCTS_SUCCESS', () => { + const categoryId = 1; + const products = [{ + ProductCode: '1', + }, { + ProductCode: '2', + }]; + const serviceType = 'MailOrder'; + const childCategoryProducts = { + 1: [{ + ProductCode: '1', + }, { + ProductCode: '2', + }], + }; + + const stateResult = fujifilmCategoriesReducer(initialState, { + type: GET_FUJIFILM_CHILD_CATEGORY_PROPDUCTS_SUCCESS, + payload: { categoryId, products, serviceType }, + }); + + expect(stateResult).toHaveProperty('childCategoryProducts'); + expect(stateResult.childCategoryProducts).toEqual(childCategoryProducts); + expect(stateResult).toHaveProperty('meta'); + }); +}); diff --git a/ioneapps-maagapp-ee31119a522d/__tests__/reducers/google.js b/ioneapps-maagapp-ee31119a522d/__tests__/reducers/google.js new file mode 100644 index 0000000..2822c0d --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/__tests__/reducers/google.js @@ -0,0 +1,335 @@ +/* global describe: true, test:true, expect:true */ +import { google as googleReducer, initialState } from '~/reducers/google'; +import { + SET_GOOGLE_INFO, + GET_GOOGLE_TOKEN, + GET_GOOGLE_TOKEN_SUCCESS, + LOGOUT_SUCCESS, + LOGOUT_FROM_GOOGLE_SUCCESS, + GET_GOOGLE_TOKEN_ERROR, + GET_GOOGLE_ALBUMS, + GET_GOOGLE_CATEGORIES, + GET_GOOGLE_ALBUMS_ERROR, + GET_GOOGLE_CATEGORIES_ERROR, + GET_GOOGLE_ALBUMS_SUCCESS, + GET_GOOGLE_CATEGORIES_SUCCESS, + GET_DYNAMIC_PLAYLISTS_ERROR, + GET_DYNAMIC_PLAYLISTS_SUCCESS, + GET_GOOGLE_ALBUM_CONTENT_SUCCESS, +} from '~/store/actionTypes'; + +import Factory from 'helper/factories/google'; + +describe('google reducer', () => { + test('CASE 1: should return initial state', () => { + expect(googleReducer(undefined, { type: 'Default' })) + .toEqual(initialState); + }); + + test('CASE 2: should return state with Google info set when type is SET_GOOGLE_INFO', () => { + const googleInfo = { + email: 'user@gmail.com', + photo: 'https://lh4.googleusercontent.com/photo.jpg', + idToken: '{idToken}', + id: '{id}', + familyName: '{lastName}', + serverAuthCode: '{serverAuthCode}', + accessToken: '{accessToken}', + givenName: '{firstName}', + accessTokenExpirationDate: 3260.7057960033417, + name: '{firstName} {lastName}', + }; + const expectedState = { ...initialState, auth: googleInfo }; + const stateResult = googleReducer(initialState, { + type: SET_GOOGLE_INFO, payload: googleInfo, + }); + expect(stateResult).toEqual(expectedState); + }); + + test('CASE 3: should return state with meta set when type is GET_GOOGLE_TOKEN', () => { + const expectedState = initialState; + const stateResult = googleReducer(initialState, { + type: GET_GOOGLE_TOKEN, + }); + expect(stateResult).toEqual(expectedState); + }); + + test('CASE 4: should return state with Google set when type is GET_GOOGLE_TOKEN_SUCCESS', () => { + const googleInfo = { + email: 'user@gmail.com', + photo: 'https://lh4.googleusercontent.com/photo.jpg', + idToken: '{idToken}', + id: '{id}', + familyName: '{lastName}', + serverAuthCode: '{serverAuthCode}', + accessToken: '{accessToken}', + givenName: '{firstName}', + accessTokenExpirationDate: 3260.7057960033417, + name: '{firstName} {lastName}', + }; + const googleToken = { googleId: googleInfo.email, valid: true }; + const expectedState = { + ...initialState, + auth: googleInfo, + }; + const stateResult = googleReducer({ ...initialState, auth: googleInfo }, { + type: GET_GOOGLE_TOKEN_SUCCESS, + payload: { googleToken }, + }); + expect(stateResult).toEqual(expectedState); + }); + + test('CASE 5: should return state with Google unset when type is GET_GOOGLE_TOKEN_SUCCESS and server Token is invalid', () => { + const googleInfo = { + email: 'user@gmail.com', + photo: 'https://lh4.googleusercontent.com/photo.jpg', + idToken: '{idToken}', + id: '{id}', + familyName: '{lastName}', + serverAuthCode: '{serverAuthCode}', + accessToken: '{accessToken}', + givenName: '{firstName}', + accessTokenExpirationDate: 3260.7057960033417, + name: '{firstName} {lastName}', + }; + const googleToken = { googleId: googleInfo.email, valid: false }; + const expectedState = { + ...initialState, + auth: {}, + }; + const stateResult = googleReducer({ ...initialState, auth: googleInfo }, { + type: GET_GOOGLE_TOKEN_SUCCESS, + payload: { googleToken }, + }); + expect(stateResult).toEqual(expectedState); + }); + + test('CASE 6: should return state with Google unset when type is GET_GOOGLE_TOKEN_SUCCESS and server Token is valid but googleId does not match the email', () => { + const googleInfo = { + email: 'user@gmail.com', + photo: 'https://lh4.googleusercontent.com/photo.jpg', + idToken: '{idToken}', + id: '{id}', + familyName: '{lastName}', + serverAuthCode: '{serverAuthCode}', + accessToken: '{accessToken}', + givenName: '{firstName}', + accessTokenExpirationDate: 3260.7057960033417, + name: '{firstName} {lastName}', + }; + const googleToken = { googleId: 'other@gmail.com', valid: true }; + const expectedState = { + ...initialState, + auth: {}, + }; + const stateResult = googleReducer({ ...initialState, auth: googleInfo }, { + type: GET_GOOGLE_TOKEN_SUCCESS, + payload: { googleToken }, + }); + expect(stateResult).toEqual(expectedState); + }); + + test('CASE 7: should return state with meta loading set to false when actionType is GET_GOOGLE_TOKEN_ERROR', () => { + const expectedState = initialState; + const stateResult = googleReducer(initialState, { + type: GET_GOOGLE_TOKEN_ERROR, + }); + expect(stateResult).toEqual(expectedState); + }); + + test('CASE 7: should return initialState when actionType is LOGOUT_FROM_GOOGLE_SUCCESS', () => { + const stateResult = googleReducer(initialState, { + type: LOGOUT_FROM_GOOGLE_SUCCESS, + }); + expect(stateResult).toEqual(initialState); + }); + + test('CASE 8: should return initialState when actionType is LOGOUT_SUCCESS', () => { + const stateResult = googleReducer(initialState, { + type: LOGOUT_SUCCESS, + }); + expect(stateResult).toEqual(initialState); + }); + + test('CASE 9: should return loading for albums set to true when actionType is GET_GOOGLE_ALBUMS', () => { + const expectedState = { + ...initialState, + meta: { loading: { ...initialState.meta.loading, albums: true } }, + }; + const stateResult = googleReducer(initialState, { + type: GET_GOOGLE_ALBUMS, + }); + expect(stateResult).toEqual(expectedState); + }); + + test('CASE 10: should return loading for categories set to true when actionType is GET_GOOGLE_CATEGORIES', () => { + const expectedState = { + ...initialState, + meta: { loading: { ...initialState.meta.loading, categories: true } }, + }; + const stateResult = googleReducer(initialState, { + type: GET_GOOGLE_CATEGORIES, + }); + expect(stateResult).toEqual(expectedState); + }); + + test('CASE 11: should return loading for categories set to false when actionType is GET_GOOGLE_ALBUMS_ERROR', () => { + const expectedState = { + ...initialState, + meta: { loading: { ...initialState.meta.loading, categories: false } }, + }; + const stateResult = googleReducer(initialState, { + type: GET_GOOGLE_ALBUMS_ERROR, + }); + expect(stateResult).toEqual(expectedState); + }); + + test('CASE 12: should return loading for categories set to false when actionType is GET_GOOGLE_CATEGORIES_ERROR', () => { + const expectedState = { + ...initialState, + meta: { loading: { ...initialState.meta.loading, categories: false } }, + }; + const stateResult = googleReducer(initialState, { + type: GET_GOOGLE_CATEGORIES_ERROR, + }); + expect(stateResult).toEqual(expectedState); + }); + + test('CASE 12: should return albums with alreadySynced set correctly when actionType is GET_GOOGLE_ALBUMS_SUCCESS', () => { + const googleId = 'user@gmail.com'; + const playlists = Factory.buildList('DynamicPlaylist', 4, { googleId }); + const albums = Factory.buildList('GoogleAlbum', 2); + const prevState = { + auth: { email: googleId }, + categories: [], + albums: [], + allPhotos: {}, + playlists, + meta: { loading: { albums: false, categories: false } }, + }; + const expectedState = { + ...prevState, + meta: { loading: { ...initialState.meta.loading, categories: false } }, + albums: [ + { title: 'Album 1', id: 'album1', alreadySynced: true }, + { title: 'Album 2', id: 'album2', alreadySynced: true }, + ], + allPhotos: {}, + }; + const stateResult = googleReducer(prevState, { + type: GET_GOOGLE_ALBUMS_SUCCESS, + payload: albums, + }); + expect(stateResult).toEqual(expectedState); + }); + + test('CASE 13: should return categories with alreadySynced set correctly when actionType is GET_GOOGLE_CATEGORIES_SUCCESS', () => { + const googleId = 'user@gmail.com'; + const playlists = Factory.buildList('DynamicPlaylist', 4, { googleId }); + const categories = [ + { id: 'ANIMAL' }, + { id: 'PEOPLE' }, + { id: 'LANDSCAPE' }, + ]; + const prevState = { + auth: { email: googleId }, + categories: [], + albums: [], + playlists, + meta: { loading: { albums: false, categories: false } }, + }; + const expectedState = { + ...prevState, + meta: { loading: { ...initialState.meta.loading, categories: false } }, + categories: [ + { id: 'ANIMAL', alreadySynced: true }, + { id: 'PEOPLE', alreadySynced: true }, + { id: 'LANDSCAPE' }, + ], + allPhotos: { alreadySynced: false }, + }; + const stateResult = googleReducer(prevState, { + type: GET_GOOGLE_CATEGORIES_SUCCESS, + payload: { categories, allPhotos: {} }, + }); + expect(stateResult).toEqual(expectedState); + }); + + test('CASE 14: should return alreadySynced set correctly when actionType is GET_DYNAMIC_PLAYLISTS_SUCCESS', () => { + const googleId = 'user@gmail.com'; + const playlists = Factory.buildList('DynamicPlaylist', 4, { googleId }); + const albums = Factory.buildList('GoogleAlbum', 2); + const categories = [ + { id: 'ANIMAL' }, + { id: 'PEOPLE' }, + { id: 'LANDSCAPE' }, + ]; + const prevState = { + auth: { email: googleId }, + categories, + albums, + playlists: [], + meta: { loading: { albums: false, categories: false } }, + allPhotos: {}, + }; + const expectedState = { + ...prevState, + meta: { loading: { albums: false, categories: false } }, + categories: [ + { id: 'ANIMAL', alreadySynced: true }, + { id: 'PEOPLE', alreadySynced: true }, + { id: 'LANDSCAPE' }, + ], + albums, + playlists, + allPhotos: { alreadySynced: false }, + }; + const stateResult = googleReducer(prevState, { + type: GET_DYNAMIC_PLAYLISTS_SUCCESS, + payload: { google: playlists }, + }); + expect(stateResult).toEqual(expectedState); + }); + + + test('CASE 15: should return categories with alreadySynced set correctly when actionType is GET_DYNAMIC_PLAYLISTS_ERROR', () => { + const stateResult = googleReducer(initialState, { + type: GET_DYNAMIC_PLAYLISTS_ERROR, + }); + expect(stateResult).toEqual(initialState); + }); + + test('CASE 16: should return album with mediaItems set correctly when actionType is GET_GOOGLE_ALBUM_CONTENT_SUCCESS', () => { + const googleId = 'user@gmail.com'; + const playlists = Factory.buildList('DynamicPlaylist', 4, { googleId }); + const albums = Factory.buildList('GoogleAlbum', 1); + const prevState = { + auth: { email: googleId }, + albums, + playlists, + meta: { loading: { albums: false, categories: false } }, + }; + + const payload = { + title: albums[0].title, + id: albums[0].id, + mediaItems: [ + { id: 'AGj1epUmh4wiG3g2bKOKDoclVoRTsE-_STHFhWdUdhvR142wa0wx4-y-rb9mYq2363Cr0_Gid19iJw4' }, + { id: 'AGj1epWNpu29AtPtEyX3ICRDLOcxyUxhCt45UG1C4swn1me84xFxculsQDCJaclsC3mBeX54MBM7HL8' }, + { id: 'AGj1epWAvBQE-WStq6wzHkv-4oW28J154cd5SU4KDCUTL-XB9hJdxyT7GCaOLett4qVyRXFFmYHpYJ4' }, + ], + }; + + const expectedState = { + ...prevState, + meta: { loading: { albums: false, categories: false } }, + albums: [payload], + playlists, + }; + + const stateResult = googleReducer(prevState, { + type: GET_GOOGLE_ALBUM_CONTENT_SUCCESS, payload, + }); + expect(stateResult).toEqual(expectedState); + }); +}); diff --git a/ioneapps-maagapp-ee31119a522d/__tests__/reducers/locale.js b/ioneapps-maagapp-ee31119a522d/__tests__/reducers/locale.js new file mode 100644 index 0000000..272cf22 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/__tests__/reducers/locale.js @@ -0,0 +1,17 @@ +/* global describe: true, test:true, expect:true */ +import { locale } from '~/reducers/locale'; +import { CHANGE_LOCALE } from '~/store/actionTypes'; + +describe('locale reducer', () => { + test('CASE 1: should return initial state', () => { + const expectedState = { locale: 'en' }; + expect(locale(undefined, { type: 'Default' })) + .toEqual(expectedState); + }); + + test('CASE 2: should return correct state when action is `CHANGE_LOCALE`', () => { + const expectedState = { locale: 'de' }; + expect(locale(undefined, { type: CHANGE_LOCALE, payload: { locale: 'de' } })) + .toEqual(expectedState); + }); +}); diff --git a/ioneapps-maagapp-ee31119a522d/__tests__/reducers/photoPrint.js b/ioneapps-maagapp-ee31119a522d/__tests__/reducers/photoPrint.js new file mode 100644 index 0000000..47aa9a5 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/__tests__/reducers/photoPrint.js @@ -0,0 +1,121 @@ +/* global describe: true, test:true, expect:true */ +import { photoPrint as photoPrintReducer, initialState } from '~/reducers/photoPrint'; +import { + PLACE_PHOTO_PRINT_ORDER, + PLACE_PHOTO_PRINT_ORDER_SUCCESS, + PLACE_PHOTO_PRINT_ORDER_ERROR, + SET_PHOTOS_TO_QUEUE, + SET_PHOTOS_TO_QUEUE_SUCCESS, + SET_PHOTOS_TO_QUEUE_ERROR, + REMOVE_PHOTO_FROM_QUEUE, + REMOVE_PHOTO_FROM_QUEUE_SUCCESS, + REMOVE_PHOTO_FROM_QUEUE_ERROR, +} from '~/store/actionTypes'; + +describe('photoPrint reducer', () => { + test('CASE 1: should return initial state', () => { + expect(photoPrintReducer(undefined, { type: 'Default' })) + .toEqual(initialState); + }); + test('CASE 2: should return state with loading when type is PLACE_PHOTO_PRINT_ORDER, SET_PHOTOS_TO_QUEUE or REMOVE_PHOTO_FROM_QUEUE', () => { + const expectedState = { ...initialState, meta: { ...initialState.meta, loading: true } }; + expect(photoPrintReducer(initialState, { type: PLACE_PHOTO_PRINT_ORDER })).toEqual(expectedState); + expect(photoPrintReducer(initialState, { type: SET_PHOTOS_TO_QUEUE })).toEqual(expectedState); + expect(photoPrintReducer(initialState, { type: REMOVE_PHOTO_FROM_QUEUE })).toEqual(expectedState); + }); + + test('CASE 4: should return correct state when type is PLACE_PHOTO_PRINT_ORDER_SUCCESS', () => { + const expectedState = { ...initialState, meta: { ...initialState.meta, loading: false }, orderNumbers: ['1234567'] }; + expect(photoPrintReducer( + initialState, + { + type: PLACE_PHOTO_PRINT_ORDER_SUCCESS, + payload: { + orderNumber: '1234567', + }, + }, + )).toEqual(expectedState); + }); + + test('CASE 5: should return correct state when type is REMOVE_PHOTO_FROM_QUEUE_SUCCESS', () => { + const images = ['image1', 'image2', 'image3']; + const expectedState = { + ...initialState, + images, + count: 3, + meta: { + ...initialState.meta, + loading: false, + }, + }; + expect(photoPrintReducer( + initialState, + { + type: REMOVE_PHOTO_FROM_QUEUE_SUCCESS, + payload: { + images, + }, + }, + )).toEqual(expectedState); + }); + + test('CASE 6: should return correct state when type is SET_PHOTOS_TO_QUEUE_SUCCESS', () => { + const images = ['image1', 'image2', 'image3']; + const expectedState = { + ...initialState, + images, + count: + 3, + meta: + { + ...initialState.meta, + loading: + false, + }, + }; + expect(photoPrintReducer( + initialState, + { + type: SET_PHOTOS_TO_QUEUE_SUCCESS, + payload: { + images, + }, + }, + )).toEqual(expectedState); + }); + + + test('CASE 7: should return error state when type is PLACE_PHOTO_PRINT_ORDER_ERROR', () => { + const error = new Error('Error'); + const expectedState = { ...initialState, meta: { ...initialState.meta, loading: false, error } }; + expect(photoPrintReducer( + initialState, + { + type: PLACE_PHOTO_PRINT_ORDER_ERROR, + payload: { error }, + }, + )).toEqual(expectedState); + }); + test('CASE 8: should return error state when type is SET_PHOTOS_TO_QUEUE_ERROR', () => { + const error = new Error('Error'); + const expectedState = { ...initialState, meta: { ...initialState.meta, loading: false, error } }; + expect(photoPrintReducer( + initialState, + { + type: SET_PHOTOS_TO_QUEUE_ERROR, + payload: { error }, + }, + )).toEqual(expectedState); + }); + test('CASE 9: should return error state when type is REMOVE_PHOTO_FROM_QUEUE_ERROR', () => { + const error = new Error('Error'); + const expectedState = { ...initialState, meta: { ...initialState.meta, loading: false, error } }; + expect(photoPrintReducer( + initialState, + { + type: REMOVE_PHOTO_FROM_QUEUE_ERROR, + payload: { error }, + }, + )).toEqual(expectedState); + }); +}); diff --git a/ioneapps-maagapp-ee31119a522d/__tests__/reducers/playlists.js b/ioneapps-maagapp-ee31119a522d/__tests__/reducers/playlists.js new file mode 100644 index 0000000..cd5f8be --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/__tests__/reducers/playlists.js @@ -0,0 +1,339 @@ +/* global describe: true, test:true, expect:true */ +import { playlists as playlistsReducer, initialState } from '~/reducers/playlists'; +import { + GET_PLAYLISTS, + GET_PLAYLISTS_SUCCESS, + GET_PLAYLISTS_ERROR, + GET_PLAYLIST_CONTENT, + GET_PLAYLIST_CONTENT_SUCCESS, + GET_PLAYLIST_CONTENT_ERROR, + LOGOUT_SUCCESS, + CREATE_DYNAMIC_PLAYLIST_SUCCESS, + GET_DYNAMIC_PLAYLISTS_SUCCESS, + UPLOAD_ITEM_STARTED, + UPLOAD_ITEMS_SUCCESS, + UPLOAD_ITEMS_ERROR, + PLAYLIST_PROCESSING_STARTED, + PLAYLIST_PROCESSING_DONE, + UPLOAD_SUCCESS, + UPLOAD_ALL_CANCELLED, +} from '~/store/actionTypes'; + +import Factory from 'helper/factories/api'; + +describe('playlists reducer', () => { + test('CASE 1: should return initial state', () => { + expect(playlistsReducer(undefined, { type: 'Default' })) + .toEqual(initialState); + }); + + test('CASE 2: should return state with meta set to loading when type is GET_PLAYLISTS', () => { + const playlists = [{ id: 1 }, { id: 2 }]; + const expectedState = { ...initialState, meta: { ...initialState.meta, loading: false } }; + const stateResult = playlistsReducer(initialState, { + type: GET_PLAYLISTS, payload: { playlists }, + }); + expect(stateResult).toEqual(expectedState); + }); + + test('CASE 3a: should return state with playlist content merged with dynamic playlist when type is GET_PLAYLISTS_SUCCESS', () => { + const playlists = Factory.buildList('Playlist', 6); + const googleId = 'someone@gmail.com'; + const dynamicPlaylists = playlists.map(playlist => Factory.build('GoogleDynamicPlaylist', { playlistId: playlist.id, googleId })); + const statePlaylists = playlists.map((item) => ({ ...item, slides: [{ url: 'url' }] })); + const originalState = { + ...initialState, playlists: statePlaylists, dynamicPlaylists, + }; + const stateResult = playlistsReducer(originalState, { + type: GET_PLAYLISTS_SUCCESS, payload: { playlists }, + }); + expect(stateResult.playlists).toEqual(expect.arrayContaining([expect.objectContaining({ + name: expect.any(String), + googleId: expect.any(String), + status: expect.any(String), + slides: expect.any(Array), + dynamicPlaylistName: expect.any(String), + lastSynced: expect.any(String), + })])); + }); + + test('CASE 3b: should return state with playlist content merged with dynamic playlist when type is GET_PLAYLISTS_SUCCESS', () => { + const playlists = Factory.buildList('Playlist', 1); + const googleId = 'someone@gmail.com'; + const dynamicPlaylists = playlists.map(playlist => Factory.build('GoogleDynamicPlaylist', { playlistId: playlist.id, googleId })); + const originalState = { ...initialState, dynamicPlaylists }; + const stateResult = playlistsReducer(originalState, { + type: GET_PLAYLISTS_SUCCESS, payload: { playlists }, + }); + expect(stateResult.playlists).toEqual(expect.arrayContaining([expect.objectContaining({ + name: expect.any(String), + googleId: expect.any(String), + status: expect.any(String), + dynamicPlaylistName: expect.any(String), + lastSynced: expect.any(String), + googleCollectionType: expect.any(String), + })])); + }); + + test('CASE 3c: should return state with playlist content merged with dynamic playlist when type is GET_PLAYLISTS_SUCCESS', () => { + const playlists = Factory.buildList('Playlist', 1); + const googleId = 'someone@gmail.com'; + const dynamicPlaylists = playlists.map(playlist => Factory.build('GoogleDynamicPlaylist', { playlistId: playlist.id, googleId })); + const statePlaylists = playlists.map((item) => ({ ...item, slides: [{ url: 'url' }] })); + const originalState = { + ...initialState, playlists: statePlaylists, dynamicPlaylists, + }; + const count = Math.floor((Math.random() * 500) + 1); + const thumbs = [0, 1, 2].map(item => ({ src: `https://loremflickr.com/1024/768/cats?asdf=${item}`, rotation: 0, orientation: 1 })); + const stateResult = playlistsReducer(originalState, { + type: GET_PLAYLISTS_SUCCESS, payload: { playlists: [{ ...playlists[0], count, thumbs }] }, + }); + // The count and thumbs properties should be overridden by the new playlists data + expect(stateResult.playlists[0].count).toEqual(count); + expect(stateResult.playlists[0].thumbs).toEqual(thumbs); + }); + + test('CASE 4: should return state with error when type is GET_PLAYLISTS_ERROR', () => { + const error = new Error('getPlaylistError'); + const expectedState = { ...initialState, meta: { ...initialState.meta, error } }; + const stateResult = playlistsReducer(initialState, { + type: GET_PLAYLISTS_ERROR, payload: { error }, + }); + expect(stateResult).toEqual(expectedState); + }); + + test('CASE 5: should return state with meta set to loading when type is GET_PLAYLIST_CONTENT', () => { + const playlists = [ + { id: 1 }, + { id: 2 }, + ]; + const originalState = { ...initialState, playlists }; + const payload = { playlistId: 1 }; + const expectedState = { + ...initialState, + playlists: [{ + id: 1, + meta: { error: '', loading: true }, + }, + { id: 2 }], + meta: { error: '', loading: false, uploading: false }, + }; + const stateResult = playlistsReducer(originalState, { + type: GET_PLAYLIST_CONTENT, payload, + }); + expect(stateResult).toEqual(expectedState); + }); + + test('CASE 6a: should return state with playlist content set when type is GET_PLAYLIST_CONTENT_SUCCESS', () => { + const playlists = [ + { id: 1 }, + ]; + const originalState = { ...initialState, playlists }; + const payload = { + playlistId: 1, + playlist: { name: 'PL one', slides: [] }, + offset: 0, + }; + const stateResult = playlistsReducer(originalState, { + type: GET_PLAYLIST_CONTENT_SUCCESS, payload, + }); + expect(stateResult.playlists[0]).toHaveProperty('name', payload.playlist.name); + expect(stateResult.playlists[0]).toHaveProperty('slides'); + // expect(stateResult.playlists[0]).toHaveProperty('thumbs'); + }); + + test('CASE 6b: GET_PLAYLIST_CONTENT_SUCCESS should combine playlist slides if offset is > 0', () => { + const initialSlides = ['a', 'b', 'c']; + const nextSlides = ['d', 'e', 'f']; + const playlists = [ + { + id: 1, slides: initialSlides, pictureCount: 6, offset: 3, + }, + ]; + const originalState = { ...initialState, playlists }; + const payload = { + playlistId: 1, + playlist: { + name: 'PL one', + slides: nextSlides, + offset: 5, + pictureCount: 6, + }, + startOffset: 3, + endOffset: 6, + }; + const stateResult = playlistsReducer(originalState, { + type: GET_PLAYLIST_CONTENT_SUCCESS, payload, + }); + expect(stateResult.playlists[0]).toHaveProperty('slides', [...initialSlides, ...nextSlides]); + }); + + test('CASE 7: should return state error when type is GET_PLAYLIST_CONTENT_ERROR', () => { + const playlists = [ + { id: 1, meta: { error: '', loading: true } }, + { id: 2, meta: { error: '', loading: false } }, + ]; + const originalState = { ...initialState, playlists }; + // console.log({ originalState: JSON.stringify(originalState) }); + const error = new Error('getPlaylistError'); + const payload = { + playlistId: 1, + error, + }; + const expectedState = { + ...initialState, + playlists: [{ + id: 1, + meta: { error, loading: false }, + }, + { id: 2, meta: { error: '', loading: false } }], + meta: { error: '', loading: false, uploading: false }, + }; + const stateResult = playlistsReducer(originalState, { + type: GET_PLAYLIST_CONTENT_ERROR, payload, + }); + expect(stateResult).toEqual(expectedState); + }); + + test('CASE 9: should empty the state on LOGOUT_SUCCESS', () => { + const existingState = [{ id: 1 }, { id: 2 }]; + expect(playlistsReducer(existingState, { type: LOGOUT_SUCCESS })) + .toEqual(initialState); + }); + + test('CASE 10: should current state on CREATE_DYNAMIC_PLAYLIST_SUCCESS', () => { + const existingState = [{ id: 1 }, { id: 2 }]; + expect(playlistsReducer(existingState, { type: CREATE_DYNAMIC_PLAYLIST_SUCCESS })) + .toEqual(existingState); + }); + + test('CASE 11: should return state with dynamicPlaylist set when type is GET_DYNAMIC_PLAYLISTS_SUCCESS', () => { + const playlists = Factory.buildList('Playlist', 6); + const googleId = 'someone@gmail.com'; + const dynamicPlaylists = playlists.map(playlist => Factory.build('GoogleDynamicPlaylist', { playlistId: playlist.id, googleId })); + const originalState = { ...initialState, playlists }; + + const stateResult = playlistsReducer(originalState, { + type: GET_DYNAMIC_PLAYLISTS_SUCCESS, payload: { google: dynamicPlaylists }, + }); + expect(stateResult.playlists).toEqual(expect.arrayContaining([expect.objectContaining({ + name: expect.any(String), + googleId: expect.any(String), + status: expect.any(String), + dynamicPlaylistName: expect.any(String), + lastSynced: expect.any(String), + })])); + + expect(stateResult.dynamicPlaylists).toEqual(dynamicPlaylists); + }); + test('CASE 12: should return state with upload state set when type is UPLOAD_ITEM_STARTED', () => { + const expectedState = { ...initialState, meta: { ...initialState.meta, uploading: true } }; + const stateResult = playlistsReducer(initialState, { + type: UPLOAD_ITEM_STARTED, + }); + expect(stateResult).toEqual(expectedState); + }); + test('CASE 13: should return state with upload state set when type is UPLOAD_ITEMS_SUCCESS or UPLOAD_ITEMS_ERROR', () => { + const expectedState = { ...initialState, meta: { ...initialState.meta, uploading: false } }; + const stateResult = playlistsReducer(initialState, { + type: UPLOAD_ITEMS_SUCCESS, + }); + expect(stateResult).toEqual(expectedState); + + const expectedState2 = { ...initialState, meta: { ...initialState.meta, uploading: false } }; + const stateResult2 = playlistsReducer(initialState, { + type: UPLOAD_ITEMS_ERROR, + }); + expect(stateResult2).toEqual(expectedState2); + }); + + test('CASE 14: should return state with trackerId set when type is PLAYLIST_PROCESSING_STARTED', () => { + const playlists = [ + { id: 1, meta: { error: '', loading: true } }, + { id: 2, meta: { error: '', loading: false } }, + { id: 3, meta: { error: '', loading: true } }, + ]; + const originalState = { ...initialState, playlists }; + + + const playlistsWithTracker = [ + { id: 1, trackerId: 'a74d2e06f17e2893017431375b416b76', meta: { error: '', loading: true } }, + { id: 2, meta: { error: '', loading: false } }, + { id: 3, trackerId: '5b0e992791ed43ca79928eed54ca0b4f', meta: { error: '', loading: true } }, + ]; + + const expectedState = { ...originalState, playlists: playlistsWithTracker }; + + const stateResult = playlistsReducer(originalState, { + type: PLAYLIST_PROCESSING_STARTED, + payload: { + data: [ + { receiver: '1', trackerId: 'a74d2e06f17e2893017431375b416b76' }, + { receiver: '3', trackerId: '5b0e992791ed43ca79928eed54ca0b4f' }, + ], + }, + }); + + expect(stateResult).toEqual(expectedState); + }); + + test('CASE 15: should return state without trackerId set when type is PLAYLIST_PROCESSING_DONE', () => { + const playlists = [ + { id: 1, trackerId: 'a74d2e06f17e2893017431375b416b76', meta: { error: '', loading: true } }, + { id: 2, meta: { error: '', loading: false } }, + { id: 3, trackerId: '5b0e992791ed43ca79928eed54ca0b4f', meta: { error: '', loading: true } }, + ]; + const originalState = { ...initialState, playlists }; + + + const playlistsWithTracker = [ + { id: 1, trackerId: 'a74d2e06f17e2893017431375b416b76', meta: { error: '', loading: true } }, + { id: 2, meta: { error: '', loading: false } }, + { id: 3, meta: { error: '', loading: true } }, + ]; + + const expectedState = { ...originalState, playlists: playlistsWithTracker }; + + const stateResult = playlistsReducer(originalState, { + type: PLAYLIST_PROCESSING_DONE, + payload: { + playlistId: 3, trackerId: '5b0e992791ed43ca79928eed54ca0b4f', + }, + }); + + expect(stateResult).toEqual(expectedState); + }); + + test('CASE 16: should return state with meta.uploading set to false when type is UPLOAD_SUCCESS', () => { + const playlists = [ + { id: 1, meta: { error: '', uploading: true } }, + { id: 2, meta: { error: '', uploading: false } }, + { id: 3, meta: { error: '', uploading: true } }, + ]; + const originalState = { ...initialState, playlists }; + const stateResult = playlistsReducer(originalState, { + type: UPLOAD_SUCCESS, + }); + + stateResult.playlists.forEach((item) => { + expect(item.meta).toHaveProperty('uploading', false); + }); + }); + + test('CASE 17: should return state with no trackerId and meta.uploading set to false when type is UPLOAD_ITEMS_ERROR or UPLOAD_ALL_CANCELLED', () => { + const playlists = [ + { id: 1, trackerId: 'a74d2e06f17e2893017431375b416b76', meta: { error: '', uploading: true } }, + { id: 2, meta: { error: '', uploading: false } }, + { id: 3, meta: { error: '', uploading: true } }, + ]; + const originalState = { ...initialState, playlists }; + const stateResult = playlistsReducer(originalState, { + type: UPLOAD_ALL_CANCELLED, + }); + + stateResult.playlists.forEach((item) => { + expect(item.meta).toHaveProperty('uploading', false); + expect(item).not.toHaveProperty('trackerId'); + }); + }); +}); diff --git a/ioneapps-maagapp-ee31119a522d/__tests__/reducers/receivers.js b/ioneapps-maagapp-ee31119a522d/__tests__/reducers/receivers.js new file mode 100644 index 0000000..05e6eba --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/__tests__/reducers/receivers.js @@ -0,0 +1,41 @@ +/* global describe: true, test:true, expect:true */ +import { receivers as receiversReducer, initialState } from '~/reducers/receivers'; +import { + GET_RECEIVERS_TOKEN, + GET_RECEIVERS_TOKEN_SUCCESS, + GET_RECEIVERS_TOKEN_ERROR, +} from '~/store/actionTypes'; + +describe('receivers reducer', () => { + test('CASE 1: should return initial state', () => { + expect(receiversReducer(undefined, { type: 'Default' })) + .toEqual(initialState); + }); + + test('CASE 2: should return state with meta set to loading when type is GET_RECEIVERS_TOKEN', () => { + const receiversToken = { meta: { error: '', loading: true }, receiversToken: '' }; + const expectedState = { ...initialState, meta: { ...initialState.meta, loading: true } }; + const stateResult = receiversReducer(initialState, { + type: GET_RECEIVERS_TOKEN, payload: receiversToken, + }); + expect(stateResult).toEqual(expectedState); + }); + + test('CASE 3: should return state with meta set to loading when type is GET_RECEIVERS_TOKEN_SUCCESS', () => { + const receiversToken = { meta: { error: '', loading: false }, receiversToken: { meta: { error: '', loading: false } } }; + const expectedState = { ...initialState, receiversToken: { meta: { error: '', loading: false } } }; + const stateResult = receiversReducer(initialState, { + type: GET_RECEIVERS_TOKEN_SUCCESS, payload: receiversToken, + }); + expect(stateResult).toEqual(expectedState); + }); + + test('CASE 4: should return state with error when type is GET_RECEIVERS_TOKEN_ERROR', () => { + const error = { meta: { error: '', loading: false }, receiversToken: '' }; + const expectedState = { ...initialState }; + const stateResult = receiversReducer(initialState, { + type: GET_RECEIVERS_TOKEN_ERROR, payload: error, + }); + expect(stateResult).toEqual(expectedState); + }); +}); diff --git a/ioneapps-maagapp-ee31119a522d/__tests__/reducers/settings.js b/ioneapps-maagapp-ee31119a522d/__tests__/reducers/settings.js new file mode 100644 index 0000000..75f549b --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/__tests__/reducers/settings.js @@ -0,0 +1,34 @@ +/* global describe: true, test:true, expect:true */ +import { settings as settingsReducer, initialState } from '~/reducers/settings'; +import { + GET_SETTINGS_SUCCESS, + SET_SETTINGS_SUCCESS, + LOGOUT_SUCCESS, +} from '~/store/actionTypes'; + +describe('settings reducer', () => { + test('CASE 1: should return initial state', () => { + expect(settingsReducer(undefined, { type: 'Default' })) + .toEqual(initialState); + }); + + test('CASE 2: should empty the state on LOGOUT_SUCCESS', () => { + expect(settingsReducer({ languageCode: 'en' }, { type: LOGOUT_SUCCESS })) + .toEqual(initialState); + }); + + test('CASE 3: should return settings on GET_SETTINGS_SUCCESS', () => { + const settings = { autoAcceptFriend: true, defaultPlaylistId: 123 }; + const expectedState = { ...initialState, ...settings }; + expect(settingsReducer(undefined, { type: GET_SETTINGS_SUCCESS, payload: { settings } })) + .toEqual(expectedState); + }); + + test('CASE 3: should return settings on SET_SETTINGS_SUCCESS', () => { + const settings = { defaultPlaylistId: 123 }; + const existingState = { autoAcceptFriend: false, defaultPlaylistId: -1 }; + const expectedState = { ...existingState, ...settings }; + expect(settingsReducer(existingState, { type: SET_SETTINGS_SUCCESS, payload: { settings } })) + .toEqual(expectedState); + }); +}); diff --git a/ioneapps-maagapp-ee31119a522d/__tests__/reducers/shareExtension.js b/ioneapps-maagapp-ee31119a522d/__tests__/reducers/shareExtension.js new file mode 100644 index 0000000..8bb9806 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/__tests__/reducers/shareExtension.js @@ -0,0 +1,140 @@ +/* global describe: true, test:true, expect:true */ +import { + shareExtension as shareExtReducer, + initialState, +} from '~/reducers/shareExtension'; +import { + SET_SHARE_EXT, + DEFAULT_SHARE_EXT, + LOGOUT_SUCCESS, + GET_SHARE_EXT_DATA, + GET_SHARE_EXT_DATA_SUCCESS, + GET_SHARE_EXT_DATA_ERROR, +} from '~/store/actionTypes'; + +describe('shareExtension reducer', () => { + test('CASE 1: should return initial state', () => { + expect(shareExtReducer(undefined, { type: 'Default' })) + .toEqual(initialState); + }); + + test('CASE 2: should empty the state on LOGOUT_SUCCESS', () => { + expect(shareExtReducer({}, { type: LOGOUT_SUCCESS })) + .toEqual(initialState); + }); + + test('CASE 3: should return share extension on DEFAULT_SHARE_EXT', () => { + const expectedState = { ...initialState }; + expect(shareExtReducer(undefined, { type: DEFAULT_SHARE_EXT, payload: { } })) + .toEqual(expectedState); + }); + + test('CASE 4: should return share extension on SET_SHARE_EXT', () => { + const albumId = 123; + const shareExtension = { albumId }; + const expectedState = { ...initialState, ...shareExtension }; + expect(shareExtReducer(initialState, { type: SET_SHARE_EXT, payload: { albumId } })) + .toEqual(expectedState); + }); + test('CASE 5: should return share extension on GET_SHARE_EXT_DATA', () => { + const shareExtension = { images: [], meta: { loading: true, error: '' } }; + const expectedState = { ...initialState, ...shareExtension }; + expect(shareExtReducer(initialState, { type: GET_SHARE_EXT_DATA, payload: { props1: '', props2: [] } })) + .toEqual(expectedState); + }); + + test('CASE 6: should return share extension on GET_SHARE_EXT_DATA_SUCCESS', () => { + const images = [ + { + meta: { loading: false, error: '' }, + fullFilePath: '/data/user/0/com.creedon.Nixplay.qa/cache/IMG_8246.JPG', + uri: 'file:///data/user/0/com.creedon.Nixplay.qa/cache/IMG_8246.JPG', + type: 'jpg', + fileSize: '27209639', + caption: '', + mime: 'jpg', + fileName: 'IMG_8246.JPG', + id: 'id1', + }, + { + meta: { loading: false, error: '' }, + fullFilePath: '/data/user/0/com.creedon.Nixplay.qa/cache/IMG_8244.JPG', + uri: 'file:///data/user/0/com.creedon.Nixplay.qa/cache/IMG_8244.JPG', + type: 'jpg', + fileSize: '54096296', + caption: '', + mime: 'jpg', + fileName: 'IMG_8244.JPG', + id: 'id2', + }]; + const shareExtension = { images, meta: { loading: false, error: '' } }; + const expectedState = { ...initialState, ...shareExtension }; + expect(shareExtReducer(initialState, { type: GET_SHARE_EXT_DATA_SUCCESS, payload: { images } })) + .toEqual(expectedState); + }); + + test('CASE 7: should return share extension on GET_SHARE_EXT_DATA_ERROR', () => { + const shareExtension = { images: [], meta: { loading: false, error: 'error' } }; + const expectedState = { ...initialState, ...shareExtension }; + expect(shareExtReducer(initialState, { type: GET_SHARE_EXT_DATA_ERROR, payload: { error: 'error' } })) + .toEqual(expectedState); + }); + + test('CASE 8: should return update caption share extension on GET_SHARE_EXT_DATA_SUCCESS SET_SHARE_EXT', () => { + const images = [ + { + meta: { loading: false, error: '' }, + fullFilePath: '/data/user/0/com.creedon.Nixplay.qa/cache/IMG_8246.JPG', + uri: 'file:///data/user/0/com.creedon.Nixplay.qa/cache/IMG_8246.JPG', + type: 'jpg', + fileSize: '27209639', + caption: '', + mime: 'jpg', + fileName: 'IMG_8246.JPG', + id: 'id1', + }, + { + meta: { loading: false, error: '' }, + fullFilePath: '/data/user/0/com.creedon.Nixplay.qa/cache/IMG_8244.JPG', + uri: 'file:///data/user/0/com.creedon.Nixplay.qa/cache/IMG_8244.JPG', + type: 'jpg', + fileSize: '54096296', + caption: '', + mime: 'jpg', + fileName: 'IMG_8244.JPG', + id: 'id2', + }]; + const shareExtension = { images, meta: { loading: false, error: '' } }; + const expectedState = { ...initialState, ...shareExtension }; + expect(shareExtReducer(initialState, { type: GET_SHARE_EXT_DATA_SUCCESS, payload: { images } })) + .toEqual(expectedState); + + + const images2 = [ + { + meta: { loading: false, error: '' }, + fullFilePath: '/data/user/0/com.creedon.Nixplay.qa/cache/IMG_8246.JPG', + uri: 'file:///data/user/0/com.creedon.Nixplay.qa/cache/IMG_8246.JPG', + type: 'jpg', + fileSize: '27209639', + caption: 'caption1', + mime: 'jpg', + fileName: 'IMG_8246.JPG', + id: 'id1', + }, + { + meta: { loading: false, error: '' }, + fullFilePath: '/data/user/0/com.creedon.Nixplay.qa/cache/IMG_8244.JPG', + uri: 'file:///data/user/0/com.creedon.Nixplay.qa/cache/IMG_8244.JPG', + type: 'jpg', + fileSize: '54096296', + caption: 'caption2', + mime: 'jpg', + fileName: 'IMG_8244.JPG', + id: 'id2', + }]; + const expectedState2 = { ...initialState, ...shareExtension, images: images2 }; + expect(shareExtReducer(initialState, { type: SET_SHARE_EXT, payload: { images: images2 } })) + .toEqual(expectedState2); + }); +}); diff --git a/ioneapps-maagapp-ee31119a522d/__tests__/reducers/upload.js b/ioneapps-maagapp-ee31119a522d/__tests__/reducers/upload.js new file mode 100644 index 0000000..fa6b9dc --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/__tests__/reducers/upload.js @@ -0,0 +1,223 @@ +/* global describe: true, test:true, expect:true */ +/* eslint-disable max-len */ +import { upload as uploadReducer, initialState } from '~/reducers/upload'; +import { + UPLOAD_ITEM_STARTED, + UPLOAD_SUCCESS, + UPLOAD_ITEMS, + UPLOAD_ITEMS_STATE_CHANGED, + UPLOAD_ITEMS_ERROR, +} from '~/store/actionTypes'; +import { + UPLOAD_STATUS_COMPLETED, + UPLOAD_STATUS_UPLOADING, + UPLOAD_STATUS_ERROR, +} from '~/lib/uploaders/constants'; + +describe('Upload reducer', () => { + test('CASE 1: should return initial state', () => { + expect(uploadReducer(undefined, { type: 'Default' })) + .toEqual(initialState); + }); + test('CASE 2: should return new state with items when type is UPLOAD_ITEMS', () => { + const items = [{ uri: '1.jpg' }, { uri: '2.jpg' }]; + + const stateResult = uploadReducer(undefined, { type: UPLOAD_ITEMS, payload: { items } }); + expect(stateResult).toHaveProperty('items'); + expect(stateResult.items).toHaveLength(items.length); + stateResult.items.forEach(item => { + expect(item).toHaveProperty('meta'); + }); + }); + test('CASE 3: should return state with loading when type is UPLOAD_ITEM_STARTED', () => { + const expectedState = { ...initialState, meta: { ...initialState.meta, loading: true } }; + expect(uploadReducer(initialState, { type: UPLOAD_ITEM_STARTED })).toEqual(expectedState); + }); + test('CASE 4: should return empty items with meta property when type is UPLOAD_SUCCESS', () => { + const expectedState = { + items: [], + meta: { + error: '', + status: UPLOAD_STATUS_COMPLETED, + loading: false, + elapsed: 0, + }, + receivers: [], + }; + expect(uploadReducer(initialState, { type: UPLOAD_SUCCESS })).toEqual(expectedState); + }); + + test('CASE 5: should return items with meta property when type is UPLOAD_ITEMS_STATE_CHANGED', () => { + // add pending items + const items = [{ fullFilePath: '1.jpg' }, { fullFilePath: '2.jpg' }]; + const item = { fullFilePath: '1.jpg', progress: 1 }; + const pendingItemState = uploadReducer(initialState, { type: UPLOAD_ITEMS, payload: { items } }); + + const stateResult = uploadReducer( + pendingItemState, + { + type: UPLOAD_ITEMS_STATE_CHANGED, + payload: { + item, + elapsed: 1, + }, + }, + ); + const expectedState = { + items: [{ + fullFilePath: '1.jpg', + meta: { + progress: 1, + error: '', + status: UPLOAD_STATUS_UPLOADING, + loading: true, + }, + }, { + fullFilePath: '2.jpg', + meta: { + progress: 0.0, + error: '', + status: UPLOAD_STATUS_UPLOADING, + loading: true, + }, + }], + meta: { + error: '', + status: UPLOAD_STATUS_UPLOADING, + loading: true, + elapsed: 1, + }, + }; + stateResult.items.forEach(i => { + expect(i).toHaveProperty('meta'); + }); + expect(stateResult).toEqual(expectedState); + }); + + test('CASE 6: should return correct state when type is UPLOAD_ITEMS_ERROR', () => { + const items = [{ fullFilePath: '1.jpg' }, { fullFilePath: '2.jpg' }]; + const item = { fullFilePath: '1.jpg', error: 'error' }; + const pendingItemState = uploadReducer(initialState, { type: UPLOAD_ITEMS, payload: { items } }); + const stateResult = uploadReducer( + pendingItemState, + { + type: UPLOAD_ITEMS_ERROR, + payload: { + item, + error: item.error, + }, + }, + ); + const expectedState = { + items: [], + meta: { + error: 'error', + status: UPLOAD_STATUS_ERROR, + loading: false, + elapsed: 0, + }, + }; + expect(stateResult).toEqual(expectedState); + }); + + // test('CASE 6: should return state with album loading to TRUE when type is GET_ALBUM_CONTENT', () => { + // const albums = [{ id: 1 }, { id: 2 }]; + // const payload = { + // albumId: 1, + // }; + // const originalState = { ...initialState, albums, meta: { error: '' } }; + // const stateResult = uploadReducer({ ...originalState, albums, meta: { error: '' } }, { + // type: GET_ALBUM_CONTENT, + // payload, + // }); + // const expectedState = { + // albums: [{ + // id: 1, + // meta: { error: '', loading: true }, + // }, + // { id: 2 }], + // meta: { error: '' }, + // }; + // expect(stateResult).toEqual(expectedState); + // }); + + // test('CASE 7: should return state with album content when type is GET_ALBUM_CONTENT_SUCCESS', () => { + // const albums = [{ id: 1 }, { id: 2 }]; + // const content = { + // name: 'album name', + // photos: [ + // { id: 4 }, + // { id: 5 }, + // ], + // }; + // const payload = { + // albumId: 1, + // content, + // }; + // const originalState = { ...initialState, albums, meta: { error: '' } }; + // const stateResult = uploadReducer({ ...originalState, albums, meta: { error: '' } }, { + // type: GET_ALBUM_CONTENT_SUCCESS, + // payload, + // }); + // const expectedState = { + // albums: [{ + // id: 1, + // content, + // meta: { error: '', loading: false }, + // }, + // { id: 2 }], + // meta: { error: '' }, + // }; + // expect(stateResult).toEqual(expectedState); + // }); + + // test('CASE 8: should return state with album error when type is GET_ALBUM_CONTENT_ERROR', () => { + // const albums = [{ id: 1 }, { id: 2 }]; + // const albumErr = new Error('getAlbumsContentError'); + // const payload = { + // albumId: 1, + // error: albumErr, + // }; + // const originalState = { ...initialState, albums, meta: { error: '' } }; + // const stateResult = uploadReducer({ ...originalState, albums, meta: { error: '' } }, { + // type: GET_ALBUM_CONTENT_ERROR, + // payload, + // }); + // const expectedState = { + // albums: [{ + // id: 1, + // meta: { error: albumErr, loading: false }, + // }, + // { id: 2 }], + // meta: { error: '' }, + // }; + // expect(stateResult).toEqual(expectedState); + // }); + + // test('CASE 9: should return state with album error when type is CREATE_ALBUM_SUCCESS', () => { + // const albums = [{ id: 1 }, { id: 2 }]; + // const payload = { + // album: { id: 3 }, + // }; + // const originalState = { ...initialState, albums, meta: { error: '' } }; + // const stateResult = uploadReducer({ ...originalState, albums, meta: { error: '' } }, { + // type: CREATE_ALBUM_SUCCESS, + // payload, + // }); + // const expectedState = { + // albums: [ + // { id: 1 }, + // { id: 2 }, + // { id: 3, meta: { error: '', loading: false } }, + // ], + // meta: { error: '', loading: false }, + // }; + // expect(stateResult).toEqual(expectedState); + // }); + + // test('CASE 10: should empty the state on LOGOUT_SUCCESS', () => { + // const existingState = [{ id: 1 }, { id: 2 }]; + // expect(uploadReducer(existingState, { type: LOGOUT_SUCCESS })) + // .toEqual(initialState); + // }); +}); diff --git a/ioneapps-maagapp-ee31119a522d/__tests__/reducers/user.js b/ioneapps-maagapp-ee31119a522d/__tests__/reducers/user.js new file mode 100644 index 0000000..fa97dd2 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/__tests__/reducers/user.js @@ -0,0 +1,73 @@ +/* global describe: true, test:true, expect:true */ +import { user } from '~/reducers/user'; +import { + SUBMIT_LOGIN_SUCCESS, + LOGOUT_SUCCESS, +} from '~/store/actionTypes'; + + +describe('user reducer', () => { + test('CASE 1: should return initial state', () => { + const expectedState = { + checkUserStorage: false, + showLanguageChangedDialog: false, + enableLanguageDiscrepancyPopup: false, + displayUploadDialogue: true, + showStorageFull: false, + showLanguageDiscrepancy: false, + meta: { loading: false, error: '' }, + isFullStoragePopup: false, + todo: { + avatar: { + avatarChanged: true, + tutorialDismissed: false, + }, + }, + }; + expect(user(undefined, {})) + .toEqual(expectedState); + }); + + test('CASE 2: should return correct state when actionType is `SUBMIT_LOGIN_SUCCESS`', () => { + const expectedState = { + token: 'token', + username: 'username', + email: 'email@email.com', + firstName: 'first', + lastName: 'last', + checkUserStorage: true, + meta: { loading: false, error: '' }, + isFullStoragePopup: false, + todo: { + avatar: { + avatarChanged: true, + tutorialDismissed: false, + }, + }, + }; + expect(user({}, { type: SUBMIT_LOGIN_SUCCESS, payload: { user: expectedState } })) + .toEqual(expectedState); + }); + + test('CASE 3: should return correct state when actionType is `LOGOUT_SUCCESS`', () => { + const enableLanguageDiscrepancyPopup = false; + const expectedState = { + checkUserStorage: false, + displayUploadDialogue: true, + showLanguageChangedDialog: false, + enableLanguageDiscrepancyPopup, + showStorageFull: false, + showLanguageDiscrepancy: false, + meta: { loading: false, error: '' }, + isFullStoragePopup: false, + todo: { + avatar: { + avatarChanged: true, + tutorialDismissed: false, + }, + }, + }; + expect(user({ enableLanguageDiscrepancyPopup }, { type: LOGOUT_SUCCESS, payload: { user: expectedState } })) + .toEqual(expectedState); + }); +}); diff --git a/ioneapps-maagapp-ee31119a522d/__tests__/reducers/userActivities.js b/ioneapps-maagapp-ee31119a522d/__tests__/reducers/userActivities.js new file mode 100644 index 0000000..5a90afd --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/__tests__/reducers/userActivities.js @@ -0,0 +1,62 @@ +/* global describe: true, test:true, expect:true */ +import { + userActivities as userActivitiesReducer, + initialState, +} from '~/reducers/userActivities'; +import { + GET_USER_ACTIVITIES, + GET_USER_ACTIVITIES_SUCCESS, + GET_USER_ACTIVITIES_ERROR, + SET_SHOWN_MEDIA_STATUS, + LOGOUT_SUCCESS, +} from '~/store/actionTypes'; + +describe('user activities reducer', () => { + test('CASE 1: should return initial state', () => { + expect(userActivitiesReducer(undefined, { type: 'Default' })) + .toEqual(initialState); + }); + + test('CASE 2: should return state with meta set to loading when type is GET_USER_ACTIVITIES', () => { + const expectedState = { ...initialState, meta: { ...initialState.meta, loading: true, error: '' } }; + const stateResult = userActivitiesReducer(initialState, { + type: GET_USER_ACTIVITIES, payload: {}, + }); + expect(stateResult).toEqual(expectedState); + }); + + test('CASE 3: should return state with meta set to loading when type is GET_USER_ACTIVITIES_SUCCESS', () => { + const activities = [{ mediaExchange: {} }]; + const meta = { loading: false, error: '' }; + const stateResult = userActivitiesReducer(initialState, { + type: GET_USER_ACTIVITIES_SUCCESS, payload: { activities: { activities } }, + }); + expect(stateResult).toHaveProperty('meta', meta); + }); + + test('CASE 4: should return state with error when type is GET_USER_ACTIVITIES_ERROR', () => { + const error = new Error('getFriendsError'); + const expectedState = { + ...initialState, + meta: { ...initialState.meta, error, loading: false }, + }; + const stateResult = userActivitiesReducer(initialState, { + type: GET_USER_ACTIVITIES_ERROR, payload: { error }, + }); + expect(stateResult).toEqual(expectedState); + }); + + test('CASE 5: should update isShown state when type is SET_SHOWN_MEDIA_STATUS', (isShown = false) => { + const stateResult = userActivitiesReducer(initialState, { + type: SET_SHOWN_MEDIA_STATUS, + payload: { isShown }, + }); + expect(stateResult).toEqual(initialState); + }); + + test('CASE 6: should empty the state on LOGOUT_SUCCESS', () => { + const existingState = {}; + expect(userActivitiesReducer(existingState, { type: LOGOUT_SUCCESS })) + .toEqual(initialState); + }); +}); diff --git a/ioneapps-maagapp-ee31119a522d/__tests__/testHelpers/setupJest.js b/ioneapps-maagapp-ee31119a522d/__tests__/testHelpers/setupJest.js new file mode 100644 index 0000000..da1477a --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/__tests__/testHelpers/setupJest.js @@ -0,0 +1,17 @@ +import { configure } from 'enzyme'; +import Adapter from 'enzyme-adapter-react-16'; + +configure({ adapter: new Adapter() }); + + +global.fetch = require('jest-fetch-mock'); + +// https://github.com/oblador/react-native-vector-icons/issues/433#issuecomment-354663885 +const { NativeModules } = require('react-native'); +const mockIcon = require('~/images/general/logo-color.png'); + +NativeModules.RNVectorIconsManager = { + getImageForFont: function getImageForFont(fontFamily, glyph, fontSize, color, callback) { + return callback(null, mockIcon); + }, +}; diff --git a/ioneapps-maagapp-ee31119a522d/android/app/BUCK b/ioneapps-maagapp-ee31119a522d/android/app/BUCK new file mode 100644 index 0000000..9df3fc0 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/android/app/BUCK @@ -0,0 +1,55 @@ +# To learn about Buck see [Docs](https://buckbuild.com/). +# To run your application with Buck: +# - install Buck +# - `npm start` - to start the packager +# - `cd android` +# - `keytool -genkey -v -keystore keystores/debug.keystore -storepass android -alias androiddebugkey -keypass android -dname "CN=Android Debug,O=Android,C=US"` +# - `./gradlew :app:copyDownloadableDepsToLibs` - make all Gradle compile dependencies available to Buck +# - `buck install -r android/app` - compile, install and run application +# + +load(":build_defs.bzl", "create_aar_targets", "create_jar_targets") + +lib_deps = [] + +create_aar_targets(glob(["libs/*.aar"])) + +create_jar_targets(glob(["libs/*.jar"])) + +android_library( + name = "all-libs", + exported_deps = lib_deps, +) + +android_library( + name = "app-code", + srcs = glob([ + "src/main/java/**/*.java", + ]), + deps = [ + ":all-libs", + ":build_config", + ":res", + ], +) + +android_build_config( + name = "build_config", + package = "com.creedon.Nixplay", +) + +android_resource( + name = "res", + package = "com.creedon.Nixplay", + res = "src/main/res", +) + +android_binary( + name = "app", + keystore = "//android/keystores:debug", + manifest = "src/main/AndroidManifest.xml", + package_type = "debug", + deps = [ + ":app-code", + ], +) diff --git a/ioneapps-maagapp-ee31119a522d/android/app/build.gradle b/ioneapps-maagapp-ee31119a522d/android/app/build.gradle new file mode 100644 index 0000000..7dc73f9 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/android/app/build.gradle @@ -0,0 +1,346 @@ +project.ext.envConfigFiles = [ + dev: ".env.dev", + rnd: ".env.rnd", + qa: ".env.qa", + alpha: ".env.alpha", + beta: ".env.beta", + prod: ".env", +] + +apply plugin: "com.android.application" +apply plugin: "com.google.firebase.firebase-perf" +apply plugin: "io.fabric" +//apply plugin: 'com.appsee.appsee-plugin' +// apply plugin: 'io.fabric' + +repositories { + maven { url 'https://maven.fabric.io/public' } + maven { url 'https://maven.google.com' } +} + +import com.android.build.OutputFile +apply from: project(':react-native-config').projectDir.getPath() + "/dotenv.gradle" +/** + * The react.gradle file registers a task for each build variant (e.g. bundleDebugJsAndAssets + * and bundleReleaseJsAndAssets). + * These basically call `react-native bundle` with the correct arguments during the Android build + * cycle. By default, bundleDebugJsAndAssets is skipped, as in debug/dev mode we prefer to load the + * bundle directly from the development server. Below you can see all the possible configurations + * and their defaults. If you decide to add a configuration block, make sure to add it before the + * `apply from: "../../node_modules/react-native/react.gradle"` line. + * + * project.ext.react = [ + * // the name of the generated asset file containing your JS bundle + * bundleAssetName: "index.android.bundle", + * + * // the entry file for bundle generation + * entryFile: "index.android.js", + * + * // whether to bundle JS and assets in debug mode + * bundleInDebug: false, + * + * // whether to bundle JS and assets in release mode + * bundleInRelease: true, + * + * // whether to bundle JS and assets in another build variant (if configured). + * // See http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Build-Variants + * // The configuration property can be in the following formats + * // 'bundleIn${productFlavor}${buildType}' + * // 'bundleIn${buildType}' + * // bundleInFreeDebug: true, + * // bundleInPaidRelease: true, + * // bundleInBeta: true, + * + * // whether to disable dev mode in custom build variants (by default only disabled in release) + * // for example: to disable dev mode in the staging build type (if configured) + * devDisabledInStaging: true, + * // The configuration property can be in the following formats + * // 'devDisabledIn${productFlavor}${buildType}' + * // 'devDisabledIn${buildType}' + * + * // the root of your project, i.e. where "package.json" lives + * root: "../../", + * + * // where to put the JS bundle asset in debug mode + * jsBundleDirDebug: "$buildDir/intermediates/assets/debug", + * + * // where to put the JS bundle asset in release mode + * jsBundleDirRelease: "$buildDir/intermediates/assets/release", + * + * // where to put drawable resources / React Native assets, e.g. the ones you use via + * // require('./image.png')), in debug mode + * resourcesDirDebug: "$buildDir/intermediates/res/merged/debug", + * + * // where to put drawable resources / React Native assets, e.g. the ones you use via + * // require('./image.png')), in release mode + * resourcesDirRelease: "$buildDir/intermediates/res/merged/release", + * + * // by default the gradle tasks are skipped if none of the JS files or assets change; this means + * // that we don't look at files in android/ or ios/ to determine whether the tasks are up to + * // date; if you have any other folders that you want to ignore for performance reasons (gradle + * // indexes the entire tree), add them here. Alternatively, if you have JS files in android/ + * // for example, you might want to remove it from here. + * inputExcludes: ["android/**", "ios/**"], + * + * // override which node gets called and with what additional arguments + * nodeExecutableAndArgs: ["node"], + * + * // supply additional arguments to the packager + * extraPackagerArgs: [] + * ] + */ + +project.ext.react = [ + entryFile: "index.js", + enableHermes: false, // clean and rebuild if changing + // This change is to support the merged_assets update using gradle 3.2.0 which is a Firebase Dependency + // https://github.com/Microsoft/react-native-code-push/issues/1427 + // TODO: SHOULD BE REMOVED AFTER THE 57.8 UPDATE!!! + // jsBundleDirQaDebug: "$buildDir/intermediates/merged_assets/qaDebug/mergeQaDebugAssets/out", + // jsBundleDirQaRelease: "$buildDir/intermediates/merged_assets/qaRelease/mergeQaReleaseAssets/out", + // jsBundleDirRndDebug: "$buildDir/intermediates/merged_assets/rndDebug/mergeRndDebugAssets/out", + // jsBundleDirRndRelease: "$buildDir/intermediates/merged_assets/rndRelease/mergeRndReleaseAssets/out", + // jsBundleDirProdDebug: "$buildDir/intermediates/merged_assets/prodDebug/mergeProdDebugAssets/out", + // jsBundleDirProdRelease: "$buildDir/intermediates/merged_assets/prodRelease/mergeProdReleaseAssets/out", + // jsBundleDirAlphaDebug: "$buildDir/intermediates/merged_assets/alphaDebug/mergeAlphaDebugAssets/out", + // jsBundleDirAlphaRelease: "$buildDir/intermediates/merged_assets/alphaRelease/mergeAlphaReleaseAssets/out", + // jsBundleDirBetaDebug: "$buildDir/intermediates/merged_assets/betaDebug/mergeBetaDebugAssets/out", + // jsBundleDirBetaRelease: "$buildDir/intermediates/merged_assets/betaRelease/mergBetaReleaseAssets/out", +] +def enableHermes = project.ext.react.get("enableHermes", false); +def jscFlavor = 'org.webkit:android-jsc:+' +apply from: "../../node_modules/react-native/react.gradle" +apply from: "../../node_modules/react-native-code-push/android/codepush.gradle" + +/** + * Set this to true to create two separate APKs instead of one: + * - An APK that only works on ARM devices + * - An APK that only works on x86 devices + * The advantage is the size of the APK is reduced by about 4MB. + * Upload all the APKs to the Play Store and people will download + * the correct one based on the CPU architecture of their device. + */ +def enableSeparateBuildPerCPUArchitecture = false + +/** + * Run Proguard to shrink the Java bytecode in release builds. + */ +def enableProguardInReleaseBuilds = false +def supportLibVersion = project.hasProperty('supportLibVersion') ? project.supportLibVersion : "28.0.0" + +android { + signingConfigs { + debug { + storeFile file('/Users/nixplay/Documents/Opensource/ssskeystore/sssmobile_keystore.jks') + storePassword 'sssmobile123' + keyPassword 'sssmobile123' + keyAlias = 'sssmobile' + } + } + compileSdkVersion rootProject.ext.compileSdkVersion + // buildToolsVersion rootProject.ext.buildToolsVersion + + defaultConfig { + applicationId "com.ioneres.maagap" + + "" + minSdkVersion rootProject.ext.minSdkVersion + targetSdkVersion rootProject.ext.targetSdkVersion + versionCode 19 + versionName "0.1.15" + multiDexEnabled true + renderscriptTargetApi 23 + renderscriptSupportModeEnabled true + missingDimensionStrategy 'react-native-camera', 'general' + + ndk { + abiFilters "armeabi-v7a","arm64-v8a","x86","x86_64" + } + + resValue "string", "build_config_package", "com.ioneres.maagap" + addManifestPlaceholders([NOTIFICATION_CHANNEL_NAME: "MAAGApp(SW) "]) + addManifestPlaceholders([NOTIFICATION_CHANNEL_DESCRIPTION: "MAAGApp(SW) Notification"]) + } + packagingOptions{ + doNotStrip '*/mips/*.so' + doNotStrip '*/mips64/*.so' + exclude 'META-INF/DEPENDENCIES.txt' + exclude 'META-INF/LICENSE.txt' + exclude 'META-INFTICE.txt' + exclude 'META-INFTICE' + exclude 'META-INF/LICENSE' + exclude 'META-INF/DEPEND' + + '' + + 'ENCIES' + exclude 'META-INFtice.txt' + exclude 'META-INFcense.txt' + exclude 'META-INF/dependencies.txt' + exclude 'META-INF/LGPL2.1' + exclude 'META-INF/MANIFEST.MF' + exclude 'META-INF/maven/com.google.protobuf/protobuf-java/pom.xml' + exclude 'META-INF/maven/com.google.protobuf/protobuf-java/pom.properties' + + } + + flavorDimensions "release" + productFlavors { + rndSW { + dimension = "release" + addManifestPlaceholders([APP_NAME: "MAAGApp(SW-D)"]) + addManifestPlaceholders([APP_ID: "com.ioneres.maagap"]) + addManifestPlaceholders([APP_ICON:"@mipmap/ic_launcher_rnd"]) + } + prodSW { + dimension = "release" + addManifestPlaceholders([APP_NAME: "MAAGApp(SW)"]) + addManifestPlaceholders([APP_ID: "com.ioneres.maagapp.sw"]) + addManifestPlaceholders([APP_ICON:"@mipmap/ic_launcher_rnd"]) + } + + } + splits { + abi { + reset() + enable enableSeparateBuildPerCPUArchitecture + universalApk false // If true, also generate a universal APK + include "armeabi-v7a", "x86", "arm64-v8a", "x86_64" + } + } + buildTypes { + release { + minifyEnabled enableProguardInReleaseBuilds + proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro" + zipAlignEnabled true + } + } + // applicationVariants are e.g. debug, release + applicationVariants.all { variant -> + variant.outputs.each { output -> + // For each separate APK per architecture, set a unique version code as described here: + // http://tools.android.com/tech-docs/new-build-system/user-guide/apk-splits + def versionCodes = ["armeabi-v7a": 1, "x86": 2, "arm64-v8a": 3, "x86_64": 4] + def abi = output.getFilter(OutputFile.ABI) + if (abi != null) { // null for the universal-debug, universal-release variants + output.versionCodeOverride = + versionCodes.get(abi) * 1048576 + defaultConfig.versionCode + } + } + } + dexOptions { + jumboMode true + javaMaxHeapSize "4g" + + } + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } + aaptOptions.cruncherEnabled = false + dataBinding { + enabled = true + } + +} + +buildscript { + repositories { + maven { url 'https://maven.fabric.io/public' } +// maven { url 'https://maven.google.com' } + } + + dependencies { + // These docs use an open ended version so that our plugin + // can be updated quickly in response to Android tooling updates + + // We recommend changing it to the latest version from our changelog: + // https://docs.fabric.io/android/changelog.html#fabric-gradle-plugin + // classpath 'io.fabric.tools:gradle:1.22.2' +// classpath 'com.google.gms:google-services:4.2.0' + classpath 'io.fabric.tools:gradle:1.27.1' + } +} + + + +dependencies { +// implementation project(':react-native-spring-scrollview') + implementation project(':@react-native-community_cameraroll') +// implementation project(':@react-native-community_art') + implementation project(':react-native-config') + implementation project(':@react-native-community_geolocation') + implementation project(':react-native-geocoder') + implementation project(':@react-native-community_viewpager') +// implementation project(':react-native-photo-view-ex') + implementation project(':react-native-detect-navbar-android') + implementation project(':@react-native-community_blur') + implementation project(':@react-native-community_netinfo') + implementation project(':react-native-localize') + implementation project(':@react-native-community_async-storage') + implementation project(':@react-native-community_slider') + implementation project(':react-native-webview') + implementation project(':react-native-default-preference') + implementation project(':react-native-firebase') + implementation project(':react-native-app-settings') + implementation project(':react-native-svg') + // implementation project(':react-native-network-info') + implementation project(':react-native-splash-screen') + implementation project(':react-native-haptic-feedback') + implementation project(':react-native-push-notification') + // implementation project(':react-native-google-signin') + implementation project(':react-native-keychain') + implementation project(':react-native-linear-gradient') + implementation project(':react-native-view-overflow') + implementation project(':rn-fetch-blob') + implementation project(':react-native-image-resizer') + implementation project(':react-native-fs') + implementation project(':react-native-creedon-imagepicker') + implementation project(':react-native-device-info') + implementation project(':react-native-fabric') + implementation project(':react-native-vector-icons') + implementation project(':react-native-permissions') + implementation project(':react-native-mixpanel') + implementation project(':react-native-randombytes') + implementation project(':react-native-bluetooth-escpos-printer') + implementation('com.crashlytics.sdk.android:crashlytics:2.9.5@aar') { + transitive = true + } + implementation fileTree(dir: "libs", include: ["*.jar"]) + // implementation "com.android.support:support-compat:${rootProject.ext.supportLibVersion}" + // implementation "com.android.support:appcompat-v7:${rootProject.ext.supportLibVersion}" + // implementation 'com.android.support:multidex:1.0.3' + implementation 'com.android.support:multidex:1.0.3' + + // implementation "com.android.support:design:${rootProject.ext.supportLibVersion}" + implementation "com.facebook.react:react-native:+" // From node_modules + implementation "com.facebook.fresco:animated-gif:1.3.0" + implementation "com.facebook.fresco:animated-base-support:1.3.0" + // implementation "com.android.support.constraint:constraint-layout:1.1.3" + // implementation "com.android.support:exifinterface:${rootProject.ext.supportLibVersion}" + implementation 'androidx.exifinterface:exifinterface:1.0.0' + +// implementation 'io.intercom.android:intercom-sdk-base:5.1.5' + implementation "com.google.firebase:firebase-core:16.0.8" + implementation "com.google.firebase:firebase-perf:16.2.5" + + if (enableHermes) { + def hermesPath = "../../node_modules/hermes-engine/android/"; + debugImplementation files(hermesPath + "hermes-debug.aar") + releaseImplementation files(hermesPath + "hermes-release.aar") + } else { + implementation jscFlavor + } + +} + +// Run this once to be able to run the application with BUCK +// puts all compile dependencies into folder libs for BUCK to use +task copyDownloadableDepsToLibs(type: Copy) { +from configurations.compile + into 'libs' +} + +apply plugin: 'com.google.gms.google-services' +// conflict with react-native-codepush dependencies need to skip version checking, should remove it in the future +com.google.gms.googleservices.GoogleServicesPlugin.config.disableVersionCheck = true + +apply from: file("../../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesAppBuildGradle(project) + diff --git a/ioneapps-maagapp-ee31119a522d/android/app/build_defs.bzl b/ioneapps-maagapp-ee31119a522d/android/app/build_defs.bzl new file mode 100644 index 0000000..46c4b7f --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/android/app/build_defs.bzl @@ -0,0 +1,20 @@ +"""Helper definitions to glob .aar and .jar targets""" + +def create_aar_targets(aarfiles): + for aarfile in aarfiles: + name = "aars__" + aarfile[aarfile.rindex("/") + 1:aarfile.rindex(".aar")] + lib_deps.append(":" + name) + android_prebuilt_aar( + name = name, + aar = aarfile, + ) + +def create_jar_targets(jarfiles): + for jarfile in jarfiles: + name = "jars__" + jarfile[jarfile.rindex("/") + 1:jarfile.rindex(".jar")] + lib_deps.append(":" + name) + prebuilt_jar( + name = name, + binary_jar = jarfile, + ) + \ No newline at end of file diff --git a/ioneapps-maagapp-ee31119a522d/android/app/google-services.json b/ioneapps-maagapp-ee31119a522d/android/app/google-services.json new file mode 100644 index 0000000..06dda53 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/android/app/google-services.json @@ -0,0 +1,127 @@ +{ + "project_info": { + "project_number": "570052590774", + "firebase_url": "https://maagap-fd046.firebaseio.com", + "project_id": "maagap-fd046", + "storage_bucket": "maagap-fd046.appspot.com" + }, + "client": [ + { + "client_info": { + "mobilesdk_app_id": "1:570052590774:android:2c6f0b3dc2562ebe447a17", + "android_client_info": { + "package_name": "com.ioneres.maagap" + } + }, + "oauth_client": [ + { + "client_id": "570052590774-ktmpt3jo0b7aq4hc3sg790qkck9m9098.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyA0Qmx57KvXiND_6KQPGfzhlgY7brCtrzc" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [ + { + "client_id": "570052590774-ktmpt3jo0b7aq4hc3sg790qkck9m9098.apps.googleusercontent.com", + "client_type": 3 + } + ] + } + } + }, + { + "client_info": { + "mobilesdk_app_id": "1:570052590774:android:25c0f3d85975d938447a17", + "android_client_info": { + "package_name": "com.ioneres.maagap.beneficiary" + } + }, + "oauth_client": [ + { + "client_id": "570052590774-ktmpt3jo0b7aq4hc3sg790qkck9m9098.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyA0Qmx57KvXiND_6KQPGfzhlgY7brCtrzc" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [ + { + "client_id": "570052590774-ktmpt3jo0b7aq4hc3sg790qkck9m9098.apps.googleusercontent.com", + "client_type": 3 + } + ] + } + } + }, + { + "client_info": { + "mobilesdk_app_id": "1:570052590774:android:5142e1392f1aa782447a17", + "android_client_info": { + "package_name": "com.ioneres.maagapp.beneficiary" + } + }, + "oauth_client": [ + { + "client_id": "570052590774-ktmpt3jo0b7aq4hc3sg790qkck9m9098.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyA0Qmx57KvXiND_6KQPGfzhlgY7brCtrzc" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [ + { + "client_id": "570052590774-ktmpt3jo0b7aq4hc3sg790qkck9m9098.apps.googleusercontent.com", + "client_type": 3 + } + ] + } + } + }, + { + "client_info": { + "mobilesdk_app_id": "1:570052590774:android:c50fd580d03f5739447a17", + "android_client_info": { + "package_name": "com.ioneres.maagapp.sw" + } + }, + "oauth_client": [ + { + "client_id": "570052590774-ktmpt3jo0b7aq4hc3sg790qkck9m9098.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyA0Qmx57KvXiND_6KQPGfzhlgY7brCtrzc" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [ + { + "client_id": "570052590774-ktmpt3jo0b7aq4hc3sg790qkck9m9098.apps.googleusercontent.com", + "client_type": 3 + } + ] + } + } + } + ], + "configuration_version": "1" +} \ No newline at end of file diff --git a/ioneapps-maagapp-ee31119a522d/android/app/proguard-rules.pro b/ioneapps-maagapp-ee31119a522d/android/app/proguard-rules.pro new file mode 100644 index 0000000..6760708 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/android/app/proguard-rules.pro @@ -0,0 +1,108 @@ +# Add project specific ProGuard rules here. +# By default, the flags in this file are appended to flags specified +# in /usr/local/Cellar/android-sdk/24.3.3/tools/proguard/proguard-android.txt +# You can edit the include path and order by changing the proguardFiles +# directive in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# Add any project specific keep options here: + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Disabling obfuscation is useful if you collect stack traces from production crashes +# (unless you are using a system that supports de-obfuscate the stack traces). +-dontobfuscate + +# React Native + +# Keep our interfaces so they can be used by other ProGuard rules. +# See http://sourceforge.net/p/proguard/bugs/466/ +-keep,allowobfuscation @interface com.facebook.proguard.annotations.DoNotStrip +-keep,allowobfuscation @interface com.facebook.proguard.annotations.KeepGettersAndSetters +-keep,allowobfuscation @interface com.facebook.common.internal.DoNotStrip + +# Do not strip any method/class that is annotated with @DoNotStrip +-keep @com.facebook.proguard.annotations.DoNotStrip class * +-keep @com.facebook.common.internal.DoNotStrip class * +-keepclassmembers class * { + @com.facebook.proguard.annotations.DoNotStrip *; + @com.facebook.common.internal.DoNotStrip *; +} + +-keepclassmembers @com.facebook.proguard.annotations.KeepGettersAndSetters class * { + void set*(***); + *** get*(); +} + +-keep class * extends com.facebook.react.bridge.JavaScriptModule { *; } +-keep class * extends com.facebook.react.bridge.NativeModule { *; } +-keepclassmembers,includedescriptorclasses class * { native ; } +-keepclassmembers class * { @com.facebook.react.uimanager.UIProp ; } +-keepclassmembers class * { @com.facebook.react.uimanager.annotations.ReactProp ; } +-keepclassmembers class * { @com.facebook.react.uimanager.annotations.ReactPropGroup ; } + +-dontwarn com.facebook.react.** + +# TextLayoutBuilder uses a non-public Android constructor within StaticLayout. +# See libs/proxy/src/main/java/com/facebook/fbui/textlayoutbuilder/proxy for details. +-dontwarn android.text.StaticLayout + +# okhttp + +-keepattributes Signature +-keepattributes *Annotation* +-keep class okhttp3.** { *; } +-keep interface okhttp3.** { *; } +-dontwarn okhttp3.** + +# okio + +-keep class sun.misc.Unsafe { *; } +-dontwarn java.nio.file.* +-dontwarn org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement +-dontwarn okio.** + +# config +-keep class com.creedon.Nixplay.BuildConfig { *; } + +-keep class com.bumptech.** {*;} +-keepclassmembers class com.bumptech.** {*;} +-keep class com.bumptech.glide.integration.okhttp.OkHttpGlideModule + +# fast image +-keep public class com.dylanvann.fastimage.* {*;} +-keep public class com.dylanvann.fastimage.** {*;} +-keep class com.facebook.imagepipeline.animated.factory.AnimatedFactoryImpl { public AnimatedFactoryImpl(com.facebook.imagepipeline.bitmaps.PlatformBitmapFactory, com.facebook.imagepipeline.core.ExecutorSupplier); } + +#appsee +-keep class com.appsee.** { *; } +-dontwarn com.appsee.** +-keep class android.support.** { *; } +-keep interface android.support.** { *; } +-keep class androidx.** { *; } +-keep interface androidx.** { *; } +-keepattributes SourceFile,LineNumberTable + +#fujifilm-spa-sdk +-keepclassmembers enum * { *; } +-keepclassmembers class com.fujifilmssd.FujifilmSPASDKActivity.** {*;} +-keep public class com.fujifilmssd.FujifilmSPASDKActivity.** +-keepnames class io.card.payment.** {*;} +-keep public class io.card.payment.** {*;} +-dontwarn io.card.payment.CardIOActivity +-dontwarn io.card.payment.CreditCard + + +#iap +-keepattributes *Annotation* +-keepclassmembers class ** { + @org.greenrobot.eventbus.Subscribe ; +} +-keep enum org.greenrobot.eventbus.ThreadMode { *; } \ No newline at end of file diff --git a/ioneapps-maagapp-ee31119a522d/android/app/src/debug/AndroidManifest.xml b/ioneapps-maagapp-ee31119a522d/android/app/src/debug/AndroidManifest.xml new file mode 100644 index 0000000..fa26aa5 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/android/app/src/debug/AndroidManifest.xml @@ -0,0 +1,8 @@ + + + + + + + diff --git a/ioneapps-maagapp-ee31119a522d/android/app/src/main/AndroidManifest.xml b/ioneapps-maagapp-ee31119a522d/android/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..48968aa --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/android/app/src/main/AndroidManifest.xml @@ -0,0 +1,107 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ioneapps-maagapp-ee31119a522d/android/app/src/main/assets/fonts/NixplayIcon.ttf b/ioneapps-maagapp-ee31119a522d/android/app/src/main/assets/fonts/NixplayIcon.ttf new file mode 100644 index 0000000..873289f Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/android/app/src/main/assets/fonts/NixplayIcon.ttf differ diff --git a/ioneapps-maagapp-ee31119a522d/android/app/src/main/assets/fonts/NixplayIcon.woff b/ioneapps-maagapp-ee31119a522d/android/app/src/main/assets/fonts/NixplayIcon.woff new file mode 100644 index 0000000..919e431 Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/android/app/src/main/assets/fonts/NixplayIcon.woff differ diff --git a/ioneapps-maagapp-ee31119a522d/android/app/src/main/assets/fonts/Open Sans-Bold.ttf b/ioneapps-maagapp-ee31119a522d/android/app/src/main/assets/fonts/Open Sans-Bold.ttf new file mode 100644 index 0000000..7b52945 Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/android/app/src/main/assets/fonts/Open Sans-Bold.ttf differ diff --git a/ioneapps-maagapp-ee31119a522d/android/app/src/main/assets/fonts/Open Sans-BoldItalic.ttf b/ioneapps-maagapp-ee31119a522d/android/app/src/main/assets/fonts/Open Sans-BoldItalic.ttf new file mode 100644 index 0000000..a670e14 Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/android/app/src/main/assets/fonts/Open Sans-BoldItalic.ttf differ diff --git a/ioneapps-maagapp-ee31119a522d/android/app/src/main/assets/fonts/Open Sans-ExtraBold.ttf b/ioneapps-maagapp-ee31119a522d/android/app/src/main/assets/fonts/Open Sans-ExtraBold.ttf new file mode 100644 index 0000000..3660681 Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/android/app/src/main/assets/fonts/Open Sans-ExtraBold.ttf differ diff --git a/ioneapps-maagapp-ee31119a522d/android/app/src/main/assets/fonts/Open Sans-ExtraBoldItalic.ttf b/ioneapps-maagapp-ee31119a522d/android/app/src/main/assets/fonts/Open Sans-ExtraBoldItalic.ttf new file mode 100644 index 0000000..8c4c15d Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/android/app/src/main/assets/fonts/Open Sans-ExtraBoldItalic.ttf differ diff --git a/ioneapps-maagapp-ee31119a522d/android/app/src/main/assets/fonts/Open Sans-Italic.ttf b/ioneapps-maagapp-ee31119a522d/android/app/src/main/assets/fonts/Open Sans-Italic.ttf new file mode 100644 index 0000000..e6c5414 Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/android/app/src/main/assets/fonts/Open Sans-Italic.ttf differ diff --git a/ioneapps-maagapp-ee31119a522d/android/app/src/main/assets/fonts/Open Sans-Light.ttf b/ioneapps-maagapp-ee31119a522d/android/app/src/main/assets/fonts/Open Sans-Light.ttf new file mode 100644 index 0000000..563872c Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/android/app/src/main/assets/fonts/Open Sans-Light.ttf differ diff --git a/ioneapps-maagapp-ee31119a522d/android/app/src/main/assets/fonts/Open Sans-LightItalic.ttf b/ioneapps-maagapp-ee31119a522d/android/app/src/main/assets/fonts/Open Sans-LightItalic.ttf new file mode 100644 index 0000000..5ebe2a2 Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/android/app/src/main/assets/fonts/Open Sans-LightItalic.ttf differ diff --git a/ioneapps-maagapp-ee31119a522d/android/app/src/main/assets/fonts/Open Sans-SemiBold.ttf b/ioneapps-maagapp-ee31119a522d/android/app/src/main/assets/fonts/Open Sans-SemiBold.ttf new file mode 100644 index 0000000..99db86a Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/android/app/src/main/assets/fonts/Open Sans-SemiBold.ttf differ diff --git a/ioneapps-maagapp-ee31119a522d/android/app/src/main/assets/fonts/Open Sans-SemiBoldItalic.ttf b/ioneapps-maagapp-ee31119a522d/android/app/src/main/assets/fonts/Open Sans-SemiBoldItalic.ttf new file mode 100644 index 0000000..8cad4e3 Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/android/app/src/main/assets/fonts/Open Sans-SemiBoldItalic.ttf differ diff --git a/ioneapps-maagapp-ee31119a522d/android/app/src/main/assets/fonts/Open Sans.ttf b/ioneapps-maagapp-ee31119a522d/android/app/src/main/assets/fonts/Open Sans.ttf new file mode 100644 index 0000000..2e31d02 Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/android/app/src/main/assets/fonts/Open Sans.ttf differ diff --git a/ioneapps-maagapp-ee31119a522d/android/app/src/main/assets/fonts/appcenter-config.json b/ioneapps-maagapp-ee31119a522d/android/app/src/main/assets/fonts/appcenter-config.json new file mode 100644 index 0000000..7161f44 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/android/app/src/main/assets/fonts/appcenter-config.json @@ -0,0 +1,3 @@ +{ + "app_secret": "7c35b0d3-f6d4-40ff-92eb-a143d36ea885" +} \ No newline at end of file diff --git a/ioneapps-maagapp-ee31119a522d/android/app/src/main/ic_launcher_rnd-web.png b/ioneapps-maagapp-ee31119a522d/android/app/src/main/ic_launcher_rnd-web.png new file mode 100644 index 0000000..8a84f32 Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/android/app/src/main/ic_launcher_rnd-web.png differ diff --git a/ioneapps-maagapp-ee31119a522d/android/app/src/main/java/com/ioneres/maagap/MainActivity.java b/ioneapps-maagapp-ee31119a522d/android/app/src/main/java/com/ioneres/maagap/MainActivity.java new file mode 100644 index 0000000..fdbdf22 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/android/app/src/main/java/com/ioneres/maagap/MainActivity.java @@ -0,0 +1,43 @@ +package com.ioneres.maagap; + +import android.content.Intent; +import android.net.Uri; +import android.os.Bundle; + +import com.facebook.react.ReactActivity; +import com.facebook.react.ReactActivityDelegate; +import com.facebook.react.ReactRootView; +import com.swmansion.gesturehandler.react.RNGestureHandlerEnabledRootView; + +import org.devio.rn.splashscreen.SplashScreen; + +public class MainActivity extends ReactActivity { + + @Override + protected void onCreate(Bundle savedInstanceState) { + SplashScreen.show(this); // here + super.onCreate(savedInstanceState); + // ATTENTION: This was auto-generated to handle app links. + Intent appLinkIntent = getIntent(); + String appLinkAction = appLinkIntent.getAction(); + Uri appLinkData = appLinkIntent.getData(); + } + @Override + protected void onPause() { + SplashScreen.hide(this); + super.onPause(); + } + @Override + protected String getMainComponentName() { + return "MAAGApp"; + } + @Override + protected ReactActivityDelegate createReactActivityDelegate() { + return new ReactActivityDelegate(this, getMainComponentName()) { + @Override + protected ReactRootView createRootView() { + return new RNGestureHandlerEnabledRootView(MainActivity.this); + } + }; + } +} diff --git a/ioneapps-maagapp-ee31119a522d/android/app/src/main/java/com/ioneres/maagap/MainApplication.java b/ioneapps-maagapp-ee31119a522d/android/app/src/main/java/com/ioneres/maagap/MainApplication.java new file mode 100644 index 0000000..8beb721 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/android/app/src/main/java/com/ioneres/maagap/MainApplication.java @@ -0,0 +1,86 @@ +package com.ioneres.maagap; + +import androidx.multidex.BuildConfig; +import androidx.multidex.MultiDexApplication; +import android.content.Context; +import com.facebook.react.PackageList; +import java.lang.reflect.InvocationTargetException; + +import com.facebook.react.ReactApplication; +import com.facebook.react.ReactNativeHost; +import com.facebook.react.ReactPackage; +import com.facebook.soloader.SoLoader; +import com.microsoft.codepush.react.CodePush; + +import java.util.List; + +import io.invertase.firebase.analytics.RNFirebaseAnalyticsPackage; +import io.invertase.firebase.fabric.crashlytics.RNFirebaseCrashlyticsPackage; + +public class MainApplication extends MultiDexApplication implements ReactApplication { + + private final ReactNativeHost mReactNativeHost = new ReactNativeHost(this) { + + @Override + protected String getJSBundleFile() { + return CodePush.getJSBundleFile(); + } + + @Override + public boolean getUseDeveloperSupport() { + return BuildConfig.DEBUG; + } + + @Override + protected List getPackages() { + @SuppressWarnings("UnnecessaryLocalVariable") + List packages = new PackageList(this).getPackages(); + packages.add(new RNFirebaseAnalyticsPackage()); + packages.add(new RNFirebaseCrashlyticsPackage()); + return packages; + } + + @Override + protected String getJSMainModuleName() { + return "index"; + } + }; + + @Override + public ReactNativeHost getReactNativeHost() { + return mReactNativeHost; + } + + @Override + public void onCreate() { + super.onCreate(); + SoLoader.init(this, /* native exopackage */ false); + initializeFlipper(this); // Remove this line if you don't want Flipper enabled + } + /** + * Loads Flipper in React Native templates. + * + * @param context + */ + private static void initializeFlipper(Context context) { + if (BuildConfig.DEBUG) { + try { + /* + We use reflection here to pick up the class that initializes Flipper, + since Flipper library is not available in release mode + */ + Class aClass = Class.forName("com.facebook.flipper.ReactNativeFlipper"); + aClass.getMethod("initializeFlipper", Context.class).invoke(null, context); + } catch (ClassNotFoundException e) { + e.printStackTrace(); + } catch (NoSuchMethodException e) { + e.printStackTrace(); + } catch (IllegalAccessException e) { + e.printStackTrace(); + } catch (InvocationTargetException e) { + e.printStackTrace(); + } + } + } + +} diff --git a/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/drawable-hdpi/launch_screen.png b/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/drawable-hdpi/launch_screen.png new file mode 100644 index 0000000..bba9b40 Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/drawable-hdpi/launch_screen.png differ diff --git a/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/drawable-land-hdpi/launch_screen.png b/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/drawable-land-hdpi/launch_screen.png new file mode 100644 index 0000000..4593ade Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/drawable-land-hdpi/launch_screen.png differ diff --git a/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/drawable-land-ldpi/launch_screen.png b/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/drawable-land-ldpi/launch_screen.png new file mode 100644 index 0000000..d689bbe Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/drawable-land-ldpi/launch_screen.png differ diff --git a/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/drawable-land-mdpi/launch_screen.png b/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/drawable-land-mdpi/launch_screen.png new file mode 100644 index 0000000..688f93c Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/drawable-land-mdpi/launch_screen.png differ diff --git a/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/drawable-land-xhdpi/launch_screen.png b/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/drawable-land-xhdpi/launch_screen.png new file mode 100644 index 0000000..94bab2c Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/drawable-land-xhdpi/launch_screen.png differ diff --git a/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/drawable-land-xxhdpi/launch_screen.png b/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/drawable-land-xxhdpi/launch_screen.png new file mode 100644 index 0000000..99c2b71 Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/drawable-land-xxhdpi/launch_screen.png differ diff --git a/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/drawable-land-xxxhdpi/launch_screen.png b/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/drawable-land-xxxhdpi/launch_screen.png new file mode 100644 index 0000000..e18e21e Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/drawable-land-xxxhdpi/launch_screen.png differ diff --git a/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/drawable-land/launch_screen.png b/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/drawable-land/launch_screen.png new file mode 100644 index 0000000..96c2087 Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/drawable-land/launch_screen.png differ diff --git a/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/drawable-ldpi/launch_screen.png b/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/drawable-ldpi/launch_screen.png new file mode 100644 index 0000000..e11e326 Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/drawable-ldpi/launch_screen.png differ diff --git a/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/drawable-mdpi/launch_screen.png b/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/drawable-mdpi/launch_screen.png new file mode 100644 index 0000000..1e5b53a Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/drawable-mdpi/launch_screen.png differ diff --git a/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/drawable-xhdpi/launch_screen.png b/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/drawable-xhdpi/launch_screen.png new file mode 100644 index 0000000..b1133c3 Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/drawable-xhdpi/launch_screen.png differ diff --git a/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/drawable-xxhdpi/launch_screen.png b/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/drawable-xxhdpi/launch_screen.png new file mode 100644 index 0000000..1d13bcb Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/drawable-xxhdpi/launch_screen.png differ diff --git a/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/drawable-xxxhdpi/launch_screen.png b/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/drawable-xxxhdpi/launch_screen.png new file mode 100644 index 0000000..78b44e0 Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/drawable-xxxhdpi/launch_screen.png differ diff --git a/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/drawable/launch_screen.png b/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/drawable/launch_screen.png new file mode 100644 index 0000000..9ed4689 Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/drawable/launch_screen.png differ diff --git a/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/layout/launch_screen.xml b/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/layout/launch_screen.xml new file mode 100644 index 0000000..92fc2a0 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/layout/launch_screen.xml @@ -0,0 +1,12 @@ + + + + + \ No newline at end of file diff --git a/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/layout/layout_splashscreen.xml b/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/layout/layout_splashscreen.xml new file mode 100644 index 0000000..8eed2fb --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/layout/layout_splashscreen.xml @@ -0,0 +1,13 @@ + + + + + + \ No newline at end of file diff --git a/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_rnd.xml b/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_rnd.xml new file mode 100644 index 0000000..8412caf --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_rnd.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_rnd_round.xml b/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_rnd_round.xml new file mode 100644 index 0000000..8412caf --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_rnd_round.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000..2ef0ef0 Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/mipmap-hdpi/ic_launcher.png differ diff --git a/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/mipmap-hdpi/ic_launcher_rnd.png b/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/mipmap-hdpi/ic_launcher_rnd.png new file mode 100644 index 0000000..2961753 Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/mipmap-hdpi/ic_launcher_rnd.png differ diff --git a/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/mipmap-hdpi/ic_launcher_rnd_foreground.png b/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/mipmap-hdpi/ic_launcher_rnd_foreground.png new file mode 100644 index 0000000..ef0cbce Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/mipmap-hdpi/ic_launcher_rnd_foreground.png differ diff --git a/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/mipmap-hdpi/ic_launcher_rnd_round.png b/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/mipmap-hdpi/ic_launcher_rnd_round.png new file mode 100644 index 0000000..e3c27e3 Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/mipmap-hdpi/ic_launcher_rnd_round.png differ diff --git a/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png b/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png new file mode 100644 index 0000000..38b4178 Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png differ diff --git a/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/mipmap-ldpi/ic_launcher.png b/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/mipmap-ldpi/ic_launcher.png new file mode 100644 index 0000000..6b0a335 Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/mipmap-ldpi/ic_launcher.png differ diff --git a/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/mipmap-ldpi/ic_launcher_rnd.png b/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/mipmap-ldpi/ic_launcher_rnd.png new file mode 100644 index 0000000..fc7f4a3 Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/mipmap-ldpi/ic_launcher_rnd.png differ diff --git a/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 0000000..1034ebb Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/mipmap-mdpi/ic_launcher.png differ diff --git a/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/mipmap-mdpi/ic_launcher_rnd.png b/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/mipmap-mdpi/ic_launcher_rnd.png new file mode 100644 index 0000000..357fba0 Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/mipmap-mdpi/ic_launcher_rnd.png differ diff --git a/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/mipmap-mdpi/ic_launcher_rnd_foreground.png b/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/mipmap-mdpi/ic_launcher_rnd_foreground.png new file mode 100644 index 0000000..b1312b8 Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/mipmap-mdpi/ic_launcher_rnd_foreground.png differ diff --git a/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/mipmap-mdpi/ic_launcher_rnd_round.png b/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/mipmap-mdpi/ic_launcher_rnd_round.png new file mode 100644 index 0000000..2b68d37 Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/mipmap-mdpi/ic_launcher_rnd_round.png differ diff --git a/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png b/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png new file mode 100644 index 0000000..15a2b46 Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png differ diff --git a/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 0000000..b0cc9ef Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png differ diff --git a/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/mipmap-xhdpi/ic_launcher_rnd.png b/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/mipmap-xhdpi/ic_launcher_rnd.png new file mode 100644 index 0000000..92e1a22 Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/mipmap-xhdpi/ic_launcher_rnd.png differ diff --git a/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/mipmap-xhdpi/ic_launcher_rnd_foreground.png b/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/mipmap-xhdpi/ic_launcher_rnd_foreground.png new file mode 100644 index 0000000..7fcf5da Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/mipmap-xhdpi/ic_launcher_rnd_foreground.png differ diff --git a/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/mipmap-xhdpi/ic_launcher_rnd_round.png b/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/mipmap-xhdpi/ic_launcher_rnd_round.png new file mode 100644 index 0000000..07b679a Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/mipmap-xhdpi/ic_launcher_rnd_round.png differ diff --git a/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png new file mode 100644 index 0000000..03bf938 Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png differ diff --git a/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000..a34c87d Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png differ diff --git a/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_rnd.png b/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_rnd.png new file mode 100644 index 0000000..e48879c Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_rnd.png differ diff --git a/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_rnd_foreground.png b/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_rnd_foreground.png new file mode 100644 index 0000000..b567af7 Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_rnd_foreground.png differ diff --git a/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_rnd_round.png b/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_rnd_round.png new file mode 100644 index 0000000..cf4aa3d Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_rnd_round.png differ diff --git a/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png new file mode 100644 index 0000000..7fc0f29 Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png differ diff --git a/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 0000000..e4f2513 Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ diff --git a/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_rnd.png b/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_rnd.png new file mode 100644 index 0000000..b1d427d Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_rnd.png differ diff --git a/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_rnd_foreground.png b/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_rnd_foreground.png new file mode 100644 index 0000000..5554e0b Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_rnd_foreground.png differ diff --git a/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_rnd_round.png b/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_rnd_round.png new file mode 100644 index 0000000..9c77888 Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_rnd_round.png differ diff --git a/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png new file mode 100644 index 0000000..0120b8d Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png differ diff --git a/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/values/colors.xml b/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/values/colors.xml new file mode 100644 index 0000000..f431314 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/values/colors.xml @@ -0,0 +1,4 @@ + + + #C1C1C1 + diff --git a/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/values/ic_launcher_background.xml b/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/values/ic_launcher_background.xml new file mode 100644 index 0000000..beab31f --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/values/ic_launcher_background.xml @@ -0,0 +1,4 @@ + + + #000000 + \ No newline at end of file diff --git a/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/values/strings.xml b/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/values/strings.xml new file mode 100644 index 0000000..cf0535d --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/values/strings.xml @@ -0,0 +1,5 @@ + + MAAGApp + MAAGApp + UzqUfiU2OpJQpPowEHmZoTjL2oBa6byBdcenH + diff --git a/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/values/styles.xml b/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/values/styles.xml new file mode 100644 index 0000000..fde0a6f --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/values/styles.xml @@ -0,0 +1,26 @@ + + + + + + + + + diff --git a/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/xml/filepaths.xml b/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/xml/filepaths.xml new file mode 100644 index 0000000..5de4371 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/android/app/src/main/res/xml/filepaths.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/ioneapps-maagapp-ee31119a522d/android/build.gradle b/ioneapps-maagapp-ee31119a522d/android/build.gradle new file mode 100644 index 0000000..d52e737 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/android/build.gradle @@ -0,0 +1,81 @@ +// Top-level build file where you can add configuration options common to all sub-projects/modules. + +buildscript { + ext { + buildToolsVersion = "29.0.2" + minSdkVersion = 21 + compileSdkVersion = 29 + targetSdkVersion = 29 + // supportLibVersion = "28.0.0" + glideVersion = "4.9.0" + googlePlayServicesAuthVersion = "15.0.1" + excludeAppGlideModule = true + androidXCore = "1.0.2" + } + repositories { + jcenter() + maven { + url 'https://maven.google.com/' + name 'Google' + } + google() + } + dependencies { + classpath("com.android.tools.build:gradle:3.4.2") + classpath 'com.google.gms:google-services:4.2.0' + classpath 'me.tatarka:gradle-retrolambda:3.6.1' + classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8' + classpath 'com.google.firebase:firebase-plugins:1.2.0' + // NOTE: Do not place your application dependencies here; they belong + // in the individual module build.gradle files + } +} + +allprojects { + + repositories { + mavenLocal() + google() + jcenter() + maven { + // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm + url("$rootDir/../node_modules/react-native/android") + } + // jitpack for github + maven { url "https://jitpack.io" } + maven { url("$rootDir/../node_modules/jsc-android/dist") } + def googlePlayServicesVersion = '16.0.0' + + configurations.all { + resolutionStrategy { + // react-native-admob + force "com.google.android.gms:play-services-ads:17.1.2" + // react-native-maps + force "com.google.android.gms:play-services-base:16.0.1" + force "com.google.android.gms:play-services-maps:$googlePlayServicesVersion" + // react-native-onesignal + force "com.google.android.gms:play-services-gcm:$googlePlayServicesVersion" + force "com.google.android.gms:play-services-analytics:$googlePlayServicesVersion" + force "com.google.android.gms:play-services-location:$googlePlayServicesVersion" + // react-native-google-sign-in +// force "com.google.android.gms:play-services-auth:16.0.1" + //react-native-push-notification + force "com.google.firebase:firebase-messaging:17.6.0" + force "com.google.android.gms:play-services-base:16.1.0" + + } + } + } +} + +subprojects { subproject -> + afterEvaluate{ + if((subproject.plugins.hasPlugin('android') || subproject.plugins.hasPlugin('android-library'))) { + android { + compileSdkVersion rootProject.ext.compileSdkVersion + buildToolsVersion rootProject.ext.buildToolsVersion + } + } + } +} + diff --git a/ioneapps-maagapp-ee31119a522d/android/gradle.properties b/ioneapps-maagapp-ee31119a522d/android/gradle.properties new file mode 100644 index 0000000..cb84884 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/android/gradle.properties @@ -0,0 +1,25 @@ +# Project-wide Gradle settings. + +# IDE (e.g. Android Studio) users: +# Gradle settings configured through the IDE *will override* +# any settings specified in this file. + +# For more details on how to configure your build environment visit +# http://www.gradle.org/docs/current/userguide/build_environment.html + +# Specifies the JVM arguments used for the daemon process. +# The setting is particularly useful for tweaking memory settings. +# Default value: -Xmx10248m -XX:MaxPermSize=256m +# org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 + +# When configured, Gradle will run in incubating parallel mode. +# This option should only be used with decoupled projects. More details, visit +# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects +# org.gradle.parallel=true + +android.useDeprecatedNdk=true +org.gradle.daemon=true +org.gradle.jvmargs=-Xmx4096m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 +#android.disableResourceValidation=true +android.useAndroidX=true +android.enableJetifier=true \ No newline at end of file diff --git a/ioneapps-maagapp-ee31119a522d/android/gradle/wrapper/gradle-wrapper.jar b/ioneapps-maagapp-ee31119a522d/android/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000..b5166da Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/android/gradle/wrapper/gradle-wrapper.jar differ diff --git a/ioneapps-maagapp-ee31119a522d/android/gradle/wrapper/gradle-wrapper.properties b/ioneapps-maagapp-ee31119a522d/android/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..d33e51b --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/android/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,6 @@ +#Fri Apr 26 10:32:00 HKT 2019 +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-5.5-all.zip \ No newline at end of file diff --git a/ioneapps-maagapp-ee31119a522d/android/gradlew b/ioneapps-maagapp-ee31119a522d/android/gradlew new file mode 100644 index 0000000..4d28275 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/android/gradlew @@ -0,0 +1,164 @@ +#!/usr/bin/env bash + +############################################################################## +## +## Gradle start up script for UN*X +## +############################################################################## + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +APP_NAME="Gradle" +APP_BASE_NAME=`basename "$0"` + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD="maximum" + +warn ( ) { + echo "$*" +} + +die ( ) { + echo + echo "$*" + echo + exit 1 +} + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +case "`uname`" in + CYGWIN* ) + cygwin=true + ;; + Darwin* ) + darwin=true + ;; + MINGW* ) + msys=true + ;; +esac + +# For Cygwin, ensure paths are in UNIX format before anything is touched. +if $cygwin ; then + [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"` +fi + +# Attempt to set APP_HOME +# Resolve links: $0 may be a link +PRG="$0" +# Need this for relative symlinks. +while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >&- +APP_HOME="`pwd -P`" +cd "$SAVED" >&- + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD="java" + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then + MAX_FD_LIMIT=`ulimit -H -n` + if [ $? -eq 0 ] ; then + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then + MAX_FD="$MAX_FD_LIMIT" + fi + ulimit -n $MAX_FD + if [ $? -ne 0 ] ; then + warn "Could not set maximum file descriptor limit: $MAX_FD" + fi + else + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" + fi +fi + +# For Darwin, add options to specify how the application appears in the dock +if $darwin; then + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" +fi + +# For Cygwin, switch paths to Windows format before running java +if $cygwin ; then + APP_HOME=`cygpath --path --mixed "$APP_HOME"` + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + + # We build the pattern for arguments to be converted via cygpath + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` + SEP="" + for dir in $ROOTDIRSRAW ; do + ROOTDIRS="$ROOTDIRS$SEP$dir" + SEP="|" + done + OURCYGPATTERN="(^($ROOTDIRS))" + # Add a user-defined pattern to the cygpath arguments + if [ "$GRADLE_CYGPATTERN" != "" ] ; then + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" + fi + # Now convert the arguments - kludge to limit ourselves to /bin/sh + i=0 + for arg in "$@" ; do + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option + + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` + else + eval `echo args$i`="\"$arg\"" + fi + i=$((i+1)) + done + case $i in + (0) set -- ;; + (1) set -- "$args0" ;; + (2) set -- "$args0" "$args1" ;; + (3) set -- "$args0" "$args1" "$args2" ;; + (4) set -- "$args0" "$args1" "$args2" "$args3" ;; + (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + esac +fi + +# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules +function splitJvmOpts() { + JVM_OPTS=("$@") +} +eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS +JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME" + +exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@" diff --git a/ioneapps-maagapp-ee31119a522d/android/gradlew.bat b/ioneapps-maagapp-ee31119a522d/android/gradlew.bat new file mode 100644 index 0000000..788abb2 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/android/gradlew.bat @@ -0,0 +1,90 @@ +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto init + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto init + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:init +@rem Get command-line arguments, handling Windowz variants + +if not "%OS%" == "Windows_NT" goto win9xME_args +if "%@eval[2+2]" == "4" goto 4NT_args + +:win9xME_args +@rem Slurp the command line arguments. +set CMD_LINE_ARGS= +set _SKIP=2 + +:win9xME_args_slurp +if "x%~1" == "x" goto execute + +set CMD_LINE_ARGS=%* +goto execute + +:4NT_args +@rem Get arguments from the 4NT Shell from JP Software +set CMD_LINE_ARGS=%$ + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/ioneapps-maagapp-ee31119a522d/android/keystores/BUCK b/ioneapps-maagapp-ee31119a522d/android/keystores/BUCK new file mode 100644 index 0000000..88e4c31 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/android/keystores/BUCK @@ -0,0 +1,8 @@ +keystore( + name = "debug", + properties = "debug.keystore.properties", + store = "debug.keystore", + visibility = [ + "PUBLIC", + ], +) diff --git a/ioneapps-maagapp-ee31119a522d/android/keystores/debug.keystore.properties b/ioneapps-maagapp-ee31119a522d/android/keystores/debug.keystore.properties new file mode 100644 index 0000000..121bfb4 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/android/keystores/debug.keystore.properties @@ -0,0 +1,4 @@ +key.store=debug.keystore +key.alias=androiddebugkey +key.store.password=android +key.alias.password=android diff --git a/ioneapps-maagapp-ee31119a522d/android/settings.gradle b/ioneapps-maagapp-ee31119a522d/android/settings.gradle new file mode 100644 index 0000000..816a836 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/android/settings.gradle @@ -0,0 +1,9 @@ +rootProject.name = 'MAAGApp' +// include ':react-native-config' +// project(':react-native-config').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-config/android') +include ':react-native-firebase' +project(':react-native-firebase').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-firebase/android') +include ':react-native-bluetooth-escpos-printer' +project(':react-native-bluetooth-escpos-printer').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-bluetooth-escpos-printer/android') +apply from: file("../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesSettingsGradle(settings) +include ':app' diff --git a/ioneapps-maagapp-ee31119a522d/app.json b/ioneapps-maagapp-ee31119a522d/app.json new file mode 100644 index 0000000..f1aa086 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/app.json @@ -0,0 +1,4 @@ +{ + "name": "MAAGApp", + "displayName": "MAAGApp" +} diff --git a/ioneapps-maagapp-ee31119a522d/babel.config.js b/ioneapps-maagapp-ee31119a522d/babel.config.js new file mode 100644 index 0000000..4ae1d14 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/babel.config.js @@ -0,0 +1,33 @@ +module.exports = { + "presets": [ + "module:metro-react-native-babel-preset" + ], + "plugins": [ + [ + "module-resolver", + { + "cwd": "babelrc", + "extensions": [ + ".js", + ".ios.js", + ".android.js" + ], + "alias": { + "~": "./src", + "~comp": "./src/components", + "~cont": "./src/containers", + "helper": "./__tests__/testHelpers" + } + } + ], + [ + "@babel/plugin-transform-spread", + { + "loose": true + } + ], + "relay", + "jest-hoist", + "import-glob" + ] +} diff --git a/ioneapps-maagapp-ee31119a522d/docker/local.Dockerfile b/ioneapps-maagapp-ee31119a522d/docker/local.Dockerfile new file mode 100644 index 0000000..8edc6ab --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/docker/local.Dockerfile @@ -0,0 +1,29 @@ +# BASE DOCKER IMAGE DOCKERFILE: +ARG ECR_URL="059081848155.dkr.ecr.ap-northeast-1.amazonaws.com" +ARG NODE_VERSION="8.11.4" +ARG IMAGE="$ECR_URL/node-alpine:$NODE_VERSION" + +FROM "$IMAGE" as intermediate +# add credentials on build +ARG SSH_PRIVATE_KEY +RUN mkdir -p $HOME_DIR/.ssh +RUN echo "${SSH_PRIVATE_KEY}" > $HOME_DIR/.ssh/id_rsa +RUN chown -R $CONTAINER_USER:$CONTAINER_USER $HOME_DIR && \ + chmod 700 $HOME_DIR/.ssh && \ + chmod 600 $HOME_DIR/.ssh/id_rsa + +USER $CONTAINER_USER +COPY --chown=node:node package.json /tmp/package.json +RUN eval `ssh-agent -s` && ssh-add $HOME_DIR/.ssh/id_rsa +RUN cd /tmp && npm cache clean --force +RUN cd /tmp && npm install + +# Use the image without sshkey +FROM "$IMAGE" +LABEL description="nixplay-mobile-react" +RUN mkdir -p $HOME_DIR/app +COPY --from=intermediate /tmp/node_modules $HOME_DIR/app/node_modules +COPY . $HOME_DIR/app/ + +WORKDIR $HOME_DIR/app + diff --git a/ioneapps-maagapp-ee31119a522d/docker/test.yml b/ioneapps-maagapp-ee31119a522d/docker/test.yml new file mode 100644 index 0000000..54b2559 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/docker/test.yml @@ -0,0 +1,12 @@ +version: "3" + +services: + nixplay-mobile-react: + build: + context: ../ + container_name: mobile-react.test.nixplay.com + image: nixplay/nixplay-mobile-react + command: npm test + volumes: + - ../:/home/node/app + - /home/node/app/node_modules diff --git a/ioneapps-maagapp-ee31119a522d/e2e/firstTest.spec.js b/ioneapps-maagapp-ee31119a522d/e2e/firstTest.spec.js new file mode 100644 index 0000000..21a7d33 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/e2e/firstTest.spec.js @@ -0,0 +1,26 @@ + +describe('Login', () => { + beforeEach(async () => { + await device.reloadReactNative(); + }); + beforeEach(function(done) { + done(); + }); + + it('should have password', async () => { + await expect(element(by.id('password'))).toBeVisible(); + }); + it('should have username', async () => { + await expect(element(by.id('username'))).toBeVisible(); + }); + + // it('should show hello screen after tap', async () => { + // await element(by.id('hello_button')).tap(); + // await expect(element(by.text('Hello!!!'))).toBeVisible(); + // }); + + // it('should show world screen after tap', async () => { + // await element(by.id('world_button')).tap(); + // await expect(element(by.text('World!!!'))).toBeVisible(); + // }); +}) diff --git a/ioneapps-maagapp-ee31119a522d/e2e/init.js b/ioneapps-maagapp-ee31119a522d/e2e/init.js new file mode 100644 index 0000000..8f38a4e --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/e2e/init.js @@ -0,0 +1,10 @@ +const detox = require('detox'); +const config = require('../package.json').detox; + +before(async () => { + await detox.init(config); +}); + +after(async () => { + await detox.cleanup(); +}); \ No newline at end of file diff --git a/ioneapps-maagapp-ee31119a522d/e2e/mocha.opts b/ioneapps-maagapp-ee31119a522d/e2e/mocha.opts new file mode 100644 index 0000000..dcff2e9 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/e2e/mocha.opts @@ -0,0 +1 @@ +--recursive --timeout 120000 --bail \ No newline at end of file diff --git a/ioneapps-maagapp-ee31119a522d/hotfix/react-scrollview-fix.js b/ioneapps-maagapp-ee31119a522d/hotfix/react-scrollview-fix.js new file mode 100644 index 0000000..2f12f71 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/hotfix/react-scrollview-fix.js @@ -0,0 +1,25 @@ +/* eslint-disable no-console */ +const fs = require('fs'); + +try { + console.log('React spring scroll view fix...'); + const rootDir = process.cwd(); + + const file = `${rootDir}/node_modules/react-native-spring-scrollview/SpringScrollView.js`; + const data = fs.readFileSync(file, 'utf8'); + const dataFix = 'react-native/Libraries/Components/TextInput/TextInputState'; + + if (data.indexOf(dataFix) !== -1) { + // eslint-disable-next-line no-throw-literal + throw '> Already fixed'; + } + + const result = data.replace( + /react-native\/lib\/TextInputState/g, + dataFix, + ); + fs.writeFileSync(file, result, 'utf8'); + console.log('> Done'); +} catch (error) { + console.error(error); +} diff --git a/ioneapps-maagapp-ee31119a522d/index.js b/ioneapps-maagapp-ee31119a522d/index.js new file mode 100644 index 0000000..45eddd5 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/index.js @@ -0,0 +1,12 @@ +import { AppRegistry } from 'react-native'; +import { exceptionHandler } from '~/lib/services'; +import App from '~/App'; +import codePush from 'react-native-code-push'; +import { name as appName } from './app.json'; + +if (!__DEV__) { + exceptionHandler.setJsExceptionHandler(); +} + +const AppWithCodePush = codePush(App); +AppRegistry.registerComponent(appName, () => AppWithCodePush); diff --git a/ioneapps-maagapp-ee31119a522d/ios/Fabric.framework/Fabric b/ioneapps-maagapp-ee31119a522d/ios/Fabric.framework/Fabric new file mode 100644 index 0000000..e091c83 Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/ios/Fabric.framework/Fabric differ diff --git a/ioneapps-maagapp-ee31119a522d/ios/Fabric.framework/Headers/FABAttributes.h b/ioneapps-maagapp-ee31119a522d/ios/Fabric.framework/Headers/FABAttributes.h new file mode 100644 index 0000000..3a9355a --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/ios/Fabric.framework/Headers/FABAttributes.h @@ -0,0 +1,51 @@ +// +// FABAttributes.h +// Fabric +// +// Copyright (C) 2015 Twitter, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#pragma once + +#define FAB_UNAVAILABLE(x) __attribute__((unavailable(x))) + +#if !__has_feature(nullability) + #define nonnull + #define nullable + #define _Nullable + #define _Nonnull +#endif + +#ifndef NS_ASSUME_NONNULL_BEGIN + #define NS_ASSUME_NONNULL_BEGIN +#endif + +#ifndef NS_ASSUME_NONNULL_END + #define NS_ASSUME_NONNULL_END +#endif + + +/** + * The following macros are defined here to provide + * backwards compatability. If you are still using + * them you should migrate to the native nullability + * macros. + */ +#define fab_nullable nullable +#define fab_nonnull nonnull +#define FAB_NONNULL __fab_nonnull +#define FAB_NULLABLE __fab_nullable +#define FAB_START_NONNULL NS_ASSUME_NONNULL_BEGIN +#define FAB_END_NONNULL NS_ASSUME_NONNULL_END diff --git a/ioneapps-maagapp-ee31119a522d/ios/Fabric.framework/Headers/Fabric.h b/ioneapps-maagapp-ee31119a522d/ios/Fabric.framework/Headers/Fabric.h new file mode 100644 index 0000000..ecbdb53 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/ios/Fabric.framework/Headers/Fabric.h @@ -0,0 +1,82 @@ +// +// Fabric.h +// Fabric +// +// Copyright (C) 2015 Twitter, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import +#import "FABAttributes.h" + +NS_ASSUME_NONNULL_BEGIN + +#if TARGET_OS_IPHONE +#if __IPHONE_OS_VERSION_MIN_REQUIRED < 60000 + #error "Fabric's minimum iOS version is 6.0" +#endif +#else +#if __MAC_OS_X_VERSION_MIN_REQUIRED < 1070 + #error "Fabric's minimum OS X version is 10.7" +#endif +#endif + +/** + * Fabric Base. Coordinates configuration and starts all provided kits. + */ +@interface Fabric : NSObject + +/** + * Initialize Fabric and all provided kits. Call this method within your App Delegate's `application:didFinishLaunchingWithOptions:` and provide the kits you wish to use. + * + * For example, in Objective-C: + * + * `[Fabric with:@[[Crashlytics class], [Twitter class], [Digits class], [MoPub class]]];` + * + * Swift: + * + * `Fabric.with([Crashlytics.self(), Twitter.self(), Digits.self(), MoPub.self()])` + * + * Only the first call to this method is honored. Subsequent calls are no-ops. + * + * @param kitClasses An array of kit Class objects + * + * @return Returns the shared Fabric instance. In most cases this can be ignored. + */ ++ (instancetype)with:(NSArray *)kitClasses; + +/** + * Returns the Fabric singleton object. + */ ++ (instancetype)sharedSDK; + +/** + * This BOOL enables or disables debug logging, such as kit version information. The default value is NO. + */ +@property (nonatomic, assign) BOOL debug; + +/** + * Unavailable. Use `+sharedSDK` to retrieve the shared Fabric instance. + */ +- (id)init FAB_UNAVAILABLE("Use +sharedSDK to retrieve the shared Fabric instance."); + +/** + * Unavailable. Use `+sharedSDK` to retrieve the shared Fabric instance. + */ ++ (instancetype)new FAB_UNAVAILABLE("Use +sharedSDK to retrieve the shared Fabric instance."); + +@end + +NS_ASSUME_NONNULL_END + diff --git a/ioneapps-maagapp-ee31119a522d/ios/Fabric.framework/Info.plist b/ioneapps-maagapp-ee31119a522d/ios/Fabric.framework/Info.plist new file mode 100644 index 0000000..5bea7d5 Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/ios/Fabric.framework/Info.plist differ diff --git a/ioneapps-maagapp-ee31119a522d/ios/Fabric.framework/Modules/module.modulemap b/ioneapps-maagapp-ee31119a522d/ios/Fabric.framework/Modules/module.modulemap new file mode 100644 index 0000000..2a31223 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/ios/Fabric.framework/Modules/module.modulemap @@ -0,0 +1,6 @@ +framework module Fabric { + umbrella header "Fabric.h" + + export * + module * { export * } +} \ No newline at end of file diff --git a/ioneapps-maagapp-ee31119a522d/ios/Fabric.framework/run b/ioneapps-maagapp-ee31119a522d/ios/Fabric.framework/run new file mode 100644 index 0000000..9058ea6 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/ios/Fabric.framework/run @@ -0,0 +1,28 @@ +#!/bin/sh + +# run +# +# Copyright (c) 2015 Crashlytics. All rights reserved. + +# Figure out where we're being called from +DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd ) + +# Quote path in case of spaces or special chars +DIR="\"${DIR}" + +PATH_SEP="/" +VALIDATE_COMMAND="uploadDSYM\" $@ validate run-script" +UPLOAD_COMMAND="uploadDSYM\" $@ run-script" + +# Ensure params are as expected, run in sync mode to validate +eval $DIR$PATH_SEP$VALIDATE_COMMAND +return_code=$? + +if [[ $return_code != 0 ]]; then + exit $return_code +fi + +# Verification passed, upload dSYM in background to prevent Xcode from waiting +# Note: Validation is performed again before upload. +# Output can still be found in Console.app +eval $DIR$PATH_SEP$UPLOAD_COMMAND > /dev/null 2>&1 & diff --git a/ioneapps-maagapp-ee31119a522d/ios/Fabric.framework/uploadDSYM b/ioneapps-maagapp-ee31119a522d/ios/Fabric.framework/uploadDSYM new file mode 100644 index 0000000..d687e65 Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/ios/Fabric.framework/uploadDSYM differ diff --git a/ioneapps-maagapp-ee31119a522d/ios/NixShareExtension/Base.lproj/MainInterface.storyboard b/ioneapps-maagapp-ee31119a522d/ios/NixShareExtension/Base.lproj/MainInterface.storyboard new file mode 100644 index 0000000..5433aec --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/ios/NixShareExtension/Base.lproj/MainInterface.storyboard @@ -0,0 +1,229 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ioneapps-maagapp-ee31119a522d/ios/NixShareExtension/Classes/Controllers/ContainerViewController.h b/ioneapps-maagapp-ee31119a522d/ios/NixShareExtension/Classes/Controllers/ContainerViewController.h new file mode 100644 index 0000000..711cd21 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/ios/NixShareExtension/Classes/Controllers/ContainerViewController.h @@ -0,0 +1,31 @@ +// +// ContainerViewController.h +// PhotoShareExtension +// +// Created by Russell on 27/5/15. +// +// + +#import +#import +#import +@interface ContainerViewController : UIViewController +@property (nonatomic, strong) NixAPI *api; +@property (nonatomic, strong) NixUpload *uploadHandler; + +@property (nonatomic, strong) NSArray *imageErrors; +@property (nonatomic, strong) NSArray *imageUrls; +@property (nonatomic, strong) NSArray *captions; +@property (nonatomic, strong) NSArray *playlistIds; +@property (nonatomic, strong) NSArray *friendUsernames; + +@property (nonatomic, strong) NSArray *playlistData; +@property (nonatomic, strong) NSArray *friendData; +@property (nonatomic, strong) NSArray *selectedReceiverIndexPaths; + +- (void)verifyServiceAvailable; +- (void)verifyServiceAvailableWithCompletionHandler:(void (^)(BOOL))completionHandler; +- (void)pingWithCompletionHandler:(void (^)(NSError *))completionHandler; +- (void)send; +- (void)cancel; +@end diff --git a/ioneapps-maagapp-ee31119a522d/ios/NixShareExtension/Classes/Controllers/ContainerViewController.m b/ioneapps-maagapp-ee31119a522d/ios/NixShareExtension/Classes/Controllers/ContainerViewController.m new file mode 100644 index 0000000..fc57ff0 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/ios/NixShareExtension/Classes/Controllers/ContainerViewController.m @@ -0,0 +1,368 @@ +// +// ContainerViewController.m +// PhotoShareExtension +// +// Created by Russell on 27/5/15. +// +// + +#import "ContainerViewController.h" +#import "ImageCaptionViewController.h" +#import + +@interface ContainerViewController () +@property (assign) ImageCaptionViewController *svc; +- (BOOL)tokenExists; +- (void)handleUploadError:(NSError *)error; +@end + +@implementation ContainerViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + // Do any additional setup after loading the view. + + [self performSegueWithIdentifier:@"InitialSegue" sender:nil]; + + self.api = [[NixAPI alloc] init]; + self.uploadHandler = [[NixUpload alloc] initWithAPI:self.api]; + self.uploadHandler.delegate = self; + self.uploadHandler.uploadSessionIdentifier = @"com.creedon.Nixplay.uploadsession.appext"; + [self.uploadHandler createSession]; // rejoin the session + [self.uploadHandler loadUploadState]; +} + +- (void)didReceiveMemoryWarning { + [super didReceiveMemoryWarning]; + // Dispose of any resources that can be recreated. +} + +#pragma mark - Navigation +// In a storyboard-based application, you will often want to do a little preparation before navigation +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + // Get the new view controller using [segue destinationViewController]. + // Pass the selected object to the new view controller. + self.svc = ((UINavigationController *)segue.destinationViewController) + .childViewControllers[0]; + self.svc.containerViewController = self; +} + +#pragma mark - Actions +- (void)verifyServiceAvailable { + [self verifyServiceAvailableWithCompletionHandler:nil]; +} + +- (void)verifyServiceAvailableWithCompletionHandler:(void (^)(BOOL))completionHandler { + + [self.uploadHandler getCurrentTasks:^(NSArray *dataTasks, NSArray *uploadTasks, NSArray *downloadTasks) { + NSLog(@"uploadTasks: %@", uploadTasks); + }]; + + + if (!self.api.apiURL.length) { + + [self showAlertViewWithTitle:NSLocalizedString(@"app_never_launched_title", nil) + message:NSLocalizedString(@"app_never_launched_message", nil) + actionWithTitle:NSLocalizedString(@"close", nil) + handler:^(UIAlertAction *action) { + [self cancel]; + }]; + completionHandler(NO); + return; + } + + if (![self tokenExists]) { + [self showAlertViewWithTitle:NSLocalizedString(@"no_account_title", nil) + message:NSLocalizedString(@"no_account_message", nil) + actionWithTitle:NSLocalizedString(@"close", nil) + handler:^(UIAlertAction *action) { + [self cancel]; + }]; + completionHandler(NO); + } else { + [self pingWithCompletionHandler:^(NSError *error) { + if (error) { + if (error.code == 401) { + + [self showAlertViewWithTitle:NSLocalizedString(@"signin_again_title", nil) + message:NSLocalizedString(@"signin_again_message", nil) + actionWithTitle:NSLocalizedString(@"close", nil) + handler:^(UIAlertAction *action) { + [self cancel]; + }]; + } else { + [self showAlertViewWithTitle:NSLocalizedString(@"server_connection_error_title", nil) + message:NSLocalizedString(@"server_connection_error_message", nil) + actionWithTitle:NSLocalizedString(@"close", nil) + handler:^(UIAlertAction *action) { + [self cancel]; + }]; + } + completionHandler(NO); + } else { + completionHandler(YES); + } + }]; + } +} + +- (void)pingWithCompletionHandler:(void (^)(NSError *))completionHandler { + [self.api ping:^(id data, NSURLResponse *response, NSError *error) { + NSLog(@"pingError: %@", error); + completionHandler(error); + }]; +} + +- (void)send { + + NSMutableIndexSet *imageErrorIndexes = [NSMutableIndexSet indexSet]; + for (NSUInteger i = 0; i < self.imageErrors.count; i++) { + NSError *error = self.imageErrors[i]; + if ([error isKindOfClass:[NSError class]]) { + [imageErrorIndexes addIndex:i]; + } + } + + NSMutableArray *mutableImageUrls = [NSMutableArray arrayWithArray:self.imageUrls]; + NSMutableArray *mutableCaptions = [NSMutableArray arrayWithArray:self.captions]; + [mutableImageUrls removeObjectsAtIndexes:imageErrorIndexes]; + [mutableCaptions removeObjectsAtIndexes:imageErrorIndexes]; + + if (mutableImageUrls.count == 0) { + NSError *error = [NSError errorWithDomain:[[NSBundle mainBundle] bundleIdentifier] + code:0 + userInfo:@{ + NSLocalizedDescriptionKey: NSLocalizedString(@"upload_error_no_files_selected", nil) + }]; + [self handleUploadError:error]; + return; + } + + + //process image before upload + //if user choose optimize photo size + if( [self isOptimizeResolution ]){ + //optimize photo size + + dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{ + SDImageCache *imageCache = [SDImageCache sharedImageCache]; + //store images to /tmp + NSString *defaultCachePath = NSTemporaryDirectory(); + + //nix opt. size + float optimizedDimension = 1820.0f; + NSNumber *maxWidth = [NSNumber numberWithFloat:optimizedDimension]; + + + for (NSUInteger i = 0; i < mutableImageUrls.count; i++) { + @autoreleasepool { + NSURL *imageUrl = mutableImageUrls[i]; + CGImageSourceRef imageSource = CGImageSourceCreateWithURL((CFURLRef)imageUrl, nil); + + // load the image at the desired size + NSDictionary* options = @{ + (id)kCGImageSourceShouldAllowFloat: (id)kCFBooleanTrue, + (id)kCGImageSourceCreateThumbnailWithTransform: (id)kCFBooleanTrue, + (id)kCGImageSourceCreateThumbnailFromImageAlways: (id)kCFBooleanTrue, + (id)kCGImageSourceThumbnailMaxPixelSize: maxWidth + }; + + CGImageRef imageRef = CGImageSourceCreateThumbnailAtIndex(imageSource, 0, (__bridge CFDictionaryRef)options); + + //80% jpg quality + NSData * data = UIImageJPEGRepresentation([UIImage imageWithCGImage:imageRef], 0.8f); + + //retrieve cache path from Table view SDImageCache + NSURL* cachePathURL = [[NSURL alloc] initWithString:[imageCache cachePathForKey:[imageUrl absoluteString]]] ; + NSURL* newPathURL = [[NSURL alloc] initWithString: + [NSString stringWithFormat:@"%@/%@.JPG",defaultCachePath, [cachePathURL lastPathComponent]]]; + + NSDictionary *metaoptions = @{(NSString *)kCGImageSourceShouldCache : [NSNumber numberWithBool:NO]}; + CFDictionaryRef imageProperties = CGImageSourceCopyPropertiesAtIndex(imageSource, 0, (__bridge CFDictionaryRef)metaoptions); + if (imageProperties) { + NSDictionary *metadata = (__bridge NSDictionary *)imageProperties; + NSMutableDictionary *mutableMetadata = [NSMutableDictionary dictionaryWithDictionary:metadata]; + [mutableMetadata setValue:[NSNumber numberWithInt:1] forKey:@"Orientation"]; + [self writeData: [self writeMetadataIntoImageData:data metadata:mutableMetadata ] toPath: [newPathURL absoluteString]]; + + } + else{ + //wirte to file + [self writeData: data toPath: [newPathURL absoluteString]]; + } + //replace imageURLs object + [mutableImageUrls replaceObjectAtIndex:i withObject:[newPathURL absoluteString] ]; + } + } + + [self.uploadHandler uploadWithImageUrls:[mutableImageUrls copy] + captions:[mutableCaptions copy] + playlists:self.playlistIds + friends:self.friendUsernames + camera:NO]; + }); + + } + + else{ + [mutableImageUrls enumerateObjectsUsingBlock:^(NSURL* url, NSUInteger idx, BOOL * _Nonnull stop) { + [mutableImageUrls replaceObjectAtIndex:idx withObject:[url absoluteString]]; + }]; + [self.uploadHandler uploadWithImageUrls:[mutableImageUrls copy] + captions:[mutableCaptions copy] + playlists:self.playlistIds + friends:self.friendUsernames + camera:NO]; + } +} + + +- (void)cancel { + dispatch_async(dispatch_get_main_queue(), ^{ + [self dismissViewControllerAnimated:YES completion:^{ + NSDictionary *userInfo = @{ + NSLocalizedDescriptionKey: NSLocalizedString(@"Operation was cancelled.", nil), + NSLocalizedFailureReasonErrorKey: NSLocalizedString(@"Operation was cancelled.", nil), + NSLocalizedRecoverySuggestionErrorKey: NSLocalizedString(@"Operation was cancelled.", nil) + }; + NSError *error = [NSError errorWithDomain:NSURLErrorDomain + code:-57 + userInfo:userInfo]; + [self.extensionContext cancelRequestWithError:error]; + }]; + }); +} + +#pragma mark - Private +- (BOOL)tokenExists { + return [[self.api getAccessToken] length]; +} + +- (void)handleUploadError:(NSError *)error { + if (error) { + UINavigationController *navigationController = (UINavigationController *)self.presentedViewController; + ReceiverTableViewController *receiverTableVC = (ReceiverTableViewController *)navigationController.topViewController; + if ([receiverTableVC isKindOfClass:[ReceiverTableViewController class]]) { + [receiverTableVC hideActivityIndicator]; + receiverTableVC.navigationItem.rightBarButtonItem.enabled = YES; + } + + NSString *errorMessage = [error localizedDescription]; + switch (error.code) { + case kNixIoFileTooLargeError: + errorMessage = NSLocalizedString(@"upload_error_file_too_large", nil); + break; + } + [self showAlertViewWithTitle:NSLocalizedString(@"upload_error_title", nil) + message:errorMessage + actionWithTitle:NSLocalizedString(@"close", nil) + handler:^(UIAlertAction *action) { + [self cancel]; + }]; + } + + //delete cache image + [self deleteCache]; + +} + +-(BOOL) isOptimizeResolution { + NSUserDefaults *preferences = [[NSUserDefaults alloc] initWithSuiteName:@"group.com.creedon.Nixplay"] ; + + NSString *optimizeResolutionKey = @"nixSettings.settings.resolution"; + + if ([preferences objectForKey:optimizeResolutionKey] == nil) + { + NSLog(@"%@ not exist",optimizeResolutionKey); + return false; + } + else + { + // Get current level + const Boolean optimizeResolution = [preferences boolForKey:optimizeResolutionKey]; + + NSLog(@"currentLevel %i",optimizeResolution); + return optimizeResolution; + + } + return false; +} + +- (BOOL)writeData:(NSData*) data toPath:(NSString *)path +{ + NSError* errorWrite = nil; + + BOOL write = [data writeToFile:path atomically:YES]; + if(errorWrite != NULL){ + NSLog(@"Failed to write to '%@': %@", path , [errorWrite localizedDescription]); + } + return write; +} + +-(void)deleteCache{ + NSArray* tmpDirectory = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:NSTemporaryDirectory() error:NULL]; + for (NSString *file in tmpDirectory) { + [[NSFileManager defaultManager] removeItemAtPath:[NSString stringWithFormat:@"%@%@", NSTemporaryDirectory(), file] error:NULL]; + } +} + + +//http://stackoverflow.com/questions/9006759/how-to-write-exif-metadata-to-an-image-not-the-camera-roll-just-a-uiimage-or-j +-(NSData *)writeMetadataIntoImageData:(NSData *)imageData metadata:(NSMutableDictionary *)metadata { + // create an imagesourceref + CGImageSourceRef source = CGImageSourceCreateWithData((__bridge CFDataRef) imageData, NULL); + + // this is the type of image (e.g., public.jpeg) + CFStringRef UTI = CGImageSourceGetType(source); + + // create a new data object and write the new image into it + NSMutableData *dest_data = [NSMutableData data]; + CGImageDestinationRef destination = CGImageDestinationCreateWithData((__bridge CFMutableDataRef)dest_data, UTI, 1, NULL); + if (!destination) { + NSLog(@"Error: Could not create image destination"); + } + // add the image contained in the image source to the destination, overidding the old metadata with our modified metadata + CGImageDestinationAddImageFromSource(destination, source, 0, (__bridge CFDictionaryRef) metadata); + BOOL success = NO; + success = CGImageDestinationFinalize(destination); + if (!success) { + NSLog(@"Error: Could not create data from image destination"); + } + CFRelease(destination); + CFRelease(source); + return dest_data; +} + +#pragma mark - NixUploadDelegate +- (void)didStartUploadWithTasks:(NSArray *)tasks { + [self dismissViewControllerAnimated:YES completion:^{ + [self.extensionContext completeRequestReturningItems:@[] + completionHandler:nil]; + }]; +} + +- (void)didUploadImageAtIndex:(NSUInteger)index error:(NSError *)error { + [self handleUploadError:error]; +} + +- (void)didFinishUploadingWithError:(NSError *)error { + [self handleUploadError:error]; + +} + +-(void) showAlertViewWithTitle:(NSString*)title message:(NSString*)message actionWithTitle:actiontitle handler:(void (^ __nullable)(UIAlertAction *action))handler{ + UIAlertController* alert = [UIAlertController alertControllerWithTitle:title + message:message + preferredStyle:UIAlertControllerStyleAlert]; + + UIAlertAction* defaultAction = [UIAlertAction actionWithTitle:NSLocalizedString(@"close", nil) style:UIAlertActionStyleDefault + handler:^(UIAlertAction * action) { + [self cancel]; + }]; + [alert addAction:defaultAction]; + + [self.svc presentViewController:alert animated:YES completion:nil]; + +} + +@end diff --git a/ioneapps-maagapp-ee31119a522d/ios/NixShareExtension/Classes/Controllers/ImageCaptionViewController.h b/ioneapps-maagapp-ee31119a522d/ios/NixShareExtension/Classes/Controllers/ImageCaptionViewController.h new file mode 100644 index 0000000..b14fd18 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/ios/NixShareExtension/Classes/Controllers/ImageCaptionViewController.h @@ -0,0 +1,32 @@ +// +// ShareViewController.h +// PhotoShareExtension +// +// Created by Russell on 28/4/15. +// +// + +#import +#import +#import + +#import "ReceiverTableViewController.h" +#import "ContainerViewController.h" + +FOUNDATION_EXPORT NSString *const kNixAppUrlScheme; + +FOUNDATION_EXPORT NSString *const kNixAppUrlActionPhotoShare; +typedef NSString *kNixAppUrlAction; + +FOUNDATION_EXPORT NSString *const kNixAppUrlQueryKeyImageUrl; +FOUNDATION_EXPORT NSString *const kNixAppUrlQueryKeyCaption; +FOUNDATION_EXPORT NSString *const kNixAppUrlQueryKeyFrameId; +typedef NSString *kNixAppUrlQueryKey; + +FOUNDATION_EXPORT NSUInteger const kNixCaptionMaxLength; +FOUNDATION_EXPORT NSUInteger const kNixInputFieldCells; + +@interface ImageCaptionViewController : UIViewController +@property (nonatomic, strong) ContainerViewController *containerViewController; +- (IBAction)cancel:(id)sender; +@end diff --git a/ioneapps-maagapp-ee31119a522d/ios/NixShareExtension/Classes/Controllers/ImageCaptionViewController.m b/ioneapps-maagapp-ee31119a522d/ios/NixShareExtension/Classes/Controllers/ImageCaptionViewController.m new file mode 100644 index 0000000..a73ad80 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/ios/NixShareExtension/Classes/Controllers/ImageCaptionViewController.m @@ -0,0 +1,399 @@ +// +// ShareViewController.m +// PhotoShareExtension +// +// Created by Russell on 27/4/15. +// +// + +#import "ImageCaptionViewController.h" +#import +#import + +NSString *const kNixAppUrlScheme = @"nixplay"; + +NSString *const kNixAppUrlActionPhotoShare = @"photo_share"; + +NSString *const kNixAppUrlQueryKeyImageUrl = @"image_url"; +NSString *const kNixAppUrlQueryKeyCaption = @"caption"; +NSString *const kNixAppUrlQueryKeyFrameId = @"frame_id"; + +NSUInteger const kNixCaptionMaxLength = 160; +NSUInteger const kNixInputFieldCells = 0; + +@interface ImageCaptionViewController () +@property (nonatomic, strong) NSMutableArray *imageErrors; +@property (nonatomic, strong) NSArray *imageUrls; +@property (nonatomic, strong) NSMutableArray *captions; +@property (nonatomic, strong) NSNumber *selectedFrameId; +@property (nonatomic, strong) NSString *selectedFrameName; + + +@property (nonatomic, strong) IBOutlet UITableView *tableView; + +@property (nonatomic, strong) NSIndexPath *activeCellIndexPath; +@property (nonatomic, assign) BOOL keyboardShown; +@property (nonatomic, assign) CGFloat keyboardOverlap; + +- (void)loadExtensionItems; +- (void)validateImages; +- (void)loadImagesIntoCache; +@end + +@interface FrameTableViewCell : UITableViewCell +@end +@interface ImageCaptionTableViewCell : UITableViewCell +@property (nonatomic, strong) NSError *error; +@property (nonatomic, strong) IBOutlet UIImageView *thumbnailView; +//@property (nonatomic, strong) IBOutlet UITextView *textView; +@property (nonatomic, strong) IBOutlet UITextView *textView; +@property (nonatomic, strong) IBOutlet UILabel *errorLabel; +@property (nonatomic, strong) IBOutlet UIActivityIndicatorView *activityIndicatorView; +@end + +@implementation ImageCaptionViewController + +- (ContainerViewController*)containerViewController { + if (_containerViewController == nil) { + _containerViewController = [[ContainerViewController alloc] init]; + } + return _containerViewController; +} + +#pragma mark - IB +- (IBAction)cancel:(id)sender { + [self.containerViewController cancel]; +} + +#pragma mark - UIViewController +- (void)loadView { + [super loadView]; + [self loadExtensionItems]; +} + +- (void)viewWillAppear:(BOOL)animated { + [super viewWillAppear:animated]; + self.navigationItem.rightBarButtonItem.enabled = YES; + + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(appWillBecomeActive:) name:UIApplicationDidBecomeActiveNotification object:nil]; + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(appWillResignActive:) name:UIApplicationWillResignActiveNotification object:nil]; + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(appWillTerminate:) name:UIApplicationWillTerminateNotification object:nil]; + + [self verifyUser]; +} + +-(void)appWillBecomeActive:(NSNotification*)note { + + NSLog(@"appWillBecomeActive: %@", note); + // re-validate again if the user is active logged-in + [self verifyUser]; + +} + +-(void)appWillResignActive:(NSNotification*)note { + + NSLog(@"appWillResignActive: %@", note); + +} + +-(void)appWillTerminate:(NSNotification*)note { + + NSLog(@"appWillTerminate: %@", note); + [[NSNotificationCenter defaultCenter] removeObserver:self name:UIApplicationWillResignActiveNotification object:nil]; + [[NSNotificationCenter defaultCenter] removeObserver:self name:UIApplicationWillTerminateNotification object:nil]; + +} + +- (void)viewDidAppear:(BOOL)animated { + [super viewDidAppear:animated]; + /* + * This works around a quirk on iOS version < 8.3 where the contents of the table do not load (after the VC has been + * loaded once) on subsequent loads until the user scrolls the tableview. + */ + [self.tableView reloadData]; + [self loadImagesIntoCache]; + +// [self.containerViewController verifyServiceAvailableWithCompletionHandler:^(BOOL success) { +// dispatch_async(dispatch_get_main_queue(), ^{ +// self.navigationItem.rightBarButtonItem.enabled = success; +// }); +// }]; // must be in viewWillAppear (doesn't work in viewDidAppear) +} + +- (void)viewWillDisappear:(BOOL)animated { + [super viewWillDisappear:animated]; +} + +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + if ([segue.identifier isEqualToString:@"pushToPlaylistsTableView"]) { + [self.view endEditing:YES]; + + ReceiverTableViewController *playlistTableVC = (ReceiverTableViewController *)segue.destinationViewController; + playlistTableVC.containerViewController = self.containerViewController; + self.containerViewController.imageErrors = [self.imageErrors copy]; + self.containerViewController.imageUrls = [self.imageUrls copy]; + self.containerViewController.captions = [self.captions copy]; + } +} + +#pragma mark - UITextViewDelegate +- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text { + + if([text isEqualToString:@"\n"]) + { + [textView resignFirstResponder]; + return NO; + } + if ([text isEqualToString:@""]) + return YES; + return textView.text.length < kNixCaptionMaxLength; +} + +- (void)textViewDidEndEditing:(UITextView *)textView { + NSUInteger index = textView.tag; + self.captions[index] = textView.text; + self.activeCellIndexPath = nil; +} + +- (void)textViewDidBeginEditing:(UITextView *)textView { + self.activeCellIndexPath = [NSIndexPath indexPathForRow:textView.tag inSection:0]; +} + +#pragma mark - UITableViewDataSource +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { + return [self.imageUrls count]; +} + +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { + UITableViewCell *cell = nil; + NSUInteger imageIndex = indexPath.row; + cell = [tableView dequeueReusableCellWithIdentifier:@"ImageCaptionCell" + forIndexPath:indexPath]; + cell.selectionStyle = UITableViewCellSelectionStyleNone; + + NSURL *imageUrl = self.imageUrls[indexPath.row]; + ImageCaptionTableViewCell *imageCaptionCell = (ImageCaptionTableViewCell *)cell; + imageCaptionCell.thumbnailView.contentMode = UIViewContentModeScaleAspectFit; + imageCaptionCell.thumbnailView.image = [[SDImageCache sharedImageCache] + imageFromMemoryCacheForKey:[imageUrl absoluteString]]; + if (imageCaptionCell.thumbnailView.image) { + [imageCaptionCell.activityIndicatorView stopAnimating]; + } + imageCaptionCell.textView.tag = imageIndex; + imageCaptionCell.textView.delegate = self; + + NSError *imageError; + if (imageIndex < self.imageErrors.count) { + imageError = self.imageErrors[imageIndex]; + } + + imageCaptionCell.errorLabel.hidden = YES; + imageCaptionCell.textView.hidden = YES; + if (![imageError isKindOfClass:[NSNull class]]) { + imageCaptionCell.errorLabel.hidden = NO; + imageCaptionCell.errorLabel.text = [imageError localizedDescription]; + } else { + imageCaptionCell.textView.hidden = NO; + imageCaptionCell.textView.layer.borderWidth = 0.5f; + imageCaptionCell.textView.layer.borderColor = [[UIColor lightGrayColor] CGColor]; + imageCaptionCell.textView.layer.cornerRadius = 2.0f; + imageCaptionCell.textView.textContainer.lineBreakMode = NSLineBreakByWordWrapping; + } + + NSString *caption = [self.captions objectAtIndex:imageIndex]; + if ([caption isKindOfClass:[NSString class]]) + imageCaptionCell.textView.text = caption; + else + imageCaptionCell.textView.text = @""; + + return cell; +} + +#pragma mark - UITableViewDelegate + +- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(nonnull NSIndexPath *)indexPath{ +// @try{ +// UIImage *image = [[SDImageCache sharedImageCache] +// imageFromMemoryCacheForKey:[self.imageUrls[indexPath.row] absoluteString]]; +// CGFloat height = image.size.height > image.size.width ? image.size.height : 256; +// return height > 0 ? height : 256; +// } +// @catch(NSException * exception){ +// NSLog(@"estimatedHeightForRowAtIndexPath Exception %@",exception); +// } + return 300;// UITableViewAutomaticDimension; +} +#pragma mark - Private +#pragma mark App flow +- (void)loadExtensionItems { + NSExtensionItem *extensionItem = self.containerViewController.extensionContext.inputItems.firstObject; + NSArray *inputItems = extensionItem.attachments; + NSMutableArray *mutableImageUrls = [[NSMutableArray alloc] init]; + + dispatch_group_t group = dispatch_group_create(); + + // Load images from selection + [inputItems enumerateObjectsUsingBlock:^(NSItemProvider *itemProvider, NSUInteger idx, BOOL *stop) { + dispatch_group_enter(group); + if ([itemProvider hasItemConformingToTypeIdentifier:(NSString *)kUTTypeImage]) { + [itemProvider loadItemForTypeIdentifier:(NSString *)kUTTypeImage + options:nil + completionHandler: ^(NSURL *imageUrl, NSError *error) { + [mutableImageUrls addObject:imageUrl]; + dispatch_group_leave(group); + }]; + } else { + dispatch_group_leave(group); + } + }]; + + dispatch_group_notify(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{ + self.imageUrls = [NSArray arrayWithArray:mutableImageUrls]; + + NSUInteger imagesCount = [self.imageUrls count]; + self.imageErrors = [NSMutableArray arrayWithCapacity:imagesCount]; + self.captions = [[NSMutableArray alloc] initWithCapacity:imagesCount]; + for (NSUInteger i = 0; i < imagesCount; i++) { + [self.captions addObject:[NSNull null]]; + } + dispatch_async(dispatch_get_main_queue(), ^{ + [self validateImages]; + [self.tableView reloadData]; + }); + }); +} +-(BOOL) isOptimizeResolution { + NSUserDefaults *preferences = [[NSUserDefaults alloc] initWithSuiteName:@"group.com.creedon.Nixplay"] ; + + NSString *optimizeResolutionKey = @"nixSettings.settings.resolution"; + + if ([preferences objectForKey:optimizeResolutionKey] == nil) + { + NSLog(@"%@ not exist",optimizeResolutionKey); + return false; + } + else + { + // Get current level + const Boolean optimizeResolution = [preferences boolForKey:optimizeResolutionKey]; + + NSLog(@"currentLevel %i",optimizeResolution); + return optimizeResolution; + + } + return false; +} +- (void)validateImages { + NSFileManager *fm = [NSFileManager defaultManager]; + NSString *bundleIdentifier = [[NSBundle mainBundle] bundleIdentifier]; + for (NSUInteger i = 0; i < self.imageUrls.count; i++) { + @autoreleasepool { + NSURL *imageUrl = self.imageUrls[i]; + NSDictionary *fileAttrs = [fm attributesOfItemAtPath:[imageUrl path] error:nil]; + NSNumber *fileSizeLimit = self.containerViewController.uploadHandler.fileSizeLimit; + NSNumber *fileSize = [fileAttrs objectForKey:NSFileSize]; + + NSError *fileError; + //https://www.wrike.com/open.htm?id=190326881 + //allow proess photo when isOptimizeResolution + if(![self isOptimizeResolution]){ + if ([fileSize longLongValue] > [fileSizeLimit longLongValue]) { + fileError = [NSError errorWithDomain:bundleIdentifier + code:kNixIoFileTooLargeError + userInfo:@{ + NSLocalizedDescriptionKey: NSLocalizedString(@"selection_error_file_too_large", nil) + }]; + } + } + + if (fileError) { + [self.imageErrors addObject:fileError]; + } else { + [self.imageErrors addObject:[NSNull null]]; + } + } + } +} +- (void)loadImagesIntoCache { + dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{ + SDImageCache *imageCache = [SDImageCache sharedImageCache]; + CGRect screenBounds = [[UIScreen mainScreen] bounds]; + CGFloat screenScale = [[UIScreen mainScreen] scale]; + NSNumber *maxWidth = [NSNumber numberWithFloat:screenBounds.size.width * screenScale * 0.75]; + + // Create thumbnail and save to cache + for (NSUInteger i = 0; i < self.imageUrls.count; i++) { + @autoreleasepool { + NSURL *imageUrl = self.imageUrls[i]; + if (![imageCache imageFromMemoryCacheForKey:[imageUrl absoluteString]]) { + CGImageSourceRef imageSource = CGImageSourceCreateWithURL((CFURLRef)imageUrl, nil); + NSDictionary *options = @{ + (id)kCGImageSourceCreateThumbnailWithTransform: (id)kCFBooleanTrue, + (id)kCGImageSourceCreateThumbnailFromImageIfAbsent: (id)kCFBooleanTrue, + (id)kCGImageSourceCreateThumbnailFromImageAlways: (id)kCFBooleanTrue, + (id)kCGImageSourceThumbnailMaxPixelSize: (id)maxWidth + }; + CGImageRef thumbnailRef = CGImageSourceCreateThumbnailAtIndex(imageSource, + 0, + (__bridge CFDictionaryRef)options); + UIImage *scaledImage = [UIImage imageWithCGImage:thumbnailRef]; + [imageCache storeImage:scaledImage forKey:[imageUrl absoluteString] completion:^{ + + }]; + } + } + } + + // Update visible cells with images + dispatch_async(dispatch_get_main_queue(), ^{ + NSArray *visibleIndexPaths = [self.tableView indexPathsForVisibleRows]; + + for (NSIndexPath *visibleIndexPath in visibleIndexPaths) { + @autoreleasepool { + NSUInteger i = visibleIndexPath.row; + NSURL *imageUrl = self.imageUrls[i]; + + // Set up NSError to insert into cell + dispatch_async(dispatch_get_main_queue(), ^{ + ImageCaptionTableViewCell *cell = (ImageCaptionTableViewCell *)[self.tableView + cellForRowAtIndexPath:visibleIndexPath]; + if (!cell.thumbnailView.image) { + cell.thumbnailView.alpha = 0.f; + cell.thumbnailView.image = [imageCache imageFromMemoryCacheForKey:[imageUrl absoluteString]]; + [UIView animateWithDuration:0.35f animations:^{ + cell.thumbnailView.alpha = 1.f; + }]; + + [self.tableView beginUpdates]; + [self.tableView reloadRowsAtIndexPaths:@[visibleIndexPath] + withRowAnimation:UITableViewRowAnimationFade]; + [self.tableView endUpdates]; + } + [cell.activityIndicatorView stopAnimating]; + }); + } + } + }); + }); +} + +#pragma mark - User +- (void) verifyUser { + + [self.containerViewController verifyServiceAvailableWithCompletionHandler:^(BOOL success) { + dispatch_async(dispatch_get_main_queue(), ^{ + self.navigationItem.rightBarButtonItem.enabled = success; + }); + }]; // must be in viewWillAppear (doesn't work in viewDidAppear) + +} + +@end + +#pragma mark - + +@implementation FrameTableViewCell +@end +@implementation ImageCaptionTableViewCell +@end + diff --git a/ioneapps-maagapp-ee31119a522d/ios/NixShareExtension/Classes/Controllers/ReceiverTableViewController.h b/ioneapps-maagapp-ee31119a522d/ios/NixShareExtension/Classes/Controllers/ReceiverTableViewController.h new file mode 100644 index 0000000..8bca604 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/ios/NixShareExtension/Classes/Controllers/ReceiverTableViewController.h @@ -0,0 +1,16 @@ +// +// SLComposeTableViewController.h +// PhotoShareExtension +// +// Created by Russell on 8/5/15. +// +// + +#import +#import "ContainerViewController.h" + +@interface ReceiverTableViewController : UITableViewController +@property (nonatomic, strong) ContainerViewController *containerViewController; +- (void)showActivityIndicator; +- (void)hideActivityIndicator; +@end diff --git a/ioneapps-maagapp-ee31119a522d/ios/NixShareExtension/Classes/Controllers/ReceiverTableViewController.m b/ioneapps-maagapp-ee31119a522d/ios/NixShareExtension/Classes/Controllers/ReceiverTableViewController.m new file mode 100644 index 0000000..faeed55 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/ios/NixShareExtension/Classes/Controllers/ReceiverTableViewController.m @@ -0,0 +1,556 @@ +// +// SLComposeTableViewController.m +// PhotoShareExtension +// +// Created by Russell on 8/5/15. +// +// + +#import "ReceiverTableViewController.h" + +typedef NS_ENUM(NSUInteger, NixTableViewSection) { + kPlaylistHeader, + kPlaylist, + kFriendHeader, + kFriend +}; + +@interface ReceiverTableViewController () +@property (nonatomic, strong) NSArray *playlistValues; +@property (nonatomic, strong) NSArray *friendValues; +@property (nonatomic, strong) NSMutableArray *selectedPlaylists; +@property (nonatomic, strong) NSMutableArray *selectedFriends; +- (IBAction)send:(id)sender; +- (void)preparePlaylistValues; +- (void)prepareFriendValues; +- (void)reloadData; + +- (NSString *)headerTitleWithPlaylistCounts:(NSUInteger)playlists andFriendCounts:(NSUInteger)friends; +- (void)updateHeaderTitleWithCounts; + +- (void)loadAllData:(void (^)(NSError *))completionHandler; +- (void)loadPlaylistsWithCompletionHandler:(void (^)(NSError *))completionHandler; +- (void)loadFriendsWithCompletionHandler:(void (^)(NSError *))completionHandler; +@end + +@implementation ReceiverTableViewController + +#pragma mark - IB +- (IBAction)send:(id)sender { + self.selectedPlaylists = [[NSMutableArray alloc] + initWithCapacity:self.containerViewController.playlistData.count]; + self.selectedFriends = [[NSMutableArray alloc] + initWithCapacity:self.containerViewController.friendData.count]; + + NSArray *selectedIndexPaths = [self.tableView indexPathsForSelectedRows]; + [selectedIndexPaths enumerateObjectsUsingBlock:^(NSIndexPath *indexPath, NSUInteger idx, BOOL *stop) { + @autoreleasepool { + switch (indexPath.section) { + case kPlaylist: + { + NSString *playlistId = self.containerViewController.playlistData[indexPath.row][@"id"]; + [self.selectedPlaylists addObject:playlistId]; + break; + } + case kFriend: + { + NSString *friendUsername = self.containerViewController.friendData[indexPath.row][@"username"]; + [self.selectedFriends addObject:friendUsername]; + break; + } + default: + break; + } + } + }]; + + self.containerViewController.playlistIds = [self.selectedPlaylists copy]; + self.containerViewController.friendUsernames = [self.selectedFriends copy]; + + [self showActivityIndicator]; + self.navigationItem.rightBarButtonItem.enabled = NO; + self.navigationItem.hidesBackButton = YES; + self.navigationController.interactivePopGestureRecognizer.enabled = NO; + + [self.containerViewController send]; +} + +#pragma mark - Navigation +- (void)viewDidLoad { + [super viewDidLoad]; + + // Uncomment the following line to preserve selection between presentations. + // self.clearsSelectionOnViewWillAppear = NO; + + // Uncomment the following line to display an Edit button in the navigation bar for this view controller. + // self.navigationItem.rightBarButtonItem = self.editButtonItem; + + self.tableView.editing = YES; + + self.refreshControl = [[UIRefreshControl alloc] init]; + [self.refreshControl addTarget:self action:@selector(reloadData) forControlEvents:UIControlEventValueChanged]; + + if (!self.containerViewController.playlistData || !self.containerViewController.friendData) { + [self showActivityIndicator]; + [self loadAllData:^(NSError *error) { + [self hideActivityIndicator]; + if (error) { + UIAlertController *alertController = + [UIAlertController alertControllerWithTitle:NSLocalizedString(@"signin_again_title", nil) + message:NSLocalizedString(@"signin_again_message", nil) + preferredStyle:UIAlertControllerStyleAlert]; + [alertController addAction:[UIAlertAction actionWithTitle:NSLocalizedString(@"close", nil) style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { + [self.containerViewController.extensionContext cancelRequestWithError:error]; + }]]; + [self presentViewController:alertController animated:YES completion:nil]; + } else { + if (self.playlistValues.count == 0 && self.friendValues.count == 0) { + NSError *err; + UIAlertController *alertController = + [UIAlertController alertControllerWithTitle:NSLocalizedString(@"no_receiver_title", nil) + message:NSLocalizedString(@"no_receiver_message", nil) + preferredStyle:UIAlertControllerStyleAlert]; + [alertController addAction:[UIAlertAction actionWithTitle:NSLocalizedString(@"close", nil) style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { + [self.containerViewController.extensionContext cancelRequestWithError:err]; + }]]; + [self presentViewController:alertController animated:YES completion:nil]; + } else { + [self.tableView reloadData]; + } + } + }]; + } +} + +- (void)viewWillAppear:(BOOL)animated { + [super viewWillAppear:animated]; + self.navigationItem.rightBarButtonItem.enabled = NO; + + NSArray *selectedReceiverIndexPaths = self.containerViewController.selectedReceiverIndexPaths; + + [self.containerViewController verifyServiceAvailableWithCompletionHandler:^(BOOL success) { + if ([selectedReceiverIndexPaths count]) { + self.navigationItem.rightBarButtonItem.enabled = YES; + } + }]; + + if (self.containerViewController.playlistData && self.containerViewController.friendData) { + [self preparePlaylistValues]; + [self prepareFriendValues]; + + [self.tableView reloadData]; + + if ([selectedReceiverIndexPaths count]) { + [selectedReceiverIndexPaths + enumerateObjectsUsingBlock:^(NSIndexPath *indexPath, NSUInteger idx, BOOL *stop) { + [self.tableView selectRowAtIndexPath:indexPath + animated:NO + scrollPosition:UITableViewScrollPositionNone]; + }]; + [self updateHeaderTitleWithCounts]; + } + } +} + +- (void)viewDidAppear:(BOOL)animated { + [super viewDidAppear:animated]; +} + +- (void)viewWillDisappear:(BOOL)animated { + [super viewWillDisappear:animated]; + self.friendValues = nil; + self.playlistValues = nil; + self.containerViewController.friendData = nil; + self.containerViewController.playlistData = nil; + self.containerViewController.selectedReceiverIndexPaths = nil; //[self.tableView indexPathsForSelectedRows]; +} + +- (void)didReceiveMemoryWarning { + [super didReceiveMemoryWarning]; + // Dispose of any resources that can be recreated. +} + +#pragma mark - Private +- (void)showActivityIndicator { + UIActivityIndicatorView *activityIndicator = [[UIActivityIndicatorView alloc] + initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray]; + self.navigationItem.titleView = activityIndicator; + [activityIndicator startAnimating]; +} + +- (void)hideActivityIndicator { + UIActivityIndicatorView *activityIndicator = (UIActivityIndicatorView *)self.navigationItem.titleView; + if ([activityIndicator isKindOfClass:[UIActivityIndicatorView class]]) { + [activityIndicator stopAnimating]; + } + self.navigationItem.titleView = nil; +} + +- (void)preparePlaylistValues { + NSMutableArray *playlistValues = [NSMutableArray arrayWithCapacity:self.containerViewController.playlistData.count]; + for (NSDictionary *record in self.containerViewController.playlistData) { + @autoreleasepool { + NSString *name = record[@"name"]; + [playlistValues addObject:name]; + } + } + self.playlistValues = playlistValues; +} + +- (void)prepareFriendValues { + NSMutableArray *friendValues = [NSMutableArray arrayWithCapacity:self.containerViewController.friendData.count]; + for (NSDictionary *record in self.containerViewController.friendData) { + @autoreleasepool { + NSString *name = record[@"fullName"]; + [friendValues addObject:name]; + } + } + self.friendValues = friendValues; +} + +- (void)reloadData { + NSArray *playlistData = [self.containerViewController.playlistData copy]; + NSArray *friendData = [self.containerViewController.friendData copy]; + NSMutableArray *selectedPlaylistIds = [[NSMutableArray alloc] initWithCapacity:playlistData.count]; + NSMutableArray *selectedFriendUsernames = [[NSMutableArray alloc] initWithCapacity:friendData.count]; + + [[self.tableView indexPathsForSelectedRows] + enumerateObjectsUsingBlock:^(NSIndexPath *indexPath, NSUInteger idx, BOOL *stop) { + switch (indexPath.section) { + case kPlaylist: + [selectedPlaylistIds addObject:playlistData[indexPath.row][@"id"]]; + break; + case kFriend: + [selectedFriendUsernames addObject:friendData[indexPath.row][@"username"]]; + break; + + default: + break; + } + }]; + + [self loadAllData:^(NSError *error) { + [self.refreshControl endRefreshing]; + + dispatch_async(dispatch_get_main_queue(), ^{ + NSArray *freshPlaylistData = [self.containerViewController.playlistData copy]; + NSArray *freshFriendData = [self.containerViewController.friendData copy]; + + [freshPlaylistData enumerateObjectsUsingBlock:^(NSDictionary *playlist, NSUInteger idx, BOOL *stop) { + @autoreleasepool { + if ([selectedPlaylistIds containsObject:playlist[@"id"]]) { + NSIndexPath *indexPath = [NSIndexPath indexPathForRow:idx inSection:kPlaylist]; + [self.tableView selectRowAtIndexPath:indexPath + animated:NO + scrollPosition:UITableViewScrollPositionNone]; + } + } + }]; + + [freshFriendData enumerateObjectsUsingBlock:^(NSDictionary *friend, NSUInteger idx, BOOL *stop) { + @autoreleasepool { + if ([selectedFriendUsernames containsObject:friend[@"username"]]) { + NSIndexPath *indexPath = [NSIndexPath indexPathForRow:idx inSection:kFriend]; + [self.tableView selectRowAtIndexPath:indexPath + animated:NO + scrollPosition:UITableViewScrollPositionNone]; + } + } + }]; + }); + }]; +} + +- (NSString *)headerTitleWithPlaylistCounts:(NSUInteger)playlists andFriendCounts:(NSUInteger)friends { + NSString *rawString; + if (playlists == 0) { + if (friends == 1) { + rawString = NSLocalizedString(@"navigation_header_n_selected_friend", nil); + } else { + rawString = NSLocalizedString(@"navigation_header_n_selected_friends", nil); + } + } + if (friends == 0) { + if (playlists == 1) { + rawString = NSLocalizedString(@"navigation_header_n_selected_playlist", nil); + } else { + rawString = NSLocalizedString(@"navigation_header_n_selected_playlists", nil); + } + } + if (0 < playlists && 0 < friends) { + rawString = NSLocalizedString(@"navigation_header_n_selected_receivers", nil); + } + if (playlists + friends == 0) { + return NSLocalizedString(@"navigation_header_select_receivers", nil); + } + return [NSString stringWithFormat:rawString, playlists + friends]; +} + +- (void)updateHeaderTitleWithCounts { + __block NSUInteger playlistCount = 0; + __block NSUInteger friendCount = 0; + [[self.tableView indexPathsForSelectedRows] + enumerateObjectsUsingBlock:^(NSIndexPath *indexPath, NSUInteger idx, BOOL *stop) { + switch (indexPath.section) { + case kPlaylist: + playlistCount++; + break; + + case kFriend: + friendCount++; + break; + } + }]; + NSString *title = [self headerTitleWithPlaylistCounts:playlistCount andFriendCounts:friendCount]; + self.navigationItem.title = title; +} + +#pragma mark Network +- (void)loadAllData:(void (^)(NSError *))completionHandler { + __block NSError *error = nil; + + dispatch_group_t dispatchGroup = dispatch_group_create(); + dispatch_group_enter(dispatchGroup); + + [self loadPlaylistsWithCompletionHandler:^(NSError *playlistsError) { + if (playlistsError) + error = playlistsError; + dispatch_group_leave(dispatchGroup); + }]; + + dispatch_group_enter(dispatchGroup); + [self loadFriendsWithCompletionHandler:^(NSError *friendsError) { + if (friendsError) + error = friendsError; + dispatch_group_leave(dispatchGroup); + }]; + + dispatch_group_notify(dispatchGroup, dispatch_get_main_queue(), ^{ + completionHandler(error); + }); +} + +- (void)loadPlaylistsWithCompletionHandler:(void (^)(NSError *))completionHandler { + [self.containerViewController.api playlists:^(id data, NSURLResponse *response, NSError *error) { + if (error || !data || [data isKindOfClass:[NSDictionary class]]) { + completionHandler(error); + return; + } + + if ([data isKindOfClass:[NSArray class]]) { + NSPredicate *predicateByTitle = [NSPredicate predicateWithFormat:@"SELF.type == %@", @"normal"]; + NSArray *playlists = [(NSArray*)data filteredArrayUsingPredicate:predicateByTitle]; + self.containerViewController.playlistData = playlists; + [self preparePlaylistValues]; + [self.tableView reloadData]; + } + + completionHandler(nil); + }]; +} + +- (void)loadFriendsWithCompletionHandler:(void (^)(NSError *))completionHandler { + [self.containerViewController.api friends:^(NSDictionary *data, NSURLResponse *response, NSError *error) { + if (error || data[@"error"]) { + completionHandler(error); + return; + } + NSString *predString = [NSString stringWithFormat:@"(status='%@')", @"success"]; + NSPredicate *pred = [NSPredicate predicateWithFormat:predString]; + NSArray *friendsArr = [data[@"friends"] filteredArrayUsingPredicate:pred]; + self.containerViewController.friendData = friendsArr; + [self prepareFriendValues]; + [self.tableView reloadData]; + completionHandler(nil); + }]; +} + +#pragma mark - Table view data source +- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { + // Return the number of sections. + return 4; +} + +- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section { + switch (section) { + case kPlaylistHeader: + return self.playlistValues.count ? NSLocalizedString(@"table_header_playlist", nil) : nil; + case kFriendHeader: + return self.friendValues.count ? NSLocalizedString(@"table_header_friend", nil) : nil; + default: + return nil; + } +} + +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { + // Return the number of rows in the section. + switch (section) { + case kPlaylist: + return self.playlistValues.count; + case kFriend: + return self.friendValues.count; + case kPlaylistHeader: + return self.playlistValues.count ? 1 : 0; + case kFriendHeader: + return self.friendValues.count ? 1 : 0; + default: + return 0; + } +} + +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { + static NSString *cellId = @"SLComposeTableViewControllerCell"; + UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellId]; + if (cell == nil) { + cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellId]; + } + + if ([[tableView indexPathsForSelectedRows] containsObject:indexPath]) { + [tableView selectRowAtIndexPath:indexPath animated:NO scrollPosition:UITableViewScrollPositionNone]; + } + + switch (indexPath.section) { + case kPlaylist: + cell.textLabel.text = self.playlistValues[indexPath.row]; + break; + case kFriend: + cell.textLabel.text = self.friendValues[indexPath.row]; + break; + case kPlaylistHeader: + cell.textLabel.text = NSLocalizedString(@"table_select_all_playlists", nil); + break; + case kFriendHeader: + cell.textLabel.text = NSLocalizedString(@"table_select_all_friends", nil); + break; + default: + break; + } + return cell; +} + +/* +// Override to support conditional editing of the table view. +- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath { + // Return NO if you do not want the specified item to be editable. + return YES; +} +*/ + +/* +// Override to support editing the table view. +- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath { + if (editingStyle == UITableViewCellEditingStyleDelete) { + // Delete the row from the data source + [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade]; + } else if (editingStyle == UITableViewCellEditingStyleInsert) { + // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view + } +} +*/ + +/* +// Override to support rearranging the table view. +- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath { +} +*/ + +#pragma mark - UITableViewDelegate +- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { + switch (indexPath.section) { + case kPlaylistHeader: + { + for (NSUInteger i = 0; i < [tableView numberOfRowsInSection:kPlaylist]; i++) { + NSIndexPath *playlistIndexPath = [NSIndexPath indexPathForRow:i inSection:kPlaylist]; + [tableView selectRowAtIndexPath:playlistIndexPath + animated:NO + scrollPosition:UITableViewScrollPositionNone]; + } + break; + } + + case kFriendHeader: + { + for (NSUInteger i = 0; i < [tableView numberOfRowsInSection:kFriend]; i++) { + NSIndexPath *friendIndexPath = [NSIndexPath indexPathForRow:i inSection:kFriend]; + [tableView selectRowAtIndexPath:friendIndexPath + animated:NO + scrollPosition:UITableViewScrollPositionNone]; + } + break; + } + + default: + break; + } + + self.navigationItem.rightBarButtonItem.enabled = YES; + [self updateHeaderTitleWithCounts]; +} + +- (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath { + switch (indexPath.section) { + case kPlaylistHeader: + { + for (NSUInteger i = 0; i < [tableView numberOfRowsInSection:kPlaylist]; i++) { + NSIndexPath *playlistIndexPath = [NSIndexPath indexPathForRow:i inSection:kPlaylist]; + [tableView deselectRowAtIndexPath:playlistIndexPath + animated:NO]; + } + break; + } + + case kFriendHeader: + { + for (NSUInteger i = 0; i < [tableView numberOfRowsInSection:kFriend]; i++) { + NSIndexPath *friendIndexPath = [NSIndexPath indexPathForRow:i inSection:kFriend]; + [tableView deselectRowAtIndexPath:friendIndexPath + animated:NO]; + } + break; + } + + case kPlaylist: + { + NSIndexPath *headerIndexPath = [NSIndexPath indexPathForRow:0 inSection:kPlaylistHeader]; + [tableView deselectRowAtIndexPath:headerIndexPath + animated:NO]; + break; + } + + case kFriend: + { + NSIndexPath *headerIndexPath = [NSIndexPath indexPathForRow:0 inSection:kFriendHeader]; + [tableView deselectRowAtIndexPath:headerIndexPath + animated:NO]; + break; + } + + default: + break; + } + + if (![tableView indexPathsForSelectedRows]) { + self.navigationItem.rightBarButtonItem.enabled = NO; + } + [self updateHeaderTitleWithCounts]; +} + +/* +// Override to support conditional rearranging of the table view. +- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath { + // Return NO if you do not want the item to be re-orderable. + return YES; +} +*/ + +/* +#pragma mark - Navigation + +// In a storyboard-based application, you will often want to do a little preparation before navigation +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + // Get the new view controller using [segue destinationViewController]. + // Pass the selected object to the new view controller. +} +*/ + +@end diff --git a/ioneapps-maagapp-ee31119a522d/ios/NixShareExtension/Info.plist b/ioneapps-maagapp-ee31119a522d/ios/NixShareExtension/Info.plist new file mode 100644 index 0000000..8123bfb --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/ios/NixShareExtension/Info.plist @@ -0,0 +1,108 @@ + + + + + BundleEntryFilename + index.js + BundleForced + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleDisplayName + $(PRODUCT_NAME) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + XPC! + CFBundleShortVersionString + $(MARKETING_VERSION) + CFBundleVersion + $(CURRENT_PROJECT_VERSION) + LSHasLocalizedDisplayName + + NSAppTransportSecurity + + NSAllowsArbitraryLoads + + NSExceptionDomains + + cdn.shopify.com + + NSThirdPartyExceptionAllowsInsecureHTTPLoads + + + nixplay-prod-original.s3-us-west-2.amazonaws.com + + NSExceptionRequiresForwardSecrecy + + + nixplay-prod-thumbnail.s3-us-west-2.amazonaws.com + + NSExceptionRequiresForwardSecrecy + + + nixplay-prod-upload.s3.amazonaws.com + + NSExceptionRequiresForwardSecrecy + + + nixplay-qa-original.s3-ap-northeast-1.amazonaws.com + + NSExceptionRequiresForwardSecrecy + + + nixplay-qa-thumbnail.s3-ap-northeast-1.amazonaws.com + + NSExceptionRequiresForwardSecrecy + + + nixplay-qa-upload.s3.amazonaws.com + + NSExceptionRequiresForwardSecrecy + + + nixplay-rnd-original.s3-ap-southeast-1.amazonaws.com + + NSExceptionRequiresForwardSecrecy + + + nixplay-rnd-thumbnail.s3-ap-southeast-1.amazonaws.com + + NSExceptionRequiresForwardSecrecy + + + nixplay-rnd-upload.s3.amazonaws.com + + NSExceptionRequiresForwardSecrecy + + + shop.nixplay.com + + NSThirdPartyExceptionAllowsInsecureHTTPLoads + + + + + NSExtension + + NSExtensionAttributes + + NSExtensionActivationRule + + NSExtensionActivationSupportsImageWithMaxCount + 10 + + + NSExtensionMainStoryboard + MainInterface + NSExtensionPointIdentifier + com.apple.share-services + + + diff --git a/ioneapps-maagapp-ee31119a522d/ios/NixShareExtension/NixShareExtension.alpha.entitlements b/ioneapps-maagapp-ee31119a522d/ios/NixShareExtension/NixShareExtension.alpha.entitlements new file mode 100644 index 0000000..9f96eb9 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/ios/NixShareExtension/NixShareExtension.alpha.entitlements @@ -0,0 +1,16 @@ + + + + + aps-environment + development + com.apple.security.application-groups + + group.com.creedon.Nixplay.alpha + + keychain-access-groups + + $(AppIdentifierPrefix)group.com.creedon.Nixplay.alpha + + + diff --git a/ioneapps-maagapp-ee31119a522d/ios/NixShareExtension/NixShareExtension.beta.entitlements b/ioneapps-maagapp-ee31119a522d/ios/NixShareExtension/NixShareExtension.beta.entitlements new file mode 100644 index 0000000..81833bb --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/ios/NixShareExtension/NixShareExtension.beta.entitlements @@ -0,0 +1,16 @@ + + + + + aps-environment + development + com.apple.security.application-groups + + group.com.creedon.Nixplay.beta + + keychain-access-groups + + $(AppIdentifierPrefix)group.com.creedon.Nixplay.beta + + + diff --git a/ioneapps-maagapp-ee31119a522d/ios/NixShareExtension/NixShareExtension.entitlements b/ioneapps-maagapp-ee31119a522d/ios/NixShareExtension/NixShareExtension.entitlements new file mode 100644 index 0000000..9fc8c92 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/ios/NixShareExtension/NixShareExtension.entitlements @@ -0,0 +1,16 @@ + + + + + aps-environment + production + com.apple.security.application-groups + + group.com.creedon.Nixplay + + keychain-access-groups + + $(AppIdentifierPrefix)group.com.creedon.Nixplay + + + diff --git a/ioneapps-maagapp-ee31119a522d/ios/NixShareExtension/NixShareExtension.m b/ioneapps-maagapp-ee31119a522d/ios/NixShareExtension/NixShareExtension.m new file mode 100644 index 0000000..04e09be --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/ios/NixShareExtension/NixShareExtension.m @@ -0,0 +1,48 @@ +// +// NixShareExtension.m +// NixShareExtension +// +// Created by Haroon Shahid on 30/4/2018. +// Copyright © 2018 Facebook. All rights reserved. +// + +#import +#import "ReactNativeShareExtension.h" +#import +#import +#import +#import +#import +#import +#import +//#import "ReactNativeShareExtension.h" + + +@interface NixShareExtension : ReactNativeShareExtension +@end + +@implementation NixShareExtension + +RCT_EXPORT_MODULE(); ++ (BOOL)requiresMainQueueSetup { + return YES; +} +- (UIView*) shareView { + NSURL *jsCodeLocation; + +#ifdef DEBUG + // jsCodeLocation = [NSURL URLWithString:@"http://localhost:8081/index.ios.bundle?platform=ios&dev=true"]; + jsCodeLocation = [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index" fallbackResource:nil]; +#else + jsCodeLocation = [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"]; +#endif + + RCTRootView *rootView = [[RCTRootView alloc] initWithBundleURL:jsCodeLocation + moduleName:@"NixShareExtension" + initialProperties:nil + launchOptions:nil]; + rootView.backgroundColor = nil; + return rootView; +} + +@end diff --git a/ioneapps-maagapp-ee31119a522d/ios/NixShareExtension/NixShareExtension.qa.entitlements b/ioneapps-maagapp-ee31119a522d/ios/NixShareExtension/NixShareExtension.qa.entitlements new file mode 100644 index 0000000..14a979c --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/ios/NixShareExtension/NixShareExtension.qa.entitlements @@ -0,0 +1,16 @@ + + + + + aps-environment + development + com.apple.security.application-groups + + group.com.creedon.Nixplay.qa + + keychain-access-groups + + $(AppIdentifierPrefix)group.com.creedon.Nixplay.qa + + + diff --git a/ioneapps-maagapp-ee31119a522d/ios/NixShareExtension/NixShareExtension.rnd.entitlements b/ioneapps-maagapp-ee31119a522d/ios/NixShareExtension/NixShareExtension.rnd.entitlements new file mode 100644 index 0000000..d29bd18 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/ios/NixShareExtension/NixShareExtension.rnd.entitlements @@ -0,0 +1,16 @@ + + + + + aps-environment + development + com.apple.security.application-groups + + group.com.creedon.Nixplay.rnd + + keychain-access-groups + + $(AppIdentifierPrefix)group.com.creedon.Nixplay.rnd + + + diff --git a/ioneapps-maagapp-ee31119a522d/ios/NixShareExtension/de.lproj/Localizable.strings b/ioneapps-maagapp-ee31119a522d/ios/NixShareExtension/de.lproj/Localizable.strings new file mode 100644 index 0000000..b3d6959 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/ios/NixShareExtension/de.lproj/Localizable.strings @@ -0,0 +1,50 @@ +/* + Localizable.strings + PhotoShareExtension + + Created by Russell on 19/5/15. + +*/ + +"send_to" = "Send To"; +"open_app" = "Open App"; +"close" = "Schließen"; +"none" = "None"; +"frame" = "Rahmen"; + +"navigation_header_n_selected_playlist" = "%tu Playlist ausgewählt"; +"navigation_header_n_selected_playlists" = "%tu Playlists ausgewählt"; +"navigation_header_n_selected_friend" = "%tu Freund ausgewählt"; +"navigation_header_n_selected_friends" = "%tu Freund ausgewählt"; +"navigation_header_n_selected_receivers" = "%tu Empfänger ausgewählt"; +"navigation_header_select_receivers" = "Empfänger ausgewählt"; + +"table_header_playlist" = "MEINE PLAYLISTS"; +"table_header_friend" = "MEINE FREUNDE"; + +"table_select_all_playlists" = "Alle Playlists auswählen"; +"table_select_all_friends" = "Alle Freunde auswählen"; + +"app_never_launched_title" = "Kein Nixplay-Konto"; +"app_never_launched_message" = "Please launch the Nixplay app for the first time to log in to your Nixplay account."; + +"no_account_title" = "Kein Nixplay-Konto"; +"no_account_message" = "Es wurde kein Nixplay-Konto konfiguriert. Sie können sich in der Nixplay-App in Ihrem Nixplay-Konto einloggen."; + +"signin_again_title" = "Error"; +"signin_again_message" = "Sie haben sich eine Weile nicht in Ihrem Nixplay-Konto eingeloggt. Bitte nutzen Sie die Nixplay-App, um sich wieder einzuloggen."; + +"no_receiver_title" = "Error"; +"no_receiver_message" = "Sie haben keine Freunde und keine Playlists in Ihrem Nixplay-Konto."; + +"upload_in_progress_title" = "Hochladen wird durchgeführt"; +"upload_in_progress_message" = "Ihre Fotos werden hochgeladen. Versuchen Sie es später noch einmal."; + +"server_connection_error_title" = "Keine Internetverbindung"; +"server_connection_error_message" = "Prüfen Sie Ihre Geräteverbindung und versuchen Sie es später noch einmal."; + +"upload_error_title" = "Error"; +"upload_error_file_too_large" = "A file you selected is too large."; +"upload_error_no_files_selected" = "There are no files to upload. Please try again."; + +"selection_error_file_too_large" = "This file is too large and will not be sent."; diff --git a/ioneapps-maagapp-ee31119a522d/ios/NixShareExtension/de.lproj/MainInterface.strings b/ioneapps-maagapp-ee31119a522d/ios/NixShareExtension/de.lproj/MainInterface.strings new file mode 100644 index 0000000..e2e04f2 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/ios/NixShareExtension/de.lproj/MainInterface.strings @@ -0,0 +1,21 @@ + +/* Class = "UINavigationItem"; title = "Enter Captions"; ObjectID = "9gy-vt-gU0"; */ +"9gy-vt-gU0.title" = "Bildtitel eingeben"; + +/* Class = "UIBarButtonItem"; title = "Back"; ObjectID = "ARf-0c-syw"; */ +"ARf-0c-syw.title" = "Zurück"; + +/* Class = "UIBarButtonItem"; title = "Cancel"; ObjectID = "Oz8-8U-jBt"; */ +"Oz8-8U-jBt.title" = "Abbrechen"; + +/* Class = "UIBarButtonItem"; title = "Send"; ObjectID = "jty-bC-dNd"; */ +"jty-bC-dNd.title" = "Senden"; + +/* Class = "UIBarButtonItem"; title = "Next"; ObjectID = "liG-JY-nUM"; */ +"liG-JY-nUM.title" = "Weiter"; + +/* Class = "UILabel"; text = "Label"; ObjectID = "rdb-lo-ZfB"; */ +"rdb-lo-ZfB.text" = "Label"; + +/* Class = "UINavigationItem"; title = "Select Receivers"; ObjectID = "zBq-p7-QR9"; */ +"zBq-p7-QR9.title" = "Empfänger auswählen"; diff --git a/ioneapps-maagapp-ee31119a522d/ios/NixShareExtension/en.lproj/Localizable.strings b/ioneapps-maagapp-ee31119a522d/ios/NixShareExtension/en.lproj/Localizable.strings new file mode 100644 index 0000000..b3f0ae6 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/ios/NixShareExtension/en.lproj/Localizable.strings @@ -0,0 +1,53 @@ +/* + Localizable.strings + PhotoShareExtension + + Created by Russell on 19/5/15. + +*/ + +"send_to" = "Send To"; +"open_app" = "Open App"; +"close" = "Close"; +"none" = "None"; +"frame" = "Frame"; + +"navigation_header_n_selected_playlist" = "%tu Playlist Selected"; +"navigation_header_n_selected_playlists" = "%tu Playlists Selected"; +"navigation_header_n_selected_friend" = "%tu Friend Selected"; +"navigation_header_n_selected_friends" = "%tu Friends Selected"; +"navigation_header_n_selected_receivers" = "%tu Receivers Selected"; +"navigation_header_select_receivers" = "Select Receivers"; + +"table_header_playlist" = "My Playlists"; +"table_header_friend" = "My Friends"; + +"table_select_all_playlists" = "Select all playlists"; +"table_select_all_friends" = "Select all friends"; + +"app_never_launched_title" = "No Nixplay Account"; +"app_never_launched_message" = "Please launch the Nixplay app for the first time to log in to your Nixplay account."; + +"no_account_title" = "No Nixplay Account"; +"no_account_message" = "There is no Nixplay account configured. You can log in to your Nixplay account in the Nixplay app."; + +"signin_again_title" = "Error"; +"signin_again_message" = "You have not logged in to your Nixplay account in awhile. Please log in again using the Nixplay app."; + +"no_receiver_title" = "Error"; +"no_receiver_message" = "You have no friend and playlist in to your Nixplay account."; + +"upload_in_progress_title" = "Upload in Progress"; +"upload_in_progress_message" = "Your photos are being uploaded. Please try again later."; + +"server_connection_error_title" = "No Internet Connection"; +"server_connection_error_message" = "Please check your device connection and try again later."; + +"upload_error_title" = "Error"; +"upload_error_file_too_large" = "A file you selected is too large."; +"upload_error_no_files_selected" = "There are no files to upload. Please try again."; + +"selection_error_file_too_large" = "This file is too large and will not be sent."; + +"Oz8-8U-jBt.normalTitle" = "Cancel"; +"Oz8-8U-jBt" = "Cancel"; diff --git a/ioneapps-maagapp-ee31119a522d/ios/NixShareExtension/en.lproj/MainInterface.strings b/ioneapps-maagapp-ee31119a522d/ios/NixShareExtension/en.lproj/MainInterface.strings new file mode 100644 index 0000000..a082a06 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/ios/NixShareExtension/en.lproj/MainInterface.strings @@ -0,0 +1,21 @@ + +/* Class = "UINavigationItem"; title = "Enter Captions"; ObjectID = "9gy-vt-gU0"; */ +"9gy-vt-gU0.title" = "Enter Captions"; + +/* Class = "UIBarButtonItem"; title = "Back"; ObjectID = "ARf-0c-syw"; */ +"ARf-0c-syw.title" = "Back"; + +/* Class = "UIBarButtonItem"; title = "Cancel"; ObjectID = "Oz8-8U-jBt"; */ +"Oz8-8U-jBt.title" = "Cancel"; + +/* Class = "UIBarButtonItem"; title = "Send"; ObjectID = "jty-bC-dNd"; */ +"jty-bC-dNd.title" = "Send"; + +/* Class = "UIBarButtonItem"; title = "Next"; ObjectID = "liG-JY-nUM"; */ +"liG-JY-nUM.title" = "Next"; + +/* Class = "UILabel"; text = "Label"; ObjectID = "rdb-lo-ZfB"; */ +"rdb-lo-ZfB.text" = "Label"; + +/* Class = "UINavigationItem"; title = "Select Receivers"; ObjectID = "zBq-p7-QR9"; */ +"zBq-p7-QR9.title" = "Select Receivers"; diff --git a/ioneapps-maagapp-ee31119a522d/ios/NixShareExtension/ja.lproj/Localizable.strings b/ioneapps-maagapp-ee31119a522d/ios/NixShareExtension/ja.lproj/Localizable.strings new file mode 100644 index 0000000..b5806c0 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/ios/NixShareExtension/ja.lproj/Localizable.strings @@ -0,0 +1,53 @@ +/* + Localizable.strings + PhotoShareExtension + + Created by Russell on 19/5/15. + +*/ + +"send_to" = "送信先"; +"open_app" = "アプリを開く"; +"close" = "閉じる"; +"none" = "なし"; +"frame" = "フレーム"; + +"navigation_header_n_selected_playlist" = "%tu個の再生リストを選択しました"; +"navigation_header_n_selected_playlists" = "%tu個の再生リストを選択しました"; +"navigation_header_n_selected_friend" = "%tu名の友達を選択しました"; +"navigation_header_n_selected_friends" = "%tu名の友達を選択しました"; +"navigation_header_n_selected_receivers" = "%tu名の友達を選択しました"; +"navigation_header_select_receivers" = "レシーバーを選択"; + +"table_header_playlist" = "マイ再生リスト"; +"table_header_friend" = "マイフレンド"; + +"table_select_all_playlists" = "すべての再生リスト選択"; +"table_select_all_friends" = "すべての友達を選択"; + +"app_never_launched_title" = "MAAGAppアカウントなし"; +"app_never_launched_message" = "MAAGAppアカウントにログインするために、最初にMAAGAppアプリを起動させてください。"; + +"no_account_title" = "MAAGAppアカウントなし"; +"no_account_message" = "MAAGAppアカウントは設定されていません。MAAGAppアプリのMAAGAppアカウントにログインできます。"; + +"signin_again_title" = "エラー"; +"signin_again_message" = "しばらくの間、MAAGAppアカウントにログインしていませんでした。MAAGAppアプリを使ってもう一度ログインしてください。"; + +"no_receiver_title" = "エラー"; +"no_receiver_message" = "MAAGAppアカウントには友達も再生リストもありません。"; + +"upload_in_progress_title" = "アップロード進行中"; +"upload_in_progress_message" = "写真がアップロードされています。後でもう一度やり直してください。"; + +"server_connection_error_title" = "インターネット接続なし"; +"server_connection_error_message" = "デバイス接続を確認して後でもう一度やり直してください。"; + +"upload_error_title" = "エラー"; +"upload_error_file_too_large" = "選択したファイルは大きすぎます。"; +"upload_error_no_files_selected" = "アップロードするファイルがありません。もう一度やり直してください。"; + +"selection_error_file_too_large" = "このファイルは大きすぎるので送信できません。"; + +"Oz8-8U-jBt.normalTitle" = "キャンセル"; +"Oz8-8U-jBt" = "キャンセル"; diff --git a/ioneapps-maagapp-ee31119a522d/ios/NixShareExtension/ja.lproj/MainInterface.strings b/ioneapps-maagapp-ee31119a522d/ios/NixShareExtension/ja.lproj/MainInterface.strings new file mode 100644 index 0000000..a082a06 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/ios/NixShareExtension/ja.lproj/MainInterface.strings @@ -0,0 +1,21 @@ + +/* Class = "UINavigationItem"; title = "Enter Captions"; ObjectID = "9gy-vt-gU0"; */ +"9gy-vt-gU0.title" = "Enter Captions"; + +/* Class = "UIBarButtonItem"; title = "Back"; ObjectID = "ARf-0c-syw"; */ +"ARf-0c-syw.title" = "Back"; + +/* Class = "UIBarButtonItem"; title = "Cancel"; ObjectID = "Oz8-8U-jBt"; */ +"Oz8-8U-jBt.title" = "Cancel"; + +/* Class = "UIBarButtonItem"; title = "Send"; ObjectID = "jty-bC-dNd"; */ +"jty-bC-dNd.title" = "Send"; + +/* Class = "UIBarButtonItem"; title = "Next"; ObjectID = "liG-JY-nUM"; */ +"liG-JY-nUM.title" = "Next"; + +/* Class = "UILabel"; text = "Label"; ObjectID = "rdb-lo-ZfB"; */ +"rdb-lo-ZfB.text" = "Label"; + +/* Class = "UINavigationItem"; title = "Select Receivers"; ObjectID = "zBq-p7-QR9"; */ +"zBq-p7-QR9.title" = "Select Receivers"; diff --git a/ioneapps-maagapp-ee31119a522d/ios/Nixplay-tvOS/Info.plist b/ioneapps-maagapp-ee31119a522d/ios/Nixplay-tvOS/Info.plist new file mode 100644 index 0000000..77183f1 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/ios/Nixplay-tvOS/Info.plist @@ -0,0 +1,53 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + com.creedon.Nixplay.$(PRODUCT_NAME:rfc1034identifier) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + APPL + CFBundleShortVersionString + $(MARKETING_VERSION) + CFBundleSignature + ???? + CFBundleVersion + $(CURRENT_PROJECT_VERSION) + LSRequiresIPhoneOS + + NSAppTransportSecurity + + NSExceptionDomains + + localhost + + NSExceptionAllowsInsecureHTTPLoads + + + + + NSLocationWhenInUseUsageDescription + + UILaunchStoryboardName + LaunchScreen + UIRequiredDeviceCapabilities + + armv7 + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UIViewControllerBasedStatusBarAppearance + + + diff --git a/ioneapps-maagapp-ee31119a522d/ios/Nixplay-tvOSTests/Info.plist b/ioneapps-maagapp-ee31119a522d/ios/Nixplay-tvOSTests/Info.plist new file mode 100644 index 0000000..d8f5fce --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/ios/Nixplay-tvOSTests/Info.plist @@ -0,0 +1,24 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + com.creedon.Nixplay.$(PRODUCT_NAME:rfc1034identifier) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + BNDL + CFBundleShortVersionString + 3.10.0 + CFBundleSignature + ???? + CFBundleVersion + 300000205 + + diff --git a/ioneapps-maagapp-ee31119a522d/ios/Nixplay.xcodeproj/project.pbxproj b/ioneapps-maagapp-ee31119a522d/ios/Nixplay.xcodeproj/project.pbxproj new file mode 100644 index 0000000..134931d --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/ios/Nixplay.xcodeproj/project.pbxproj @@ -0,0 +1,5188 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 00E356F31AD99517003FC87E /* NixplayTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E356F21AD99517003FC87E /* NixplayTests.m */; }; + 0138E50DEEE94FE19705A0B8 /* SafariServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4C21D99FD34C42E8BC8EE3D9 /* SafariServices.framework */; }; + 07A13AF2D4F54DA9ABDF2DD3 /* Ionicons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = FE6A7738F5BE45B99AEF397F /* Ionicons.ttf */; }; + 07FD4C9921CCDBB500B6C7CB /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 07FD4C9F21CCDBB500B6C7CB /* Localizable.strings */; }; + 07FD4C9B21CCDBB500B6C7CB /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 07FD4C9F21CCDBB500B6C7CB /* Localizable.strings */; }; + 07FD4C9C21CCDBB500B6C7CB /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 07FD4C9F21CCDBB500B6C7CB /* Localizable.strings */; }; + 07FD4C9D21CCDBB500B6C7CB /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 07FD4C9F21CCDBB500B6C7CB /* Localizable.strings */; }; + 1273C266FBBF4443899AAF8E /* FontAwesome5_Solid.ttf in Resources */ = {isa = PBXBuildFile; fileRef = B92D6031EFA9465FBC117E2E /* FontAwesome5_Solid.ttf */; }; + 13B07FBC1A68108700A75B9A /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.m */; }; + 13B07FBD1A68108700A75B9A /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB11A68108700A75B9A /* LaunchScreen.xib */; }; + 13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; }; + 250150828D3D4E03B417B045 /* Open Sans-Bold.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 4A299641E4CF4331B2E76706 /* Open Sans-Bold.ttf */; }; + 294211A630DED50E211908A0 /* libPods-MagShareExtensionBeta.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 6EC21FA43F8BB96D8254773F /* libPods-MagShareExtensionBeta.a */; }; + 2D02E4BC1E0B4A80006451C7 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.m */; }; + 2D02E4BF1E0B4AB3006451C7 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; }; + 2D16E6881FA4F8E400B85C8A /* libReact.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 2D16E6891FA4F8E400B85C8A /* libReact.a */; }; + 2DCD954D1E0B4F2C00145EB5 /* NixplayTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E356F21AD99517003FC87E /* NixplayTests.m */; }; + 3660BBC6E0FE4808B05C6D83 /* AddressBook.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9988B169652146CAB7BC49CA /* AddressBook.framework */; }; + 38B0B528F99F4C91B11447A1 /* Open Sans-Italic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 7B2D5DC7BC4445958B272EDF /* Open Sans-Italic.ttf */; }; + 39834244607043E6868D3003 /* Zocial.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 1AB435DFCB744DB88C9F9156 /* Zocial.ttf */; }; + 42AD8DB34E644DEAAB803F14 /* Octicons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 840F890C87A344A0A659EB96 /* Octicons.ttf */; }; + 48918DF910CC92A9CA29FCCC /* libPods-MAAGAppRnd.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 32920DD0D49B173B01C92211 /* libPods-MAAGAppRnd.a */; }; + 489405DC8FF140EFB205ADEA /* NixplayIcon.svg in Resources */ = {isa = PBXBuildFile; fileRef = 1454B95020AC4424A01F1D50 /* NixplayIcon.svg */; }; + 4AFA4CA6DB474DF1AC996846 /* MaterialCommunityIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 969425D94D6D41158C910618 /* MaterialCommunityIcons.ttf */; }; + 4C3823516E5044BF9DBFEDCF /* MaterialIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = F344523023074AB493B29045 /* MaterialIcons.ttf */; }; + 4F2791500A984002B0CCF93C /* SimpleLineIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = C771CB3F2F5C44E9BB41895E /* SimpleLineIcons.ttf */; }; + 510671B223D4BBB000E9B046 /* libreact-native-nixplay-core.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 510671B123D4BBB000E9B046 /* libreact-native-nixplay-core.a */; }; + 51208191078F48B0944AC546 /* libPods-MagShareExtensionAlpha.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3317464B6647427299C99552 /* libPods-MagShareExtensionAlpha.a */; }; + 51E0F1742400289B007CE421 /* libReactNativeShareExtension.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 51E0F1732400289B007CE421 /* libReactNativeShareExtension.a */; }; + 55B905E95C434C7AACCB86D4 /* Entypo.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 4D40D6637ABB4534A12614E8 /* Entypo.ttf */; }; + 55CE7A29276A497386EAF06C /* AntDesign.ttf in Resources */ = {isa = PBXBuildFile; fileRef = D413578E5EA64A5E95070B31 /* AntDesign.ttf */; }; + 5FD5558CCFCF4602ABC47378 /* FontAwesome5_Brands.ttf in Resources */ = {isa = PBXBuildFile; fileRef = B97C056C8AFC4A668DA46F71 /* FontAwesome5_Brands.ttf */; }; + 68056AB8171C494D8C115F2D /* Open Sans-ExtraBold.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 34C523EDB9FB44B9A8E29B25 /* Open Sans-ExtraBold.ttf */; }; + 6C5C1D9792EF48828AE60CC1 /* NixplayIcon.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 885D2FE25C8642E890745AC3 /* NixplayIcon.ttf */; }; + 6D79F52748F607FE52999B8F /* libPods-MAAGApp-tvOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 38DB33393A6A85E0DD518DF1 /* libPods-MAAGApp-tvOS.a */; }; + 6E801B24C6F85AAE828A72DF /* libPods-MAAGAppBeta.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 2AF15F46AD77FD1A4939FEC0 /* libPods-MAAGAppBeta.a */; }; + 6F5E0ED787EB4CB3815FCEC4 /* EvilIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = E978B2BEE9A6472CAB4D9256 /* EvilIcons.ttf */; }; + 7636A69B737145D2987A0408 /* Open Sans-BoldItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = A591808523974DE0BAEBFBDA /* Open Sans-BoldItalic.ttf */; }; + 7B58C8ECB9CA1A13B554D0D7 /* libPods-MAAGApp-tvOSTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = A2F6023EBC334DD8C24892A7 /* libPods-MAAGApp-tvOSTests.a */; }; + 88F3FF6DF5A04A2C991F31B8 /* FontAwesome.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 601D47B063D840A8B6B13FDC /* FontAwesome.ttf */; }; + 9713C6DEF666DE1CB076DFC1 /* libPods-MagShareExtension.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D8ABB61B9E72F8A7C670425A /* libPods-MagShareExtension.a */; }; + 9E141B2B6FF9D19699516023 /* libPods-MAAGApp.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 743D9BEFFE2225F7E20D8FEA /* libPods-MAAGApp.a */; }; + 9E6261D90F884D308C956B19 /* NixplayIcon.woff in Resources */ = {isa = PBXBuildFile; fileRef = 48150F0C1C2A48089A0D689D /* NixplayIcon.woff */; }; + A448DE8A4C2AFAEAF7B120F9 /* libPods-MAAGAppProd.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 71A7426CCEE7A34122ADA19F /* libPods-MAAGAppProd.a */; }; + A5DF9C42F07348D890781148 /* Open Sans-SemiBoldItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 0A186D3FEADC4BEA86D7950E /* Open Sans-SemiBoldItalic.ttf */; }; + AAC5FD86EC6A4E188AA814A9 /* Foundation.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 88E27D2880A64EFA92DFBF81 /* Foundation.ttf */; }; + ADB37FEF94794AD1936A6F3E /* Open Sans-SemiBold.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 999A320D5ED249929845A10D /* Open Sans-SemiBold.ttf */; }; + AF582C1729ECFAAB4A45552B /* libPods-MAAGAppAlpha.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 667D2DD17D47ABF1CA968453 /* libPods-MAAGAppAlpha.a */; }; + BDE31BE4F2934757BEBED1FF /* Open Sans-LightItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = ED7C08C6589445FF9977B66B /* Open Sans-LightItalic.ttf */; }; + C2E456923E39822B28C21EC7 /* libPods-MAAGAppTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 25537A81387E4166E35657AD /* libPods-MAAGAppTests.a */; }; + C5D8C54E230A5A5300A5D81E /* StoreKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C5D8C54D230A5A5300A5D81E /* StoreKit.framework */; }; + D0A3BCCB11A64B7E9444AC23 /* FontAwesome5_Regular.ttf in Resources */ = {isa = PBXBuildFile; fileRef = C5029392F06741B8856B6548 /* FontAwesome5_Regular.ttf */; }; + E1CE976C897D65F1F87ED771 /* libPods-MagShareExtensionQa.a in Frameworks */ = {isa = PBXBuildFile; fileRef = A6EE7AFE33A053F54380387C /* libPods-MagShareExtensionQa.a */; }; + E31312CE20C78A36003A0744 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = E31312CD20C78A36003A0744 /* Images.xcassets */; }; + E31312CF20C78A36003A0744 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = E31312CD20C78A36003A0744 /* Images.xcassets */; }; + E31312D020C78A36003A0744 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = E31312CD20C78A36003A0744 /* Images.xcassets */; }; + E31312D120C78A36003A0744 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = E31312CD20C78A36003A0744 /* Images.xcassets */; }; + E31312D220C78A36003A0744 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = E31312CD20C78A36003A0744 /* Images.xcassets */; }; + E31312D320C78A36003A0744 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = E31312CD20C78A36003A0744 /* Images.xcassets */; }; + E31312D420C78A36003A0744 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = E31312CD20C78A36003A0744 /* Images.xcassets */; }; + E31312D520C78A36003A0744 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = E31312CD20C78A36003A0744 /* Images.xcassets */; }; + E31312D620C78A36003A0744 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = E31312CD20C78A36003A0744 /* Images.xcassets */; }; + E337473520AD255E00017645 /* MagShareExtension.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = E337472A20AD255E00017645 /* MagShareExtension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; + E3575245224B3AEE00B814C0 /* JavaScriptCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E35751E9224B3AED00B814C0 /* JavaScriptCore.framework */; }; + E3575246224B3AF500B814C0 /* JavaScriptCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E35751E9224B3AED00B814C0 /* JavaScriptCore.framework */; }; + E3575247224B3B2700B814C0 /* JavaScriptCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E35751E9224B3AED00B814C0 /* JavaScriptCore.framework */; }; + E3575249224B3B3400B814C0 /* JavaScriptCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E35751E9224B3AED00B814C0 /* JavaScriptCore.framework */; }; + E357524A224B3B3A00B814C0 /* JavaScriptCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E35751E9224B3AED00B814C0 /* JavaScriptCore.framework */; }; + E357524B224B3B4200B814C0 /* JavaScriptCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E35751E9224B3AED00B814C0 /* JavaScriptCore.framework */; }; + E357524C224B3B4900B814C0 /* JavaScriptCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E35751E9224B3AED00B814C0 /* JavaScriptCore.framework */; }; + E357524D224B3B4E00B814C0 /* JavaScriptCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E35751E9224B3AED00B814C0 /* JavaScriptCore.framework */; }; + E357524E224B3B5B00B814C0 /* JavaScriptCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E35751E9224B3AED00B814C0 /* JavaScriptCore.framework */; }; + E357524F224B3B6200B814C0 /* JavaScriptCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E35751E9224B3AED00B814C0 /* JavaScriptCore.framework */; }; + E359AFB5221BDB6F009FCE1C /* InfoPList.strings in Resources */ = {isa = PBXBuildFile; fileRef = E359AFC1221BDB6F009FCE1C /* InfoPList.strings */; }; + E359AFB6221BDB6F009FCE1C /* InfoPList.strings in Resources */ = {isa = PBXBuildFile; fileRef = E359AFC1221BDB6F009FCE1C /* InfoPList.strings */; }; + E359AFB7221BDB6F009FCE1C /* InfoPList.strings in Resources */ = {isa = PBXBuildFile; fileRef = E359AFC1221BDB6F009FCE1C /* InfoPList.strings */; }; + E359AFB9221BDB6F009FCE1C /* InfoPList.strings in Resources */ = {isa = PBXBuildFile; fileRef = E359AFC1221BDB6F009FCE1C /* InfoPList.strings */; }; + E359AFBA221BDB6F009FCE1C /* InfoPList.strings in Resources */ = {isa = PBXBuildFile; fileRef = E359AFC1221BDB6F009FCE1C /* InfoPList.strings */; }; + E359AFBB221BDB6F009FCE1C /* InfoPList.strings in Resources */ = {isa = PBXBuildFile; fileRef = E359AFC1221BDB6F009FCE1C /* InfoPList.strings */; }; + E359AFBC221BDB6F009FCE1C /* InfoPList.strings in Resources */ = {isa = PBXBuildFile; fileRef = E359AFC1221BDB6F009FCE1C /* InfoPList.strings */; }; + E359AFBD221BDB6F009FCE1C /* InfoPList.strings in Resources */ = {isa = PBXBuildFile; fileRef = E359AFC1221BDB6F009FCE1C /* InfoPList.strings */; }; + E359AFBE221BDB6F009FCE1C /* InfoPList.strings in Resources */ = {isa = PBXBuildFile; fileRef = E359AFC1221BDB6F009FCE1C /* InfoPList.strings */; }; + E359AFBF221BDB6F009FCE1C /* InfoPList.strings in Resources */ = {isa = PBXBuildFile; fileRef = E359AFC1221BDB6F009FCE1C /* InfoPList.strings */; }; + E3618951227801C400E86DF9 /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = E3618948227801BD00E86DF9 /* GoogleService-Info.plist */; }; + E3618952227801CA00E86DF9 /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = E361894A227801BD00E86DF9 /* GoogleService-Info.plist */; }; + E3618953227801D000E86DF9 /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = E361894A227801BD00E86DF9 /* GoogleService-Info.plist */; }; + E3618954227801D600E86DF9 /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = E361894C227801BD00E86DF9 /* GoogleService-Info.plist */; }; + E3618956227801E000E86DF9 /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = E3618950227801BD00E86DF9 /* GoogleService-Info.plist */; }; + E3689AA021801DFD0056ABF4 /* ContainerViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E3689A5221801DFD0056ABF4 /* ContainerViewController.m */; }; + E3689AA221801DFD0056ABF4 /* ContainerViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E3689A5221801DFD0056ABF4 /* ContainerViewController.m */; }; + E3689AA321801DFD0056ABF4 /* ContainerViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E3689A5221801DFD0056ABF4 /* ContainerViewController.m */; }; + E3689AA421801DFD0056ABF4 /* ContainerViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E3689A5221801DFD0056ABF4 /* ContainerViewController.m */; }; + E3689AA521801DFD0056ABF4 /* ImageCaptionViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E3689A5421801DFD0056ABF4 /* ImageCaptionViewController.m */; }; + E3689AA721801DFD0056ABF4 /* ImageCaptionViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E3689A5421801DFD0056ABF4 /* ImageCaptionViewController.m */; }; + E3689AA821801DFD0056ABF4 /* ImageCaptionViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E3689A5421801DFD0056ABF4 /* ImageCaptionViewController.m */; }; + E3689AA921801DFD0056ABF4 /* ImageCaptionViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E3689A5421801DFD0056ABF4 /* ImageCaptionViewController.m */; }; + E3689AAA21801DFD0056ABF4 /* ReceiverTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E3689A5621801DFD0056ABF4 /* ReceiverTableViewController.m */; }; + E3689AAC21801DFD0056ABF4 /* ReceiverTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E3689A5621801DFD0056ABF4 /* ReceiverTableViewController.m */; }; + E3689AAD21801DFD0056ABF4 /* ReceiverTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E3689A5621801DFD0056ABF4 /* ReceiverTableViewController.m */; }; + E3689AAE21801DFD0056ABF4 /* ReceiverTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E3689A5621801DFD0056ABF4 /* ReceiverTableViewController.m */; }; + E36C3B5B2147A56B00097C81 /* VideoTrimmerViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = E36C3B112147A56B00097C81 /* VideoTrimmerViewController.xib */; }; + E36C3B5C2147A56B00097C81 /* VideoTrimmerViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = E36C3B112147A56B00097C81 /* VideoTrimmerViewController.xib */; }; + E36C3B5D2147A56B00097C81 /* VideoTrimmerViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = E36C3B112147A56B00097C81 /* VideoTrimmerViewController.xib */; }; + E36C3B5E2147A56B00097C81 /* VideoTrimmerViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = E36C3B112147A56B00097C81 /* VideoTrimmerViewController.xib */; }; + E36C3B5F2147A56B00097C81 /* VideoTrimmerViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = E36C3B112147A56B00097C81 /* VideoTrimmerViewController.xib */; }; + E375D57620C69A330035FEC1 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.m */; }; + E375D57720C69A330035FEC1 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; }; + E375D59220C69A330035FEC1 /* libReactNativeShareExtension.a in Frameworks */ = {isa = PBXBuildFile; fileRef = B299EF6F93804ED88C2E1F44 /* libReactNativeShareExtension.a */; }; + E375D59520C69A330035FEC1 /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB11A68108700A75B9A /* LaunchScreen.xib */; }; + E375D59620C69A330035FEC1 /* Open Sans-Bold.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 4A299641E4CF4331B2E76706 /* Open Sans-Bold.ttf */; }; + E375D59720C69A330035FEC1 /* Open Sans-BoldItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = A591808523974DE0BAEBFBDA /* Open Sans-BoldItalic.ttf */; }; + E375D59820C69A330035FEC1 /* Open Sans-ExtraBold.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 34C523EDB9FB44B9A8E29B25 /* Open Sans-ExtraBold.ttf */; }; + E375D59920C69A330035FEC1 /* Open Sans-ExtraBoldItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = F44B8E92B8FC4FB8B5C6DF9C /* Open Sans-ExtraBoldItalic.ttf */; }; + E375D59A20C69A330035FEC1 /* Open Sans-Italic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 7B2D5DC7BC4445958B272EDF /* Open Sans-Italic.ttf */; }; + E375D59B20C69A330035FEC1 /* Open Sans-Light.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 3025744944B44E25966DCC11 /* Open Sans-Light.ttf */; }; + E375D59C20C69A330035FEC1 /* Open Sans-LightItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = ED7C08C6589445FF9977B66B /* Open Sans-LightItalic.ttf */; }; + E375D59D20C69A330035FEC1 /* Open Sans-SemiBold.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 999A320D5ED249929845A10D /* Open Sans-SemiBold.ttf */; }; + E375D59E20C69A330035FEC1 /* Open Sans-SemiBoldItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 0A186D3FEADC4BEA86D7950E /* Open Sans-SemiBoldItalic.ttf */; }; + E375D59F20C69A330035FEC1 /* Open Sans.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 9AD9A2994AAB448DB214C956 /* Open Sans.ttf */; }; + E375D5A020C69A330035FEC1 /* Entypo.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 4D40D6637ABB4534A12614E8 /* Entypo.ttf */; }; + E375D5A120C69A330035FEC1 /* EvilIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = E978B2BEE9A6472CAB4D9256 /* EvilIcons.ttf */; }; + E375D5A220C69A330035FEC1 /* Feather.ttf in Resources */ = {isa = PBXBuildFile; fileRef = C9116BF973C74EAF9305AEEF /* Feather.ttf */; }; + E375D5A320C69A330035FEC1 /* FontAwesome.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 601D47B063D840A8B6B13FDC /* FontAwesome.ttf */; }; + E375D5A420C69A330035FEC1 /* Foundation.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 88E27D2880A64EFA92DFBF81 /* Foundation.ttf */; }; + E375D5A520C69A330035FEC1 /* Ionicons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = FE6A7738F5BE45B99AEF397F /* Ionicons.ttf */; }; + E375D5A620C69A330035FEC1 /* MaterialCommunityIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 969425D94D6D41158C910618 /* MaterialCommunityIcons.ttf */; }; + E375D5A720C69A330035FEC1 /* MaterialIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = F344523023074AB493B29045 /* MaterialIcons.ttf */; }; + E375D5A820C69A330035FEC1 /* Octicons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 840F890C87A344A0A659EB96 /* Octicons.ttf */; }; + E375D5A920C69A330035FEC1 /* SimpleLineIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = C771CB3F2F5C44E9BB41895E /* SimpleLineIcons.ttf */; }; + E375D5AA20C69A330035FEC1 /* Zocial.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 1AB435DFCB744DB88C9F9156 /* Zocial.ttf */; }; + E375D5AB20C69A330035FEC1 /* NixplayIcon.svg in Resources */ = {isa = PBXBuildFile; fileRef = 1454B95020AC4424A01F1D50 /* NixplayIcon.svg */; }; + E375D5AC20C69A330035FEC1 /* NixplayIcon.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 885D2FE25C8642E890745AC3 /* NixplayIcon.ttf */; }; + E375D5AD20C69A330035FEC1 /* NixplayIcon.woff in Resources */ = {isa = PBXBuildFile; fileRef = 48150F0C1C2A48089A0D689D /* NixplayIcon.woff */; }; + E375D67320C69E280035FEC1 /* NixShareExtension.m in Sources */ = {isa = PBXBuildFile; fileRef = 4312F6582097036600975F09 /* NixShareExtension.m */; }; + E375D68B20C69E280035FEC1 /* MainInterface.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 4312F64E2097033300975F09 /* MainInterface.storyboard */; }; + E375D69620C69F150035FEC1 /* MagShareExtensionQa.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = E375D69020C69E280035FEC1 /* MagShareExtensionQa.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; + E375D6A220C76C1F0035FEC1 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.m */; }; + E375D6A320C76C1F0035FEC1 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; }; + E375D6BB20C76C1F0035FEC1 /* libRNSafeArea.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 7AD481CA268E44D29814D420 /* libRNSafeArea.a */; }; + E375D6BC20C76C1F0035FEC1 /* libRNVectorIcons.a in Frameworks */ = {isa = PBXBuildFile; fileRef = CEC6DFA1AA2E4F9096376697 /* libRNVectorIcons.a */; }; + E375D6BF20C76C1F0035FEC1 /* libReactNativeShareExtension.a in Frameworks */ = {isa = PBXBuildFile; fileRef = B299EF6F93804ED88C2E1F44 /* libReactNativeShareExtension.a */; }; + E375D6C220C76C1F0035FEC1 /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB11A68108700A75B9A /* LaunchScreen.xib */; }; + E375D6C320C76C1F0035FEC1 /* Open Sans-Bold.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 4A299641E4CF4331B2E76706 /* Open Sans-Bold.ttf */; }; + E375D6C420C76C1F0035FEC1 /* Open Sans-BoldItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = A591808523974DE0BAEBFBDA /* Open Sans-BoldItalic.ttf */; }; + E375D6C520C76C1F0035FEC1 /* Open Sans-ExtraBold.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 34C523EDB9FB44B9A8E29B25 /* Open Sans-ExtraBold.ttf */; }; + E375D6C620C76C1F0035FEC1 /* Open Sans-ExtraBoldItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = F44B8E92B8FC4FB8B5C6DF9C /* Open Sans-ExtraBoldItalic.ttf */; }; + E375D6C720C76C1F0035FEC1 /* Open Sans-Italic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 7B2D5DC7BC4445958B272EDF /* Open Sans-Italic.ttf */; }; + E375D6C820C76C1F0035FEC1 /* Open Sans-Light.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 3025744944B44E25966DCC11 /* Open Sans-Light.ttf */; }; + E375D6C920C76C1F0035FEC1 /* Open Sans-LightItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = ED7C08C6589445FF9977B66B /* Open Sans-LightItalic.ttf */; }; + E375D6CA20C76C1F0035FEC1 /* Open Sans-SemiBold.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 999A320D5ED249929845A10D /* Open Sans-SemiBold.ttf */; }; + E375D6CB20C76C1F0035FEC1 /* Open Sans-SemiBoldItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 0A186D3FEADC4BEA86D7950E /* Open Sans-SemiBoldItalic.ttf */; }; + E375D6CC20C76C1F0035FEC1 /* Open Sans.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 9AD9A2994AAB448DB214C956 /* Open Sans.ttf */; }; + E375D6CD20C76C1F0035FEC1 /* Entypo.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 4D40D6637ABB4534A12614E8 /* Entypo.ttf */; }; + E375D6CE20C76C1F0035FEC1 /* EvilIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = E978B2BEE9A6472CAB4D9256 /* EvilIcons.ttf */; }; + E375D6CF20C76C1F0035FEC1 /* Feather.ttf in Resources */ = {isa = PBXBuildFile; fileRef = C9116BF973C74EAF9305AEEF /* Feather.ttf */; }; + E375D6D020C76C1F0035FEC1 /* FontAwesome.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 601D47B063D840A8B6B13FDC /* FontAwesome.ttf */; }; + E375D6D120C76C1F0035FEC1 /* Foundation.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 88E27D2880A64EFA92DFBF81 /* Foundation.ttf */; }; + E375D6D220C76C1F0035FEC1 /* Ionicons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = FE6A7738F5BE45B99AEF397F /* Ionicons.ttf */; }; + E375D6D320C76C1F0035FEC1 /* MaterialCommunityIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 969425D94D6D41158C910618 /* MaterialCommunityIcons.ttf */; }; + E375D6D420C76C1F0035FEC1 /* MaterialIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = F344523023074AB493B29045 /* MaterialIcons.ttf */; }; + E375D6D520C76C1F0035FEC1 /* Octicons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 840F890C87A344A0A659EB96 /* Octicons.ttf */; }; + E375D6D620C76C1F0035FEC1 /* SimpleLineIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = C771CB3F2F5C44E9BB41895E /* SimpleLineIcons.ttf */; }; + E375D6D720C76C1F0035FEC1 /* Zocial.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 1AB435DFCB744DB88C9F9156 /* Zocial.ttf */; }; + E375D6D820C76C1F0035FEC1 /* NixplayIcon.svg in Resources */ = {isa = PBXBuildFile; fileRef = 1454B95020AC4424A01F1D50 /* NixplayIcon.svg */; }; + E375D6D920C76C1F0035FEC1 /* NixplayIcon.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 885D2FE25C8642E890745AC3 /* NixplayIcon.ttf */; }; + E375D6DA20C76C1F0035FEC1 /* NixplayIcon.woff in Resources */ = {isa = PBXBuildFile; fileRef = 48150F0C1C2A48089A0D689D /* NixplayIcon.woff */; }; + E375D6E620C76D350035FEC1 /* NixShareExtension.m in Sources */ = {isa = PBXBuildFile; fileRef = 4312F6582097036600975F09 /* NixShareExtension.m */; }; + E375D6FF20C76D350035FEC1 /* MainInterface.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 4312F64E2097033300975F09 /* MainInterface.storyboard */; }; + E375D70620C76D7B0035FEC1 /* MagShareExtensionAlpha.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = E375D70420C76D350035FEC1 /* MagShareExtensionAlpha.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; + E375D77520C770DA0035FEC1 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.m */; }; + E375D77620C770DA0035FEC1 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; }; + E375D78E20C770DA0035FEC1 /* libRNSafeArea.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 7AD481CA268E44D29814D420 /* libRNSafeArea.a */; }; + E375D78F20C770DA0035FEC1 /* libRNVectorIcons.a in Frameworks */ = {isa = PBXBuildFile; fileRef = CEC6DFA1AA2E4F9096376697 /* libRNVectorIcons.a */; }; + E375D79220C770DA0035FEC1 /* libReactNativeShareExtension.a in Frameworks */ = {isa = PBXBuildFile; fileRef = B299EF6F93804ED88C2E1F44 /* libReactNativeShareExtension.a */; }; + E375D79520C770DA0035FEC1 /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB11A68108700A75B9A /* LaunchScreen.xib */; }; + E375D79620C770DA0035FEC1 /* Open Sans-Bold.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 4A299641E4CF4331B2E76706 /* Open Sans-Bold.ttf */; }; + E375D79720C770DA0035FEC1 /* Open Sans-BoldItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = A591808523974DE0BAEBFBDA /* Open Sans-BoldItalic.ttf */; }; + E375D79820C770DA0035FEC1 /* Open Sans-ExtraBold.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 34C523EDB9FB44B9A8E29B25 /* Open Sans-ExtraBold.ttf */; }; + E375D79920C770DA0035FEC1 /* Open Sans-ExtraBoldItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = F44B8E92B8FC4FB8B5C6DF9C /* Open Sans-ExtraBoldItalic.ttf */; }; + E375D79A20C770DA0035FEC1 /* Open Sans-Italic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 7B2D5DC7BC4445958B272EDF /* Open Sans-Italic.ttf */; }; + E375D79B20C770DA0035FEC1 /* Open Sans-Light.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 3025744944B44E25966DCC11 /* Open Sans-Light.ttf */; }; + E375D79C20C770DA0035FEC1 /* Open Sans-LightItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = ED7C08C6589445FF9977B66B /* Open Sans-LightItalic.ttf */; }; + E375D79D20C770DA0035FEC1 /* Open Sans-SemiBold.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 999A320D5ED249929845A10D /* Open Sans-SemiBold.ttf */; }; + E375D79E20C770DA0035FEC1 /* Open Sans-SemiBoldItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 0A186D3FEADC4BEA86D7950E /* Open Sans-SemiBoldItalic.ttf */; }; + E375D79F20C770DA0035FEC1 /* Open Sans.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 9AD9A2994AAB448DB214C956 /* Open Sans.ttf */; }; + E375D7A020C770DA0035FEC1 /* Entypo.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 4D40D6637ABB4534A12614E8 /* Entypo.ttf */; }; + E375D7A120C770DA0035FEC1 /* EvilIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = E978B2BEE9A6472CAB4D9256 /* EvilIcons.ttf */; }; + E375D7A220C770DA0035FEC1 /* Feather.ttf in Resources */ = {isa = PBXBuildFile; fileRef = C9116BF973C74EAF9305AEEF /* Feather.ttf */; }; + E375D7A320C770DA0035FEC1 /* FontAwesome.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 601D47B063D840A8B6B13FDC /* FontAwesome.ttf */; }; + E375D7A420C770DA0035FEC1 /* Foundation.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 88E27D2880A64EFA92DFBF81 /* Foundation.ttf */; }; + E375D7A520C770DA0035FEC1 /* Ionicons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = FE6A7738F5BE45B99AEF397F /* Ionicons.ttf */; }; + E375D7A620C770DA0035FEC1 /* MaterialCommunityIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 969425D94D6D41158C910618 /* MaterialCommunityIcons.ttf */; }; + E375D7A720C770DA0035FEC1 /* MaterialIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = F344523023074AB493B29045 /* MaterialIcons.ttf */; }; + E375D7A820C770DA0035FEC1 /* Octicons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 840F890C87A344A0A659EB96 /* Octicons.ttf */; }; + E375D7A920C770DA0035FEC1 /* SimpleLineIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = C771CB3F2F5C44E9BB41895E /* SimpleLineIcons.ttf */; }; + E375D7AA20C770DA0035FEC1 /* Zocial.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 1AB435DFCB744DB88C9F9156 /* Zocial.ttf */; }; + E375D7AB20C770DA0035FEC1 /* NixplayIcon.svg in Resources */ = {isa = PBXBuildFile; fileRef = 1454B95020AC4424A01F1D50 /* NixplayIcon.svg */; }; + E375D7AC20C770DA0035FEC1 /* NixplayIcon.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 885D2FE25C8642E890745AC3 /* NixplayIcon.ttf */; }; + E375D7AD20C770DA0035FEC1 /* NixplayIcon.woff in Resources */ = {isa = PBXBuildFile; fileRef = 48150F0C1C2A48089A0D689D /* NixplayIcon.woff */; }; + E3858716215C723500625D49 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.m */; }; + E3858717215C723500625D49 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; }; + E3858740215C723500625D49 /* SafariServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4C21D99FD34C42E8BC8EE3D9 /* SafariServices.framework */; }; + E3858741215C723500625D49 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AB19DCE374604582AA35709A /* SystemConfiguration.framework */; }; + E3858742215C723500625D49 /* AddressBook.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9988B169652146CAB7BC49CA /* AddressBook.framework */; }; + E3858745215C723500625D49 /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB11A68108700A75B9A /* LaunchScreen.xib */; }; + E3858746215C723500625D49 /* Open Sans-Bold.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 4A299641E4CF4331B2E76706 /* Open Sans-Bold.ttf */; }; + E3858747215C723500625D49 /* Open Sans-BoldItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = A591808523974DE0BAEBFBDA /* Open Sans-BoldItalic.ttf */; }; + E3858748215C723500625D49 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = E31312CD20C78A36003A0744 /* Images.xcassets */; }; + E3858749215C723500625D49 /* Open Sans-ExtraBold.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 34C523EDB9FB44B9A8E29B25 /* Open Sans-ExtraBold.ttf */; }; + E385874A215C723500625D49 /* Open Sans-ExtraBoldItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = F44B8E92B8FC4FB8B5C6DF9C /* Open Sans-ExtraBoldItalic.ttf */; }; + E385874B215C723500625D49 /* Open Sans-Italic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 7B2D5DC7BC4445958B272EDF /* Open Sans-Italic.ttf */; }; + E385874C215C723500625D49 /* Open Sans-Light.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 3025744944B44E25966DCC11 /* Open Sans-Light.ttf */; }; + E385874D215C723500625D49 /* Open Sans-LightItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = ED7C08C6589445FF9977B66B /* Open Sans-LightItalic.ttf */; }; + E385874E215C723500625D49 /* Open Sans-SemiBold.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 999A320D5ED249929845A10D /* Open Sans-SemiBold.ttf */; }; + E385874F215C723500625D49 /* Open Sans-SemiBoldItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 0A186D3FEADC4BEA86D7950E /* Open Sans-SemiBoldItalic.ttf */; }; + E3858751215C723500625D49 /* Open Sans.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 9AD9A2994AAB448DB214C956 /* Open Sans.ttf */; }; + E3858752215C723500625D49 /* Entypo.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 4D40D6637ABB4534A12614E8 /* Entypo.ttf */; }; + E3858753215C723500625D49 /* EvilIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = E978B2BEE9A6472CAB4D9256 /* EvilIcons.ttf */; }; + E3858754215C723500625D49 /* Feather.ttf in Resources */ = {isa = PBXBuildFile; fileRef = C9116BF973C74EAF9305AEEF /* Feather.ttf */; }; + E3858755215C723500625D49 /* FontAwesome.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 601D47B063D840A8B6B13FDC /* FontAwesome.ttf */; }; + E3858756215C723500625D49 /* Foundation.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 88E27D2880A64EFA92DFBF81 /* Foundation.ttf */; }; + E3858757215C723500625D49 /* Ionicons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = FE6A7738F5BE45B99AEF397F /* Ionicons.ttf */; }; + E3858759215C723500625D49 /* MaterialCommunityIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 969425D94D6D41158C910618 /* MaterialCommunityIcons.ttf */; }; + E385875A215C723500625D49 /* MaterialIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = F344523023074AB493B29045 /* MaterialIcons.ttf */; }; + E385875B215C723500625D49 /* Octicons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 840F890C87A344A0A659EB96 /* Octicons.ttf */; }; + E385875C215C723500625D49 /* SimpleLineIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = C771CB3F2F5C44E9BB41895E /* SimpleLineIcons.ttf */; }; + E385875D215C723500625D49 /* Zocial.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 1AB435DFCB744DB88C9F9156 /* Zocial.ttf */; }; + E385875E215C723500625D49 /* NixplayIcon.svg in Resources */ = {isa = PBXBuildFile; fileRef = 1454B95020AC4424A01F1D50 /* NixplayIcon.svg */; }; + E385875F215C723500625D49 /* NixplayIcon.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 885D2FE25C8642E890745AC3 /* NixplayIcon.ttf */; }; + E3858760215C723500625D49 /* NixplayIcon.woff in Resources */ = {isa = PBXBuildFile; fileRef = 48150F0C1C2A48089A0D689D /* NixplayIcon.woff */; }; + E3AC96FC20CFC24E00E1F671 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.m */; }; + E3AC96FD20CFC24E00E1F671 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; }; + E3AC971520CFC24E00E1F671 /* libRNSafeArea.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 7AD481CA268E44D29814D420 /* libRNSafeArea.a */; }; + E3AC971620CFC24E00E1F671 /* libRNVectorIcons.a in Frameworks */ = {isa = PBXBuildFile; fileRef = CEC6DFA1AA2E4F9096376697 /* libRNVectorIcons.a */; }; + E3AC971920CFC24E00E1F671 /* libReactNativeShareExtension.a in Frameworks */ = {isa = PBXBuildFile; fileRef = B299EF6F93804ED88C2E1F44 /* libReactNativeShareExtension.a */; }; + E3AC971B20CFC24E00E1F671 /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB11A68108700A75B9A /* LaunchScreen.xib */; }; + E3AC971C20CFC24E00E1F671 /* Open Sans-Bold.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 4A299641E4CF4331B2E76706 /* Open Sans-Bold.ttf */; }; + E3AC971D20CFC24E00E1F671 /* Open Sans-BoldItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = A591808523974DE0BAEBFBDA /* Open Sans-BoldItalic.ttf */; }; + E3AC971E20CFC24E00E1F671 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = E31312CD20C78A36003A0744 /* Images.xcassets */; }; + E3AC971F20CFC24E00E1F671 /* Open Sans-ExtraBold.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 34C523EDB9FB44B9A8E29B25 /* Open Sans-ExtraBold.ttf */; }; + E3AC972020CFC24E00E1F671 /* Open Sans-ExtraBoldItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = F44B8E92B8FC4FB8B5C6DF9C /* Open Sans-ExtraBoldItalic.ttf */; }; + E3AC972120CFC24E00E1F671 /* Open Sans-Italic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 7B2D5DC7BC4445958B272EDF /* Open Sans-Italic.ttf */; }; + E3AC972220CFC24E00E1F671 /* Open Sans-Light.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 3025744944B44E25966DCC11 /* Open Sans-Light.ttf */; }; + E3AC972320CFC24E00E1F671 /* Open Sans-LightItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = ED7C08C6589445FF9977B66B /* Open Sans-LightItalic.ttf */; }; + E3AC972420CFC24E00E1F671 /* Open Sans-SemiBold.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 999A320D5ED249929845A10D /* Open Sans-SemiBold.ttf */; }; + E3AC972520CFC24E00E1F671 /* Open Sans-SemiBoldItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 0A186D3FEADC4BEA86D7950E /* Open Sans-SemiBoldItalic.ttf */; }; + E3AC972620CFC24E00E1F671 /* Open Sans.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 9AD9A2994AAB448DB214C956 /* Open Sans.ttf */; }; + E3AC972720CFC24E00E1F671 /* Entypo.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 4D40D6637ABB4534A12614E8 /* Entypo.ttf */; }; + E3AC972820CFC24E00E1F671 /* EvilIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = E978B2BEE9A6472CAB4D9256 /* EvilIcons.ttf */; }; + E3AC972920CFC24E00E1F671 /* Feather.ttf in Resources */ = {isa = PBXBuildFile; fileRef = C9116BF973C74EAF9305AEEF /* Feather.ttf */; }; + E3AC972A20CFC24E00E1F671 /* FontAwesome.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 601D47B063D840A8B6B13FDC /* FontAwesome.ttf */; }; + E3AC972B20CFC24E00E1F671 /* Foundation.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 88E27D2880A64EFA92DFBF81 /* Foundation.ttf */; }; + E3AC972C20CFC24E00E1F671 /* Ionicons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = FE6A7738F5BE45B99AEF397F /* Ionicons.ttf */; }; + E3AC972D20CFC24E00E1F671 /* MaterialCommunityIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 969425D94D6D41158C910618 /* MaterialCommunityIcons.ttf */; }; + E3AC972E20CFC24E00E1F671 /* MaterialIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = F344523023074AB493B29045 /* MaterialIcons.ttf */; }; + E3AC972F20CFC24E00E1F671 /* Octicons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 840F890C87A344A0A659EB96 /* Octicons.ttf */; }; + E3AC973020CFC24E00E1F671 /* SimpleLineIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = C771CB3F2F5C44E9BB41895E /* SimpleLineIcons.ttf */; }; + E3AC973120CFC24E00E1F671 /* Zocial.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 1AB435DFCB744DB88C9F9156 /* Zocial.ttf */; }; + E3AC973220CFC24E00E1F671 /* NixplayIcon.svg in Resources */ = {isa = PBXBuildFile; fileRef = 1454B95020AC4424A01F1D50 /* NixplayIcon.svg */; }; + E3AC973320CFC24E00E1F671 /* NixplayIcon.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 885D2FE25C8642E890745AC3 /* NixplayIcon.ttf */; }; + E3AC973420CFC24E00E1F671 /* NixplayIcon.woff in Resources */ = {isa = PBXBuildFile; fileRef = 48150F0C1C2A48089A0D689D /* NixplayIcon.woff */; }; + E3AC973820CFC24E00E1F671 /* MagShareExtension.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = E337472A20AD255E00017645 /* MagShareExtension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; + E3B6AD9220AD4B0B00359839 /* NixShareExtension.m in Sources */ = {isa = PBXBuildFile; fileRef = 4312F6582097036600975F09 /* NixShareExtension.m */; }; + E3B6AD9420AD4B2400359839 /* MainInterface.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 4312F64E2097033300975F09 /* MainInterface.storyboard */; }; + E3C119E620C77242007CD3BC /* NixShareExtension.m in Sources */ = {isa = PBXBuildFile; fileRef = 4312F6582097036600975F09 /* NixShareExtension.m */; }; + E3C119FF20C77242007CD3BC /* MainInterface.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 4312F64E2097033300975F09 /* MainInterface.storyboard */; }; + E3C11A4120C77691007CD3BC /* MagShareExtensionBeta.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = E3C11A0420C77242007CD3BC /* MagShareExtensionBeta.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; + E3C250C8230CFDDB009E4F8E /* StoreKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C5D8C54D230A5A5300A5D81E /* StoreKit.framework */; }; + E3C250C9230CFDF2009E4F8E /* StoreKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C5D8C54D230A5A5300A5D81E /* StoreKit.framework */; }; + E3C250CA230CFDF8009E4F8E /* StoreKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C5D8C54D230A5A5300A5D81E /* StoreKit.framework */; }; + E3C250CB230CFDFD009E4F8E /* StoreKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C5D8C54D230A5A5300A5D81E /* StoreKit.framework */; }; + E3C250CC230CFE0B009E4F8E /* StoreKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C5D8C54D230A5A5300A5D81E /* StoreKit.framework */; }; + E790C83C1FE641FEAF22902F /* Open Sans-Light.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 3025744944B44E25966DCC11 /* Open Sans-Light.ttf */; }; + ED3F16E6CF4249FCB3A716AC /* Open Sans.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 9AD9A2994AAB448DB214C956 /* Open Sans.ttf */; }; + F698C4C2B41A4864961A7DBB /* Feather.ttf in Resources */ = {isa = PBXBuildFile; fileRef = C9116BF973C74EAF9305AEEF /* Feather.ttf */; }; + F6BFC222379A453BA4D0D3B8 /* Open Sans-ExtraBoldItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = F44B8E92B8FC4FB8B5C6DF9C /* Open Sans-ExtraBoldItalic.ttf */; }; + FB33FE7EE6DA433A8086A87E /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AB19DCE374604582AA35709A /* SystemConfiguration.framework */; }; + FFDEA8C368FECFDF0B4F9341 /* libPods-MAAGAppQa.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 4A61C08FBE5E39AD4748144F /* libPods-MAAGAppQa.a */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 00E356F41AD99517003FC87E /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 13B07F861A680F5B00A75B9A; + remoteInfo = Nixplay; + }; + 2D02E4911E0B4A5D006451C7 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 2D02E47A1E0B4A5D006451C7; + remoteInfo = "Nixplay-tvOS"; + }; + E337473320AD255E00017645 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */; + proxyType = 1; + remoteGlobalIDString = E337472920AD255E00017645; + remoteInfo = NixShareExtension; + }; + E375D69720C69F150035FEC1 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */; + proxyType = 1; + remoteGlobalIDString = E375D67120C69E280035FEC1; + remoteInfo = NixShareExtensionQa; + }; + E375D70720C76D7B0035FEC1 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */; + proxyType = 1; + remoteGlobalIDString = E375D6E420C76D350035FEC1; + remoteInfo = NixShareExtensionAlpha; + }; + E3AC96F920CFC24E00E1F671 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */; + proxyType = 1; + remoteGlobalIDString = E337472920AD255E00017645; + remoteInfo = NixShareExtension; + }; + E3C11A4220C77691007CD3BC /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */; + proxyType = 1; + remoteGlobalIDString = E3C119E420C77242007CD3BC; + remoteInfo = NixShareExtensionBeta; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 437CADBA2091E16300EB0E93 /* Embed App Extensions */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 13; + files = ( + E337473520AD255E00017645 /* MagShareExtension.appex in Embed App Extensions */, + ); + name = "Embed App Extensions"; + runOnlyForDeploymentPostprocessing = 0; + }; + 5140529023C65E00000EFDDD /* Embed App Extensions */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 13; + files = ( + ); + name = "Embed App Extensions"; + runOnlyForDeploymentPostprocessing = 0; + }; + E375D69920C69F160035FEC1 /* Embed App Extensions */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 13; + files = ( + E375D69620C69F150035FEC1 /* MagShareExtensionQa.appex in Embed App Extensions */, + ); + name = "Embed App Extensions"; + runOnlyForDeploymentPostprocessing = 0; + }; + E375D70920C76D7B0035FEC1 /* Embed App Extensions */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 13; + files = ( + E375D70620C76D7B0035FEC1 /* MagShareExtensionAlpha.appex in Embed App Extensions */, + ); + name = "Embed App Extensions"; + runOnlyForDeploymentPostprocessing = 0; + }; + E3AC973720CFC24E00E1F671 /* Embed App Extensions */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 13; + files = ( + E3AC973820CFC24E00E1F671 /* MagShareExtension.appex in Embed App Extensions */, + ); + name = "Embed App Extensions"; + runOnlyForDeploymentPostprocessing = 0; + }; + E3C11A4420C77691007CD3BC /* Embed App Extensions */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 13; + files = ( + E3C11A4120C77691007CD3BC /* MagShareExtensionBeta.appex in Embed App Extensions */, + ); + name = "Embed App Extensions"; + runOnlyForDeploymentPostprocessing = 0; + }; + F5045B6921F9D3910070A6AE /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 0031DB52D36000599F22EBDD /* Pods-Nixplay-tvOSTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Nixplay-tvOSTests.release.xcconfig"; path = "Target Support Files/Pods-Nixplay-tvOSTests/Pods-Nixplay-tvOSTests.release.xcconfig"; sourceTree = ""; }; + 008F07F21AC5B25A0029DE68 /* main.jsbundle */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = main.jsbundle; sourceTree = ""; }; + 00D16586BF8B643DFE94AD18 /* Pods-MAAGApp.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MAAGApp.release.xcconfig"; path = "Target Support Files/Pods-MAAGApp/Pods-MAAGApp.release.xcconfig"; sourceTree = ""; }; + 00E356EE1AD99517003FC87E /* MAAGAppTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = MAAGAppTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 00E356F11AD99517003FC87E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 00E356F21AD99517003FC87E /* NixplayTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = NixplayTests.m; sourceTree = ""; }; + 077DCE3F21D3083E0021AC80 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/MainInterface.strings; sourceTree = ""; }; + 077DCE5021D30C9A0021AC80 /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/Localizable.strings; sourceTree = ""; }; + 077DCE5121D30D010021AC80 /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/MainInterface.strings; sourceTree = ""; }; + 07FD4C9E21CCDBB500B6C7CB /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = ""; }; + 08486E5D55B26F464929B8BB /* Pods-MagShareExtensionBeta.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MagShareExtensionBeta.debug.xcconfig"; path = "Target Support Files/Pods-MagShareExtensionBeta/Pods-MagShareExtensionBeta.debug.xcconfig"; sourceTree = ""; }; + 0919231C945C4EA38600AACC /* libRNFirebase.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRNFirebase.a; sourceTree = ""; }; + 0A186D3FEADC4BEA86D7950E /* Open Sans-SemiBoldItalic.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "Open Sans-SemiBoldItalic.ttf"; path = "../src/fonts/Open Sans-SemiBoldItalic.ttf"; sourceTree = ""; }; + 0FE36934274F341B911AF990 /* Pods-NixplayTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NixplayTests.release.xcconfig"; path = "Target Support Files/Pods-NixplayTests/Pods-NixplayTests.release.xcconfig"; sourceTree = ""; }; + 13B07F961A680F5B00A75B9A /* MAAGApp.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = MAAGApp.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 13B07FAF1A68108700A75B9A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = Nixplay/AppDelegate.h; sourceTree = ""; }; + 13B07FB01A68108700A75B9A /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AppDelegate.m; path = Nixplay/AppDelegate.m; sourceTree = ""; }; + 13B07FB21A68108700A75B9A /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/LaunchScreen.xib; sourceTree = ""; }; + 13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = Nixplay/Info.plist; sourceTree = ""; }; + 13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = Nixplay/main.m; sourceTree = ""; }; + 1454B95020AC4424A01F1D50 /* NixplayIcon.svg */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = NixplayIcon.svg; path = "../node_modules/nixplay-ui-kit/src/statics/nixplay-icon/fonts/NixplayIcon.svg"; sourceTree = ""; }; + 146FAFD52E38D471A08513DC /* Pods-NixShareExtensionRnd.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NixShareExtensionRnd.release.xcconfig"; path = "Target Support Files/Pods-NixShareExtensionRnd/Pods-NixShareExtensionRnd.release.xcconfig"; sourceTree = ""; }; + 1677FFBDF901278E1125FF2A /* Pods-NixplayAlpha.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NixplayAlpha.debug.xcconfig"; path = "Target Support Files/Pods-NixplayAlpha/Pods-NixplayAlpha.debug.xcconfig"; sourceTree = ""; }; + 192A1559DC16FA93E41BC671 /* Pods-MAAGApp-tvOS.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MAAGApp-tvOS.debug.xcconfig"; path = "Target Support Files/Pods-MAAGApp-tvOS/Pods-MAAGApp-tvOS.debug.xcconfig"; sourceTree = ""; }; + 1AB435DFCB744DB88C9F9156 /* Zocial.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Zocial.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Zocial.ttf"; sourceTree = ""; }; + 1B388EA30E07B150E2ED34A3 /* Pods-MagShareExtension.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MagShareExtension.debug.xcconfig"; path = "Target Support Files/Pods-MagShareExtension/Pods-MagShareExtension.debug.xcconfig"; sourceTree = ""; }; + 21DB4428CC1473F2B893B2E7 /* Pods-NixShareExtension.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NixShareExtension.release.xcconfig"; path = "Target Support Files/Pods-NixShareExtension/Pods-NixShareExtension.release.xcconfig"; sourceTree = ""; }; + 23217D9EE06BF5F6F18638ED /* Pods-MAAGAppProd.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MAAGAppProd.debug.xcconfig"; path = "Target Support Files/Pods-MAAGAppProd/Pods-MAAGAppProd.debug.xcconfig"; sourceTree = ""; }; + 25537A81387E4166E35657AD /* libPods-MAAGAppTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-MAAGAppTests.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + 264F7AF4E4871D1458CD61F7 /* Pods-NixplayAlpha.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NixplayAlpha.release.xcconfig"; path = "Target Support Files/Pods-NixplayAlpha/Pods-NixplayAlpha.release.xcconfig"; sourceTree = ""; }; + 2763B92A4C3F0AACDA6AEE84 /* Pods-Nixplay.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Nixplay.release.xcconfig"; path = "Target Support Files/Pods-Nixplay/Pods-Nixplay.release.xcconfig"; sourceTree = ""; }; + 2AF15F46AD77FD1A4939FEC0 /* libPods-MAAGAppBeta.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-MAAGAppBeta.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + 2B23EE2B48304B4D9B7DEC03 /* libRNCreedonImagepicker.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRNCreedonImagepicker.a; sourceTree = ""; }; + 2C69A46257F868C95FF74123 /* Pods-MagShareExtensionRnd.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MagShareExtensionRnd.release.xcconfig"; path = "Target Support Files/Pods-MagShareExtensionRnd/Pods-MagShareExtensionRnd.release.xcconfig"; sourceTree = ""; }; + 2CC1161D34005277BB714061 /* Pods-Nixplay-tvOS.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Nixplay-tvOS.debug.xcconfig"; path = "Target Support Files/Pods-Nixplay-tvOS/Pods-Nixplay-tvOS.debug.xcconfig"; sourceTree = ""; }; + 2D02E47B1E0B4A5D006451C7 /* MAAGApp-tvOS.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "MAAGApp-tvOS.app"; sourceTree = BUILT_PRODUCTS_DIR; }; + 2D02E4901E0B4A5D006451C7 /* MAAGApp-tvOSTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "MAAGApp-tvOSTests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; + 2D16E6891FA4F8E400B85C8A /* libReact.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libReact.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 2D9C8DCAB1DF23722D39C934 /* Pods-MagShareExtension.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MagShareExtension.release.xcconfig"; path = "Target Support Files/Pods-MagShareExtension/Pods-MagShareExtension.release.xcconfig"; sourceTree = ""; }; + 2F0AF37CAFFEC647BDE643E4 /* Pods-NixShareExtensionRnd.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NixShareExtensionRnd.debug.xcconfig"; path = "Target Support Files/Pods-NixShareExtensionRnd/Pods-NixShareExtensionRnd.debug.xcconfig"; sourceTree = ""; }; + 3025744944B44E25966DCC11 /* Open Sans-Light.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "Open Sans-Light.ttf"; path = "../src/fonts/Open Sans-Light.ttf"; sourceTree = ""; }; + 32920DD0D49B173B01C92211 /* libPods-MAAGAppRnd.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-MAAGAppRnd.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + 3317464B6647427299C99552 /* libPods-MagShareExtensionAlpha.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-MagShareExtensionAlpha.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + 34C523EDB9FB44B9A8E29B25 /* Open Sans-ExtraBold.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "Open Sans-ExtraBold.ttf"; path = "../src/fonts/Open Sans-ExtraBold.ttf"; sourceTree = ""; }; + 36BAF30DC6D2EA54E6AB8458 /* Pods-NixplayQa.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NixplayQa.debug.xcconfig"; path = "Target Support Files/Pods-NixplayQa/Pods-NixplayQa.debug.xcconfig"; sourceTree = ""; }; + 387AD6925460EF3DAAA7E5A9 /* Pods-NixShareExtension.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NixShareExtension.debug.xcconfig"; path = "Target Support Files/Pods-NixShareExtension/Pods-NixShareExtension.debug.xcconfig"; sourceTree = ""; }; + 38DB33393A6A85E0DD518DF1 /* libPods-MAAGApp-tvOS.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-MAAGApp-tvOS.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + 3999474027B13D354EF1EB3A /* libPods-MagShareExtensionRnd.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-MagShareExtensionRnd.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + 3B444EF5D95D58BB99437D91 /* Pods-MAAGAppQa.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MAAGAppQa.release.xcconfig"; path = "Target Support Files/Pods-MAAGAppQa/Pods-MAAGAppQa.release.xcconfig"; sourceTree = ""; }; + 3D0885EA117AA45D747146C1 /* Pods-MAAGAppBeta.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MAAGAppBeta.debug.xcconfig"; path = "Target Support Files/Pods-MAAGAppBeta/Pods-MAAGAppBeta.debug.xcconfig"; sourceTree = ""; }; + 4312F64F2097033300975F09 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/MainInterface.storyboard; sourceTree = ""; }; + 4312F6512097033300975F09 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 4312F6582097036600975F09 /* NixShareExtension.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = NixShareExtension.m; sourceTree = ""; }; + 437CADBF2091E38F00EB0E93 /* libSDWebImage iOS static.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = "libSDWebImage iOS static.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + 437CADC02091E38F00EB0E93 /* libSDWebImage watchOS static.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = "libSDWebImage watchOS static.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + 45AE8E01729B523EEFC62A4C /* Pods-MAAGApp-tvOSTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MAAGApp-tvOSTests.debug.xcconfig"; path = "Target Support Files/Pods-MAAGApp-tvOSTests/Pods-MAAGApp-tvOSTests.debug.xcconfig"; sourceTree = ""; }; + 48150F0C1C2A48089A0D689D /* NixplayIcon.woff */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = NixplayIcon.woff; path = "../node_modules/nixplay-ui-kit/src/statics/nixplay-icon/fonts/NixplayIcon.woff"; sourceTree = ""; }; + 4A299641E4CF4331B2E76706 /* Open Sans-Bold.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "Open Sans-Bold.ttf"; path = "../src/fonts/Open Sans-Bold.ttf"; sourceTree = ""; }; + 4A61C08FBE5E39AD4748144F /* libPods-MAAGAppQa.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-MAAGAppQa.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + 4AEC2F2ED39E2A705E03CD38 /* Pods-NixplayProd.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NixplayProd.debug.xcconfig"; path = "Target Support Files/Pods-NixplayProd/Pods-NixplayProd.debug.xcconfig"; sourceTree = ""; }; + 4C21D99FD34C42E8BC8EE3D9 /* SafariServices.framework */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = wrapper.framework; name = SafariServices.framework; path = System/Library/Frameworks/SafariServices.framework; sourceTree = SDKROOT; }; + 4D40D6637ABB4534A12614E8 /* Entypo.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Entypo.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Entypo.ttf"; sourceTree = ""; }; + 501874915488C3B18BC243C9 /* Pods-MAAGAppAlpha.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MAAGAppAlpha.debug.xcconfig"; path = "Target Support Files/Pods-MAAGAppAlpha/Pods-MAAGAppAlpha.debug.xcconfig"; sourceTree = ""; }; + 510671B123D4BBB000E9B046 /* libreact-native-nixplay-core.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = "libreact-native-nixplay-core.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + 510CC8FF23C64F8600D111DC /* libReactNativeShareExtension.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libReactNativeShareExtension.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 510CC92223C654F700D111DC /* libReactNativeShareExtension.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libReactNativeShareExtension.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 512A31BA23D433E4008F501D /* libReactNativeAppsee.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libReactNativeAppsee.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 512CD4ED23D4536200F1160B /* libAppDelegate.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libAppDelegate.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 512CD4F123D4587C00F1160B /* libAppDelegate.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libAppDelegate.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 513029EB23C65F5C006C5259 /* libReactNativeShareExtension.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libReactNativeShareExtension.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 5140527C23C658C2000EFDDD /* libReactNativeShareExtension.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libReactNativeShareExtension.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 5140528723C65D91000EFDDD /* libReactNativeShareExtension.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libReactNativeShareExtension.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 5140528923C65DA3000EFDDD /* libReactNativeShareExtension.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libReactNativeShareExtension.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 5140528B23C65DE5000EFDDD /* libReactNativeShareExtension.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libReactNativeShareExtension.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 5140529123C65E67000EFDDD /* libReactNativeShareExtension.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libReactNativeShareExtension.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 5148512323C3A10900411F22 /* libAFNetworking.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libAFNetworking.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 5148514323C3A1FE00411F22 /* libFileMD5Hash.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libFileMD5Hash.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 5148515723C3A21900411F22 /* libReactNativeShareExtension.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libReactNativeShareExtension.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 5148515923C3A2AA00411F22 /* libReactNativeShareExtension.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libReactNativeShareExtension.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 5148515B23C3A32500411F22 /* libReactNativeShareExtension.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libReactNativeShareExtension.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 5148515D23C3A38B00411F22 /* libReactNativeShareExtension.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libReactNativeShareExtension.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 5148515F23C3A3DA00411F22 /* libReactNativeShareExtension.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libReactNativeShareExtension.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 514FCD3F23D45D8300955945 /* libreact-native-nixplay-core.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = "libreact-native-nixplay-core.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + 514FCD4323D45D8F00955945 /* libNixNetwork.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libNixNetwork.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 5150AE5523D0CFE8004B6C81 /* libReactNativeAppsee.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libReactNativeAppsee.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 5155924323C6472600F6B985 /* libReactNativeShareExtension.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libReactNativeShareExtension.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 5155925723C648E000F6B985 /* libReactNativeShareExtension.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libReactNativeShareExtension.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 5166053E23C66D6F00B170EA /* libRNFirebase.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libRNFirebase.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 5166054023C66DA400B170EA /* libRNFirebase.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libRNFirebase.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 5166054223C66DB700B170EA /* libreact-native-fujifilm-spa-sdk.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = "libreact-native-fujifilm-spa-sdk.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + 5166054423C66E5500B170EA /* libRNGoogleSignin.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libRNGoogleSignin.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 516A71B62358694E0048D077 /* libRNReanimated.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libRNReanimated.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 517A5D9523C626FE00E96F9F /* libreact-native-nixplay-core.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = "libreact-native-nixplay-core.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + 517A5D9723C6270800E96F9F /* libNixNetwork.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libNixNetwork.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 517A5DD723C628CE00E96F9F /* libReactNativeShareExtension.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libReactNativeShareExtension.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 517A5DEB23C62B4100E96F9F /* libAFNetworking.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libAFNetworking.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 517A5E0E23C6351A00E96F9F /* libReactNativeShareExtension.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libReactNativeShareExtension.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 517A5E1023C6397B00E96F9F /* libReactNativeShareExtension.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libReactNativeShareExtension.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 517A5E1923C63AB100E96F9F /* libReactNativeShareExtension.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libReactNativeShareExtension.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 517A5E2B23C63E4B00E96F9F /* libReactNativeShareExtension.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libReactNativeShareExtension.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 517A5E4023C63EFB00E96F9F /* libReactNativeShareExtension.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libReactNativeShareExtension.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 517A5E4223C63F5B00E96F9F /* libReactNativeShareExtension.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libReactNativeShareExtension.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 517A5E7423C6441D00E96F9F /* libSDWebImage.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libSDWebImage.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 517A5E7623C6443E00E96F9F /* libNixNetwork.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libNixNetwork.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 517A5E7823C6445500E96F9F /* libReact-Core.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = "libReact-Core.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + 517A5E7C23C6450100E96F9F /* libReactNativeShareExtension.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libReactNativeShareExtension.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 517E62DE23C5774E000552BA /* libReactNativeShareExtension.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libReactNativeShareExtension.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 517E62FE23C621E1000552BA /* libAFNetworking.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libAFNetworking.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 517E631223C6220A000552BA /* libAFNetworking.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libAFNetworking.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 517E631423C622BD000552BA /* libReactNativeShareExtension.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libReactNativeShareExtension.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 518CCDD623C3AD9000A557A1 /* libReactNativeShareExtension.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libReactNativeShareExtension.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 518CF9DA23D45C120055FF5B /* libNixNetwork.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libNixNetwork.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 518EE82623D4B328006BC630 /* libreact-native-creedon-imagepicker.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = "libreact-native-creedon-imagepicker.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + 5195BCE623C6257100F9364E /* libAFNetworking.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libAFNetworking.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 51BD0F8B23DA14A40028E4B1 /* Photos.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Photos.framework; path = System/Library/Frameworks/Photos.framework; sourceTree = SDKROOT; }; + 51C7DF0F23C3A72D00550073 /* libreact-native-config.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = "libreact-native-config.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + 51C7DF1123C3A78500550073 /* libNixNetwork.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libNixNetwork.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 51C7DF1323C3A79500550073 /* libSDAVAssetExportSession.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libSDAVAssetExportSession.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 51C7DF1523C3A7A100550073 /* libTPKeyboardAvoiding.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libTPKeyboardAvoiding.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 51C7DF1723C3A7B400550073 /* libReactNativeShareExtension.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libReactNativeShareExtension.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 51DCE2E923D445D5008D66A0 /* Appsee.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Appsee.a; path = Pods/ReactNativeAppsee/ios/Appsee.a; sourceTree = ""; }; + 51DCE2EC23D445D5008D66A0 /* AppseeReactNativeExtension.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = AppseeReactNativeExtension.a; path = Pods/ReactNativeAppsee/ios/AppseeReactNativeExtension.a; sourceTree = ""; }; + 51E0E30923D4342C000D1BB9 /* libReactNativeAppsee.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libReactNativeAppsee.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 51E0F1712400278D007CE421 /* libReactNativeShareExtension.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libReactNativeShareExtension.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 51E0F1732400289B007CE421 /* libReactNativeShareExtension.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libReactNativeShareExtension.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 51E0F17524002BAD007CE421 /* libReactNativeAppsee.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libReactNativeAppsee.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 51EFE2C023C679C1003AD18D /* libReact-Core-439350c1.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = "libReact-Core-439350c1.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + 51EFE2C223C67A1F003AD18D /* libc++.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = "libc++.tbd"; path = "usr/lib/libc++.tbd"; sourceTree = SDKROOT; }; + 51EFE2C423C67A25003AD18D /* libz.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libz.tbd; path = usr/lib/libz.tbd; sourceTree = SDKROOT; }; + 51EFE2CA23C67B5A003AD18D /* libreact-native-fujifilm-spa-sdk.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = "libreact-native-fujifilm-spa-sdk.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + 51EFE2CC23C67B81003AD18D /* libReact-Core-439350c1.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = "libReact-Core-439350c1.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + 51F0D68423C66A660013DC1A /* libreact-native-nixplay-core.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = "libreact-native-nixplay-core.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + 51F0D68623C66A810013DC1A /* libreact-native-nixplay-core.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = "libreact-native-nixplay-core.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + 51F694C523C5682D0041B00A /* libReactNativeShareExtension.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libReactNativeShareExtension.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 535BEA5B1A5A63268B9810C4 /* Pods-MagShareExtensionAlpha.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MagShareExtensionAlpha.release.xcconfig"; path = "Target Support Files/Pods-MagShareExtensionAlpha/Pods-MagShareExtensionAlpha.release.xcconfig"; sourceTree = ""; }; + 573AE4D78319E9722AB3C35D /* Pods-MAAGAppQa.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MAAGAppQa.debug.xcconfig"; path = "Target Support Files/Pods-MAAGAppQa/Pods-MAAGAppQa.debug.xcconfig"; sourceTree = ""; }; + 580A8398533DC76C399D4E5A /* Pods-MagShareExtensionQa.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MagShareExtensionQa.debug.xcconfig"; path = "Target Support Files/Pods-MagShareExtensionQa/Pods-MagShareExtensionQa.debug.xcconfig"; sourceTree = ""; }; + 5A7C371D87E3DAD2A1AB4719 /* Pods-NixplayQa.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NixplayQa.release.xcconfig"; path = "Target Support Files/Pods-NixplayQa/Pods-NixplayQa.release.xcconfig"; sourceTree = ""; }; + 5E86F034860C4ACA82E051EB /* libReactNativeNavigation.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libReactNativeNavigation.a; sourceTree = ""; }; + 5F338B50A2BF65491C0EE0B0 /* Pods-MAAGApp-tvOSTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MAAGApp-tvOSTests.release.xcconfig"; path = "Target Support Files/Pods-MAAGApp-tvOSTests/Pods-MAAGApp-tvOSTests.release.xcconfig"; sourceTree = ""; }; + 601D47B063D840A8B6B13FDC /* FontAwesome.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = FontAwesome.ttf; path = "../node_modules/react-native-vector-icons/Fonts/FontAwesome.ttf"; sourceTree = ""; }; + 667D2DD17D47ABF1CA968453 /* libPods-MAAGAppAlpha.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-MAAGAppAlpha.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + 66B7BB60BC9121574411B750 /* Pods-MagShareExtensionBeta.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MagShareExtensionBeta.release.xcconfig"; path = "Target Support Files/Pods-MagShareExtensionBeta/Pods-MagShareExtensionBeta.release.xcconfig"; sourceTree = ""; }; + 66E8D4679CEEA74BC14DF03C /* Pods-NixplayRnd.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NixplayRnd.debug.xcconfig"; path = "Target Support Files/Pods-NixplayRnd/Pods-NixplayRnd.debug.xcconfig"; sourceTree = ""; }; + 673C749C6C58DC7ECC14804E /* Pods-MAAGAppTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MAAGAppTests.debug.xcconfig"; path = "Target Support Files/Pods-MAAGAppTests/Pods-MAAGAppTests.debug.xcconfig"; sourceTree = ""; }; + 6ADD60E8476B4E97B2B83F4E /* libRNThumbnail.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRNThumbnail.a; sourceTree = ""; }; + 6EC21FA43F8BB96D8254773F /* libPods-MagShareExtensionBeta.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-MagShareExtensionBeta.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + 71A7426CCEE7A34122ADA19F /* libPods-MAAGAppProd.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-MAAGAppProd.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + 730A71DD73F9F1C4CC682B0A /* Pods-MAAGAppRnd.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MAAGAppRnd.debug.xcconfig"; path = "Target Support Files/Pods-MAAGAppRnd/Pods-MAAGAppRnd.debug.xcconfig"; sourceTree = ""; }; + 743D9BEFFE2225F7E20D8FEA /* libPods-MAAGApp.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-MAAGApp.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + 7775486BE93AF557A09A398A /* Pods-NixplayRnd.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NixplayRnd.release.xcconfig"; path = "Target Support Files/Pods-NixplayRnd/Pods-NixplayRnd.release.xcconfig"; sourceTree = ""; }; + 7AD481CA268E44D29814D420 /* libRNSafeArea.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRNSafeArea.a; sourceTree = ""; }; + 7B2D5DC7BC4445958B272EDF /* Open Sans-Italic.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "Open Sans-Italic.ttf"; path = "../src/fonts/Open Sans-Italic.ttf"; sourceTree = ""; }; + 7D33B33BC2F9E44ED9F872FA /* Pods-Nixplay.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Nixplay.debug.xcconfig"; path = "Target Support Files/Pods-Nixplay/Pods-Nixplay.debug.xcconfig"; sourceTree = ""; }; + 840F890C87A344A0A659EB96 /* Octicons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Octicons.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Octicons.ttf"; sourceTree = ""; }; + 84620BDBE75B0FC94DFDD481 /* Pods-NixShareExtensionBeta.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NixShareExtensionBeta.debug.xcconfig"; path = "Target Support Files/Pods-NixShareExtensionBeta/Pods-NixShareExtensionBeta.debug.xcconfig"; sourceTree = ""; }; + 858A4D4A23E2ACF0003BA966 /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = ja.lproj/LaunchScreen.strings; sourceTree = ""; }; + 858A4D4B23E2ACF0003BA966 /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = ja.lproj/MainInterface.strings; sourceTree = ""; }; + 858A4D4C23E2ACF0003BA966 /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = ja.lproj/InfoPList.strings; sourceTree = ""; }; + 858A4D4D23E2ACF0003BA966 /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = ja.lproj/Localizable.strings; sourceTree = ""; }; + 85FF58E08D543C141BD4E9CC /* Pods-NixplayBeta.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NixplayBeta.debug.xcconfig"; path = "Target Support Files/Pods-NixplayBeta/Pods-NixplayBeta.debug.xcconfig"; sourceTree = ""; }; + 8756E9EA15991360D624F896 /* Pods-MagShareExtensionAlpha.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MagShareExtensionAlpha.debug.xcconfig"; path = "Target Support Files/Pods-MagShareExtensionAlpha/Pods-MagShareExtensionAlpha.debug.xcconfig"; sourceTree = ""; }; + 885D2FE25C8642E890745AC3 /* NixplayIcon.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = NixplayIcon.ttf; path = "../node_modules/nixplay-ui-kit/src/statics/nixplay-icon/fonts/NixplayIcon.ttf"; sourceTree = ""; }; + 88E27D2880A64EFA92DFBF81 /* Foundation.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Foundation.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Foundation.ttf"; sourceTree = ""; }; + 8B9A326E00A076FF65A79931 /* Pods-MagShareExtensionRnd.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MagShareExtensionRnd.debug.xcconfig"; path = "Target Support Files/Pods-MagShareExtensionRnd/Pods-MagShareExtensionRnd.debug.xcconfig"; sourceTree = ""; }; + 8BE1800DC08A538CF1A94AE1 /* Pods-MAAGAppBeta.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MAAGAppBeta.release.xcconfig"; path = "Target Support Files/Pods-MAAGAppBeta/Pods-MAAGAppBeta.release.xcconfig"; sourceTree = ""; }; + 90BEE13CDD2FF25C5459AD4B /* Pods-NixShareExtensionAlpha.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NixShareExtensionAlpha.release.xcconfig"; path = "Target Support Files/Pods-NixShareExtensionAlpha/Pods-NixShareExtensionAlpha.release.xcconfig"; sourceTree = ""; }; + 9297E7E25F8C4770B640D6C0 /* libInteractable.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libInteractable.a; sourceTree = ""; }; + 9625582BC091B25191657DCD /* Pods-NixShareExtensionQa.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NixShareExtensionQa.release.xcconfig"; path = "Target Support Files/Pods-NixShareExtensionQa/Pods-NixShareExtensionQa.release.xcconfig"; sourceTree = ""; }; + 9633D9B4472CA4B20F29C0A9 /* Pods-MAAGAppProd.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MAAGAppProd.release.xcconfig"; path = "Target Support Files/Pods-MAAGAppProd/Pods-MAAGAppProd.release.xcconfig"; sourceTree = ""; }; + 969425D94D6D41158C910618 /* MaterialCommunityIcons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = MaterialCommunityIcons.ttf; path = "../node_modules/react-native-vector-icons/Fonts/MaterialCommunityIcons.ttf"; sourceTree = ""; }; + 9975DD8DE08C9242C3D5CE62 /* Pods-MAAGAppTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MAAGAppTests.release.xcconfig"; path = "Target Support Files/Pods-MAAGAppTests/Pods-MAAGAppTests.release.xcconfig"; sourceTree = ""; }; + 9988B169652146CAB7BC49CA /* AddressBook.framework */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = wrapper.framework; name = AddressBook.framework; path = System/Library/Frameworks/AddressBook.framework; sourceTree = SDKROOT; }; + 999A320D5ED249929845A10D /* Open Sans-SemiBold.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "Open Sans-SemiBold.ttf"; path = "../src/fonts/Open Sans-SemiBold.ttf"; sourceTree = ""; }; + 9AD9A2994AAB448DB214C956 /* Open Sans.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "Open Sans.ttf"; path = "../src/fonts/Open Sans.ttf"; sourceTree = ""; }; + 9DFF8AC33E53F1E28EB6FF73 /* Pods-NixShareExtensionBeta.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NixShareExtensionBeta.release.xcconfig"; path = "Target Support Files/Pods-NixShareExtensionBeta/Pods-NixShareExtensionBeta.release.xcconfig"; sourceTree = ""; }; + A26700EBE78A464F81D3E4C6 /* libRNAppsee.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRNAppsee.a; sourceTree = ""; }; + A2F6023EBC334DD8C24892A7 /* libPods-MAAGApp-tvOSTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-MAAGApp-tvOSTests.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + A591808523974DE0BAEBFBDA /* Open Sans-BoldItalic.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "Open Sans-BoldItalic.ttf"; path = "../src/fonts/Open Sans-BoldItalic.ttf"; sourceTree = ""; }; + A6EE7AFE33A053F54380387C /* libPods-MagShareExtensionQa.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-MagShareExtensionQa.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + AB19DCE374604582AA35709A /* SystemConfiguration.framework */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = System/Library/Frameworks/SystemConfiguration.framework; sourceTree = SDKROOT; }; + B299EF6F93804ED88C2E1F44 /* libReactNativeShareExtension.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libReactNativeShareExtension.a; sourceTree = ""; }; + B92D6031EFA9465FBC117E2E /* FontAwesome5_Solid.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = FontAwesome5_Solid.ttf; path = "../node_modules/react-native-vector-icons/Fonts/FontAwesome5_Solid.ttf"; sourceTree = ""; }; + B97C056C8AFC4A668DA46F71 /* FontAwesome5_Brands.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = FontAwesome5_Brands.ttf; path = "../node_modules/react-native-vector-icons/Fonts/FontAwesome5_Brands.ttf"; sourceTree = ""; }; + B9C125BC5A304F2009D948D8 /* Pods-NixplayProd.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NixplayProd.release.xcconfig"; path = "Target Support Files/Pods-NixplayProd/Pods-NixplayProd.release.xcconfig"; sourceTree = ""; }; + C5029392F06741B8856B6548 /* FontAwesome5_Regular.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = FontAwesome5_Regular.ttf; path = "../node_modules/react-native-vector-icons/Fonts/FontAwesome5_Regular.ttf"; sourceTree = ""; }; + C5D8C54D230A5A5300A5D81E /* StoreKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = StoreKit.framework; path = System/Library/Frameworks/StoreKit.framework; sourceTree = SDKROOT; }; + C771CB3F2F5C44E9BB41895E /* SimpleLineIcons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = SimpleLineIcons.ttf; path = "../node_modules/react-native-vector-icons/Fonts/SimpleLineIcons.ttf"; sourceTree = ""; }; + C9116BF973C74EAF9305AEEF /* Feather.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Feather.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Feather.ttf"; sourceTree = ""; }; + CEC6DFA1AA2E4F9096376697 /* libRNVectorIcons.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRNVectorIcons.a; sourceTree = ""; }; + D193D130E20742019BCF07D8 /* libRNVideoTrimmer.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRNVideoTrimmer.a; sourceTree = ""; }; + D1A9A8E0117601A98A38D4A9 /* Pods-MAAGApp-tvOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MAAGApp-tvOS.release.xcconfig"; path = "Target Support Files/Pods-MAAGApp-tvOS/Pods-MAAGApp-tvOS.release.xcconfig"; sourceTree = ""; }; + D28CB8C9D8CF8D7F50093434 /* Pods-Nixplay-tvOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Nixplay-tvOS.release.xcconfig"; path = "Target Support Files/Pods-Nixplay-tvOS/Pods-Nixplay-tvOS.release.xcconfig"; sourceTree = ""; }; + D2F3D4FE7C1DCE0AE62D1A03 /* Pods-MAAGAppAlpha.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MAAGAppAlpha.release.xcconfig"; path = "Target Support Files/Pods-MAAGAppAlpha/Pods-MAAGAppAlpha.release.xcconfig"; sourceTree = ""; }; + D413578E5EA64A5E95070B31 /* AntDesign.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = AntDesign.ttf; path = "../node_modules/react-native-vector-icons/Fonts/AntDesign.ttf"; sourceTree = ""; }; + D8ABB61B9E72F8A7C670425A /* libPods-MagShareExtension.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-MagShareExtension.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + E31312CD20C78A36003A0744 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = Nixplay/Images.xcassets; sourceTree = ""; }; + E337472A20AD255E00017645 /* MagShareExtension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = MagShareExtension.appex; sourceTree = BUILT_PRODUCTS_DIR; }; + E337475220AD2CC600017645 /* NixShareExtension.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = NixShareExtension.entitlements; sourceTree = ""; }; + E337475320AD2E7F00017645 /* Nixplay.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; name = Nixplay.entitlements; path = Nixplay/Nixplay.entitlements; sourceTree = ""; }; + E35751E9224B3AED00B814C0 /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; }; + E359AFC0221BDB6F009FCE1C /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPList.strings; sourceTree = ""; }; + E359AFC2221BDB73009FCE1C /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/InfoPList.strings; sourceTree = ""; }; + E3618948227801BD00E86DF9 /* GoogleService-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "GoogleService-Info.plist"; sourceTree = ""; }; + E361894A227801BD00E86DF9 /* GoogleService-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "GoogleService-Info.plist"; sourceTree = ""; }; + E361894C227801BD00E86DF9 /* GoogleService-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "GoogleService-Info.plist"; sourceTree = ""; }; + E361894E227801BD00E86DF9 /* GoogleService-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "GoogleService-Info.plist"; sourceTree = ""; }; + E3618950227801BD00E86DF9 /* GoogleService-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "GoogleService-Info.plist"; sourceTree = ""; }; + E3689A5121801DFD0056ABF4 /* ContainerViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ContainerViewController.h; sourceTree = ""; }; + E3689A5221801DFD0056ABF4 /* ContainerViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ContainerViewController.m; sourceTree = ""; }; + E3689A5321801DFD0056ABF4 /* ImageCaptionViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ImageCaptionViewController.h; sourceTree = ""; }; + E3689A5421801DFD0056ABF4 /* ImageCaptionViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ImageCaptionViewController.m; sourceTree = ""; }; + E3689A5521801DFD0056ABF4 /* ReceiverTableViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ReceiverTableViewController.h; sourceTree = ""; }; + E3689A5621801DFD0056ABF4 /* ReceiverTableViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ReceiverTableViewController.m; sourceTree = ""; }; + E3689C132180574E0056ABF4 /* NixShareExtension.rnd.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = NixShareExtension.rnd.entitlements; sourceTree = ""; }; + E3689C5F21805BE40056ABF4 /* Nixplay.rnd.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; name = Nixplay.rnd.entitlements; path = Nixplay/Nixplay.rnd.entitlements; sourceTree = ""; }; + E36C3B112147A56B00097C81 /* VideoTrimmerViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; name = VideoTrimmerViewController.xib; path = "../node_modules/react-native-video-trimmer/ios/VideoTrimmerViewController.xib"; sourceTree = ""; }; + E375D5B520C69A330035FEC1 /* MAAGAppQa.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = MAAGAppQa.app; sourceTree = BUILT_PRODUCTS_DIR; }; + E375D5F620C69C430035FEC1 /* Nixplay.qa.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; name = Nixplay.qa.entitlements; path = Nixplay/Nixplay.qa.entitlements; sourceTree = ""; }; + E375D69020C69E280035FEC1 /* MagShareExtensionQa.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = MagShareExtensionQa.appex; sourceTree = BUILT_PRODUCTS_DIR; }; + E375D69A20C69F5D0035FEC1 /* NixShareExtension.qa.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = NixShareExtension.qa.entitlements; sourceTree = ""; }; + E375D6E220C76C1F0035FEC1 /* MAAGAppAlpha.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = MAAGAppAlpha.app; sourceTree = BUILT_PRODUCTS_DIR; }; + E375D70420C76D350035FEC1 /* MagShareExtensionAlpha.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = MagShareExtensionAlpha.appex; sourceTree = BUILT_PRODUCTS_DIR; }; + E375D70A20C76DCF0035FEC1 /* Nixplay.alpha.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; name = Nixplay.alpha.entitlements; path = Nixplay/Nixplay.alpha.entitlements; sourceTree = ""; }; + E375D70B20C76E2F0035FEC1 /* NixShareExtension.alpha.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = NixShareExtension.alpha.entitlements; sourceTree = ""; }; + E375D76F20C770460035FEC1 /* Nixplay.beta.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; name = Nixplay.beta.entitlements; path = Nixplay/Nixplay.beta.entitlements; sourceTree = ""; }; + E375D7B520C770DA0035FEC1 /* MAAGAppBeta.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = MAAGAppBeta.app; sourceTree = BUILT_PRODUCTS_DIR; }; + E3858769215C723500625D49 /* MAAGAppRnd.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = MAAGAppRnd.app; sourceTree = BUILT_PRODUCTS_DIR; }; + E3AC973D20CFC24E00E1F671 /* MAAGAppProd.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = MAAGAppProd.app; sourceTree = BUILT_PRODUCTS_DIR; }; + E3AC992D20CFDB6F00E1F671 /* NixShareExtension.beta.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = NixShareExtension.beta.entitlements; sourceTree = ""; }; + E3ADEFDF229CDCCF00EB41DC /* libRNSVG.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libRNSVG.a; sourceTree = BUILT_PRODUCTS_DIR; }; + E3C11A0420C77242007CD3BC /* MagShareExtensionBeta.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = MagShareExtensionBeta.appex; sourceTree = BUILT_PRODUCTS_DIR; }; + E60B57C32AC6C98217057314 /* Pods-MAAGAppRnd.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MAAGAppRnd.release.xcconfig"; path = "Target Support Files/Pods-MAAGAppRnd/Pods-MAAGAppRnd.release.xcconfig"; sourceTree = ""; }; + E70CA087BABCD40183F85B65 /* Pods-MAAGApp.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MAAGApp.debug.xcconfig"; path = "Target Support Files/Pods-MAAGApp/Pods-MAAGApp.debug.xcconfig"; sourceTree = ""; }; + E8FFFA016286EF8FE914A632 /* Pods-NixShareExtensionQa.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NixShareExtensionQa.debug.xcconfig"; path = "Target Support Files/Pods-NixShareExtensionQa/Pods-NixShareExtensionQa.debug.xcconfig"; sourceTree = ""; }; + E978B2BEE9A6472CAB4D9256 /* EvilIcons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = EvilIcons.ttf; path = "../node_modules/react-native-vector-icons/Fonts/EvilIcons.ttf"; sourceTree = ""; }; + ECF4A972C962452FEE8F09C2 /* Pods-Nixplay-tvOSTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Nixplay-tvOSTests.debug.xcconfig"; path = "Target Support Files/Pods-Nixplay-tvOSTests/Pods-Nixplay-tvOSTests.debug.xcconfig"; sourceTree = ""; }; + ED7C08C6589445FF9977B66B /* Open Sans-LightItalic.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "Open Sans-LightItalic.ttf"; path = "../src/fonts/Open Sans-LightItalic.ttf"; sourceTree = ""; }; + F2F3C6CC7E834164A3B1FEE9 /* libFastImage.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libFastImage.a; sourceTree = ""; }; + F344523023074AB493B29045 /* MaterialIcons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = MaterialIcons.ttf; path = "../node_modules/react-native-vector-icons/Fonts/MaterialIcons.ttf"; sourceTree = ""; }; + F44B8E92B8FC4FB8B5C6DF9C /* Open Sans-ExtraBoldItalic.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "Open Sans-ExtraBoldItalic.ttf"; path = "../src/fonts/Open Sans-ExtraBoldItalic.ttf"; sourceTree = ""; }; + F61E1F06EF36A12C5BA79BE1 /* Pods-NixplayTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NixplayTests.debug.xcconfig"; path = "Target Support Files/Pods-NixplayTests/Pods-NixplayTests.debug.xcconfig"; sourceTree = ""; }; + F93DCDF2EC14354E71AACD23 /* Pods-NixplayBeta.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NixplayBeta.release.xcconfig"; path = "Target Support Files/Pods-NixplayBeta/Pods-NixplayBeta.release.xcconfig"; sourceTree = ""; }; + F98EC1BB3CD5D65AA5ECF6C1 /* Pods-MagShareExtensionQa.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MagShareExtensionQa.release.xcconfig"; path = "Target Support Files/Pods-MagShareExtensionQa/Pods-MagShareExtensionQa.release.xcconfig"; sourceTree = ""; }; + FBB2A5A6AC34435647F8283E /* Pods-NixShareExtensionAlpha.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NixShareExtensionAlpha.debug.xcconfig"; path = "Target Support Files/Pods-NixShareExtensionAlpha/Pods-NixShareExtensionAlpha.debug.xcconfig"; sourceTree = ""; }; + FE6A7738F5BE45B99AEF397F /* Ionicons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Ionicons.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Ionicons.ttf"; sourceTree = ""; }; + FF326D661CD54064B70B88A2 /* libRNGoogleSignin.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRNGoogleSignin.a; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 00E356EB1AD99517003FC87E /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + C2E456923E39822B28C21EC7 /* libPods-MAAGAppTests.a in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 13B07F8C1A680F5B00A75B9A /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + E3575245224B3AEE00B814C0 /* JavaScriptCore.framework in Frameworks */, + 0138E50DEEE94FE19705A0B8 /* SafariServices.framework in Frameworks */, + FB33FE7EE6DA433A8086A87E /* SystemConfiguration.framework in Frameworks */, + 3660BBC6E0FE4808B05C6D83 /* AddressBook.framework in Frameworks */, + C5D8C54E230A5A5300A5D81E /* StoreKit.framework in Frameworks */, + 9E141B2B6FF9D19699516023 /* libPods-MAAGApp.a in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 2D02E4781E0B4A5D006451C7 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 2D16E6881FA4F8E400B85C8A /* libReact.a in Frameworks */, + 6D79F52748F607FE52999B8F /* libPods-MAAGApp-tvOS.a in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 2D02E48D1E0B4A5D006451C7 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 7B58C8ECB9CA1A13B554D0D7 /* libPods-MAAGApp-tvOSTests.a in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + E337472720AD255E00017645 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + E3575246224B3AF500B814C0 /* JavaScriptCore.framework in Frameworks */, + 9713C6DEF666DE1CB076DFC1 /* libPods-MagShareExtension.a in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + E375D57820C69A330035FEC1 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + E357524A224B3B3A00B814C0 /* JavaScriptCore.framework in Frameworks */, + E3C250CB230CFDFD009E4F8E /* StoreKit.framework in Frameworks */, + E375D59220C69A330035FEC1 /* libReactNativeShareExtension.a in Frameworks */, + FFDEA8C368FECFDF0B4F9341 /* libPods-MAAGAppQa.a in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + E375D67420C69E280035FEC1 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 51E0F1742400289B007CE421 /* libReactNativeShareExtension.a in Frameworks */, + E357524B224B3B4200B814C0 /* JavaScriptCore.framework in Frameworks */, + E1CE976C897D65F1F87ED771 /* libPods-MagShareExtensionQa.a in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + E375D6A420C76C1F0035FEC1 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + E357524C224B3B4900B814C0 /* JavaScriptCore.framework in Frameworks */, + E3C250C8230CFDDB009E4F8E /* StoreKit.framework in Frameworks */, + E375D6BB20C76C1F0035FEC1 /* libRNSafeArea.a in Frameworks */, + E375D6BC20C76C1F0035FEC1 /* libRNVectorIcons.a in Frameworks */, + E375D6BF20C76C1F0035FEC1 /* libReactNativeShareExtension.a in Frameworks */, + AF582C1729ECFAAB4A45552B /* libPods-MAAGAppAlpha.a in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + E375D6E720C76D350035FEC1 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + E357524D224B3B4E00B814C0 /* JavaScriptCore.framework in Frameworks */, + 51208191078F48B0944AC546 /* libPods-MagShareExtensionAlpha.a in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + E375D77720C770DA0035FEC1 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + E357524E224B3B5B00B814C0 /* JavaScriptCore.framework in Frameworks */, + E3C250CC230CFE0B009E4F8E /* StoreKit.framework in Frameworks */, + E375D78E20C770DA0035FEC1 /* libRNSafeArea.a in Frameworks */, + E375D78F20C770DA0035FEC1 /* libRNVectorIcons.a in Frameworks */, + E375D79220C770DA0035FEC1 /* libReactNativeShareExtension.a in Frameworks */, + 6E801B24C6F85AAE828A72DF /* libPods-MAAGAppBeta.a in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + E3858719215C723500625D49 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 510671B223D4BBB000E9B046 /* libreact-native-nixplay-core.a in Frameworks */, + E3575247224B3B2700B814C0 /* JavaScriptCore.framework in Frameworks */, + E3C250C9230CFDF2009E4F8E /* StoreKit.framework in Frameworks */, + E3858740215C723500625D49 /* SafariServices.framework in Frameworks */, + E3858741215C723500625D49 /* SystemConfiguration.framework in Frameworks */, + E3858742215C723500625D49 /* AddressBook.framework in Frameworks */, + 48918DF910CC92A9CA29FCCC /* libPods-MAAGAppRnd.a in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + E3AC96FE20CFC24E00E1F671 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + E3575249224B3B3400B814C0 /* JavaScriptCore.framework in Frameworks */, + E3C250CA230CFDF8009E4F8E /* StoreKit.framework in Frameworks */, + E3AC971520CFC24E00E1F671 /* libRNSafeArea.a in Frameworks */, + E3AC971620CFC24E00E1F671 /* libRNVectorIcons.a in Frameworks */, + E3AC971920CFC24E00E1F671 /* libReactNativeShareExtension.a in Frameworks */, + A448DE8A4C2AFAEAF7B120F9 /* libPods-MAAGAppProd.a in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + E3C119E720C77242007CD3BC /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + E357524F224B3B6200B814C0 /* JavaScriptCore.framework in Frameworks */, + 294211A630DED50E211908A0 /* libPods-MagShareExtensionBeta.a in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 00E356EF1AD99517003FC87E /* NixplayTests */ = { + isa = PBXGroup; + children = ( + 00E356F21AD99517003FC87E /* NixplayTests.m */, + 00E356F01AD99517003FC87E /* Supporting Files */, + ); + path = NixplayTests; + sourceTree = ""; + }; + 00E356F01AD99517003FC87E /* Supporting Files */ = { + isa = PBXGroup; + children = ( + 00E356F11AD99517003FC87E /* Info.plist */, + ); + name = "Supporting Files"; + sourceTree = ""; + }; + 04FE8E7E9763B2313F217087 /* Pods */ = { + isa = PBXGroup; + children = ( + 387AD6925460EF3DAAA7E5A9 /* Pods-NixShareExtension.debug.xcconfig */, + 21DB4428CC1473F2B893B2E7 /* Pods-NixShareExtension.release.xcconfig */, + FBB2A5A6AC34435647F8283E /* Pods-NixShareExtensionAlpha.debug.xcconfig */, + 90BEE13CDD2FF25C5459AD4B /* Pods-NixShareExtensionAlpha.release.xcconfig */, + 84620BDBE75B0FC94DFDD481 /* Pods-NixShareExtensionBeta.debug.xcconfig */, + 9DFF8AC33E53F1E28EB6FF73 /* Pods-NixShareExtensionBeta.release.xcconfig */, + E8FFFA016286EF8FE914A632 /* Pods-NixShareExtensionQa.debug.xcconfig */, + 9625582BC091B25191657DCD /* Pods-NixShareExtensionQa.release.xcconfig */, + 2F0AF37CAFFEC647BDE643E4 /* Pods-NixShareExtensionRnd.debug.xcconfig */, + 146FAFD52E38D471A08513DC /* Pods-NixShareExtensionRnd.release.xcconfig */, + 7D33B33BC2F9E44ED9F872FA /* Pods-Nixplay.debug.xcconfig */, + 2763B92A4C3F0AACDA6AEE84 /* Pods-Nixplay.release.xcconfig */, + 2CC1161D34005277BB714061 /* Pods-Nixplay-tvOS.debug.xcconfig */, + D28CB8C9D8CF8D7F50093434 /* Pods-Nixplay-tvOS.release.xcconfig */, + ECF4A972C962452FEE8F09C2 /* Pods-Nixplay-tvOSTests.debug.xcconfig */, + 0031DB52D36000599F22EBDD /* Pods-Nixplay-tvOSTests.release.xcconfig */, + 1677FFBDF901278E1125FF2A /* Pods-NixplayAlpha.debug.xcconfig */, + 264F7AF4E4871D1458CD61F7 /* Pods-NixplayAlpha.release.xcconfig */, + 85FF58E08D543C141BD4E9CC /* Pods-NixplayBeta.debug.xcconfig */, + F93DCDF2EC14354E71AACD23 /* Pods-NixplayBeta.release.xcconfig */, + 4AEC2F2ED39E2A705E03CD38 /* Pods-NixplayProd.debug.xcconfig */, + B9C125BC5A304F2009D948D8 /* Pods-NixplayProd.release.xcconfig */, + 36BAF30DC6D2EA54E6AB8458 /* Pods-NixplayQa.debug.xcconfig */, + 5A7C371D87E3DAD2A1AB4719 /* Pods-NixplayQa.release.xcconfig */, + 66E8D4679CEEA74BC14DF03C /* Pods-NixplayRnd.debug.xcconfig */, + 7775486BE93AF557A09A398A /* Pods-NixplayRnd.release.xcconfig */, + F61E1F06EF36A12C5BA79BE1 /* Pods-NixplayTests.debug.xcconfig */, + 0FE36934274F341B911AF990 /* Pods-NixplayTests.release.xcconfig */, + E70CA087BABCD40183F85B65 /* Pods-MAAGApp.debug.xcconfig */, + 00D16586BF8B643DFE94AD18 /* Pods-MAAGApp.release.xcconfig */, + 192A1559DC16FA93E41BC671 /* Pods-MAAGApp-tvOS.debug.xcconfig */, + D1A9A8E0117601A98A38D4A9 /* Pods-MAAGApp-tvOS.release.xcconfig */, + 45AE8E01729B523EEFC62A4C /* Pods-MAAGApp-tvOSTests.debug.xcconfig */, + 5F338B50A2BF65491C0EE0B0 /* Pods-MAAGApp-tvOSTests.release.xcconfig */, + 501874915488C3B18BC243C9 /* Pods-MAAGAppAlpha.debug.xcconfig */, + D2F3D4FE7C1DCE0AE62D1A03 /* Pods-MAAGAppAlpha.release.xcconfig */, + 3D0885EA117AA45D747146C1 /* Pods-MAAGAppBeta.debug.xcconfig */, + 8BE1800DC08A538CF1A94AE1 /* Pods-MAAGAppBeta.release.xcconfig */, + 23217D9EE06BF5F6F18638ED /* Pods-MAAGAppProd.debug.xcconfig */, + 9633D9B4472CA4B20F29C0A9 /* Pods-MAAGAppProd.release.xcconfig */, + 573AE4D78319E9722AB3C35D /* Pods-MAAGAppQa.debug.xcconfig */, + 3B444EF5D95D58BB99437D91 /* Pods-MAAGAppQa.release.xcconfig */, + 730A71DD73F9F1C4CC682B0A /* Pods-MAAGAppRnd.debug.xcconfig */, + E60B57C32AC6C98217057314 /* Pods-MAAGAppRnd.release.xcconfig */, + 673C749C6C58DC7ECC14804E /* Pods-MAAGAppTests.debug.xcconfig */, + 9975DD8DE08C9242C3D5CE62 /* Pods-MAAGAppTests.release.xcconfig */, + 1B388EA30E07B150E2ED34A3 /* Pods-MagShareExtension.debug.xcconfig */, + 2D9C8DCAB1DF23722D39C934 /* Pods-MagShareExtension.release.xcconfig */, + 8756E9EA15991360D624F896 /* Pods-MagShareExtensionAlpha.debug.xcconfig */, + 535BEA5B1A5A63268B9810C4 /* Pods-MagShareExtensionAlpha.release.xcconfig */, + 08486E5D55B26F464929B8BB /* Pods-MagShareExtensionBeta.debug.xcconfig */, + 66B7BB60BC9121574411B750 /* Pods-MagShareExtensionBeta.release.xcconfig */, + 580A8398533DC76C399D4E5A /* Pods-MagShareExtensionQa.debug.xcconfig */, + F98EC1BB3CD5D65AA5ECF6C1 /* Pods-MagShareExtensionQa.release.xcconfig */, + 8B9A326E00A076FF65A79931 /* Pods-MagShareExtensionRnd.debug.xcconfig */, + 2C69A46257F868C95FF74123 /* Pods-MagShareExtensionRnd.release.xcconfig */, + ); + path = Pods; + sourceTree = ""; + }; + 13B07FAE1A68108700A75B9A /* Nixplay */ = { + isa = PBXGroup; + children = ( + E31312CD20C78A36003A0744 /* Images.xcassets */, + E375D70A20C76DCF0035FEC1 /* Nixplay.alpha.entitlements */, + E375D76F20C770460035FEC1 /* Nixplay.beta.entitlements */, + E375D5F620C69C430035FEC1 /* Nixplay.qa.entitlements */, + E337475320AD2E7F00017645 /* Nixplay.entitlements */, + E3689C5F21805BE40056ABF4 /* Nixplay.rnd.entitlements */, + 008F07F21AC5B25A0029DE68 /* main.jsbundle */, + 13B07FAF1A68108700A75B9A /* AppDelegate.h */, + 13B07FB01A68108700A75B9A /* AppDelegate.m */, + 13B07FB61A68108700A75B9A /* Info.plist */, + 13B07FB11A68108700A75B9A /* LaunchScreen.xib */, + E36C3B112147A56B00097C81 /* VideoTrimmerViewController.xib */, + 13B07FB71A68108700A75B9A /* main.m */, + E359AFC1221BDB6F009FCE1C /* InfoPList.strings */, + ); + name = Nixplay; + sourceTree = ""; + }; + 2D16E6871FA4F8E400B85C8A /* Frameworks */ = { + isa = PBXGroup; + children = ( + 51E0F17524002BAD007CE421 /* libReactNativeAppsee.a */, + 51E0F1732400289B007CE421 /* libReactNativeShareExtension.a */, + 51E0F1712400278D007CE421 /* libReactNativeShareExtension.a */, + 51BD0F8B23DA14A40028E4B1 /* Photos.framework */, + 510671B123D4BBB000E9B046 /* libreact-native-nixplay-core.a */, + 518EE82623D4B328006BC630 /* libreact-native-creedon-imagepicker.a */, + 514FCD4323D45D8F00955945 /* libNixNetwork.a */, + 514FCD3F23D45D8300955945 /* libreact-native-nixplay-core.a */, + 518CF9DA23D45C120055FF5B /* libNixNetwork.a */, + 512CD4F123D4587C00F1160B /* libAppDelegate.a */, + 512CD4ED23D4536200F1160B /* libAppDelegate.a */, + 51DCE2E923D445D5008D66A0 /* Appsee.a */, + 51DCE2EC23D445D5008D66A0 /* AppseeReactNativeExtension.a */, + 51E0E30923D4342C000D1BB9 /* libReactNativeAppsee.a */, + 512A31BA23D433E4008F501D /* libReactNativeAppsee.a */, + 5150AE5523D0CFE8004B6C81 /* libReactNativeAppsee.a */, + 51EFE2CC23C67B81003AD18D /* libReact-Core-439350c1.a */, + 51EFE2CA23C67B5A003AD18D /* libreact-native-fujifilm-spa-sdk.a */, + 51EFE2C423C67A25003AD18D /* libz.tbd */, + 51EFE2C223C67A1F003AD18D /* libc++.tbd */, + 51EFE2C023C679C1003AD18D /* libReact-Core-439350c1.a */, + 5166054423C66E5500B170EA /* libRNGoogleSignin.a */, + 5166054223C66DB700B170EA /* libreact-native-fujifilm-spa-sdk.a */, + 5166054023C66DA400B170EA /* libRNFirebase.a */, + 5166053E23C66D6F00B170EA /* libRNFirebase.a */, + 51F0D68623C66A810013DC1A /* libreact-native-nixplay-core.a */, + 51F0D68423C66A660013DC1A /* libreact-native-nixplay-core.a */, + 513029EB23C65F5C006C5259 /* libReactNativeShareExtension.a */, + 5140529123C65E67000EFDDD /* libReactNativeShareExtension.a */, + 5140528B23C65DE5000EFDDD /* libReactNativeShareExtension.a */, + 5140528923C65DA3000EFDDD /* libReactNativeShareExtension.a */, + 5140528723C65D91000EFDDD /* libReactNativeShareExtension.a */, + 5140527C23C658C2000EFDDD /* libReactNativeShareExtension.a */, + 510CC92223C654F700D111DC /* libReactNativeShareExtension.a */, + 510CC8FF23C64F8600D111DC /* libReactNativeShareExtension.a */, + 5155925723C648E000F6B985 /* libReactNativeShareExtension.a */, + 5155924323C6472600F6B985 /* libReactNativeShareExtension.a */, + 517A5E7C23C6450100E96F9F /* libReactNativeShareExtension.a */, + 517A5E7823C6445500E96F9F /* libReact-Core.a */, + 517A5E7623C6443E00E96F9F /* libNixNetwork.a */, + 517A5E7423C6441D00E96F9F /* libSDWebImage.a */, + 517A5E4223C63F5B00E96F9F /* libReactNativeShareExtension.a */, + 517A5E4023C63EFB00E96F9F /* libReactNativeShareExtension.a */, + 517A5E2B23C63E4B00E96F9F /* libReactNativeShareExtension.a */, + 517A5E1923C63AB100E96F9F /* libReactNativeShareExtension.a */, + 517A5E1023C6397B00E96F9F /* libReactNativeShareExtension.a */, + 517A5E0E23C6351A00E96F9F /* libReactNativeShareExtension.a */, + 517A5DEB23C62B4100E96F9F /* libAFNetworking.a */, + 517A5DD723C628CE00E96F9F /* libReactNativeShareExtension.a */, + 517A5D9723C6270800E96F9F /* libNixNetwork.a */, + 517A5D9523C626FE00E96F9F /* libreact-native-nixplay-core.a */, + 5195BCE623C6257100F9364E /* libAFNetworking.a */, + 517E631423C622BD000552BA /* libReactNativeShareExtension.a */, + 517E631223C6220A000552BA /* libAFNetworking.a */, + 517E62FE23C621E1000552BA /* libAFNetworking.a */, + 517E62DE23C5774E000552BA /* libReactNativeShareExtension.a */, + 51F694C523C5682D0041B00A /* libReactNativeShareExtension.a */, + 518CCDD623C3AD9000A557A1 /* libReactNativeShareExtension.a */, + 51C7DF1723C3A7B400550073 /* libReactNativeShareExtension.a */, + 51C7DF1523C3A7A100550073 /* libTPKeyboardAvoiding.a */, + 51C7DF1323C3A79500550073 /* libSDAVAssetExportSession.a */, + 51C7DF1123C3A78500550073 /* libNixNetwork.a */, + 51C7DF0F23C3A72D00550073 /* libreact-native-config.a */, + 5148515F23C3A3DA00411F22 /* libReactNativeShareExtension.a */, + 5148515D23C3A38B00411F22 /* libReactNativeShareExtension.a */, + 5148515B23C3A32500411F22 /* libReactNativeShareExtension.a */, + 5148515923C3A2AA00411F22 /* libReactNativeShareExtension.a */, + 5148515723C3A21900411F22 /* libReactNativeShareExtension.a */, + 5148514323C3A1FE00411F22 /* libFileMD5Hash.a */, + 5148512323C3A10900411F22 /* libAFNetworking.a */, + C5D8C54D230A5A5300A5D81E /* StoreKit.framework */, + 516A71B62358694E0048D077 /* libRNReanimated.a */, + E3ADEFDF229CDCCF00EB41DC /* libRNSVG.a */, + E35751E9224B3AED00B814C0 /* JavaScriptCore.framework */, + 437CADBF2091E38F00EB0E93 /* libSDWebImage iOS static.a */, + 437CADC02091E38F00EB0E93 /* libSDWebImage watchOS static.a */, + 2D16E6891FA4F8E400B85C8A /* libReact.a */, + 4C21D99FD34C42E8BC8EE3D9 /* SafariServices.framework */, + AB19DCE374604582AA35709A /* SystemConfiguration.framework */, + 9988B169652146CAB7BC49CA /* AddressBook.framework */, + 743D9BEFFE2225F7E20D8FEA /* libPods-MAAGApp.a */, + 38DB33393A6A85E0DD518DF1 /* libPods-MAAGApp-tvOS.a */, + A2F6023EBC334DD8C24892A7 /* libPods-MAAGApp-tvOSTests.a */, + 667D2DD17D47ABF1CA968453 /* libPods-MAAGAppAlpha.a */, + 2AF15F46AD77FD1A4939FEC0 /* libPods-MAAGAppBeta.a */, + 71A7426CCEE7A34122ADA19F /* libPods-MAAGAppProd.a */, + 4A61C08FBE5E39AD4748144F /* libPods-MAAGAppQa.a */, + 32920DD0D49B173B01C92211 /* libPods-MAAGAppRnd.a */, + 25537A81387E4166E35657AD /* libPods-MAAGAppTests.a */, + D8ABB61B9E72F8A7C670425A /* libPods-MagShareExtension.a */, + 3317464B6647427299C99552 /* libPods-MagShareExtensionAlpha.a */, + 6EC21FA43F8BB96D8254773F /* libPods-MagShareExtensionBeta.a */, + A6EE7AFE33A053F54380387C /* libPods-MagShareExtensionQa.a */, + 3999474027B13D354EF1EB3A /* libPods-MagShareExtensionRnd.a */, + ); + name = Frameworks; + sourceTree = ""; + }; + 4312F64A2097033300975F09 /* NixShareExtension */ = { + isa = PBXGroup; + children = ( + E3689A4F21801DFD0056ABF4 /* Classes */, + E3AC992D20CFDB6F00E1F671 /* NixShareExtension.beta.entitlements */, + E375D70B20C76E2F0035FEC1 /* NixShareExtension.alpha.entitlements */, + E375D69A20C69F5D0035FEC1 /* NixShareExtension.qa.entitlements */, + E337475220AD2CC600017645 /* NixShareExtension.entitlements */, + E3689C132180574E0056ABF4 /* NixShareExtension.rnd.entitlements */, + 07FD4C9F21CCDBB500B6C7CB /* Localizable.strings */, + 4312F64E2097033300975F09 /* MainInterface.storyboard */, + 4312F6512097033300975F09 /* Info.plist */, + 4312F6582097036600975F09 /* NixShareExtension.m */, + ); + path = NixShareExtension; + sourceTree = ""; + }; + 832341AE1AAA6A7D00B99B32 /* Libraries */ = { + isa = PBXGroup; + children = ( + ); + name = Libraries; + sourceTree = ""; + }; + 83CBB9F61A601CBA00E9B192 = { + isa = PBXGroup; + children = ( + 13B07FAE1A68108700A75B9A /* Nixplay */, + 832341AE1AAA6A7D00B99B32 /* Libraries */, + 00E356EF1AD99517003FC87E /* NixplayTests */, + 4312F64A2097033300975F09 /* NixShareExtension */, + 83CBBA001A601CBA00E9B192 /* Products */, + 2D16E6871FA4F8E400B85C8A /* Frameworks */, + F7E7A23755CF451195473AEF /* Resources */, + E3CA9014207F465500FE7956 /* Recovered References */, + 04FE8E7E9763B2313F217087 /* Pods */, + ); + indentWidth = 2; + sourceTree = ""; + tabWidth = 2; + usesTabs = 0; + }; + 83CBBA001A601CBA00E9B192 /* Products */ = { + isa = PBXGroup; + children = ( + 13B07F961A680F5B00A75B9A /* MAAGApp.app */, + 00E356EE1AD99517003FC87E /* MAAGAppTests.xctest */, + 2D02E47B1E0B4A5D006451C7 /* MAAGApp-tvOS.app */, + 2D02E4901E0B4A5D006451C7 /* MAAGApp-tvOSTests.xctest */, + E337472A20AD255E00017645 /* MagShareExtension.appex */, + E375D5B520C69A330035FEC1 /* MAAGAppQa.app */, + E375D69020C69E280035FEC1 /* MagShareExtensionQa.appex */, + E375D6E220C76C1F0035FEC1 /* MAAGAppAlpha.app */, + E375D70420C76D350035FEC1 /* MagShareExtensionAlpha.appex */, + E375D7B520C770DA0035FEC1 /* MAAGAppBeta.app */, + E3C11A0420C77242007CD3BC /* MagShareExtensionBeta.appex */, + E3AC973D20CFC24E00E1F671 /* MAAGAppProd.app */, + E3858769215C723500625D49 /* MAAGAppRnd.app */, + ); + name = Products; + sourceTree = ""; + }; + E3618946227801BD00E86DF9 /* GoogleServiceInfoPlists */ = { + isa = PBXGroup; + children = ( + E3618947227801BD00E86DF9 /* beta */, + E3618949227801BD00E86DF9 /* prod */, + E361894B227801BD00E86DF9 /* qa */, + E361894D227801BD00E86DF9 /* rnd */, + E361894F227801BD00E86DF9 /* alpha */, + ); + path = GoogleServiceInfoPlists; + sourceTree = ""; + }; + E3618947227801BD00E86DF9 /* beta */ = { + isa = PBXGroup; + children = ( + E3618948227801BD00E86DF9 /* GoogleService-Info.plist */, + ); + path = beta; + sourceTree = ""; + }; + E3618949227801BD00E86DF9 /* prod */ = { + isa = PBXGroup; + children = ( + E361894A227801BD00E86DF9 /* GoogleService-Info.plist */, + ); + path = prod; + sourceTree = ""; + }; + E361894B227801BD00E86DF9 /* qa */ = { + isa = PBXGroup; + children = ( + E361894C227801BD00E86DF9 /* GoogleService-Info.plist */, + ); + path = qa; + sourceTree = ""; + }; + E361894D227801BD00E86DF9 /* rnd */ = { + isa = PBXGroup; + children = ( + E361894E227801BD00E86DF9 /* GoogleService-Info.plist */, + ); + path = rnd; + sourceTree = ""; + }; + E361894F227801BD00E86DF9 /* alpha */ = { + isa = PBXGroup; + children = ( + E3618950227801BD00E86DF9 /* GoogleService-Info.plist */, + ); + path = alpha; + sourceTree = ""; + }; + E3689A4F21801DFD0056ABF4 /* Classes */ = { + isa = PBXGroup; + children = ( + E3689A5021801DFD0056ABF4 /* Controllers */, + ); + path = Classes; + sourceTree = ""; + }; + E3689A5021801DFD0056ABF4 /* Controllers */ = { + isa = PBXGroup; + children = ( + E3689A5121801DFD0056ABF4 /* ContainerViewController.h */, + E3689A5221801DFD0056ABF4 /* ContainerViewController.m */, + E3689A5321801DFD0056ABF4 /* ImageCaptionViewController.h */, + E3689A5421801DFD0056ABF4 /* ImageCaptionViewController.m */, + E3689A5521801DFD0056ABF4 /* ReceiverTableViewController.h */, + E3689A5621801DFD0056ABF4 /* ReceiverTableViewController.m */, + ); + path = Controllers; + sourceTree = ""; + }; + E3CA9014207F465500FE7956 /* Recovered References */ = { + isa = PBXGroup; + children = ( + 2B23EE2B48304B4D9B7DEC03 /* libRNCreedonImagepicker.a */, + F2F3C6CC7E834164A3B1FEE9 /* libFastImage.a */, + 5E86F034860C4ACA82E051EB /* libReactNativeNavigation.a */, + 7AD481CA268E44D29814D420 /* libRNSafeArea.a */, + CEC6DFA1AA2E4F9096376697 /* libRNVectorIcons.a */, + B299EF6F93804ED88C2E1F44 /* libReactNativeShareExtension.a */, + 6ADD60E8476B4E97B2B83F4E /* libRNThumbnail.a */, + FF326D661CD54064B70B88A2 /* libRNGoogleSignin.a */, + D193D130E20742019BCF07D8 /* libRNVideoTrimmer.a */, + 0919231C945C4EA38600AACC /* libRNFirebase.a */, + 9297E7E25F8C4770B640D6C0 /* libInteractable.a */, + A26700EBE78A464F81D3E4C6 /* libRNAppsee.a */, + ); + name = "Recovered References"; + sourceTree = ""; + }; + F7E7A23755CF451195473AEF /* Resources */ = { + isa = PBXGroup; + children = ( + E3618946227801BD00E86DF9 /* GoogleServiceInfoPlists */, + 4A299641E4CF4331B2E76706 /* Open Sans-Bold.ttf */, + A591808523974DE0BAEBFBDA /* Open Sans-BoldItalic.ttf */, + 34C523EDB9FB44B9A8E29B25 /* Open Sans-ExtraBold.ttf */, + F44B8E92B8FC4FB8B5C6DF9C /* Open Sans-ExtraBoldItalic.ttf */, + 7B2D5DC7BC4445958B272EDF /* Open Sans-Italic.ttf */, + 3025744944B44E25966DCC11 /* Open Sans-Light.ttf */, + ED7C08C6589445FF9977B66B /* Open Sans-LightItalic.ttf */, + 999A320D5ED249929845A10D /* Open Sans-SemiBold.ttf */, + 0A186D3FEADC4BEA86D7950E /* Open Sans-SemiBoldItalic.ttf */, + 9AD9A2994AAB448DB214C956 /* Open Sans.ttf */, + 4D40D6637ABB4534A12614E8 /* Entypo.ttf */, + E978B2BEE9A6472CAB4D9256 /* EvilIcons.ttf */, + C9116BF973C74EAF9305AEEF /* Feather.ttf */, + 601D47B063D840A8B6B13FDC /* FontAwesome.ttf */, + 88E27D2880A64EFA92DFBF81 /* Foundation.ttf */, + FE6A7738F5BE45B99AEF397F /* Ionicons.ttf */, + 969425D94D6D41158C910618 /* MaterialCommunityIcons.ttf */, + F344523023074AB493B29045 /* MaterialIcons.ttf */, + 840F890C87A344A0A659EB96 /* Octicons.ttf */, + C771CB3F2F5C44E9BB41895E /* SimpleLineIcons.ttf */, + 1AB435DFCB744DB88C9F9156 /* Zocial.ttf */, + 1454B95020AC4424A01F1D50 /* NixplayIcon.svg */, + 885D2FE25C8642E890745AC3 /* NixplayIcon.ttf */, + 48150F0C1C2A48089A0D689D /* NixplayIcon.woff */, + D413578E5EA64A5E95070B31 /* AntDesign.ttf */, + B97C056C8AFC4A668DA46F71 /* FontAwesome5_Brands.ttf */, + C5029392F06741B8856B6548 /* FontAwesome5_Regular.ttf */, + B92D6031EFA9465FBC117E2E /* FontAwesome5_Solid.ttf */, + ); + name = Resources; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 00E356ED1AD99517003FC87E /* MAAGAppTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "MAAGAppTests" */; + buildPhases = ( + 352A0E1917912F3456945AE8 /* [CP] Check Pods Manifest.lock */, + 00E356EA1AD99517003FC87E /* Sources */, + 00E356EB1AD99517003FC87E /* Frameworks */, + 00E356EC1AD99517003FC87E /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 00E356F51AD99517003FC87E /* PBXTargetDependency */, + ); + name = MAAGAppTests; + productName = NixplayTests; + productReference = 00E356EE1AD99517003FC87E /* MAAGAppTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + 13B07F861A680F5B00A75B9A /* MAAGApp */ = { + isa = PBXNativeTarget; + buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "MAAGApp" */; + buildPhases = ( + CE1A60B55B09031718E7973C /* [CP] Check Pods Manifest.lock */, + 13B07F871A680F5B00A75B9A /* Sources */, + 13B07F8C1A680F5B00A75B9A /* Frameworks */, + F54BE60B2230227A006385CA /* Copy GoogleService-Info.plist */, + 13B07F8E1A680F5B00A75B9A /* Resources */, + 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */, + 437CADBA2091E16300EB0E93 /* Embed App Extensions */, + F54BE57D22301A8D006385CA /* Run Fabric Crashlytics */, + 28DD9B5BC359DA310C3311C5 /* [CP] Copy Pods Resources */, + ); + buildRules = ( + ); + dependencies = ( + E337473420AD255E00017645 /* PBXTargetDependency */, + ); + name = MAAGApp; + productName = "Hello World"; + productReference = 13B07F961A680F5B00A75B9A /* MAAGApp.app */; + productType = "com.apple.product-type.application"; + }; + 2D02E47A1E0B4A5D006451C7 /* MAAGApp-tvOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = 2D02E4BA1E0B4A5E006451C7 /* Build configuration list for PBXNativeTarget "MAAGApp-tvOS" */; + buildPhases = ( + 1820EA76866916A2FE9C33DC /* [CP] Check Pods Manifest.lock */, + 2D02E4771E0B4A5D006451C7 /* Sources */, + 2D02E4781E0B4A5D006451C7 /* Frameworks */, + 2D02E4791E0B4A5D006451C7 /* Resources */, + 2D02E4CB1E0B4B27006451C7 /* Bundle React Native Code And Images */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "MAAGApp-tvOS"; + productName = "Nixplay-tvOS"; + productReference = 2D02E47B1E0B4A5D006451C7 /* MAAGApp-tvOS.app */; + productType = "com.apple.product-type.application"; + }; + 2D02E48F1E0B4A5D006451C7 /* MAAGApp-tvOSTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 2D02E4BB1E0B4A5E006451C7 /* Build configuration list for PBXNativeTarget "MAAGApp-tvOSTests" */; + buildPhases = ( + 2E34B57AEF9FF04D23E347A6 /* [CP] Check Pods Manifest.lock */, + 2D02E48C1E0B4A5D006451C7 /* Sources */, + 2D02E48D1E0B4A5D006451C7 /* Frameworks */, + 2D02E48E1E0B4A5D006451C7 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 2D02E4921E0B4A5D006451C7 /* PBXTargetDependency */, + ); + name = "MAAGApp-tvOSTests"; + productName = "Nixplay-tvOSTests"; + productReference = 2D02E4901E0B4A5D006451C7 /* MAAGApp-tvOSTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + E337472920AD255E00017645 /* MagShareExtension */ = { + isa = PBXNativeTarget; + buildConfigurationList = E337473620AD255F00017645 /* Build configuration list for PBXNativeTarget "MagShareExtension" */; + buildPhases = ( + 225E38FA76CF8F60B2A86019 /* [CP] Check Pods Manifest.lock */, + E337472620AD255E00017645 /* Sources */, + E337472720AD255E00017645 /* Frameworks */, + E337472820AD255E00017645 /* Resources */, + E337475120AD296200017645 /* ShellScript */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = MagShareExtension; + productName = NixShareExtension; + productReference = E337472A20AD255E00017645 /* MagShareExtension.appex */; + productType = "com.apple.product-type.app-extension"; + }; + E375D57120C69A330035FEC1 /* MAAGAppQa */ = { + isa = PBXNativeTarget; + buildConfigurationList = E375D5B220C69A330035FEC1 /* Build configuration list for PBXNativeTarget "MAAGAppQa" */; + buildPhases = ( + A0F6AFA0A819A6D6CDC0D12A /* [CP] Check Pods Manifest.lock */, + E375D57520C69A330035FEC1 /* Sources */, + E375D57820C69A330035FEC1 /* Frameworks */, + F54BE4B422300DCB006385CA /* Copy GoogleService-Info.plist */, + E375D59320C69A330035FEC1 /* Resources */, + E375D5AF20C69A330035FEC1 /* Bundle React Native code and images */, + E375D69920C69F160035FEC1 /* Embed App Extensions */, + F5045B6921F9D3910070A6AE /* Embed Frameworks */, + F54BE57F22301B41006385CA /* Run Fabric Crashlytics */, + E37E287ADF21F56ACB5B40DD /* [CP] Copy Pods Resources */, + ); + buildRules = ( + ); + dependencies = ( + E375D69820C69F150035FEC1 /* PBXTargetDependency */, + ); + name = MAAGAppQa; + productName = "Hello World"; + productReference = E375D5B520C69A330035FEC1 /* MAAGAppQa.app */; + productType = "com.apple.product-type.application"; + }; + E375D67120C69E280035FEC1 /* MagShareExtensionQa */ = { + isa = PBXNativeTarget; + buildConfigurationList = E375D68D20C69E280035FEC1 /* Build configuration list for PBXNativeTarget "MagShareExtensionQa" */; + buildPhases = ( + 55A22F9530E391A591FC8755 /* [CP] Check Pods Manifest.lock */, + E375D67220C69E280035FEC1 /* Sources */, + E375D67420C69E280035FEC1 /* Frameworks */, + E375D68A20C69E280035FEC1 /* Resources */, + E375D68C20C69E280035FEC1 /* ShellScript */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = MagShareExtensionQa; + productName = NixShareExtension; + productReference = E375D69020C69E280035FEC1 /* MagShareExtensionQa.appex */; + productType = "com.apple.product-type.app-extension"; + }; + E375D69D20C76C1F0035FEC1 /* MAAGAppAlpha */ = { + isa = PBXNativeTarget; + buildConfigurationList = E375D6DF20C76C1F0035FEC1 /* Build configuration list for PBXNativeTarget "MAAGAppAlpha" */; + buildPhases = ( + 9C103C88707599C7C4AC834E /* [CP] Check Pods Manifest.lock */, + E375D6A120C76C1F0035FEC1 /* Sources */, + E375D6A420C76C1F0035FEC1 /* Frameworks */, + F54BE60622302011006385CA /* Copy GoogleService-Info.plist */, + E375D6C020C76C1F0035FEC1 /* Resources */, + E375D6DC20C76C1F0035FEC1 /* Bundle React Native code and images */, + E375D70920C76D7B0035FEC1 /* Embed App Extensions */, + F54BE6072230202C006385CA /* Run Fabric Crashlytics */, + FC5CA6ACA722E7FD70AF5FDA /* [CP] Copy Pods Resources */, + ); + buildRules = ( + ); + dependencies = ( + E375D70820C76D7B0035FEC1 /* PBXTargetDependency */, + ); + name = MAAGAppAlpha; + productName = "Hello World"; + productReference = E375D6E220C76C1F0035FEC1 /* MAAGAppAlpha.app */; + productType = "com.apple.product-type.application"; + }; + E375D6E420C76D350035FEC1 /* MagShareExtensionAlpha */ = { + isa = PBXNativeTarget; + buildConfigurationList = E375D70120C76D350035FEC1 /* Build configuration list for PBXNativeTarget "MagShareExtensionAlpha" */; + buildPhases = ( + A2C907554F381C3D139E9FA4 /* [CP] Check Pods Manifest.lock */, + E375D6E520C76D350035FEC1 /* Sources */, + E375D6E720C76D350035FEC1 /* Frameworks */, + E375D6FE20C76D350035FEC1 /* Resources */, + E375D70020C76D350035FEC1 /* ShellScript */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = MagShareExtensionAlpha; + productName = NixShareExtension; + productReference = E375D70420C76D350035FEC1 /* MagShareExtensionAlpha.appex */; + productType = "com.apple.product-type.app-extension"; + }; + E375D77020C770DA0035FEC1 /* MAAGAppBeta */ = { + isa = PBXNativeTarget; + buildConfigurationList = E375D7B220C770DA0035FEC1 /* Build configuration list for PBXNativeTarget "MAAGAppBeta" */; + buildPhases = ( + 03E9BBC1E4D07D1658DA81FC /* [CP] Check Pods Manifest.lock */, + E375D77420C770DA0035FEC1 /* Sources */, + E375D77720C770DA0035FEC1 /* Frameworks */, + F54BE5B022301C33006385CA /* Copy GoogleService-Info.plist */, + E375D79320C770DA0035FEC1 /* Resources */, + E375D7AF20C770DA0035FEC1 /* Bundle React Native code and images */, + E3C11A4420C77691007CD3BC /* Embed App Extensions */, + F54BE58022301B9A006385CA /* Run Fabric Crashlytics */, + 4DEDE95B0481B5C971F1B3A3 /* [CP] Copy Pods Resources */, + ); + buildRules = ( + ); + dependencies = ( + E3C11A4320C77691007CD3BC /* PBXTargetDependency */, + ); + name = MAAGAppBeta; + productName = "Hello World"; + productReference = E375D7B520C770DA0035FEC1 /* MAAGAppBeta.app */; + productType = "com.apple.product-type.application"; + }; + E3858711215C723500625D49 /* MAAGAppRnd */ = { + isa = PBXNativeTarget; + buildConfigurationList = E3858766215C723500625D49 /* Build configuration list for PBXNativeTarget "MAAGAppRnd" */; + buildPhases = ( + DDD9C2159DBA1BD5B5B3FAA6 /* [CP] Check Pods Manifest.lock */, + E3858715215C723500625D49 /* Sources */, + E3858719215C723500625D49 /* Frameworks */, + E3858744215C723500625D49 /* Resources */, + E3858762215C723500625D49 /* Bundle React Native code and images */, + F54BE57E22301AAC006385CA /* Run Fabric Crashlytics */, + 5140529023C65E00000EFDDD /* Embed App Extensions */, + 950E6A073B92759FCC35474E /* [CP] Copy Pods Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = MAAGAppRnd; + productName = "Hello World"; + productReference = E3858769215C723500625D49 /* MAAGAppRnd.app */; + productType = "com.apple.product-type.application"; + }; + E3AC96F720CFC24E00E1F671 /* MAAGAppProd */ = { + isa = PBXNativeTarget; + buildConfigurationList = E3AC973A20CFC24E00E1F671 /* Build configuration list for PBXNativeTarget "MAAGAppProd" */; + buildPhases = ( + 24A8F82D907AED15FB13CADD /* [CP] Check Pods Manifest.lock */, + E3AC96FB20CFC24E00E1F671 /* Sources */, + E3AC96FE20CFC24E00E1F671 /* Frameworks */, + F54BE60822302199006385CA /* Copy GoogleServices-Info.plist */, + E3AC971A20CFC24E00E1F671 /* Resources */, + E3AC973620CFC24E00E1F671 /* Bundle React Native code and images */, + E3AC973720CFC24E00E1F671 /* Embed App Extensions */, + F54BE609223021CE006385CA /* Run Fabric Crashlytics */, + 8E30F00FF744F8086A676555 /* [CP] Copy Pods Resources */, + ); + buildRules = ( + ); + dependencies = ( + E3AC96F820CFC24E00E1F671 /* PBXTargetDependency */, + ); + name = MAAGAppProd; + productName = "Hello World"; + productReference = E3AC973D20CFC24E00E1F671 /* MAAGAppProd.app */; + productType = "com.apple.product-type.application"; + }; + E3C119E420C77242007CD3BC /* MagShareExtensionBeta */ = { + isa = PBXNativeTarget; + buildConfigurationList = E3C11A0120C77242007CD3BC /* Build configuration list for PBXNativeTarget "MagShareExtensionBeta" */; + buildPhases = ( + C309A330762C65BBCC7D19CF /* [CP] Check Pods Manifest.lock */, + E3C119E520C77242007CD3BC /* Sources */, + E3C119E720C77242007CD3BC /* Frameworks */, + E3C119FE20C77242007CD3BC /* Resources */, + E3C11A0020C77242007CD3BC /* ShellScript */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = MagShareExtensionBeta; + productName = NixShareExtension; + productReference = E3C11A0420C77242007CD3BC /* MagShareExtensionBeta.appex */; + productType = "com.apple.product-type.app-extension"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 83CBB9F71A601CBA00E9B192 /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 610; + ORGANIZATIONNAME = Facebook; + TargetAttributes = { + 00E356ED1AD99517003FC87E = { + CreatedOnToolsVersion = 6.2; + DevelopmentTeam = FLA95J3G7U; + ProvisioningStyle = Manual; + TestTargetID = 13B07F861A680F5B00A75B9A; + }; + 13B07F861A680F5B00A75B9A = { + DevelopmentTeam = FLA95J3G7U; + ProvisioningStyle = Manual; + SystemCapabilities = { + com.apple.ApplicationGroups.iOS = { + enabled = 1; + }; + com.apple.BackgroundModes = { + enabled = 1; + }; + com.apple.InAppPurchase = { + enabled = 1; + }; + com.apple.Keychain = { + enabled = 1; + }; + com.apple.Push = { + enabled = 1; + }; + }; + }; + 2D02E47A1E0B4A5D006451C7 = { + CreatedOnToolsVersion = 8.2.1; + ProvisioningStyle = Manual; + }; + 2D02E48F1E0B4A5D006451C7 = { + CreatedOnToolsVersion = 8.2.1; + ProvisioningStyle = Manual; + TestTargetID = 2D02E47A1E0B4A5D006451C7; + }; + E337472920AD255E00017645 = { + CreatedOnToolsVersion = 9.3.1; + DevelopmentTeam = FLA95J3G7U; + ProvisioningStyle = Manual; + SystemCapabilities = { + com.apple.ApplicationGroups.iOS = { + enabled = 1; + }; + com.apple.Keychain = { + enabled = 1; + }; + com.apple.Push = { + enabled = 1; + }; + }; + }; + E375D57120C69A330035FEC1 = { + DevelopmentTeam = FLA95J3G7U; + ProvisioningStyle = Manual; + SystemCapabilities = { + com.apple.InAppPurchase = { + enabled = 1; + }; + com.apple.Keychain = { + enabled = 1; + }; + }; + }; + E375D67120C69E280035FEC1 = { + DevelopmentTeam = FLA95J3G7U; + ProvisioningStyle = Manual; + SystemCapabilities = { + com.apple.ApplicationGroups.iOS = { + enabled = 1; + }; + }; + }; + E375D69D20C76C1F0035FEC1 = { + DevelopmentTeam = FLA95J3G7U; + ProvisioningStyle = Manual; + SystemCapabilities = { + com.apple.InAppPurchase = { + enabled = 1; + }; + com.apple.Keychain = { + enabled = 1; + }; + }; + }; + E375D6E420C76D350035FEC1 = { + DevelopmentTeam = FLA95J3G7U; + ProvisioningStyle = Manual; + }; + E375D77020C770DA0035FEC1 = { + DevelopmentTeam = FLA95J3G7U; + ProvisioningStyle = Manual; + SystemCapabilities = { + com.apple.InAppPurchase = { + enabled = 1; + }; + com.apple.Keychain = { + enabled = 1; + }; + }; + }; + E3858711215C723500625D49 = { + DevelopmentTeam = FLA95J3G7U; + ProvisioningStyle = Manual; + SystemCapabilities = { + com.apple.ApplicationGroups.iOS = { + enabled = 1; + }; + com.apple.InAppPurchase = { + enabled = 1; + }; + com.apple.Keychain = { + enabled = 1; + }; + }; + }; + E3AC96F720CFC24E00E1F671 = { + DevelopmentTeam = FLA95J3G7U; + ProvisioningStyle = Manual; + SystemCapabilities = { + com.apple.InAppPurchase = { + enabled = 1; + }; + }; + }; + E3C119E420C77242007CD3BC = { + DevelopmentTeam = FLA95J3G7U; + ProvisioningStyle = Manual; + }; + }; + }; + buildConfigurationList = 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "Nixplay" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + English, + en, + Base, + de, + ja, + ); + mainGroup = 83CBB9F61A601CBA00E9B192; + productRefGroup = 83CBBA001A601CBA00E9B192 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 13B07F861A680F5B00A75B9A /* MAAGApp */, + E337472920AD255E00017645 /* MagShareExtension */, + E3858711215C723500625D49 /* MAAGAppRnd */, + E3AC96F720CFC24E00E1F671 /* MAAGAppProd */, + E375D57120C69A330035FEC1 /* MAAGAppQa */, + E375D67120C69E280035FEC1 /* MagShareExtensionQa */, + E375D69D20C76C1F0035FEC1 /* MAAGAppAlpha */, + E375D6E420C76D350035FEC1 /* MagShareExtensionAlpha */, + E375D77020C770DA0035FEC1 /* MAAGAppBeta */, + E3C119E420C77242007CD3BC /* MagShareExtensionBeta */, + 00E356ED1AD99517003FC87E /* MAAGAppTests */, + 2D02E47A1E0B4A5D006451C7 /* MAAGApp-tvOS */, + 2D02E48F1E0B4A5D006451C7 /* MAAGApp-tvOSTests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 00E356EC1AD99517003FC87E /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 13B07F8E1A680F5B00A75B9A /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 13B07FBD1A68108700A75B9A /* LaunchScreen.xib in Resources */, + 250150828D3D4E03B417B045 /* Open Sans-Bold.ttf in Resources */, + 7636A69B737145D2987A0408 /* Open Sans-BoldItalic.ttf in Resources */, + E31312CE20C78A36003A0744 /* Images.xcassets in Resources */, + 68056AB8171C494D8C115F2D /* Open Sans-ExtraBold.ttf in Resources */, + F6BFC222379A453BA4D0D3B8 /* Open Sans-ExtraBoldItalic.ttf in Resources */, + 38B0B528F99F4C91B11447A1 /* Open Sans-Italic.ttf in Resources */, + E790C83C1FE641FEAF22902F /* Open Sans-Light.ttf in Resources */, + BDE31BE4F2934757BEBED1FF /* Open Sans-LightItalic.ttf in Resources */, + ADB37FEF94794AD1936A6F3E /* Open Sans-SemiBold.ttf in Resources */, + A5DF9C42F07348D890781148 /* Open Sans-SemiBoldItalic.ttf in Resources */, + ED3F16E6CF4249FCB3A716AC /* Open Sans.ttf in Resources */, + 55B905E95C434C7AACCB86D4 /* Entypo.ttf in Resources */, + 6F5E0ED787EB4CB3815FCEC4 /* EvilIcons.ttf in Resources */, + F698C4C2B41A4864961A7DBB /* Feather.ttf in Resources */, + 88F3FF6DF5A04A2C991F31B8 /* FontAwesome.ttf in Resources */, + AAC5FD86EC6A4E188AA814A9 /* Foundation.ttf in Resources */, + 07A13AF2D4F54DA9ABDF2DD3 /* Ionicons.ttf in Resources */, + E359AFB5221BDB6F009FCE1C /* InfoPList.strings in Resources */, + E36C3B5B2147A56B00097C81 /* VideoTrimmerViewController.xib in Resources */, + 4AFA4CA6DB474DF1AC996846 /* MaterialCommunityIcons.ttf in Resources */, + 4C3823516E5044BF9DBFEDCF /* MaterialIcons.ttf in Resources */, + 42AD8DB34E644DEAAB803F14 /* Octicons.ttf in Resources */, + 4F2791500A984002B0CCF93C /* SimpleLineIcons.ttf in Resources */, + 39834244607043E6868D3003 /* Zocial.ttf in Resources */, + 489405DC8FF140EFB205ADEA /* NixplayIcon.svg in Resources */, + 6C5C1D9792EF48828AE60CC1 /* NixplayIcon.ttf in Resources */, + 9E6261D90F884D308C956B19 /* NixplayIcon.woff in Resources */, + E3618952227801CA00E86DF9 /* GoogleService-Info.plist in Resources */, + 55CE7A29276A497386EAF06C /* AntDesign.ttf in Resources */, + 5FD5558CCFCF4602ABC47378 /* FontAwesome5_Brands.ttf in Resources */, + D0A3BCCB11A64B7E9444AC23 /* FontAwesome5_Regular.ttf in Resources */, + 1273C266FBBF4443899AAF8E /* FontAwesome5_Solid.ttf in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 2D02E4791E0B4A5D006451C7 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + E31312CF20C78A36003A0744 /* Images.xcassets in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 2D02E48E1E0B4A5D006451C7 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + E337472820AD255E00017645 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + E3B6AD9420AD4B2400359839 /* MainInterface.storyboard in Resources */, + E359AFB6221BDB6F009FCE1C /* InfoPList.strings in Resources */, + 07FD4C9921CCDBB500B6C7CB /* Localizable.strings in Resources */, + E31312D020C78A36003A0744 /* Images.xcassets in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + E375D59320C69A330035FEC1 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + E375D59520C69A330035FEC1 /* LaunchScreen.xib in Resources */, + E375D59620C69A330035FEC1 /* Open Sans-Bold.ttf in Resources */, + E375D59720C69A330035FEC1 /* Open Sans-BoldItalic.ttf in Resources */, + E31312D120C78A36003A0744 /* Images.xcassets in Resources */, + E375D59820C69A330035FEC1 /* Open Sans-ExtraBold.ttf in Resources */, + E375D59920C69A330035FEC1 /* Open Sans-ExtraBoldItalic.ttf in Resources */, + E375D59A20C69A330035FEC1 /* Open Sans-Italic.ttf in Resources */, + E375D59B20C69A330035FEC1 /* Open Sans-Light.ttf in Resources */, + E375D59C20C69A330035FEC1 /* Open Sans-LightItalic.ttf in Resources */, + E375D59D20C69A330035FEC1 /* Open Sans-SemiBold.ttf in Resources */, + E375D59E20C69A330035FEC1 /* Open Sans-SemiBoldItalic.ttf in Resources */, + E375D59F20C69A330035FEC1 /* Open Sans.ttf in Resources */, + E375D5A020C69A330035FEC1 /* Entypo.ttf in Resources */, + E375D5A120C69A330035FEC1 /* EvilIcons.ttf in Resources */, + E375D5A220C69A330035FEC1 /* Feather.ttf in Resources */, + E375D5A320C69A330035FEC1 /* FontAwesome.ttf in Resources */, + E375D5A420C69A330035FEC1 /* Foundation.ttf in Resources */, + E3618954227801D600E86DF9 /* GoogleService-Info.plist in Resources */, + E375D5A520C69A330035FEC1 /* Ionicons.ttf in Resources */, + E359AFBA221BDB6F009FCE1C /* InfoPList.strings in Resources */, + E36C3B5D2147A56B00097C81 /* VideoTrimmerViewController.xib in Resources */, + E375D5A620C69A330035FEC1 /* MaterialCommunityIcons.ttf in Resources */, + E375D5A720C69A330035FEC1 /* MaterialIcons.ttf in Resources */, + E375D5A820C69A330035FEC1 /* Octicons.ttf in Resources */, + E375D5A920C69A330035FEC1 /* SimpleLineIcons.ttf in Resources */, + E375D5AA20C69A330035FEC1 /* Zocial.ttf in Resources */, + E375D5AB20C69A330035FEC1 /* NixplayIcon.svg in Resources */, + E375D5AC20C69A330035FEC1 /* NixplayIcon.ttf in Resources */, + E375D5AD20C69A330035FEC1 /* NixplayIcon.woff in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + E375D68A20C69E280035FEC1 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 07FD4C9B21CCDBB500B6C7CB /* Localizable.strings in Resources */, + E359AFBB221BDB6F009FCE1C /* InfoPList.strings in Resources */, + E375D68B20C69E280035FEC1 /* MainInterface.storyboard in Resources */, + E31312D220C78A36003A0744 /* Images.xcassets in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + E375D6C020C76C1F0035FEC1 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + E375D6C220C76C1F0035FEC1 /* LaunchScreen.xib in Resources */, + E375D6C320C76C1F0035FEC1 /* Open Sans-Bold.ttf in Resources */, + E375D6C420C76C1F0035FEC1 /* Open Sans-BoldItalic.ttf in Resources */, + E31312D320C78A36003A0744 /* Images.xcassets in Resources */, + E375D6C520C76C1F0035FEC1 /* Open Sans-ExtraBold.ttf in Resources */, + E375D6C620C76C1F0035FEC1 /* Open Sans-ExtraBoldItalic.ttf in Resources */, + E375D6C720C76C1F0035FEC1 /* Open Sans-Italic.ttf in Resources */, + E375D6C820C76C1F0035FEC1 /* Open Sans-Light.ttf in Resources */, + E375D6C920C76C1F0035FEC1 /* Open Sans-LightItalic.ttf in Resources */, + E375D6CA20C76C1F0035FEC1 /* Open Sans-SemiBold.ttf in Resources */, + E375D6CB20C76C1F0035FEC1 /* Open Sans-SemiBoldItalic.ttf in Resources */, + E375D6CC20C76C1F0035FEC1 /* Open Sans.ttf in Resources */, + E375D6CD20C76C1F0035FEC1 /* Entypo.ttf in Resources */, + E375D6CE20C76C1F0035FEC1 /* EvilIcons.ttf in Resources */, + E375D6CF20C76C1F0035FEC1 /* Feather.ttf in Resources */, + E375D6D020C76C1F0035FEC1 /* FontAwesome.ttf in Resources */, + E375D6D120C76C1F0035FEC1 /* Foundation.ttf in Resources */, + E3618956227801E000E86DF9 /* GoogleService-Info.plist in Resources */, + E375D6D220C76C1F0035FEC1 /* Ionicons.ttf in Resources */, + E359AFBC221BDB6F009FCE1C /* InfoPList.strings in Resources */, + E36C3B5E2147A56B00097C81 /* VideoTrimmerViewController.xib in Resources */, + E375D6D320C76C1F0035FEC1 /* MaterialCommunityIcons.ttf in Resources */, + E375D6D420C76C1F0035FEC1 /* MaterialIcons.ttf in Resources */, + E375D6D520C76C1F0035FEC1 /* Octicons.ttf in Resources */, + E375D6D620C76C1F0035FEC1 /* SimpleLineIcons.ttf in Resources */, + E375D6D720C76C1F0035FEC1 /* Zocial.ttf in Resources */, + E375D6D820C76C1F0035FEC1 /* NixplayIcon.svg in Resources */, + E375D6D920C76C1F0035FEC1 /* NixplayIcon.ttf in Resources */, + E375D6DA20C76C1F0035FEC1 /* NixplayIcon.woff in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + E375D6FE20C76D350035FEC1 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 07FD4C9C21CCDBB500B6C7CB /* Localizable.strings in Resources */, + E359AFBD221BDB6F009FCE1C /* InfoPList.strings in Resources */, + E375D6FF20C76D350035FEC1 /* MainInterface.storyboard in Resources */, + E31312D420C78A36003A0744 /* Images.xcassets in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + E375D79320C770DA0035FEC1 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + E375D79520C770DA0035FEC1 /* LaunchScreen.xib in Resources */, + E375D79620C770DA0035FEC1 /* Open Sans-Bold.ttf in Resources */, + E375D79720C770DA0035FEC1 /* Open Sans-BoldItalic.ttf in Resources */, + E31312D520C78A36003A0744 /* Images.xcassets in Resources */, + E375D79820C770DA0035FEC1 /* Open Sans-ExtraBold.ttf in Resources */, + E375D79920C770DA0035FEC1 /* Open Sans-ExtraBoldItalic.ttf in Resources */, + E375D79A20C770DA0035FEC1 /* Open Sans-Italic.ttf in Resources */, + E375D79B20C770DA0035FEC1 /* Open Sans-Light.ttf in Resources */, + E375D79C20C770DA0035FEC1 /* Open Sans-LightItalic.ttf in Resources */, + E375D79D20C770DA0035FEC1 /* Open Sans-SemiBold.ttf in Resources */, + E375D79E20C770DA0035FEC1 /* Open Sans-SemiBoldItalic.ttf in Resources */, + E375D79F20C770DA0035FEC1 /* Open Sans.ttf in Resources */, + E375D7A020C770DA0035FEC1 /* Entypo.ttf in Resources */, + E375D7A120C770DA0035FEC1 /* EvilIcons.ttf in Resources */, + E375D7A220C770DA0035FEC1 /* Feather.ttf in Resources */, + E375D7A320C770DA0035FEC1 /* FontAwesome.ttf in Resources */, + E375D7A420C770DA0035FEC1 /* Foundation.ttf in Resources */, + E3618951227801C400E86DF9 /* GoogleService-Info.plist in Resources */, + E375D7A520C770DA0035FEC1 /* Ionicons.ttf in Resources */, + E359AFBE221BDB6F009FCE1C /* InfoPList.strings in Resources */, + E36C3B5F2147A56B00097C81 /* VideoTrimmerViewController.xib in Resources */, + E375D7A620C770DA0035FEC1 /* MaterialCommunityIcons.ttf in Resources */, + E375D7A720C770DA0035FEC1 /* MaterialIcons.ttf in Resources */, + E375D7A820C770DA0035FEC1 /* Octicons.ttf in Resources */, + E375D7A920C770DA0035FEC1 /* SimpleLineIcons.ttf in Resources */, + E375D7AA20C770DA0035FEC1 /* Zocial.ttf in Resources */, + E375D7AB20C770DA0035FEC1 /* NixplayIcon.svg in Resources */, + E375D7AC20C770DA0035FEC1 /* NixplayIcon.ttf in Resources */, + E375D7AD20C770DA0035FEC1 /* NixplayIcon.woff in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + E3858744215C723500625D49 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + E3858745215C723500625D49 /* LaunchScreen.xib in Resources */, + E3858746215C723500625D49 /* Open Sans-Bold.ttf in Resources */, + E3858747215C723500625D49 /* Open Sans-BoldItalic.ttf in Resources */, + E3858748215C723500625D49 /* Images.xcassets in Resources */, + E3858749215C723500625D49 /* Open Sans-ExtraBold.ttf in Resources */, + E385874A215C723500625D49 /* Open Sans-ExtraBoldItalic.ttf in Resources */, + E385874B215C723500625D49 /* Open Sans-Italic.ttf in Resources */, + E385874C215C723500625D49 /* Open Sans-Light.ttf in Resources */, + E385874D215C723500625D49 /* Open Sans-LightItalic.ttf in Resources */, + E385874E215C723500625D49 /* Open Sans-SemiBold.ttf in Resources */, + E385874F215C723500625D49 /* Open Sans-SemiBoldItalic.ttf in Resources */, + E3858751215C723500625D49 /* Open Sans.ttf in Resources */, + E3858752215C723500625D49 /* Entypo.ttf in Resources */, + E3858753215C723500625D49 /* EvilIcons.ttf in Resources */, + E3858754215C723500625D49 /* Feather.ttf in Resources */, + E3858755215C723500625D49 /* FontAwesome.ttf in Resources */, + E3858756215C723500625D49 /* Foundation.ttf in Resources */, + E3858757215C723500625D49 /* Ionicons.ttf in Resources */, + E359AFB7221BDB6F009FCE1C /* InfoPList.strings in Resources */, + E3858759215C723500625D49 /* MaterialCommunityIcons.ttf in Resources */, + E385875A215C723500625D49 /* MaterialIcons.ttf in Resources */, + E385875B215C723500625D49 /* Octicons.ttf in Resources */, + E385875C215C723500625D49 /* SimpleLineIcons.ttf in Resources */, + E385875D215C723500625D49 /* Zocial.ttf in Resources */, + E385875E215C723500625D49 /* NixplayIcon.svg in Resources */, + E385875F215C723500625D49 /* NixplayIcon.ttf in Resources */, + E3858760215C723500625D49 /* NixplayIcon.woff in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + E3AC971A20CFC24E00E1F671 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + E3AC971B20CFC24E00E1F671 /* LaunchScreen.xib in Resources */, + E3AC971C20CFC24E00E1F671 /* Open Sans-Bold.ttf in Resources */, + E3AC971D20CFC24E00E1F671 /* Open Sans-BoldItalic.ttf in Resources */, + E3AC971E20CFC24E00E1F671 /* Images.xcassets in Resources */, + E3AC971F20CFC24E00E1F671 /* Open Sans-ExtraBold.ttf in Resources */, + E3AC972020CFC24E00E1F671 /* Open Sans-ExtraBoldItalic.ttf in Resources */, + E3AC972120CFC24E00E1F671 /* Open Sans-Italic.ttf in Resources */, + E3AC972220CFC24E00E1F671 /* Open Sans-Light.ttf in Resources */, + E3AC972320CFC24E00E1F671 /* Open Sans-LightItalic.ttf in Resources */, + E3AC972420CFC24E00E1F671 /* Open Sans-SemiBold.ttf in Resources */, + E3AC972520CFC24E00E1F671 /* Open Sans-SemiBoldItalic.ttf in Resources */, + E3AC972620CFC24E00E1F671 /* Open Sans.ttf in Resources */, + E3AC972720CFC24E00E1F671 /* Entypo.ttf in Resources */, + E3AC972820CFC24E00E1F671 /* EvilIcons.ttf in Resources */, + E3AC972920CFC24E00E1F671 /* Feather.ttf in Resources */, + E3AC972A20CFC24E00E1F671 /* FontAwesome.ttf in Resources */, + E3AC972B20CFC24E00E1F671 /* Foundation.ttf in Resources */, + E3618953227801D000E86DF9 /* GoogleService-Info.plist in Resources */, + E3AC972C20CFC24E00E1F671 /* Ionicons.ttf in Resources */, + E359AFB9221BDB6F009FCE1C /* InfoPList.strings in Resources */, + E36C3B5C2147A56B00097C81 /* VideoTrimmerViewController.xib in Resources */, + E3AC972D20CFC24E00E1F671 /* MaterialCommunityIcons.ttf in Resources */, + E3AC972E20CFC24E00E1F671 /* MaterialIcons.ttf in Resources */, + E3AC972F20CFC24E00E1F671 /* Octicons.ttf in Resources */, + E3AC973020CFC24E00E1F671 /* SimpleLineIcons.ttf in Resources */, + E3AC973120CFC24E00E1F671 /* Zocial.ttf in Resources */, + E3AC973220CFC24E00E1F671 /* NixplayIcon.svg in Resources */, + E3AC973320CFC24E00E1F671 /* NixplayIcon.ttf in Resources */, + E3AC973420CFC24E00E1F671 /* NixplayIcon.woff in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + E3C119FE20C77242007CD3BC /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 07FD4C9D21CCDBB500B6C7CB /* Localizable.strings in Resources */, + E359AFBF221BDB6F009FCE1C /* InfoPList.strings in Resources */, + E3C119FF20C77242007CD3BC /* MainInterface.storyboard in Resources */, + E31312D620C78A36003A0744 /* Images.xcassets in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Bundle React Native code and images"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "export NODE_BINARY=node\n../node_modules/react-native/scripts/react-native-xcode.sh\n"; + }; + 03E9BBC1E4D07D1658DA81FC /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-MAAGAppBeta-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; + 1820EA76866916A2FE9C33DC /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-MAAGApp-tvOS-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; + 225E38FA76CF8F60B2A86019 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-MagShareExtension-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; + 24A8F82D907AED15FB13CADD /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-MAAGAppProd-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; + 28DD9B5BC359DA310C3311C5 /* [CP] Copy Pods Resources */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-MAAGApp/Pods-MAAGApp-resources.sh", + "${PODS_ROOT}/GMImagePicker/GMImagePicker/GMEmptyFolder@1x.png", + "${PODS_ROOT}/GMImagePicker/GMImagePicker/GMEmptyFolder@2x.png", + "${PODS_ROOT}/GMImagePicker/GMImagePicker/GMSelected.png", + "${PODS_ROOT}/GMImagePicker/GMImagePicker/GMSelected@2x.png", + "${PODS_ROOT}/GMImagePicker/GMImagePicker/GMVideoIcon.png", + "${PODS_ROOT}/GMImagePicker/GMImagePicker/GMVideoIcon@2x.png", + "${PODS_ROOT}/GMImagePicker/GMImagePicker/Base.lproj", + "${PODS_ROOT}/GMImagePicker/GMImagePicker/de.lproj", + "${PODS_ROOT}/GMImagePicker/GMImagePicker/en.lproj", + "${PODS_ROOT}/GMImagePicker/GMImagePicker/ja.lproj", + "${PODS_ROOT}/Mixpanel/Mixpanel/Images/MPArrowLeft.png", + "${PODS_ROOT}/Mixpanel/Mixpanel/Images/MPArrowLeft@2x.png", + "${PODS_ROOT}/Mixpanel/Mixpanel/Images/MPArrowRight.png", + "${PODS_ROOT}/Mixpanel/Mixpanel/Images/MPArrowRight@2x.png", + "${PODS_ROOT}/Mixpanel/Mixpanel/Images/MPCheckmark.png", + "${PODS_ROOT}/Mixpanel/Mixpanel/Images/MPCheckmark@2x.png", + "${PODS_ROOT}/Mixpanel/Mixpanel/Images/MPCloseButton.png", + "${PODS_ROOT}/Mixpanel/Mixpanel/Images/MPCloseButton@2x.png", + "${PODS_ROOT}/Mixpanel/Mixpanel/Images/MPCloseButton@3x.png", + "${PODS_ROOT}/Mixpanel/Mixpanel/Images/MPDismissKeyboard.png", + "${PODS_ROOT}/Mixpanel/Mixpanel/Images/MPDismissKeyboard@2x.png", + "${PODS_ROOT}/Mixpanel/Mixpanel/Images/MPLogo.png", + "${PODS_ROOT}/Mixpanel/Mixpanel/Images/MPLogo@2x.png", + "${PODS_ROOT}/Mixpanel/Mixpanel/Images/placeholder-image.png", + "${PODS_ROOT}/Mixpanel/Mixpanel/MPTakeoverNotificationViewController~ipad.xib", + "${PODS_ROOT}/Mixpanel/Mixpanel/MPTakeoverNotificationViewController~iphonelandscape.xib", + "${PODS_ROOT}/Mixpanel/Mixpanel/MPTakeoverNotificationViewController~iphoneportrait.xib", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/AntDesign.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Entypo.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/EvilIcons.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Feather.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/FontAwesome.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/FontAwesome5_Brands.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/FontAwesome5_Regular.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/FontAwesome5_Solid.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Fontisto.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Foundation.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Ionicons.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/MaterialCommunityIcons.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/MaterialIcons.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Octicons.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/SimpleLineIcons.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Zocial.ttf", + ); + name = "[CP] Copy Pods Resources"; + outputPaths = ( + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/GMEmptyFolder@1x.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/GMEmptyFolder@2x.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/GMSelected.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/GMSelected@2x.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/GMVideoIcon.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/GMVideoIcon@2x.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Base.lproj", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/de.lproj", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/en.lproj", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ja.lproj", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPArrowLeft.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPArrowLeft@2x.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPArrowRight.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPArrowRight@2x.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPCheckmark.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPCheckmark@2x.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPCloseButton.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPCloseButton@2x.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPCloseButton@3x.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPDismissKeyboard.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPDismissKeyboard@2x.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPLogo.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPLogo@2x.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/placeholder-image.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPTakeoverNotificationViewController~ipad.nib", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPTakeoverNotificationViewController~iphonelandscape.nib", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPTakeoverNotificationViewController~iphoneportrait.nib", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/AntDesign.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Entypo.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/EvilIcons.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Feather.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FontAwesome.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FontAwesome5_Brands.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FontAwesome5_Regular.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FontAwesome5_Solid.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Fontisto.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Foundation.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Ionicons.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MaterialCommunityIcons.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MaterialIcons.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Octicons.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/SimpleLineIcons.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Zocial.ttf", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-MAAGApp/Pods-MAAGApp-resources.sh\"\n"; + showEnvVarsInLog = 0; + }; + 2D02E4CB1E0B4B27006451C7 /* Bundle React Native Code And Images */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Bundle React Native Code And Images"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "export NODE_BINARY=node\n../node_modules/react-native/scripts/react-native-xcode.sh"; + }; + 2E34B57AEF9FF04D23E347A6 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-MAAGApp-tvOSTests-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; + 352A0E1917912F3456945AE8 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-MAAGAppTests-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; + 4DEDE95B0481B5C971F1B3A3 /* [CP] Copy Pods Resources */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-MAAGAppBeta/Pods-MAAGAppBeta-resources.sh", + "${PODS_ROOT}/GMImagePicker/GMImagePicker/GMEmptyFolder@1x.png", + "${PODS_ROOT}/GMImagePicker/GMImagePicker/GMEmptyFolder@2x.png", + "${PODS_ROOT}/GMImagePicker/GMImagePicker/GMSelected.png", + "${PODS_ROOT}/GMImagePicker/GMImagePicker/GMSelected@2x.png", + "${PODS_ROOT}/GMImagePicker/GMImagePicker/GMVideoIcon.png", + "${PODS_ROOT}/GMImagePicker/GMImagePicker/GMVideoIcon@2x.png", + "${PODS_ROOT}/GMImagePicker/GMImagePicker/Base.lproj", + "${PODS_ROOT}/GMImagePicker/GMImagePicker/de.lproj", + "${PODS_ROOT}/GMImagePicker/GMImagePicker/en.lproj", + "${PODS_ROOT}/GMImagePicker/GMImagePicker/ja.lproj", + "${PODS_ROOT}/Mixpanel/Mixpanel/Images/MPArrowLeft.png", + "${PODS_ROOT}/Mixpanel/Mixpanel/Images/MPArrowLeft@2x.png", + "${PODS_ROOT}/Mixpanel/Mixpanel/Images/MPArrowRight.png", + "${PODS_ROOT}/Mixpanel/Mixpanel/Images/MPArrowRight@2x.png", + "${PODS_ROOT}/Mixpanel/Mixpanel/Images/MPCheckmark.png", + "${PODS_ROOT}/Mixpanel/Mixpanel/Images/MPCheckmark@2x.png", + "${PODS_ROOT}/Mixpanel/Mixpanel/Images/MPCloseButton.png", + "${PODS_ROOT}/Mixpanel/Mixpanel/Images/MPCloseButton@2x.png", + "${PODS_ROOT}/Mixpanel/Mixpanel/Images/MPCloseButton@3x.png", + "${PODS_ROOT}/Mixpanel/Mixpanel/Images/MPDismissKeyboard.png", + "${PODS_ROOT}/Mixpanel/Mixpanel/Images/MPDismissKeyboard@2x.png", + "${PODS_ROOT}/Mixpanel/Mixpanel/Images/MPLogo.png", + "${PODS_ROOT}/Mixpanel/Mixpanel/Images/MPLogo@2x.png", + "${PODS_ROOT}/Mixpanel/Mixpanel/Images/placeholder-image.png", + "${PODS_ROOT}/Mixpanel/Mixpanel/MPTakeoverNotificationViewController~ipad.xib", + "${PODS_ROOT}/Mixpanel/Mixpanel/MPTakeoverNotificationViewController~iphonelandscape.xib", + "${PODS_ROOT}/Mixpanel/Mixpanel/MPTakeoverNotificationViewController~iphoneportrait.xib", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/AntDesign.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Entypo.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/EvilIcons.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Feather.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/FontAwesome.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/FontAwesome5_Brands.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/FontAwesome5_Regular.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/FontAwesome5_Solid.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Fontisto.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Foundation.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Ionicons.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/MaterialCommunityIcons.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/MaterialIcons.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Octicons.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/SimpleLineIcons.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Zocial.ttf", + ); + name = "[CP] Copy Pods Resources"; + outputPaths = ( + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/GMEmptyFolder@1x.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/GMEmptyFolder@2x.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/GMSelected.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/GMSelected@2x.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/GMVideoIcon.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/GMVideoIcon@2x.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Base.lproj", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/de.lproj", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/en.lproj", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ja.lproj", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPArrowLeft.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPArrowLeft@2x.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPArrowRight.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPArrowRight@2x.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPCheckmark.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPCheckmark@2x.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPCloseButton.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPCloseButton@2x.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPCloseButton@3x.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPDismissKeyboard.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPDismissKeyboard@2x.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPLogo.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPLogo@2x.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/placeholder-image.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPTakeoverNotificationViewController~ipad.nib", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPTakeoverNotificationViewController~iphonelandscape.nib", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPTakeoverNotificationViewController~iphoneportrait.nib", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/AntDesign.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Entypo.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/EvilIcons.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Feather.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FontAwesome.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FontAwesome5_Brands.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FontAwesome5_Regular.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FontAwesome5_Solid.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Fontisto.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Foundation.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Ionicons.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MaterialCommunityIcons.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MaterialIcons.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Octicons.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/SimpleLineIcons.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Zocial.ttf", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-MAAGAppBeta/Pods-MAAGAppBeta-resources.sh\"\n"; + showEnvVarsInLog = 0; + }; + 55A22F9530E391A591FC8755 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-MagShareExtensionQa-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; + 8E30F00FF744F8086A676555 /* [CP] Copy Pods Resources */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-MAAGAppProd/Pods-MAAGAppProd-resources.sh", + "${PODS_ROOT}/GMImagePicker/GMImagePicker/GMEmptyFolder@1x.png", + "${PODS_ROOT}/GMImagePicker/GMImagePicker/GMEmptyFolder@2x.png", + "${PODS_ROOT}/GMImagePicker/GMImagePicker/GMSelected.png", + "${PODS_ROOT}/GMImagePicker/GMImagePicker/GMSelected@2x.png", + "${PODS_ROOT}/GMImagePicker/GMImagePicker/GMVideoIcon.png", + "${PODS_ROOT}/GMImagePicker/GMImagePicker/GMVideoIcon@2x.png", + "${PODS_ROOT}/GMImagePicker/GMImagePicker/Base.lproj", + "${PODS_ROOT}/GMImagePicker/GMImagePicker/de.lproj", + "${PODS_ROOT}/GMImagePicker/GMImagePicker/en.lproj", + "${PODS_ROOT}/GMImagePicker/GMImagePicker/ja.lproj", + "${PODS_ROOT}/Mixpanel/Mixpanel/Images/MPArrowLeft.png", + "${PODS_ROOT}/Mixpanel/Mixpanel/Images/MPArrowLeft@2x.png", + "${PODS_ROOT}/Mixpanel/Mixpanel/Images/MPArrowRight.png", + "${PODS_ROOT}/Mixpanel/Mixpanel/Images/MPArrowRight@2x.png", + "${PODS_ROOT}/Mixpanel/Mixpanel/Images/MPCheckmark.png", + "${PODS_ROOT}/Mixpanel/Mixpanel/Images/MPCheckmark@2x.png", + "${PODS_ROOT}/Mixpanel/Mixpanel/Images/MPCloseButton.png", + "${PODS_ROOT}/Mixpanel/Mixpanel/Images/MPCloseButton@2x.png", + "${PODS_ROOT}/Mixpanel/Mixpanel/Images/MPCloseButton@3x.png", + "${PODS_ROOT}/Mixpanel/Mixpanel/Images/MPDismissKeyboard.png", + "${PODS_ROOT}/Mixpanel/Mixpanel/Images/MPDismissKeyboard@2x.png", + "${PODS_ROOT}/Mixpanel/Mixpanel/Images/MPLogo.png", + "${PODS_ROOT}/Mixpanel/Mixpanel/Images/MPLogo@2x.png", + "${PODS_ROOT}/Mixpanel/Mixpanel/Images/placeholder-image.png", + "${PODS_ROOT}/Mixpanel/Mixpanel/MPTakeoverNotificationViewController~ipad.xib", + "${PODS_ROOT}/Mixpanel/Mixpanel/MPTakeoverNotificationViewController~iphonelandscape.xib", + "${PODS_ROOT}/Mixpanel/Mixpanel/MPTakeoverNotificationViewController~iphoneportrait.xib", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/AntDesign.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Entypo.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/EvilIcons.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Feather.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/FontAwesome.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/FontAwesome5_Brands.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/FontAwesome5_Regular.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/FontAwesome5_Solid.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Fontisto.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Foundation.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Ionicons.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/MaterialCommunityIcons.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/MaterialIcons.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Octicons.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/SimpleLineIcons.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Zocial.ttf", + ); + name = "[CP] Copy Pods Resources"; + outputPaths = ( + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/GMEmptyFolder@1x.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/GMEmptyFolder@2x.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/GMSelected.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/GMSelected@2x.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/GMVideoIcon.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/GMVideoIcon@2x.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Base.lproj", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/de.lproj", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/en.lproj", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ja.lproj", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPArrowLeft.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPArrowLeft@2x.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPArrowRight.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPArrowRight@2x.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPCheckmark.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPCheckmark@2x.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPCloseButton.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPCloseButton@2x.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPCloseButton@3x.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPDismissKeyboard.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPDismissKeyboard@2x.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPLogo.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPLogo@2x.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/placeholder-image.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPTakeoverNotificationViewController~ipad.nib", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPTakeoverNotificationViewController~iphonelandscape.nib", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPTakeoverNotificationViewController~iphoneportrait.nib", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/AntDesign.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Entypo.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/EvilIcons.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Feather.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FontAwesome.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FontAwesome5_Brands.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FontAwesome5_Regular.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FontAwesome5_Solid.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Fontisto.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Foundation.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Ionicons.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MaterialCommunityIcons.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MaterialIcons.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Octicons.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/SimpleLineIcons.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Zocial.ttf", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-MAAGAppProd/Pods-MAAGAppProd-resources.sh\"\n"; + showEnvVarsInLog = 0; + }; + 950E6A073B92759FCC35474E /* [CP] Copy Pods Resources */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-MAAGAppRnd/Pods-MAAGAppRnd-resources.sh", + "${PODS_ROOT}/GMImagePicker/GMImagePicker/GMEmptyFolder@1x.png", + "${PODS_ROOT}/GMImagePicker/GMImagePicker/GMEmptyFolder@2x.png", + "${PODS_ROOT}/GMImagePicker/GMImagePicker/GMSelected.png", + "${PODS_ROOT}/GMImagePicker/GMImagePicker/GMSelected@2x.png", + "${PODS_ROOT}/GMImagePicker/GMImagePicker/GMVideoIcon.png", + "${PODS_ROOT}/GMImagePicker/GMImagePicker/GMVideoIcon@2x.png", + "${PODS_ROOT}/GMImagePicker/GMImagePicker/Base.lproj", + "${PODS_ROOT}/GMImagePicker/GMImagePicker/de.lproj", + "${PODS_ROOT}/GMImagePicker/GMImagePicker/en.lproj", + "${PODS_ROOT}/GMImagePicker/GMImagePicker/ja.lproj", + "${PODS_ROOT}/Mixpanel/Mixpanel/Images/MPArrowLeft.png", + "${PODS_ROOT}/Mixpanel/Mixpanel/Images/MPArrowLeft@2x.png", + "${PODS_ROOT}/Mixpanel/Mixpanel/Images/MPArrowRight.png", + "${PODS_ROOT}/Mixpanel/Mixpanel/Images/MPArrowRight@2x.png", + "${PODS_ROOT}/Mixpanel/Mixpanel/Images/MPCheckmark.png", + "${PODS_ROOT}/Mixpanel/Mixpanel/Images/MPCheckmark@2x.png", + "${PODS_ROOT}/Mixpanel/Mixpanel/Images/MPCloseButton.png", + "${PODS_ROOT}/Mixpanel/Mixpanel/Images/MPCloseButton@2x.png", + "${PODS_ROOT}/Mixpanel/Mixpanel/Images/MPCloseButton@3x.png", + "${PODS_ROOT}/Mixpanel/Mixpanel/Images/MPDismissKeyboard.png", + "${PODS_ROOT}/Mixpanel/Mixpanel/Images/MPDismissKeyboard@2x.png", + "${PODS_ROOT}/Mixpanel/Mixpanel/Images/MPLogo.png", + "${PODS_ROOT}/Mixpanel/Mixpanel/Images/MPLogo@2x.png", + "${PODS_ROOT}/Mixpanel/Mixpanel/Images/placeholder-image.png", + "${PODS_ROOT}/Mixpanel/Mixpanel/MPTakeoverNotificationViewController~ipad.xib", + "${PODS_ROOT}/Mixpanel/Mixpanel/MPTakeoverNotificationViewController~iphonelandscape.xib", + "${PODS_ROOT}/Mixpanel/Mixpanel/MPTakeoverNotificationViewController~iphoneportrait.xib", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/AntDesign.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Entypo.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/EvilIcons.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Feather.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/FontAwesome.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/FontAwesome5_Brands.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/FontAwesome5_Regular.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/FontAwesome5_Solid.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Fontisto.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Foundation.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Ionicons.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/MaterialCommunityIcons.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/MaterialIcons.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Octicons.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/SimpleLineIcons.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Zocial.ttf", + ); + name = "[CP] Copy Pods Resources"; + outputPaths = ( + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/GMEmptyFolder@1x.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/GMEmptyFolder@2x.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/GMSelected.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/GMSelected@2x.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/GMVideoIcon.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/GMVideoIcon@2x.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Base.lproj", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/de.lproj", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/en.lproj", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ja.lproj", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPArrowLeft.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPArrowLeft@2x.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPArrowRight.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPArrowRight@2x.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPCheckmark.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPCheckmark@2x.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPCloseButton.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPCloseButton@2x.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPCloseButton@3x.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPDismissKeyboard.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPDismissKeyboard@2x.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPLogo.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPLogo@2x.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/placeholder-image.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPTakeoverNotificationViewController~ipad.nib", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPTakeoverNotificationViewController~iphonelandscape.nib", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPTakeoverNotificationViewController~iphoneportrait.nib", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/AntDesign.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Entypo.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/EvilIcons.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Feather.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FontAwesome.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FontAwesome5_Brands.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FontAwesome5_Regular.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FontAwesome5_Solid.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Fontisto.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Foundation.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Ionicons.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MaterialCommunityIcons.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MaterialIcons.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Octicons.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/SimpleLineIcons.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Zocial.ttf", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-MAAGAppRnd/Pods-MAAGAppRnd-resources.sh\"\n"; + showEnvVarsInLog = 0; + }; + 9C103C88707599C7C4AC834E /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-MAAGAppAlpha-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; + A0F6AFA0A819A6D6CDC0D12A /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-MAAGAppQa-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; + A2C907554F381C3D139E9FA4 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-MagShareExtensionAlpha-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; + C309A330762C65BBCC7D19CF /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-MagShareExtensionBeta-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; + CE1A60B55B09031718E7973C /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-MAAGApp-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; + DDD9C2159DBA1BD5B5B3FAA6 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-MAAGAppRnd-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; + E337475120AD296200017645 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "export NODE_BINARY=node\n../node_modules/react-native/scripts/react-native-xcode.sh"; + }; + E375D5AF20C69A330035FEC1 /* Bundle React Native code and images */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Bundle React Native code and images"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "export NODE_BINARY=node\n../node_modules/react-native/scripts/react-native-xcode.sh\n"; + }; + E375D68C20C69E280035FEC1 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "export NODE_BINARY=node\n../node_modules/react-native/scripts/react-native-xcode.sh\n"; + }; + E375D6DC20C76C1F0035FEC1 /* Bundle React Native code and images */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Bundle React Native code and images"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "export NODE_BINARY=node\n../node_modules/react-native/scripts/react-native-xcode.sh"; + }; + E375D70020C76D350035FEC1 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "export NODE_BINARY=node\n../node_modules/react-native/scripts/react-native-xcode.sh"; + }; + E375D7AF20C770DA0035FEC1 /* Bundle React Native code and images */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Bundle React Native code and images"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "export NODE_BINARY=node\n../node_modules/react-native/scripts/react-native-xcode.sh"; + }; + E37E287ADF21F56ACB5B40DD /* [CP] Copy Pods Resources */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-MAAGAppQa/Pods-MAAGAppQa-resources.sh", + "${PODS_ROOT}/GMImagePicker/GMImagePicker/GMEmptyFolder@1x.png", + "${PODS_ROOT}/GMImagePicker/GMImagePicker/GMEmptyFolder@2x.png", + "${PODS_ROOT}/GMImagePicker/GMImagePicker/GMSelected.png", + "${PODS_ROOT}/GMImagePicker/GMImagePicker/GMSelected@2x.png", + "${PODS_ROOT}/GMImagePicker/GMImagePicker/GMVideoIcon.png", + "${PODS_ROOT}/GMImagePicker/GMImagePicker/GMVideoIcon@2x.png", + "${PODS_ROOT}/GMImagePicker/GMImagePicker/Base.lproj", + "${PODS_ROOT}/GMImagePicker/GMImagePicker/de.lproj", + "${PODS_ROOT}/GMImagePicker/GMImagePicker/en.lproj", + "${PODS_ROOT}/GMImagePicker/GMImagePicker/ja.lproj", + "${PODS_ROOT}/Mixpanel/Mixpanel/Images/MPArrowLeft.png", + "${PODS_ROOT}/Mixpanel/Mixpanel/Images/MPArrowLeft@2x.png", + "${PODS_ROOT}/Mixpanel/Mixpanel/Images/MPArrowRight.png", + "${PODS_ROOT}/Mixpanel/Mixpanel/Images/MPArrowRight@2x.png", + "${PODS_ROOT}/Mixpanel/Mixpanel/Images/MPCheckmark.png", + "${PODS_ROOT}/Mixpanel/Mixpanel/Images/MPCheckmark@2x.png", + "${PODS_ROOT}/Mixpanel/Mixpanel/Images/MPCloseButton.png", + "${PODS_ROOT}/Mixpanel/Mixpanel/Images/MPCloseButton@2x.png", + "${PODS_ROOT}/Mixpanel/Mixpanel/Images/MPCloseButton@3x.png", + "${PODS_ROOT}/Mixpanel/Mixpanel/Images/MPDismissKeyboard.png", + "${PODS_ROOT}/Mixpanel/Mixpanel/Images/MPDismissKeyboard@2x.png", + "${PODS_ROOT}/Mixpanel/Mixpanel/Images/MPLogo.png", + "${PODS_ROOT}/Mixpanel/Mixpanel/Images/MPLogo@2x.png", + "${PODS_ROOT}/Mixpanel/Mixpanel/Images/placeholder-image.png", + "${PODS_ROOT}/Mixpanel/Mixpanel/MPTakeoverNotificationViewController~ipad.xib", + "${PODS_ROOT}/Mixpanel/Mixpanel/MPTakeoverNotificationViewController~iphonelandscape.xib", + "${PODS_ROOT}/Mixpanel/Mixpanel/MPTakeoverNotificationViewController~iphoneportrait.xib", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/AntDesign.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Entypo.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/EvilIcons.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Feather.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/FontAwesome.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/FontAwesome5_Brands.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/FontAwesome5_Regular.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/FontAwesome5_Solid.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Fontisto.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Foundation.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Ionicons.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/MaterialCommunityIcons.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/MaterialIcons.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Octicons.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/SimpleLineIcons.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Zocial.ttf", + ); + name = "[CP] Copy Pods Resources"; + outputPaths = ( + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/GMEmptyFolder@1x.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/GMEmptyFolder@2x.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/GMSelected.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/GMSelected@2x.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/GMVideoIcon.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/GMVideoIcon@2x.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Base.lproj", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/de.lproj", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/en.lproj", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ja.lproj", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPArrowLeft.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPArrowLeft@2x.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPArrowRight.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPArrowRight@2x.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPCheckmark.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPCheckmark@2x.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPCloseButton.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPCloseButton@2x.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPCloseButton@3x.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPDismissKeyboard.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPDismissKeyboard@2x.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPLogo.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPLogo@2x.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/placeholder-image.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPTakeoverNotificationViewController~ipad.nib", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPTakeoverNotificationViewController~iphonelandscape.nib", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPTakeoverNotificationViewController~iphoneportrait.nib", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/AntDesign.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Entypo.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/EvilIcons.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Feather.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FontAwesome.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FontAwesome5_Brands.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FontAwesome5_Regular.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FontAwesome5_Solid.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Fontisto.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Foundation.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Ionicons.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MaterialCommunityIcons.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MaterialIcons.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Octicons.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/SimpleLineIcons.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Zocial.ttf", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-MAAGAppQa/Pods-MAAGAppQa-resources.sh\"\n"; + showEnvVarsInLog = 0; + }; + E3858762215C723500625D49 /* Bundle React Native code and images */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Bundle React Native code and images"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "export NODE_BINARY=node\n../node_modules/react-native/scripts/react-native-xcode.sh\n"; + }; + E3AC973620CFC24E00E1F671 /* Bundle React Native code and images */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Bundle React Native code and images"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "export NODE_BINARY=node\n../node_modules/react-native/scripts/react-native-xcode.sh"; + }; + E3C11A0020C77242007CD3BC /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "export NODE_BINARY=node\n../node_modules/react-native/scripts/react-native-xcode.sh"; + }; + F54BE4B422300DCB006385CA /* Copy GoogleService-Info.plist */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "Copy GoogleService-Info.plist"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "# Type a script or drag a script file from your workspace to insert its path.\ncp \"${SRCROOT}/GoogleServiceInfoPlists/qa/GoogleService-Info.plist\" \"${SRCROOT}/GoogleService-Info.plist\"\n\n"; + }; + F54BE57D22301A8D006385CA /* Run Fabric Crashlytics */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "Run Fabric Crashlytics"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "# Type a script or drag a script file from your workspace to insert its path.\n\"${PODS_ROOT}/Fabric/run\"\n"; + }; + F54BE57E22301AAC006385CA /* Run Fabric Crashlytics */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "Run Fabric Crashlytics"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "# Type a script or drag a script file from your workspace to insert its path.\n\"${PODS_ROOT}/Fabric/run\"\n"; + }; + F54BE57F22301B41006385CA /* Run Fabric Crashlytics */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "Run Fabric Crashlytics"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "# Type a script or drag a script file from your workspace to insert its path.\n\"${PODS_ROOT}/Fabric/run\"\n"; + }; + F54BE58022301B9A006385CA /* Run Fabric Crashlytics */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "Run Fabric Crashlytics"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "# Type a script or drag a script file from your workspace to insert its path.\n\"${PODS_ROOT}/Fabric/run\"\n"; + }; + F54BE5B022301C33006385CA /* Copy GoogleService-Info.plist */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "Copy GoogleService-Info.plist"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "# Type a script or drag a script file from your workspace to insert its path.\ncp \"${SRCROOT}/GoogleServiceInfoPlists/beta/GoogleService-Info.plist\" \"${SRCROOT}/GoogleService-Info.plist\"\n"; + }; + F54BE60622302011006385CA /* Copy GoogleService-Info.plist */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "Copy GoogleService-Info.plist"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "# Type a script or drag a script file from your workspace to insert its path.\ncp \"${SRCROOT}/GoogleServiceInfoPlists/alpha/GoogleService-Info.plist\" \"${SRCROOT}/GoogleService-Info.plist\"\n"; + }; + F54BE6072230202C006385CA /* Run Fabric Crashlytics */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "Run Fabric Crashlytics"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "# Type a script or drag a script file from your workspace to insert its path.\n\"${PODS_ROOT}/Fabric/run\"\n"; + }; + F54BE60822302199006385CA /* Copy GoogleServices-Info.plist */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "Copy GoogleServices-Info.plist"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "# Type a script or drag a script file from your workspace to insert its path.\ncp \"${SRCROOT}/GoogleServiceInfoPlists/prod/GoogleService-Info.plist\" \"${SRCROOT}/GoogleService-Info.plist\"\n"; + }; + F54BE609223021CE006385CA /* Run Fabric Crashlytics */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "Run Fabric Crashlytics"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "# Type a script or drag a script file from your workspace to insert its path.\n\"${PODS_ROOT}/Fabric/run\"\n"; + }; + F54BE60B2230227A006385CA /* Copy GoogleService-Info.plist */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "Copy GoogleService-Info.plist"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "# Type a script or drag a script file from your workspace to insert its path.\ncp \"${SRCROOT}/GoogleServiceInfoPlists/prod/GoogleService-Info.plist\" \"${SRCROOT}/GoogleService-Info.plist\"\n"; + }; + FC5CA6ACA722E7FD70AF5FDA /* [CP] Copy Pods Resources */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-MAAGAppAlpha/Pods-MAAGAppAlpha-resources.sh", + "${PODS_ROOT}/GMImagePicker/GMImagePicker/GMEmptyFolder@1x.png", + "${PODS_ROOT}/GMImagePicker/GMImagePicker/GMEmptyFolder@2x.png", + "${PODS_ROOT}/GMImagePicker/GMImagePicker/GMSelected.png", + "${PODS_ROOT}/GMImagePicker/GMImagePicker/GMSelected@2x.png", + "${PODS_ROOT}/GMImagePicker/GMImagePicker/GMVideoIcon.png", + "${PODS_ROOT}/GMImagePicker/GMImagePicker/GMVideoIcon@2x.png", + "${PODS_ROOT}/GMImagePicker/GMImagePicker/Base.lproj", + "${PODS_ROOT}/GMImagePicker/GMImagePicker/de.lproj", + "${PODS_ROOT}/GMImagePicker/GMImagePicker/en.lproj", + "${PODS_ROOT}/GMImagePicker/GMImagePicker/ja.lproj", + "${PODS_ROOT}/Mixpanel/Mixpanel/Images/MPArrowLeft.png", + "${PODS_ROOT}/Mixpanel/Mixpanel/Images/MPArrowLeft@2x.png", + "${PODS_ROOT}/Mixpanel/Mixpanel/Images/MPArrowRight.png", + "${PODS_ROOT}/Mixpanel/Mixpanel/Images/MPArrowRight@2x.png", + "${PODS_ROOT}/Mixpanel/Mixpanel/Images/MPCheckmark.png", + "${PODS_ROOT}/Mixpanel/Mixpanel/Images/MPCheckmark@2x.png", + "${PODS_ROOT}/Mixpanel/Mixpanel/Images/MPCloseButton.png", + "${PODS_ROOT}/Mixpanel/Mixpanel/Images/MPCloseButton@2x.png", + "${PODS_ROOT}/Mixpanel/Mixpanel/Images/MPCloseButton@3x.png", + "${PODS_ROOT}/Mixpanel/Mixpanel/Images/MPDismissKeyboard.png", + "${PODS_ROOT}/Mixpanel/Mixpanel/Images/MPDismissKeyboard@2x.png", + "${PODS_ROOT}/Mixpanel/Mixpanel/Images/MPLogo.png", + "${PODS_ROOT}/Mixpanel/Mixpanel/Images/MPLogo@2x.png", + "${PODS_ROOT}/Mixpanel/Mixpanel/Images/placeholder-image.png", + "${PODS_ROOT}/Mixpanel/Mixpanel/MPTakeoverNotificationViewController~ipad.xib", + "${PODS_ROOT}/Mixpanel/Mixpanel/MPTakeoverNotificationViewController~iphonelandscape.xib", + "${PODS_ROOT}/Mixpanel/Mixpanel/MPTakeoverNotificationViewController~iphoneportrait.xib", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/AntDesign.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Entypo.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/EvilIcons.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Feather.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/FontAwesome.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/FontAwesome5_Brands.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/FontAwesome5_Regular.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/FontAwesome5_Solid.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Fontisto.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Foundation.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Ionicons.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/MaterialCommunityIcons.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/MaterialIcons.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Octicons.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/SimpleLineIcons.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Zocial.ttf", + ); + name = "[CP] Copy Pods Resources"; + outputPaths = ( + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/GMEmptyFolder@1x.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/GMEmptyFolder@2x.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/GMSelected.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/GMSelected@2x.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/GMVideoIcon.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/GMVideoIcon@2x.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Base.lproj", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/de.lproj", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/en.lproj", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ja.lproj", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPArrowLeft.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPArrowLeft@2x.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPArrowRight.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPArrowRight@2x.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPCheckmark.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPCheckmark@2x.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPCloseButton.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPCloseButton@2x.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPCloseButton@3x.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPDismissKeyboard.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPDismissKeyboard@2x.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPLogo.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPLogo@2x.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/placeholder-image.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPTakeoverNotificationViewController~ipad.nib", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPTakeoverNotificationViewController~iphonelandscape.nib", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPTakeoverNotificationViewController~iphoneportrait.nib", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/AntDesign.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Entypo.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/EvilIcons.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Feather.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FontAwesome.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FontAwesome5_Brands.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FontAwesome5_Regular.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FontAwesome5_Solid.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Fontisto.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Foundation.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Ionicons.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MaterialCommunityIcons.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MaterialIcons.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Octicons.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/SimpleLineIcons.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Zocial.ttf", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-MAAGAppAlpha/Pods-MAAGAppAlpha-resources.sh\"\n"; + showEnvVarsInLog = 0; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 00E356EA1AD99517003FC87E /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 00E356F31AD99517003FC87E /* NixplayTests.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 13B07F871A680F5B00A75B9A /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 13B07FBC1A68108700A75B9A /* AppDelegate.m in Sources */, + 13B07FC11A68108700A75B9A /* main.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 2D02E4771E0B4A5D006451C7 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 2D02E4BF1E0B4AB3006451C7 /* main.m in Sources */, + 2D02E4BC1E0B4A80006451C7 /* AppDelegate.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 2D02E48C1E0B4A5D006451C7 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 2DCD954D1E0B4F2C00145EB5 /* NixplayTests.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + E337472620AD255E00017645 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + E3689AAA21801DFD0056ABF4 /* ReceiverTableViewController.m in Sources */, + E3689AA021801DFD0056ABF4 /* ContainerViewController.m in Sources */, + E3B6AD9220AD4B0B00359839 /* NixShareExtension.m in Sources */, + E3689AA521801DFD0056ABF4 /* ImageCaptionViewController.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + E375D57520C69A330035FEC1 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + E375D57620C69A330035FEC1 /* AppDelegate.m in Sources */, + E375D57720C69A330035FEC1 /* main.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + E375D67220C69E280035FEC1 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + E3689AAC21801DFD0056ABF4 /* ReceiverTableViewController.m in Sources */, + E3689AA221801DFD0056ABF4 /* ContainerViewController.m in Sources */, + E375D67320C69E280035FEC1 /* NixShareExtension.m in Sources */, + E3689AA721801DFD0056ABF4 /* ImageCaptionViewController.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + E375D6A120C76C1F0035FEC1 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + E375D6A220C76C1F0035FEC1 /* AppDelegate.m in Sources */, + E375D6A320C76C1F0035FEC1 /* main.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + E375D6E520C76D350035FEC1 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + E3689AAD21801DFD0056ABF4 /* ReceiverTableViewController.m in Sources */, + E3689AA321801DFD0056ABF4 /* ContainerViewController.m in Sources */, + E375D6E620C76D350035FEC1 /* NixShareExtension.m in Sources */, + E3689AA821801DFD0056ABF4 /* ImageCaptionViewController.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + E375D77420C770DA0035FEC1 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + E375D77520C770DA0035FEC1 /* AppDelegate.m in Sources */, + E375D77620C770DA0035FEC1 /* main.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + E3858715215C723500625D49 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + E3858716215C723500625D49 /* AppDelegate.m in Sources */, + E3858717215C723500625D49 /* main.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + E3AC96FB20CFC24E00E1F671 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + E3AC96FC20CFC24E00E1F671 /* AppDelegate.m in Sources */, + E3AC96FD20CFC24E00E1F671 /* main.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + E3C119E520C77242007CD3BC /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + E3689AAE21801DFD0056ABF4 /* ReceiverTableViewController.m in Sources */, + E3689AA421801DFD0056ABF4 /* ContainerViewController.m in Sources */, + E3C119E620C77242007CD3BC /* NixShareExtension.m in Sources */, + E3689AA921801DFD0056ABF4 /* ImageCaptionViewController.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 00E356F51AD99517003FC87E /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 13B07F861A680F5B00A75B9A /* MAAGApp */; + targetProxy = 00E356F41AD99517003FC87E /* PBXContainerItemProxy */; + }; + 2D02E4921E0B4A5D006451C7 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 2D02E47A1E0B4A5D006451C7 /* MAAGApp-tvOS */; + targetProxy = 2D02E4911E0B4A5D006451C7 /* PBXContainerItemProxy */; + }; + E337473420AD255E00017645 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = E337472920AD255E00017645 /* MagShareExtension */; + targetProxy = E337473320AD255E00017645 /* PBXContainerItemProxy */; + }; + E375D69820C69F150035FEC1 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = E375D67120C69E280035FEC1 /* MagShareExtensionQa */; + targetProxy = E375D69720C69F150035FEC1 /* PBXContainerItemProxy */; + }; + E375D70820C76D7B0035FEC1 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = E375D6E420C76D350035FEC1 /* MagShareExtensionAlpha */; + targetProxy = E375D70720C76D7B0035FEC1 /* PBXContainerItemProxy */; + }; + E3AC96F820CFC24E00E1F671 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = E337472920AD255E00017645 /* MagShareExtension */; + targetProxy = E3AC96F920CFC24E00E1F671 /* PBXContainerItemProxy */; + }; + E3C11A4320C77691007CD3BC /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = E3C119E420C77242007CD3BC /* MagShareExtensionBeta */; + targetProxy = E3C11A4220C77691007CD3BC /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + 07FD4C9F21CCDBB500B6C7CB /* Localizable.strings */ = { + isa = PBXVariantGroup; + children = ( + 07FD4C9E21CCDBB500B6C7CB /* en */, + 077DCE5021D30C9A0021AC80 /* de */, + 858A4D4D23E2ACF0003BA966 /* ja */, + ); + name = Localizable.strings; + sourceTree = ""; + }; + 13B07FB11A68108700A75B9A /* LaunchScreen.xib */ = { + isa = PBXVariantGroup; + children = ( + 13B07FB21A68108700A75B9A /* Base */, + 858A4D4A23E2ACF0003BA966 /* ja */, + ); + name = LaunchScreen.xib; + path = Nixplay; + sourceTree = ""; + }; + 4312F64E2097033300975F09 /* MainInterface.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 4312F64F2097033300975F09 /* Base */, + 077DCE3F21D3083E0021AC80 /* en */, + 077DCE5121D30D010021AC80 /* de */, + 858A4D4B23E2ACF0003BA966 /* ja */, + ); + name = MainInterface.storyboard; + sourceTree = ""; + }; + E359AFC1221BDB6F009FCE1C /* InfoPList.strings */ = { + isa = PBXVariantGroup; + children = ( + E359AFC0221BDB6F009FCE1C /* en */, + E359AFC2221BDB73009FCE1C /* de */, + 858A4D4C23E2ACF0003BA966 /* ja */, + ); + name = InfoPList.strings; + path = Nixplay; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 00E356F61AD99517003FC87E /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 673C749C6C58DC7ECC14804E /* Pods-MAAGAppTests.debug.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Manual; + DEVELOPMENT_TEAM = FLA95J3G7U; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + HEADER_SEARCH_PATHS = ( + "$(inherited)", + "$(SRCROOT)/../node_modules/react-native-creedon-imagepicker/ios", + "$(SRCROOT)/../node_modules/react-native-device-info/RNDeviceInfo", + "$(SRCROOT)/../node_modules/react-native-fast-image/ios/FastImage/**", + "$(SRCROOT)/../node_modules/react-native-safe-area/ios/RNSafeArea", + "$(SRCROOT)/../node_modules/react-native-vector-icons/RNVectorIconsManager", + "$(SRCROOT)/../node_modules/react-native-video/ios", + "$(SRCROOT)/../node_modules/react-native-share-extension/ios", + "$(SRCROOT)/../node_modules/react-native-thumbnail/ios", + "$(SRCROOT)/../node_modules/react-native-google-signin/ios/RNGoogleSignin/**", + "$(SRCROOT)/../node_modules/react-native-video-trimmer/ios", + "$(SRCROOT)/../node_modules/react-native-enhance-webview/ios/**", + "$(SRCROOT)/../node_modules/react-native-firebase/ios/RNFirebase/**", + "$(SRCROOT)/../node_modules/react-native-interactable/lib/ios/Interactable", + ); + INFOPLIST_FILE = NixplayTests/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + ); + OTHER_LDFLAGS = ( + "-ObjC", + "-lc++", + ); + PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Nixplay.app/Nixplay"; + }; + name = Debug; + }; + 00E356F71AD99517003FC87E /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 9975DD8DE08C9242C3D5CE62 /* Pods-MAAGAppTests.release.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Manual; + COPY_PHASE_STRIP = NO; + DEVELOPMENT_TEAM = FLA95J3G7U; + HEADER_SEARCH_PATHS = ( + "$(inherited)", + "$(SRCROOT)/../node_modules/react-native-creedon-imagepicker/ios", + "$(SRCROOT)/../node_modules/react-native-device-info/RNDeviceInfo", + "$(SRCROOT)/../node_modules/react-native-fast-image/ios/FastImage/**", + "$(SRCROOT)/../node_modules/react-native-safe-area/ios/RNSafeArea", + "$(SRCROOT)/../node_modules/react-native-vector-icons/RNVectorIconsManager", + "$(SRCROOT)/../node_modules/react-native-video/ios", + "$(SRCROOT)/../node_modules/react-native-share-extension/ios", + "$(SRCROOT)/../node_modules/react-native-thumbnail/ios", + "$(SRCROOT)/../node_modules/react-native-google-signin/ios/RNGoogleSignin/**", + "$(SRCROOT)/../node_modules/react-native-video-trimmer/ios", + "$(SRCROOT)/../node_modules/react-native-enhance-webview/ios/**", + "$(SRCROOT)/../node_modules/react-native-firebase/ios/RNFirebase/**", + "$(SRCROOT)/../node_modules/react-native-interactable/lib/ios/Interactable", + ); + INFOPLIST_FILE = NixplayTests/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + ); + OTHER_LDFLAGS = ( + "-ObjC", + "-lc++", + ); + PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Nixplay.app/Nixplay"; + }; + name = Release; + }; + 13B07F941A680F5B00A75B9A /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = E70CA087BABCD40183F85B65 /* Pods-MAAGApp.debug.xcconfig */; + buildSettings = { + APP_DISPLAY_NAME = MAAGApp; + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage3; + CODE_SIGN_ENTITLEMENTS = Nixplay/Nixplay.entitlements; + CODE_SIGN_IDENTITY = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CODE_SIGN_STYLE = Manual; + CURRENT_PROJECT_VERSION = 1; + DEAD_CODE_STRIPPING = NO; + DEVELOPMENT_TEAM = FLA95J3G7U; + HEADER_SEARCH_PATHS = ( + "$(inherited)", + "$(SRCROOT)/../node_modules/react-native-creedon-imagepicker/ios", + "$(SRCROOT)/../node_modules/react-native-device-info/RNDeviceInfo", + "$(SRCROOT)/../node_modules/react-native-fast-image/ios/FastImage/**", + "$(SRCROOT)/../node_modules/react-native-safe-area/ios/RNSafeArea", + "$(SRCROOT)/../node_modules/react-native-vector-icons/RNVectorIconsManager", + "$(SRCROOT)/../node_modules/react-native-video/ios", + "$(SRCROOT)/../node_modules/react-native-share-extension/ios", + "$(SRCROOT)/../node_modules/react-native-linear-gradient/BVLinearGradient", + "$(SRCROOT)/../node_modules/react-native-google-signin/ios/RNGoogleSignin/**", + "$(SRCROOT)/../node_modules/react-native-video-trimmer/ios", + "$(SRCROOT)/../node_modules/react-native-splash-screen/ios", + "$(SRCROOT)/../node_modules/react-native-enhance-webview/ios/**", + "$(SRCROOT)/../node_modules/react-native-firebase/ios/RNFirebase/**", + "$(SRCROOT)/../node_modules/react-native-interactable/lib/ios/Interactable", + ); + INFOPLIST_FILE = Nixplay/Info.plist; + INFOPLIST_OTHER_PREPROCESSOR_FLAGS = "-traditional"; + INFOPLIST_PREFIX_HEADER = "${BUILD_DIR}/GeneratedInfoPlistDotEnv.h"; + INFOPLIST_PREPROCESS = YES; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Pods/ReactNativeAppsee/ios", + ); + MARKETING_VERSION = 0.0.1; + OTHER_LDFLAGS = ( + "$(inherited)", + "-ObjC", + "-lc++", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.creedon.Nixplay; + PRODUCT_NAME = MAAGApp; + PROVISIONING_PROFILE = "0e50e0c6-d474-4d6c-92c0-078deaa89b51"; + PROVISIONING_PROFILE_SPECIFIER = "match Development com.creedon.Nixplay"; + SWIFT_VERSION = 4.2; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Debug; + }; + 13B07F951A680F5B00A75B9A /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 00D16586BF8B643DFE94AD18 /* Pods-MAAGApp.release.xcconfig */; + buildSettings = { + APP_DISPLAY_NAME = MAAGApp; + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage3; + CODE_SIGN_ENTITLEMENTS = Nixplay/Nixplay.entitlements; + CODE_SIGN_IDENTITY = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution"; + CODE_SIGN_STYLE = Manual; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = FLA95J3G7U; + HEADER_SEARCH_PATHS = ( + "$(inherited)", + "$(SRCROOT)/../node_modules/react-native-creedon-imagepicker/ios", + "$(SRCROOT)/../node_modules/react-native-device-info/RNDeviceInfo", + "$(SRCROOT)/../node_modules/react-native-fast-image/ios/FastImage/**", + "$(SRCROOT)/../node_modules/react-native-safe-area/ios/RNSafeArea", + "$(SRCROOT)/../node_modules/react-native-vector-icons/RNVectorIconsManager", + "$(SRCROOT)/../node_modules/react-native-video/ios", + "$(SRCROOT)/../node_modules/react-native-share-extension/ios", + "$(SRCROOT)/../node_modules/react-native-linear-gradient/BVLinearGradient", + "$(SRCROOT)/../node_modules/react-native-google-signin/ios/RNGoogleSignin/**", + "$(SRCROOT)/../node_modules/react-native-video-trimmer/ios", + "$(SRCROOT)/../node_modules/react-native-splash-screen/ios", + "$(SRCROOT)/../node_modules/react-native-enhance-webview/ios/**", + "$(SRCROOT)/../node_modules/react-native-firebase/ios/RNFirebase/**", + "$(SRCROOT)/../node_modules/react-native-interactable/lib/ios/Interactable", + ); + INFOPLIST_FILE = Nixplay/Info.plist; + INFOPLIST_OTHER_PREPROCESSOR_FLAGS = "-traditional"; + INFOPLIST_PREFIX_HEADER = "${BUILD_DIR}/GeneratedInfoPlistDotEnv.h"; + INFOPLIST_PREPROCESS = YES; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + LIBRARY_SEARCH_PATHS = "$(inherited)"; + MARKETING_VERSION = 0.0.1; + OTHER_LDFLAGS = ( + "$(inherited)", + "-ObjC", + "-lc++", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.creedon.Nixplay; + PRODUCT_NAME = MAAGApp; + PROVISIONING_PROFILE = "791983dd-3ff8-44c4-991f-8e27eca7385f"; + PROVISIONING_PROFILE_SPECIFIER = "match AppStore com.creedon.Nixplay"; + SWIFT_VERSION = 4.2; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Release; + }; + 2D02E4971E0B4A5E006451C7 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 192A1559DC16FA93E41BC671 /* Pods-MAAGApp-tvOS.debug.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = "App Icon & Top Shelf Image"; + ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage3; + CLANG_ANALYZER_NONNULL = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_STYLE = Manual; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + DEVELOPMENT_TEAM = ""; + ENABLE_TESTABILITY = YES; + GCC_NO_COMMON_BLOCKS = YES; + HEADER_SEARCH_PATHS = ( + "$(inherited)", + "$(SRCROOT)/../node_modules/react-native-creedon-imagepicker/ios", + "$(SRCROOT)/../node_modules/react-native-device-info/RNDeviceInfo", + "$(SRCROOT)/../node_modules/react-native-fast-image/ios/FastImage/**", + "$(SRCROOT)/../node_modules/react-native-safe-area/ios/RNSafeArea", + "$(SRCROOT)/../node_modules/react-native-vector-icons/RNVectorIconsManager", + "$(SRCROOT)/../node_modules/react-native-video/ios", + "$(SRCROOT)/../node_modules/react-native-share-extension/ios", + "$(SRCROOT)/../node_modules/react-native-thumbnail/ios", + "$(SRCROOT)/../node_modules/react-native-google-signin/ios/RNGoogleSignin/**", + "$(SRCROOT)/../node_modules/react-native-video-trimmer/ios", + "$(SRCROOT)/../node_modules/react-native-enhance-webview/ios/**", + "$(SRCROOT)/../node_modules/react-native-firebase/ios/RNFirebase/**", + "$(SRCROOT)/../node_modules/react-native-interactable/lib/ios/Interactable", + ); + INFOPLIST_FILE = "Nixplay-tvOS/Info.plist"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + ); + MARKETING_VERSION = 0.0.1; + OTHER_LDFLAGS = ( + "-ObjC", + "-lc++", + ); + PRODUCT_BUNDLE_IDENTIFIER = "com.creedon.Nixplay.--PRODUCT-NAME-rfc1034identifier-"; + PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SDKROOT = appletvos; + TARGETED_DEVICE_FAMILY = 3; + TVOS_DEPLOYMENT_TARGET = 9.2; + }; + name = Debug; + }; + 2D02E4981E0B4A5E006451C7 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = D1A9A8E0117601A98A38D4A9 /* Pods-MAAGApp-tvOS.release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = "App Icon & Top Shelf Image"; + ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage3; + CLANG_ANALYZER_NONNULL = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_STYLE = Manual; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEVELOPMENT_TEAM = ""; + GCC_NO_COMMON_BLOCKS = YES; + HEADER_SEARCH_PATHS = ( + "$(inherited)", + "$(SRCROOT)/../node_modules/react-native-creedon-imagepicker/ios", + "$(SRCROOT)/../node_modules/react-native-device-info/RNDeviceInfo", + "$(SRCROOT)/../node_modules/react-native-fast-image/ios/FastImage/**", + "$(SRCROOT)/../node_modules/react-native-safe-area/ios/RNSafeArea", + "$(SRCROOT)/../node_modules/react-native-vector-icons/RNVectorIconsManager", + "$(SRCROOT)/../node_modules/react-native-video/ios", + "$(SRCROOT)/../node_modules/react-native-share-extension/ios", + "$(SRCROOT)/../node_modules/react-native-thumbnail/ios", + "$(SRCROOT)/../node_modules/react-native-google-signin/ios/RNGoogleSignin/**", + "$(SRCROOT)/../node_modules/react-native-video-trimmer/ios", + "$(SRCROOT)/../node_modules/react-native-enhance-webview/ios/**", + "$(SRCROOT)/../node_modules/react-native-firebase/ios/RNFirebase/**", + "$(SRCROOT)/../node_modules/react-native-interactable/lib/ios/Interactable", + ); + INFOPLIST_FILE = "Nixplay-tvOS/Info.plist"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + ); + MARKETING_VERSION = 0.0.1; + OTHER_LDFLAGS = ( + "-ObjC", + "-lc++", + ); + PRODUCT_BUNDLE_IDENTIFIER = "com.creedon.Nixplay.--PRODUCT-NAME-rfc1034identifier-"; + PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SDKROOT = appletvos; + TARGETED_DEVICE_FAMILY = 3; + TVOS_DEPLOYMENT_TARGET = 9.2; + }; + name = Release; + }; + 2D02E4991E0B4A5E006451C7 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 45AE8E01729B523EEFC62A4C /* Pods-MAAGApp-tvOSTests.debug.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CLANG_ANALYZER_NONNULL = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_STYLE = Manual; + DEBUG_INFORMATION_FORMAT = dwarf; + DEVELOPMENT_TEAM = ""; + ENABLE_TESTABILITY = YES; + GCC_NO_COMMON_BLOCKS = YES; + HEADER_SEARCH_PATHS = ( + "$(inherited)", + "$(SRCROOT)/../node_modules/react-native-creedon-imagepicker/ios", + "$(SRCROOT)/../node_modules/react-native-device-info/RNDeviceInfo", + "$(SRCROOT)/../node_modules/react-native-fast-image/ios/FastImage/**", + "$(SRCROOT)/../node_modules/react-native-safe-area/ios/RNSafeArea", + "$(SRCROOT)/../node_modules/react-native-vector-icons/RNVectorIconsManager", + "$(SRCROOT)/../node_modules/react-native-video/ios", + "$(SRCROOT)/../node_modules/react-native-share-extension/ios", + "$(SRCROOT)/../node_modules/react-native-thumbnail/ios", + "$(SRCROOT)/../node_modules/react-native-google-signin/ios/RNGoogleSignin/**", + "$(SRCROOT)/../node_modules/react-native-video-trimmer/ios", + "$(SRCROOT)/../node_modules/react-native-enhance-webview/ios/**", + "$(SRCROOT)/../node_modules/react-native-firebase/ios/RNFirebase/**", + "$(SRCROOT)/../node_modules/react-native-interactable/lib/ios/Interactable", + ); + INFOPLIST_FILE = "Nixplay-tvOSTests/Info.plist"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + ); + OTHER_LDFLAGS = ( + "-ObjC", + "-lc++", + ); + PRODUCT_BUNDLE_IDENTIFIER = "com.facebook.REACT.Nixplay-tvOSTests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SDKROOT = appletvos; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Nixplay-tvOS.app/Nixplay-tvOS"; + TVOS_DEPLOYMENT_TARGET = 10.1; + }; + name = Debug; + }; + 2D02E49A1E0B4A5E006451C7 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 5F338B50A2BF65491C0EE0B0 /* Pods-MAAGApp-tvOSTests.release.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CLANG_ANALYZER_NONNULL = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_STYLE = Manual; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEVELOPMENT_TEAM = ""; + GCC_NO_COMMON_BLOCKS = YES; + HEADER_SEARCH_PATHS = ( + "$(inherited)", + "$(SRCROOT)/../node_modules/react-native-creedon-imagepicker/ios", + "$(SRCROOT)/../node_modules/react-native-device-info/RNDeviceInfo", + "$(SRCROOT)/../node_modules/react-native-fast-image/ios/FastImage/**", + "$(SRCROOT)/../node_modules/react-native-safe-area/ios/RNSafeArea", + "$(SRCROOT)/../node_modules/react-native-vector-icons/RNVectorIconsManager", + "$(SRCROOT)/../node_modules/react-native-video/ios", + "$(SRCROOT)/../node_modules/react-native-share-extension/ios", + "$(SRCROOT)/../node_modules/react-native-thumbnail/ios", + "$(SRCROOT)/../node_modules/react-native-google-signin/ios/RNGoogleSignin/**", + "$(SRCROOT)/../node_modules/react-native-video-trimmer/ios", + "$(SRCROOT)/../node_modules/react-native-enhance-webview/ios/**", + "$(SRCROOT)/../node_modules/react-native-firebase/ios/RNFirebase/**", + "$(SRCROOT)/../node_modules/react-native-interactable/lib/ios/Interactable", + ); + INFOPLIST_FILE = "Nixplay-tvOSTests/Info.plist"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + ); + OTHER_LDFLAGS = ( + "-ObjC", + "-lc++", + ); + PRODUCT_BUNDLE_IDENTIFIER = "com.facebook.REACT.Nixplay-tvOSTests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SDKROOT = appletvos; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Nixplay-tvOS.app/Nixplay-tvOS"; + TVOS_DEPLOYMENT_TARGET = 10.1; + }; + name = Release; + }; + 83CBBA201A601CBA00E9B192 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + }; + name = Debug; + }; + 83CBBA211A601CBA00E9B192 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = YES; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + E337473720AD255F00017645 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 1B388EA30E07B150E2ED34A3 /* Pods-MagShareExtension.debug.xcconfig */; + buildSettings = { + APPLICATION_EXTENSION_API_ONLY = YES; + APP_DISPLAY_NAME = MAAGApp; + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_ENTITLEMENTS = NixShareExtension/NixShareExtension.entitlements; + CODE_SIGN_IDENTITY = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CODE_SIGN_STYLE = Manual; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + DEVELOPMENT_TEAM = FLA95J3G7U; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREPROCESSOR_DEFINITIONS = ( + "$(inherited)", + "COCOAPODS=1", + NIXPLAY_APP_EXTENSIONS, + ); + HEADER_SEARCH_PATHS = ( + "$(inherited)", + "$(SRCROOT)/../node_modules/react-native-share-extension/ios/**", + "$(SRCROOT)/../node_modules/react-native/React/**", + "$(SRCROOT)/../node_modules/react-native-google-signin/ios/RNGoogleSignin/**", + "$(SRCROOT)/../node_modules/react-native-video-trimmer/ios", + "$(SRCROOT)/../node_modules/react-native-enhance-webview/ios/**", + "$(SRCROOT)/../node_modules/react-native-firebase/ios/RNFirebase/**", + "$(SRCROOT)/../node_modules/react-native-interactable/lib/ios/Interactable", + ); + INFOPLIST_FILE = NixShareExtension/Info.plist; + INFOPLIST_OTHER_PREPROCESSOR_FLAGS = "-traditional"; + INFOPLIST_PREFIX_HEADER = "${BUILD_DIR}/GeneratedInfoPlistDotEnv.h"; + INFOPLIST_PREPROCESS = YES; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + ); + MARKETING_VERSION = 0.0.1; + OTHER_LDFLAGS = ( + "$(inherited)", + "-lc++", + "-ObjC", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.creedon.Nixplay.PhotoShareExtension; + PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE = "580334b1-6ac4-4677-a1f3-7574f51a38d4"; + PROVISIONING_PROFILE_SPECIFIER = "match Development com.creedon.Nixplay.PhotoShareExtension"; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + E337473820AD255F00017645 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 2D9C8DCAB1DF23722D39C934 /* Pods-MagShareExtension.release.xcconfig */; + buildSettings = { + APPLICATION_EXTENSION_API_ONLY = YES; + APP_DISPLAY_NAME = MAAGApp; + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_ENTITLEMENTS = NixShareExtension/NixShareExtension.entitlements; + CODE_SIGN_IDENTITY = "iPhone Distribution"; + CODE_SIGN_STYLE = Manual; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEVELOPMENT_TEAM = FLA95J3G7U; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREPROCESSOR_DEFINITIONS = ( + "$(inherited)", + "COCOAPODS=1", + NIXPLAY_APP_EXTENSIONS, + ); + HEADER_SEARCH_PATHS = ( + "$(inherited)", + "$(SRCROOT)/../node_modules/react-native-share-extension/ios/**", + "$(SRCROOT)/../node_modules/react-native/React/**", + "$(SRCROOT)/../node_modules/react-native-google-signin/ios/RNGoogleSignin/**", + "$(SRCROOT)/../node_modules/react-native-video-trimmer/ios", + "$(SRCROOT)/../node_modules/react-native-enhance-webview/ios/**", + "$(SRCROOT)/../node_modules/react-native-firebase/ios/RNFirebase/**", + "$(SRCROOT)/../node_modules/react-native-interactable/lib/ios/Interactable", + ); + INFOPLIST_FILE = NixShareExtension/Info.plist; + INFOPLIST_OTHER_PREPROCESSOR_FLAGS = "-traditional"; + INFOPLIST_PREFIX_HEADER = "${BUILD_DIR}/GeneratedInfoPlistDotEnv.h"; + INFOPLIST_PREPROCESS = YES; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + ); + MARKETING_VERSION = 0.0.1; + OTHER_LDFLAGS = ( + "$(inherited)", + "-lc++", + "-ObjC", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.creedon.Nixplay.PhotoShareExtension; + PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE = "1b51ed26-b45d-4234-8067-ab05209a8847"; + PROVISIONING_PROFILE_SPECIFIER = "match AdHoc com.creedon.Nixplay.PhotoShareExtension"; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; + E375D5B320C69A330035FEC1 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 573AE4D78319E9722AB3C35D /* Pods-MAAGAppQa.debug.xcconfig */; + buildSettings = { + APP_DISPLAY_NAME = "MAAGApp qa"; + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage3; + CODE_SIGN_ENTITLEMENTS = Nixplay/Nixplay.qa.entitlements; + CODE_SIGN_IDENTITY = "iPhone Distribution"; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CODE_SIGN_STYLE = Manual; + CURRENT_PROJECT_VERSION = 1; + DEAD_CODE_STRIPPING = NO; + DEVELOPMENT_ASSET_PATHS = ""; + DEVELOPMENT_TEAM = FLA95J3G7U; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Pods/Intercom/Intercom", + ); + HEADER_SEARCH_PATHS = ( + "$(inherited)", + "$(SRCROOT)/../node_modules/react-native-creedon-imagepicker/ios", + "$(SRCROOT)/../node_modules/react-native-device-info/RNDeviceInfo", + "$(SRCROOT)/../node_modules/react-native-fast-image/ios/FastImage", + "$(SRCROOT)/../node_modules/react-native-safe-area/ios/RNSafeArea", + "$(SRCROOT)/../node_modules/react-native-vector-icons/RNVectorIconsManager", + "$(SRCROOT)/../node_modules/react-native-video/ios", + "$(SRCROOT)/../node_modules/react-native-share-extension/ios", + "$(SRCROOT)/../node_modules/react-native-linear-gradient/BVLinearGradient", + "$(SRCROOT)/../node_modules/react-native-google-signin/ios/RNGoogleSignin/**", + "$(SRCROOT)/../node_modules/react-native-video-trimmer/ios", + "$(SRCROOT)/../node_modules/react-native-splash-screen/ios", + "$(SRCROOT)/../node_modules/react-native-enhance-webview/ios", + "$(SRCROOT)/../node_modules/react-native-firebase/ios/RNFirebase/**", + "$(SRCROOT)/../node_modules/react-native-interactable/lib/ios/Interactable", + "$(SRCROOT)/../node_modules/react-native-appsee/ios", + ); + INFOPLIST_FILE = Nixplay/Info.plist; + INFOPLIST_OTHER_PREPROCESSOR_FLAGS = "-traditional"; + INFOPLIST_PREFIX_HEADER = ""; + INFOPLIST_PREPROCESS = YES; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + ); + MARKETING_VERSION = 0.0.1; + OTHER_LDFLAGS = ( + "$(inherited)", + "-ObjC", + "-lc++", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.creedon.Nixplay.qa; + PRODUCT_NAME = MAAGAppQa; + PROVISIONING_PROFILE = "9a694656-0c15-4bba-a9c8-7b62df5e7b88"; + PROVISIONING_PROFILE_SPECIFIER = "match Development com.creedon.Nixplay.qa"; + SWIFT_VERSION = 4.2; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Debug; + }; + E375D5B420C69A330035FEC1 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 3B444EF5D95D58BB99437D91 /* Pods-MAAGAppQa.release.xcconfig */; + buildSettings = { + APP_DISPLAY_NAME = "MAAGApp qa"; + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage3; + CODE_SIGN_ENTITLEMENTS = Nixplay/Nixplay.qa.entitlements; + CODE_SIGN_IDENTITY = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution"; + CODE_SIGN_STYLE = Manual; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_ASSET_PATHS = ""; + DEVELOPMENT_TEAM = FLA95J3G7U; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Pods/Intercom/Intercom", + ); + HEADER_SEARCH_PATHS = ( + "$(inherited)", + "$(SRCROOT)/../node_modules/react-native-creedon-imagepicker/ios", + "$(SRCROOT)/../node_modules/react-native-device-info/RNDeviceInfo", + "$(SRCROOT)/../node_modules/react-native-fast-image/ios/FastImage", + "$(SRCROOT)/../node_modules/react-native-safe-area/ios/RNSafeArea", + "$(SRCROOT)/../node_modules/react-native-vector-icons/RNVectorIconsManager", + "$(SRCROOT)/../node_modules/react-native-video/ios", + "$(SRCROOT)/../node_modules/react-native-share-extension/ios", + "$(SRCROOT)/../node_modules/react-native-linear-gradient/BVLinearGradient", + "$(SRCROOT)/../node_modules/react-native-google-signin/ios/RNGoogleSignin/**", + "$(SRCROOT)/../node_modules/react-native-video-trimmer/ios", + "$(SRCROOT)/../node_modules/react-native-splash-screen/ios", + "$(SRCROOT)/../node_modules/react-native-enhance-webview/ios", + "$(SRCROOT)/../node_modules/react-native-firebase/ios/RNFirebase/**", + "$(SRCROOT)/../node_modules/react-native-interactable/lib/ios/Interactable", + "$(SRCROOT)/../node_modules/react-native-appsee/ios", + ); + INFOPLIST_FILE = Nixplay/Info.plist; + INFOPLIST_OTHER_PREPROCESSOR_FLAGS = "-traditional"; + INFOPLIST_PREFIX_HEADER = ""; + INFOPLIST_PREPROCESS = YES; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + ); + MARKETING_VERSION = 0.0.1; + OTHER_LDFLAGS = ( + "$(inherited)", + "-ObjC", + "-lc++", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.creedon.Nixplay.qa; + PRODUCT_NAME = MAAGAppQa; + PROVISIONING_PROFILE = "7bdac94f-1e32-41af-856d-3cad88259fb8"; + PROVISIONING_PROFILE_SPECIFIER = "match AdHoc com.creedon.Nixplay.qa"; + SWIFT_VERSION = 4.2; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Release; + }; + E375D68E20C69E280035FEC1 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 580A8398533DC76C399D4E5A /* Pods-MagShareExtensionQa.debug.xcconfig */; + buildSettings = { + APPLICATION_EXTENSION_API_ONLY = YES; + APP_DISPLAY_NAME = "MAAGApp qa"; + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_ENTITLEMENTS = NixShareExtension/NixShareExtension.qa.entitlements; + CODE_SIGN_IDENTITY = "iPhone Distribution"; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CODE_SIGN_STYLE = Manual; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + DEVELOPMENT_TEAM = FLA95J3G7U; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREPROCESSOR_DEFINITIONS = ( + "$(inherited)", + "COCOAPODS=1", + NIXPLAY_APP_EXTENSIONS, + ); + HEADER_SEARCH_PATHS = ( + "$(inherited)", + "$(SRCROOT)/../node_modules/react-native-share-extension/ios/**", + "$(SRCROOT)/../node_modules/react-native/React/**", + "$(SRCROOT)/../node_modules/react-native-google-signin/ios/RNGoogleSignin/**", + "$(SRCROOT)/../node_modules/react-native-video-trimmer/ios", + "$(SRCROOT)/../node_modules/react-native-enhance-webview/ios/**", + "$(SRCROOT)/../node_modules/react-native-firebase/ios/RNFirebase/**", + "$(SRCROOT)/../node_modules/react-native-interactable/lib/ios/Interactable", + ); + INFOPLIST_FILE = NixShareExtension/Info.plist; + INFOPLIST_OTHER_PREPROCESSOR_FLAGS = "-traditional"; + INFOPLIST_PREFIX_HEADER = ""; + INFOPLIST_PREPROCESS = YES; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + ); + MARKETING_VERSION = 0.0.1; + OTHER_LDFLAGS = ( + "$(inherited)", + "-lc++", + "-ObjC", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.creedon.Nixplay.qa.PhotoShareExtension; + PRODUCT_NAME = MagShareExtensionQa; + PROVISIONING_PROFILE = "7b95f02c-1714-4cac-a3bd-3f20d02632b7"; + PROVISIONING_PROFILE_SPECIFIER = "match Development com.creedon.Nixplay.qa.PhotoShareExtension"; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + E375D68F20C69E280035FEC1 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = F98EC1BB3CD5D65AA5ECF6C1 /* Pods-MagShareExtensionQa.release.xcconfig */; + buildSettings = { + APPLICATION_EXTENSION_API_ONLY = YES; + APP_DISPLAY_NAME = "MAAGApp qa"; + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_ENTITLEMENTS = NixShareExtension/NixShareExtension.qa.entitlements; + CODE_SIGN_IDENTITY = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution"; + CODE_SIGN_STYLE = Manual; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEVELOPMENT_TEAM = FLA95J3G7U; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREPROCESSOR_DEFINITIONS = ( + "$(inherited)", + "COCOAPODS=1", + NIXPLAY_APP_EXTENSIONS, + ); + HEADER_SEARCH_PATHS = ( + "$(inherited)", + "$(SRCROOT)/../node_modules/react-native-share-extension/ios/**", + "$(SRCROOT)/../node_modules/react-native/React/**", + "$(SRCROOT)/../node_modules/react-native-google-signin/ios/RNGoogleSignin/**", + "$(SRCROOT)/../node_modules/react-native-video-trimmer/ios", + "$(SRCROOT)/../node_modules/react-native-enhance-webview/ios/**", + "$(SRCROOT)/../node_modules/react-native-firebase/ios/RNFirebase/**", + "$(SRCROOT)/../node_modules/react-native-interactable/lib/ios/Interactable", + ); + INFOPLIST_FILE = NixShareExtension/Info.plist; + INFOPLIST_OTHER_PREPROCESSOR_FLAGS = "-traditional"; + INFOPLIST_PREFIX_HEADER = ""; + INFOPLIST_PREPROCESS = YES; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + ); + MARKETING_VERSION = 0.0.1; + OTHER_LDFLAGS = ( + "$(inherited)", + "-lc++", + "-ObjC", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.creedon.Nixplay.qa.PhotoShareExtension; + PRODUCT_NAME = MagShareExtensionQa; + PROVISIONING_PROFILE = "03cfd1cd-be2c-48e0-9c13-0c9172e71568"; + PROVISIONING_PROFILE_SPECIFIER = "match AdHoc com.creedon.Nixplay.qa.PhotoShareExtension"; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; + E375D6E020C76C1F0035FEC1 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 501874915488C3B18BC243C9 /* Pods-MAAGAppAlpha.debug.xcconfig */; + buildSettings = { + APP_DISPLAY_NAME = "MAAGApp alpha"; + ASSETCATALOG_COMPILER_APPICON_NAME = "AppIcon-alpha"; + ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage3; + CODE_SIGN_ENTITLEMENTS = Nixplay/Nixplay.alpha.entitlements; + CODE_SIGN_IDENTITY = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CODE_SIGN_STYLE = Manual; + CURRENT_PROJECT_VERSION = 1; + DEAD_CODE_STRIPPING = NO; + DEVELOPMENT_TEAM = FLA95J3G7U; + HEADER_SEARCH_PATHS = ( + "$(inherited)", + "$(SRCROOT)/../node_modules/react-native-creedon-imagepicker/ios", + "$(SRCROOT)/../node_modules/react-native-device-info/RNDeviceInfo", + "$(SRCROOT)/../node_modules/react-native-fast-image/ios/FastImage/**", + "$(SRCROOT)/../node_modules/react-native-safe-area/ios/RNSafeArea", + "$(SRCROOT)/../node_modules/react-native-vector-icons/RNVectorIconsManager", + "$(SRCROOT)/../node_modules/react-native-video/ios", + "$(SRCROOT)/../node_modules/react-native-share-extension/ios", + "$(SRCROOT)/../../../ios/Pods/Headers/Public/Crashlytics", + "$(SRCROOT)/../node_modules/react-native-linear-gradient/BVLinearGradient", + "$(SRCROOT)/../node_modules/react-native-google-signin/ios/RNGoogleSignin/**", + "$(SRCROOT)/../node_modules/react-native-video-trimmer/ios", + "$(SRCROOT)/../node_modules/react-native-splash-screen/ios", + "$(SRCROOT)/../node_modules/react-native-enhance-webview/ios/**", + "$(SRCROOT)/../node_modules/react-native-firebase/ios/RNFirebase/**", + "$(SRCROOT)/../node_modules/react-native-interactable/lib/ios/Interactable", + ); + INFOPLIST_FILE = Nixplay/Info.plist; + INFOPLIST_OTHER_PREPROCESSOR_FLAGS = "-traditional"; + INFOPLIST_PREFIX_HEADER = "${BUILD_DIR}/GeneratedInfoPlistDotEnv.h"; + INFOPLIST_PREPROCESS = YES; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + ); + MARKETING_VERSION = 0.0.1; + OTHER_LDFLAGS = ( + "$(inherited)", + "-ObjC", + "-lc++", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.creedon.Nixplay.alpha; + PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE = "13771067-f30d-46b1-bc62-b3522c9a9880"; + PROVISIONING_PROFILE_SPECIFIER = "match Development com.creedon.Nixplay.alpha"; + SWIFT_VERSION = 4.2; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Debug; + }; + E375D6E120C76C1F0035FEC1 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = D2F3D4FE7C1DCE0AE62D1A03 /* Pods-MAAGAppAlpha.release.xcconfig */; + buildSettings = { + APP_DISPLAY_NAME = "MAAGApp alpha"; + ASSETCATALOG_COMPILER_APPICON_NAME = "AppIcon-alpha"; + ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage3; + CODE_SIGN_ENTITLEMENTS = Nixplay/Nixplay.alpha.entitlements; + CODE_SIGN_IDENTITY = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution"; + CODE_SIGN_STYLE = Manual; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = FLA95J3G7U; + HEADER_SEARCH_PATHS = ( + "$(inherited)", + "$(SRCROOT)/../node_modules/react-native-creedon-imagepicker/ios", + "$(SRCROOT)/../node_modules/react-native-device-info/RNDeviceInfo", + "$(SRCROOT)/../node_modules/react-native-fast-image/ios/FastImage/**", + "$(SRCROOT)/../node_modules/react-native-safe-area/ios/RNSafeArea", + "$(SRCROOT)/../node_modules/react-native-vector-icons/RNVectorIconsManager", + "$(SRCROOT)/../node_modules/react-native-video/ios", + "$(SRCROOT)/../node_modules/react-native-share-extension/ios", + "$(SRCROOT)/../../../ios/Pods/Headers/Public/Crashlytics", + "$(SRCROOT)/../node_modules/react-native-linear-gradient/BVLinearGradient", + "$(SRCROOT)/../node_modules/react-native-google-signin/ios/RNGoogleSignin/**", + "$(SRCROOT)/../node_modules/react-native-video-trimmer/ios", + "$(SRCROOT)/../node_modules/react-native-splash-screen/ios", + "$(SRCROOT)/../node_modules/react-native-enhance-webview/ios/**", + "$(SRCROOT)/../node_modules/react-native-firebase/ios/RNFirebase/**", + "$(SRCROOT)/../node_modules/react-native-interactable/lib/ios/Interactable", + ); + INFOPLIST_FILE = Nixplay/Info.plist; + INFOPLIST_OTHER_PREPROCESSOR_FLAGS = "-traditional"; + INFOPLIST_PREFIX_HEADER = "${BUILD_DIR}/GeneratedInfoPlistDotEnv.h"; + INFOPLIST_PREPROCESS = YES; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + ); + MARKETING_VERSION = 0.0.1; + OTHER_LDFLAGS = ( + "$(inherited)", + "-ObjC", + "-lc++", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.creedon.Nixplay.alpha; + PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE = "16f3e00c-f735-4082-824c-a6f5c7b7f866"; + PROVISIONING_PROFILE_SPECIFIER = "match AdHoc com.creedon.Nixplay.alpha"; + SWIFT_VERSION = 4.2; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Release; + }; + E375D70220C76D350035FEC1 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 8756E9EA15991360D624F896 /* Pods-MagShareExtensionAlpha.debug.xcconfig */; + buildSettings = { + APPLICATION_EXTENSION_API_ONLY = YES; + APP_DISPLAY_NAME = "MAAGApp alpha"; + ASSETCATALOG_COMPILER_APPICON_NAME = "AppIcon-alpha"; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_ENTITLEMENTS = NixShareExtension/NixShareExtension.alpha.entitlements; + CODE_SIGN_IDENTITY = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CODE_SIGN_STYLE = Manual; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + DEVELOPMENT_TEAM = FLA95J3G7U; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREPROCESSOR_DEFINITIONS = ( + "$(inherited)", + "COCOAPODS=1", + NIXPLAY_APP_EXTENSIONS, + ); + HEADER_SEARCH_PATHS = ( + "$(inherited)", + "$(SRCROOT)/../node_modules/react-native-share-extension/ios/**", + "$(SRCROOT)/../node_modules/react-native/React/**", + "$(SRCROOT)/../node_modules/react-native-google-signin/ios/RNGoogleSignin/**", + "$(SRCROOT)/../node_modules/react-native-video-trimmer/ios", + "$(SRCROOT)/../node_modules/react-native-enhance-webview/ios/**", + "$(SRCROOT)/../node_modules/react-native-firebase/ios/RNFirebase/**", + "$(SRCROOT)/../node_modules/react-native-interactable/lib/ios/Interactable", + ); + INFOPLIST_FILE = NixShareExtension/Info.plist; + INFOPLIST_OTHER_PREPROCESSOR_FLAGS = "-traditional"; + INFOPLIST_PREFIX_HEADER = "${BUILD_DIR}/GeneratedInfoPlistDotEnv.h"; + INFOPLIST_PREPROCESS = YES; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + ); + MARKETING_VERSION = 0.0.1; + OTHER_LDFLAGS = ( + "$(inherited)", + "-lc++", + "-ObjC", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.creedon.Nixplay.alpha.PhotoShareExtension; + PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE = "7b95f02c-1714-4cac-a3bd-3f20d02632b7"; + PROVISIONING_PROFILE_SPECIFIER = "match Development com.creedon.Nixplay.alpha.PhotoShareExtension"; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + E375D70320C76D350035FEC1 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 535BEA5B1A5A63268B9810C4 /* Pods-MagShareExtensionAlpha.release.xcconfig */; + buildSettings = { + APPLICATION_EXTENSION_API_ONLY = YES; + APP_DISPLAY_NAME = "MAAGApp alpha"; + ASSETCATALOG_COMPILER_APPICON_NAME = "AppIcon-alpha"; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_ENTITLEMENTS = NixShareExtension/NixShareExtension.alpha.entitlements; + CODE_SIGN_IDENTITY = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution"; + CODE_SIGN_STYLE = Manual; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEVELOPMENT_TEAM = FLA95J3G7U; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREPROCESSOR_DEFINITIONS = ( + "$(inherited)", + "COCOAPODS=1", + NIXPLAY_APP_EXTENSIONS, + ); + HEADER_SEARCH_PATHS = ( + "$(inherited)", + "$(SRCROOT)/../node_modules/react-native-share-extension/ios/**", + "$(SRCROOT)/../node_modules/react-native/React/**", + "$(SRCROOT)/../node_modules/react-native-google-signin/ios/RNGoogleSignin/**", + "$(SRCROOT)/../node_modules/react-native-video-trimmer/ios", + "$(SRCROOT)/../node_modules/react-native-enhance-webview/ios/**", + "$(SRCROOT)/../node_modules/react-native-firebase/ios/RNFirebase/**", + "$(SRCROOT)/../node_modules/react-native-interactable/lib/ios/Interactable", + ); + INFOPLIST_FILE = NixShareExtension/Info.plist; + INFOPLIST_OTHER_PREPROCESSOR_FLAGS = "-traditional"; + INFOPLIST_PREFIX_HEADER = "${BUILD_DIR}/GeneratedInfoPlistDotEnv.h"; + INFOPLIST_PREPROCESS = YES; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + ); + MARKETING_VERSION = 0.0.1; + OTHER_LDFLAGS = ( + "$(inherited)", + "-lc++", + "-ObjC", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.creedon.Nixplay.alpha.PhotoShareExtension; + PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE = "7e8380d0-ae9d-4f40-b2fc-04489532866b"; + PROVISIONING_PROFILE_SPECIFIER = "match AdHoc com.creedon.Nixplay.alpha.PhotoShareExtension"; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; + E375D7B320C770DA0035FEC1 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 3D0885EA117AA45D747146C1 /* Pods-MAAGAppBeta.debug.xcconfig */; + buildSettings = { + APP_DISPLAY_NAME = "MAAGApp beta"; + ASSETCATALOG_COMPILER_APPICON_NAME = "AppIcon-beta"; + ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage3; + CODE_SIGN_ENTITLEMENTS = Nixplay/Nixplay.beta.entitlements; + CODE_SIGN_IDENTITY = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CODE_SIGN_STYLE = Manual; + CURRENT_PROJECT_VERSION = 1; + DEAD_CODE_STRIPPING = NO; + DEVELOPMENT_TEAM = FLA95J3G7U; + HEADER_SEARCH_PATHS = ( + "$(inherited)", + "$(SRCROOT)/../node_modules/react-native-creedon-imagepicker/ios", + "$(SRCROOT)/../node_modules/react-native-device-info/RNDeviceInfo", + "$(SRCROOT)/../node_modules/react-native-fast-image/ios/FastImage/**", + "$(SRCROOT)/../node_modules/react-native-safe-area/ios/RNSafeArea", + "$(SRCROOT)/../node_modules/react-native-vector-icons/RNVectorIconsManager", + "$(SRCROOT)/../node_modules/react-native-video/ios", + "$(SRCROOT)/../node_modules/react-native-share-extension/ios", + "$(SRCROOT)/../node_modules/react-native-linear-gradient/BVLinearGradient", + "$(SRCROOT)/../node_modules/react-native-google-signin/ios/RNGoogleSignin/**", + "$(SRCROOT)/../node_modules/react-native-video-trimmer/ios", + "$(SRCROOT)/../node_modules/react-native-splash-screen/ios", + "$(SRCROOT)/../node_modules/react-native-enhance-webview/ios/**", + "$(SRCROOT)/../node_modules/react-native-firebase/ios/RNFirebase/**", + "$(SRCROOT)/../node_modules/react-native-interactable/lib/ios/Interactable", + ); + INFOPLIST_FILE = Nixplay/Info.plist; + INFOPLIST_OTHER_PREPROCESSOR_FLAGS = "-traditional"; + INFOPLIST_PREFIX_HEADER = "${BUILD_DIR}/GeneratedInfoPlistDotEnv.h"; + INFOPLIST_PREPROCESS = YES; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + ); + MARKETING_VERSION = 0.0.1; + OTHER_LDFLAGS = ( + "$(inherited)", + "-ObjC", + "-lc++", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.creedon.Nixplay.beta; + PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE = ""; + PROVISIONING_PROFILE_SPECIFIER = "match Development com.creedon.Nixplay.beta"; + SWIFT_VERSION = 4.2; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Debug; + }; + E375D7B420C770DA0035FEC1 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 8BE1800DC08A538CF1A94AE1 /* Pods-MAAGAppBeta.release.xcconfig */; + buildSettings = { + APP_DISPLAY_NAME = "MAAGApp beta"; + ASSETCATALOG_COMPILER_APPICON_NAME = "AppIcon-beta"; + ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage3; + CODE_SIGN_ENTITLEMENTS = Nixplay/Nixplay.beta.entitlements; + CODE_SIGN_IDENTITY = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution"; + CODE_SIGN_STYLE = Manual; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = FLA95J3G7U; + HEADER_SEARCH_PATHS = ( + "$(inherited)", + "$(SRCROOT)/../node_modules/react-native-creedon-imagepicker/ios", + "$(SRCROOT)/../node_modules/react-native-device-info/RNDeviceInfo", + "$(SRCROOT)/../node_modules/react-native-fast-image/ios/FastImage/**", + "$(SRCROOT)/../node_modules/react-native-safe-area/ios/RNSafeArea", + "$(SRCROOT)/../node_modules/react-native-vector-icons/RNVectorIconsManager", + "$(SRCROOT)/../node_modules/react-native-video/ios", + "$(SRCROOT)/../node_modules/react-native-share-extension/ios", + "$(SRCROOT)/../node_modules/react-native-linear-gradient/BVLinearGradient", + "$(SRCROOT)/../node_modules/react-native-google-signin/ios/RNGoogleSignin/**", + "$(SRCROOT)/../node_modules/react-native-video-trimmer/ios", + "$(SRCROOT)/../node_modules/react-native-splash-screen/ios", + "$(SRCROOT)/../node_modules/react-native-enhance-webview/ios/**", + "$(SRCROOT)/../node_modules/react-native-firebase/ios/RNFirebase/**", + "$(SRCROOT)/../node_modules/react-native-interactable/lib/ios/Interactable", + ); + INFOPLIST_FILE = Nixplay/Info.plist; + INFOPLIST_OTHER_PREPROCESSOR_FLAGS = "-traditional"; + INFOPLIST_PREFIX_HEADER = "${BUILD_DIR}/GeneratedInfoPlistDotEnv.h"; + INFOPLIST_PREPROCESS = YES; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + ); + MARKETING_VERSION = 0.0.1; + OTHER_LDFLAGS = ( + "$(inherited)", + "-ObjC", + "-lc++", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.creedon.Nixplay.beta; + PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE = ""; + PROVISIONING_PROFILE_SPECIFIER = "match AppStore com.creedon.Nixplay.beta"; + SWIFT_VERSION = 4.2; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Release; + }; + E3858767215C723500625D49 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 730A71DD73F9F1C4CC682B0A /* Pods-MAAGAppRnd.debug.xcconfig */; + buildSettings = { + APP_DISPLAY_NAME = MAAGAppRnd; + ASSETCATALOG_COMPILER_APPICON_NAME = "AppIcon-rn"; + ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage3; + CODE_SIGN_ENTITLEMENTS = Nixplay/Nixplay.rnd.entitlements; + CODE_SIGN_IDENTITY = "iPhone Distribution"; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CODE_SIGN_STYLE = Manual; + CURRENT_PROJECT_VERSION = 1; + DEAD_CODE_STRIPPING = NO; + DEVELOPMENT_TEAM = FLA95J3G7U; + FRAMEWORK_SEARCH_PATHS = "$(inherited)"; + HEADER_SEARCH_PATHS = ( + "$(inherited)", + "$(SRCROOT)/../node_modules/react-native-creedon-imagepicker/ios", + "$(SRCROOT)/../node_modules/react-native-device-info/RNDeviceInfo", + "$(SRCROOT)/../node_modules/react-native-fast-image/ios/FastImage", + "$(SRCROOT)/../node_modules/react-native-safe-area/ios/RNSafeArea", + "$(SRCROOT)/../node_modules/react-native-vector-icons/RNVectorIconsManager", + "$(SRCROOT)/../node_modules/react-native-linear-gradient/BVLinearGradient", + "$(SRCROOT)/../node_modules/react-native-autogrow-textinput/ios", + "$(SRCROOT)/../node_modules/react-native-splash-screen/ios", + "$(SRCROOT)/../node_modules/react-native-enhance-webview/ios", + "$(SRCROOT)/../node_modules/react-native-firebase/ios/RNFirebase/**", + "$(SRCROOT)/../node_modules/react-native-interactable/lib/ios/Interactable", + ); + INFOPLIST_FILE = Nixplay/Info.plist; + INFOPLIST_OTHER_PREPROCESSOR_FLAGS = ""; + INFOPLIST_PREPROCESS = NO; + IPHONEOS_DEPLOYMENT_TARGET = 9.3; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + ); + MARKETING_VERSION = 0.0.1; + OTHER_LDFLAGS = ( + "$(inherited)", + "-ObjC", + "-lc++", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.creedon.Nixplay.rnd; + PRODUCT_NAME = MAAGAppRnd; + PROVISIONING_PROFILE = "9615eb03-6c60-49e8-89cb-f64d82c411cf"; + PROVISIONING_PROFILE_SPECIFIER = "match Development com.creedon.Nixplay.rnd"; + SWIFT_VERSION = 4.2; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Debug; + }; + E3858768215C723500625D49 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = E60B57C32AC6C98217057314 /* Pods-MAAGAppRnd.release.xcconfig */; + buildSettings = { + APP_DISPLAY_NAME = MAAGAppRnd; + ASSETCATALOG_COMPILER_APPICON_NAME = "AppIcon-rn"; + ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage3; + CODE_SIGN_ENTITLEMENTS = Nixplay/Nixplay.rnd.entitlements; + CODE_SIGN_IDENTITY = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution"; + CODE_SIGN_STYLE = Manual; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = FLA95J3G7U; + FRAMEWORK_SEARCH_PATHS = "$(inherited)"; + HEADER_SEARCH_PATHS = ( + "$(inherited)", + "$(SRCROOT)/../node_modules/react-native-creedon-imagepicker/ios", + "$(SRCROOT)/../node_modules/react-native-device-info/RNDeviceInfo", + "$(SRCROOT)/../node_modules/react-native-fast-image/ios/FastImage", + "$(SRCROOT)/../node_modules/react-native-safe-area/ios/RNSafeArea", + "$(SRCROOT)/../node_modules/react-native-vector-icons/RNVectorIconsManager", + "$(SRCROOT)/../node_modules/react-native-linear-gradient/BVLinearGradient", + "$(SRCROOT)/../node_modules/react-native-autogrow-textinput/ios", + "$(SRCROOT)/../node_modules/react-native-splash-screen/ios", + "$(SRCROOT)/../node_modules/react-native-enhance-webview/ios", + "$(SRCROOT)/../node_modules/react-native-firebase/ios/RNFirebase/**", + "$(SRCROOT)/../node_modules/react-native-interactable/lib/ios/Interactable", + ); + INFOPLIST_FILE = Nixplay/Info.plist; + INFOPLIST_OTHER_PREPROCESSOR_FLAGS = ""; + INFOPLIST_PREPROCESS = NO; + IPHONEOS_DEPLOYMENT_TARGET = 9.3; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + ); + MARKETING_VERSION = 0.0.1; + OTHER_LDFLAGS = ( + "$(inherited)", + "-ObjC", + "-lc++", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.creedon.Nixplay.rnd; + PRODUCT_NAME = MAAGAppRnd; + PROVISIONING_PROFILE = "19f18145-ed9d-428b-9868-48daf0a51e52"; + PROVISIONING_PROFILE_SPECIFIER = "match AdHoc com.creedon.Nixplay.rnd"; + SWIFT_VERSION = 4.2; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Release; + }; + E3AC973B20CFC24E00E1F671 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 23217D9EE06BF5F6F18638ED /* Pods-MAAGAppProd.debug.xcconfig */; + buildSettings = { + APP_DISPLAY_NAME = MAAGApp; + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage3; + CODE_SIGN_ENTITLEMENTS = Nixplay/Nixplay.entitlements; + CODE_SIGN_IDENTITY = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CODE_SIGN_STYLE = Manual; + CURRENT_PROJECT_VERSION = 1; + DEAD_CODE_STRIPPING = NO; + DEVELOPMENT_TEAM = FLA95J3G7U; + HEADER_SEARCH_PATHS = ( + "$(inherited)", + "$(SRCROOT)/../node_modules/react-native-creedon-imagepicker/ios", + "$(SRCROOT)/../node_modules/react-native-device-info/RNDeviceInfo", + "$(SRCROOT)/../node_modules/react-native-fast-image/ios/FastImage/**", + "$(SRCROOT)/../node_modules/react-native-safe-area/ios/RNSafeArea", + "$(SRCROOT)/../node_modules/react-native-vector-icons/RNVectorIconsManager", + "$(SRCROOT)/../node_modules/react-native-video/ios", + "$(SRCROOT)/../node_modules/react-native-share-extension/ios", + "$(SRCROOT)/../node_modules/react-native-linear-gradient/BVLinearGradient", + "$(SRCROOT)/../node_modules/react-native-google-signin/ios/RNGoogleSignin/**", + "$(SRCROOT)/../node_modules/react-native-video-trimmer/ios", + "$(SRCROOT)/../node_modules/react-native-splash-screen/ios", + "$(SRCROOT)/../node_modules/react-native-enhance-webview/ios/**", + "$(SRCROOT)/../node_modules/react-native-firebase/ios/RNFirebase/**", + "$(SRCROOT)/../node_modules/react-native-interactable/lib/ios/Interactable", + ); + INFOPLIST_FILE = Nixplay/Info.plist; + INFOPLIST_OTHER_PREPROCESSOR_FLAGS = "-traditional"; + INFOPLIST_PREFIX_HEADER = "${BUILD_DIR}/GeneratedInfoPlistDotEnv.h"; + INFOPLIST_PREPROCESS = YES; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + ); + MARKETING_VERSION = 0.0.1; + OTHER_LDFLAGS = ( + "$(inherited)", + "-ObjC", + "-lc++", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.creedon.Nixplay; + PRODUCT_NAME = MAAGAppProd; + PROVISIONING_PROFILE = "13771067-f30d-46b1-bc62-b3522c9a9880"; + PROVISIONING_PROFILE_SPECIFIER = "match Development com.creedon.Nixplay"; + SWIFT_VERSION = 4.2; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Debug; + }; + E3AC973C20CFC24E00E1F671 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 9633D9B4472CA4B20F29C0A9 /* Pods-MAAGAppProd.release.xcconfig */; + buildSettings = { + APP_DISPLAY_NAME = MAAGApp; + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage3; + CODE_SIGN_ENTITLEMENTS = Nixplay/Nixplay.entitlements; + CODE_SIGN_IDENTITY = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution"; + CODE_SIGN_STYLE = Manual; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = FLA95J3G7U; + HEADER_SEARCH_PATHS = ( + "$(inherited)", + "$(SRCROOT)/../node_modules/react-native-creedon-imagepicker/ios", + "$(SRCROOT)/../node_modules/react-native-device-info/RNDeviceInfo", + "$(SRCROOT)/../node_modules/react-native-fast-image/ios/FastImage/**", + "$(SRCROOT)/../node_modules/react-native-safe-area/ios/RNSafeArea", + "$(SRCROOT)/../node_modules/react-native-vector-icons/RNVectorIconsManager", + "$(SRCROOT)/../node_modules/react-native-video/ios", + "$(SRCROOT)/../node_modules/react-native-share-extension/ios", + "$(SRCROOT)/../node_modules/react-native-linear-gradient/BVLinearGradient", + "$(SRCROOT)/../node_modules/react-native-google-signin/ios/RNGoogleSignin/**", + "$(SRCROOT)/../node_modules/react-native-video-trimmer/ios", + "$(SRCROOT)/../node_modules/react-native-splash-screen/ios", + "$(SRCROOT)/../node_modules/react-native-enhance-webview/ios/**", + "$(SRCROOT)/../node_modules/react-native-firebase/ios/RNFirebase/**", + "$(SRCROOT)/../node_modules/react-native-interactable/lib/ios/Interactable", + ); + INFOPLIST_FILE = Nixplay/Info.plist; + INFOPLIST_OTHER_PREPROCESSOR_FLAGS = "-traditional"; + INFOPLIST_PREFIX_HEADER = "${BUILD_DIR}/GeneratedInfoPlistDotEnv.h"; + INFOPLIST_PREPROCESS = YES; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + ); + MARKETING_VERSION = 0.0.1; + OTHER_LDFLAGS = ( + "$(inherited)", + "-ObjC", + "-lc++", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.creedon.Nixplay; + PRODUCT_NAME = MAAGAppProd; + PROVISIONING_PROFILE = "791983dd-3ff8-44c4-991f-8e27eca7385f"; + PROVISIONING_PROFILE_SPECIFIER = "match AppStore com.creedon.Nixplay"; + SWIFT_VERSION = 4.2; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Release; + }; + E3C11A0220C77242007CD3BC /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 08486E5D55B26F464929B8BB /* Pods-MagShareExtensionBeta.debug.xcconfig */; + buildSettings = { + APPLICATION_EXTENSION_API_ONLY = YES; + APP_DISPLAY_NAME = "MAAGApp beta"; + ASSETCATALOG_COMPILER_APPICON_NAME = "AppIcon-beta"; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_ENTITLEMENTS = NixShareExtension/NixShareExtension.beta.entitlements; + CODE_SIGN_IDENTITY = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CODE_SIGN_STYLE = Manual; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + DEVELOPMENT_TEAM = FLA95J3G7U; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREPROCESSOR_DEFINITIONS = ( + "$(inherited)", + "COCOAPODS=1", + NIXPLAY_APP_EXTENSIONS, + ); + HEADER_SEARCH_PATHS = ( + "$(inherited)", + "$(SRCROOT)/../node_modules/react-native-share-extension/ios/**", + "$(SRCROOT)/../node_modules/react-native/React/**", + "$(SRCROOT)/../node_modules/react-native-google-signin/ios/RNGoogleSignin/**", + "$(SRCROOT)/../node_modules/react-native-video-trimmer/ios", + "$(SRCROOT)/../node_modules/react-native-enhance-webview/ios/**", + "$(SRCROOT)/../node_modules/react-native-firebase/ios/RNFirebase/**", + "$(SRCROOT)/../node_modules/react-native-interactable/lib/ios/Interactable", + ); + INFOPLIST_FILE = NixShareExtension/Info.plist; + INFOPLIST_OTHER_PREPROCESSOR_FLAGS = "-traditional"; + INFOPLIST_PREFIX_HEADER = "${BUILD_DIR}/GeneratedInfoPlistDotEnv.h"; + INFOPLIST_PREPROCESS = YES; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + ); + MARKETING_VERSION = 0.0.1; + OTHER_LDFLAGS = ( + "$(inherited)", + "-lc++", + "-ObjC", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.creedon.Nixplay.beta.PhotoShareExtension; + PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE = ""; + PROVISIONING_PROFILE_SPECIFIER = "match Development com.creedon.Nixplay.beta.PhotoShareExtension"; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + E3C11A0320C77242007CD3BC /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 66B7BB60BC9121574411B750 /* Pods-MagShareExtensionBeta.release.xcconfig */; + buildSettings = { + APPLICATION_EXTENSION_API_ONLY = YES; + APP_DISPLAY_NAME = "MAAGApp beta"; + ASSETCATALOG_COMPILER_APPICON_NAME = "AppIcon-beta"; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_ENTITLEMENTS = NixShareExtension/NixShareExtension.beta.entitlements; + CODE_SIGN_IDENTITY = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution"; + CODE_SIGN_STYLE = Manual; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEVELOPMENT_TEAM = FLA95J3G7U; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREPROCESSOR_DEFINITIONS = ( + "$(inherited)", + "COCOAPODS=1", + NIXPLAY_APP_EXTENSIONS, + ); + HEADER_SEARCH_PATHS = ( + "$(inherited)", + "$(SRCROOT)/../node_modules/react-native-share-extension/ios/**", + "$(SRCROOT)/../node_modules/react-native/React/**", + "$(SRCROOT)/../node_modules/react-native-google-signin/ios/RNGoogleSignin/**", + "$(SRCROOT)/../node_modules/react-native-video-trimmer/ios", + "$(SRCROOT)/../node_modules/react-native-enhance-webview/ios/**", + "$(SRCROOT)/../node_modules/react-native-firebase/ios/RNFirebase/**", + "$(SRCROOT)/../node_modules/react-native-interactable/lib/ios/Interactable", + ); + INFOPLIST_FILE = NixShareExtension/Info.plist; + INFOPLIST_OTHER_PREPROCESSOR_FLAGS = "-traditional"; + INFOPLIST_PREFIX_HEADER = "${BUILD_DIR}/GeneratedInfoPlistDotEnv.h"; + INFOPLIST_PREPROCESS = YES; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + ); + MARKETING_VERSION = 0.0.1; + OTHER_LDFLAGS = ( + "$(inherited)", + "-lc++", + "-ObjC", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.creedon.Nixplay.beta.PhotoShareExtension; + PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE = ""; + PROVISIONING_PROFILE_SPECIFIER = "match AppStore com.creedon.Nixplay.beta.PhotoShareExtension"; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "MAAGAppTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 00E356F61AD99517003FC87E /* Debug */, + 00E356F71AD99517003FC87E /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "MAAGApp" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 13B07F941A680F5B00A75B9A /* Debug */, + 13B07F951A680F5B00A75B9A /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 2D02E4BA1E0B4A5E006451C7 /* Build configuration list for PBXNativeTarget "MAAGApp-tvOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 2D02E4971E0B4A5E006451C7 /* Debug */, + 2D02E4981E0B4A5E006451C7 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 2D02E4BB1E0B4A5E006451C7 /* Build configuration list for PBXNativeTarget "MAAGApp-tvOSTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 2D02E4991E0B4A5E006451C7 /* Debug */, + 2D02E49A1E0B4A5E006451C7 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "Nixplay" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 83CBBA201A601CBA00E9B192 /* Debug */, + 83CBBA211A601CBA00E9B192 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + E337473620AD255F00017645 /* Build configuration list for PBXNativeTarget "MagShareExtension" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + E337473720AD255F00017645 /* Debug */, + E337473820AD255F00017645 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + E375D5B220C69A330035FEC1 /* Build configuration list for PBXNativeTarget "MAAGAppQa" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + E375D5B320C69A330035FEC1 /* Debug */, + E375D5B420C69A330035FEC1 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + E375D68D20C69E280035FEC1 /* Build configuration list for PBXNativeTarget "MagShareExtensionQa" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + E375D68E20C69E280035FEC1 /* Debug */, + E375D68F20C69E280035FEC1 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + E375D6DF20C76C1F0035FEC1 /* Build configuration list for PBXNativeTarget "MAAGAppAlpha" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + E375D6E020C76C1F0035FEC1 /* Debug */, + E375D6E120C76C1F0035FEC1 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + E375D70120C76D350035FEC1 /* Build configuration list for PBXNativeTarget "MagShareExtensionAlpha" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + E375D70220C76D350035FEC1 /* Debug */, + E375D70320C76D350035FEC1 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + E375D7B220C770DA0035FEC1 /* Build configuration list for PBXNativeTarget "MAAGAppBeta" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + E375D7B320C770DA0035FEC1 /* Debug */, + E375D7B420C770DA0035FEC1 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + E3858766215C723500625D49 /* Build configuration list for PBXNativeTarget "MAAGAppRnd" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + E3858767215C723500625D49 /* Debug */, + E3858768215C723500625D49 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + E3AC973A20CFC24E00E1F671 /* Build configuration list for PBXNativeTarget "MAAGAppProd" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + E3AC973B20CFC24E00E1F671 /* Debug */, + E3AC973C20CFC24E00E1F671 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + E3C11A0120C77242007CD3BC /* Build configuration list for PBXNativeTarget "MagShareExtensionBeta" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + E3C11A0220C77242007CD3BC /* Debug */, + E3C11A0320C77242007CD3BC /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 83CBB9F71A601CBA00E9B192 /* Project object */; +} diff --git a/ioneapps-maagapp-ee31119a522d/ios/Nixplay.xcodeproj/xcshareddata/xcschemes/MAAGApp-tvOS.xcscheme b/ioneapps-maagapp-ee31119a522d/ios/Nixplay.xcodeproj/xcshareddata/xcschemes/MAAGApp-tvOS.xcscheme new file mode 100644 index 0000000..6c811c5 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/ios/Nixplay.xcodeproj/xcshareddata/xcschemes/MAAGApp-tvOS.xcscheme @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ioneapps-maagapp-ee31119a522d/ios/Nixplay.xcodeproj/xcshareddata/xcschemes/MAAGApp-tvOSTests.xcscheme b/ioneapps-maagapp-ee31119a522d/ios/Nixplay.xcodeproj/xcshareddata/xcschemes/MAAGApp-tvOSTests.xcscheme new file mode 100644 index 0000000..594e943 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/ios/Nixplay.xcodeproj/xcshareddata/xcschemes/MAAGApp-tvOSTests.xcscheme @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/ioneapps-maagapp-ee31119a522d/ios/Nixplay.xcodeproj/xcshareddata/xcschemes/MAAGApp.xcscheme b/ioneapps-maagapp-ee31119a522d/ios/Nixplay.xcodeproj/xcshareddata/xcschemes/MAAGApp.xcscheme new file mode 100644 index 0000000..3513de7 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/ios/Nixplay.xcodeproj/xcshareddata/xcschemes/MAAGApp.xcscheme @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ioneapps-maagapp-ee31119a522d/ios/Nixplay.xcodeproj/xcshareddata/xcschemes/MAAGAppQa.xcscheme b/ioneapps-maagapp-ee31119a522d/ios/Nixplay.xcodeproj/xcshareddata/xcschemes/MAAGAppQa.xcscheme new file mode 100644 index 0000000..939bca5 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/ios/Nixplay.xcodeproj/xcshareddata/xcschemes/MAAGAppQa.xcscheme @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ioneapps-maagapp-ee31119a522d/ios/Nixplay.xcodeproj/xcshareddata/xcschemes/MAAGAppRnd.xcscheme b/ioneapps-maagapp-ee31119a522d/ios/Nixplay.xcodeproj/xcshareddata/xcschemes/MAAGAppRnd.xcscheme new file mode 100644 index 0000000..8996c6e --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/ios/Nixplay.xcodeproj/xcshareddata/xcschemes/MAAGAppRnd.xcscheme @@ -0,0 +1,82 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ioneapps-maagapp-ee31119a522d/ios/Nixplay.xcodeproj/xcshareddata/xcschemes/MAAGAppTests.xcscheme b/ioneapps-maagapp-ee31119a522d/ios/Nixplay.xcodeproj/xcshareddata/xcschemes/MAAGAppTests.xcscheme new file mode 100644 index 0000000..0d5dbe3 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/ios/Nixplay.xcodeproj/xcshareddata/xcschemes/MAAGAppTests.xcscheme @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/ioneapps-maagapp-ee31119a522d/ios/Nixplay.xcworkspace/contents.xcworkspacedata b/ioneapps-maagapp-ee31119a522d/ios/Nixplay.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..018a7af --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/ios/Nixplay.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,10 @@ + + + + + + + diff --git a/ioneapps-maagapp-ee31119a522d/ios/Nixplay.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/ioneapps-maagapp-ee31119a522d/ios/Nixplay.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/ios/Nixplay.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/ioneapps-maagapp-ee31119a522d/ios/Nixplay.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/ioneapps-maagapp-ee31119a522d/ios/Nixplay.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 0000000..7ca2de4 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/ios/Nixplay.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,12 @@ + + + + + BuildSystemType + Original + IDEWorkspaceSharedSettings_AutocreateContextsIfNeeded + + PreviewsEnabled + + + diff --git a/ioneapps-maagapp-ee31119a522d/ios/Nixplay/AppDelegate.h b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/AppDelegate.h new file mode 100644 index 0000000..f9fad78 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/AppDelegate.h @@ -0,0 +1,15 @@ +/** + * Copyright (c) 2015-present, Facebook, Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +@import UIKit; +@import UserNotifications; + +@interface AppDelegate : UIResponder + +@property (nonatomic, strong) UIWindow *window; + +@end diff --git a/ioneapps-maagapp-ee31119a522d/ios/Nixplay/AppDelegate.m b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/AppDelegate.m new file mode 100644 index 0000000..7b6f27f --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/AppDelegate.m @@ -0,0 +1,151 @@ +/** + * Copyright (c) 2015-present, Facebook, Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +#import "AppDelegate.h" +#import +#import "React/RCTRootView.h" +#import +#import +#import + +@implementation AppDelegate + +- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions +{ + + if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 10.0) { + UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter]; + center.delegate = self;// import!!! + [center requestAuthorizationWithOptions:(UNAuthorizationOptionBadge | UNAuthorizationOptionSound | UNAuthorizationOptionAlert) completionHandler:^(BOOL granted, NSError * _Nullable error) { + if (!error) { + NSLog(@"request authorization succeeded!"); + } + }]; + [center getNotificationSettingsWithCompletionHandler:^(UNNotificationSettings * _Nonnull settings) { + NSLog(@"%@",settings); + }]; + [[UIApplication sharedApplication] registerForRemoteNotifications]; + + }else if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0) { + UIUserNotificationSettings *uns = [UIUserNotificationSettings settingsForTypes:(UIUserNotificationTypeAlert|UIUserNotificationTypeBadge|UIUserNotificationTypeSound) categories:nil]; + [[UIApplication sharedApplication] registerForRemoteNotifications]; + [[UIApplication sharedApplication] registerUserNotificationSettings:uns]; + } else if (@available(iOS 8.0, *)) { + UIRemoteNotificationType apn_type = (UIRemoteNotificationType)(UIRemoteNotificationTypeAlert|UIRemoteNotificationTypeSound|UIRemoteNotificationTypeBadge); + [[UIApplication sharedApplication] registerForRemoteNotificationTypes:apn_type]; + } + + [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil]; + + NSURL *jsCodeLocation = [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index" fallbackResource:nil]; + + RCTRootView *rootView = [[RCTRootView alloc] initWithBundleURL:jsCodeLocation + moduleName:@"MAAGApp" + initialProperties:nil + launchOptions:launchOptions]; + rootView.backgroundColor = [[UIColor alloc] initWithRed:1.0f green:1.0f blue:1.0f alpha:1]; + + self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; + UIViewController *rootViewController = [UIViewController new]; + rootViewController.view = rootView; + self.window.rootViewController = rootViewController; + [self.window makeKeyAndVisible]; + + return YES; +} + +- (void)applicationDidBecomeActive:(UIApplication *)application { + //Register for push notifications + //For more info, see: https://developers.intercom.com/v2.0/docs/ios-push-notifications + [application registerUserNotificationSettings:[UIUserNotificationSettings + settingsForTypes:(UIUserNotificationTypeBadge + | UIUserNotificationTypeSound + | UIUserNotificationTypeAlert) + categories:nil]]; + [application registerForRemoteNotifications]; +} + + +// https://github.com/react-native-community/react-native-google-signin/blob/master/docs/ios-guide.md#modify-your-app-to-respond-to-the-url-scheme-optional +//- (BOOL)application:(UIApplication *)application openURL:(nonnull NSURL *)url +// sourceApplication:(NSString *)sourceApplication annotation:(id)annotation options:(nonnull NSDictionary *)options { +//// return +//// [RNGoogleSignin application:application +//// openURL:url +//// sourceApplication:sourceApplication +//// annotation:annotation +//// ]; +// return [RNGoogleSignin application:application openURL:url options:options]; +// +//} +//#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 90000 +//- (BOOL)application:(UIApplication *)application +// openURL:(NSURL *)url +// options:(NSDictionary *)options { +//// return [RNGoogleSignin application:application openURL:url sourceApplication:options[UIApplicationOpenURLOptionsSourceApplicationKey] annotation:options[UIApplicationOpenURLOptionsAnnotationKey]]; +// return [RNGoogleSignin application:application openURL:url options:options]; +//} +//#endif + +// Required to register for notifications +- (void)application:(UIApplication *)application didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings +{ + [RNCPushNotificationIOS didRegisterUserNotificationSettings:notificationSettings]; +} +// Required for the register event. +- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken +{ + [RNCPushNotificationIOS didRegisterForRemoteNotificationsWithDeviceToken:deviceToken]; +} +// Required for the notification event. You must call the completion handler after handling the remote notification. +- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo +fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler +{ + if (application.applicationState == UIApplicationStateActive) { + [RNCPushNotificationIOS didReceiveRemoteNotification:userInfo fetchCompletionHandler:completionHandler]; + } +} + +// Required for the registrationError event. +- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error +{ + [RNCPushNotificationIOS didFailToRegisterForRemoteNotificationsWithError:error]; +} +// Required for the localNotification event. +- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification +{ + [RNCPushNotificationIOS didReceiveLocalNotification:notification]; +} +-(void) userNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(UNNotificationPresentationOptions))completionHandler{ + completionHandler(UNNotificationPresentationOptionBadge|UNNotificationPresentationOptionSound); +} + +-(void) userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void (^)(void))completionHandler { + if( [response.actionIdentifier isEqualToString:UNNotificationDismissActionIdentifier] ){ + NSLog(@"didReceiveNotificationResponse Dismiss Action"); + } + if( [response.actionIdentifier isEqualToString:UNNotificationDefaultActionIdentifier] ){ + NSLog(@"didReceiveNotificationResponse Default"); + } + if( [response.actionIdentifier isEqualToString:@"Snooze"] ){ + NSLog(@"didReceiveNotificationResponse Snooze"); + } + if( [response.actionIdentifier isEqualToString:@"Delete"] ){ + NSLog(@"didReceiveNotificationResponse Delete"); + } + else { + NSLog(@"Unknown action"); + } + + if (response.notification.request.content.userInfo) { + [RNCPushNotificationIOS didReceiveRemoteNotification:response.notification.request.content.userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult)) completionHandler]; + } + + completionHandler(); +} +@end + diff --git a/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Base.lproj/LaunchScreen.xib b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Base.lproj/LaunchScreen.xib new file mode 100644 index 0000000..e2a4ba7 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Base.lproj/LaunchScreen.xib @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon-alpha.appiconset/Contents.json b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon-alpha.appiconset/Contents.json new file mode 100644 index 0000000..d9f6171 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon-alpha.appiconset/Contents.json @@ -0,0 +1,122 @@ +{ + "images" : [ + { + "size" : "20x20", + "idiom" : "iphone", + "filename" : "Icon-20x20@2x.png", + "scale" : "2x" + }, + { + "size" : "20x20", + "idiom" : "iphone", + "filename" : "Icon-20x20@3x.png", + "scale" : "3x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-29x29@1x.png", + "scale" : "1x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-29x29@2x.png", + "scale" : "2x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-29x29@3x.png", + "scale" : "3x" + }, + { + "size" : "40x40", + "idiom" : "iphone", + "filename" : "Icon-40x40@2x.png", + "scale" : "2x" + }, + { + "size" : "40x40", + "idiom" : "iphone", + "filename" : "Icon-40x40@3x.png", + "scale" : "3x" + }, + { + "size" : "60x60", + "idiom" : "iphone", + "filename" : "Icon-60x60@2x.png", + "scale" : "2x" + }, + { + "size" : "60x60", + "idiom" : "iphone", + "filename" : "Icon-60x60@3x.png", + "scale" : "3x" + }, + { + "size" : "20x20", + "idiom" : "ipad", + "filename" : "Icon-20x20@1x.png", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "20x20", + "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "29x29", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "29x29", + "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "40x40", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "40x40", + "scale" : "2x" + }, + { + "size" : "76x76", + "idiom" : "ipad", + "filename" : "Icon-76x76@1x.png", + "scale" : "1x" + }, + { + "size" : "76x76", + "idiom" : "ipad", + "filename" : "Icon-76x76@2x.png", + "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "83.5x83.5", + "scale" : "2x" + }, + { + "size" : "1024x1024", + "idiom" : "ios-marketing", + "filename" : "Icon-marketing-1024x1024.png", + "scale" : "1x" + }, + { + "size" : "167x167", + "idiom" : "ipad", + "filename" : "Icon-83.5@2x.png", + "scale" : "2x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon-alpha.appiconset/Icon-20x20@1x.png b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon-alpha.appiconset/Icon-20x20@1x.png new file mode 100644 index 0000000..e0607a7 Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon-alpha.appiconset/Icon-20x20@1x.png differ diff --git a/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon-alpha.appiconset/Icon-20x20@2x.png b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon-alpha.appiconset/Icon-20x20@2x.png new file mode 100644 index 0000000..2ef4a19 Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon-alpha.appiconset/Icon-20x20@2x.png differ diff --git a/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon-alpha.appiconset/Icon-20x20@3x.png b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon-alpha.appiconset/Icon-20x20@3x.png new file mode 100644 index 0000000..94aff69 Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon-alpha.appiconset/Icon-20x20@3x.png differ diff --git a/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon-alpha.appiconset/Icon-29x29@1x.png b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon-alpha.appiconset/Icon-29x29@1x.png new file mode 100644 index 0000000..7b5c010 Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon-alpha.appiconset/Icon-29x29@1x.png differ diff --git a/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon-alpha.appiconset/Icon-29x29@2x.png b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon-alpha.appiconset/Icon-29x29@2x.png new file mode 100644 index 0000000..659cbad Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon-alpha.appiconset/Icon-29x29@2x.png differ diff --git a/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon-alpha.appiconset/Icon-29x29@3x.png b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon-alpha.appiconset/Icon-29x29@3x.png new file mode 100644 index 0000000..09f0fb0 Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon-alpha.appiconset/Icon-29x29@3x.png differ diff --git a/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon-alpha.appiconset/Icon-40x40@2x.png b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon-alpha.appiconset/Icon-40x40@2x.png new file mode 100644 index 0000000..32eb8d1 Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon-alpha.appiconset/Icon-40x40@2x.png differ diff --git a/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon-alpha.appiconset/Icon-40x40@3x.png b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon-alpha.appiconset/Icon-40x40@3x.png new file mode 100644 index 0000000..d7014ab Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon-alpha.appiconset/Icon-40x40@3x.png differ diff --git a/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon-alpha.appiconset/Icon-60x60@2x.png b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon-alpha.appiconset/Icon-60x60@2x.png new file mode 100644 index 0000000..d7014ab Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon-alpha.appiconset/Icon-60x60@2x.png differ diff --git a/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon-alpha.appiconset/Icon-60x60@3x.png b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon-alpha.appiconset/Icon-60x60@3x.png new file mode 100644 index 0000000..2121757 Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon-alpha.appiconset/Icon-60x60@3x.png differ diff --git a/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon-alpha.appiconset/Icon-76x76@1x.png b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon-alpha.appiconset/Icon-76x76@1x.png new file mode 100644 index 0000000..07b786e Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon-alpha.appiconset/Icon-76x76@1x.png differ diff --git a/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon-alpha.appiconset/Icon-76x76@2x.png b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon-alpha.appiconset/Icon-76x76@2x.png new file mode 100644 index 0000000..3e1e939 Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon-alpha.appiconset/Icon-76x76@2x.png differ diff --git a/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon-alpha.appiconset/Icon-83.5@2x.png b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon-alpha.appiconset/Icon-83.5@2x.png new file mode 100644 index 0000000..4188fb0 Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon-alpha.appiconset/Icon-83.5@2x.png differ diff --git a/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon-alpha.appiconset/Icon-marketing-1024x1024.png b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon-alpha.appiconset/Icon-marketing-1024x1024.png new file mode 100644 index 0000000..052092a Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon-alpha.appiconset/Icon-marketing-1024x1024.png differ diff --git a/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon-beta.appiconset/Contents.json b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon-beta.appiconset/Contents.json new file mode 100644 index 0000000..d9f6171 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon-beta.appiconset/Contents.json @@ -0,0 +1,122 @@ +{ + "images" : [ + { + "size" : "20x20", + "idiom" : "iphone", + "filename" : "Icon-20x20@2x.png", + "scale" : "2x" + }, + { + "size" : "20x20", + "idiom" : "iphone", + "filename" : "Icon-20x20@3x.png", + "scale" : "3x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-29x29@1x.png", + "scale" : "1x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-29x29@2x.png", + "scale" : "2x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-29x29@3x.png", + "scale" : "3x" + }, + { + "size" : "40x40", + "idiom" : "iphone", + "filename" : "Icon-40x40@2x.png", + "scale" : "2x" + }, + { + "size" : "40x40", + "idiom" : "iphone", + "filename" : "Icon-40x40@3x.png", + "scale" : "3x" + }, + { + "size" : "60x60", + "idiom" : "iphone", + "filename" : "Icon-60x60@2x.png", + "scale" : "2x" + }, + { + "size" : "60x60", + "idiom" : "iphone", + "filename" : "Icon-60x60@3x.png", + "scale" : "3x" + }, + { + "size" : "20x20", + "idiom" : "ipad", + "filename" : "Icon-20x20@1x.png", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "20x20", + "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "29x29", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "29x29", + "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "40x40", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "40x40", + "scale" : "2x" + }, + { + "size" : "76x76", + "idiom" : "ipad", + "filename" : "Icon-76x76@1x.png", + "scale" : "1x" + }, + { + "size" : "76x76", + "idiom" : "ipad", + "filename" : "Icon-76x76@2x.png", + "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "83.5x83.5", + "scale" : "2x" + }, + { + "size" : "1024x1024", + "idiom" : "ios-marketing", + "filename" : "Icon-marketing-1024x1024.png", + "scale" : "1x" + }, + { + "size" : "167x167", + "idiom" : "ipad", + "filename" : "Icon-83.5@2x.png", + "scale" : "2x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon-beta.appiconset/Icon-20x20@1x.png b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon-beta.appiconset/Icon-20x20@1x.png new file mode 100644 index 0000000..6db85a2 Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon-beta.appiconset/Icon-20x20@1x.png differ diff --git a/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon-beta.appiconset/Icon-20x20@2x.png b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon-beta.appiconset/Icon-20x20@2x.png new file mode 100644 index 0000000..9c3fc2c Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon-beta.appiconset/Icon-20x20@2x.png differ diff --git a/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon-beta.appiconset/Icon-20x20@3x.png b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon-beta.appiconset/Icon-20x20@3x.png new file mode 100644 index 0000000..6fa0b97 Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon-beta.appiconset/Icon-20x20@3x.png differ diff --git a/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon-beta.appiconset/Icon-29x29@1x.png b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon-beta.appiconset/Icon-29x29@1x.png new file mode 100644 index 0000000..9088e3b Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon-beta.appiconset/Icon-29x29@1x.png differ diff --git a/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon-beta.appiconset/Icon-29x29@2x.png b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon-beta.appiconset/Icon-29x29@2x.png new file mode 100644 index 0000000..52cb0c5 Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon-beta.appiconset/Icon-29x29@2x.png differ diff --git a/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon-beta.appiconset/Icon-29x29@3x.png b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon-beta.appiconset/Icon-29x29@3x.png new file mode 100644 index 0000000..1d21f58 Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon-beta.appiconset/Icon-29x29@3x.png differ diff --git a/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon-beta.appiconset/Icon-40x40@2x.png b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon-beta.appiconset/Icon-40x40@2x.png new file mode 100644 index 0000000..f8447a2 Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon-beta.appiconset/Icon-40x40@2x.png differ diff --git a/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon-beta.appiconset/Icon-40x40@3x.png b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon-beta.appiconset/Icon-40x40@3x.png new file mode 100644 index 0000000..71abb1c Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon-beta.appiconset/Icon-40x40@3x.png differ diff --git a/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon-beta.appiconset/Icon-60x60@2x.png b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon-beta.appiconset/Icon-60x60@2x.png new file mode 100644 index 0000000..71abb1c Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon-beta.appiconset/Icon-60x60@2x.png differ diff --git a/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon-beta.appiconset/Icon-60x60@3x.png b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon-beta.appiconset/Icon-60x60@3x.png new file mode 100644 index 0000000..58d3e17 Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon-beta.appiconset/Icon-60x60@3x.png differ diff --git a/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon-beta.appiconset/Icon-76x76@1x.png b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon-beta.appiconset/Icon-76x76@1x.png new file mode 100644 index 0000000..3e156c2 Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon-beta.appiconset/Icon-76x76@1x.png differ diff --git a/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon-beta.appiconset/Icon-76x76@2x.png b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon-beta.appiconset/Icon-76x76@2x.png new file mode 100644 index 0000000..6bca016 Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon-beta.appiconset/Icon-76x76@2x.png differ diff --git a/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon-beta.appiconset/Icon-83.5@2x.png b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon-beta.appiconset/Icon-83.5@2x.png new file mode 100644 index 0000000..cabb6c7 Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon-beta.appiconset/Icon-83.5@2x.png differ diff --git a/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon-beta.appiconset/Icon-marketing-1024x1024.png b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon-beta.appiconset/Icon-marketing-1024x1024.png new file mode 100644 index 0000000..cf5af90 Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon-beta.appiconset/Icon-marketing-1024x1024.png differ diff --git a/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon-rn.appiconset/Contents.json b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon-rn.appiconset/Contents.json new file mode 100644 index 0000000..d9f6171 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon-rn.appiconset/Contents.json @@ -0,0 +1,122 @@ +{ + "images" : [ + { + "size" : "20x20", + "idiom" : "iphone", + "filename" : "Icon-20x20@2x.png", + "scale" : "2x" + }, + { + "size" : "20x20", + "idiom" : "iphone", + "filename" : "Icon-20x20@3x.png", + "scale" : "3x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-29x29@1x.png", + "scale" : "1x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-29x29@2x.png", + "scale" : "2x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-29x29@3x.png", + "scale" : "3x" + }, + { + "size" : "40x40", + "idiom" : "iphone", + "filename" : "Icon-40x40@2x.png", + "scale" : "2x" + }, + { + "size" : "40x40", + "idiom" : "iphone", + "filename" : "Icon-40x40@3x.png", + "scale" : "3x" + }, + { + "size" : "60x60", + "idiom" : "iphone", + "filename" : "Icon-60x60@2x.png", + "scale" : "2x" + }, + { + "size" : "60x60", + "idiom" : "iphone", + "filename" : "Icon-60x60@3x.png", + "scale" : "3x" + }, + { + "size" : "20x20", + "idiom" : "ipad", + "filename" : "Icon-20x20@1x.png", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "20x20", + "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "29x29", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "29x29", + "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "40x40", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "40x40", + "scale" : "2x" + }, + { + "size" : "76x76", + "idiom" : "ipad", + "filename" : "Icon-76x76@1x.png", + "scale" : "1x" + }, + { + "size" : "76x76", + "idiom" : "ipad", + "filename" : "Icon-76x76@2x.png", + "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "83.5x83.5", + "scale" : "2x" + }, + { + "size" : "1024x1024", + "idiom" : "ios-marketing", + "filename" : "Icon-marketing-1024x1024.png", + "scale" : "1x" + }, + { + "size" : "167x167", + "idiom" : "ipad", + "filename" : "Icon-83.5@2x.png", + "scale" : "2x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon-rn.appiconset/Icon-20x20@1x.png b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon-rn.appiconset/Icon-20x20@1x.png new file mode 100644 index 0000000..8a25941 Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon-rn.appiconset/Icon-20x20@1x.png differ diff --git a/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon-rn.appiconset/Icon-20x20@2x.png b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon-rn.appiconset/Icon-20x20@2x.png new file mode 100644 index 0000000..455cd41 Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon-rn.appiconset/Icon-20x20@2x.png differ diff --git a/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon-rn.appiconset/Icon-20x20@3x.png b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon-rn.appiconset/Icon-20x20@3x.png new file mode 100644 index 0000000..1029f55 Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon-rn.appiconset/Icon-20x20@3x.png differ diff --git a/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon-rn.appiconset/Icon-29x29@1x.png b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon-rn.appiconset/Icon-29x29@1x.png new file mode 100644 index 0000000..e2e9c47 Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon-rn.appiconset/Icon-29x29@1x.png differ diff --git a/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon-rn.appiconset/Icon-29x29@2x.png b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon-rn.appiconset/Icon-29x29@2x.png new file mode 100644 index 0000000..0efdca6 Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon-rn.appiconset/Icon-29x29@2x.png differ diff --git a/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon-rn.appiconset/Icon-29x29@3x.png b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon-rn.appiconset/Icon-29x29@3x.png new file mode 100644 index 0000000..d126a41 Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon-rn.appiconset/Icon-29x29@3x.png differ diff --git a/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon-rn.appiconset/Icon-40x40@2x.png b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon-rn.appiconset/Icon-40x40@2x.png new file mode 100644 index 0000000..57c58e7 Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon-rn.appiconset/Icon-40x40@2x.png differ diff --git a/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon-rn.appiconset/Icon-40x40@3x.png b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon-rn.appiconset/Icon-40x40@3x.png new file mode 100644 index 0000000..02b1f15 Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon-rn.appiconset/Icon-40x40@3x.png differ diff --git a/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon-rn.appiconset/Icon-60x60@2x.png b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon-rn.appiconset/Icon-60x60@2x.png new file mode 100644 index 0000000..02b1f15 Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon-rn.appiconset/Icon-60x60@2x.png differ diff --git a/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon-rn.appiconset/Icon-60x60@3x.png b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon-rn.appiconset/Icon-60x60@3x.png new file mode 100644 index 0000000..cceacc9 Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon-rn.appiconset/Icon-60x60@3x.png differ diff --git a/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon-rn.appiconset/Icon-76x76@1x.png b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon-rn.appiconset/Icon-76x76@1x.png new file mode 100644 index 0000000..e306ba8 Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon-rn.appiconset/Icon-76x76@1x.png differ diff --git a/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon-rn.appiconset/Icon-76x76@2x.png b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon-rn.appiconset/Icon-76x76@2x.png new file mode 100644 index 0000000..83eb204 Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon-rn.appiconset/Icon-76x76@2x.png differ diff --git a/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon-rn.appiconset/Icon-83.5@2x.png b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon-rn.appiconset/Icon-83.5@2x.png new file mode 100644 index 0000000..506d48e Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon-rn.appiconset/Icon-83.5@2x.png differ diff --git a/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon-rn.appiconset/Icon-marketing-1024x1024.png b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon-rn.appiconset/Icon-marketing-1024x1024.png new file mode 100644 index 0000000..3e6ab25 Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon-rn.appiconset/Icon-marketing-1024x1024.png differ diff --git a/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon.appiconset/Contents.json b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..98be84a --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,182 @@ +{ + "images":[ + { + "idiom":"iphone", + "size":"20x20", + "scale":"2x", + "filename":"Icon-App-20x20@2x.png" + }, + { + "idiom":"iphone", + "size":"20x20", + "scale":"3x", + "filename":"Icon-App-20x20@3x.png" + }, + { + "idiom":"iphone", + "size":"29x29", + "scale":"1x", + "filename":"Icon-App-29x29@1x.png" + }, + { + "idiom":"iphone", + "size":"29x29", + "scale":"2x", + "filename":"Icon-App-29x29@2x.png" + }, + { + "idiom":"iphone", + "size":"29x29", + "scale":"3x", + "filename":"Icon-App-29x29@3x.png" + }, + { + "idiom":"iphone", + "size":"40x40", + "scale":"1x", + "filename":"Icon-App-40x40@1x.png" + }, + { + "idiom":"iphone", + "size":"40x40", + "scale":"2x", + "filename":"Icon-App-40x40@2x.png" + }, + { + "idiom":"iphone", + "size":"40x40", + "scale":"3x", + "filename":"Icon-App-40x40@3x.png" + }, + { + "idiom":"iphone", + "size":"57x57", + "scale":"1x", + "filename":"Icon-App-57x57@1x.png" + }, + { + "idiom":"iphone", + "size":"57x57", + "scale":"2x", + "filename":"Icon-App-57x57@2x.png" + }, + { + "idiom":"iphone", + "size":"60x60", + "scale":"1x", + "filename":"Icon-App-60x60@1x.png" + }, + { + "idiom":"iphone", + "size":"60x60", + "scale":"2x", + "filename":"Icon-App-60x60@2x.png" + }, + { + "idiom":"iphone", + "size":"60x60", + "scale":"3x", + "filename":"Icon-App-60x60@3x.png" + }, + { + "idiom":"iphone", + "size":"76x76", + "scale":"1x", + "filename":"Icon-App-76x76@1x.png" + }, + { + "idiom":"ipad", + "size":"20x20", + "scale":"1x", + "filename":"Icon-App-20x20@1x.png" + }, + { + "idiom":"ipad", + "size":"20x20", + "scale":"2x", + "filename":"Icon-App-20x20@2x.png" + }, + { + "idiom":"ipad", + "size":"29x29", + "scale":"1x", + "filename":"Icon-App-29x29@1x.png" + }, + { + "idiom":"ipad", + "size":"29x29", + "scale":"2x", + "filename":"Icon-App-29x29@2x.png" + }, + { + "idiom":"ipad", + "size":"40x40", + "scale":"1x", + "filename":"Icon-App-40x40@1x.png" + }, + { + "idiom":"ipad", + "size":"40x40", + "scale":"2x", + "filename":"Icon-App-40x40@2x.png" + }, + { + "size" : "50x50", + "idiom" : "ipad", + "filename" : "Icon-Small-50x50@1x.png", + "scale" : "1x" + }, + { + "size" : "50x50", + "idiom" : "ipad", + "filename" : "Icon-Small-50x50@2x.png", + "scale" : "2x" + }, + { + "idiom":"ipad", + "size":"72x72", + "scale":"1x", + "filename":"Icon-App-72x72@1x.png" + }, + { + "idiom":"ipad", + "size":"72x72", + "scale":"2x", + "filename":"Icon-App-72x72@2x.png" + }, + { + "idiom":"ipad", + "size":"76x76", + "scale":"1x", + "filename":"Icon-App-76x76@1x.png" + }, + { + "idiom":"ipad", + "size":"76x76", + "scale":"2x", + "filename":"Icon-App-76x76@2x.png" + }, + { + "idiom":"ipad", + "size":"76x76", + "scale":"3x", + "filename":"Icon-App-76x76@3x.png" + }, + { + "idiom":"ipad", + "size":"83.5x83.5", + "scale":"2x", + "filename":"Icon-App-83.5x83.5@2x.png" + }, + { + "size" : "1024x1024", + "idiom" : "ios-marketing", + "filename" : "ItunesArtwork@2x.png", + "scale" : "1x" + } + ], + "info":{ + "version":1, + "author":"makeappicon" + } +} diff --git a/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png new file mode 100644 index 0000000..08ad8ce Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png differ diff --git a/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png new file mode 100644 index 0000000..ce7998d Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png differ diff --git a/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png new file mode 100644 index 0000000..bb4c7ea Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png differ diff --git a/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png new file mode 100644 index 0000000..a37227d Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png differ diff --git a/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png new file mode 100644 index 0000000..e57a452 Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png differ diff --git a/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png new file mode 100644 index 0000000..bbac758 Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png differ diff --git a/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png new file mode 100644 index 0000000..ce7998d Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png differ diff --git a/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png new file mode 100644 index 0000000..6d2f225 Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png differ diff --git a/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png new file mode 100644 index 0000000..c3d2deb Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png differ diff --git a/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon.appiconset/Icon-App-57x57@1x.png b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon.appiconset/Icon-App-57x57@1x.png new file mode 100644 index 0000000..44bef4e Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon.appiconset/Icon-App-57x57@1x.png differ diff --git a/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon.appiconset/Icon-App-57x57@2x.png b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon.appiconset/Icon-App-57x57@2x.png new file mode 100644 index 0000000..4d49905 Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon.appiconset/Icon-App-57x57@2x.png differ diff --git a/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon.appiconset/Icon-App-60x60@1x.png b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon.appiconset/Icon-App-60x60@1x.png new file mode 100644 index 0000000..bb4c7ea Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon.appiconset/Icon-App-60x60@1x.png differ diff --git a/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png new file mode 100644 index 0000000..c3d2deb Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png differ diff --git a/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png new file mode 100644 index 0000000..82e355a Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png differ diff --git a/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon.appiconset/Icon-App-72x72@1x.png b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon.appiconset/Icon-App-72x72@1x.png new file mode 100644 index 0000000..ce82a6a Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon.appiconset/Icon-App-72x72@1x.png differ diff --git a/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon.appiconset/Icon-App-72x72@2x.png b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon.appiconset/Icon-App-72x72@2x.png new file mode 100644 index 0000000..be9c970 Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon.appiconset/Icon-App-72x72@2x.png differ diff --git a/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png new file mode 100644 index 0000000..0451dc4 Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png differ diff --git a/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png new file mode 100644 index 0000000..2e4f6a1 Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png differ diff --git a/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon.appiconset/Icon-App-76x76@3x.png b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon.appiconset/Icon-App-76x76@3x.png new file mode 100644 index 0000000..5adfd5b Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon.appiconset/Icon-App-76x76@3x.png differ diff --git a/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png new file mode 100644 index 0000000..9b51e22 Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png differ diff --git a/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon.appiconset/Icon-Small-50x50@1x.png b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon.appiconset/Icon-Small-50x50@1x.png new file mode 100644 index 0000000..df30585 Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon.appiconset/Icon-Small-50x50@1x.png differ diff --git a/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon.appiconset/Icon-Small-50x50@2x.png b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon.appiconset/Icon-Small-50x50@2x.png new file mode 100644 index 0000000..d02fe71 Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon.appiconset/Icon-Small-50x50@2x.png differ diff --git a/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon.appiconset/ItunesArtwork@2x.png b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon.appiconset/ItunesArtwork@2x.png new file mode 100644 index 0000000..a585c8c Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/AppIcon.appiconset/ItunesArtwork@2x.png differ diff --git a/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/Contents.json b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/Contents.json new file mode 100644 index 0000000..da4a164 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/LaunchImage3.launchimage/Contents.json b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/LaunchImage3.launchimage/Contents.json new file mode 100644 index 0000000..9152f6b --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/LaunchImage3.launchimage/Contents.json @@ -0,0 +1,179 @@ +{ + "images" : [ + { + "extent" : "full-screen", + "idiom" : "iphone", + "subtype" : "2436h", + "filename" : "LaunchImage-1125@3x~iphoneX-portrait_1125x2436.png", + "minimum-system-version" : "11.0", + "orientation" : "portrait", + "scale" : "3x" + }, + { + "extent" : "full-screen", + "idiom" : "iphone", + "subtype" : "2436h", + "filename" : "LaunchImage-2436@3x~iphoneX-landscape_2436x1125.png", + "minimum-system-version" : "11.0", + "orientation" : "landscape", + "scale" : "3x" + }, + { + "extent" : "full-screen", + "idiom" : "iphone", + "subtype" : "736h", + "filename" : "LaunchImage-1242@3x~iphone6s-portrait_1242x2208.png", + "minimum-system-version" : "8.0", + "orientation" : "portrait", + "scale" : "3x" + }, + { + "extent" : "full-screen", + "idiom" : "iphone", + "subtype" : "736h", + "filename" : "LaunchImage-1242@3x~iphone6s-landscape_2208x1242.png", + "minimum-system-version" : "8.0", + "orientation" : "landscape", + "scale" : "3x" + }, + { + "extent" : "full-screen", + "idiom" : "iphone", + "subtype" : "667h", + "filename" : "LaunchImage-750@2x~iphone6-portrait_750x1334.png", + "minimum-system-version" : "8.0", + "orientation" : "portrait", + "scale" : "2x" + }, + { + "orientation" : "portrait", + "idiom" : "iphone", + "filename" : "LaunchImage~iphone_640x960.png", + "extent" : "full-screen", + "minimum-system-version" : "7.0", + "scale" : "2x" + }, + { + "extent" : "full-screen", + "idiom" : "iphone", + "subtype" : "retina4", + "filename" : "LaunchImage-568h@2x~iphone_640x1136.png", + "minimum-system-version" : "7.0", + "orientation" : "portrait", + "scale" : "2x" + }, + { + "orientation" : "portrait", + "idiom" : "ipad", + "filename" : "LaunchImage-Portrait~ipad_768x1024.png", + "extent" : "full-screen", + "minimum-system-version" : "7.0", + "scale" : "1x" + }, + { + "orientation" : "landscape", + "idiom" : "ipad", + "filename" : "LaunchImage-Landscape~ipad_1024x768.png", + "extent" : "full-screen", + "minimum-system-version" : "7.0", + "scale" : "1x" + }, + { + "orientation" : "portrait", + "idiom" : "ipad", + "filename" : "LaunchImage-Portrait@2x~ipad_1536x2048.png", + "extent" : "full-screen", + "minimum-system-version" : "7.0", + "scale" : "2x" + }, + { + "orientation" : "landscape", + "idiom" : "ipad", + "filename" : "LaunchImage-Landscape@2x~ipad_2048x1536.png", + "extent" : "full-screen", + "minimum-system-version" : "7.0", + "scale" : "2x" + }, + { + "orientation" : "portrait", + "idiom" : "iphone", + "filename" : "LaunchImage~iphone-320x480.png", + "extent" : "full-screen", + "scale" : "1x" + }, + { + "orientation" : "portrait", + "idiom" : "iphone", + "filename" : "LaunchImage~iphone_640x960-1.png", + "extent" : "full-screen", + "scale" : "2x" + }, + { + "orientation" : "portrait", + "idiom" : "iphone", + "filename" : "LaunchImage-568h@2x~iphone_640x1136-1.png", + "extent" : "full-screen", + "subtype" : "retina4", + "scale" : "2x" + }, + { + "orientation" : "portrait", + "idiom" : "ipad", + "extent" : "to-status-bar", + "scale" : "1x" + }, + { + "orientation" : "portrait", + "idiom" : "ipad", + "filename" : "LaunchImage-Portrait~ipad_768x1024-1.png", + "extent" : "full-screen", + "scale" : "1x" + }, + { + "orientation" : "landscape", + "idiom" : "ipad", + "filename" : "LaunchImage-Landscape~ipad_1024x748.png", + "extent" : "to-status-bar", + "scale" : "1x" + }, + { + "orientation" : "landscape", + "idiom" : "ipad", + "filename" : "LaunchImage-Landscape~ipad_1024x768-1.png", + "extent" : "full-screen", + "scale" : "1x" + }, + { + "orientation" : "portrait", + "idiom" : "ipad", + "filename" : "LaunchImage-Portrait@2x~ipad_1536x2008.png", + "extent" : "to-status-bar", + "scale" : "2x" + }, + { + "orientation" : "portrait", + "idiom" : "ipad", + "filename" : "LaunchImage-Portrait@2x~ipad_1536x2048-1.png", + "extent" : "full-screen", + "scale" : "2x" + }, + { + "orientation" : "landscape", + "idiom" : "ipad", + "filename" : "LaunchImage-Landscape@2x~ipad_2048x1496.png", + "extent" : "to-status-bar", + "scale" : "2x" + }, + { + "orientation" : "landscape", + "idiom" : "ipad", + "filename" : "LaunchImage-Landscape@2x~ipad_2048x1536-1.png", + "extent" : "full-screen", + "scale" : "2x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/LaunchImage3.launchimage/LaunchImage-1125@3x~iphoneX-portrait_1125x2436.png b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/LaunchImage3.launchimage/LaunchImage-1125@3x~iphoneX-portrait_1125x2436.png new file mode 100644 index 0000000..489cd9b Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/LaunchImage3.launchimage/LaunchImage-1125@3x~iphoneX-portrait_1125x2436.png differ diff --git a/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/LaunchImage3.launchimage/LaunchImage-1242@3x~iphone6s-landscape_2208x1242.png b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/LaunchImage3.launchimage/LaunchImage-1242@3x~iphone6s-landscape_2208x1242.png new file mode 100644 index 0000000..ac932ee Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/LaunchImage3.launchimage/LaunchImage-1242@3x~iphone6s-landscape_2208x1242.png differ diff --git a/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/LaunchImage3.launchimage/LaunchImage-1242@3x~iphone6s-portrait_1242x2208.png b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/LaunchImage3.launchimage/LaunchImage-1242@3x~iphone6s-portrait_1242x2208.png new file mode 100644 index 0000000..0faff71 Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/LaunchImage3.launchimage/LaunchImage-1242@3x~iphone6s-portrait_1242x2208.png differ diff --git a/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/LaunchImage3.launchimage/LaunchImage-2436@3x~iphoneX-landscape_2436x1125.png b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/LaunchImage3.launchimage/LaunchImage-2436@3x~iphoneX-landscape_2436x1125.png new file mode 100644 index 0000000..ece8b06 Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/LaunchImage3.launchimage/LaunchImage-2436@3x~iphoneX-landscape_2436x1125.png differ diff --git a/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/LaunchImage3.launchimage/LaunchImage-568h@2x~iphone_640x1136-1.png b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/LaunchImage3.launchimage/LaunchImage-568h@2x~iphone_640x1136-1.png new file mode 100644 index 0000000..ec1bb4f Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/LaunchImage3.launchimage/LaunchImage-568h@2x~iphone_640x1136-1.png differ diff --git a/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/LaunchImage3.launchimage/LaunchImage-568h@2x~iphone_640x1136.png b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/LaunchImage3.launchimage/LaunchImage-568h@2x~iphone_640x1136.png new file mode 100644 index 0000000..ec1bb4f Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/LaunchImage3.launchimage/LaunchImage-568h@2x~iphone_640x1136.png differ diff --git a/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/LaunchImage3.launchimage/LaunchImage-750@2x~iphone6-portrait_750x1334.png b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/LaunchImage3.launchimage/LaunchImage-750@2x~iphone6-portrait_750x1334.png new file mode 100644 index 0000000..6ed9a14 Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/LaunchImage3.launchimage/LaunchImage-750@2x~iphone6-portrait_750x1334.png differ diff --git a/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/LaunchImage3.launchimage/LaunchImage-Landscape@2x~ipad_2048x1496.png b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/LaunchImage3.launchimage/LaunchImage-Landscape@2x~ipad_2048x1496.png new file mode 100644 index 0000000..350b0e8 Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/LaunchImage3.launchimage/LaunchImage-Landscape@2x~ipad_2048x1496.png differ diff --git a/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/LaunchImage3.launchimage/LaunchImage-Landscape@2x~ipad_2048x1536-1.png b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/LaunchImage3.launchimage/LaunchImage-Landscape@2x~ipad_2048x1536-1.png new file mode 100644 index 0000000..ed63669 Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/LaunchImage3.launchimage/LaunchImage-Landscape@2x~ipad_2048x1536-1.png differ diff --git a/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/LaunchImage3.launchimage/LaunchImage-Landscape@2x~ipad_2048x1536.png b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/LaunchImage3.launchimage/LaunchImage-Landscape@2x~ipad_2048x1536.png new file mode 100644 index 0000000..ed63669 Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/LaunchImage3.launchimage/LaunchImage-Landscape@2x~ipad_2048x1536.png differ diff --git a/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/LaunchImage3.launchimage/LaunchImage-Landscape~ipad_1024x748.png b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/LaunchImage3.launchimage/LaunchImage-Landscape~ipad_1024x748.png new file mode 100644 index 0000000..6aac627 Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/LaunchImage3.launchimage/LaunchImage-Landscape~ipad_1024x748.png differ diff --git a/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/LaunchImage3.launchimage/LaunchImage-Landscape~ipad_1024x768-1.png b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/LaunchImage3.launchimage/LaunchImage-Landscape~ipad_1024x768-1.png new file mode 100644 index 0000000..72b7a01 Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/LaunchImage3.launchimage/LaunchImage-Landscape~ipad_1024x768-1.png differ diff --git a/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/LaunchImage3.launchimage/LaunchImage-Landscape~ipad_1024x768.png b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/LaunchImage3.launchimage/LaunchImage-Landscape~ipad_1024x768.png new file mode 100644 index 0000000..72b7a01 Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/LaunchImage3.launchimage/LaunchImage-Landscape~ipad_1024x768.png differ diff --git a/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/LaunchImage3.launchimage/LaunchImage-Portrait@2x~ipad_1536x2008.png b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/LaunchImage3.launchimage/LaunchImage-Portrait@2x~ipad_1536x2008.png new file mode 100644 index 0000000..7e534ab Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/LaunchImage3.launchimage/LaunchImage-Portrait@2x~ipad_1536x2008.png differ diff --git a/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/LaunchImage3.launchimage/LaunchImage-Portrait@2x~ipad_1536x2048-1.png b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/LaunchImage3.launchimage/LaunchImage-Portrait@2x~ipad_1536x2048-1.png new file mode 100644 index 0000000..4439f99 Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/LaunchImage3.launchimage/LaunchImage-Portrait@2x~ipad_1536x2048-1.png differ diff --git a/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/LaunchImage3.launchimage/LaunchImage-Portrait@2x~ipad_1536x2048.png b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/LaunchImage3.launchimage/LaunchImage-Portrait@2x~ipad_1536x2048.png new file mode 100644 index 0000000..4439f99 Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/LaunchImage3.launchimage/LaunchImage-Portrait@2x~ipad_1536x2048.png differ diff --git a/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/LaunchImage3.launchimage/LaunchImage-Portrait~ipad_768x1024-1.png b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/LaunchImage3.launchimage/LaunchImage-Portrait~ipad_768x1024-1.png new file mode 100644 index 0000000..c74e045 Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/LaunchImage3.launchimage/LaunchImage-Portrait~ipad_768x1024-1.png differ diff --git a/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/LaunchImage3.launchimage/LaunchImage-Portrait~ipad_768x1024.png b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/LaunchImage3.launchimage/LaunchImage-Portrait~ipad_768x1024.png new file mode 100644 index 0000000..c74e045 Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/LaunchImage3.launchimage/LaunchImage-Portrait~ipad_768x1024.png differ diff --git a/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/LaunchImage3.launchimage/LaunchImage~iphone-320x480.png b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/LaunchImage3.launchimage/LaunchImage~iphone-320x480.png new file mode 100644 index 0000000..c4b5e89 Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/LaunchImage3.launchimage/LaunchImage~iphone-320x480.png differ diff --git a/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/LaunchImage3.launchimage/LaunchImage~iphone_640x960-1.png b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/LaunchImage3.launchimage/LaunchImage~iphone_640x960-1.png new file mode 100644 index 0000000..ddaafa2 Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/LaunchImage3.launchimage/LaunchImage~iphone_640x960-1.png differ diff --git a/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/LaunchImage3.launchimage/LaunchImage~iphone_640x960.png b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/LaunchImage3.launchimage/LaunchImage~iphone_640x960.png new file mode 100644 index 0000000..ddaafa2 Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/LaunchImage3.launchimage/LaunchImage~iphone_640x960.png differ diff --git a/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/launch_image.imageset/Contents.json b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/launch_image.imageset/Contents.json new file mode 100644 index 0000000..d18dff0 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/launch_image.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "filename" : "launch_image.png", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/launch_image.imageset/launch_image.png b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/launch_image.imageset/launch_image.png new file mode 100644 index 0000000..4030af6 Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Images.xcassets/launch_image.imageset/launch_image.png differ diff --git a/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Info.plist b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Info.plist new file mode 100644 index 0000000..53b43bd --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Info.plist @@ -0,0 +1,333 @@ + + + + + BundleCopied + + BundleEntryFilename + index.js + BundleSkipped + + CFBundleDevelopmentRegion + en + CFBundleDisplayName + $(PRODUCT_NAME) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + APPL + CFBundleShortVersionString + $(MARKETING_VERSION) + CFBundleSignature + ???? + CFBundleURLTypes + + + CFBundleURLName + com.creedon.Nixplay + CFBundleURLSchemes + + nixplay + + + + CFBundleURLName + com.creedon.Nixplay.qa + CFBundleURLSchemes + + nixplayqa + + + + CFBundleURLName + com.creedon.Nixplay.rnd + CFBundleURLSchemes + + nixplayrnd + + + + CFBundleURLName + com.creedon.Nixplay.alpha + CFBundleURLSchemes + + nixplayalpha + + + + CFBundleURLName + com.creedon.Nixplay.beta + CFBundleURLSchemes + + nixplaybeta + + + + CFBundleURLName + com.creedon.Nixplay.FujifilmSDK.Payments + CFBundleURLSchemes + + com.creedon.Nixplay.FujifilmSDK.Payments + com.creedon.Nixplay.qa.FujifilmSDK.Payments + com.creedon.Nixplay.rnd.FujifilmSDK.Payments + com.creedon.Nixplay.alpha.FujifilmSDK.Payments + com.creedon.Nixplay.beta.FujifilmSDK.Payments + + + + CFBundleTypeRole + Editor + CFBundleURLName + com.googleusercontent.apps.530768309016-i0qfcqmm5in35ssor341114l9ct5aouu + CFBundleURLSchemes + + com.googleusercontent.apps.530768309016-i0qfcqmm5in35ssor341114l9ct5aouu + + + + CFBundleTypeRole + Editor + CFBundleURLName + com.googleusercontent.apps.530768309016-i0qfcqmm5in35ssor341114l9ct5aouu + CFBundleURLSchemes + + com.googleusercontent.apps.530768309016-i0qfcqmm5in35ssor341114l9ct5aouu + + + + CFBundleTypeRole + Editor + CFBundleURLName + com.googleusercontent.apps.530768309016-8ij1aclssmi8et5n3a0h7nq7mm0qdesb + CFBundleURLSchemes + + com.googleusercontent.apps.530768309016-8ij1aclssmi8et5n3a0h7nq7mm0qdesb + + + + CFBundleTypeRole + Editor + CFBundleURLName + com.googleusercontent.apps.530768309016-8ij1aclssmi8et5n3a0h7nq7mm0qdesb + CFBundleURLSchemes + + com.googleusercontent.apps.530768309016-8ij1aclssmi8et5n3a0h7nq7mm0qdesb + + + + CFBundleVersion + $(CURRENT_PROJECT_VERSION) + CodePushDeploymentKey + __RN_CONFIG_CODEPUSH_IOS_KEY + ITSAppUsesNonExemptEncryption + + IntercomID + __RN_CONFIG_INTERCOM_ID + IntercomiOSKey + __RN_CONFIG_INTERCOM_IOS_KEY + LSApplicationQueriesSchemes + + spotify + com.paypal.ppclient.touch.v1 + com.paypal.ppclient.touch.v2 + com.venmo.touch.v2://x-callback-url/vzero/auth + + LSHasLocalizedDisplayName + + LSRequiresIPhoneOS + + NSAppTransportSecurity + + NSAllowsArbitraryLoads + + NSExceptionDomains + + cdn.shopify.com + + NSThirdPartyExceptionAllowsInsecureHTTPLoads + + + fujifilmesys.com + + NSExceptionAllowsInsecureHTTPLoads + + NSExceptionRequiresForwardSecrecy + + NSIncludesSubdomains + + + local + + NSExceptionAllowsInsecureHTTPLoads + + NSIncludesSubdomains + + + localhost + + NSExceptionAllowsInsecureHTTPLoads + + + mobile-pair.nixplay.com + + NSTemporaryExceptionAllowsInsecureHTTPLoads + + + mobile-pair.qa.nixplay.com + + NSTemporaryExceptionAllowsInsecureHTTPLoads + + + mobile-pair.rnd.nixplay.com + + NSTemporaryExceptionAllowsInsecureHTTPLoads + + + mobile.qa.nixplay.com + + NSThirdPartyExceptionAllowsInsecureHTTPLoads + + + mobile.rnd.nixplay.com + + NSThirdPartyExceptionAllowsInsecureHTTPLoads + + + nixplay-prod-original.s3-us-west-2.amazonaws.com + + NSExceptionRequiresForwardSecrecy + + + nixplay-prod-thumbnail.s3-us-west-2.amazonaws.com + + NSExceptionRequiresForwardSecrecy + + + nixplay-prod-upload.s3.amazonaws.com + + NSExceptionRequiresForwardSecrecy + + + nixplay-qa-original.s3-ap-northeast-1.amazonaws.com + + NSExceptionRequiresForwardSecrecy + + + nixplay-qa-thumbnail.s3-ap-northeast-1.amazonaws.com + + NSExceptionRequiresForwardSecrecy + + + nixplay-qa-upload.s3.amazonaws.com + + NSExceptionRequiresForwardSecrecy + + + nixplay-rnd-original.s3-ap-southeast-1.amazonaws.com + + NSExceptionRequiresForwardSecrecy + + + nixplay-rnd-thumbnail.s3-ap-southeast-1.amazonaws.com + + NSExceptionRequiresForwardSecrecy + + + nixplay-rnd-upload.s3.amazonaws.com + + NSExceptionRequiresForwardSecrecy + + + paypal.com + + NSExceptionRequiresForwardSecrecy + + NSIncludesSubdomains + + + shop.nixplay.co.uk + + NSThirdPartyExceptionAllowsInsecureHTTPLoads + + + shop.nixplay.com + + NSThirdPartyExceptionAllowsInsecureHTTPLoads + + + + + NSCameraUsageDescription + Sending photo to your frame requires access to Camera + NSContactsUsageDescription + Auto fill address requires access to contacts + NSLocationAlwaysAndWhenInUseUsageDescription + To provide additional information about your photo based on your location + NSLocationAlwaysUsageDescription + To provide additional information about your photo based on your location + NSLocationUsageDescription + To provide additional information about your photo based on your location + NSLocationWhenInUseUsageDescription + To provide additional information about your photo based on your location + NSMicrophoneUsageDescription + Recording video requires access to microphone + NSPhotoLibraryUsageDescription + This allows you to upload photos and videos from your library and download them to your device + UIAppFonts + + Open Sans-Bold.ttf + Open Sans-BoldItalic.ttf + Open Sans-ExtraBold.ttf + Open Sans-ExtraBoldItalic.ttf + Open Sans-Italic.ttf + Open Sans-Light.ttf + Open Sans-LightItalic.ttf + Open Sans-SemiBold.ttf + Open Sans-SemiBoldItalic.ttf + Open Sans.ttf + Entypo.ttf + EvilIcons.ttf + Feather.ttf + FontAwesome.ttf + Foundation.ttf + Ionicons.ttf + MaterialCommunityIcons.ttf + MaterialIcons.ttf + Octicons.ttf + SimpleLineIcons.ttf + Zocial.ttf + NixplayIcon.ttf + NixplayIcon.woff + AntDesign.ttf + FontAwesome5_Brands.ttf + FontAwesome5_Regular.ttf + FontAwesome5_Solid.ttf + + UIBackgroundModes + + fetch + remote-notification + + UIRequiredDeviceCapabilities + + armv7 + + UIRequiresFullScreen + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + + UIUserInterfaceStyle + Light + UIViewControllerBasedStatusBarAppearance + + + diff --git a/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Nixplay.alpha.entitlements b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Nixplay.alpha.entitlements new file mode 100644 index 0000000..a77049e --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Nixplay.alpha.entitlements @@ -0,0 +1,16 @@ + + + + + aps-environment + production + com.apple.security.application-groups + + group.com.creedon.Nixplay.alpha + + keychain-access-groups + + $(AppIdentifierPrefix)group.com.creedon.Nixplay.alpha + + + diff --git a/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Nixplay.beta.entitlements b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Nixplay.beta.entitlements new file mode 100644 index 0000000..a5b6e97 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Nixplay.beta.entitlements @@ -0,0 +1,16 @@ + + + + + aps-environment + production + com.apple.security.application-groups + + group.com.creedon.Nixplay.beta + + keychain-access-groups + + $(AppIdentifierPrefix)group.com.creedon.Nixplay.beta + + + diff --git a/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Nixplay.entitlements b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Nixplay.entitlements new file mode 100644 index 0000000..9fc8c92 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Nixplay.entitlements @@ -0,0 +1,16 @@ + + + + + aps-environment + production + com.apple.security.application-groups + + group.com.creedon.Nixplay + + keychain-access-groups + + $(AppIdentifierPrefix)group.com.creedon.Nixplay + + + diff --git a/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Nixplay.qa.entitlements b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Nixplay.qa.entitlements new file mode 100644 index 0000000..14a979c --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Nixplay.qa.entitlements @@ -0,0 +1,16 @@ + + + + + aps-environment + development + com.apple.security.application-groups + + group.com.creedon.Nixplay.qa + + keychain-access-groups + + $(AppIdentifierPrefix)group.com.creedon.Nixplay.qa + + + diff --git a/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Nixplay.rnd.entitlements b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Nixplay.rnd.entitlements new file mode 100644 index 0000000..7fcc9c2 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/Nixplay.rnd.entitlements @@ -0,0 +1,14 @@ + + + + + aps-environment + development + com.apple.security.application-groups + + keychain-access-groups + + $(AppIdentifierPrefix)group.com.creedon.Nixplay.rnd + + + diff --git a/ioneapps-maagapp-ee31119a522d/ios/Nixplay/de.lproj/InfoPList.strings b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/de.lproj/InfoPList.strings new file mode 100644 index 0000000..8e9a58e --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/de.lproj/InfoPList.strings @@ -0,0 +1,15 @@ +/* + InfoPList.strings + MAAGApp + + Created by James Kong on 19/2/2019. + Copyright © 2019 Facebook. All rights reserved. +*/ +NSCameraUsageDescription = "Das Senden eines Inhalt an Ihren Rahmen erfordert den Zugriff auf die Kamera"; +NSLocationUsageDescription = "Um zusätzliche Informationen zu Ihrem Inhalt basierend auf Ihrem Standort bereitzustellen"; +NSLocationAlwaysUsageDescription = "Um zusätzliche Informationen zu Ihrem Inhalt basierend auf Ihrem Standort bereitzustellen"; +NSLocationWhenInUseUsageDescription = "Um zusätzliche Informationen zu Ihrem Inhalt basierend auf Ihrem Standort bereitzustellen"; +NSPhotoLibraryUsageDescription = "Hiermit können Sie Fotos und Videos von Ihrer Bibliotek hochladen und zu Ihrem Gerät herunterladen"; +NSMicrophoneUsageDescription = "Videoaufnahmen erfordern den Zugriff auf das Mikrofon"; +NSLocationWhenInUseUsageDescription = "Um zusätzliche Informationen zu Ihrem Inhalt basierend auf Ihrem Standort bereitzustellen"; +NSContactsUsageDescription = "Auto fill address requires access to contacts"; diff --git a/ioneapps-maagapp-ee31119a522d/ios/Nixplay/en.lproj/InfoPList.strings b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/en.lproj/InfoPList.strings new file mode 100644 index 0000000..6f8801d --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/en.lproj/InfoPList.strings @@ -0,0 +1,14 @@ +/* + InfoPList.strings + MAAGApp + + Created by James Kong on 19/2/2019. + Copyright © 2019 Facebook. All rights reserved. +*/ +NSCameraUsageDescription = "Sending photo to your frame requires access to Camera"; +NSLocationUsageDescription = "To provide additional information about your photo based on your location"; +NSLocationAlwaysUsageDescription = "To provide additional information about your photo based on your location"; +NSLocationWhenInUseUsageDescription = "To provide additional information about your photo based on your location"; +NSPhotoLibraryUsageDescription = "This allows you to upload photos and videos from your library and download them to your device"; +NSMicrophoneUsageDescription = "Recording video requires access to Photo Library"; +NSContactsUsageDescription = "Auto fill address requires access to contacts"; diff --git a/ioneapps-maagapp-ee31119a522d/ios/Nixplay/ja.lproj/InfoPList.strings b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/ja.lproj/InfoPList.strings new file mode 100644 index 0000000..40d3fb5 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/ja.lproj/InfoPList.strings @@ -0,0 +1,14 @@ +/* + InfoPList.strings + MAAGApp + + Created by James Kong on 19/2/2019. + Copyright © 2019 Facebook. All rights reserved. +*/ +NSCameraUsageDescription = "フレームに写真を送信するには、カメラへのアクセスが求められます。"; +NSLocationUsageDescription = "現在位置に基づいた写真に関する追加情報を提供する"; +NSLocationAlwaysUsageDescription = "現在位置に基づいた写真に関する追加情報を提供する"; +NSLocationWhenInUseUsageDescription = "現在位置に基づいた写真に関する追加情報を提供する"; +NSPhotoLibraryUsageDescription = "ライブラリから写真と動画をアップロードして、デバイスにダウンロードできるようになります"; +NSMicrophoneUsageDescription = "動画を録画するには、フォトライブラリへのアクセスが求められます。"; +NSContactsUsageDescription = "住所の自動入力には、連絡先へのアクセスが求められます。"; diff --git a/ioneapps-maagapp-ee31119a522d/ios/Nixplay/ja.lproj/LaunchScreen.strings b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/ja.lproj/LaunchScreen.strings new file mode 100644 index 0000000..a9e3fad --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/ja.lproj/LaunchScreen.strings @@ -0,0 +1,6 @@ + +/* Class = "UILabel"; text = "Powered by React Native"; ObjectID = "8ie-xW-0ye"; */ +"8ie-xW-0ye.text" = "Powered by React Native"; + +/* Class = "UILabel"; text = "Nixplay"; ObjectID = "kId-c2-rCX"; */ +"kId-c2-rCX.text" = "Nixplay"; diff --git a/ioneapps-maagapp-ee31119a522d/ios/Nixplay/main.m b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/main.m new file mode 100644 index 0000000..c73e006 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/ios/Nixplay/main.m @@ -0,0 +1,16 @@ +/** + * Copyright (c) 2015-present, Facebook, Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +#import + +#import "AppDelegate.h" + +int main(int argc, char * argv[]) { + @autoreleasepool { + return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); + } +} diff --git a/ioneapps-maagapp-ee31119a522d/ios/NixplayTests/Info.plist b/ioneapps-maagapp-ee31119a522d/ios/NixplayTests/Info.plist new file mode 100644 index 0000000..d8f5fce --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/ios/NixplayTests/Info.plist @@ -0,0 +1,24 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + com.creedon.Nixplay.$(PRODUCT_NAME:rfc1034identifier) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + BNDL + CFBundleShortVersionString + 3.10.0 + CFBundleSignature + ???? + CFBundleVersion + 300000205 + + diff --git a/ioneapps-maagapp-ee31119a522d/ios/NixplayTests/NixplayTests.m b/ioneapps-maagapp-ee31119a522d/ios/NixplayTests/NixplayTests.m new file mode 100644 index 0000000..ba0dd85 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/ios/NixplayTests/NixplayTests.m @@ -0,0 +1,68 @@ +/** + * Copyright (c) 2015-present, Facebook, Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +#import +#import + +#import +#import + +#define TIMEOUT_SECONDS 600 +#define TEXT_TO_LOOK_FOR @"Welcome to React Native!" + +@interface NixplayTests : XCTestCase + +@end + +@implementation NixplayTests + +- (BOOL)findSubviewInView:(UIView *)view matching:(BOOL(^)(UIView *view))test +{ + if (test(view)) { + return YES; + } + for (UIView *subview in [view subviews]) { + if ([self findSubviewInView:subview matching:test]) { + return YES; + } + } + return NO; +} + +- (void)testRendersWelcomeScreen +{ + UIViewController *vc = [[[RCTSharedApplication() delegate] window] rootViewController]; + NSDate *date = [NSDate dateWithTimeIntervalSinceNow:TIMEOUT_SECONDS]; + BOOL foundElement = NO; + + __block NSString *redboxError = nil; + RCTSetLogFunction(^(RCTLogLevel level, RCTLogSource source, NSString *fileName, NSNumber *lineNumber, NSString *message) { + if (level >= RCTLogLevelError) { + redboxError = message; + } + }); + + while ([date timeIntervalSinceNow] > 0 && !foundElement && !redboxError) { + [[NSRunLoop mainRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.1]]; + [[NSRunLoop mainRunLoop] runMode:NSRunLoopCommonModes beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.1]]; + + foundElement = [self findSubviewInView:vc.view matching:^BOOL(UIView *view) { + if ([view.accessibilityLabel isEqualToString:TEXT_TO_LOOK_FOR]) { + return YES; + } + return NO; + }]; + } + + RCTSetLogFunction(RCTDefaultLogFunction); + + XCTAssertNil(redboxError, @"RedBox error: %@", redboxError); + XCTAssertTrue(foundElement, @"Couldn't find element with text '%@' in %d seconds", TEXT_TO_LOOK_FOR, TIMEOUT_SECONDS); +} + + +@end diff --git a/ioneapps-maagapp-ee31119a522d/ios/Podfile b/ioneapps-maagapp-ee31119a522d/ios/Podfile new file mode 100644 index 0000000..c8566d2 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/ios/Podfile @@ -0,0 +1,206 @@ +# My other pods +platform:ios, '9.0' +require_relative '../node_modules/@react-native-community/cli-platform-ios/native_modules' + +def common_pods + pod 'SDAVAssetExportSession', :git => 'https://github.com/nixplay/SDAVAssetExportSession.git', :tag => '0.0.6' + pod 'FileMD5Hash' + pod 'AFNetworking' + pod 'NixNetwork', :git => 'git@git.nixplay.ninja:mobile/NixNetwork.git', :tag => '1.0.2' + pod 'TPKeyboardAvoiding', '~> 1.3' +end + +def rn_pods + pod 'RNVectorIcons', :path => '../node_modules/react-native-vector-icons' + pod 'FBLazyVector', :path => "../node_modules/react-native/Libraries/FBLazyVector" + pod 'FBReactNativeSpec', :path => "../node_modules/react-native/Libraries/FBReactNativeSpec" + pod 'RCTRequired', :path => "../node_modules/react-native/Libraries/RCTRequired" + pod 'RCTTypeSafety', :path => "../node_modules/react-native/Libraries/TypeSafety" + pod 'React', :path => '../node_modules/react-native/' + pod 'React-Core', :path => '../node_modules/react-native/' + pod 'React-CoreModules', :path => '../node_modules/react-native/React/CoreModules' + pod 'React-Core/DevSupport', :path => '../node_modules/react-native/' + pod 'React-RCTActionSheet', :path => '../node_modules/react-native/Libraries/ActionSheetIOS' + pod 'React-RCTAnimation', :path => '../node_modules/react-native/Libraries/NativeAnimation' + pod 'React-RCTBlob', :path => '../node_modules/react-native/Libraries/Blob' + pod 'React-RCTImage', :path => '../node_modules/react-native/Libraries/Image' + pod 'React-RCTLinking', :path => '../node_modules/react-native/Libraries/LinkingIOS' + pod 'React-RCTNetwork', :path => '../node_modules/react-native/Libraries/Network' + pod 'React-RCTSettings', :path => '../node_modules/react-native/Libraries/Settings' + pod 'React-RCTText', :path => '../node_modules/react-native/Libraries/Text' + pod 'React-RCTVibration', :path => '../node_modules/react-native/Libraries/Vibration' + pod 'React-Core/RCTWebSocket', :path => '../node_modules/react-native/' + pod 'React-cxxreact', :path => '../node_modules/react-native/ReactCommon/cxxreact' + pod 'React-jsi', :path => '../node_modules/react-native/ReactCommon/jsi' + pod 'React-jsiexecutor', :path => '../node_modules/react-native/ReactCommon/jsiexecutor' + pod 'React-jsinspector', :path => '../node_modules/react-native/ReactCommon/jsinspector' + pod 'ReactCommon/jscallinvoker', :path => "../node_modules/react-native/ReactCommon" + pod 'ReactCommon/turbomodule/core', :path => "../node_modules/react-native/ReactCommon" + pod 'Yoga', :path => '../node_modules/react-native/ReactCommon/yoga' + pod 'DoubleConversion', :podspec => '../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec' + pod 'glog', :podspec => '../node_modules/react-native/third-party-podspecs/glog.podspec' + pod 'Folly', :podspec => '../node_modules/react-native/third-party-podspecs/Folly.podspec' +end + +def basic_pods + rn_pods + # Your 'node_modules' directory is probably in the root of your project, + # but if not, adjust the `:path` accordingly + # pod 'React', :path => '../node_modules/react-native', :subspecs => [ + # 'Core', + # 'CxxBridge', # Include this for RN >= 0.47 + # 'DevSupport', # Include this to enable In - App Devmenu if RN >= 0.43 + # 'RCTImage', + # 'RCTText', + # 'RCTNetwork', + # 'RCTWebSocket', # Needed for debugging + # 'RCTAnimation', # Needed for FlatList and animations running on native UI thread + # # Add any other subspecs you want to use in your project + # ] + # # Explicitly include Yoga if you are using RN >= 0.42.0 + # pod 'yoga', :path => '../node_modules/react-native/ReactCommon/yoga' + + # # Third party deps podspec link + # pod 'DoubleConversion', :podspec => '../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec' + # pod 'glog', :podspec => '../node_modules/react-native/third-party-podspecs/glog.podspec' + # pod 'Folly', :podspec => '../node_modules/react-native/third-party-podspecs/Folly.podspec' + pod 'react-native-config', :path => '../node_modules/react-native-config' + pod 'Fabric', '~> 1.9.0' + pod 'Crashlytics', '~> 3.12.0' + pod 'GMImagePicker', :git => 'https://github.com/nixplay/GMImagePicker.git', :tag => '0.4.0-dev3' + pod 'ICGVideoTrimmer', :git => 'https://github.com/nixplay/ICGVideoTrimmer.git' + pod 'Firebase/Core' + pod 'Firebase/Performance', '~> 5.20.1' + + pod 'RNReanimated', :path => '../node_modules/react-native-reanimated' + pod 'Toast' + pod 'Underscore.m' + pod 'FileMD5Hash' + pod 'RNPermissions', :path => '../node_modules/react-native-permissions' + pod 'react-native-safe-area', path: '../node_modules/react-native-safe-area' + + # pod 'React-ART', :path => '../node_modules/react-native/Libraries/ART' + common_pods + pod 'react-native-creedon-imagepicker', :podspec => '../node_modules/react-native-creedon-imagepicker/react-native-creedon-imagepicker.podspec' + pod 'react-native-nixplay-core', :podspec => '../node_modules/react-native-nixplay-core/react-native-nixplay-core.podspec' + use_native_modules! + + permissions_path = '../node_modules/react-native-permissions/ios' + + pod 'Permission-Notifications', :path => "#{permissions_path}/Notifications.podspec" + pod 'Permission-Camera', :path => "#{permissions_path}/Camera.podspec" + pod 'Permission-Contacts', :path => "#{permissions_path}/Contacts.podspec" + pod 'Permission-LocationAlways', :path => "#{permissions_path}/LocationAlways.podspec" + pod 'Permission-LocationWhenInUse', :path => "#{permissions_path}/LocationWhenInUse.podspec" + pod 'Permission-Microphone', :path => "#{permissions_path}/Microphone.podspec" + pod 'Permission-PhotoLibrary', :path => "#{permissions_path}/PhotoLibrary.podspec" + pod 'react-native-webview', :path => '../node_modules/react-native-webview' + pod 'react-native-cameraroll', :path => '../node_modules/@react-native-community/cameraroll' + pod 'RNBluetoothEscposPrinter', :path => '../node_modules/react-native-bluetooth-escpos-printer' +end + +def appex_pods + pod 'SDWebImage', '~> 5.0.0' + common_pods +end + +target 'MAAGApp' do + # Uncomment the next line if you're using Swift or would like to use dynamic frameworks + # use_frameworks! + # Pods for Nixplay + basic_pods + target 'MAAGAppTests' do + inherit! :search_paths + # Pods for testing + end +end + + +target 'MAAGAppRnd' do + pod 'Calabash' + basic_pods + appex_pods +end +target 'MAAGAppAlpha' do + basic_pods +end +target 'MAAGAppBeta' do + basic_pods +end +target 'MAAGAppQa' do + pod 'Calabash' + basic_pods +end + +target 'MAAGAppProd' do + basic_pods +end + +target 'MagShareExtensionAlpha' do + appex_pods +end +target 'MagShareExtensionBeta' do + appex_pods +end +target 'MagShareExtensionQa' do + appex_pods + pod 'NixNetwork', :git => 'git@git.nixplay.ninja:mobile/NixNetwork.git', :tag => '1.0.2' + # You need to add now ReactNativeShareExtension as Dependency because it is now a POD. +end +target 'MagShareExtension' do + appex_pods + pod 'NixNetwork', :git => 'git@git.nixplay.ninja:mobile/NixNetwork.git', :tag => '1.0.2' + # You need to add now ReactNativeShareExtension as Dependency because it is now a POD. +end + +target 'MAAGApp-tvOS' do + # Uncomment the next line if you're using Swift or would like to use dynamic frameworks + # use_frameworks! + + # Pods for Nixplay-tvOS + + target 'MAAGApp-tvOSTests' do + inherit! :search_paths + # Pods for testing + end +end + +# post_install do | installer | +# installer.pods_project.targets.each do | target | +# if target.name == "React" +# target.remove_from_project +# end +# end +# end + +post_install do |installer| + installer.pods_project.targets.each do |target| + if ['RNFBApp', 'RNFBMessaging'].include?(target.name) + target.add_system_framework(installer.pods_project.targets.find{|target| target.name == 'GoogleUtilities'}) + elsif target.name.eql?('RNFBAnalytics') + target.add_system_framework(installer.pods_project.targets.find{|target| target.name == 'FirebaseAnalytics'}) + target.add_system_framework(installer.pods_project.targets.find{|target| target.name == 'GoogleAppMeasurement'}) + target.add_system_framework(installer.pods_project.targets.find{|target| target.name == 'nanopb'}) + target.add_system_framework(installer.pods_project.targets.find{|target| target.name == 'GoogleUtilities'}) + end + end +# Add this, taken from: https://github.com/facebook/react-native/issues/25792#issuecomment-517295859 + installer.pods_project.targets.each do |target| + target.build_configurations.each do |config| + config.build_settings['APPLICATION_EXTENSION_API_ONLY'] = 'NO' + end + end + #This is for hotfix with React Native Config + installer.pods_project.targets.each do |target| + if target.name == 'react-native-config' + phase = target.project.new(Xcodeproj::Project::Object::PBXShellScriptBuildPhase) + phase.shell_script = "cd ../../"\ + " && RNC_ROOT=./node_modules/react-native-config/"\ + " && export SYMROOT=$RNC_ROOT/ios/ReactNativeConfig"\ + " && ruby $RNC_ROOT/ios/ReactNativeConfig/BuildDotenvConfig.ruby" + + target.build_phases << phase + target.build_phases.move(phase,0) + end + end +end diff --git a/ioneapps-maagapp-ee31119a522d/ios/Podfile.lock b/ioneapps-maagapp-ee31119a522d/ios/Podfile.lock new file mode 100644 index 0000000..3acab06 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/ios/Podfile.lock @@ -0,0 +1,877 @@ +PODS: + - AFNetworking (3.2.1): + - AFNetworking/NSURLSession (= 3.2.1) + - AFNetworking/Reachability (= 3.2.1) + - AFNetworking/Security (= 3.2.1) + - AFNetworking/Serialization (= 3.2.1) + - AFNetworking/UIKit (= 3.2.1) + - AFNetworking/NSURLSession (3.2.1): + - AFNetworking/Reachability + - AFNetworking/Security + - AFNetworking/Serialization + - AFNetworking/Reachability (3.2.1) + - AFNetworking/Security (3.2.1) + - AFNetworking/Serialization (3.2.1) + - AFNetworking/UIKit (3.2.1): + - AFNetworking/NSURLSession + - Base64 (1.1.2) + - boost-for-react-native (1.63.0) + - BVLinearGradient (2.5.6): + - React + - Calabash (0.21.10) + - CodePush (6.2.0): + - Base64 (~> 1.1) + - JWT (~> 3.0.0-beta.7) + - React + - SSZipArchive (~> 2.1) + - Crashlytics (3.12.0): + - Fabric (~> 1.9.0) + - DoubleConversion (1.1.6) + - Fabric (1.9.0) + - FBLazyVector (0.61.5) + - FBReactNativeSpec (0.61.5): + - Folly (= 2018.10.22.00) + - RCTRequired (= 0.61.5) + - RCTTypeSafety (= 0.61.5) + - React-Core (= 0.61.5) + - React-jsi (= 0.61.5) + - ReactCommon/turbomodule/core (= 0.61.5) + - FileMD5Hash (2.0.0) + - Firebase/Core (5.20.2): + - Firebase/CoreOnly + - FirebaseAnalytics (= 5.8.1) + - Firebase/CoreOnly (5.20.2): + - FirebaseCore (= 5.4.1) + - Firebase/Performance (5.20.2): + - Firebase/Core + - FirebasePerformance (= 2.2.4) + - FirebaseABTesting (2.0.0): + - FirebaseCore (~> 5.0) + - Protobuf (~> 3.5) + - FirebaseAnalytics (5.8.1): + - FirebaseCore (~> 5.4) + - FirebaseInstanceID (~> 3.8) + - GoogleAppMeasurement (= 5.8.1) + - GoogleUtilities/AppDelegateSwizzler (~> 5.2) + - GoogleUtilities/MethodSwizzler (~> 5.2) + - GoogleUtilities/Network (~> 5.2) + - "GoogleUtilities/NSData+zlib (~> 5.2)" + - nanopb (~> 0.3) + - FirebaseCore (5.4.1): + - GoogleUtilities/Environment (~> 5.2) + - GoogleUtilities/Logger (~> 5.2) + - FirebaseInstanceID (3.8.1): + - FirebaseCore (~> 5.2) + - GoogleUtilities/Environment (~> 5.2) + - GoogleUtilities/UserDefaults (~> 5.2) + - FirebasePerformance (2.2.4): + - FirebaseAnalytics (~> 5.8) + - FirebaseInstanceID (~> 3.8) + - FirebaseRemoteConfig (~> 3.1) + - GoogleToolboxForMac/Logger (~> 2.1) + - "GoogleToolboxForMac/NSData+zlib (~> 2.1)" + - GoogleUtilities/ISASwizzler (~> 5.2) + - GoogleUtilities/MethodSwizzler (~> 5.2) + - GTMSessionFetcher/Core (~> 1.1) + - Protobuf (~> 3.5) + - FirebaseRemoteConfig (3.1.0): + - FirebaseABTesting (~> 2.0) + - FirebaseAnalytics (~> 5.3) + - FirebaseCore (~> 5.1) + - FirebaseInstanceID (~> 3.3) + - GoogleUtilities/Environment (~> 5.2) + - "GoogleUtilities/NSData+zlib (~> 5.2)" + - Protobuf (~> 3.5) + - Folly (2018.10.22.00): + - boost-for-react-native + - DoubleConversion + - Folly/Default (= 2018.10.22.00) + - glog + - Folly/Default (2018.10.22.00): + - boost-for-react-native + - DoubleConversion + - glog + - glog (0.3.5) + - GMImagePicker (0.4.0): + - Masonry + - GoogleAppMeasurement (5.8.1): + - GoogleUtilities/AppDelegateSwizzler (~> 5.2) + - GoogleUtilities/MethodSwizzler (~> 5.2) + - GoogleUtilities/Network (~> 5.2) + - "GoogleUtilities/NSData+zlib (~> 5.2)" + - nanopb (~> 0.3) + - GoogleToolboxForMac/Defines (2.2.2) + - GoogleToolboxForMac/Logger (2.2.2): + - GoogleToolboxForMac/Defines (= 2.2.2) + - "GoogleToolboxForMac/NSData+zlib (2.2.2)": + - GoogleToolboxForMac/Defines (= 2.2.2) + - GoogleUtilities/AppDelegateSwizzler (5.8.0): + - GoogleUtilities/Environment + - GoogleUtilities/Logger + - GoogleUtilities/Network + - GoogleUtilities/Environment (5.8.0) + - GoogleUtilities/ISASwizzler (5.8.0) + - GoogleUtilities/Logger (5.8.0): + - GoogleUtilities/Environment + - GoogleUtilities/MethodSwizzler (5.8.0): + - GoogleUtilities/Logger + - GoogleUtilities/Network (5.8.0): + - GoogleUtilities/Logger + - "GoogleUtilities/NSData+zlib" + - GoogleUtilities/Reachability + - "GoogleUtilities/NSData+zlib (5.8.0)" + - GoogleUtilities/Reachability (5.8.0): + - GoogleUtilities/Logger + - GoogleUtilities/UserDefaults (5.8.0): + - GoogleUtilities/Logger + - GTMSessionFetcher/Core (1.3.1) + - ICGVideoTrimmer (1.2.0) + - JWT (3.0.0-beta.12): + - Base64 (~> 1.1.2) + - Masonry (1.1.0) + - Mixpanel (3.5.1) + - nanopb (0.3.9011): + - nanopb/decode (= 0.3.9011) + - nanopb/encode (= 0.3.9011) + - nanopb/decode (0.3.9011) + - nanopb/encode (0.3.9011) + - NixNetwork (1.0.2) + - Permission-Camera (2.0.3): + - RNPermissions + - Permission-Contacts (2.0.3): + - RNPermissions + - Permission-LocationAlways (2.0.3): + - RNPermissions + - Permission-LocationWhenInUse (2.0.3): + - RNPermissions + - Permission-Microphone (2.0.3): + - RNPermissions + - Permission-Notifications (2.0.3): + - RNPermissions + - Permission-PhotoLibrary (2.0.3): + - RNPermissions + - Protobuf (3.11.2) + - RCTRequired (0.61.5) + - RCTTypeSafety (0.61.5): + - FBLazyVector (= 0.61.5) + - Folly (= 2018.10.22.00) + - RCTRequired (= 0.61.5) + - React-Core (= 0.61.5) + - RCTUserDefaults (0.1.5): + - React + - React (0.61.5): + - React-Core (= 0.61.5) + - React-Core/DevSupport (= 0.61.5) + - React-Core/RCTWebSocket (= 0.61.5) + - React-RCTActionSheet (= 0.61.5) + - React-RCTAnimation (= 0.61.5) + - React-RCTBlob (= 0.61.5) + - React-RCTImage (= 0.61.5) + - React-RCTLinking (= 0.61.5) + - React-RCTNetwork (= 0.61.5) + - React-RCTSettings (= 0.61.5) + - React-RCTText (= 0.61.5) + - React-RCTVibration (= 0.61.5) + - React-Core (0.61.5): + - Folly (= 2018.10.22.00) + - glog + - React-Core/Default (= 0.61.5) + - React-cxxreact (= 0.61.5) + - React-jsi (= 0.61.5) + - React-jsiexecutor (= 0.61.5) + - Yoga + - React-Core/CoreModulesHeaders (0.61.5): + - Folly (= 2018.10.22.00) + - glog + - React-Core/Default + - React-cxxreact (= 0.61.5) + - React-jsi (= 0.61.5) + - React-jsiexecutor (= 0.61.5) + - Yoga + - React-Core/Default (0.61.5): + - Folly (= 2018.10.22.00) + - glog + - React-cxxreact (= 0.61.5) + - React-jsi (= 0.61.5) + - React-jsiexecutor (= 0.61.5) + - Yoga + - React-Core/DevSupport (0.61.5): + - Folly (= 2018.10.22.00) + - glog + - React-Core/Default (= 0.61.5) + - React-Core/RCTWebSocket (= 0.61.5) + - React-cxxreact (= 0.61.5) + - React-jsi (= 0.61.5) + - React-jsiexecutor (= 0.61.5) + - React-jsinspector (= 0.61.5) + - Yoga + - React-Core/RCTActionSheetHeaders (0.61.5): + - Folly (= 2018.10.22.00) + - glog + - React-Core/Default + - React-cxxreact (= 0.61.5) + - React-jsi (= 0.61.5) + - React-jsiexecutor (= 0.61.5) + - Yoga + - React-Core/RCTAnimationHeaders (0.61.5): + - Folly (= 2018.10.22.00) + - glog + - React-Core/Default + - React-cxxreact (= 0.61.5) + - React-jsi (= 0.61.5) + - React-jsiexecutor (= 0.61.5) + - Yoga + - React-Core/RCTBlobHeaders (0.61.5): + - Folly (= 2018.10.22.00) + - glog + - React-Core/Default + - React-cxxreact (= 0.61.5) + - React-jsi (= 0.61.5) + - React-jsiexecutor (= 0.61.5) + - Yoga + - React-Core/RCTImageHeaders (0.61.5): + - Folly (= 2018.10.22.00) + - glog + - React-Core/Default + - React-cxxreact (= 0.61.5) + - React-jsi (= 0.61.5) + - React-jsiexecutor (= 0.61.5) + - Yoga + - React-Core/RCTLinkingHeaders (0.61.5): + - Folly (= 2018.10.22.00) + - glog + - React-Core/Default + - React-cxxreact (= 0.61.5) + - React-jsi (= 0.61.5) + - React-jsiexecutor (= 0.61.5) + - Yoga + - React-Core/RCTNetworkHeaders (0.61.5): + - Folly (= 2018.10.22.00) + - glog + - React-Core/Default + - React-cxxreact (= 0.61.5) + - React-jsi (= 0.61.5) + - React-jsiexecutor (= 0.61.5) + - Yoga + - React-Core/RCTSettingsHeaders (0.61.5): + - Folly (= 2018.10.22.00) + - glog + - React-Core/Default + - React-cxxreact (= 0.61.5) + - React-jsi (= 0.61.5) + - React-jsiexecutor (= 0.61.5) + - Yoga + - React-Core/RCTTextHeaders (0.61.5): + - Folly (= 2018.10.22.00) + - glog + - React-Core/Default + - React-cxxreact (= 0.61.5) + - React-jsi (= 0.61.5) + - React-jsiexecutor (= 0.61.5) + - Yoga + - React-Core/RCTVibrationHeaders (0.61.5): + - Folly (= 2018.10.22.00) + - glog + - React-Core/Default + - React-cxxreact (= 0.61.5) + - React-jsi (= 0.61.5) + - React-jsiexecutor (= 0.61.5) + - Yoga + - React-Core/RCTWebSocket (0.61.5): + - Folly (= 2018.10.22.00) + - glog + - React-Core/Default (= 0.61.5) + - React-cxxreact (= 0.61.5) + - React-jsi (= 0.61.5) + - React-jsiexecutor (= 0.61.5) + - Yoga + - React-CoreModules (0.61.5): + - FBReactNativeSpec (= 0.61.5) + - Folly (= 2018.10.22.00) + - RCTTypeSafety (= 0.61.5) + - React-Core/CoreModulesHeaders (= 0.61.5) + - React-RCTImage (= 0.61.5) + - ReactCommon/turbomodule/core (= 0.61.5) + - React-cxxreact (0.61.5): + - boost-for-react-native (= 1.63.0) + - DoubleConversion + - Folly (= 2018.10.22.00) + - glog + - React-jsinspector (= 0.61.5) + - React-jsi (0.61.5): + - boost-for-react-native (= 1.63.0) + - DoubleConversion + - Folly (= 2018.10.22.00) + - glog + - React-jsi/Default (= 0.61.5) + - React-jsi/Default (0.61.5): + - boost-for-react-native (= 1.63.0) + - DoubleConversion + - Folly (= 2018.10.22.00) + - glog + - React-jsiexecutor (0.61.5): + - DoubleConversion + - Folly (= 2018.10.22.00) + - glog + - React-cxxreact (= 0.61.5) + - React-jsi (= 0.61.5) + - React-jsinspector (0.61.5) + - react-native-async-storage (1.2.4): + - React + - react-native-blur (0.8.0): + - React + - react-native-camera (3.23.1): + - React + - react-native-camera/RCT (= 3.23.1) + - react-native-camera/RN (= 3.23.1) + - react-native-camera/RCT (3.23.1): + - React + - react-native-camera/RN (3.23.1): + - React + - react-native-cameraroll (1.4.1): + - React + - react-native-config (0.11.7): + - React + - react-native-creedon-imagepicker (1.3.2): + - FileMD5Hash + - GMImagePicker + - React + - SDAVAssetExportSession + - Toast + - react-native-fast-image (6.0.1): + - React + - SDWebImage (~> 5.0) + - react-native-geocoder (0.5.0): + - React + - react-native-geolocation (1.4.2): + - React + - react-native-image-editor (2.2.0): + - React + - React-RCTImage + - react-native-image-resizer (1.1.0): + - React + - react-native-mixpanel (0.0.6): + - Mixpanel + - React + - react-native-netinfo (4.7.0): + - React + - react-native-nixplay-core (1.1.4): + - AFNetworking + - NixNetwork + - React + - SDAVAssetExportSession + - react-native-randombytes (3.5.3): + - React + - react-native-safe-area (0.5.1): + - React + - react-native-slider (2.0.8): + - React + - react-native-splash-screen (3.2.0): + - React + - react-native-webview (8.1.2): + - React + - React-RCTActionSheet (0.61.5): + - React-Core/RCTActionSheetHeaders (= 0.61.5) + - React-RCTAnimation (0.61.5): + - React-Core/RCTAnimationHeaders (= 0.61.5) + - React-RCTBlob (0.61.5): + - React-Core/RCTBlobHeaders (= 0.61.5) + - React-Core/RCTWebSocket (= 0.61.5) + - React-jsi (= 0.61.5) + - React-RCTNetwork (= 0.61.5) + - React-RCTImage (0.61.5): + - React-Core/RCTImageHeaders (= 0.61.5) + - React-RCTNetwork (= 0.61.5) + - React-RCTLinking (0.61.5): + - React-Core/RCTLinkingHeaders (= 0.61.5) + - React-RCTNetwork (0.61.5): + - React-Core/RCTNetworkHeaders (= 0.61.5) + - React-RCTSettings (0.61.5): + - React-Core/RCTSettingsHeaders (= 0.61.5) + - React-RCTText (0.61.5): + - React-Core/RCTTextHeaders (= 0.61.5) + - React-RCTVibration (0.61.5): + - React-Core/RCTVibrationHeaders (= 0.61.5) + - ReactCommon/jscallinvoker (0.61.5): + - DoubleConversion + - Folly (= 2018.10.22.00) + - glog + - React-cxxreact (= 0.61.5) + - ReactCommon/turbomodule/core (0.61.5): + - DoubleConversion + - Folly (= 2018.10.22.00) + - glog + - React-Core (= 0.61.5) + - React-cxxreact (= 0.61.5) + - React-jsi (= 0.61.5) + - ReactCommon/jscallinvoker (= 0.61.5) + - ReactNativeFabric (0.5.2): + - Crashlytics + - Fabric + - React + - rn-fetch-blob (0.10.16): + - React-Core + - RNBluetoothEscposPrinter (0.0.5): + - React + - RNCPushNotificationIOS (1.0.3): + - React + - RNCViewpager (1.1.7): + - React + - RNDefaultPreference (1.4.1): + - React + - RNDeviceInfo (1.8.0): + - React + - RNFirebase (5.6.0): + - Firebase/Core + - React + - RNFirebase/Crashlytics (= 5.6.0) + - RNFirebase/Crashlytics (5.6.0): + - Crashlytics + - Fabric + - Firebase/Core + - React + - RNFS (2.16.2): + - React + - RNGestureHandler (1.6.0): + - React + - RNKeychain (3.1.3): + - React + - RNLocalize (1.3.1): + - React + - RNOpenAppSettings (1.0.0): + - React + - RNOS (1.2.6): + - React + - RNPermissions (2.0.3): + - React + - RNReactNativeHapticFeedback (1.8.2): + - React + - RNReanimated (1.7.0): + - React + - RNSVG (9.13.6): + - React + - RNVectorIcons (6.6.0): + - React + - SDAVAssetExportSession (0.0.6) + - SDWebImage (5.0.6): + - SDWebImage/Core (= 5.0.6) + - SDWebImage/Core (5.0.6) + - SSZipArchive (2.2.2) + - Toast (4.0.0) + - TPKeyboardAvoiding (1.3.3) + - Underscore.m (0.3.0) + - Yoga (1.14.0) + +DEPENDENCIES: + - AFNetworking + - BVLinearGradient (from `../node_modules/react-native-linear-gradient`) + - Calabash + - CodePush (from `../node_modules/react-native-code-push`) + - Crashlytics (~> 3.12.0) + - DoubleConversion (from `../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec`) + - Fabric (~> 1.9.0) + - FBLazyVector (from `../node_modules/react-native/Libraries/FBLazyVector`) + - FBReactNativeSpec (from `../node_modules/react-native/Libraries/FBReactNativeSpec`) + - FileMD5Hash + - Firebase/Core + - Firebase/Performance (~> 5.20.1) + - Folly (from `../node_modules/react-native/third-party-podspecs/Folly.podspec`) + - glog (from `../node_modules/react-native/third-party-podspecs/glog.podspec`) + - GMImagePicker (from `https://github.com/nixplay/GMImagePicker.git`, tag `0.4.0-dev3`) + - ICGVideoTrimmer (from `https://github.com/nixplay/ICGVideoTrimmer.git`) + - "NixNetwork (from `git@git.nixplay.ninja:mobile/NixNetwork.git`, tag `1.0.2`)" + - Permission-Camera (from `../node_modules/react-native-permissions/ios/Camera.podspec`) + - Permission-Contacts (from `../node_modules/react-native-permissions/ios/Contacts.podspec`) + - Permission-LocationAlways (from `../node_modules/react-native-permissions/ios/LocationAlways.podspec`) + - Permission-LocationWhenInUse (from `../node_modules/react-native-permissions/ios/LocationWhenInUse.podspec`) + - Permission-Microphone (from `../node_modules/react-native-permissions/ios/Microphone.podspec`) + - Permission-Notifications (from `../node_modules/react-native-permissions/ios/Notifications.podspec`) + - Permission-PhotoLibrary (from `../node_modules/react-native-permissions/ios/PhotoLibrary.podspec`) + - RCTRequired (from `../node_modules/react-native/Libraries/RCTRequired`) + - RCTTypeSafety (from `../node_modules/react-native/Libraries/TypeSafety`) + - RCTUserDefaults (from `../node_modules/react-native-user-defaults`) + - React (from `../node_modules/react-native/`) + - React-Core (from `../node_modules/react-native/`) + - React-Core/DevSupport (from `../node_modules/react-native/`) + - React-Core/RCTWebSocket (from `../node_modules/react-native/`) + - React-CoreModules (from `../node_modules/react-native/React/CoreModules`) + - React-cxxreact (from `../node_modules/react-native/ReactCommon/cxxreact`) + - React-jsi (from `../node_modules/react-native/ReactCommon/jsi`) + - React-jsiexecutor (from `../node_modules/react-native/ReactCommon/jsiexecutor`) + - React-jsinspector (from `../node_modules/react-native/ReactCommon/jsinspector`) + - "react-native-async-storage (from `../node_modules/@react-native-community/async-storage`)" + - "react-native-blur (from `../node_modules/@react-native-community/blur`)" + - react-native-camera (from `../node_modules/react-native-camera`) + - "react-native-cameraroll (from `../node_modules/@react-native-community/cameraroll`)" + - react-native-config (from `../node_modules/react-native-config`) + - react-native-creedon-imagepicker (from `../node_modules/react-native-creedon-imagepicker/react-native-creedon-imagepicker.podspec`) + - react-native-fast-image (from `../node_modules/react-native-fast-image`) + - react-native-geocoder (from `../node_modules/react-native-geocoder`) + - "react-native-geolocation (from `../node_modules/@react-native-community/geolocation`)" + - "react-native-image-editor (from `../node_modules/@react-native-community/image-editor`)" + - react-native-image-resizer (from `../node_modules/react-native-image-resizer`) + - react-native-mixpanel (from `../node_modules/react-native-mixpanel`) + - "react-native-netinfo (from `../node_modules/@react-native-community/netinfo`)" + - react-native-nixplay-core (from `../node_modules/react-native-nixplay-core/react-native-nixplay-core.podspec`) + - react-native-randombytes (from `../node_modules/react-native-randombytes`) + - react-native-safe-area (from `../node_modules/react-native-safe-area`) + - "react-native-slider (from `../node_modules/@react-native-community/slider`)" + - react-native-splash-screen (from `../node_modules/react-native-splash-screen`) + - react-native-webview (from `../node_modules/react-native-webview`) + - React-RCTActionSheet (from `../node_modules/react-native/Libraries/ActionSheetIOS`) + - React-RCTAnimation (from `../node_modules/react-native/Libraries/NativeAnimation`) + - React-RCTBlob (from `../node_modules/react-native/Libraries/Blob`) + - React-RCTImage (from `../node_modules/react-native/Libraries/Image`) + - React-RCTLinking (from `../node_modules/react-native/Libraries/LinkingIOS`) + - React-RCTNetwork (from `../node_modules/react-native/Libraries/Network`) + - React-RCTSettings (from `../node_modules/react-native/Libraries/Settings`) + - React-RCTText (from `../node_modules/react-native/Libraries/Text`) + - React-RCTVibration (from `../node_modules/react-native/Libraries/Vibration`) + - ReactCommon/jscallinvoker (from `../node_modules/react-native/ReactCommon`) + - ReactCommon/turbomodule/core (from `../node_modules/react-native/ReactCommon`) + - ReactNativeFabric (from `../node_modules/react-native-fabric`) + - rn-fetch-blob (from `../node_modules/rn-fetch-blob`) + - RNBluetoothEscposPrinter (from `../node_modules/react-native-bluetooth-escpos-printer`) + - "RNCPushNotificationIOS (from `../node_modules/@react-native-community/push-notification-ios`)" + - "RNCViewpager (from `../node_modules/@react-native-community/viewpager`)" + - RNDefaultPreference (from `../node_modules/react-native-default-preference`) + - RNDeviceInfo (from `../node_modules/react-native-device-info`) + - RNFirebase (from `../node_modules/react-native-firebase/ios`) + - RNFS (from `../node_modules/react-native-fs`) + - RNGestureHandler (from `../node_modules/react-native-gesture-handler`) + - RNKeychain (from `../node_modules/react-native-keychain`) + - RNLocalize (from `../node_modules/react-native-localize`) + - RNOpenAppSettings (from `../node_modules/react-native-app-settings`) + - RNOS (from `../node_modules/react-native-os`) + - RNPermissions (from `../node_modules/react-native-permissions`) + - RNReactNativeHapticFeedback (from `../node_modules/react-native-haptic-feedback`) + - RNReanimated (from `../node_modules/react-native-reanimated`) + - RNSVG (from `../node_modules/react-native-svg`) + - RNVectorIcons (from `../node_modules/react-native-vector-icons`) + - SDAVAssetExportSession (from `https://github.com/nixplay/SDAVAssetExportSession.git`, tag `0.0.6`) + - SDWebImage (~> 5.0.0) + - Toast + - TPKeyboardAvoiding (~> 1.3) + - Underscore.m + - Yoga (from `../node_modules/react-native/ReactCommon/yoga`) + +SPEC REPOS: + trunk: + - AFNetworking + - Base64 + - boost-for-react-native + - Calabash + - Crashlytics + - Fabric + - FileMD5Hash + - Firebase + - FirebaseABTesting + - FirebaseAnalytics + - FirebaseCore + - FirebaseInstanceID + - FirebasePerformance + - FirebaseRemoteConfig + - GoogleAppMeasurement + - GoogleToolboxForMac + - GoogleUtilities + - GTMSessionFetcher + - JWT + - Masonry + - Mixpanel + - nanopb + - Protobuf + - SDWebImage + - SSZipArchive + - Toast + - TPKeyboardAvoiding + - Underscore.m + +EXTERNAL SOURCES: + BVLinearGradient: + :path: "../node_modules/react-native-linear-gradient" + CodePush: + :path: "../node_modules/react-native-code-push" + DoubleConversion: + :podspec: "../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec" + FBLazyVector: + :path: "../node_modules/react-native/Libraries/FBLazyVector" + FBReactNativeSpec: + :path: "../node_modules/react-native/Libraries/FBReactNativeSpec" + Folly: + :podspec: "../node_modules/react-native/third-party-podspecs/Folly.podspec" + glog: + :podspec: "../node_modules/react-native/third-party-podspecs/glog.podspec" + GMImagePicker: + :git: https://github.com/nixplay/GMImagePicker.git + :tag: 0.4.0-dev3 + ICGVideoTrimmer: + :git: https://github.com/nixplay/ICGVideoTrimmer.git + NixNetwork: + :git: "git@git.nixplay.ninja:mobile/NixNetwork.git" + :tag: 1.0.2 + Permission-Camera: + :path: "../node_modules/react-native-permissions/ios/Camera.podspec" + Permission-Contacts: + :path: "../node_modules/react-native-permissions/ios/Contacts.podspec" + Permission-LocationAlways: + :path: "../node_modules/react-native-permissions/ios/LocationAlways.podspec" + Permission-LocationWhenInUse: + :path: "../node_modules/react-native-permissions/ios/LocationWhenInUse.podspec" + Permission-Microphone: + :path: "../node_modules/react-native-permissions/ios/Microphone.podspec" + Permission-Notifications: + :path: "../node_modules/react-native-permissions/ios/Notifications.podspec" + Permission-PhotoLibrary: + :path: "../node_modules/react-native-permissions/ios/PhotoLibrary.podspec" + RCTRequired: + :path: "../node_modules/react-native/Libraries/RCTRequired" + RCTTypeSafety: + :path: "../node_modules/react-native/Libraries/TypeSafety" + RCTUserDefaults: + :path: "../node_modules/react-native-user-defaults" + React: + :path: "../node_modules/react-native/" + React-Core: + :path: "../node_modules/react-native/" + React-CoreModules: + :path: "../node_modules/react-native/React/CoreModules" + React-cxxreact: + :path: "../node_modules/react-native/ReactCommon/cxxreact" + React-jsi: + :path: "../node_modules/react-native/ReactCommon/jsi" + React-jsiexecutor: + :path: "../node_modules/react-native/ReactCommon/jsiexecutor" + React-jsinspector: + :path: "../node_modules/react-native/ReactCommon/jsinspector" + react-native-async-storage: + :path: "../node_modules/@react-native-community/async-storage" + react-native-blur: + :path: "../node_modules/@react-native-community/blur" + react-native-camera: + :path: "../node_modules/react-native-camera" + react-native-cameraroll: + :path: "../node_modules/@react-native-community/cameraroll" + react-native-config: + :path: "../node_modules/react-native-config" + react-native-creedon-imagepicker: + :podspec: "../node_modules/react-native-creedon-imagepicker/react-native-creedon-imagepicker.podspec" + react-native-fast-image: + :path: "../node_modules/react-native-fast-image" + react-native-geocoder: + :path: "../node_modules/react-native-geocoder" + react-native-geolocation: + :path: "../node_modules/@react-native-community/geolocation" + react-native-image-editor: + :path: "../node_modules/@react-native-community/image-editor" + react-native-image-resizer: + :path: "../node_modules/react-native-image-resizer" + react-native-mixpanel: + :path: "../node_modules/react-native-mixpanel" + react-native-netinfo: + :path: "../node_modules/@react-native-community/netinfo" + react-native-nixplay-core: + :podspec: "../node_modules/react-native-nixplay-core/react-native-nixplay-core.podspec" + react-native-randombytes: + :path: "../node_modules/react-native-randombytes" + react-native-safe-area: + :path: "../node_modules/react-native-safe-area" + react-native-slider: + :path: "../node_modules/@react-native-community/slider" + react-native-splash-screen: + :path: "../node_modules/react-native-splash-screen" + react-native-webview: + :path: "../node_modules/react-native-webview" + React-RCTActionSheet: + :path: "../node_modules/react-native/Libraries/ActionSheetIOS" + React-RCTAnimation: + :path: "../node_modules/react-native/Libraries/NativeAnimation" + React-RCTBlob: + :path: "../node_modules/react-native/Libraries/Blob" + React-RCTImage: + :path: "../node_modules/react-native/Libraries/Image" + React-RCTLinking: + :path: "../node_modules/react-native/Libraries/LinkingIOS" + React-RCTNetwork: + :path: "../node_modules/react-native/Libraries/Network" + React-RCTSettings: + :path: "../node_modules/react-native/Libraries/Settings" + React-RCTText: + :path: "../node_modules/react-native/Libraries/Text" + React-RCTVibration: + :path: "../node_modules/react-native/Libraries/Vibration" + ReactCommon: + :path: "../node_modules/react-native/ReactCommon" + ReactNativeFabric: + :path: "../node_modules/react-native-fabric" + rn-fetch-blob: + :path: "../node_modules/rn-fetch-blob" + RNBluetoothEscposPrinter: + :path: "../node_modules/react-native-bluetooth-escpos-printer" + RNCPushNotificationIOS: + :path: "../node_modules/@react-native-community/push-notification-ios" + RNCViewpager: + :path: "../node_modules/@react-native-community/viewpager" + RNDefaultPreference: + :path: "../node_modules/react-native-default-preference" + RNDeviceInfo: + :path: "../node_modules/react-native-device-info" + RNFirebase: + :path: "../node_modules/react-native-firebase/ios" + RNFS: + :path: "../node_modules/react-native-fs" + RNGestureHandler: + :path: "../node_modules/react-native-gesture-handler" + RNKeychain: + :path: "../node_modules/react-native-keychain" + RNLocalize: + :path: "../node_modules/react-native-localize" + RNOpenAppSettings: + :path: "../node_modules/react-native-app-settings" + RNOS: + :path: "../node_modules/react-native-os" + RNPermissions: + :path: "../node_modules/react-native-permissions" + RNReactNativeHapticFeedback: + :path: "../node_modules/react-native-haptic-feedback" + RNReanimated: + :path: "../node_modules/react-native-reanimated" + RNSVG: + :path: "../node_modules/react-native-svg" + RNVectorIcons: + :path: "../node_modules/react-native-vector-icons" + SDAVAssetExportSession: + :git: https://github.com/nixplay/SDAVAssetExportSession.git + :tag: 0.0.6 + Yoga: + :path: "../node_modules/react-native/ReactCommon/yoga" + +CHECKOUT OPTIONS: + GMImagePicker: + :git: https://github.com/nixplay/GMImagePicker.git + :tag: 0.4.0-dev3 + ICGVideoTrimmer: + :commit: 2aaff7bf0f36a02e97cf7dbe72c5c70c16a10bdc + :git: https://github.com/nixplay/ICGVideoTrimmer.git + NixNetwork: + :git: "git@git.nixplay.ninja:mobile/NixNetwork.git" + :tag: 1.0.2 + react-native-creedon-imagepicker: + :commit: 9efb08c656240325de9428ac33d0960c01b25f49 + :git: "git@git.nixplay.ninja:mobile/react-native-creedon-imagepicker.git" + react-native-nixplay-core: + :commit: 1996adcd0aeabf7a2e6346ed4e249f2f17e3d392 + :git: "git@git.nixplay.ninja:mobile/react-native-nixplay-core.git" + SDAVAssetExportSession: + :git: https://github.com/nixplay/SDAVAssetExportSession.git + :tag: 0.0.6 + +SPEC CHECKSUMS: + AFNetworking: b6f891fdfaed196b46c7a83cf209e09697b94057 + Base64: cecfb41a004124895a7bcee567a89bae5a89d49b + boost-for-react-native: 39c7adb57c4e60d6c5479dd8623128eb5b3f0f2c + BVLinearGradient: e3aad03778a456d77928f594a649e96995f1c872 + Calabash: 4adc39179eeadb158e83934ec374736d22544f45 + CodePush: 187dbff5571da2045869ef5d342568fb5a13d387 + Crashlytics: 07fb167b1694128c1c9a5a5cc319b0e9c3ca0933 + DoubleConversion: 5805e889d232975c086db112ece9ed034df7a0b2 + Fabric: f988e33c97f08930a413e08123064d2e5f68d655 + FBLazyVector: aaeaf388755e4f29cd74acbc9e3b8da6d807c37f + FBReactNativeSpec: 118d0d177724c2d67f08a59136eb29ef5943ec75 + FileMD5Hash: 3ed69cc19a21ff4d30ae8833fc104275ad2c7de0 + Firebase: 0c8cf33f266410c61ab3e2265cfa412200351d9c + FirebaseABTesting: 1f50b8d50f5e3469eea54e7463a7b7fe221d1f5e + FirebaseAnalytics: ece1aa57a4f43c64d53a648b5a5e05151aae947b + FirebaseCore: f1a9a8be1aee4bf71a2fc0f4096df6788bdfda61 + FirebaseInstanceID: a122b0c258720cf250551bb2bedf48c699f80d90 + FirebasePerformance: 25ecee2a260bcf398d7f32d6f4804438df953100 + FirebaseRemoteConfig: 7e11c65f0769c09bff6947997c209515058c5318 + Folly: 30e7936e1c45c08d884aa59369ed951a8e68cf51 + glog: 1f3da668190260b06b429bb211bfbee5cd790c28 + GMImagePicker: 5deeae8e6a34376849a53064975080e27bf7e449 + GoogleAppMeasurement: ffe513e90551844a739e7bcbb1d2aca1c28a4338 + GoogleToolboxForMac: 800648f8b3127618c1b59c7f97684427630c5ea3 + GoogleUtilities: 04fce34bcd5620c1ee76fb79172105c74a4df335 + GTMSessionFetcher: cea130bbfe5a7edc8d06d3f0d17288c32ffe9925 + ICGVideoTrimmer: eb262e0b39bfc3f885659e6e4be7de1c31731807 + JWT: 9b5c05abbcc1a0e69c3c91e1655b3387fc7e581d + Masonry: 678fab65091a9290e40e2832a55e7ab731aad201 + Mixpanel: 1839fc7299c43b009c301883f895423715437431 + nanopb: 18003b5e52dab79db540fe93fe9579f399bd1ccd + NixNetwork: a85e2f9f7d1ce99c2174d372c4445916f5af9eb0 + Permission-Camera: 019cd09a9b6fa90f7e5b2f7a4a9e32c54027f123 + Permission-Contacts: 72842b61cffd56c22263cdbb9ada000382672f5e + Permission-LocationAlways: b8969e8851952f82e41c536eb9d2737104e102f2 + Permission-LocationWhenInUse: 2d4bac5d1a08ca50c47a848aed9a31fb02e0b614 + Permission-Microphone: 747e8e6364c9fa266f2acf5dd7cebaf0fce2e177 + Permission-Notifications: 2fa276816cb192e6c0f36f258df89ab409c9c291 + Permission-PhotoLibrary: 66ec8a6691421ca9ad4b28cb9213993569d471c8 + Protobuf: dd1aaea7140debfe4dd0683fb8ef208e527ae153 + RCTRequired: b153add4da6e7dbc44aebf93f3cf4fcae392ddf1 + RCTTypeSafety: 9aa1b91d7f9310fc6eadc3cf95126ffe818af320 + RCTUserDefaults: 8f2efda40b40791a54f519cae633ce03046c374b + React: b6a59ef847b2b40bb6e0180a97d0ca716969ac78 + React-Core: 688b451f7d616cc1134ac95295b593d1b5158a04 + React-CoreModules: d04f8494c1a328b69ec11db9d1137d667f916dcb + React-cxxreact: d0f7bcafa196ae410e5300736b424455e7fb7ba7 + React-jsi: cb2cd74d7ccf4cffb071a46833613edc79cdf8f7 + React-jsiexecutor: d5525f9ed5f782fdbacb64b9b01a43a9323d2386 + React-jsinspector: fa0ecc501688c3c4c34f28834a76302233e29dc0 + react-native-async-storage: b1af7d8633ac994da2c5e633cac3ba2dca358156 + react-native-blur: cad4d93b364f91e7b7931b3fa935455487e5c33c + react-native-camera: 6fe72fd0a85732e2449928f9c59a2e0bf661ad3b + react-native-cameraroll: 035c425c733acd3333e6c673db5ab66a559ca2e0 + react-native-config: 55548054279d92e0e4566ea15a8b9b81028ec342 + react-native-creedon-imagepicker: aa518a6871645ad7efce516740ac2d495914ee53 + react-native-fast-image: 3a421727f63d96f766c4b4a2d86fe4987f084c87 + react-native-geocoder: 757427682892bb256f3b3745858cc90eba148a8e + react-native-geolocation: 79c743ad7a2e86617811ef23f49308824e92520c + react-native-image-editor: e52b0c069384c71963c6b5e8a1a4d7f5d7189ac9 + react-native-image-resizer: 9dfb844937574db849fd18a56d8e6c607b0a31d8 + react-native-mixpanel: bdb451e8455940a12fdd157c2146a68c5f80310d + react-native-netinfo: 3dd993921571d01b78a8f91f1caaffcab7a1e1c7 + react-native-nixplay-core: 39f92d6881287bf53d596f5b2a69bc59d4e5b742 + react-native-randombytes: 991545e6eaaf700b4ee384c291ef3d572e0b2ca8 + react-native-safe-area: e8230b0017d76c00de6b01e2412dcf86b127c6a3 + react-native-slider: b2f361499888302147205f17f6fffa921a7bda70 + react-native-splash-screen: 200d11d188e2e78cea3ad319964f6142b6384865 + react-native-webview: 055c7110f17c2f19c971f655064ee480638db668 + React-RCTActionSheet: 600b4d10e3aea0913b5a92256d2719c0cdd26d76 + React-RCTAnimation: 791a87558389c80908ed06cc5dfc5e7920dfa360 + React-RCTBlob: d89293cc0236d9cb0933d85e430b0bbe81ad1d72 + React-RCTImage: 6b8e8df449eb7c814c99a92d6b52de6fe39dea4e + React-RCTLinking: 121bb231c7503cf9094f4d8461b96a130fabf4a5 + React-RCTNetwork: fb353640aafcee84ca8b78957297bd395f065c9a + React-RCTSettings: 8db258ea2a5efee381fcf7a6d5044e2f8b68b640 + React-RCTText: 9ccc88273e9a3aacff5094d2175a605efa854dbe + React-RCTVibration: a49a1f42bf8f5acf1c3e297097517c6b3af377ad + ReactCommon: 198c7c8d3591f975e5431bec1b0b3b581aa1c5dd + ReactNativeFabric: d05320ff347d5c72567c115b97edeead111ac4d2 + rn-fetch-blob: 651b8d076b43d0d7aa294a3d9ec16c00aab8bef9 + RNBluetoothEscposPrinter: a16afa2948dd2649beb151b239c62683e07df1be + RNCPushNotificationIOS: 5403d137a49c55f0dc2273be8473873e934359cd + RNCViewpager: eff3ba6712d3aff9ea779ef1c99f78aa7cd36771 + RNDefaultPreference: 12d246dd2222e66dadcd76cc1250560663befc3a + RNDeviceInfo: 17bd6ed6c8c230f5da87d53f6275a520005f0914 + RNFirebase: 37daa9a346d070f9f6ee1f3b4aaf4c8e3b1d5d1c + RNFS: 0d4191b1052bef9ce70deff00a5b4169c62bbd9b + RNGestureHandler: dde546180bf24af0b5f737c8ad04b6f3fa51609a + RNKeychain: c658833a9cb2cbcba6423bdd6e16cce59e27da0e + RNLocalize: c117094a6c5a955c94e65520ad4c726e3a0f4ed6 + RNOpenAppSettings: 1169b90a275e9e18c5973e1608949f97d426e7f3 + RNOS: 6f2f9a70895bbbfbdad7196abd952e7b01d45027 + RNPermissions: 332fd0d0c33ba71d83a22f584fce7b2270488ae0 + RNReactNativeHapticFeedback: e11a4da0ce174e9f88b03cbaf5d76d94633cdee2 + RNReanimated: 031fe8d9ea93c2bd689a40f05320ef9d96f74d7f + RNSVG: 8ba35cbeb385a52fd960fd28db9d7d18b4c2974f + RNVectorIcons: 0bb4def82230be1333ddaeee9fcba45f0b288ed4 + SDAVAssetExportSession: 7a5743ed99d3b8c85fd189fb2a432f519170f743 + SDWebImage: 920f1a2ff1ca8296ad34f6e0510a1ef1d70ac965 + SSZipArchive: fa16b8cc4cdeceb698e5e5d9f67e9558532fbf23 + Toast: 91b396c56ee72a5790816f40d3a94dd357abc196 + TPKeyboardAvoiding: 6dd3fe3268b8f2627beb7ff3d82a3cacbdf66a36 + Underscore.m: dc9ca06fe2c9a79d01ce20c3d2c1e8f91f2d92dc + Yoga: f2a7cd4280bfe2cca5a7aed98ba0eb3d1310f18b + +PODFILE CHECKSUM: 43adc3310124ae6b3e1916d354794ab2b9388976 + +COCOAPODS: 1.8.3 diff --git a/ioneapps-maagapp-ee31119a522d/ios/TestFlight.Podfile b/ioneapps-maagapp-ee31119a522d/ios/TestFlight.Podfile new file mode 100644 index 0000000..0ce5f7f --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/ios/TestFlight.Podfile @@ -0,0 +1,131 @@ +# My other pods +platform:ios, '9.0' +def common_pods + pod 'SDAVAssetExportSession', :git => 'https://github.com/nixplay/SDAVAssetExportSession.git' + pod 'FileMD5Hash' + pod 'AFNetworking' + pod 'NixNetwork', :git => 'git@git.nixplay.ninja:mobile/NixNetwork.git', :tag => '1.0.1' +end + +def basic_pods + # Your 'node_modules' directory is probably in the root of your project, + # but if not, adjust the `:path` accordingly + pod 'React', :path => '../node_modules/react-native', :subspecs => [ + 'Core', + 'CxxBridge', # Include this for RN >= 0.47 + 'DevSupport', # Include this to enable In - App Devmenu if RN >= 0.43 + 'RCTImage', + 'RCTText', + 'RCTNetwork', + 'RCTWebSocket', # Needed for debugging + 'RCTAnimation', # Needed for FlatList and animations running on native UI thread + # Add any other subspecs you want to use in your project + ] + # Explicitly include Yoga if you are using RN >= 0.42.0 + pod 'yoga', :path => '../node_modules/react-native/ReactCommon/yoga' + + # Third party deps podspec link + pod 'DoubleConversion', :podspec => '../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec' + pod 'glog', :podspec => '../node_modules/react-native/third-party-podspecs/glog.podspec' + pod 'Folly', :podspec => '../node_modules/react-native/third-party-podspecs/Folly.podspec' + + pod 'Fabric', '~> 1.9.0' + pod 'Crashlytics', '~> 3.12.0' + pod 'GoogleSignIn' + pod 'GMImagePicker', :git => 'https://github.com/nixplay/GMImagePicker.git', :tag => '0.3.11' + pod 'ICGVideoTrimmer', :git => 'https://github.com/nixplay/ICGVideoTrimmer.git' + pod 'CodePush', :path => '../node_modules/react-native-code-push' + pod 'RNDefaultPreference', :path => '../node_modules/react-native-default-preference' + pod 'RCTUserDefaults', :path => '../node_modules/react-native-user-defaults' + pod 'Firebase/Core', '~> 5.20.1' + pod 'Firebase/Performance', '~> 5.20.1' + pod 'Intercom' + pod 'ReactNativeFabric', :path => '../node_modules/react-native-fabric' + pod 'react-native-intercom', :path => '../node_modules/react-native-intercom' + pod 'react-native-webview', :path => '../node_modules/react-native-webview' + pod 'react-native-video', :path => '../node_modules/react-native-video' + pod 'RNGestureHandler', :path => '../node_modules/react-native-gesture-handler' + pod 'react-native-slider', :path => '../node_modules/@react-native-community/slider' + pod 'react-native-async-storage', :path => '../node_modules/@react-native-community/async-storage' + pod 'RNDeviceInfo', :path => '../node_modules/react-native-device-info' + pod 'RNLocalize', :path => '../node_modules/react-native-localize' + pod 'react-native-netinfo', :path => '../node_modules/@react-native-community/netinfo' + pod 'RNSVG', :path => '../node_modules/react-native-svg/' + pod 'react-native-fast-image', :path => '../node_modules/react-native-fast-image/' + pod 'react-native-blur', :path => '../node_modules/@react-native-community/blur' + pod 'react-native-creedon-imagepicker', :path => '../node_modules/react-native-creedon-imagepicker/' + pod 'Toast' + common_pods +end + +def appex_pods + pod 'SDWebImage', '~> 5.0.0' + common_pods +end + +target 'Nixplay' do + # Uncomment the next line if you're using Swift or would like to use dynamic frameworks + # use_frameworks! + # Pods for Nixplay + basic_pods + target 'NixplayTests' do + inherit! :search_paths + # Pods for testing + end +end + + +target 'NixplayRnd' do +# pod 'Calabash' + basic_pods +end +target 'NixplayAlpha' do + basic_pods +end +target 'NixplayBeta' do + basic_pods +end +target 'NixplayQa' do +# pod 'Calabash' + basic_pods +end + +target 'NixplayProd' do + basic_pods +end + +target 'NixShareExtensionRnd' do + appex_pods +end +target 'NixShareExtensionAlpha' do + appex_pods +end +target 'NixShareExtensionBeta' do + appex_pods +end +target 'NixShareExtensionQa' do + appex_pods +end +target 'NixShareExtension' do + appex_pods +end + +target 'Nixplay-tvOS' do + # Uncomment the next line if you're using Swift or would like to use dynamic frameworks + # use_frameworks! + + # Pods for Nixplay-tvOS + + target 'Nixplay-tvOSTests' do + inherit! :search_paths + # Pods for testing + end +end + +post_install do | installer | + installer.pods_project.targets.each do | target | + if target.name == "React" + target.remove_from_project + end + end +end diff --git a/ioneapps-maagapp-ee31119a522d/ios/assets/src/images/about/icon-happy.png b/ioneapps-maagapp-ee31119a522d/ios/assets/src/images/about/icon-happy.png new file mode 100644 index 0000000..2f8f892 Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/ios/assets/src/images/about/icon-happy.png differ diff --git a/ioneapps-maagapp-ee31119a522d/ios/assets/src/images/albums/add.png b/ioneapps-maagapp-ee31119a522d/ios/assets/src/images/albums/add.png new file mode 100644 index 0000000..2aaf860 Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/ios/assets/src/images/albums/add.png differ diff --git a/ioneapps-maagapp-ee31119a522d/ios/assets/src/images/albums/arrow-down.png b/ioneapps-maagapp-ee31119a522d/ios/assets/src/images/albums/arrow-down.png new file mode 100644 index 0000000..480db60 Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/ios/assets/src/images/albums/arrow-down.png differ diff --git a/ioneapps-maagapp-ee31119a522d/ios/assets/src/images/albums/empty.png b/ioneapps-maagapp-ee31119a522d/ios/assets/src/images/albums/empty.png new file mode 100644 index 0000000..baadb4c Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/ios/assets/src/images/albums/empty.png differ diff --git a/ioneapps-maagapp-ee31119a522d/ios/assets/src/images/albums/icon-dropbox.png b/ioneapps-maagapp-ee31119a522d/ios/assets/src/images/albums/icon-dropbox.png new file mode 100644 index 0000000..0257267 Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/ios/assets/src/images/albums/icon-dropbox.png differ diff --git a/ioneapps-maagapp-ee31119a522d/ios/assets/src/images/frames/edge-08-black.png b/ioneapps-maagapp-ee31119a522d/ios/assets/src/images/frames/edge-08-black.png new file mode 100644 index 0000000..b9bd1a1 Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/ios/assets/src/images/frames/edge-08-black.png differ diff --git a/ioneapps-maagapp-ee31119a522d/ios/assets/src/images/frames/edge-13-black.png b/ioneapps-maagapp-ee31119a522d/ios/assets/src/images/frames/edge-13-black.png new file mode 100644 index 0000000..4e239bd Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/ios/assets/src/images/frames/edge-13-black.png differ diff --git a/ioneapps-maagapp-ee31119a522d/ios/assets/src/images/frames/iris-08-burnished-bronze.png b/ioneapps-maagapp-ee31119a522d/ios/assets/src/images/frames/iris-08-burnished-bronze.png new file mode 100644 index 0000000..3935685 Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/ios/assets/src/images/frames/iris-08-burnished-bronze.png differ diff --git a/ioneapps-maagapp-ee31119a522d/ios/assets/src/images/frames/iris-08-peach-copper.png b/ioneapps-maagapp-ee31119a522d/ios/assets/src/images/frames/iris-08-peach-copper.png new file mode 100644 index 0000000..a46e63c Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/ios/assets/src/images/frames/iris-08-peach-copper.png differ diff --git a/ioneapps-maagapp-ee31119a522d/ios/assets/src/images/frames/iris-08-silver.png b/ioneapps-maagapp-ee31119a522d/ios/assets/src/images/frames/iris-08-silver.png new file mode 100644 index 0000000..0246fd1 Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/ios/assets/src/images/frames/iris-08-silver.png differ diff --git a/ioneapps-maagapp-ee31119a522d/ios/assets/src/images/frames/original-08-black.png b/ioneapps-maagapp-ee31119a522d/ios/assets/src/images/frames/original-08-black.png new file mode 100644 index 0000000..42c5a09 Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/ios/assets/src/images/frames/original-08-black.png differ diff --git a/ioneapps-maagapp-ee31119a522d/ios/assets/src/images/frames/original-12-black.png b/ioneapps-maagapp-ee31119a522d/ios/assets/src/images/frames/original-12-black.png new file mode 100644 index 0000000..88bd3b2 Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/ios/assets/src/images/frames/original-12-black.png differ diff --git a/ioneapps-maagapp-ee31119a522d/ios/assets/src/images/frames/original-15-black.png b/ioneapps-maagapp-ee31119a522d/ios/assets/src/images/frames/original-15-black.png new file mode 100644 index 0000000..183af4d Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/ios/assets/src/images/frames/original-15-black.png differ diff --git a/ioneapps-maagapp-ee31119a522d/ios/assets/src/images/frames/original-18-black.png b/ioneapps-maagapp-ee31119a522d/ios/assets/src/images/frames/original-18-black.png new file mode 100644 index 0000000..39efe50 Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/ios/assets/src/images/frames/original-18-black.png differ diff --git a/ioneapps-maagapp-ee31119a522d/ios/assets/src/images/frames/seed-07-black.png b/ioneapps-maagapp-ee31119a522d/ios/assets/src/images/frames/seed-07-black.png new file mode 100644 index 0000000..f0be9a4 Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/ios/assets/src/images/frames/seed-07-black.png differ diff --git a/ioneapps-maagapp-ee31119a522d/ios/assets/src/images/frames/seed-07-blue.png b/ioneapps-maagapp-ee31119a522d/ios/assets/src/images/frames/seed-07-blue.png new file mode 100644 index 0000000..76146ec Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/ios/assets/src/images/frames/seed-07-blue.png differ diff --git a/ioneapps-maagapp-ee31119a522d/ios/assets/src/images/frames/seed-07-mango.png b/ioneapps-maagapp-ee31119a522d/ios/assets/src/images/frames/seed-07-mango.png new file mode 100644 index 0000000..baf1220 Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/ios/assets/src/images/frames/seed-07-mango.png differ diff --git a/ioneapps-maagapp-ee31119a522d/ios/assets/src/images/frames/seed-07-mulberry.png b/ioneapps-maagapp-ee31119a522d/ios/assets/src/images/frames/seed-07-mulberry.png new file mode 100644 index 0000000..37f828f Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/ios/assets/src/images/frames/seed-07-mulberry.png differ diff --git a/ioneapps-maagapp-ee31119a522d/ios/assets/src/images/frames/seed-08-black.png b/ioneapps-maagapp-ee31119a522d/ios/assets/src/images/frames/seed-08-black.png new file mode 100644 index 0000000..351a988 Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/ios/assets/src/images/frames/seed-08-black.png differ diff --git a/ioneapps-maagapp-ee31119a522d/ios/assets/src/images/frames/seed-08-blue.png b/ioneapps-maagapp-ee31119a522d/ios/assets/src/images/frames/seed-08-blue.png new file mode 100644 index 0000000..72b10f8 Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/ios/assets/src/images/frames/seed-08-blue.png differ diff --git a/ioneapps-maagapp-ee31119a522d/ios/assets/src/images/frames/seed-08-mango.png b/ioneapps-maagapp-ee31119a522d/ios/assets/src/images/frames/seed-08-mango.png new file mode 100644 index 0000000..a94e2aa Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/ios/assets/src/images/frames/seed-08-mango.png differ diff --git a/ioneapps-maagapp-ee31119a522d/ios/assets/src/images/frames/seed-08-mulberry.png b/ioneapps-maagapp-ee31119a522d/ios/assets/src/images/frames/seed-08-mulberry.png new file mode 100644 index 0000000..f3fea83 Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/ios/assets/src/images/frames/seed-08-mulberry.png differ diff --git a/ioneapps-maagapp-ee31119a522d/ios/assets/src/images/frames/seed-10-black.png b/ioneapps-maagapp-ee31119a522d/ios/assets/src/images/frames/seed-10-black.png new file mode 100644 index 0000000..ec87bdf Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/ios/assets/src/images/frames/seed-10-black.png differ diff --git a/ioneapps-maagapp-ee31119a522d/ios/assets/src/images/frames/seed-10-blue.png b/ioneapps-maagapp-ee31119a522d/ios/assets/src/images/frames/seed-10-blue.png new file mode 100644 index 0000000..281b220 Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/ios/assets/src/images/frames/seed-10-blue.png differ diff --git a/ioneapps-maagapp-ee31119a522d/ios/assets/src/images/frames/seed-10-mango.png b/ioneapps-maagapp-ee31119a522d/ios/assets/src/images/frames/seed-10-mango.png new file mode 100644 index 0000000..9f72958 Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/ios/assets/src/images/frames/seed-10-mango.png differ diff --git a/ioneapps-maagapp-ee31119a522d/ios/assets/src/images/frames/seed-10-mulberry.png b/ioneapps-maagapp-ee31119a522d/ios/assets/src/images/frames/seed-10-mulberry.png new file mode 100644 index 0000000..b173ff4 Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/ios/assets/src/images/frames/seed-10-mulberry.png differ diff --git a/ioneapps-maagapp-ee31119a522d/ios/assets/src/images/frames/seed-10-white.png b/ioneapps-maagapp-ee31119a522d/ios/assets/src/images/frames/seed-10-white.png new file mode 100644 index 0000000..3705de3 Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/ios/assets/src/images/frames/seed-10-white.png differ diff --git a/ioneapps-maagapp-ee31119a522d/ios/assets/src/images/general/logo-black.png b/ioneapps-maagapp-ee31119a522d/ios/assets/src/images/general/logo-black.png new file mode 100644 index 0000000..a93d9a7 Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/ios/assets/src/images/general/logo-black.png differ diff --git a/ioneapps-maagapp-ee31119a522d/ios/assets/src/images/general/logo-black@2x.png b/ioneapps-maagapp-ee31119a522d/ios/assets/src/images/general/logo-black@2x.png new file mode 100644 index 0000000..330c552 Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/ios/assets/src/images/general/logo-black@2x.png differ diff --git a/ioneapps-maagapp-ee31119a522d/ios/assets/src/images/general/logo-black@3x.png b/ioneapps-maagapp-ee31119a522d/ios/assets/src/images/general/logo-black@3x.png new file mode 100644 index 0000000..5d6d36c Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/ios/assets/src/images/general/logo-black@3x.png differ diff --git a/ioneapps-maagapp-ee31119a522d/ios/assets/src/images/general/logo-color.png b/ioneapps-maagapp-ee31119a522d/ios/assets/src/images/general/logo-color.png new file mode 100644 index 0000000..10812aa Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/ios/assets/src/images/general/logo-color.png differ diff --git a/ioneapps-maagapp-ee31119a522d/ios/assets/src/images/general/logo-color@2x.png b/ioneapps-maagapp-ee31119a522d/ios/assets/src/images/general/logo-color@2x.png new file mode 100644 index 0000000..e91c7f7 Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/ios/assets/src/images/general/logo-color@2x.png differ diff --git a/ioneapps-maagapp-ee31119a522d/ios/assets/src/images/general/logo-color@3x.png b/ioneapps-maagapp-ee31119a522d/ios/assets/src/images/general/logo-color@3x.png new file mode 100644 index 0000000..93acfce Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/ios/assets/src/images/general/logo-color@3x.png differ diff --git a/ioneapps-maagapp-ee31119a522d/ios/assets/src/images/general/logo-white.png b/ioneapps-maagapp-ee31119a522d/ios/assets/src/images/general/logo-white.png new file mode 100644 index 0000000..3317cf6 Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/ios/assets/src/images/general/logo-white.png differ diff --git a/ioneapps-maagapp-ee31119a522d/ios/assets/src/images/general/logo-white@2x.png b/ioneapps-maagapp-ee31119a522d/ios/assets/src/images/general/logo-white@2x.png new file mode 100644 index 0000000..a74f72b Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/ios/assets/src/images/general/logo-white@2x.png differ diff --git a/ioneapps-maagapp-ee31119a522d/ios/assets/src/images/general/logo-white@3x.png b/ioneapps-maagapp-ee31119a522d/ios/assets/src/images/general/logo-white@3x.png new file mode 100644 index 0000000..b677680 Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/ios/assets/src/images/general/logo-white@3x.png differ diff --git a/ioneapps-maagapp-ee31119a522d/ios/assets/src/images/home/camera.png b/ioneapps-maagapp-ee31119a522d/ios/assets/src/images/home/camera.png new file mode 100644 index 0000000..57bec5c Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/ios/assets/src/images/home/camera.png differ diff --git a/ioneapps-maagapp-ee31119a522d/ios/assets/src/images/home/my-frames.png b/ioneapps-maagapp-ee31119a522d/ios/assets/src/images/home/my-frames.png new file mode 100644 index 0000000..b618ac6 Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/ios/assets/src/images/home/my-frames.png differ diff --git a/ioneapps-maagapp-ee31119a522d/ios/assets/src/images/home/my-photos.png b/ioneapps-maagapp-ee31119a522d/ios/assets/src/images/home/my-photos.png new file mode 100644 index 0000000..ef8f30b Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/ios/assets/src/images/home/my-photos.png differ diff --git a/ioneapps-maagapp-ee31119a522d/ios/assets/src/images/home/photolibrary.png b/ioneapps-maagapp-ee31119a522d/ios/assets/src/images/home/photolibrary.png new file mode 100644 index 0000000..d68a2d2 Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/ios/assets/src/images/home/photolibrary.png differ diff --git a/ioneapps-maagapp-ee31119a522d/ios/assets/src/images/home/send-photos.png b/ioneapps-maagapp-ee31119a522d/ios/assets/src/images/home/send-photos.png new file mode 100644 index 0000000..2779c7a Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/ios/assets/src/images/home/send-photos.png differ diff --git a/ioneapps-maagapp-ee31119a522d/ios/assets/src/images/onboarding/background-5.jpg b/ioneapps-maagapp-ee31119a522d/ios/assets/src/images/onboarding/background-5.jpg new file mode 100644 index 0000000..b404553 Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/ios/assets/src/images/onboarding/background-5.jpg differ diff --git a/ioneapps-maagapp-ee31119a522d/ios/assets/src/images/photos/404.png b/ioneapps-maagapp-ee31119a522d/ios/assets/src/images/photos/404.png new file mode 100644 index 0000000..f2f9c8d Binary files /dev/null and b/ioneapps-maagapp-ee31119a522d/ios/assets/src/images/photos/404.png differ diff --git a/ioneapps-maagapp-ee31119a522d/metro.config.js b/ioneapps-maagapp-ee31119a522d/metro.config.js new file mode 100644 index 0000000..0050f63 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/metro.config.js @@ -0,0 +1,24 @@ +/** + * Metro configuration for React Native + * https://github.com/facebook/react-native + * + * @format + */ + + +const { getDefaultConfig } = require('metro-config'); + +module.exports = (async () => { + const { + resolver: { sourceExts, assetExts }, + } = await getDefaultConfig(); + return { + transformer: { + babelTransformerPath: require.resolve('react-native-svg-transformer'), + }, + resolver: { + assetExts: assetExts.filter(ext => ext !== 'svg'), + sourceExts: [...sourceExts, 'svg'], + }, + }; +})(); diff --git a/ioneapps-maagapp-ee31119a522d/package-lock.json b/ioneapps-maagapp-ee31119a522d/package-lock.json new file mode 100644 index 0000000..c96a8a7 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/package-lock.json @@ -0,0 +1,19078 @@ +{ + "name": "MAAGApp", + "version": "0.0.1", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@apollo/react-common": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@apollo/react-common/-/react-common-3.1.4.tgz", + "integrity": "sha512-X5Kyro73bthWSCBJUC5XYQqMnG0dLWuDZmVkzog9dynovhfiVCV4kPSdgSIkqnb++cwCzOVuQ4rDKVwo2XRzQA==", + "requires": { + "ts-invariant": "^0.4.4", + "tslib": "^1.10.0" + } + }, + "@apollo/react-components": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/@apollo/react-components/-/react-components-3.1.5.tgz", + "integrity": "sha512-c82VyUuE9VBnJB7bnX+3dmwpIPMhyjMwyoSLyQWPHxz8jK4ak30XszJtqFf4eC4hwvvLYa+Ou6X73Q8V8e2/jg==", + "requires": { + "@apollo/react-common": "^3.1.4", + "@apollo/react-hooks": "^3.1.5", + "prop-types": "^15.7.2", + "ts-invariant": "^0.4.4", + "tslib": "^1.10.0" + } + }, + "@apollo/react-hoc": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/@apollo/react-hoc/-/react-hoc-3.1.5.tgz", + "integrity": "sha512-jlZ2pvEnRevLa54H563BU0/xrYSgWQ72GksarxUzCHQW85nmn9wQln0kLBX7Ua7SBt9WgiuYQXQVechaaCulfQ==", + "requires": { + "@apollo/react-common": "^3.1.4", + "@apollo/react-components": "^3.1.5", + "hoist-non-react-statics": "^3.3.0", + "ts-invariant": "^0.4.4", + "tslib": "^1.10.0" + } + }, + "@apollo/react-hooks": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/@apollo/react-hooks/-/react-hooks-3.1.5.tgz", + "integrity": "sha512-y0CJ393DLxIIkksRup4nt+vSjxalbZBXnnXxYbviq/woj+zKa431zy0yT4LqyRKpFy9ahMIwxBnBwfwIoupqLQ==", + "requires": { + "@apollo/react-common": "^3.1.4", + "@wry/equality": "^0.1.9", + "ts-invariant": "^0.4.4", + "tslib": "^1.10.0" + } + }, + "@apollo/react-ssr": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/@apollo/react-ssr/-/react-ssr-3.1.5.tgz", + "integrity": "sha512-wuLPkKlctNn3u8EU8rlECyktpOUCeekFfb0KhIKknpGY6Lza2Qu0bThx7D9MIbVEzhKadNNrzLcpk0Y8/5UuWg==", + "requires": { + "@apollo/react-common": "^3.1.4", + "@apollo/react-hooks": "^3.1.5", + "tslib": "^1.10.0" + } + }, + "@babel/code-frame": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz", + "integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==", + "requires": { + "@babel/highlight": "^7.0.0" + } + }, + "@babel/core": { + "version": "7.7.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.7.7.tgz", + "integrity": "sha512-jlSjuj/7z138NLZALxVgrx13AOtqip42ATZP7+kYl53GvDV6+4dCek1mVUo8z8c8Xnw/mx2q3d9HWh3griuesQ==", + "requires": { + "@babel/code-frame": "^7.5.5", + "@babel/generator": "^7.7.7", + "@babel/helpers": "^7.7.4", + "@babel/parser": "^7.7.7", + "@babel/template": "^7.7.4", + "@babel/traverse": "^7.7.4", + "@babel/types": "^7.7.4", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "json5": "^2.1.0", + "lodash": "^4.17.13", + "resolve": "^1.3.2", + "semver": "^5.4.1", + "source-map": "^0.5.0" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "@babel/generator": { + "version": "7.7.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.7.7.tgz", + "integrity": "sha512-/AOIBpHh/JU1l0ZFS4kiRCBnLi6OTHzh0RPk3h9isBxkkqELtQNFi1Vr/tiG9p1yfoUdKVwISuXWQR+hwwM4VQ==", + "requires": { + "@babel/types": "^7.7.4", + "jsesc": "^2.5.1", + "lodash": "^4.17.13", + "source-map": "^0.5.0" + } + }, + "@babel/helper-annotate-as-pure": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.7.4.tgz", + "integrity": "sha512-2BQmQgECKzYKFPpiycoF9tlb5HA4lrVyAmLLVK177EcQAqjVLciUb2/R+n1boQ9y5ENV3uz2ZqiNw7QMBBw1Og==", + "requires": { + "@babel/types": "^7.7.4" + } + }, + "@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.7.4.tgz", + "integrity": "sha512-Biq/d/WtvfftWZ9Uf39hbPBYDUo986m5Bb4zhkeYDGUllF43D+nUe5M6Vuo6/8JDK/0YX/uBdeoQpyaNhNugZQ==", + "requires": { + "@babel/helper-explode-assignable-expression": "^7.7.4", + "@babel/types": "^7.7.4" + } + }, + "@babel/helper-builder-react-jsx": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.7.4.tgz", + "integrity": "sha512-kvbfHJNN9dg4rkEM4xn1s8d1/h6TYNvajy9L1wx4qLn9HFg0IkTsQi4rfBe92nxrPUFcMsHoMV+8rU7MJb3fCA==", + "requires": { + "@babel/types": "^7.7.4", + "esutils": "^2.0.0" + } + }, + "@babel/helper-call-delegate": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/helper-call-delegate/-/helper-call-delegate-7.7.4.tgz", + "integrity": "sha512-8JH9/B7J7tCYJ2PpWVpw9JhPuEVHztagNVuQAFBVFYluRMlpG7F1CgKEgGeL6KFqcsIa92ZYVj6DSc0XwmN1ZA==", + "requires": { + "@babel/helper-hoist-variables": "^7.7.4", + "@babel/traverse": "^7.7.4", + "@babel/types": "^7.7.4" + } + }, + "@babel/helper-create-class-features-plugin": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.7.4.tgz", + "integrity": "sha512-l+OnKACG4uiDHQ/aJT8dwpR+LhCJALxL0mJ6nzjB25e5IPwqV1VOsY7ah6UB1DG+VOXAIMtuC54rFJGiHkxjgA==", + "requires": { + "@babel/helper-function-name": "^7.7.4", + "@babel/helper-member-expression-to-functions": "^7.7.4", + "@babel/helper-optimise-call-expression": "^7.7.4", + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-replace-supers": "^7.7.4", + "@babel/helper-split-export-declaration": "^7.7.4" + } + }, + "@babel/helper-create-regexp-features-plugin": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.7.4.tgz", + "integrity": "sha512-Mt+jBKaxL0zfOIWrfQpnfYCN7/rS6GKx6CCCfuoqVVd+17R8zNDlzVYmIi9qyb2wOk002NsmSTDymkIygDUH7A==", + "requires": { + "@babel/helper-regex": "^7.4.4", + "regexpu-core": "^4.6.0" + } + }, + "@babel/helper-define-map": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.7.4.tgz", + "integrity": "sha512-v5LorqOa0nVQUvAUTUF3KPastvUt/HzByXNamKQ6RdJRTV7j8rLL+WB5C/MzzWAwOomxDhYFb1wLLxHqox86lg==", + "requires": { + "@babel/helper-function-name": "^7.7.4", + "@babel/types": "^7.7.4", + "lodash": "^4.17.13" + } + }, + "@babel/helper-explode-assignable-expression": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.7.4.tgz", + "integrity": "sha512-2/SicuFrNSXsZNBxe5UGdLr+HZg+raWBLE9vC98bdYOKX/U6PY0mdGlYUJdtTDPSU0Lw0PNbKKDpwYHJLn2jLg==", + "requires": { + "@babel/traverse": "^7.7.4", + "@babel/types": "^7.7.4" + } + }, + "@babel/helper-function-name": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.7.4.tgz", + "integrity": "sha512-AnkGIdiBhEuiwdoMnKm7jfPfqItZhgRaZfMg1XX3bS25INOnLPjPG1Ppnajh8eqgt5kPJnfqrRHqFqmjKDZLzQ==", + "requires": { + "@babel/helper-get-function-arity": "^7.7.4", + "@babel/template": "^7.7.4", + "@babel/types": "^7.7.4" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.7.4.tgz", + "integrity": "sha512-QTGKEdCkjgzgfJ3bAyRwF4yyT3pg+vDgan8DSivq1eS0gwi+KGKE5x8kRcbeFTb/673mkO5SN1IZfmCfA5o+EA==", + "requires": { + "@babel/types": "^7.7.4" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.7.4.tgz", + "integrity": "sha512-wQC4xyvc1Jo/FnLirL6CEgPgPCa8M74tOdjWpRhQYapz5JC7u3NYU1zCVoVAGCE3EaIP9T1A3iW0WLJ+reZlpQ==", + "requires": { + "@babel/types": "^7.7.4" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.7.4.tgz", + "integrity": "sha512-9KcA1X2E3OjXl/ykfMMInBK+uVdfIVakVe7W7Lg3wfXUNyS3Q1HWLFRwZIjhqiCGbslummPDnmb7vIekS0C1vw==", + "requires": { + "@babel/types": "^7.7.4" + } + }, + "@babel/helper-module-imports": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.7.4.tgz", + "integrity": "sha512-dGcrX6K9l8258WFjyDLJwuVKxR4XZfU0/vTUgOQYWEnRD8mgr+p4d6fCUMq/ys0h4CCt/S5JhbvtyErjWouAUQ==", + "requires": { + "@babel/types": "^7.7.4" + } + }, + "@babel/helper-module-transforms": { + "version": "7.7.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.7.5.tgz", + "integrity": "sha512-A7pSxyJf1gN5qXVcidwLWydjftUN878VkalhXX5iQDuGyiGK3sOrrKKHF4/A4fwHtnsotv/NipwAeLzY4KQPvw==", + "requires": { + "@babel/helper-module-imports": "^7.7.4", + "@babel/helper-simple-access": "^7.7.4", + "@babel/helper-split-export-declaration": "^7.7.4", + "@babel/template": "^7.7.4", + "@babel/types": "^7.7.4", + "lodash": "^4.17.13" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.7.4.tgz", + "integrity": "sha512-VB7gWZ2fDkSuqW6b1AKXkJWO5NyNI3bFL/kK79/30moK57blr6NbH8xcl2XcKCwOmJosftWunZqfO84IGq3ZZg==", + "requires": { + "@babel/types": "^7.7.4" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz", + "integrity": "sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA==" + }, + "@babel/helper-regex": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.5.5.tgz", + "integrity": "sha512-CkCYQLkfkiugbRDO8eZn6lRuR8kzZoGXCg3149iTk5se7g6qykSpy3+hELSwquhu+TgHn8nkLiBwHvNX8Hofcw==", + "requires": { + "lodash": "^4.17.13" + } + }, + "@babel/helper-remap-async-to-generator": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.7.4.tgz", + "integrity": "sha512-Sk4xmtVdM9sA/jCI80f+KS+Md+ZHIpjuqmYPk1M7F/upHou5e4ReYmExAiu6PVe65BhJPZA2CY9x9k4BqE5klw==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.7.4", + "@babel/helper-wrap-function": "^7.7.4", + "@babel/template": "^7.7.4", + "@babel/traverse": "^7.7.4", + "@babel/types": "^7.7.4" + } + }, + "@babel/helper-replace-supers": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.7.4.tgz", + "integrity": "sha512-pP0tfgg9hsZWo5ZboYGuBn/bbYT/hdLPVSS4NMmiRJdwWhP0IznPwN9AE1JwyGsjSPLC364I0Qh5p+EPkGPNpg==", + "requires": { + "@babel/helper-member-expression-to-functions": "^7.7.4", + "@babel/helper-optimise-call-expression": "^7.7.4", + "@babel/traverse": "^7.7.4", + "@babel/types": "^7.7.4" + } + }, + "@babel/helper-simple-access": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.7.4.tgz", + "integrity": "sha512-zK7THeEXfan7UlWsG2A6CI/L9jVnI5+xxKZOdej39Y0YtDYKx9raHk5F2EtK9K8DHRTihYwg20ADt9S36GR78A==", + "requires": { + "@babel/template": "^7.7.4", + "@babel/types": "^7.7.4" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.7.4.tgz", + "integrity": "sha512-guAg1SXFcVr04Guk9eq0S4/rWS++sbmyqosJzVs8+1fH5NI+ZcmkaSkc7dmtAFbHFva6yRJnjW3yAcGxjueDug==", + "requires": { + "@babel/types": "^7.7.4" + } + }, + "@babel/helper-wrap-function": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.7.4.tgz", + "integrity": "sha512-VsfzZt6wmsocOaVU0OokwrIytHND55yvyT4BPB9AIIgwr8+x7617hetdJTsuGwygN5RC6mxA9EJztTjuwm2ofg==", + "requires": { + "@babel/helper-function-name": "^7.7.4", + "@babel/template": "^7.7.4", + "@babel/traverse": "^7.7.4", + "@babel/types": "^7.7.4" + } + }, + "@babel/helpers": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.7.4.tgz", + "integrity": "sha512-ak5NGZGJ6LV85Q1Zc9gn2n+ayXOizryhjSUBTdu5ih1tlVCJeuQENzc4ItyCVhINVXvIT/ZQ4mheGIsfBkpskg==", + "requires": { + "@babel/template": "^7.7.4", + "@babel/traverse": "^7.7.4", + "@babel/types": "^7.7.4" + } + }, + "@babel/highlight": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.5.0.tgz", + "integrity": "sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ==", + "requires": { + "chalk": "^2.0.0", + "esutils": "^2.0.2", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.7.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.7.7.tgz", + "integrity": "sha512-WtTZMZAZLbeymhkd/sEaPD8IQyGAhmuTuvTzLiCFM7iXiVdY0gc0IaI+cW0fh1BnSMbJSzXX6/fHllgHKwHhXw==" + }, + "@babel/plugin-external-helpers": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-external-helpers/-/plugin-external-helpers-7.7.4.tgz", + "integrity": "sha512-RVGNajLaFlknbZLutaP/uv7Q+xmVs2LMlEWFXbcjLnwtBdPqAVpV3nzYIAJqri/VjJCUrhG5nALijtg0aND+XA==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-proposal-async-generator-functions": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.7.4.tgz", + "integrity": "sha512-1ypyZvGRXriY/QP668+s8sFr2mqinhkRDMPSQLNghCQE+GAkFtp+wkHVvg2+Hdki8gwP+NFzJBJ/N1BfzCCDEw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-remap-async-to-generator": "^7.7.4", + "@babel/plugin-syntax-async-generators": "^7.7.4" + } + }, + "@babel/plugin-proposal-class-properties": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.7.4.tgz", + "integrity": "sha512-EcuXeV4Hv1X3+Q1TsuOmyyxeTRiSqurGJ26+I/FW1WbymmRRapVORm6x1Zl3iDIHyRxEs+VXWp6qnlcfcJSbbw==", + "requires": { + "@babel/helper-create-class-features-plugin": "^7.7.4", + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-proposal-dynamic-import": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.7.4.tgz", + "integrity": "sha512-StH+nGAdO6qDB1l8sZ5UBV8AC3F2VW2I8Vfld73TMKyptMU9DY5YsJAS8U81+vEtxcH3Y/La0wG0btDrhpnhjQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-dynamic-import": "^7.7.4" + } + }, + "@babel/plugin-proposal-export-default-from": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.7.4.tgz", + "integrity": "sha512-1t6dh7BHYUz4zD1m4pozYYEZy/3m8dgOr9owx3r0mPPI3iGKRUKUbIxfYmcJ4hwljs/dhd0qOTr1ZDUp43ix+w==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-export-default-from": "^7.7.4" + } + }, + "@babel/plugin-proposal-json-strings": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.7.4.tgz", + "integrity": "sha512-wQvt3akcBTfLU/wYoqm/ws7YOAQKu8EVJEvHip/mzkNtjaclQoCCIqKXFP5/eyfnfbQCDV3OLRIK3mIVyXuZlw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-json-strings": "^7.7.4" + } + }, + "@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.7.4.tgz", + "integrity": "sha512-TbYHmr1Gl1UC7Vo2HVuj/Naci5BEGNZ0AJhzqD2Vpr6QPFWpUmBRLrIDjedzx7/CShq0bRDS2gI4FIs77VHLVQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.7.4" + } + }, + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.7.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.7.7.tgz", + "integrity": "sha512-3qp9I8lelgzNedI3hrhkvhaEYree6+WHnyA/q4Dza9z7iEIs1eyhWyJnetk3jJ69RT0AT4G0UhEGwyGFJ7GUuQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-object-rest-spread": "^7.7.4" + } + }, + "@babel/plugin-proposal-optional-catch-binding": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.7.4.tgz", + "integrity": "sha512-DyM7U2bnsQerCQ+sejcTNZh8KQEUuC3ufzdnVnSiUv/qoGJp2Z3hanKL18KDhsBT5Wj6a7CMT5mdyCNJsEaA9w==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-optional-catch-binding": "^7.7.4" + } + }, + "@babel/plugin-proposal-optional-chaining": { + "version": "7.7.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.7.5.tgz", + "integrity": "sha512-sOwFqT8JSchtJeDD+CjmWCaiFoLxY4Ps7NjvwHC/U7l4e9i5pTRNt8nDMIFSOUL+ncFbYSwruHM8WknYItWdXw==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-optional-chaining": "^7.7.4" + } + }, + "@babel/plugin-proposal-unicode-property-regex": { + "version": "7.7.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.7.7.tgz", + "integrity": "sha512-80PbkKyORBUVm1fbTLrHpYdJxMThzM1UqFGh0ALEhO9TYbG86Ah9zQYAB/84axz2vcxefDLdZwWwZNlYARlu9w==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.7.4", + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-syntax-async-generators": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.7.4.tgz", + "integrity": "sha512-Li4+EjSpBgxcsmeEF8IFcfV/+yJGxHXDirDkEoyFjumuwbmfCVHUt0HuowD/iGM7OhIRyXJH9YXxqiH6N815+g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-syntax-class-properties": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.7.4.tgz", + "integrity": "sha512-JH3v5ZOeKT0qqdJ9BeBcZTFQiJOMax8RopSr1bH6ASkZKo2qWsvBML7W1mp89sszBRDBBRO8snqcByGdrMTdMg==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-syntax-dynamic-import": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.7.4.tgz", + "integrity": "sha512-jHQW0vbRGvwQNgyVxwDh4yuXu4bH1f5/EICJLAhl1SblLs2CDhrsmCk+v5XLdE9wxtAFRyxx+P//Iw+a5L/tTg==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-syntax-export-default-from": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.7.4.tgz", + "integrity": "sha512-j888jpjATLEzOWhKawq46UrpXnCRDbdhBd5io4jgwjJ3+CHHGCRb6PNAVEgs+BXIb+dNRAmnkv36zfB992PRVw==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-syntax-flow": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.7.4.tgz", + "integrity": "sha512-2AMAWl5PsmM5KPkB22cvOkUyWk6MjUaqhHNU5nSPUl/ns3j5qLfw2SuYP5RbVZ0tfLvePr4zUScbICtDP2CUNw==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-syntax-json-strings": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.7.4.tgz", + "integrity": "sha512-QpGupahTQW1mHRXddMG5srgpHWqRLwJnJZKXTigB9RPFCCGbDGCgBeM/iC82ICXp414WeYx/tD54w7M2qRqTMg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-syntax-jsx": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.7.4.tgz", + "integrity": "sha512-wuy6fiMe9y7HeZBWXYCGt2RGxZOj0BImZ9EyXJVnVGBKO/Br592rbR3rtIQn0eQhAk9vqaKP5n8tVqEFBQMfLg==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.7.4.tgz", + "integrity": "sha512-XKh/yIRPiQTOeBg0QJjEus5qiSKucKAiApNtO1psqG7D17xmE+X2i5ZqBEuSvo0HRuyPaKaSN/Gy+Ha9KFQolw==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-syntax-object-rest-spread": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.7.4.tgz", + "integrity": "sha512-mObR+r+KZq0XhRVS2BrBKBpr5jqrqzlPvS9C9vuOf5ilSwzloAl7RPWLrgKdWS6IreaVrjHxTjtyqFiOisaCwg==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-syntax-optional-catch-binding": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.7.4.tgz", + "integrity": "sha512-4ZSuzWgFxqHRE31Glu+fEr/MirNZOMYmD/0BhBWyLyOOQz/gTAl7QmWm2hX1QxEIXsr2vkdlwxIzTyiYRC4xcQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-syntax-optional-chaining": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.7.4.tgz", + "integrity": "sha512-2MqYD5WjZSbJdUagnJvIdSfkb/ucOC9/1fRJxm7GAxY6YQLWlUvkfxoNbUPcPLHJyetKUDQ4+yyuUyAoc0HriA==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-syntax-top-level-await": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.7.4.tgz", + "integrity": "sha512-wdsOw0MvkL1UIgiQ/IFr3ETcfv1xb8RMM0H9wbiDyLaJFyiDg5oZvDLCXosIXmFeIlweML5iOBXAkqddkYNizg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-syntax-typescript": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.7.4.tgz", + "integrity": "sha512-77blgY18Hud4NM1ggTA8xVT/dBENQf17OpiToSa2jSmEY3fWXD2jwrdVlO4kq5yzUTeF15WSQ6b4fByNvJcjpQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-arrow-functions": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.7.4.tgz", + "integrity": "sha512-zUXy3e8jBNPiffmqkHRNDdZM2r8DWhCB7HhcoyZjiK1TxYEluLHAvQuYnTT+ARqRpabWqy/NHkO6e3MsYB5YfA==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-async-to-generator": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.7.4.tgz", + "integrity": "sha512-zpUTZphp5nHokuy8yLlyafxCJ0rSlFoSHypTUWgpdwoDXWQcseaect7cJ8Ppk6nunOM6+5rPMkod4OYKPR5MUg==", + "requires": { + "@babel/helper-module-imports": "^7.7.4", + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-remap-async-to-generator": "^7.7.4" + } + }, + "@babel/plugin-transform-block-scoped-functions": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.7.4.tgz", + "integrity": "sha512-kqtQzwtKcpPclHYjLK//3lH8OFsCDuDJBaFhVwf8kqdnF6MN4l618UDlcA7TfRs3FayrHj+svYnSX8MC9zmUyQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-block-scoping": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.7.4.tgz", + "integrity": "sha512-2VBe9u0G+fDt9B5OV5DQH4KBf5DoiNkwFKOz0TCvBWvdAN2rOykCTkrL+jTLxfCAm76l9Qo5OqL7HBOx2dWggg==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "lodash": "^4.17.13" + } + }, + "@babel/plugin-transform-classes": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.7.4.tgz", + "integrity": "sha512-sK1mjWat7K+buWRuImEzjNf68qrKcrddtpQo3swi9j7dUcG6y6R6+Di039QN2bD1dykeswlagupEmpOatFHHUg==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.7.4", + "@babel/helper-define-map": "^7.7.4", + "@babel/helper-function-name": "^7.7.4", + "@babel/helper-optimise-call-expression": "^7.7.4", + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-replace-supers": "^7.7.4", + "@babel/helper-split-export-declaration": "^7.7.4", + "globals": "^11.1.0" + } + }, + "@babel/plugin-transform-computed-properties": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.7.4.tgz", + "integrity": "sha512-bSNsOsZnlpLLyQew35rl4Fma3yKWqK3ImWMSC/Nc+6nGjC9s5NFWAer1YQ899/6s9HxO2zQC1WoFNfkOqRkqRQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-destructuring": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.7.4.tgz", + "integrity": "sha512-4jFMXI1Cu2aXbcXXl8Lr6YubCn6Oc7k9lLsu8v61TZh+1jny2BWmdtvY9zSUlLdGUvcy9DMAWyZEOqjsbeg/wA==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-dotall-regex": { + "version": "7.7.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.7.7.tgz", + "integrity": "sha512-b4in+YlTeE/QmTgrllnb3bHA0HntYvjz8O3Mcbx75UBPJA2xhb5A8nle498VhxSXJHQefjtQxpnLPehDJ4TRlg==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.7.4", + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-duplicate-keys": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.7.4.tgz", + "integrity": "sha512-g1y4/G6xGWMD85Tlft5XedGaZBCIVN+/P0bs6eabmcPP9egFleMAo65OOjlhcz1njpwagyY3t0nsQC9oTFegJA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-exponentiation-operator": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.7.4.tgz", + "integrity": "sha512-MCqiLfCKm6KEA1dglf6Uqq1ElDIZwFuzz1WH5mTf8k2uQSxEJMbOIEh7IZv7uichr7PMfi5YVSrr1vz+ipp7AQ==", + "requires": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.7.4", + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-flow-strip-types": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.7.4.tgz", + "integrity": "sha512-w9dRNlHY5ElNimyMYy0oQowvQpwt/PRHI0QS98ZJCTZU2bvSnKXo5zEiD5u76FBPigTm8TkqzmnUTg16T7qbkA==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-flow": "^7.7.4" + } + }, + "@babel/plugin-transform-for-of": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.7.4.tgz", + "integrity": "sha512-zZ1fD1B8keYtEcKF+M1TROfeHTKnijcVQm0yO/Yu1f7qoDoxEIc/+GX6Go430Bg84eM/xwPFp0+h4EbZg7epAA==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-function-name": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.7.4.tgz", + "integrity": "sha512-E/x09TvjHNhsULs2IusN+aJNRV5zKwxu1cpirZyRPw+FyyIKEHPXTsadj48bVpc1R5Qq1B5ZkzumuFLytnbT6g==", + "requires": { + "@babel/helper-function-name": "^7.7.4", + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-literals": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.7.4.tgz", + "integrity": "sha512-X2MSV7LfJFm4aZfxd0yLVFrEXAgPqYoDG53Br/tCKiKYfX0MjVjQeWPIhPHHsCqzwQANq+FLN786fF5rgLS+gw==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-member-expression-literals": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.7.4.tgz", + "integrity": "sha512-9VMwMO7i69LHTesL0RdGy93JU6a+qOPuvB4F4d0kR0zyVjJRVJRaoaGjhtki6SzQUu8yen/vxPKN6CWnCUw6bA==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-modules-amd": { + "version": "7.7.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.7.5.tgz", + "integrity": "sha512-CT57FG4A2ZUNU1v+HdvDSDrjNWBrtCmSH6YbbgN3Lrf0Di/q/lWRxZrE72p3+HCCz9UjfZOEBdphgC0nzOS6DQ==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.7.5", + "@babel/helper-plugin-utils": "^7.0.0", + "babel-plugin-dynamic-import-node": "^2.3.0" + } + }, + "@babel/plugin-transform-modules-commonjs": { + "version": "7.7.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.7.5.tgz", + "integrity": "sha512-9Cq4zTFExwFhQI6MT1aFxgqhIsMWQWDVwOgLzl7PTWJHsNaqFvklAU+Oz6AQLAS0dJKTwZSOCo20INwktxpi3Q==", + "requires": { + "@babel/helper-module-transforms": "^7.7.5", + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-simple-access": "^7.7.4", + "babel-plugin-dynamic-import-node": "^2.3.0" + } + }, + "@babel/plugin-transform-modules-systemjs": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.7.4.tgz", + "integrity": "sha512-y2c96hmcsUi6LrMqvmNDPBBiGCiQu0aYqpHatVVu6kD4mFEXKjyNxd/drc18XXAf9dv7UXjrZwBVmTTGaGP8iw==", + "dev": true, + "requires": { + "@babel/helper-hoist-variables": "^7.7.4", + "@babel/helper-plugin-utils": "^7.0.0", + "babel-plugin-dynamic-import-node": "^2.3.0" + } + }, + "@babel/plugin-transform-modules-umd": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.7.4.tgz", + "integrity": "sha512-u2B8TIi0qZI4j8q4C51ktfO7E3cQ0qnaXFI1/OXITordD40tt17g/sXqgNNCcMTcBFKrUPcGDx+TBJuZxLx7tw==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.7.4", + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.7.4.tgz", + "integrity": "sha512-jBUkiqLKvUWpv9GLSuHUFYdmHg0ujC1JEYoZUfeOOfNydZXp1sXObgyPatpcwjWgsdBGsagWW0cdJpX/DO2jMw==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.7.4" + } + }, + "@babel/plugin-transform-new-target": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.7.4.tgz", + "integrity": "sha512-CnPRiNtOG1vRodnsyGX37bHQleHE14B9dnnlgSeEs3ek3fHN1A1SScglTCg1sfbe7sRQ2BUcpgpTpWSfMKz3gg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-object-assign": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-assign/-/plugin-transform-object-assign-7.7.4.tgz", + "integrity": "sha512-0TpeUlnhQDwKxPLTIckdaWt46L2s61c/5w5snw1OUod5ehOJywZD98Ha3dFHVjeqkfOFtOTH7cqxddjxUuvcmg==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-object-super": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.7.4.tgz", + "integrity": "sha512-ho+dAEhC2aRnff2JCA0SAK7V2R62zJd/7dmtoe7MHcso4C2mS+vZjn1Pb1pCVZvJs1mgsvv5+7sT+m3Bysb6eg==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-replace-supers": "^7.7.4" + } + }, + "@babel/plugin-transform-parameters": { + "version": "7.7.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.7.7.tgz", + "integrity": "sha512-OhGSrf9ZBrr1fw84oFXj5hgi8Nmg+E2w5L7NhnG0lPvpDtqd7dbyilM2/vR8CKbJ907RyxPh2kj6sBCSSfI9Ew==", + "requires": { + "@babel/helper-call-delegate": "^7.7.4", + "@babel/helper-get-function-arity": "^7.7.4", + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-property-literals": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.7.4.tgz", + "integrity": "sha512-MatJhlC4iHsIskWYyawl53KuHrt+kALSADLQQ/HkhTjX954fkxIEh4q5slL4oRAnsm/eDoZ4q0CIZpcqBuxhJQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-react-display-name": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.7.4.tgz", + "integrity": "sha512-sBbIvqYkthai0X0vkD2xsAwluBp+LtNHH+/V4a5ydifmTtb8KOVOlrMIk/MYmIc4uTYDnjZUHQildYNo36SRJw==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-react-jsx": { + "version": "7.7.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.7.7.tgz", + "integrity": "sha512-SlPjWPbva2+7/ZJbGcoqjl4LsQaLpKEzxW9hcxU7675s24JmdotJOSJ4cgAbV82W3FcZpHIGmRZIlUL8ayMvjw==", + "requires": { + "@babel/helper-builder-react-jsx": "^7.7.4", + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-jsx": "^7.7.4" + } + }, + "@babel/plugin-transform-react-jsx-source": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.7.4.tgz", + "integrity": "sha512-5ZU9FnPhqtHsOXxutRtXZAzoEJwDaP32QcobbMP1/qt7NYcsCNK8XgzJcJfoEr/ZnzVvUNInNjIW22Z6I8p9mg==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-jsx": "^7.7.4" + } + }, + "@babel/plugin-transform-regenerator": { + "version": "7.7.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.7.5.tgz", + "integrity": "sha512-/8I8tPvX2FkuEyWbjRCt4qTAgZK0DVy8QRguhA524UH48RfGJy94On2ri+dCuwOpcerPRl9O4ebQkRcVzIaGBw==", + "requires": { + "regenerator-transform": "^0.14.0" + } + }, + "@babel/plugin-transform-reserved-words": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.7.4.tgz", + "integrity": "sha512-OrPiUB5s5XvkCO1lS7D8ZtHcswIC57j62acAnJZKqGGnHP+TIc/ljQSrgdX/QyOTdEK5COAhuc820Hi1q2UgLQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-runtime": { + "version": "7.7.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.7.6.tgz", + "integrity": "sha512-tajQY+YmXR7JjTwRvwL4HePqoL3DYxpYXIHKVvrOIvJmeHe2y1w4tz5qz9ObUDC9m76rCzIMPyn4eERuwA4a4A==", + "requires": { + "@babel/helper-module-imports": "^7.7.4", + "@babel/helper-plugin-utils": "^7.0.0", + "resolve": "^1.8.1", + "semver": "^5.5.1" + } + }, + "@babel/plugin-transform-shorthand-properties": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.7.4.tgz", + "integrity": "sha512-q+suddWRfIcnyG5YiDP58sT65AJDZSUhXQDZE3r04AuqD6d/XLaQPPXSBzP2zGerkgBivqtQm9XKGLuHqBID6Q==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-spread": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.7.4.tgz", + "integrity": "sha512-8OSs0FLe5/80cndziPlg4R0K6HcWSM0zyNhHhLsmw/Nc5MaA49cAsnoJ/t/YZf8qkG7fD+UjTRaApVDB526d7Q==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-sticky-regex": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.7.4.tgz", + "integrity": "sha512-Ls2NASyL6qtVe1H1hXts9yuEeONV2TJZmplLONkMPUG158CtmnrzW5Q5teibM5UVOFjG0D3IC5mzXR6pPpUY7A==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-regex": "^7.0.0" + } + }, + "@babel/plugin-transform-template-literals": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.7.4.tgz", + "integrity": "sha512-sA+KxLwF3QwGj5abMHkHgshp9+rRz+oY9uoRil4CyLtgEuE/88dpkeWgNk5qKVsJE9iSfly3nvHapdRiIS2wnQ==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.7.4", + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-typeof-symbol": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.7.4.tgz", + "integrity": "sha512-KQPUQ/7mqe2m0B8VecdyaW5XcQYaePyl9R7IsKd+irzj6jvbhoGnRE+M0aNkyAzI07VfUQ9266L5xMARitV3wg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-typescript": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.7.4.tgz", + "integrity": "sha512-X8e3tcPEKnwwPVG+vP/vSqEShkwODOEeyQGod82qrIuidwIrfnsGn11qPM1jBLF4MqguTXXYzm58d0dY+/wdpg==", + "requires": { + "@babel/helper-create-class-features-plugin": "^7.7.4", + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-typescript": "^7.7.4" + } + }, + "@babel/plugin-transform-unicode-regex": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.7.4.tgz", + "integrity": "sha512-N77UUIV+WCvE+5yHw+oks3m18/umd7y392Zv7mYTpFqHtkpcc+QUz+gLJNTWVlWROIWeLqY0f3OjZxV5TcXnRw==", + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.7.4", + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/preset-env": { + "version": "7.7.7", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.7.7.tgz", + "integrity": "sha512-pCu0hrSSDVI7kCVUOdcMNQEbOPJ52E+LrQ14sN8uL2ALfSqePZQlKrOy+tM4uhEdYlCHi4imr8Zz2cZe9oSdIg==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.7.4", + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-async-generator-functions": "^7.7.4", + "@babel/plugin-proposal-dynamic-import": "^7.7.4", + "@babel/plugin-proposal-json-strings": "^7.7.4", + "@babel/plugin-proposal-object-rest-spread": "^7.7.7", + "@babel/plugin-proposal-optional-catch-binding": "^7.7.4", + "@babel/plugin-proposal-unicode-property-regex": "^7.7.7", + "@babel/plugin-syntax-async-generators": "^7.7.4", + "@babel/plugin-syntax-dynamic-import": "^7.7.4", + "@babel/plugin-syntax-json-strings": "^7.7.4", + "@babel/plugin-syntax-object-rest-spread": "^7.7.4", + "@babel/plugin-syntax-optional-catch-binding": "^7.7.4", + "@babel/plugin-syntax-top-level-await": "^7.7.4", + "@babel/plugin-transform-arrow-functions": "^7.7.4", + "@babel/plugin-transform-async-to-generator": "^7.7.4", + "@babel/plugin-transform-block-scoped-functions": "^7.7.4", + "@babel/plugin-transform-block-scoping": "^7.7.4", + "@babel/plugin-transform-classes": "^7.7.4", + "@babel/plugin-transform-computed-properties": "^7.7.4", + "@babel/plugin-transform-destructuring": "^7.7.4", + "@babel/plugin-transform-dotall-regex": "^7.7.7", + "@babel/plugin-transform-duplicate-keys": "^7.7.4", + "@babel/plugin-transform-exponentiation-operator": "^7.7.4", + "@babel/plugin-transform-for-of": "^7.7.4", + "@babel/plugin-transform-function-name": "^7.7.4", + "@babel/plugin-transform-literals": "^7.7.4", + "@babel/plugin-transform-member-expression-literals": "^7.7.4", + "@babel/plugin-transform-modules-amd": "^7.7.5", + "@babel/plugin-transform-modules-commonjs": "^7.7.5", + "@babel/plugin-transform-modules-systemjs": "^7.7.4", + "@babel/plugin-transform-modules-umd": "^7.7.4", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.7.4", + "@babel/plugin-transform-new-target": "^7.7.4", + "@babel/plugin-transform-object-super": "^7.7.4", + "@babel/plugin-transform-parameters": "^7.7.7", + "@babel/plugin-transform-property-literals": "^7.7.4", + "@babel/plugin-transform-regenerator": "^7.7.5", + "@babel/plugin-transform-reserved-words": "^7.7.4", + "@babel/plugin-transform-shorthand-properties": "^7.7.4", + "@babel/plugin-transform-spread": "^7.7.4", + "@babel/plugin-transform-sticky-regex": "^7.7.4", + "@babel/plugin-transform-template-literals": "^7.7.4", + "@babel/plugin-transform-typeof-symbol": "^7.7.4", + "@babel/plugin-transform-unicode-regex": "^7.7.4", + "@babel/types": "^7.7.4", + "browserslist": "^4.6.0", + "core-js-compat": "^3.6.0", + "invariant": "^2.2.2", + "js-levenshtein": "^1.1.3", + "semver": "^5.5.0" + } + }, + "@babel/preset-flow": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/preset-flow/-/preset-flow-7.7.4.tgz", + "integrity": "sha512-6LbUqcHD8BcRtXMOp5bc5nJeU8RlKh6q5U8TgZeCrf9ebBdW8Wyy5ujAUnbJfmzQ56Kkq5XtwErC/5+5RHyFYA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-transform-flow-strip-types": "^7.7.4" + } + }, + "@babel/register": { + "version": "7.7.7", + "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.7.7.tgz", + "integrity": "sha512-S2mv9a5dc2pcpg/ConlKZx/6wXaEwHeqfo7x/QbXsdCAZm+WJC1ekVvL1TVxNsedTs5y/gG63MhJTEsmwmjtiA==", + "requires": { + "find-cache-dir": "^2.0.0", + "lodash": "^4.17.13", + "make-dir": "^2.1.0", + "pirates": "^4.0.0", + "source-map-support": "^0.5.16" + } + }, + "@babel/runtime": { + "version": "7.7.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.7.7.tgz", + "integrity": "sha512-uCnC2JEVAu8AKB5do1WRIsvrdJ0flYx/A/9f/6chdacnEZ7LmavjdsDXr5ksYBegxtuTPR5Va9/+13QF/kFkCA==", + "requires": { + "regenerator-runtime": "^0.13.2" + } + }, + "@babel/runtime-corejs3": { + "version": "7.7.7", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.7.7.tgz", + "integrity": "sha512-kr3W3Fw8mB/CTru2M5zIRQZZgC/9zOxNSoJ/tVCzjPt3H1/p5uuGbz6WwmaQy/TLQcW31rUhUUWKY28sXFRelA==", + "dev": true, + "requires": { + "core-js-pure": "^3.0.0", + "regenerator-runtime": "^0.13.2" + } + }, + "@babel/template": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.7.4.tgz", + "integrity": "sha512-qUzihgVPguAzXCK7WXw8pqs6cEwi54s3E+HrejlkuWO6ivMKx9hZl3Y2fSXp9i5HgyWmj7RKP+ulaYnKM4yYxw==", + "requires": { + "@babel/code-frame": "^7.0.0", + "@babel/parser": "^7.7.4", + "@babel/types": "^7.7.4" + } + }, + "@babel/traverse": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.7.4.tgz", + "integrity": "sha512-P1L58hQyupn8+ezVA2z5KBm4/Zr4lCC8dwKCMYzsa5jFMDMQAzaBNy9W5VjB+KAmBjb40U7a/H6ao+Xo+9saIw==", + "requires": { + "@babel/code-frame": "^7.5.5", + "@babel/generator": "^7.7.4", + "@babel/helper-function-name": "^7.7.4", + "@babel/helper-split-export-declaration": "^7.7.4", + "@babel/parser": "^7.7.4", + "@babel/types": "^7.7.4", + "debug": "^4.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.13" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "@babel/types": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.4.tgz", + "integrity": "sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA==", + "requires": { + "esutils": "^2.0.2", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" + } + }, + "@cnakazawa/watch": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.3.tgz", + "integrity": "sha512-r5160ogAvGyHsal38Kux7YYtodEKOj89RGb28ht1jh3SJb08VwRwAKKJL0bGb04Zd/3r9FL3BFIc3bBidYffCA==", + "requires": { + "exec-sh": "^0.3.2", + "minimist": "^1.2.0" + } + }, + "@egjs/hammerjs": { + "version": "2.0.17", + "resolved": "https://registry.npmjs.org/@egjs/hammerjs/-/hammerjs-2.0.17.tgz", + "integrity": "sha512-XQsZgjm2EcVUiZQf11UBJQfmZeEmOW8DpI1gsFeln6w0ae0ii4dMQEQ0kjl6DspdWX1aGY1/loyXnP0JS06e/A==", + "requires": { + "@types/hammerjs": "^2.0.36" + } + }, + "@hapi/address": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@hapi/address/-/address-2.1.4.tgz", + "integrity": "sha512-QD1PhQk+s31P1ixsX0H0Suoupp3VMXzIVMSwobR3F3MSUO2YCV0B7xqLcUw/Bh8yuvd3LhpyqLQWTNcRmp6IdQ==" + }, + "@hapi/bourne": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@hapi/bourne/-/bourne-1.3.2.tgz", + "integrity": "sha512-1dVNHT76Uu5N3eJNTYcvxee+jzX4Z9lfciqRRHCU27ihbUcYi+iSc2iml5Ke1LXe1SyJCLA0+14Jh4tXJgOppA==" + }, + "@hapi/hoek": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-8.5.0.tgz", + "integrity": "sha512-7XYT10CZfPsH7j9F1Jmg1+d0ezOux2oM2GfArAzLwWe4mE2Dr3hVjsAL6+TFY49RRJlCdJDMw3nJsLFroTc8Kw==" + }, + "@hapi/joi": { + "version": "15.1.1", + "resolved": "https://registry.npmjs.org/@hapi/joi/-/joi-15.1.1.tgz", + "integrity": "sha512-entf8ZMOK8sc+8YfeOlM8pCfg3b5+WZIKBfUaaJT8UsjAAPjartzxIYm3TIbjvA4u+u++KbcXD38k682nVHDAQ==", + "requires": { + "@hapi/address": "2.x.x", + "@hapi/bourne": "1.x.x", + "@hapi/hoek": "8.x.x", + "@hapi/topo": "3.x.x" + } + }, + "@hapi/topo": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-3.1.6.tgz", + "integrity": "sha512-tAag0jEcjwH+P2quUfipd7liWCNX2F8NvYjQp2wtInsZxnMlypdw0FtAOLxtvvkO+GSRRbmNi8m/5y42PQJYCQ==", + "requires": { + "@hapi/hoek": "^8.3.0" + } + }, + "@jest/console": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-24.9.0.tgz", + "integrity": "sha512-Zuj6b8TnKXi3q4ymac8EQfc3ea/uhLeCGThFqXeC8H9/raaH8ARPUTdId+XyGd03Z4In0/VjD2OYFcBF09fNLQ==", + "requires": { + "@jest/source-map": "^24.9.0", + "chalk": "^2.0.1", + "slash": "^2.0.0" + } + }, + "@jest/core": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-24.9.0.tgz", + "integrity": "sha512-Fogg3s4wlAr1VX7q+rhV9RVnUv5tD7VuWfYy1+whMiWUrvl7U3QJSJyWcDio9Lq2prqYsZaeTv2Rz24pWGkJ2A==", + "dev": true, + "requires": { + "@jest/console": "^24.7.1", + "@jest/reporters": "^24.9.0", + "@jest/test-result": "^24.9.0", + "@jest/transform": "^24.9.0", + "@jest/types": "^24.9.0", + "ansi-escapes": "^3.0.0", + "chalk": "^2.0.1", + "exit": "^0.1.2", + "graceful-fs": "^4.1.15", + "jest-changed-files": "^24.9.0", + "jest-config": "^24.9.0", + "jest-haste-map": "^24.9.0", + "jest-message-util": "^24.9.0", + "jest-regex-util": "^24.3.0", + "jest-resolve": "^24.9.0", + "jest-resolve-dependencies": "^24.9.0", + "jest-runner": "^24.9.0", + "jest-runtime": "^24.9.0", + "jest-snapshot": "^24.9.0", + "jest-util": "^24.9.0", + "jest-validate": "^24.9.0", + "jest-watcher": "^24.9.0", + "micromatch": "^3.1.10", + "p-each-series": "^1.0.0", + "realpath-native": "^1.1.0", + "rimraf": "^2.5.4", + "slash": "^2.0.0", + "strip-ansi": "^5.0.0" + }, + "dependencies": { + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "@jest/environment": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-24.9.0.tgz", + "integrity": "sha512-5A1QluTPhvdIPFYnO3sZC3smkNeXPVELz7ikPbhUj0bQjB07EoE9qtLrem14ZUYWdVayYbsjVwIiL4WBIMV4aQ==", + "dev": true, + "requires": { + "@jest/fake-timers": "^24.9.0", + "@jest/transform": "^24.9.0", + "@jest/types": "^24.9.0", + "jest-mock": "^24.9.0" + } + }, + "@jest/fake-timers": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-24.9.0.tgz", + "integrity": "sha512-eWQcNa2YSwzXWIMC5KufBh3oWRIijrQFROsIqt6v/NS9Io/gknw1jsAC9c+ih/RQX4A3O7SeWAhQeN0goKhT9A==", + "requires": { + "@jest/types": "^24.9.0", + "jest-message-util": "^24.9.0", + "jest-mock": "^24.9.0" + } + }, + "@jest/reporters": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-24.9.0.tgz", + "integrity": "sha512-mu4X0yjaHrffOsWmVLzitKmmmWSQ3GGuefgNscUSWNiUNcEOSEQk9k3pERKEQVBb0Cnn88+UESIsZEMH3o88Gw==", + "dev": true, + "requires": { + "@jest/environment": "^24.9.0", + "@jest/test-result": "^24.9.0", + "@jest/transform": "^24.9.0", + "@jest/types": "^24.9.0", + "chalk": "^2.0.1", + "exit": "^0.1.2", + "glob": "^7.1.2", + "istanbul-lib-coverage": "^2.0.2", + "istanbul-lib-instrument": "^3.0.1", + "istanbul-lib-report": "^2.0.4", + "istanbul-lib-source-maps": "^3.0.1", + "istanbul-reports": "^2.2.6", + "jest-haste-map": "^24.9.0", + "jest-resolve": "^24.9.0", + "jest-runtime": "^24.9.0", + "jest-util": "^24.9.0", + "jest-worker": "^24.6.0", + "node-notifier": "^5.4.2", + "slash": "^2.0.0", + "source-map": "^0.6.0", + "string-length": "^2.0.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "@jest/source-map": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-24.9.0.tgz", + "integrity": "sha512-/Xw7xGlsZb4MJzNDgB7PW5crou5JqWiBQaz6xyPd3ArOg2nfn/PunV8+olXbbEZzNl591o5rWKE9BRDaFAuIBg==", + "requires": { + "callsites": "^3.0.0", + "graceful-fs": "^4.1.15", + "source-map": "^0.6.0" + }, + "dependencies": { + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "@jest/test-result": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-24.9.0.tgz", + "integrity": "sha512-XEFrHbBonBJ8dGp2JmF8kP/nQI/ImPpygKHwQ/SY+es59Z3L5PI4Qb9TQQMAEeYsThG1xF0k6tmG0tIKATNiiA==", + "requires": { + "@jest/console": "^24.9.0", + "@jest/types": "^24.9.0", + "@types/istanbul-lib-coverage": "^2.0.0" + } + }, + "@jest/test-sequencer": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-24.9.0.tgz", + "integrity": "sha512-6qqsU4o0kW1dvA95qfNog8v8gkRN9ph6Lz7r96IvZpHdNipP2cBcb07J1Z45mz/VIS01OHJ3pY8T5fUY38tg4A==", + "dev": true, + "requires": { + "@jest/test-result": "^24.9.0", + "jest-haste-map": "^24.9.0", + "jest-runner": "^24.9.0", + "jest-runtime": "^24.9.0" + } + }, + "@jest/transform": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-24.9.0.tgz", + "integrity": "sha512-TcQUmyNRxV94S0QpMOnZl0++6RMiqpbH/ZMccFB/amku6Uwvyb1cjYX7xkp5nGNkbX4QPH/FcB6q1HBTHynLmQ==", + "dev": true, + "requires": { + "@babel/core": "^7.1.0", + "@jest/types": "^24.9.0", + "babel-plugin-istanbul": "^5.1.0", + "chalk": "^2.0.1", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.1.15", + "jest-haste-map": "^24.9.0", + "jest-regex-util": "^24.9.0", + "jest-util": "^24.9.0", + "micromatch": "^3.1.10", + "pirates": "^4.0.1", + "realpath-native": "^1.1.0", + "slash": "^2.0.0", + "source-map": "^0.6.1", + "write-file-atomic": "2.4.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "write-file-atomic": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.1.tgz", + "integrity": "sha512-TGHFeZEZMnv+gBFRfjAcxL5bPHrsGKtnb4qsFAws7/vlh+QfwAaySIw4AXP9ZskTTh5GWu3FLuJhsWVdiJPGvg==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.2" + } + } + } + }, + "@jest/types": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-24.9.0.tgz", + "integrity": "sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw==", + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^1.1.1", + "@types/yargs": "^13.0.0" + } + }, + "@react-native-community/art": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@react-native-community/art/-/art-1.0.4.tgz", + "integrity": "sha512-qmzX7/lWXRatQaWwwAp060MuKVVjw48BPawv3q3OaXQf0tTSOUN+dhyIYHSWwcVvumjMnoTagBi7+M8+/ecuoQ==", + "requires": { + "art": "^0.10.3", + "invariant": "^2.2.4", + "prop-types": "^15.7.2" + } + }, + "@react-native-community/async-storage": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@react-native-community/async-storage/-/async-storage-1.2.4.tgz", + "integrity": "sha512-DPUdqlG7KDNhKF01272KMBNgPTAM08LQvsqRXYMHC2KhLMBgSea8n4gK7xWW6enYglkc6CInw9vriP1oZ7Kgpw==" + }, + "@react-native-community/blur": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/@react-native-community/blur/-/blur-3.4.1.tgz", + "integrity": "sha512-XhbS230J7BGuoEamjPFZ5jUWDOW16y+vD0Soyq9Iv1qL8R47esGl54bnfUSMH10WhNXrQzvPxkMzap+ONHpE2w==", + "requires": { + "prop-types": "^15.5.10" + } + }, + "@react-native-community/cameraroll": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/@react-native-community/cameraroll/-/cameraroll-1.4.1.tgz", + "integrity": "sha512-ZwXGPuG72u3sq7DF2uRtvT8jMbGKKfFntd3VQGkD1zL6riMQeyuGJZ/O6YBeppopEq+pMlf/j9xH1cWNjNkYLg==" + }, + "@react-native-community/cli-debugger-ui": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-debugger-ui/-/cli-debugger-ui-3.0.0.tgz", + "integrity": "sha512-m3X+iWLsK/H7/b7PpbNO33eQayR/+M26la4ZbYe1KRke5Umg4PIWsvg21O8Tw4uJcY8LA5hsP+rBi/syBkBf0g==", + "requires": { + "serve-static": "^1.13.1" + } + }, + "@react-native-community/cli-platform-android": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-android/-/cli-platform-android-3.0.3.tgz", + "integrity": "sha512-rNO9DmRiVhB6aP2DVUjEJv7ecriTARDZND88ny3xNVUkrD1Y+zwF6aZu3eoT52VXOxLCSLiJzz19OiyGmfqxYg==", + "requires": { + "@react-native-community/cli-tools": "^3.0.0", + "chalk": "^2.4.2", + "execa": "^1.0.0", + "jetifier": "^1.6.2", + "logkitty": "^0.6.0", + "slash": "^3.0.0", + "xmldoc": "^1.1.2" + }, + "dependencies": { + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" + } + } + }, + "@react-native-community/cli-platform-ios": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-ios/-/cli-platform-ios-3.0.0.tgz", + "integrity": "sha512-QoNVlDj8eMXRZk9uktPFsctHurQpv9jKmiu6mQii4NEtT2npE7g1hbWpRNojutBsfgmCdQGDHd9uB54eeCnYgg==", + "requires": { + "@react-native-community/cli-tools": "^3.0.0", + "chalk": "^2.4.2", + "js-yaml": "^3.13.1", + "xcode": "^2.0.0" + } + }, + "@react-native-community/cli-tools": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-tools/-/cli-tools-3.0.0.tgz", + "integrity": "sha512-8IhQKZdf3E4CR8T7HhkPGgorot/cLkRDgneJFDSWk/wCYZAuUh4NEAdumQV7N0jLSMWX7xxiWUPi94lOBxVY9g==", + "requires": { + "chalk": "^2.4.2", + "lodash": "^4.17.5", + "mime": "^2.4.1", + "node-fetch": "^2.5.0" + }, + "dependencies": { + "mime": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.4.tgz", + "integrity": "sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA==" + } + } + }, + "@react-native-community/cli-types": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-types/-/cli-types-3.0.0.tgz", + "integrity": "sha512-ng6Tm537E/M42GjE4TRUxQyL8sRfClcL7bQWblOCoxPZzJ2J3bdALsjeG3vDnVCIfI/R0AeFalN9KjMt0+Z/Zg==" + }, + "@react-native-community/eslint-config": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/@react-native-community/eslint-config/-/eslint-config-0.0.5.tgz", + "integrity": "sha512-jwO2tnKaTPTLX5XYXMHGEnFdf543SU7jz98/OF5mDH3b7lP+BOaCD+jVfqqHoDRkcqyPlYiR1CgwVGWpi0vMWg==", + "dev": true, + "requires": { + "@typescript-eslint/eslint-plugin": "^1.5.0", + "@typescript-eslint/parser": "^1.5.0", + "babel-eslint": "10.0.1", + "eslint-plugin-eslint-comments": "^3.1.1", + "eslint-plugin-flowtype": "2.50.3", + "eslint-plugin-jest": "22.4.1", + "eslint-plugin-prettier": "2.6.2", + "eslint-plugin-react": "7.12.4", + "eslint-plugin-react-hooks": "^1.5.1", + "eslint-plugin-react-native": "3.6.0", + "prettier": "1.16.4" + }, + "dependencies": { + "babel-eslint": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.0.1.tgz", + "integrity": "sha512-z7OT1iNV+TjOwHNLLyJk+HN+YVWX+CLE6fPD2SymJZOZQBs+QIexFjhm4keGTm8MW9xr4EC9Q0PbaLB24V5GoQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "@babel/parser": "^7.0.0", + "@babel/traverse": "^7.0.0", + "@babel/types": "^7.0.0", + "eslint-scope": "3.7.1", + "eslint-visitor-keys": "^1.0.0" + } + }, + "eslint-plugin-react": { + "version": "7.12.4", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.12.4.tgz", + "integrity": "sha512-1puHJkXJY+oS1t467MjbqjvX53uQ05HXwjqDgdbGBqf5j9eeydI54G3KwiJmWciQ0HTBacIKw2jgwSBSH3yfgQ==", + "dev": true, + "requires": { + "array-includes": "^3.0.3", + "doctrine": "^2.1.0", + "has": "^1.0.3", + "jsx-ast-utils": "^2.0.1", + "object.fromentries": "^2.0.0", + "prop-types": "^15.6.2", + "resolve": "^1.9.0" + } + }, + "eslint-scope": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.1.tgz", + "integrity": "sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=", + "dev": true, + "requires": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + } + } + }, + "@react-native-community/geolocation": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@react-native-community/geolocation/-/geolocation-1.4.2.tgz", + "integrity": "sha512-9x9dHDeUXnh2larA4zTT3y/tXPmRnysh5o9fsNbGcnUKPj1BUCIHnGGPxEIDnwP1DNIMP2DN9DmuMHImtTbX6A==" + }, + "@react-native-community/image-editor": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@react-native-community/image-editor/-/image-editor-2.2.0.tgz", + "integrity": "sha512-cMCbGJBe/D5WqRqFkLmkPcotOx2FXFrA7/UoVzTWC0nBmtqqEa36Rpax2jTJkJrqNMqmbbuXPQiwKXBny0gMPw==" + }, + "@react-native-community/netinfo": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@react-native-community/netinfo/-/netinfo-4.7.0.tgz", + "integrity": "sha512-a/sDB+AsLEUNmhAUlAaTYeXKyQdFGBUfatqKkX5jluBo2CB3OAuTHfm7rSjcaLB9EmG5iSq3fOTpync2E7EYTA==" + }, + "@react-native-community/push-notification-ios": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@react-native-community/push-notification-ios/-/push-notification-ios-1.0.3.tgz", + "integrity": "sha512-f+Y3lFLt5OBWHDtGHE+PiZH4aLeS8w2D47c0G/S5XpzeGoEeggOiALtou/r6raiVLP+D5CrLkIBMs2U2+LGJhw==", + "requires": { + "invariant": "^2.2.4" + } + }, + "@react-native-community/slider": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@react-native-community/slider/-/slider-2.0.8.tgz", + "integrity": "sha512-FZC3wjYzHQiD7jT7ALy3QNccyLj9zQBRiKGBFr/QvrWLkVg5orpIJ53aYFXm3eOkNvUV+wjhoI9uCkh3LCN2+A==" + }, + "@react-native-community/viewpager": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/@react-native-community/viewpager/-/viewpager-1.1.7.tgz", + "integrity": "sha512-k9v2KJtAprNPq7IZmedD2VLMePvPW+ohX3uDnkpoKritBji+/RtRmTKrdtPi3Uvp0toq/KtPttAds1dr7AZNpw==" + }, + "@react-navigation/core": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/@react-navigation/core/-/core-3.5.1.tgz", + "integrity": "sha512-q7NyhWVYOhVIWqL2GZKa6G78YarXaVTTtOlSDkvy4ZIggo40wZzamlnrJRvsaQX46gsgw45FAWb5SriHh8o7eA==", + "requires": { + "hoist-non-react-statics": "^3.3.0", + "path-to-regexp": "^1.7.0", + "query-string": "^6.4.2", + "react-is": "^16.8.6" + } + }, + "@react-navigation/native": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/@react-navigation/native/-/native-3.6.2.tgz", + "integrity": "sha512-Cybeou6N82ZeRmgnGlu+wzlV3z5BZQR2dmYaNFV1TNLUGHqtvv8E7oNw9uYcz9Ox5LFbiX+FdNTn2d6ZPlK0kg==", + "requires": { + "hoist-non-react-statics": "^3.0.1", + "react-native-safe-area-view": "^0.14.1", + "react-native-screens": "^1.0.0 || ^1.0.0-alpha" + } + }, + "@redux-saga/core": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@redux-saga/core/-/core-1.1.3.tgz", + "integrity": "sha512-8tInBftak8TPzE6X13ABmEtRJGjtK17w7VUs7qV17S8hCO5S3+aUTWZ/DBsBJPdE8Z5jOPwYALyvofgq1Ws+kg==", + "requires": { + "@babel/runtime": "^7.6.3", + "@redux-saga/deferred": "^1.1.2", + "@redux-saga/delay-p": "^1.1.2", + "@redux-saga/is": "^1.1.2", + "@redux-saga/symbols": "^1.1.2", + "@redux-saga/types": "^1.1.0", + "redux": "^4.0.4", + "typescript-tuple": "^2.2.1" + }, + "dependencies": { + "redux": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/redux/-/redux-4.0.5.tgz", + "integrity": "sha512-VSz1uMAH24DM6MF72vcojpYPtrTUu3ByVWfPL1nPfVRb5mZVTve5GnNCUV53QM/BZ66xfWrm0CTWoM+Xlz8V1w==", + "requires": { + "loose-envify": "^1.4.0", + "symbol-observable": "^1.2.0" + } + } + } + }, + "@redux-saga/deferred": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@redux-saga/deferred/-/deferred-1.1.2.tgz", + "integrity": "sha512-908rDLHFN2UUzt2jb4uOzj6afpjgJe3MjICaUNO3bvkV/kN/cNeI9PMr8BsFXB/MR8WTAZQq/PlTq8Kww3TBSQ==" + }, + "@redux-saga/delay-p": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@redux-saga/delay-p/-/delay-p-1.1.2.tgz", + "integrity": "sha512-ojc+1IoC6OP65Ts5+ZHbEYdrohmIw1j9P7HS9MOJezqMYtCDgpkoqB5enAAZrNtnbSL6gVCWPHaoaTY5KeO0/g==", + "requires": { + "@redux-saga/symbols": "^1.1.2" + } + }, + "@redux-saga/is": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@redux-saga/is/-/is-1.1.2.tgz", + "integrity": "sha512-OLbunKVsCVNTKEf2cH4TYyNbbPgvmZ52iaxBD4I1fTif4+MTXMa4/Z07L83zW/hTCXwpSZvXogqMqLfex2Tg6w==", + "requires": { + "@redux-saga/symbols": "^1.1.2", + "@redux-saga/types": "^1.1.0" + } + }, + "@redux-saga/symbols": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@redux-saga/symbols/-/symbols-1.1.2.tgz", + "integrity": "sha512-EfdGnF423glv3uMwLsGAtE6bg+R9MdqlHEzExnfagXPrIiuxwr3bdiAwz3gi+PsrQ3yBlaBpfGLtDG8rf3LgQQ==" + }, + "@redux-saga/types": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@redux-saga/types/-/types-1.1.0.tgz", + "integrity": "sha512-afmTuJrylUU/0OtqzaRkbyYFFNgCF73Bvel/sw90pvGrWIZ+vyoIJqA6eMSoA6+nb443kTmulmBtC9NerXboNg==" + }, + "@svgr/babel-plugin-add-jsx-attribute": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-4.2.0.tgz", + "integrity": "sha512-j7KnilGyZzYr/jhcrSYS3FGWMZVaqyCG0vzMCwzvei0coIkczuYMcniK07nI0aHJINciujjH11T72ICW5eL5Ig==", + "dev": true + }, + "@svgr/babel-plugin-remove-jsx-attribute": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-4.2.0.tgz", + "integrity": "sha512-3XHLtJ+HbRCH4n28S7y/yZoEQnRpl0tvTZQsHqvaeNXPra+6vE5tbRliH3ox1yZYPCxrlqaJT/Mg+75GpDKlvQ==", + "dev": true + }, + "@svgr/babel-plugin-remove-jsx-empty-expression": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-4.2.0.tgz", + "integrity": "sha512-yTr2iLdf6oEuUE9MsRdvt0NmdpMBAkgK8Bjhl6epb+eQWk6abBaX3d65UZ3E3FWaOwePyUgNyNCMVG61gGCQ7w==", + "dev": true + }, + "@svgr/babel-plugin-replace-jsx-attribute-value": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-4.2.0.tgz", + "integrity": "sha512-U9m870Kqm0ko8beHawRXLGLvSi/ZMrl89gJ5BNcT452fAjtF2p4uRzXkdzvGJJJYBgx7BmqlDjBN/eCp5AAX2w==", + "dev": true + }, + "@svgr/babel-plugin-svg-dynamic-title": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-4.3.3.tgz", + "integrity": "sha512-w3Be6xUNdwgParsvxkkeZb545VhXEwjGMwExMVBIdPQJeyMQHqm9Msnb2a1teHBqUYL66qtwfhNkbj1iarCG7w==", + "dev": true + }, + "@svgr/babel-plugin-svg-em-dimensions": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-4.2.0.tgz", + "integrity": "sha512-C0Uy+BHolCHGOZ8Dnr1zXy/KgpBOkEUYY9kI/HseHVPeMbluaX3CijJr7D4C5uR8zrc1T64nnq/k63ydQuGt4w==", + "dev": true + }, + "@svgr/babel-plugin-transform-react-native-svg": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-4.2.0.tgz", + "integrity": "sha512-7YvynOpZDpCOUoIVlaaOUU87J4Z6RdD6spYN4eUb5tfPoKGSF9OG2NuhgYnq4jSkAxcpMaXWPf1cePkzmqTPNw==", + "dev": true + }, + "@svgr/babel-plugin-transform-svg-component": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-4.2.0.tgz", + "integrity": "sha512-hYfYuZhQPCBVotABsXKSCfel2slf/yvJY8heTVX1PCTaq/IgASq1IyxPPKJ0chWREEKewIU/JMSsIGBtK1KKxw==", + "dev": true + }, + "@svgr/babel-preset": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-4.3.3.tgz", + "integrity": "sha512-6PG80tdz4eAlYUN3g5GZiUjg2FMcp+Wn6rtnz5WJG9ITGEF1pmFdzq02597Hn0OmnQuCVaBYQE1OVFAnwOl+0A==", + "dev": true, + "requires": { + "@svgr/babel-plugin-add-jsx-attribute": "^4.2.0", + "@svgr/babel-plugin-remove-jsx-attribute": "^4.2.0", + "@svgr/babel-plugin-remove-jsx-empty-expression": "^4.2.0", + "@svgr/babel-plugin-replace-jsx-attribute-value": "^4.2.0", + "@svgr/babel-plugin-svg-dynamic-title": "^4.3.3", + "@svgr/babel-plugin-svg-em-dimensions": "^4.2.0", + "@svgr/babel-plugin-transform-react-native-svg": "^4.2.0", + "@svgr/babel-plugin-transform-svg-component": "^4.2.0" + } + }, + "@svgr/core": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@svgr/core/-/core-4.3.3.tgz", + "integrity": "sha512-qNuGF1QON1626UCaZamWt5yedpgOytvLj5BQZe2j1k1B8DUG4OyugZyfEwBeXozCUwhLEpsrgPrE+eCu4fY17w==", + "dev": true, + "requires": { + "@svgr/plugin-jsx": "^4.3.3", + "camelcase": "^5.3.1", + "cosmiconfig": "^5.2.1" + } + }, + "@svgr/hast-util-to-babel-ast": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-4.3.2.tgz", + "integrity": "sha512-JioXclZGhFIDL3ddn4Kiq8qEqYM2PyDKV0aYno8+IXTLuYt6TOgHUbUAAFvqtb0Xn37NwP0BTHglejFoYr8RZg==", + "dev": true, + "requires": { + "@babel/types": "^7.4.4" + } + }, + "@svgr/plugin-jsx": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-4.3.3.tgz", + "integrity": "sha512-cLOCSpNWQnDB1/v+SUENHH7a0XY09bfuMKdq9+gYvtuwzC2rU4I0wKGFEp1i24holdQdwodCtDQdFtJiTCWc+w==", + "dev": true, + "requires": { + "@babel/core": "^7.4.5", + "@svgr/babel-preset": "^4.3.3", + "@svgr/hast-util-to-babel-ast": "^4.3.2", + "svg-parser": "^2.0.0" + } + }, + "@tradle/react-native-http": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@tradle/react-native-http/-/react-native-http-2.0.1.tgz", + "integrity": "sha1-rxniQOHlgL+iSVY5JNG+RyaG9Is=", + "requires": { + "Base64": "~0.2.0", + "inherits": "~2.0.1" + } + }, + "@types/babel__core": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.3.tgz", + "integrity": "sha512-8fBo0UR2CcwWxeX7WIIgJ7lXjasFxoYgRnFHUj+hRvKkpiBJbxhdAPTCY6/ZKM0uxANFVzt4yObSLuTiTnazDA==", + "dev": true, + "requires": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "@types/babel__generator": { + "version": "7.6.1", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.1.tgz", + "integrity": "sha512-bBKm+2VPJcMRVwNhxKu8W+5/zT7pwNEqeokFOmbvVSqGzFneNxYcEBro9Ac7/N9tlsaPYnZLK8J1LWKkMsLAew==", + "dev": true, + "requires": { + "@babel/types": "^7.0.0" + } + }, + "@types/babel__template": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.0.2.tgz", + "integrity": "sha512-/K6zCpeW7Imzgab2bLkLEbz0+1JlFSrUMdw7KoIIu+IUdu51GWaBZpd3y1VXGVXzynvGa4DaIaxNZHiON3GXUg==", + "dev": true, + "requires": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "@types/babel__traverse": { + "version": "7.0.8", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.0.8.tgz", + "integrity": "sha512-yGeB2dHEdvxjP0y4UbRtQaSkXJ9649fYCmIdRoul5kfAoGCwxuCbMhag0k3RPfnuh9kPGm8x89btcfDEXdVWGw==", + "dev": true, + "requires": { + "@babel/types": "^7.3.0" + } + }, + "@types/color-name": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", + "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==" + }, + "@types/eslint-visitor-keys": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", + "integrity": "sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag==", + "dev": true + }, + "@types/hammerjs": { + "version": "2.0.36", + "resolved": "https://registry.npmjs.org/@types/hammerjs/-/hammerjs-2.0.36.tgz", + "integrity": "sha512-7TUK/k2/QGpEAv/BCwSHlYu3NXZhQ9ZwBYpzr9tjlPIL2C5BeGhH3DmVavRx3ZNyELX5TLC91JTz/cen6AAtIQ==" + }, + "@types/istanbul-lib-coverage": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.1.tgz", + "integrity": "sha512-hRJD2ahnnpLgsj6KWMYSrmXkM3rm2Dl1qkx6IOFD5FnuNPXJIG5L0dhgKXCYTRMGzU4n0wImQ/xfmRc4POUFlg==" + }, + "@types/istanbul-lib-report": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-1.1.1.tgz", + "integrity": "sha512-3BUTyMzbZa2DtDI2BkERNC6jJw2Mr2Y0oGI7mRxYNBPxppbtEK1F66u3bKwU2g+wxwWI7PAoRpJnOY1grJqzHg==", + "requires": { + "@types/istanbul-lib-coverage": "*" + } + }, + "@types/istanbul-reports": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.1.tgz", + "integrity": "sha512-UpYjBi8xefVChsCoBpKShdxTllC9pwISirfoZsUa2AAdQg/Jd2KQGtSbw+ya7GPo7x/wAPlH6JBhKhAsXUEZNA==", + "requires": { + "@types/istanbul-lib-coverage": "*", + "@types/istanbul-lib-report": "*" + } + }, + "@types/json-schema": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.4.tgz", + "integrity": "sha512-8+KAKzEvSUdeo+kmqnKrqgeE+LcA0tjYWFY7RPProVYwnqDjukzO+3b6dLD56rYX5TdWejnEOLJYOIeh4CXKuA==", + "dev": true + }, + "@types/node": { + "version": "13.1.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-13.1.0.tgz", + "integrity": "sha512-zwrxviZS08kRX40nqBrmERElF2vpw4IUTd5khkhBTfFH8AOaeoLVx48EC4+ZzS2/Iga7NevncqnsUSYjM4OWYA==", + "dev": true + }, + "@types/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", + "dev": true + }, + "@types/prop-types": { + "version": "15.7.3", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.3.tgz", + "integrity": "sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw==" + }, + "@types/react": { + "version": "16.9.17", + "resolved": "https://registry.npmjs.org/@types/react/-/react-16.9.17.tgz", + "integrity": "sha512-UP27In4fp4sWF5JgyV6pwVPAQM83Fj76JOcg02X5BZcpSu5Wx+fP9RMqc2v0ssBoQIFvD5JdKY41gjJJKmw6Bg==", + "requires": { + "@types/prop-types": "*", + "csstype": "^2.2.0" + } + }, + "@types/stack-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-1.0.1.tgz", + "integrity": "sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw==" + }, + "@types/yargs": { + "version": "13.0.4", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-13.0.4.tgz", + "integrity": "sha512-Ke1WmBbIkVM8bpvsNEcGgQM70XcEh/nbpxQhW7FhrsbCsXSY9BmLB1+LHtD7r9zrsOcFlLiF+a/UeJsdfw3C5A==", + "requires": { + "@types/yargs-parser": "*" + } + }, + "@types/yargs-parser": { + "version": "13.1.0", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-13.1.0.tgz", + "integrity": "sha512-gCubfBUZ6KxzoibJ+SCUc/57Ms1jz5NjHe4+dI2krNmU5zCPAphyLJYyTOg06ueIyfj+SaCUqmzun7ImlxDcKg==" + }, + "@types/zen-observable": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@types/zen-observable/-/zen-observable-0.8.0.tgz", + "integrity": "sha512-te5lMAWii1uEJ4FwLjzdlbw3+n0FZNOvFXHxQDKeT0dilh7HOzdMzV2TrJVUzq8ep7J4Na8OUYPRLSQkJHAlrg==" + }, + "@typescript-eslint/eslint-plugin": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-1.13.0.tgz", + "integrity": "sha512-WQHCozMnuNADiqMtsNzp96FNox5sOVpU8Xt4meaT4em8lOG1SrOv92/mUbEHQVh90sldKSfcOc/I0FOb/14G1g==", + "dev": true, + "requires": { + "@typescript-eslint/experimental-utils": "1.13.0", + "eslint-utils": "^1.3.1", + "functional-red-black-tree": "^1.0.1", + "regexpp": "^2.0.1", + "tsutils": "^3.7.0" + } + }, + "@typescript-eslint/experimental-utils": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-1.13.0.tgz", + "integrity": "sha512-zmpS6SyqG4ZF64ffaJ6uah6tWWWgZ8m+c54XXgwFtUv0jNz8aJAVx8chMCvnk7yl6xwn8d+d96+tWp7fXzTuDg==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.3", + "@typescript-eslint/typescript-estree": "1.13.0", + "eslint-scope": "^4.0.0" + } + }, + "@typescript-eslint/parser": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-1.13.0.tgz", + "integrity": "sha512-ITMBs52PCPgLb2nGPoeT4iU3HdQZHcPaZVw+7CsFagRJHUhyeTgorEwHXhFf3e7Evzi8oujKNpHc8TONth8AdQ==", + "dev": true, + "requires": { + "@types/eslint-visitor-keys": "^1.0.0", + "@typescript-eslint/experimental-utils": "1.13.0", + "@typescript-eslint/typescript-estree": "1.13.0", + "eslint-visitor-keys": "^1.0.0" + } + }, + "@typescript-eslint/typescript-estree": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-1.13.0.tgz", + "integrity": "sha512-b5rCmd2e6DCC6tCTN9GSUAuxdYwCM/k/2wdjHGrIRGPSJotWMCe/dGpi66u42bhuh8q3QBzqM4TMA1GUUCJvdw==", + "dev": true, + "requires": { + "lodash.unescape": "4.0.1", + "semver": "5.5.0" + }, + "dependencies": { + "semver": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", + "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", + "dev": true + } + } + }, + "@wry/equality": { + "version": "0.1.11", + "resolved": "https://registry.npmjs.org/@wry/equality/-/equality-0.1.11.tgz", + "integrity": "sha512-mwEVBDUVODlsQQ5dfuLUS5/Tf7jqUKyhKYHmVi4fPB6bDMOfWvUPJmKgS1Z7Za/sOI3vzWt4+O7yCiL/70MogA==", + "requires": { + "tslib": "^1.9.3" + } + }, + "@yarnpkg/lockfile": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", + "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", + "dev": true + }, + "Base64": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/Base64/-/Base64-0.2.1.tgz", + "integrity": "sha1-ujpCMHCOGGcFBl5mur3Uw1z2ACg=" + }, + "abab": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.3.tgz", + "integrity": "sha512-tsFzPpcttalNjFBCFMqsKYQcWxxen1pgJR56by//QwvJc4/OUS3kPOOttx2tSIfjsylB0pYu7f5D3K1RCxUnUg==", + "dev": true + }, + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true + }, + "abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "requires": { + "event-target-shim": "^5.0.0" + } + }, + "absolute-path": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/absolute-path/-/absolute-path-0.0.0.tgz", + "integrity": "sha1-p4di+9rftSl76ZsV01p4Wy8JW/c=" + }, + "abstract-leveldown": { + "version": "0.12.4", + "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-0.12.4.tgz", + "integrity": "sha1-KeGOYy5g5OIh1YECR4UqY9ey5BA=", + "requires": { + "xtend": "~3.0.0" + }, + "dependencies": { + "xtend": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-3.0.0.tgz", + "integrity": "sha1-XM50B7r2Qsunvs2laBEcST9ZZlo=" + } + } + }, + "accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "requires": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + }, + "dependencies": { + "mime-db": { + "version": "1.42.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.42.0.tgz", + "integrity": "sha512-UbfJCR4UAVRNgMpfImz05smAXK7+c+ZntjaA26ANtkXLlOe947Aag5zdIcKQULAiF9Cq4WxBi9jUs5zkA84bYQ==" + }, + "mime-types": { + "version": "2.1.25", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.25.tgz", + "integrity": "sha512-5KhStqB5xpTAeGqKBAMgwaYMnQik7teQN4IAzC7npDv6kzeU6prfkR67bc87J1kWMPGkoaZSq1npmexMgkmEVg==", + "requires": { + "mime-db": "1.42.0" + } + } + } + }, + "acorn": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.1.0.tgz", + "integrity": "sha512-kL5CuoXA/dgxlBbVrflsflzQ3PAas7RYZB52NOm/6839iVYJgKMJ3cQJD+t2i5+qFa8h3MDpEOJiS64E8JLnSQ==", + "dev": true + }, + "acorn-globals": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.4.tgz", + "integrity": "sha512-clfQEh21R+D0leSbUdWf3OcfqyaCSAQ8Ryq00bofSekfr9W8u1jyYZo6ir0xu9Gtcf7BjcHJpnbZH7JOCpP60A==", + "dev": true, + "requires": { + "acorn": "^6.0.1", + "acorn-walk": "^6.0.1" + }, + "dependencies": { + "acorn": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.0.tgz", + "integrity": "sha512-gac8OEcQ2Li1dxIEWGZzsp2BitJxwkwcOm0zHAJLcPJaVvm58FRnk6RkuLRpU1EujipU2ZFODv2P9DLMfnV8mw==", + "dev": true + } + } + }, + "acorn-jsx": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.1.0.tgz", + "integrity": "sha512-tMUqwBWfLFbJbizRmEcWSLw6HnFzfdJs2sOJEOwwtVPMoH/0Ay+E703oZz78VSXZiiDcZrQ5XKjPIUQixhmgVw==", + "dev": true + }, + "acorn-walk": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.2.0.tgz", + "integrity": "sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA==", + "dev": true + }, + "agent-base": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz", + "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==", + "requires": { + "es6-promisify": "^5.0.0" + } + }, + "airbnb-prop-types": { + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/airbnb-prop-types/-/airbnb-prop-types-2.15.0.tgz", + "integrity": "sha512-jUh2/hfKsRjNFC4XONQrxo/n/3GG4Tn6Hl0WlFQN5PY9OMC9loSCoAYKnZsWaP8wEfd5xcrPloK0Zg6iS1xwVA==", + "dev": true, + "requires": { + "array.prototype.find": "^2.1.0", + "function.prototype.name": "^1.1.1", + "has": "^1.0.3", + "is-regex": "^1.0.4", + "object-is": "^1.0.1", + "object.assign": "^4.1.0", + "object.entries": "^1.1.0", + "prop-types": "^15.7.2", + "prop-types-exact": "^1.2.0", + "react-is": "^16.9.0" + } + }, + "ajv": { + "version": "6.10.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz", + "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==", + "dev": true, + "requires": { + "fast-deep-equal": "^2.0.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "alias": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/alias/-/alias-0.0.5.tgz", + "integrity": "sha1-oE4wkJ+5uPjs2cTEjtUCscClsfU=", + "dev": true, + "requires": { + "grunt": "0.3.x", + "grunt-clean": ">=0.3.0", + "grunt-jasmine-node": ">=0.0.4" + } + }, + "align-text": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", + "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", + "requires": { + "kind-of": "^3.0.2", + "longest": "^1.0.1", + "repeat-string": "^1.5.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "amdefine": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=" + }, + "ansi-colors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz", + "integrity": "sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==", + "requires": { + "ansi-wrap": "^0.1.0" + } + }, + "ansi-cyan": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-cyan/-/ansi-cyan-0.1.1.tgz", + "integrity": "sha1-U4rlKK+JgvKK4w2G8vF0VtJgmHM=", + "requires": { + "ansi-wrap": "0.1.0" + } + }, + "ansi-escapes": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", + "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==" + }, + "ansi-fragments": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/ansi-fragments/-/ansi-fragments-0.2.1.tgz", + "integrity": "sha512-DykbNHxuXQwUDRv5ibc2b0x7uw7wmwOGLBUd5RmaQ5z8Lhx19vwvKV+FAsM5rEA6dEcHxX+/Ad5s9eF2k2bB+w==", + "requires": { + "colorette": "^1.0.7", + "slice-ansi": "^2.0.0", + "strip-ansi": "^5.0.0" + }, + "dependencies": { + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "ansi-gray": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz", + "integrity": "sha1-KWLPVOyXksSFEKPetSRDaGHvclE=", + "requires": { + "ansi-wrap": "0.1.0" + } + }, + "ansi-red": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-red/-/ansi-red-0.1.1.tgz", + "integrity": "sha1-jGOPnRCAgAo1PJwoyKgcpHBdlGw=", + "requires": { + "ansi-wrap": "0.1.0" + } + }, + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "ansi-wrap": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz", + "integrity": "sha1-qCJQ3bABXponyoLoLqYDu/pF768=" + }, + "any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=" + }, + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "requires": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + } + }, + "apollo-cache": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/apollo-cache/-/apollo-cache-1.3.2.tgz", + "integrity": "sha512-+KA685AV5ETEJfjZuviRTEImGA11uNBp/MJGnaCvkgr+BYRrGLruVKBv6WvyFod27WEB2sp7SsG8cNBKANhGLg==", + "requires": { + "apollo-utilities": "^1.3.2", + "tslib": "^1.9.3" + } + }, + "apollo-client": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/apollo-client/-/apollo-client-2.6.4.tgz", + "integrity": "sha512-oWOwEOxQ9neHHVZrQhHDbI6bIibp9SHgxaLRVPoGvOFy7OH5XUykZE7hBQAVxq99tQjBzgytaZffQkeWo1B4VQ==", + "requires": { + "@types/zen-observable": "^0.8.0", + "apollo-cache": "1.3.2", + "apollo-link": "^1.0.0", + "apollo-utilities": "1.3.2", + "symbol-observable": "^1.0.2", + "ts-invariant": "^0.4.0", + "tslib": "^1.9.3", + "zen-observable": "^0.8.0" + } + }, + "apollo-link": { + "version": "1.2.12", + "resolved": "https://registry.npmjs.org/apollo-link/-/apollo-link-1.2.12.tgz", + "integrity": "sha512-fsgIAXPKThyMVEMWQsUN22AoQI+J/pVXcjRGAShtk97h7D8O+SPskFinCGEkxPeQpE83uKaqafB2IyWdjN+J3Q==", + "requires": { + "apollo-utilities": "^1.3.0", + "ts-invariant": "^0.4.0", + "tslib": "^1.9.3", + "zen-observable-ts": "^0.8.19" + } + }, + "apollo-link-context": { + "version": "1.0.18", + "resolved": "https://registry.npmjs.org/apollo-link-context/-/apollo-link-context-1.0.18.tgz", + "integrity": "sha512-aG5cbUp1zqOHHQjAJXG7n/izeMQ6LApd/whEF5z6qZp5ATvcyfSNkCfy3KRJMMZZ3iNfVTs6jF+IUA8Zvf+zeg==", + "requires": { + "apollo-link": "^1.2.12", + "tslib": "^1.9.3" + } + }, + "apollo-link-http": { + "version": "1.5.15", + "resolved": "https://registry.npmjs.org/apollo-link-http/-/apollo-link-http-1.5.15.tgz", + "integrity": "sha512-epZFhCKDjD7+oNTVK3P39pqWGn4LEhShAoA1Q9e2tDrBjItNfviiE33RmcLcCURDYyW5JA6SMgdODNI4Is8tvQ==", + "requires": { + "apollo-link": "^1.2.12", + "apollo-link-http-common": "^0.2.14", + "tslib": "^1.9.3" + } + }, + "apollo-link-http-common": { + "version": "0.2.16", + "resolved": "https://registry.npmjs.org/apollo-link-http-common/-/apollo-link-http-common-0.2.16.tgz", + "integrity": "sha512-2tIhOIrnaF4UbQHf7kjeQA/EmSorB7+HyJIIrUjJOKBgnXwuexi8aMecRlqTIDWcyVXCeqLhUnztMa6bOH/jTg==", + "requires": { + "apollo-link": "^1.2.14", + "ts-invariant": "^0.4.0", + "tslib": "^1.9.3" + }, + "dependencies": { + "apollo-link": { + "version": "1.2.14", + "resolved": "https://registry.npmjs.org/apollo-link/-/apollo-link-1.2.14.tgz", + "integrity": "sha512-p67CMEFP7kOG1JZ0ZkYZwRDa369w5PIjtMjvrQd/HnIV8FRsHRqLqK+oAZQnFa1DDdZtOtHTi+aMIW6EatC2jg==", + "requires": { + "apollo-utilities": "^1.3.0", + "ts-invariant": "^0.4.0", + "tslib": "^1.9.3", + "zen-observable-ts": "^0.8.21" + } + } + } + }, + "apollo-utilities": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/apollo-utilities/-/apollo-utilities-1.3.2.tgz", + "integrity": "sha512-JWNHj8XChz7S4OZghV6yc9FNnzEXj285QYp/nLNh943iObycI5GTDO3NGR9Dth12LRrSFMeDOConPfPln+WGfg==", + "requires": { + "@wry/equality": "^0.1.2", + "fast-json-stable-stringify": "^2.0.0", + "ts-invariant": "^0.4.0", + "tslib": "^1.9.3" + } + }, + "append-transform": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-1.0.0.tgz", + "integrity": "sha512-P009oYkeHyU742iSZJzZZywj4QRJdnTWffaKuJQLablCZ1uz6/cW4yaRgcDaoQ+uwOxxnt0gRUcwfsNP2ri0gw==", + "dev": true, + "requires": { + "default-require-extensions": "^2.0.0" + } + }, + "archy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", + "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=", + "dev": true + }, + "arg": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.2.tgz", + "integrity": "sha512-+ytCkGcBtHZ3V2r2Z06AncYO8jz46UEamcspGoU8lHcEbpn6J77QK0vdWvChsclg/tM5XIJC5tnjmPp7Eq6Obg==", + "dev": true + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "aria-query": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-3.0.0.tgz", + "integrity": "sha1-ZbP8wcoRVajJrmTW7uKX8V1RM8w=", + "dev": true, + "requires": { + "ast-types-flow": "0.0.7", + "commander": "^2.11.0" + } + }, + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==" + }, + "arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=" + }, + "array-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz", + "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=", + "dev": true + }, + "array-filter": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-0.0.1.tgz", + "integrity": "sha1-fajPLiZijtcygDWB/SH2fKzS7uw=" + }, + "array-find-index": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", + "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", + "dev": true + }, + "array-includes": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.1.tgz", + "integrity": "sha512-c2VXaCHl7zPsvpkFsw4nxvFie4fh1ur9bpcgsVkIjqn0H/Xwdg+7fv3n2r/isyS8EBj5b06M9kHyZuIr4El6WQ==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0", + "is-string": "^1.0.5" + } + }, + "array-map": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/array-map/-/array-map-0.0.0.tgz", + "integrity": "sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI=" + }, + "array-reduce": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/array-reduce/-/array-reduce-0.0.0.tgz", + "integrity": "sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys=" + }, + "array-slice": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-0.2.3.tgz", + "integrity": "sha1-3Tz7gO15c6dRF82sabC5nshhhvU=" + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" + }, + "array.prototype.find": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array.prototype.find/-/array.prototype.find-2.1.0.tgz", + "integrity": "sha512-Wn41+K1yuO5p7wRZDl7890c3xvv5UBrfVXTVIe28rSQb6LS0fZMDrQB6PAcxQFRFy6vJTLDc3A2+3CjQdzVKRg==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.13.0" + } + }, + "array.prototype.flat": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.3.tgz", + "integrity": "sha512-gBlRZV0VSmfPIeWfuuy56XZMvbVfbEUnOXUvt3F/eUUUSyzlgLxhEX4YAEpxNAogRGehPSnfXyPtYyKAhkzQhQ==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1" + } + }, + "arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", + "dev": true + }, + "art": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/art/-/art-0.10.3.tgz", + "integrity": "sha512-HXwbdofRTiJT6qZX/FnchtldzJjS3vkLJxQilc3Xj+ma2MXjY4UAyQ0ls1XZYVnDvVIBiFZbC6QsvtW86TD6tQ==" + }, + "asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" + }, + "asn1": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "dev": true, + "requires": { + "safer-buffer": "~2.1.0" + } + }, + "asn1.js": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", + "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", + "requires": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "assert": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", + "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", + "requires": { + "object-assign": "^4.1.1", + "util": "0.10.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=" + }, + "util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", + "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "requires": { + "inherits": "2.0.1" + } + } + } + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + }, + "assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=" + }, + "ast-types": { + "version": "0.13.3", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.3.tgz", + "integrity": "sha512-XTZ7xGML849LkQP86sWdQzfhwbt3YwIO6MqbX9mUNYY98VKaaVZP7YNNm70IpwecbkkxmfC5IYAzOQ/2p29zRA==" + }, + "ast-types-flow": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", + "integrity": "sha1-9wtzXGvKGlycItmCw+Oef+ujva0=", + "dev": true + }, + "astral-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", + "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==" + }, + "async": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", + "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "requires": { + "lodash": "^4.17.14" + } + }, + "async-hook-domain": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/async-hook-domain/-/async-hook-domain-1.1.3.tgz", + "integrity": "sha512-ZovMxSbADV3+biB7oR1GL5lGyptI24alp0LWHlmz1OFc5oL47pz3EiIF6nXOkDW7yLqih4NtsiYduzdDW0i+Wg==", + "dev": true, + "requires": { + "source-map-support": "^0.5.11" + } + }, + "async-limiter": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", + "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==" + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + }, + "atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" + }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", + "dev": true + }, + "aws4": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.9.0.tgz", + "integrity": "sha512-Uvq6hVe90D0B2WEnUqtdgY1bATGz3mw33nH9Y+dmA+w5DHvUmBgkr5rM/KCHpCsiFNRUfokW/szpPPgMK2hm4A==", + "dev": true + }, + "axobject-query": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.1.1.tgz", + "integrity": "sha512-lF98xa/yvy6j3fBHAgQXIYl+J4eZadOSqsPojemUqClzNbBV38wWGpUbQbVEyf4eUF5yF7eHmGgGA2JiHyjeqw==", + "dev": true, + "requires": { + "@babel/runtime": "^7.7.4", + "@babel/runtime-corejs3": "^7.7.4" + } + }, + "babel-code-frame": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", + "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", + "requires": { + "chalk": "^1.1.3", + "esutils": "^2.0.2", + "js-tokens": "^3.0.2" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "js-tokens": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", + "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=" + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" + } + } + }, + "babel-core": { + "version": "7.0.0-bridge.0", + "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-7.0.0-bridge.0.tgz", + "integrity": "sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==", + "dev": true + }, + "babel-eslint": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-9.0.0.tgz", + "integrity": "sha512-itv1MwE3TMbY0QtNfeL7wzak1mV47Uy+n6HtSOO4Xd7rvmO+tsGQSgyOEEgo6Y2vHZKZphaoelNeSVj4vkLA1g==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "@babel/parser": "^7.0.0", + "@babel/traverse": "^7.0.0", + "@babel/types": "^7.0.0", + "eslint-scope": "3.7.1", + "eslint-visitor-keys": "^1.0.0" + }, + "dependencies": { + "eslint-scope": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.1.tgz", + "integrity": "sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=", + "dev": true, + "requires": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + } + } + }, + "babel-generator": { + "version": "6.26.1", + "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz", + "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==", + "requires": { + "babel-messages": "^6.23.0", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "detect-indent": "^4.0.0", + "jsesc": "^1.3.0", + "lodash": "^4.17.4", + "source-map": "^0.5.7", + "trim-right": "^1.0.1" + }, + "dependencies": { + "jsesc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", + "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=" + } + } + }, + "babel-helper-builder-binary-assignment-operator-visitor": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz", + "integrity": "sha1-zORReto1b0IgvK6KAsKzRvmlZmQ=", + "dev": true, + "requires": { + "babel-helper-explode-assignable-expression": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "babel-helper-builder-react-jsx": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-helper-builder-react-jsx/-/babel-helper-builder-react-jsx-6.26.0.tgz", + "integrity": "sha1-Of+DE7dci2Xc7/HzHTg+D/KkCKA=", + "dev": true, + "requires": { + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "esutils": "^2.0.2" + } + }, + "babel-helper-call-delegate": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz", + "integrity": "sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=", + "dev": true, + "requires": { + "babel-helper-hoist-variables": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "babel-helper-define-map": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz", + "integrity": "sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=", + "dev": true, + "requires": { + "babel-helper-function-name": "^6.24.1", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "lodash": "^4.17.4" + } + }, + "babel-helper-explode-assignable-expression": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz", + "integrity": "sha1-8luCz33BBDPFX3BZLVdGQArCLKo=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "babel-helper-function-name": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz", + "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=", + "dev": true, + "requires": { + "babel-helper-get-function-arity": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "babel-helper-get-function-arity": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz", + "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "babel-helper-hoist-variables": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz", + "integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "babel-helper-optimise-call-expression": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz", + "integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "babel-helper-replace-supers": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz", + "integrity": "sha1-v22/5Dk40XNpohPKiov3S2qQqxo=", + "dev": true, + "requires": { + "babel-helper-optimise-call-expression": "^6.24.1", + "babel-messages": "^6.23.0", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "babel-helpers": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz", + "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=", + "requires": { + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" + } + }, + "babel-jest": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-24.9.0.tgz", + "integrity": "sha512-ntuddfyiN+EhMw58PTNL1ph4C9rECiQXjI4nMMBKBaNjXvqLdkXpPRcMSr4iyBrJg/+wz9brFUD6RhOAT6r4Iw==", + "dev": true, + "requires": { + "@jest/transform": "^24.9.0", + "@jest/types": "^24.9.0", + "@types/babel__core": "^7.1.0", + "babel-plugin-istanbul": "^5.1.0", + "babel-preset-jest": "^24.9.0", + "chalk": "^2.4.2", + "slash": "^2.0.0" + } + }, + "babel-messages": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", + "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-check-es2015-constants": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz", + "integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-dynamic-import-node": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.0.tgz", + "integrity": "sha512-o6qFkpeQEBxcqt0XYlWzAVxNCSCZdUgcR8IRlhD/8DylxjjO4foPcvTW0GGKa/cVt3rvxZ7o5ippJ+/0nvLhlQ==", + "requires": { + "object.assign": "^4.1.0" + } + }, + "babel-plugin-flow-react-proptypes": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/babel-plugin-flow-react-proptypes/-/babel-plugin-flow-react-proptypes-9.2.0.tgz", + "integrity": "sha512-gmClrDpTB1H27mh+6/8iliV5BzGic5F9DO7INAd/30sSkg4XZd7LTbv4z06usuUHS8SzXibwotk8ct51IZ5OaQ==", + "requires": { + "babel-core": "^6.25.0", + "babel-template": "^6.25.0", + "babel-traverse": "^6.25.0", + "babel-types": "^6.25.0" + }, + "dependencies": { + "babel-core": { + "version": "6.26.3", + "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.3.tgz", + "integrity": "sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA==", + "requires": { + "babel-code-frame": "^6.26.0", + "babel-generator": "^6.26.0", + "babel-helpers": "^6.24.1", + "babel-messages": "^6.23.0", + "babel-register": "^6.26.0", + "babel-runtime": "^6.26.0", + "babel-template": "^6.26.0", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "convert-source-map": "^1.5.1", + "debug": "^2.6.9", + "json5": "^0.5.1", + "lodash": "^4.17.4", + "minimatch": "^3.0.4", + "path-is-absolute": "^1.0.1", + "private": "^0.1.8", + "slash": "^1.0.0", + "source-map": "^0.5.7" + } + }, + "json5": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", + "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=" + }, + "slash": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", + "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=" + } + } + }, + "babel-plugin-import-glob": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/babel-plugin-import-glob/-/babel-plugin-import-glob-2.0.0.tgz", + "integrity": "sha1-gONICXMohcW8uHY3RMNM3bNxY8o=", + "dev": true, + "requires": { + "glob": "^7.0.0", + "identifierfy": "^1.1.0", + "minimatch-capture": "^1.1.0" + } + }, + "babel-plugin-istanbul": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-5.2.0.tgz", + "integrity": "sha512-5LphC0USA8t4i1zCtjbbNb6jJj/9+X6P37Qfirc/70EQ34xKlMW+a1RHGwxGI+SwWpNwZ27HqvzAobeqaXwiZw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "find-up": "^3.0.0", + "istanbul-lib-instrument": "^3.3.0", + "test-exclude": "^5.2.3" + } + }, + "babel-plugin-jest-hoist": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-24.9.0.tgz", + "integrity": "sha512-2EMA2P8Vp7lG0RAzr4HXqtYwacfMErOuv1U3wrvxHX6rD1sV6xS3WXG3r8TRQ2r6w8OhvSdWt+z41hQNwNm3Xw==", + "dev": true, + "requires": { + "@types/babel__traverse": "^7.0.6" + } + }, + "babel-plugin-macros": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-2.8.0.tgz", + "integrity": "sha512-SEP5kJpfGYqYKpBrj5XU3ahw5p5GOHJ0U5ssOSQ/WBVdwkD2Dzlce95exQTs3jOVWPPKLBN2rlEWkCK7dSmLvg==", + "dev": true, + "requires": { + "@babel/runtime": "^7.7.2", + "cosmiconfig": "^6.0.0", + "resolve": "^1.12.0" + }, + "dependencies": { + "cosmiconfig": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", + "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", + "dev": true, + "requires": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.7.2" + } + }, + "import-fresh": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz", + "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "parse-json": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.0.0.tgz", + "integrity": "sha512-OOY5b7PAEFV0E2Fir1KOkxchnZNCdowAJgQ5NuxjpBKTRP3pQhwkrkxqQjeoKJ+fO7bCpmIZaogI4eZGDMEGOw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1", + "lines-and-columns": "^1.1.6" + } + }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + } + } + }, + "babel-plugin-module-resolver": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/babel-plugin-module-resolver/-/babel-plugin-module-resolver-3.2.0.tgz", + "integrity": "sha512-tjR0GvSndzPew/Iayf4uICWZqjBwnlMWjSx6brryfQ81F9rxBVqwDJtFCV8oOs0+vJeefK9TmdZtkIFdFe1UnA==", + "dev": true, + "requires": { + "find-babel-config": "^1.1.0", + "glob": "^7.1.2", + "pkg-up": "^2.0.0", + "reselect": "^3.0.1", + "resolve": "^1.4.0" + }, + "dependencies": { + "reselect": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/reselect/-/reselect-3.0.1.tgz", + "integrity": "sha1-79qpjqdFEyTQkrKyFjpqHXqaIUc=", + "dev": true + } + } + }, + "babel-plugin-react-transform": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/babel-plugin-react-transform/-/babel-plugin-react-transform-2.0.2.tgz", + "integrity": "sha1-UVu/qZaJOYEULZCx+bFjXeKZUQk=", + "dev": true, + "requires": { + "lodash": "^4.6.1" + } + }, + "babel-plugin-relay": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/babel-plugin-relay/-/babel-plugin-relay-1.7.0.tgz", + "integrity": "sha512-4kDgElsQ3+m1YHGinm2CWu55XzpPqEzf42JuYWUAJWvTBcHkd/VGVftO9C6BjnssUU7fDH9izn3qMtp0XFWGKw==", + "dev": true, + "requires": { + "babel-plugin-macros": "^2.0.0", + "babel-runtime": "^6.23.0", + "babel-types": "^6.24.1" + } + }, + "babel-plugin-syntax-async-functions": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz", + "integrity": "sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU=", + "dev": true + }, + "babel-plugin-syntax-class-constructor-call": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-class-constructor-call/-/babel-plugin-syntax-class-constructor-call-6.18.0.tgz", + "integrity": "sha1-nLnTn+Q8hgC+yBRkVt3L1OGnZBY=", + "dev": true + }, + "babel-plugin-syntax-class-properties": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-class-properties/-/babel-plugin-syntax-class-properties-6.13.0.tgz", + "integrity": "sha1-1+sjt5oxf4VDlixQW4J8fWysJ94=", + "dev": true + }, + "babel-plugin-syntax-decorators": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-decorators/-/babel-plugin-syntax-decorators-6.13.0.tgz", + "integrity": "sha1-MSVjtNvePMgGzuPkFszurd0RrAs=", + "dev": true + }, + "babel-plugin-syntax-do-expressions": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-do-expressions/-/babel-plugin-syntax-do-expressions-6.13.0.tgz", + "integrity": "sha1-V0d1YTmqJtOQ0JQQsDdEugfkeW0=", + "dev": true + }, + "babel-plugin-syntax-exponentiation-operator": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz", + "integrity": "sha1-nufoM3KQ2pUoggGmpX9BcDF4MN4=", + "dev": true + }, + "babel-plugin-syntax-export-extensions": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-export-extensions/-/babel-plugin-syntax-export-extensions-6.13.0.tgz", + "integrity": "sha1-cKFITw+QiaToStRLrDU8lbmxJyE=", + "dev": true + }, + "babel-plugin-syntax-flow": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-flow/-/babel-plugin-syntax-flow-6.18.0.tgz", + "integrity": "sha1-TDqyCiryaqIM0lmVw5jE63AxDI0=", + "dev": true + }, + "babel-plugin-syntax-function-bind": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-function-bind/-/babel-plugin-syntax-function-bind-6.13.0.tgz", + "integrity": "sha1-SMSV8Xe98xqYHnMvVa3AvdJgH0Y=", + "dev": true + }, + "babel-plugin-syntax-jsx": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz", + "integrity": "sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY=", + "dev": true + }, + "babel-plugin-syntax-object-rest-spread": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz", + "integrity": "sha1-/WU28rzhODb/o6VFjEkDpZe7O/U=", + "dev": true + }, + "babel-plugin-syntax-trailing-function-commas": { + "version": "7.0.0-beta.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-7.0.0-beta.0.tgz", + "integrity": "sha512-Xj9XuRuz3nTSbaTXWv3itLOcxyF4oPD8douBBmj7U9BBC6nEBYfyOJYQMf/8PJAFotC62UY5dFfIGEPr7WswzQ==" + }, + "babel-plugin-transform-class-constructor-call": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-class-constructor-call/-/babel-plugin-transform-class-constructor-call-6.24.1.tgz", + "integrity": "sha1-gNwoVQWsBn3LjWxl4vbxGrd2Xvk=", + "dev": true, + "requires": { + "babel-plugin-syntax-class-constructor-call": "^6.18.0", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" + } + }, + "babel-plugin-transform-class-properties": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.24.1.tgz", + "integrity": "sha1-anl2PqYdM9NvN7YRqp3vgagbRqw=", + "dev": true, + "requires": { + "babel-helper-function-name": "^6.24.1", + "babel-plugin-syntax-class-properties": "^6.8.0", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" + } + }, + "babel-plugin-transform-decorators-legacy": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-decorators-legacy/-/babel-plugin-transform-decorators-legacy-1.3.5.tgz", + "integrity": "sha512-jYHwjzRXRelYQ1uGm353zNzf3QmtdCfvJbuYTZ4gKveK7M9H1fs3a5AKdY1JUDl0z97E30ukORW1dzhWvsabtA==", + "dev": true, + "requires": { + "babel-plugin-syntax-decorators": "^6.1.18", + "babel-runtime": "^6.2.0", + "babel-template": "^6.3.0" + } + }, + "babel-plugin-transform-do-expressions": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-do-expressions/-/babel-plugin-transform-do-expressions-6.22.0.tgz", + "integrity": "sha1-KMyvkoEtlJws0SgfaQyP3EaK6bs=", + "dev": true, + "requires": { + "babel-plugin-syntax-do-expressions": "^6.8.0", + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-es2015-arrow-functions": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz", + "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-es2015-block-scoping": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz", + "integrity": "sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=", + "dev": true, + "requires": { + "babel-runtime": "^6.26.0", + "babel-template": "^6.26.0", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "lodash": "^4.17.4" + } + }, + "babel-plugin-transform-es2015-classes": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz", + "integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=", + "dev": true, + "requires": { + "babel-helper-define-map": "^6.24.1", + "babel-helper-function-name": "^6.24.1", + "babel-helper-optimise-call-expression": "^6.24.1", + "babel-helper-replace-supers": "^6.24.1", + "babel-messages": "^6.23.0", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "babel-plugin-transform-es2015-computed-properties": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz", + "integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" + } + }, + "babel-plugin-transform-es2015-destructuring": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz", + "integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-es2015-for-of": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz", + "integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-es2015-function-name": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz", + "integrity": "sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=", + "dev": true, + "requires": { + "babel-helper-function-name": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "babel-plugin-transform-es2015-literals": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz", + "integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-es2015-modules-commonjs": { + "version": "6.26.2", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz", + "integrity": "sha512-CV9ROOHEdrjcwhIaJNBGMBCodN+1cfkwtM1SbUHmvyy35KGT7fohbpOxkE2uLz1o6odKK2Ck/tz47z+VqQfi9Q==", + "dev": true, + "requires": { + "babel-plugin-transform-strict-mode": "^6.24.1", + "babel-runtime": "^6.26.0", + "babel-template": "^6.26.0", + "babel-types": "^6.26.0" + } + }, + "babel-plugin-transform-es2015-parameters": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz", + "integrity": "sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=", + "dev": true, + "requires": { + "babel-helper-call-delegate": "^6.24.1", + "babel-helper-get-function-arity": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "babel-plugin-transform-es2015-shorthand-properties": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz", + "integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "babel-plugin-transform-es2015-spread": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz", + "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-es2015-template-literals": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz", + "integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-exponentiation-operator": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz", + "integrity": "sha1-KrDJx/MJj6SJB3cruBP+QejeOg4=", + "dev": true, + "requires": { + "babel-helper-builder-binary-assignment-operator-visitor": "^6.24.1", + "babel-plugin-syntax-exponentiation-operator": "^6.8.0", + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-export-extensions": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-export-extensions/-/babel-plugin-transform-export-extensions-6.22.0.tgz", + "integrity": "sha1-U3OLR+deghhYnuqUbLvTkQm75lM=", + "dev": true, + "requires": { + "babel-plugin-syntax-export-extensions": "^6.8.0", + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-flow-strip-types": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-flow-strip-types/-/babel-plugin-transform-flow-strip-types-6.22.0.tgz", + "integrity": "sha1-hMtnKTXUNxT9wyvOhFaNh0Qc988=", + "dev": true, + "requires": { + "babel-plugin-syntax-flow": "^6.18.0", + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-function-bind": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-function-bind/-/babel-plugin-transform-function-bind-6.22.0.tgz", + "integrity": "sha1-xvuOlqwpajELjPjqQBRiQH3fapc=", + "dev": true, + "requires": { + "babel-plugin-syntax-function-bind": "^6.8.0", + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-object-assign": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-object-assign/-/babel-plugin-transform-object-assign-6.22.0.tgz", + "integrity": "sha1-+Z0vZvGgsNSY40bFNZaEdAyqILo=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-object-rest-spread": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz", + "integrity": "sha1-DzZpLVD+9rfi1LOsFHgTepY7ewY=", + "dev": true, + "requires": { + "babel-plugin-syntax-object-rest-spread": "^6.8.0", + "babel-runtime": "^6.26.0" + } + }, + "babel-plugin-transform-react-display-name": { + "version": "6.25.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-display-name/-/babel-plugin-transform-react-display-name-6.25.0.tgz", + "integrity": "sha1-Z+K/Hx6ck6sI25Z5LgU5K/LMKNE=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-react-jsx": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-jsx/-/babel-plugin-transform-react-jsx-6.24.1.tgz", + "integrity": "sha1-hAoCjn30YN/DotKfDA2R9jduZqM=", + "dev": true, + "requires": { + "babel-helper-builder-react-jsx": "^6.24.1", + "babel-plugin-syntax-jsx": "^6.8.0", + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-react-jsx-source": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-jsx-source/-/babel-plugin-transform-react-jsx-source-6.22.0.tgz", + "integrity": "sha1-ZqwSFT9c0tF7PBkmj0vwGX9E7NY=", + "dev": true, + "requires": { + "babel-plugin-syntax-jsx": "^6.8.0", + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-regenerator": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz", + "integrity": "sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8=", + "dev": true, + "requires": { + "regenerator-transform": "^0.10.0" + }, + "dependencies": { + "regenerator-transform": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.10.1.tgz", + "integrity": "sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q==", + "dev": true, + "requires": { + "babel-runtime": "^6.18.0", + "babel-types": "^6.19.0", + "private": "^0.1.6" + } + } + } + }, + "babel-plugin-transform-strict-mode": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz", + "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "babel-polyfill": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.23.0.tgz", + "integrity": "sha1-g2TKYt+Or7gwSZ9pkXdGbDsDSZ0=", + "requires": { + "babel-runtime": "^6.22.0", + "core-js": "^2.4.0", + "regenerator-runtime": "^0.10.0" + }, + "dependencies": { + "core-js": { + "version": "2.6.11", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.11.tgz", + "integrity": "sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg==" + }, + "regenerator-runtime": { + "version": "0.10.5", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz", + "integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg=" + } + } + }, + "babel-preset-fbjs": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/babel-preset-fbjs/-/babel-preset-fbjs-3.3.0.tgz", + "integrity": "sha512-7QTLTCd2gwB2qGoi5epSULMHugSVgpcVt5YAeiFO9ABLrutDQzKfGwzxgZHLpugq8qMdg/DhRZDZ5CLKxBkEbw==", + "requires": { + "@babel/plugin-proposal-class-properties": "^7.0.0", + "@babel/plugin-proposal-object-rest-spread": "^7.0.0", + "@babel/plugin-syntax-class-properties": "^7.0.0", + "@babel/plugin-syntax-flow": "^7.0.0", + "@babel/plugin-syntax-jsx": "^7.0.0", + "@babel/plugin-syntax-object-rest-spread": "^7.0.0", + "@babel/plugin-transform-arrow-functions": "^7.0.0", + "@babel/plugin-transform-block-scoped-functions": "^7.0.0", + "@babel/plugin-transform-block-scoping": "^7.0.0", + "@babel/plugin-transform-classes": "^7.0.0", + "@babel/plugin-transform-computed-properties": "^7.0.0", + "@babel/plugin-transform-destructuring": "^7.0.0", + "@babel/plugin-transform-flow-strip-types": "^7.0.0", + "@babel/plugin-transform-for-of": "^7.0.0", + "@babel/plugin-transform-function-name": "^7.0.0", + "@babel/plugin-transform-literals": "^7.0.0", + "@babel/plugin-transform-member-expression-literals": "^7.0.0", + "@babel/plugin-transform-modules-commonjs": "^7.0.0", + "@babel/plugin-transform-object-super": "^7.0.0", + "@babel/plugin-transform-parameters": "^7.0.0", + "@babel/plugin-transform-property-literals": "^7.0.0", + "@babel/plugin-transform-react-display-name": "^7.0.0", + "@babel/plugin-transform-react-jsx": "^7.0.0", + "@babel/plugin-transform-shorthand-properties": "^7.0.0", + "@babel/plugin-transform-spread": "^7.0.0", + "@babel/plugin-transform-template-literals": "^7.0.0", + "babel-plugin-syntax-trailing-function-commas": "^7.0.0-beta.0" + } + }, + "babel-preset-jest": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-24.9.0.tgz", + "integrity": "sha512-izTUuhE4TMfTRPF92fFwD2QfdXaZW08qvWTFCI51V8rW5x00UuPgc3ajRoWofXOuxjfcOM5zzSYsQS3H8KGCAg==", + "dev": true, + "requires": { + "@babel/plugin-syntax-object-rest-spread": "^7.0.0", + "babel-plugin-jest-hoist": "^24.9.0" + } + }, + "babel-preset-react-native": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/babel-preset-react-native/-/babel-preset-react-native-1.9.2.tgz", + "integrity": "sha1-sird0uNV/zs5Zxt5voB+Ut+hRfI=", + "dev": true, + "requires": { + "babel-plugin-check-es2015-constants": "^6.5.0", + "babel-plugin-react-transform": "2.0.2", + "babel-plugin-syntax-async-functions": "^6.5.0", + "babel-plugin-syntax-class-properties": "^6.5.0", + "babel-plugin-syntax-flow": "^6.5.0", + "babel-plugin-syntax-jsx": "^6.5.0", + "babel-plugin-syntax-trailing-function-commas": "^6.5.0", + "babel-plugin-transform-class-properties": "^6.5.0", + "babel-plugin-transform-es2015-arrow-functions": "^6.5.0", + "babel-plugin-transform-es2015-block-scoping": "^6.5.0", + "babel-plugin-transform-es2015-classes": "^6.5.0", + "babel-plugin-transform-es2015-computed-properties": "^6.5.0", + "babel-plugin-transform-es2015-destructuring": "^6.5.0", + "babel-plugin-transform-es2015-for-of": "^6.5.0", + "babel-plugin-transform-es2015-function-name": "^6.5.0", + "babel-plugin-transform-es2015-literals": "^6.5.0", + "babel-plugin-transform-es2015-modules-commonjs": "^6.5.0", + "babel-plugin-transform-es2015-parameters": "^6.5.0", + "babel-plugin-transform-es2015-shorthand-properties": "^6.5.0", + "babel-plugin-transform-es2015-spread": "^6.5.0", + "babel-plugin-transform-es2015-template-literals": "^6.5.0", + "babel-plugin-transform-flow-strip-types": "^6.5.0", + "babel-plugin-transform-object-assign": "^6.5.0", + "babel-plugin-transform-object-rest-spread": "^6.5.0", + "babel-plugin-transform-react-display-name": "^6.5.0", + "babel-plugin-transform-react-jsx": "^6.5.0", + "babel-plugin-transform-react-jsx-source": "^6.5.0", + "babel-plugin-transform-regenerator": "^6.5.0", + "react-transform-hmr": "^1.0.4" + }, + "dependencies": { + "babel-plugin-syntax-trailing-function-commas": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz", + "integrity": "sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM=", + "dev": true + } + } + }, + "babel-preset-react-native-stage-0": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/babel-preset-react-native-stage-0/-/babel-preset-react-native-stage-0-1.0.1.tgz", + "integrity": "sha1-1fX2hVdUce91aknxkbGTJp90MG4=", + "dev": true, + "requires": { + "babel-plugin-syntax-trailing-function-commas": "^6.5.0", + "babel-plugin-transform-class-constructor-call": "^6.6.5", + "babel-plugin-transform-decorators-legacy": "^1.3.4", + "babel-plugin-transform-do-expressions": "^6.5.0", + "babel-plugin-transform-exponentiation-operator": "^6.5.0", + "babel-plugin-transform-export-extensions": "^6.5.0", + "babel-plugin-transform-function-bind": "^6.5.2", + "babel-preset-react-native": "^1.5.6" + }, + "dependencies": { + "babel-plugin-syntax-trailing-function-commas": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz", + "integrity": "sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM=", + "dev": true + } + } + }, + "babel-register": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz", + "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=", + "requires": { + "babel-core": "^6.26.0", + "babel-runtime": "^6.26.0", + "core-js": "^2.5.0", + "home-or-tmp": "^2.0.0", + "lodash": "^4.17.4", + "mkdirp": "^0.5.1", + "source-map-support": "^0.4.15" + }, + "dependencies": { + "babel-core": { + "version": "6.26.3", + "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.3.tgz", + "integrity": "sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA==", + "requires": { + "babel-code-frame": "^6.26.0", + "babel-generator": "^6.26.0", + "babel-helpers": "^6.24.1", + "babel-messages": "^6.23.0", + "babel-register": "^6.26.0", + "babel-runtime": "^6.26.0", + "babel-template": "^6.26.0", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "convert-source-map": "^1.5.1", + "debug": "^2.6.9", + "json5": "^0.5.1", + "lodash": "^4.17.4", + "minimatch": "^3.0.4", + "path-is-absolute": "^1.0.1", + "private": "^0.1.8", + "slash": "^1.0.0", + "source-map": "^0.5.7" + } + }, + "core-js": { + "version": "2.6.11", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.11.tgz", + "integrity": "sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg==" + }, + "json5": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", + "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=" + }, + "slash": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", + "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=" + }, + "source-map-support": { + "version": "0.4.18", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", + "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", + "requires": { + "source-map": "^0.5.6" + } + } + } + }, + "babel-runtime": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", + "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", + "requires": { + "core-js": "^2.4.0", + "regenerator-runtime": "^0.11.0" + }, + "dependencies": { + "core-js": { + "version": "2.6.11", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.11.tgz", + "integrity": "sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg==" + }, + "regenerator-runtime": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" + } + } + }, + "babel-template": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", + "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", + "requires": { + "babel-runtime": "^6.26.0", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "lodash": "^4.17.4" + } + }, + "babel-traverse": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", + "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", + "requires": { + "babel-code-frame": "^6.26.0", + "babel-messages": "^6.23.0", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "debug": "^2.6.8", + "globals": "^9.18.0", + "invariant": "^2.2.2", + "lodash": "^4.17.4" + }, + "dependencies": { + "globals": { + "version": "9.18.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", + "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==" + } + } + }, + "babel-types": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", + "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", + "requires": { + "babel-runtime": "^6.26.0", + "esutils": "^2.0.2", + "lodash": "^4.17.4", + "to-fast-properties": "^1.0.3" + }, + "dependencies": { + "to-fast-properties": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", + "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=" + } + } + }, + "babylon": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", + "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==" + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + }, + "base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "requires": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "base-64": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/base-64/-/base-64-0.1.0.tgz", + "integrity": "sha1-eAqZyE59YAJgNhURxId2E78k9rs=" + }, + "base64-js": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", + "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==" + }, + "basic-auth": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", + "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", + "requires": { + "safe-buffer": "5.1.2" + } + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "dev": true, + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "big-integer": { + "version": "1.6.48", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.48.tgz", + "integrity": "sha512-j51egjPa7/i+RdiRuJbPdJ2FIUYYPhvYLjzoYbcMMm62ooO6F94fETG4MTs46zPAF9Brs04OajboA/qTGuz78w==" + }, + "binary-extensions": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.0.0.tgz", + "integrity": "sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow==", + "dev": true + }, + "bind-obj-methods": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/bind-obj-methods/-/bind-obj-methods-2.0.0.tgz", + "integrity": "sha512-3/qRXczDi2Cdbz6jE+W3IflJOutRVica8frpBn14de1mBOkzDo+6tY33kNhvkw54Kn3PzRRD2VnGbGPcTAk4sw==", + "dev": true + }, + "bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "optional": true, + "requires": { + "file-uri-to-path": "1.0.0" + } + }, + "bl": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/bl/-/bl-0.8.2.tgz", + "integrity": "sha1-yba8oI0bwuoA/Ir7Txpf0eHGbk4=", + "requires": { + "readable-stream": "~1.0.26" + } + }, + "bluebird": { + "version": "3.5.5", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.5.tgz", + "integrity": "sha512-5am6HnnfN+urzt4yfg7IgTbotDjIT/u8AJpEt0sIU9FtXfVeezXAPKswrG+xKUCOYAINpSdgZVDU6QFh+cuH3w==", + "dev": true + }, + "bn.js": { + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", + "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==" + }, + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=" + }, + "bplist-creator": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/bplist-creator/-/bplist-creator-0.0.8.tgz", + "integrity": "sha512-Za9JKzD6fjLC16oX2wsXfc+qBEhJBJB1YPInoAQpMLhDuj5aVOv1baGeIQSq1Fr3OCqzvsoQcSBSwGId/Ja2PA==", + "requires": { + "stream-buffers": "~2.2.0" + } + }, + "bplist-parser": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.2.0.tgz", + "integrity": "sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==", + "requires": { + "big-integer": "^1.6.44" + } + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" + }, + "browser-process-hrtime": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", + "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", + "dev": true + }, + "browser-resolve": { + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.3.tgz", + "integrity": "sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==", + "dev": true, + "requires": { + "resolve": "1.1.7" + }, + "dependencies": { + "resolve": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", + "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", + "dev": true + } + } + }, + "browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true + }, + "browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "requires": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "browserify-cipher": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", + "requires": { + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" + } + }, + "browserify-des": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", + "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", + "requires": { + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "browserify-rsa": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", + "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", + "requires": { + "bn.js": "^4.1.0", + "randombytes": "^2.0.1" + } + }, + "browserify-sign": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz", + "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", + "requires": { + "bn.js": "^4.1.1", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.2", + "elliptic": "^6.0.0", + "inherits": "^2.0.1", + "parse-asn1": "^5.0.0" + } + }, + "browserify-zlib": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.1.4.tgz", + "integrity": "sha1-uzX4pRn2AOD6a4SFJByXnQFB+y0=", + "requires": { + "pako": "~0.2.0" + } + }, + "browserslist": { + "version": "4.8.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.8.2.tgz", + "integrity": "sha512-+M4oeaTplPm/f1pXDw84YohEv7B1i/2Aisei8s4s6k3QsoSHa7i5sz8u/cGQkkatCPxMASKxPualR4wwYgVboA==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001015", + "electron-to-chromium": "^1.3.322", + "node-releases": "^1.1.42" + } + }, + "bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "requires": { + "node-int64": "^0.4.0" + } + }, + "buffer": { + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", + "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + } + }, + "buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=" + }, + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" + }, + "buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=" + }, + "bunyan": { + "version": "1.8.12", + "resolved": "https://registry.npmjs.org/bunyan/-/bunyan-1.8.12.tgz", + "integrity": "sha1-8VDw9nSKvdcq6uhPBEA74u8RN5c=", + "dev": true, + "requires": { + "dtrace-provider": "~0.8", + "moment": "^2.10.6", + "mv": "~2", + "safe-json-stringify": "~1" + } + }, + "bunyan-debug-stream": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/bunyan-debug-stream/-/bunyan-debug-stream-1.1.1.tgz", + "integrity": "sha512-jJbQ1gXUL6vMmZVdbaTFK1v1sGa7axLrSQQwkB6HU9HCPTzsw2HsKcPHm1vgXZlEck/4IvEuRwg/9+083YelCg==", + "dev": true, + "requires": { + "colors": "^1.0.3", + "exception-formatter": "^1.0.4" + }, + "dependencies": { + "colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", + "dev": true + } + } + }, + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" + }, + "cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "requires": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + } + }, + "caching-transform": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-3.0.2.tgz", + "integrity": "sha512-Mtgcv3lh3U0zRii/6qVgQODdPA4G3zhG+jtbCWj39RXuUFTMzH0vcdMtaJS1jPowd+It2Pqr6y3NJMQqOqCE2w==", + "dev": true, + "requires": { + "hasha": "^3.0.0", + "make-dir": "^2.0.0", + "package-hash": "^3.0.0", + "write-file-atomic": "^2.4.2" + }, + "dependencies": { + "write-file-atomic": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", + "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.2" + } + } + } + }, + "caller-callsite": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", + "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=", + "requires": { + "callsites": "^2.0.0" + } + }, + "caller-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", + "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=", + "requires": { + "caller-callsite": "^2.0.0" + } + }, + "callsite": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", + "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=" + }, + "callsites": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", + "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=" + }, + "camel-case": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-1.2.2.tgz", + "integrity": "sha1-Gsp8TRlTWaLOmVV5NDPG5VQlEfI=", + "requires": { + "sentence-case": "^1.1.1", + "upper-case": "^1.1.1" + } + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" + }, + "camelcase-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-4.2.0.tgz", + "integrity": "sha1-oqpfsa9oh1glnDLBQUJteJI7m3c=", + "dev": true, + "requires": { + "camelcase": "^4.1.0", + "map-obj": "^2.0.0", + "quick-lru": "^1.0.0" + }, + "dependencies": { + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "dev": true + } + } + }, + "caniuse-db": { + "version": "1.0.30001016", + "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30001016.tgz", + "integrity": "sha512-4G/7ef/NFSAsn9nFIiPvQr+ayoeLJP3wnQH23BPBJKofNdxFild5dokOjUj4tLFA5yd/VHllhzX55IPLwXhRtg==" + }, + "caniuse-lite": { + "version": "1.0.30001016", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001016.tgz", + "integrity": "sha512-yYQ2QfotceRiH4U+h1Us86WJXtVHDmy3nEKIdYPsZCYnOV5/tMgGbmoIlrMzmh2VXlproqYtVaKeGDBkMZifFA==", + "dev": true + }, + "capture-exit": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz", + "integrity": "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==", + "requires": { + "rsvp": "^4.8.4" + } + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "dev": true + }, + "center-align": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", + "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", + "requires": { + "align-text": "^0.1.3", + "lazy-cache": "^1.0.3" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "change-case": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/change-case/-/change-case-2.3.1.tgz", + "integrity": "sha1-LE/ePwY7tB0AzWjg1aCdthy+iU8=", + "requires": { + "camel-case": "^1.1.1", + "constant-case": "^1.1.0", + "dot-case": "^1.1.0", + "is-lower-case": "^1.1.0", + "is-upper-case": "^1.1.0", + "lower-case": "^1.1.1", + "lower-case-first": "^1.0.0", + "param-case": "^1.1.0", + "pascal-case": "^1.1.0", + "path-case": "^1.1.0", + "sentence-case": "^1.1.1", + "snake-case": "^1.1.0", + "swap-case": "^1.1.0", + "title-case": "^1.1.0", + "upper-case": "^1.1.1", + "upper-case-first": "^1.1.0" + } + }, + "chardet": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz", + "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=" + }, + "cheerio": { + "version": "1.0.0-rc.3", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.3.tgz", + "integrity": "sha512-0td5ijfUPuubwLUu0OBoe98gZj8C/AA+RW3v67GPlGOrvxWjZmBXiBCRU+I8VEiNyJzjth40POfHiz2RB3gImA==", + "dev": true, + "requires": { + "css-select": "~1.2.0", + "dom-serializer": "~0.1.1", + "entities": "~1.1.1", + "htmlparser2": "^3.9.1", + "lodash": "^4.15.0", + "parse5": "^3.0.1" + }, + "dependencies": { + "css-select": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", + "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", + "dev": true, + "requires": { + "boolbase": "~1.0.0", + "css-what": "2.1", + "domutils": "1.5.1", + "nth-check": "~1.0.1" + } + }, + "css-what": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz", + "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==", + "dev": true + }, + "dom-serializer": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz", + "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==", + "dev": true, + "requires": { + "domelementtype": "^1.3.0", + "entities": "^1.1.1" + } + }, + "domutils": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", + "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", + "dev": true, + "requires": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "entities": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", + "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", + "dev": true + } + } + }, + "child-process-promise": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/child-process-promise/-/child-process-promise-2.2.1.tgz", + "integrity": "sha1-RzChHvYQ+tRQuPIjx50x172tgHQ=", + "dev": true, + "requires": { + "cross-spawn": "^4.0.2", + "node-version": "^1.0.0", + "promise-polyfill": "^6.0.1" + }, + "dependencies": { + "cross-spawn": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-4.0.2.tgz", + "integrity": "sha1-e5JHYhwjrf3ThWAEqCPL45dCTUE=", + "dev": true, + "requires": { + "lru-cache": "^4.0.1", + "which": "^1.2.9" + } + } + } + }, + "chokidar": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.3.1.tgz", + "integrity": "sha512-4QYCEWOcK3OJrxwvyyAOxFuhpvOVCYkr33LPfFNBjAD/w3sEzWsp2BUOkI4l9bHvWioAd0rc6NlHUOEaWkTeqg==", + "dev": true, + "requires": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "fsevents": "~2.1.2", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.3.0" + }, + "dependencies": { + "anymatch": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", + "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "fsevents": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.2.tgz", + "integrity": "sha512-R4wDiBwZ0KzpgOWetKDug1FZcYhqYnUYKtfZYt4mD5SBz76q0KR4Q9o7GIPamsVPGmW3EYPPJ0dOOjvx32ldZA==", + "dev": true, + "optional": true + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + } + } + }, + "ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" + }, + "cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "requires": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "clean-css": { + "version": "3.4.28", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-3.4.28.tgz", + "integrity": "sha1-vxlF6C/ICPVWlebd6uwBQA79A/8=", + "requires": { + "commander": "2.8.x", + "source-map": "0.4.x" + }, + "dependencies": { + "commander": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.8.1.tgz", + "integrity": "sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=", + "requires": { + "graceful-readlink": ">= 1.0.0" + } + }, + "source-map": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", + "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", + "requires": { + "amdefine": ">=0.0.4" + } + } + } + }, + "cli": { + "version": "0.6.6", + "resolved": "https://registry.npmjs.org/cli/-/cli-0.6.6.tgz", + "integrity": "sha1-Aq1Eo4Cr8nraxebwzdewQ9dMU+M=", + "requires": { + "exit": "0.1.2", + "glob": "~ 3.2.1" + }, + "dependencies": { + "glob": { + "version": "3.2.11", + "resolved": "https://registry.npmjs.org/glob/-/glob-3.2.11.tgz", + "integrity": "sha1-Spc/Y1uRkPcV0QmH1cAP0oFevj0=", + "requires": { + "inherits": "2", + "minimatch": "0.3" + } + }, + "lru-cache": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz", + "integrity": "sha1-bUUk6LlV+V1PW1iFHOId1y+06VI=" + }, + "minimatch": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.3.0.tgz", + "integrity": "sha1-J12O2qxPG7MyZHIInnlJyDlGmd0=", + "requires": { + "lru-cache": "2", + "sigmund": "~1.0.0" + } + } + } + }, + "cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", + "requires": { + "restore-cursor": "^2.0.0" + } + }, + "cli-spinners": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.2.0.tgz", + "integrity": "sha512-tgU3fKwzYjiLEQgPMD9Jt+JjHVL9kW93FiIMX/l7rivvOD4/LL0Mf7gda3+4U2KJBloybwgj5KEoQgGRioMiKQ==" + }, + "cli-width": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", + "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=" + }, + "cliui": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wrap-ansi": "^2.0.0" + }, + "dependencies": { + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + } + } + }, + "clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=" + }, + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" + }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" + }, + "code-push": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/code-push/-/code-push-3.1.3.tgz", + "integrity": "sha512-K/m87JT3s8Cyi1j9aGmOEx+QQrES1DY+k1VdEXmVEhleUr60tdMSqhhn0KqJr4x7RUmcJ4RmaoBn/UBMqdjpVQ==", + "requires": { + "q": "^1.5.1", + "recursive-fs": "^2.1.0", + "slash": "^3.0.0", + "superagent": "^5.2.1", + "superagent-proxy": "^2.0.0", + "yazl": "^2.5.1" + }, + "dependencies": { + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" + } + } + }, + "coffee-script": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.6.3.tgz", + "integrity": "sha1-Y1XTLPGwTN/2tITl5xF4Ky8MOb4=", + "dev": true + }, + "collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "requires": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==" + }, + "colorette": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.1.0.tgz", + "integrity": "sha512-6S062WDQUXi6hOfkO/sBPVwE5ASXY4G2+b4atvhJfSsuUUhIaUKlkjLe9692Ipyt5/a+IPF5aVTu3V5gvXq5cg==" + }, + "colors": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/colors/-/colors-0.6.2.tgz", + "integrity": "sha1-JCP+ZnisDF2uiFLl0OW+CMmXq8w=", + "dev": true + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "command-exists": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.8.tgz", + "integrity": "sha512-PM54PkseWbiiD/mMsbvW351/u+dafwTJ0ye2qB60G1aGQP9j3xK2gmMDc+R34L3nDtx4qMCitXT75mkbkGJDLw==" + }, + "commander": { + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.13.0.tgz", + "integrity": "sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA==" + }, + "common-tags": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.0.tgz", + "integrity": "sha512-6P6g0uetGpW/sdyUy/iQQCbFF0kWVMSIVSyYz7Zgjcgh8mgw8PQzDNZeyZ5DQ2gM7LBoZPHmnjz8rUthkBG5tw==", + "dev": true + }, + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=" + }, + "component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" + }, + "compressible": { + "version": "2.0.17", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.17.tgz", + "integrity": "sha512-BGHeLCK1GV7j1bSmQQAi26X+GgWcTjLr/0tzSvMCl3LH1w1IJ4PFSPoV5316b30cneTziC+B1a+3OjoSUcQYmw==", + "requires": { + "mime-db": ">= 1.40.0 < 2" + }, + "dependencies": { + "mime-db": { + "version": "1.42.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.42.0.tgz", + "integrity": "sha512-UbfJCR4UAVRNgMpfImz05smAXK7+c+ZntjaA26ANtkXLlOe947Aag5zdIcKQULAiF9Cq4WxBi9jUs5zkA84bYQ==" + } + } + }, + "compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "requires": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "config-chain": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.12.tgz", + "integrity": "sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA==", + "dev": true, + "requires": { + "ini": "^1.3.4", + "proto-list": "~1.2.1" + } + }, + "connect": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", + "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", + "requires": { + "debug": "2.6.9", + "finalhandler": "1.1.2", + "parseurl": "~1.3.3", + "utils-merge": "1.0.1" + } + }, + "console-browserify": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", + "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==" + }, + "constant-case": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/constant-case/-/constant-case-1.1.2.tgz", + "integrity": "sha1-jsLKW6ND4Aqjjb9OIA/VrJB+/WM=", + "requires": { + "snake-case": "^1.1.0", + "upper-case": "^1.1.1" + } + }, + "constants-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", + "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=" + }, + "contains-path": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz", + "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=", + "dev": true + }, + "convert-source-map": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", + "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", + "requires": { + "safe-buffer": "~5.1.1" + } + }, + "cookie": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.2.4.tgz", + "integrity": "sha1-qMFVqnubLPLE0y68e5oKoojMxr0=" + }, + "cookiejar": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.2.tgz", + "integrity": "sha512-Mw+adcfzPxcPeI+0WlvRrr/3lGVO0bD75SxX6811cxSh1Wbxx7xZBGK1eVtDf6si8rg2lhnUjsVLMFMfbRIuwA==" + }, + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=" + }, + "core-js": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.1.tgz", + "integrity": "sha512-186WjSik2iTGfDjfdCZAxv2ormxtKgemjC3SI6PL31qOA0j5LhTDVjHChccoc7brwLvpvLPiMyRlcO88C4l1QQ==" + }, + "core-js-compat": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.6.1.tgz", + "integrity": "sha512-2Tl1EuxZo94QS2VeH28Ebf5g3xbPZG/hj/N5HDDy4XMP/ImR0JIer/nggQRiMN91Q54JVkGbytf42wO29oXVHg==", + "dev": true, + "requires": { + "browserslist": "^4.8.2", + "semver": "7.0.0" + }, + "dependencies": { + "semver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", + "dev": true + } + } + }, + "core-js-pure": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.6.1.tgz", + "integrity": "sha512-yKiUdvQWq66xUc408duxUCxFHuDfz5trF5V4xnQzb8C7P/5v2gFUdyNWQoevyAeGYB1hl1X/pzGZ20R3WxZQBA==", + "dev": true + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "cosmiconfig": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", + "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", + "requires": { + "import-fresh": "^2.0.0", + "is-directory": "^0.3.1", + "js-yaml": "^3.13.1", + "parse-json": "^4.0.0" + } + }, + "coveralls": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/coveralls/-/coveralls-3.0.9.tgz", + "integrity": "sha512-nNBg3B1+4iDox5A5zqHKzUTiwl2ey4k2o0NEcVZYvl+GOSJdKBj4AJGKLv6h3SvWch7tABHePAQOSZWM9E2hMg==", + "dev": true, + "requires": { + "js-yaml": "^3.13.1", + "lcov-parse": "^1.0.0", + "log-driver": "^1.2.7", + "minimist": "^1.2.0", + "request": "^2.88.0" + } + }, + "cp-file": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/cp-file/-/cp-file-6.2.0.tgz", + "integrity": "sha512-fmvV4caBnofhPe8kOcitBwSn2f39QLjnAnGq3gO9dfd75mUytzKNZB1hde6QHunW2Rt+OwuBOMc3i1tNElbszA==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "make-dir": "^2.0.0", + "nested-error-stacks": "^2.0.0", + "pify": "^4.0.1", + "safe-buffer": "^5.0.1" + } + }, + "crc": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/crc/-/crc-0.2.0.tgz", + "integrity": "sha1-9Ehrm/ChLfg8P8oU4x4DD9q9lFQ=", + "dev": true + }, + "crc32": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/crc32/-/crc32-0.2.2.tgz", + "integrity": "sha1-etIg1v/c0Rn5/BJ6d3LKzqOQpLo=", + "dev": true + }, + "create-ecdh": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", + "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==", + "requires": { + "bn.js": "^4.1.0", + "elliptic": "^6.0.0" + } + }, + "create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "requires": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "requires": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "create-react-class": { + "version": "15.6.3", + "resolved": "https://registry.npmjs.org/create-react-class/-/create-react-class-15.6.3.tgz", + "integrity": "sha512-M+/3Q6E6DLO6Yx3OwrWjwHBnvfXXYA7W+dFjt/ZDBemHO1DDZhsalX/NUtnTYclN6GfnBDRh4qRHjcDHmlJBJg==", + "requires": { + "fbjs": "^0.8.9", + "loose-envify": "^1.3.1", + "object-assign": "^4.1.1" + }, + "dependencies": { + "core-js": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz", + "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=" + }, + "fbjs": { + "version": "0.8.17", + "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.17.tgz", + "integrity": "sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90=", + "requires": { + "core-js": "^1.0.0", + "isomorphic-fetch": "^2.1.1", + "loose-envify": "^1.0.0", + "object-assign": "^4.1.0", + "promise": "^7.1.1", + "setimmediate": "^1.0.5", + "ua-parser-js": "^0.7.18" + } + } + } + }, + "cross-fetch": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-2.2.3.tgz", + "integrity": "sha512-PrWWNH3yL2NYIb/7WF/5vFG3DCQiXDOVf8k3ijatbrtnwNuhMWLC7YF7uqf53tbTFDzHIUD8oITw4Bxt8ST3Nw==", + "dev": true, + "requires": { + "node-fetch": "2.1.2", + "whatwg-fetch": "2.0.4" + }, + "dependencies": { + "node-fetch": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.1.2.tgz", + "integrity": "sha1-q4hOjn5X44qUR1POxwb3iNF2i7U=", + "dev": true + }, + "whatwg-fetch": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz", + "integrity": "sha512-dcQ1GWpOD/eEQ97k66aiEVpNnapVj90/+R+SXTPYGHpYBBypfKJEQjLrvMZ7YXbKm21gXd4NcuxUTjiv1YtLng==", + "dev": true + } + } + }, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "css-select": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", + "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", + "requires": { + "boolbase": "^1.0.0", + "css-what": "^3.2.1", + "domutils": "^1.7.0", + "nth-check": "^1.0.2" + } + }, + "css-tree": { + "version": "1.0.0-alpha.39", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.39.tgz", + "integrity": "sha512-7UvkEYgBAHRG9Nt980lYxjsTrCyHFN53ky3wVsDkiMdVqylqRt+Zc+jm5qw7/qyOvN2dHSYtX0e4MbCCExSvnA==", + "requires": { + "mdn-data": "2.0.6", + "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "css-what": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.2.1.tgz", + "integrity": "sha512-WwOrosiQTvyms+Ti5ZC5vGEK0Vod3FTt1ca+payZqvKuGJF+dq7bG63DstxtN0dpm6FxY27a/zS3Wten+gEtGw==" + }, + "cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", + "dev": true + }, + "cssstyle": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-1.4.0.tgz", + "integrity": "sha512-GBrLZYZ4X4x6/QEoBnIrqb8B/f5l4+8me2dkom/j1Gtbxy0kBv6OGzKuAsGM75bkGwGAFkt56Iwg28S3XTZgSA==", + "dev": true, + "requires": { + "cssom": "0.3.x" + } + }, + "csstype": { + "version": "2.6.8", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.8.tgz", + "integrity": "sha512-msVS9qTuMT5zwAGCVm4mxfrZ18BNc6Csd0oJAtiFMZ1FAx1CCvy2+5MDmYoix63LM/6NDbNtodCiGYGmFgO0dA==" + }, + "currently-unhandled": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", + "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", + "dev": true, + "requires": { + "array-find-index": "^1.0.1" + } + }, + "damerau-levenshtein": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.5.tgz", + "integrity": "sha512-CBCRqFnpu715iPmw1KrdOrzRqbdFwQTwAWyyyYS42+iAgHCuXZ+/TdMgQkUENPomxEz9z1BEzuQU2Xw0kUuAgA==", + "dev": true + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "data-uri-to-buffer": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-1.2.0.tgz", + "integrity": "sha512-vKQ9DTQPN1FLYiiEEOQ6IBGFqvjCa5rSK3cWMy/Nespm5d/x3dGFT9UBZnkLxCwua/IXBi2TYnwTEpsOvhC4UQ==" + }, + "data-urls": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-1.1.0.tgz", + "integrity": "sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ==", + "dev": true, + "requires": { + "abab": "^2.0.0", + "whatwg-mimetype": "^2.2.0", + "whatwg-url": "^7.0.0" + }, + "dependencies": { + "whatwg-url": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", + "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", + "dev": true, + "requires": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + } + } + }, + "dateformat": { + "version": "1.0.2-1.2.3", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.2-1.2.3.tgz", + "integrity": "sha1-sCIMAt6YYXQztyhRz0fePfLNvuk=", + "dev": true + }, + "dayjs": { + "version": "1.8.18", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.8.18.tgz", + "integrity": "sha512-JBMJZghNK8TtuoPnKNIzW9xavVVigld/zmZNpZSyQbkb2Opp55YIfZUpE4OEqPF/iyUVQTKcn1bC2HtC8B7s3g==" + }, + "debounce": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.0.tgz", + "integrity": "sha512-mYtLl1xfZLi1m4RtQYlZgJUNQjl4ZxVnHzIR8nLLgi4q1YT8o/WM+MK/f8yfcc9s5Ir5zRaPZyZU6xs1Syoocg==" + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" + }, + "decamelize-keys": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz", + "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=", + "dev": true, + "requires": { + "decamelize": "^1.1.0", + "map-obj": "^1.0.0" + }, + "dependencies": { + "map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", + "dev": true + } + } + }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" + }, + "deep-assign": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/deep-assign/-/deep-assign-3.0.0.tgz", + "integrity": "sha512-YX2i9XjJ7h5q/aQ/IM9PEwEnDqETAIYbggmdDB3HLTlSgo1CxPsj6pvhPG68rq6SVE0+p+6Ywsm5fTYNrYtBWw==", + "requires": { + "is-obj": "^1.0.0" + } + }, + "deep-diff": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/deep-diff/-/deep-diff-0.3.8.tgz", + "integrity": "sha1-wB3mPvsO7JeYgB1Ax+Da4ltYLIQ=" + }, + "deep-equal": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", + "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", + "dev": true, + "requires": { + "is-arguments": "^1.0.4", + "is-date-object": "^1.0.1", + "is-regex": "^1.0.4", + "object-is": "^1.0.1", + "object-keys": "^1.1.1", + "regexp.prototype.flags": "^1.2.0" + } + }, + "deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=" + }, + "deepmerge": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-3.3.0.tgz", + "integrity": "sha512-GRQOafGHwMHpjPx9iCvTgpu9NojZ49q794EEL94JVEw6VaeA8XTUyBKvAkOOjBX9oJNiV6G3P+T+tihFjo2TqA==" + }, + "default-require-extensions": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-2.0.0.tgz", + "integrity": "sha1-9fj7sYp9bVCyH2QfZJ67Uiz+JPc=", + "dev": true, + "requires": { + "strip-bom": "^3.0.0" + } + }, + "defaults": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", + "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", + "requires": { + "clone": "^1.0.2" + } + }, + "deferred-leveldown": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-0.2.0.tgz", + "integrity": "sha1-LO8fER4cV4cNi7uK8mUOWHzS9bQ=", + "requires": { + "abstract-leveldown": "~0.12.1" + } + }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "requires": { + "object-keys": "^1.0.12" + } + }, + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "requires": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "dependencies": { + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "deflate-js": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/deflate-js/-/deflate-js-0.2.3.tgz", + "integrity": "sha1-+Fq7WOvFFRowYUdHPVfD5PfkQms=", + "dev": true + }, + "degenerator": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-1.0.4.tgz", + "integrity": "sha1-/PSQo37OJmRk2cxDGrmMWBnO0JU=", + "requires": { + "ast-types": "0.x.x", + "escodegen": "1.x.x", + "esprima": "3.x.x" + }, + "dependencies": { + "esprima": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", + "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=" + } + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" + }, + "denodeify": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/denodeify/-/denodeify-1.2.1.tgz", + "integrity": "sha1-OjYof1A05pnnV3kBBSwubJQlFjE=" + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" + }, + "des.js": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", + "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", + "requires": { + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + }, + "detect-indent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", + "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", + "requires": { + "repeating": "^2.0.0" + } + }, + "detect-newline": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-2.1.0.tgz", + "integrity": "sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I=", + "dev": true + }, + "detox": { + "version": "12.11.3", + "resolved": "https://registry.npmjs.org/detox/-/detox-12.11.3.tgz", + "integrity": "sha512-Ds1x6VLWjUsIR6FDXORan7NxRlugI4RCCpH5n3L++UIBuMvSicaWSKcmU0rCYCFUeluKDofx+QBgnEryNxRUSg==", + "dev": true, + "requires": { + "@babel/core": "^7.4.5", + "bunyan": "^1.8.12", + "bunyan-debug-stream": "^1.1.0", + "chalk": "^2.4.2", + "child-process-promise": "^2.2.0", + "fs-extra": "^4.0.2", + "funpermaproxy": "^1.0.1", + "get-port": "^2.1.0", + "ini": "^1.3.4", + "lodash": "^4.17.5", + "minimist": "^1.2.0", + "proper-lockfile": "^3.0.2", + "sanitize-filename": "^1.6.1", + "shell-utils": "^1.0.9", + "tail": "^2.0.0", + "telnet-client": "0.15.3", + "tempfile": "^2.0.0", + "ws": "^3.3.1", + "yargs": "^13.0.0", + "yargs-parser": "^13.0.0" + }, + "dependencies": { + "cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dev": true, + "requires": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "fs-extra": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", + "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + }, + "ultron": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", + "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==", + "dev": true + }, + "wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + } + }, + "ws": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", + "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", + "dev": true, + "requires": { + "async-limiter": "~1.0.0", + "safe-buffer": "~5.1.0", + "ultron": "~1.1.0" + } + }, + "y18n": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", + "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", + "dev": true + }, + "yargs": { + "version": "13.3.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.0.tgz", + "integrity": "sha512-2eehun/8ALW8TLoIl7MVaRUrg+yCnenu8B4kBlRxj3GJGDKU1Og7sMXPNm1BYyM1DOJmTZ4YeN/Nwxv+8XJsUA==", + "dev": true, + "requires": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.1" + } + }, + "yargs-parser": { + "version": "13.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.1.tgz", + "integrity": "sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, + "diff": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.1.tgz", + "integrity": "sha512-s2+XdvhPCOF01LRQBC8hf4vhbVmI2CGS5aZnxLJlT5FtdhPCDFq80q++zK2KlrVorVDdL5BOGZ/VfLrVtYNF+Q==", + "dev": true + }, + "diff-frag": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/diff-frag/-/diff-frag-1.0.1.tgz", + "integrity": "sha512-6/v2PC/6UTGcWPPetb9acL8foberUg/CtPdALeJUdD1B/weHNvzftoo00gYznqHGRhHEbykUGzqfG9RWOSr5yw==", + "dev": true + }, + "diff-sequences": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-24.9.0.tgz", + "integrity": "sha512-Dj6Wk3tWyTE+Fo1rW8v0Xhwk80um6yFYKbuAxc9c3EZxIHFDYwbi34Uk42u1CdnIiVorvt4RmlSDjIPyzGC2ew==", + "dev": true + }, + "diffie-hellman": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", + "requires": { + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" + } + }, + "discontinuous-range": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/discontinuous-range/-/discontinuous-range-1.0.0.tgz", + "integrity": "sha1-44Mx8IRLukm5qctxx3FYWqsbxlo=", + "dev": true + }, + "dns.js": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dns.js/-/dns.js-1.0.1.tgz", + "integrity": "sha1-v8CVDXl3dyjGdQCxxBgHXmU5Ve4=" + }, + "doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "dom-serializer": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", + "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", + "requires": { + "domelementtype": "^2.0.1", + "entities": "^2.0.0" + }, + "dependencies": { + "domelementtype": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.0.1.tgz", + "integrity": "sha512-5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ==" + } + } + }, + "dom-walk": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.1.tgz", + "integrity": "sha1-ZyIm3HTI95mtNTB9+TaroRrNYBg=" + }, + "domain-browser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", + "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==" + }, + "domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" + }, + "domexception": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz", + "integrity": "sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==", + "dev": true, + "requires": { + "webidl-conversions": "^4.0.2" + } + }, + "domhandler": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", + "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", + "dev": true, + "requires": { + "domelementtype": "1" + } + }, + "domutils": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", + "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "requires": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "dot-case": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-1.1.2.tgz", + "integrity": "sha1-HnOCaQDeKNbeVIC8HeMdCEKwa+w=", + "requires": { + "sentence-case": "^1.1.2" + } + }, + "dottie": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/dottie/-/dottie-2.0.2.tgz", + "integrity": "sha512-fmrwR04lsniq/uSr8yikThDTrM7epXHBAAjH9TbeH3rEA8tdCO7mRzB9hdmdGyJCxF8KERo9CITcm3kGuoyMhg==", + "dev": true + }, + "dtrace-provider": { + "version": "0.8.8", + "resolved": "https://registry.npmjs.org/dtrace-provider/-/dtrace-provider-0.8.8.tgz", + "integrity": "sha512-b7Z7cNtHPhH9EJhNNbbeqTcXB8LGFFZhq1PGgEvpeHlzd36bhbdTWoE/Ba/YguqpBSlAPKnARWhVlhunCMwfxg==", + "dev": true, + "optional": true, + "requires": { + "nan": "^2.14.0" + } + }, + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "dev": true, + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "editorconfig": { + "version": "0.15.3", + "resolved": "https://registry.npmjs.org/editorconfig/-/editorconfig-0.15.3.tgz", + "integrity": "sha512-M9wIMFx96vq0R4F+gRpY3o2exzb8hEj/n9S8unZtHSvYjibBp/iMufSzvmOcV/laG0ZtuTVGtiJggPOSW2r93g==", + "dev": true, + "requires": { + "commander": "^2.19.0", + "lru-cache": "^4.1.5", + "semver": "^5.6.0", + "sigmund": "^1.0.1" + }, + "dependencies": { + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + } + } + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + }, + "electron-to-chromium": { + "version": "1.3.322", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.322.tgz", + "integrity": "sha512-Tc8JQEfGQ1MzfSzI/bTlSr7btJv/FFO7Yh6tanqVmIWOuNCu6/D1MilIEgLtmWqIrsv+o4IjpLAhgMBr/ncNAA==", + "dev": true + }, + "elliptic": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.2.tgz", + "integrity": "sha512-f4x70okzZbIQl/NSRLkI/+tteV/9WqL98zx+SQ69KbXxmVrmjwsNUPn/gYJJ0sHvEak24cZgHIPegRePAtA/xw==", + "requires": { + "bn.js": "^4.4.0", + "brorand": "^1.0.1", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.0" + } + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" + }, + "encoding": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz", + "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=", + "requires": { + "iconv-lite": "~0.4.13" + } + }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "requires": { + "once": "^1.4.0" + } + }, + "entities": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.0.tgz", + "integrity": "sha512-D9f7V0JSRwIxlRI2mjMqufDrRDnx8p+eEOz7aUM9SuvF8gsBzra0/6tbjl1m8eQHrZlYj6PxqE00hZ1SAIKPLw==" + }, + "envinfo": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.5.0.tgz", + "integrity": "sha512-jDgnJaF/Btomk+m3PZDTTCb5XIIIX3zYItnCRfF73zVgvinLoRomuhi75Y4su0PtQxWz4v66XnLLckyvyJTOIQ==" + }, + "enzyme": { + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/enzyme/-/enzyme-3.11.0.tgz", + "integrity": "sha512-Dw8/Gs4vRjxY6/6i9wU0V+utmQO9kvh9XLnz3LIudviOnVYDEe2ec+0k+NQoMamn1VrjKgCUOWj5jG/5M5M0Qw==", + "dev": true, + "requires": { + "array.prototype.flat": "^1.2.3", + "cheerio": "^1.0.0-rc.3", + "enzyme-shallow-equal": "^1.0.1", + "function.prototype.name": "^1.1.2", + "has": "^1.0.3", + "html-element-map": "^1.2.0", + "is-boolean-object": "^1.0.1", + "is-callable": "^1.1.5", + "is-number-object": "^1.0.4", + "is-regex": "^1.0.5", + "is-string": "^1.0.5", + "is-subset": "^0.1.1", + "lodash.escape": "^4.0.1", + "lodash.isequal": "^4.5.0", + "object-inspect": "^1.7.0", + "object-is": "^1.0.2", + "object.assign": "^4.1.0", + "object.entries": "^1.1.1", + "object.values": "^1.1.1", + "raf": "^3.4.1", + "rst-selector-parser": "^2.2.3", + "string.prototype.trim": "^1.2.1" + } + }, + "enzyme-adapter-react-16": { + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/enzyme-adapter-react-16/-/enzyme-adapter-react-16-1.15.2.tgz", + "integrity": "sha512-SkvDrb8xU3lSxID8Qic9rB8pvevDbLybxPK6D/vW7PrT0s2Cl/zJYuXvsd1EBTz0q4o3iqG3FJhpYz3nUNpM2Q==", + "dev": true, + "requires": { + "enzyme-adapter-utils": "^1.13.0", + "enzyme-shallow-equal": "^1.0.1", + "has": "^1.0.3", + "object.assign": "^4.1.0", + "object.values": "^1.1.1", + "prop-types": "^15.7.2", + "react-is": "^16.12.0", + "react-test-renderer": "^16.0.0-0", + "semver": "^5.7.0" + } + }, + "enzyme-adapter-utils": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/enzyme-adapter-utils/-/enzyme-adapter-utils-1.13.0.tgz", + "integrity": "sha512-YuEtfQp76Lj5TG1NvtP2eGJnFKogk/zT70fyYHXK2j3v6CtuHqc8YmgH/vaiBfL8K1SgVVbQXtTcgQZFwzTVyQ==", + "dev": true, + "requires": { + "airbnb-prop-types": "^2.15.0", + "function.prototype.name": "^1.1.2", + "object.assign": "^4.1.0", + "object.fromentries": "^2.0.2", + "prop-types": "^15.7.2", + "semver": "^5.7.1" + } + }, + "enzyme-shallow-equal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/enzyme-shallow-equal/-/enzyme-shallow-equal-1.0.1.tgz", + "integrity": "sha512-hGA3i1so8OrYOZSM9whlkNmVHOicJpsjgTzC+wn2JMJXhq1oO4kA4bJ5MsfzSIcC71aLDKzJ6gZpIxrqt3QTAQ==", + "dev": true, + "requires": { + "has": "^1.0.3", + "object-is": "^1.0.2" + } + }, + "errno": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", + "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", + "requires": { + "prr": "~1.0.1" + } + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "error-stack-parser": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-1.3.6.tgz", + "integrity": "sha1-4Oc7k+QXE40c18C3RrGkoUhUwpI=", + "requires": { + "stackframe": "^0.3.1" + } + }, + "errorhandler": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/errorhandler/-/errorhandler-1.5.1.tgz", + "integrity": "sha512-rcOwbfvP1WTViVoUjcfZicVzjhjTuhSMntHh6mW3IrEiyE6mJyXvsToJUJGlGlw/2xU9P5whlWNGlIDVeCiT4A==", + "requires": { + "accepts": "~1.3.7", + "escape-html": "~1.0.3" + } + }, + "es-abstract": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.0.tgz", + "integrity": "sha512-yYkE07YF+6SIBmg1MsJ9dlub5L48Ek7X0qz+c/CPCHS9EBXfESorzng4cJQjJW5/pB6vDF41u7F8vUhLVDqIug==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.1.5", + "is-regex": "^1.0.5", + "object-inspect": "^1.7.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.0", + "string.prototype.trimleft": "^2.1.1", + "string.prototype.trimright": "^2.1.1" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "es6-error": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", + "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==" + }, + "es6-promise": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", + "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==" + }, + "es6-promisify": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", + "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", + "requires": { + "es6-promise": "^4.0.3" + } + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + }, + "escodegen": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.12.0.tgz", + "integrity": "sha512-TuA+EhsanGcme5T3R0L80u4t8CpbXQjegRmf7+FPTJrtCTErXFeelblRgHQa1FofEzqYYJmJ/OqjTwREp9qgmg==", + "requires": { + "esprima": "^3.1.3", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.6.1" + }, + "dependencies": { + "esprima": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", + "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "optional": true + } + } + }, + "eslint": { + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.8.0.tgz", + "integrity": "sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "ajv": "^6.10.0", + "chalk": "^2.1.0", + "cross-spawn": "^6.0.5", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "eslint-scope": "^5.0.0", + "eslint-utils": "^1.4.3", + "eslint-visitor-keys": "^1.1.0", + "espree": "^6.1.2", + "esquery": "^1.0.1", + "esutils": "^2.0.2", + "file-entry-cache": "^5.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.0.0", + "globals": "^12.1.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "inquirer": "^7.0.0", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.3.0", + "lodash": "^4.17.14", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.1", + "natural-compare": "^1.4.0", + "optionator": "^0.8.3", + "progress": "^2.0.0", + "regexpp": "^2.0.1", + "semver": "^6.1.2", + "strip-ansi": "^5.2.0", + "strip-json-comments": "^3.0.1", + "table": "^5.2.3", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "dependencies": { + "ansi-escapes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.0.tgz", + "integrity": "sha512-EiYhwo0v255HUL6eDyuLrXEkTi7WwVCLAw+SeOQ7M7qdun1z1pum4DEm/nuqIVbPvi9RPPc9k9LbyBv6H0DwVg==", + "dev": true, + "requires": { + "type-fest": "^0.8.1" + } + }, + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true + }, + "cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "requires": { + "restore-cursor": "^3.1.0" + } + }, + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "eslint-scope": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.0.0.tgz", + "integrity": "sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw==", + "dev": true, + "requires": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + }, + "external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dev": true, + "requires": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + } + }, + "figures": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.1.0.tgz", + "integrity": "sha512-ravh8VRXqHuMvZt/d8GblBeqDMkdJMBdv/2KntFH+ra5MXkO7nxNKpzQ3n6QD/2da1kH0aWmNISdvhM7gl2gVg==", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "globals": { + "version": "12.3.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-12.3.0.tgz", + "integrity": "sha512-wAfjdLgFsPZsklLJvOBUBmzYE8/CwhEqSBEMRXA3qxIiNtyqvjYurAtIfDh6chlEPUfmTY3MnZh5Hfh4q0UlIw==", + "dev": true, + "requires": { + "type-fest": "^0.8.1" + } + }, + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true + }, + "import-fresh": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz", + "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "inquirer": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.0.1.tgz", + "integrity": "sha512-V1FFQ3TIO15det8PijPLFR9M9baSlnRs9nL7zWu1MNVA2T9YVl9ZbrHJhYs7e9X8jeMZ3lr2JH/rdHFgNCBdYw==", + "dev": true, + "requires": { + "ansi-escapes": "^4.2.1", + "chalk": "^2.4.2", + "cli-cursor": "^3.1.0", + "cli-width": "^2.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.15", + "mute-stream": "0.0.8", + "run-async": "^2.2.0", + "rxjs": "^6.5.3", + "string-width": "^4.1.0", + "strip-ansi": "^5.1.0", + "through": "^2.3.6" + } + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "dev": true + }, + "onetime": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz", + "integrity": "sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==", + "dev": true, + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + }, + "restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "requires": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + } + }, + "rxjs": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.3.tgz", + "integrity": "sha512-wuYsAYYFdWTAnAaPoKGNhfpWwKZbJW+HgAJ+mImp+Epl7BG8oNWBCTyRM8gba9k4lk8BgWdoYm21Mo/RYhhbgA==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, + "string-width": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + } + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + } + } + }, + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true + } + } + }, + "eslint-config-airbnb": { + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/eslint-config-airbnb/-/eslint-config-airbnb-16.1.0.tgz", + "integrity": "sha512-zLyOhVWhzB/jwbz7IPSbkUuj7X2ox4PHXTcZkEmDqTvd0baJmJyuxlFPDlZOE/Y5bC+HQRaEkT3FoHo9wIdRiw==", + "dev": true, + "requires": { + "eslint-config-airbnb-base": "^12.1.0" + } + }, + "eslint-config-airbnb-base": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-12.1.0.tgz", + "integrity": "sha512-/vjm0Px5ZCpmJqnjIzcFb9TKZrKWz0gnuG/7Gfkt0Db1ELJR51xkZth+t14rYdqWgX836XbuxtArbIHlVhbLBA==", + "dev": true, + "requires": { + "eslint-restricted-globals": "^0.1.1" + } + }, + "eslint-import-resolver-babel-module": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-babel-module/-/eslint-import-resolver-babel-module-5.1.0.tgz", + "integrity": "sha512-fnWkQ9+fVjQ4H9qk5sH8zUfC8TPyWJAakLPjLqUgdlexhyT6PGk8AieXuEvdeskIXLOcO2WLI4kothFBigjFjA==", + "dev": true, + "requires": { + "pkg-up": "^2.0.0", + "resolve": "^1.10.0" + } + }, + "eslint-import-resolver-node": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz", + "integrity": "sha512-sfmTqJfPSizWu4aymbPr4Iidp5yKm8yDkHp+Ir3YiTHiiDfxh69mOUsmiqW6RZ9zRXFaF64GtYmN7e+8GHBv6Q==", + "dev": true, + "requires": { + "debug": "^2.6.9", + "resolve": "^1.5.0" + } + }, + "eslint-module-utils": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.5.0.tgz", + "integrity": "sha512-kCo8pZaNz2dsAW7nCUjuVoI11EBXXpIzfNxmaoLhXoRDOnqXLC4iSGVRdZPhOitfbdEfMEfKOiENaK6wDPZEGw==", + "dev": true, + "requires": { + "debug": "^2.6.9", + "pkg-dir": "^2.0.0" + }, + "dependencies": { + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true + }, + "pkg-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", + "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", + "dev": true, + "requires": { + "find-up": "^2.1.0" + } + } + } + }, + "eslint-plugin-eslint-comments": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-eslint-comments/-/eslint-plugin-eslint-comments-3.1.2.tgz", + "integrity": "sha512-QexaqrNeteFfRTad96W+Vi4Zj1KFbkHHNMMaHZEYcovKav6gdomyGzaxSDSL3GoIyUOo078wRAdYlu1caiauIQ==", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5", + "ignore": "^5.0.5" + } + }, + "eslint-plugin-eslint-plugin": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-eslint-plugin/-/eslint-plugin-eslint-plugin-2.1.0.tgz", + "integrity": "sha512-kT3A/ZJftt28gbl/Cv04qezb/NQ1dwYIbi8lyf806XMxkus7DvOVCLIfTXMrorp322Pnoez7+zabXH29tADIDg==", + "dev": true + }, + "eslint-plugin-flowtype": { + "version": "2.50.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-flowtype/-/eslint-plugin-flowtype-2.50.3.tgz", + "integrity": "sha512-X+AoKVOr7Re0ko/yEXyM5SSZ0tazc6ffdIOocp2fFUlWoDt7DV0Bz99mngOkAFLOAWjqRA5jPwqUCbrx13XoxQ==", + "dev": true, + "requires": { + "lodash": "^4.17.10" + } + }, + "eslint-plugin-import": { + "version": "2.19.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.19.1.tgz", + "integrity": "sha512-x68131aKoCZlCae7rDXKSAQmbT5DQuManyXo2sK6fJJ0aK5CWAkv6A6HJZGgqC8IhjQxYPgo6/IY4Oz8AFsbBw==", + "dev": true, + "requires": { + "array-includes": "^3.0.3", + "array.prototype.flat": "^1.2.1", + "contains-path": "^0.1.0", + "debug": "^2.6.9", + "doctrine": "1.5.0", + "eslint-import-resolver-node": "^0.3.2", + "eslint-module-utils": "^2.4.1", + "has": "^1.0.3", + "minimatch": "^3.0.4", + "object.values": "^1.1.0", + "read-pkg-up": "^2.0.0", + "resolve": "^1.12.0" + }, + "dependencies": { + "doctrine": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", + "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "isarray": "^1.0.0" + } + } + } + }, + "eslint-plugin-jest": { + "version": "22.4.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-22.4.1.tgz", + "integrity": "sha512-gcLfn6P2PrFAVx3AobaOzlIEevpAEf9chTpFZz7bYfc7pz8XRv7vuKTIE4hxPKZSha6XWKKplDQ0x9Pq8xX2mg==", + "dev": true + }, + "eslint-plugin-jsx-a11y": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.2.3.tgz", + "integrity": "sha512-CawzfGt9w83tyuVekn0GDPU9ytYtxyxyFZ3aSWROmnRRFQFT2BiPJd7jvRdzNDi6oLWaS2asMeYSNMjWTV4eNg==", + "dev": true, + "requires": { + "@babel/runtime": "^7.4.5", + "aria-query": "^3.0.0", + "array-includes": "^3.0.3", + "ast-types-flow": "^0.0.7", + "axobject-query": "^2.0.2", + "damerau-levenshtein": "^1.0.4", + "emoji-regex": "^7.0.2", + "has": "^1.0.3", + "jsx-ast-utils": "^2.2.1" + } + }, + "eslint-plugin-prettier": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-2.6.2.tgz", + "integrity": "sha512-tGek5clmW5swrAx1mdPYM8oThrBE83ePh7LeseZHBWfHVGrHPhKn7Y5zgRMbU/9D5Td9K4CEmUPjGxA7iw98Og==", + "dev": true, + "requires": { + "fast-diff": "^1.1.1", + "jest-docblock": "^21.0.0" + } + }, + "eslint-plugin-react": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.17.0.tgz", + "integrity": "sha512-ODB7yg6lxhBVMeiH1c7E95FLD4E/TwmFjltiU+ethv7KPdCwgiFuOZg9zNRHyufStTDLl/dEFqI2Q1VPmCd78A==", + "dev": true, + "requires": { + "array-includes": "^3.0.3", + "doctrine": "^2.1.0", + "eslint-plugin-eslint-plugin": "^2.1.0", + "has": "^1.0.3", + "jsx-ast-utils": "^2.2.3", + "object.entries": "^1.1.0", + "object.fromentries": "^2.0.1", + "object.values": "^1.1.0", + "prop-types": "^15.7.2", + "resolve": "^1.13.1" + } + }, + "eslint-plugin-react-hooks": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-1.7.0.tgz", + "integrity": "sha512-iXTCFcOmlWvw4+TOE8CLWj6yX1GwzT0Y6cUfHHZqWnSk144VmVIRcVGtUAzrLES7C798lmvnt02C7rxaOX1HNA==", + "dev": true + }, + "eslint-plugin-react-native": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-native/-/eslint-plugin-react-native-3.6.0.tgz", + "integrity": "sha512-BEQcHZ06hZSBYWFVuNEq0xuui5VEsWpHDsZGBtfadHfCRqRMUrkYPgdDb3bpc60qShHE83kqIv59uKdinEg91Q==", + "dev": true, + "requires": { + "eslint-plugin-react-native-globals": "^0.1.1" + } + }, + "eslint-plugin-react-native-globals": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-native-globals/-/eslint-plugin-react-native-globals-0.1.2.tgz", + "integrity": "sha512-9aEPf1JEpiTjcFAmmyw8eiIXmcNZOqaZyHO77wgm0/dWfT/oxC1SrIq8ET38pMxHYrcB6Uew+TzUVsBeczF88g==", + "dev": true + }, + "eslint-restricted-globals": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/eslint-restricted-globals/-/eslint-restricted-globals-0.1.1.tgz", + "integrity": "sha1-NfDVy8ZMLj7WLpO0saevBbp+1Nc=", + "dev": true + }, + "eslint-scope": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", + "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", + "dev": true, + "requires": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + }, + "eslint-utils": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz", + "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^1.1.0" + } + }, + "eslint-visitor-keys": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz", + "integrity": "sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==", + "dev": true + }, + "esm": { + "version": "3.2.25", + "resolved": "https://registry.npmjs.org/esm/-/esm-3.2.25.tgz", + "integrity": "sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==", + "dev": true + }, + "espree": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/espree/-/espree-6.1.2.tgz", + "integrity": "sha512-2iUPuuPP+yW1PZaMSDM9eyVf8D5P0Hi8h83YtZ5bPc/zHYjII5khoixIUTMO794NOY8F/ThF1Bo8ncZILarUTA==", + "dev": true, + "requires": { + "acorn": "^7.1.0", + "acorn-jsx": "^5.1.0", + "eslint-visitor-keys": "^1.1.0" + } + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" + }, + "esquery": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz", + "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==", + "dev": true, + "requires": { + "estraverse": "^4.0.0" + } + }, + "esrecurse": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", + "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", + "dev": true, + "requires": { + "estraverse": "^4.1.0" + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" + }, + "event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==" + }, + "eventemitter3": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.2.tgz", + "integrity": "sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==" + }, + "events": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", + "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=" + }, + "events-to-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/events-to-array/-/events-to-array-1.1.2.tgz", + "integrity": "sha1-LUH1Y+H+QA7Uli/hpNXGp1Od9/Y=", + "dev": true + }, + "evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "requires": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "exception-formatter": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/exception-formatter/-/exception-formatter-1.0.7.tgz", + "integrity": "sha512-zV45vEsjytJrwfGq6X9qd1Ll56cW4NC2mhCO6lqwMk4ZpA1fZ6C3UiaQM/X7if+7wZFmCgss3ahp9B/uVFuLRw==", + "dev": true, + "requires": { + "colors": "^1.0.3" + }, + "dependencies": { + "colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", + "dev": true + } + } + }, + "exec-sh": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.4.tgz", + "integrity": "sha512-sEFIkc61v75sWeOe72qyrqg2Qg0OuLESziUDk/O/z2qgS15y2gWVFrI6f2Qn/qw/0/NCfCEsmNA4zOjkwEZT1A==" + }, + "execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "requires": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=" + }, + "exit-hook": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-1.1.1.tgz", + "integrity": "sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g=", + "dev": true + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "requires": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "expect": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-24.9.0.tgz", + "integrity": "sha512-wvVAx8XIol3Z5m9zvZXiyZOQ+sRJqNTIm6sGjdWlaZIeupQGO3WbYI+15D/AmEwZywL6wtJkbAbJtzkOfBuR0Q==", + "dev": true, + "requires": { + "@jest/types": "^24.9.0", + "ansi-styles": "^3.2.0", + "jest-get-type": "^24.9.0", + "jest-matcher-utils": "^24.9.0", + "jest-message-util": "^24.9.0", + "jest-regex-util": "^24.9.0" + } + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "external-editor": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz", + "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==", + "requires": { + "chardet": "^0.4.0", + "iconv-lite": "^0.4.17", + "tmp": "^0.0.33" + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "requires": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "dev": true + }, + "eyes": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz", + "integrity": "sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A=", + "dev": true + }, + "faker": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/faker/-/faker-4.1.0.tgz", + "integrity": "sha1-HkW7vsxndLPBlfrSg1EJxtdIzD8=" + }, + "fancy-log": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.3.tgz", + "integrity": "sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw==", + "requires": { + "ansi-gray": "^0.1.1", + "color-support": "^1.1.3", + "parse-node-version": "^1.0.0", + "time-stamp": "^1.0.0" + } + }, + "fast-deep-equal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", + "dev": true + }, + "fast-diff": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", + "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", + "dev": true + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" + }, + "fast-safe-stringify": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.7.tgz", + "integrity": "sha512-Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA==" + }, + "fb-watchman": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", + "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", + "requires": { + "bser": "2.1.1" + } + }, + "fbjs": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-1.0.0.tgz", + "integrity": "sha512-MUgcMEJaFhCaF1QtWGnmq9ZDRAzECTCRAF7O6UZIlAlkTs1SasiX9aP0Iw7wfD2mJ7wDTNfg2w7u5fSCwJk1OA==", + "requires": { + "core-js": "^2.4.1", + "fbjs-css-vars": "^1.0.0", + "isomorphic-fetch": "^2.1.1", + "loose-envify": "^1.0.0", + "object-assign": "^4.1.0", + "promise": "^7.1.1", + "setimmediate": "^1.0.5", + "ua-parser-js": "^0.7.18" + }, + "dependencies": { + "core-js": { + "version": "2.6.11", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.11.tgz", + "integrity": "sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg==" + } + } + }, + "fbjs-css-vars": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz", + "integrity": "sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ==" + }, + "fbjs-scripts": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/fbjs-scripts/-/fbjs-scripts-1.2.0.tgz", + "integrity": "sha512-5krZ8T0Bf8uky0abPoCLrfa7Orxd8UH4Qq8hRUF2RZYNMu+FmEOrBc7Ib3YVONmxTXTlLAvyrrdrVmksDb2OqQ==", + "requires": { + "@babel/core": "^7.0.0", + "ansi-colors": "^1.0.1", + "babel-preset-fbjs": "^3.2.0", + "core-js": "^2.4.1", + "cross-spawn": "^5.1.0", + "fancy-log": "^1.3.2", + "object-assign": "^4.0.1", + "plugin-error": "^0.1.2", + "semver": "^5.1.0", + "through2": "^2.0.0" + }, + "dependencies": { + "core-js": { + "version": "2.6.11", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.11.tgz", + "integrity": "sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg==" + }, + "cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "requires": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + } + } + }, + "figures": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "file-entry-cache": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", + "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", + "dev": true, + "requires": { + "flat-cache": "^2.0.1" + } + }, + "file-type": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-7.3.0.tgz", + "integrity": "sha1-GIaXYOEMNsBBbVMINoT8/A1Z3zo=" + }, + "file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + } + }, + "find-babel-config": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/find-babel-config/-/find-babel-config-1.2.0.tgz", + "integrity": "sha512-jB2CHJeqy6a820ssiqwrKMeyC6nNdmrcgkKWJWmpoxpE8RKciYJXCcXRq1h2AzCo5I5BJeN2tkGEO3hLTuePRA==", + "dev": true, + "requires": { + "json5": "^0.5.1", + "path-exists": "^3.0.0" + }, + "dependencies": { + "json5": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", + "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", + "dev": true + } + } + }, + "find-cache-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", + "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", + "requires": { + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" + } + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "requires": { + "locate-path": "^3.0.0" + } + }, + "findit": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/findit/-/findit-2.0.0.tgz", + "integrity": "sha1-ZQnwEmr0wXhVHPqZOU4DLhOk1W4=", + "dev": true + }, + "flat-cache": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", + "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", + "dev": true, + "requires": { + "flatted": "^2.0.0", + "rimraf": "2.6.3", + "write": "1.0.3" + }, + "dependencies": { + "rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } + } + }, + "flatted": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.1.tgz", + "integrity": "sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg==", + "dev": true + }, + "flow-parser": { + "version": "0.114.0", + "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.114.0.tgz", + "integrity": "sha512-Qt9HT3v507bCerJfp4FX4N5E7ysinBzxjpK1rL7bJ/Bw12puF6lva2MAIXYS1d83bV7BT/F7EDk+faJQY5MpRA==", + "dev": true + }, + "flow-remove-types": { + "version": "2.114.0", + "resolved": "https://registry.npmjs.org/flow-remove-types/-/flow-remove-types-2.114.0.tgz", + "integrity": "sha512-ckon8RO7tFcVGW3Ll0jAWgULVrNa/cEN0JXp2I7XmzWT/GCQghSb+0312NjtAb+y3W9iXpPxkVMI86+SDU0E0Q==", + "dev": true, + "requires": { + "flow-parser": "^0.114.0", + "pirates": "^3.0.2", + "vlq": "^0.2.1" + }, + "dependencies": { + "pirates": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-3.0.2.tgz", + "integrity": "sha512-c5CgUJq6H2k6MJz72Ak1F5sN9n9wlSlJyEnwvpm9/y3WB4E3pHBDT2c6PEiS1vyJvq2bUxUAIu0EGf8Cx4Ic7Q==", + "dev": true, + "requires": { + "node-modules-regexp": "^1.0.0" + } + }, + "vlq": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/vlq/-/vlq-0.2.3.tgz", + "integrity": "sha512-DRibZL6DsNhIgYQ+wNdWDL2SL3bKPlVrRiBqV5yuMm++op8W4kGFtaQfCs4KEJn0wBZcHVHJ3eoywX8983k1ow==", + "dev": true + } + } + }, + "fn-getter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fn-getter/-/fn-getter-1.0.0.tgz", + "integrity": "sha1-8NeOMWsMeEurLSwOsbRad0LVra8=" + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" + }, + "foreach": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.4.tgz", + "integrity": "sha1-zF0NiuHUbMmlVcJoL5EJd4WZNd8=" + }, + "foreground-child": { + "version": "1.5.6", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-1.5.6.tgz", + "integrity": "sha1-T9ca0t/elnibmApcCilZN8svXOk=", + "dev": true, + "requires": { + "cross-spawn": "^4", + "signal-exit": "^3.0.0" + }, + "dependencies": { + "cross-spawn": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-4.0.2.tgz", + "integrity": "sha1-e5JHYhwjrf3ThWAEqCPL45dCTUE=", + "dev": true, + "requires": { + "lru-cache": "^4.0.1", + "which": "^1.2.9" + } + } + } + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "dev": true + }, + "form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + }, + "dependencies": { + "mime-db": { + "version": "1.42.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.42.0.tgz", + "integrity": "sha512-UbfJCR4UAVRNgMpfImz05smAXK7+c+ZntjaA26ANtkXLlOe947Aag5zdIcKQULAiF9Cq4WxBi9jUs5zkA84bYQ==", + "dev": true + }, + "mime-types": { + "version": "2.1.25", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.25.tgz", + "integrity": "sha512-5KhStqB5xpTAeGqKBAMgwaYMnQik7teQN4IAzC7npDv6kzeU6prfkR67bc87J1kWMPGkoaZSq1npmexMgkmEVg==", + "dev": true, + "requires": { + "mime-db": "1.42.0" + } + } + } + }, + "formidable": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.0.11.tgz", + "integrity": "sha1-aPYzJaA15kS297s9ESQ7l2HeGzA=", + "dev": true + }, + "fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "requires": { + "map-cache": "^0.2.2" + } + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" + }, + "fs-cp": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/fs-cp/-/fs-cp-1.4.0.tgz", + "integrity": "sha1-XbGvWtPw3AyBhXblLdKUEeitDGU=", + "requires": { + "any-promise": "^1.1.0", + "destroy": "^1.0.0", + "mkdirp-then": "^1.0.0", + "mz": "^2.0.0" + } + }, + "fs-exists-cached": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-exists-cached/-/fs-exists-cached-1.0.0.tgz", + "integrity": "sha1-zyVVTKBQ3EmuZla0HeQiWJidy84=", + "dev": true + }, + "fs-extra": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-1.0.0.tgz", + "integrity": "sha1-zTzl9+fLYUWIP8rjGR6Yd/hYeVA=", + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^2.1.0", + "klaw": "^1.0.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "fsevents": { + "version": "1.2.11", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.11.tgz", + "integrity": "sha512-+ux3lx6peh0BpvY0JebGyZoiR4D+oYzdPZMKJwkZ+sFkNJzpL7tXc/wehS49gUAxg3tmMHPHZkA8JU2rhhgDHw==", + "optional": true, + "requires": { + "bindings": "^1.5.0", + "nan": "^2.12.1", + "node-pre-gyp": "*" + }, + "dependencies": { + "abbrev": { + "version": "1.1.1", + "bundled": true, + "optional": true + }, + "ansi-regex": { + "version": "2.1.1", + "bundled": true + }, + "aproba": { + "version": "1.2.0", + "bundled": true, + "optional": true + }, + "are-we-there-yet": { + "version": "1.1.5", + "bundled": true, + "optional": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "balanced-match": { + "version": "1.0.0", + "bundled": true + }, + "brace-expansion": { + "version": "1.1.11", + "bundled": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "chownr": { + "version": "1.1.3", + "bundled": true, + "optional": true + }, + "code-point-at": { + "version": "1.1.0", + "bundled": true + }, + "concat-map": { + "version": "0.0.1", + "bundled": true + }, + "console-control-strings": { + "version": "1.1.0", + "bundled": true + }, + "core-util-is": { + "version": "1.0.2", + "bundled": true, + "optional": true + }, + "debug": { + "version": "3.2.6", + "bundled": true, + "optional": true, + "requires": { + "ms": "^2.1.1" + } + }, + "deep-extend": { + "version": "0.6.0", + "bundled": true, + "optional": true + }, + "delegates": { + "version": "1.0.0", + "bundled": true, + "optional": true + }, + "detect-libc": { + "version": "1.0.3", + "bundled": true, + "optional": true + }, + "fs-minipass": { + "version": "1.2.7", + "bundled": true, + "optional": true, + "requires": { + "minipass": "^2.6.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "bundled": true, + "optional": true + }, + "gauge": { + "version": "2.7.4", + "bundled": true, + "optional": true, + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, + "glob": { + "version": "7.1.6", + "bundled": true, + "optional": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "has-unicode": { + "version": "2.0.1", + "bundled": true, + "optional": true + }, + "iconv-lite": { + "version": "0.4.24", + "bundled": true, + "optional": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ignore-walk": { + "version": "3.0.3", + "bundled": true, + "optional": true, + "requires": { + "minimatch": "^3.0.4" + } + }, + "inflight": { + "version": "1.0.6", + "bundled": true, + "optional": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "bundled": true + }, + "ini": { + "version": "1.3.5", + "bundled": true, + "optional": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "isarray": { + "version": "1.0.0", + "bundled": true, + "optional": true + }, + "minimatch": { + "version": "3.0.4", + "bundled": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "0.0.8", + "bundled": true + }, + "minipass": { + "version": "2.9.0", + "bundled": true, + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + }, + "minizlib": { + "version": "1.3.3", + "bundled": true, + "optional": true, + "requires": { + "minipass": "^2.9.0" + } + }, + "mkdirp": { + "version": "0.5.1", + "bundled": true, + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.1.2", + "bundled": true, + "optional": true + }, + "needle": { + "version": "2.4.0", + "bundled": true, + "optional": true, + "requires": { + "debug": "^3.2.6", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + } + }, + "node-pre-gyp": { + "version": "0.14.0", + "bundled": true, + "optional": true, + "requires": { + "detect-libc": "^1.0.2", + "mkdirp": "^0.5.1", + "needle": "^2.2.1", + "nopt": "^4.0.1", + "npm-packlist": "^1.1.6", + "npmlog": "^4.0.2", + "rc": "^1.2.7", + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^4.4.2" + } + }, + "nopt": { + "version": "4.0.1", + "bundled": true, + "optional": true, + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + }, + "npm-bundled": { + "version": "1.1.1", + "bundled": true, + "optional": true, + "requires": { + "npm-normalize-package-bin": "^1.0.1" + } + }, + "npm-normalize-package-bin": { + "version": "1.0.1", + "bundled": true, + "optional": true + }, + "npm-packlist": { + "version": "1.4.7", + "bundled": true, + "optional": true, + "requires": { + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1" + } + }, + "npmlog": { + "version": "4.1.2", + "bundled": true, + "optional": true, + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "bundled": true + }, + "object-assign": { + "version": "4.1.1", + "bundled": true, + "optional": true + }, + "once": { + "version": "1.4.0", + "bundled": true, + "requires": { + "wrappy": "1" + } + }, + "os-homedir": { + "version": "1.0.2", + "bundled": true, + "optional": true + }, + "os-tmpdir": { + "version": "1.0.2", + "bundled": true, + "optional": true + }, + "osenv": { + "version": "0.1.5", + "bundled": true, + "optional": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "bundled": true, + "optional": true + }, + "process-nextick-args": { + "version": "2.0.1", + "bundled": true, + "optional": true + }, + "rc": { + "version": "1.2.8", + "bundled": true, + "optional": true, + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "bundled": true, + "optional": true + } + } + }, + "readable-stream": { + "version": "2.3.6", + "bundled": true, + "optional": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "rimraf": { + "version": "2.7.1", + "bundled": true, + "optional": true, + "requires": { + "glob": "^7.1.3" + } + }, + "safe-buffer": { + "version": "5.1.2", + "bundled": true + }, + "safer-buffer": { + "version": "2.1.2", + "bundled": true, + "optional": true + }, + "sax": { + "version": "1.2.4", + "bundled": true, + "optional": true + }, + "semver": { + "version": "5.7.1", + "bundled": true, + "optional": true + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true, + "optional": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true, + "optional": true + }, + "string-width": { + "version": "1.0.2", + "bundled": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, + "optional": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "bundled": true, + "optional": true + }, + "tar": { + "version": "4.4.13", + "bundled": true, + "optional": true, + "requires": { + "chownr": "^1.1.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.8.6", + "minizlib": "^1.2.1", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.2", + "yallist": "^3.0.3" + } + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true, + "optional": true + }, + "wide-align": { + "version": "1.1.3", + "bundled": true, + "optional": true, + "requires": { + "string-width": "^1.0.2 || 2" + } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true + }, + "yallist": { + "version": "3.1.1", + "bundled": true + } + } + }, + "fsm-iterator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fsm-iterator/-/fsm-iterator-1.1.0.tgz", + "integrity": "sha1-M33kXeGesgV4jPAuOpVewgZ2Dew=", + "dev": true + }, + "ftp": { + "version": "0.3.10", + "resolved": "https://registry.npmjs.org/ftp/-/ftp-0.3.10.tgz", + "integrity": "sha1-kZfYYa2BQvPmPVqDv+TFn3MwiF0=", + "requires": { + "readable-stream": "1.1.x", + "xregexp": "2.0.0" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + }, + "readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + } + } + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "function-loop": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/function-loop/-/function-loop-1.0.2.tgz", + "integrity": "sha512-Iw4MzMfS3udk/rqxTiDDCllhGwlOrsr50zViTOO/W6lS/9y6B1J0BD2VZzrnWUYBJsl3aeqjgR5v7bWWhZSYbA==", + "dev": true + }, + "function.prototype.name": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.2.tgz", + "integrity": "sha512-C8A+LlHBJjB2AdcRPorc5JvJ5VUoWlXdEHLOJdCI7kjHEtGTpHQUiqMvCIKUwIsGwZX2jZJy761AXsn356bJQg==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1", + "functions-have-names": "^1.2.0" + } + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "functions-have-names": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.0.tgz", + "integrity": "sha512-zKXyzksTeaCSw5wIX79iCA40YAa6CJMJgNg9wdkU/ERBrIdPSimPICYiLp65lRbSBqtiHql/HZfS2DyI/AH6tQ==", + "dev": true + }, + "funpermaproxy": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/funpermaproxy/-/funpermaproxy-1.0.1.tgz", + "integrity": "sha512-9pEzs5vnNtR7ZGihly98w/mQ7blsvl68Wj30ZCDAXy7qDN4CWLLjdfjtH/P2m6whsnaJkw15hysCNHMXue+wdA==", + "dev": true + }, + "fwd-stream": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/fwd-stream/-/fwd-stream-1.0.4.tgz", + "integrity": "sha1-7Sgcq+1G/uz5Ie4y3ExQs3KsfPo=", + "requires": { + "readable-stream": "~1.0.26-4" + } + }, + "gaze": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz", + "integrity": "sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==", + "dev": true, + "requires": { + "globule": "^1.0.0" + } + }, + "get-caller-file": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", + "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==" + }, + "get-port": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/get-port/-/get-port-2.1.0.tgz", + "integrity": "sha1-h4P53OvR7qSVozThpqJR54iHqxo=", + "dev": true, + "requires": { + "pinkie-promise": "^2.0.0" + } + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "requires": { + "pump": "^3.0.0" + } + }, + "get-uri": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-2.0.4.tgz", + "integrity": "sha512-v7LT/s8kVjs+Tx0ykk1I+H/rbpzkHvuIq87LmeXptcf5sNWm9uQiwjNAt94SJPA1zOlCntmnOlJvVWKmzsxG8Q==", + "requires": { + "data-uri-to-buffer": "1", + "debug": "2", + "extend": "~3.0.2", + "file-uri-to-path": "1", + "ftp": "~0.3.10", + "readable-stream": "2" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=" + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.0.tgz", + "integrity": "sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "glob-whatev": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/glob-whatev/-/glob-whatev-0.1.8.tgz", + "integrity": "sha1-ozp2MmLlAehRvIT9IrVzbP84Jv0=", + "dev": true, + "requires": { + "minimatch": "~0.2.5" + }, + "dependencies": { + "lru-cache": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz", + "integrity": "sha1-bUUk6LlV+V1PW1iFHOId1y+06VI=", + "dev": true + }, + "minimatch": { + "version": "0.2.14", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz", + "integrity": "sha1-x054BXT2PG+aCQ6Q775u9TpqdWo=", + "dev": true, + "requires": { + "lru-cache": "2", + "sigmund": "~1.0.0" + } + } + } + }, + "global": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz", + "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==", + "requires": { + "min-document": "^2.19.0", + "process": "^0.11.10" + } + }, + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" + }, + "globule": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/globule/-/globule-1.3.0.tgz", + "integrity": "sha512-YlD4kdMqRCQHrhVdonet4TdRtv1/sZKepvoxNT4Nrhrp5HI8XFfc8kFlGlBn2myBo80aGp8Eft259mbcUJhgSg==", + "dev": true, + "requires": { + "glob": "~7.1.1", + "lodash": "~4.17.10", + "minimatch": "~3.0.2" + } + }, + "graceful-fs": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz", + "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==" + }, + "graceful-readlink": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", + "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=" + }, + "graphql": { + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/graphql/-/graphql-15.0.0.tgz", + "integrity": "sha512-ZyVO1xIF9F+4cxfkdhOJINM+51B06Friuv4M66W7HzUOeFd+vNzUn4vtswYINPi6sysjf1M2Ri/rwZALqgwbaQ==" + }, + "graphql-tag": { + "version": "2.10.1", + "resolved": "https://registry.npmjs.org/graphql-tag/-/graphql-tag-2.10.1.tgz", + "integrity": "sha512-jApXqWBzNXQ8jYa/HLkZJaVw9jgwNqZkywa2zfFn16Iv1Zb7ELNHkJaXHR7Quvd5SIGsy6Ny7SUKATgnu05uEg==" + }, + "growl": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.7.0.tgz", + "integrity": "sha1-3i1mE20ALhErpw8/EMMc98NQsto=", + "dev": true + }, + "growly": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", + "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=" + }, + "grunt": { + "version": "0.3.17", + "resolved": "https://registry.npmjs.org/grunt/-/grunt-0.3.17.tgz", + "integrity": "sha1-8uA00gC+/V7rOLpcQdTM1yNf1k0=", + "dev": true, + "requires": { + "async": "~0.1.18", + "colors": "~0.6.0", + "connect": "~2.4.4", + "dateformat": "1.0.2-1.2.3", + "glob-whatev": "~0.1.4", + "gzip-js": "~0.3.1", + "hooker": "~0.2.3", + "jshint": "~0.9.1", + "nodeunit": "~0.7.4", + "nopt": "~1.0.10", + "prompt": "~0.1.12", + "semver": "~1.0.13", + "temporary": "~0.0.4", + "uglify-js": "~1.3.3", + "underscore": "~1.2.4", + "underscore.string": "~2.1.1" + }, + "dependencies": { + "async": { + "version": "0.1.22", + "resolved": "https://registry.npmjs.org/async/-/async-0.1.22.tgz", + "integrity": "sha1-D8GqoIig4+8Ovi2IMbqw3PiEUGE=", + "dev": true + }, + "bytes": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-0.1.0.tgz", + "integrity": "sha1-xXSBIigSbWNp0VdpJahXnbP45aI=", + "dev": true + }, + "connect": { + "version": "2.4.6", + "resolved": "https://registry.npmjs.org/connect/-/connect-2.4.6.tgz", + "integrity": "sha1-ASwv4FAYUE7SAoZooWkDGZ5ues4=", + "dev": true, + "requires": { + "bytes": "0.1.0", + "cookie": "0.0.4", + "crc": "0.2.0", + "debug": "*", + "formidable": "1.0.11", + "fresh": "0.1.0", + "pause": "0.0.1", + "qs": "0.5.1", + "send": "0.0.4" + } + }, + "cookie": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.0.4.tgz", + "integrity": "sha1-VFa9R67iZm6sl26oCmEFlASD/pg=", + "dev": true + }, + "fresh": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.1.0.tgz", + "integrity": "sha1-A+SwF4Qk5MLV0ZpU2IFM3JeTSFA=", + "dev": true + }, + "mime": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.2.6.tgz", + "integrity": "sha1-sfhsdowCX6h7SAdfFwnyiuryA2U=", + "dev": true + }, + "qs": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-0.5.1.tgz", + "integrity": "sha1-n2v12axsdjhOldNtFbSJgOXkrdA=", + "dev": true + }, + "range-parser": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-0.0.4.tgz", + "integrity": "sha1-wEJ//vUcEKy6B4KkbJYC50T/Ygs=", + "dev": true + }, + "semver": { + "version": "1.0.14", + "resolved": "https://registry.npmjs.org/semver/-/semver-1.0.14.tgz", + "integrity": "sha1-ysXi1Vpvv5WMsiCuhEBFBxx49nY=", + "dev": true + }, + "send": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/send/-/send-0.0.4.tgz", + "integrity": "sha1-LUz3mxifzQlhDhMCUQrJsOTd6AA=", + "dev": true, + "requires": { + "debug": "*", + "fresh": "0.1.0", + "mime": "1.2.6", + "range-parser": "0.0.4" + } + }, + "uglify-js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-1.3.5.tgz", + "integrity": "sha1-S1v/+Rhu/7qoiOTJ6UvZ/EyUkp0=", + "dev": true + } + } + }, + "grunt-clean": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/grunt-clean/-/grunt-clean-0.4.0.tgz", + "integrity": "sha1-p7ThiNfpTKbJO7iOxkCWU0kxxAs=", + "dev": true, + "requires": { + "grunt": "~0.3.9" + } + }, + "grunt-jasmine-node": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/grunt-jasmine-node/-/grunt-jasmine-node-0.3.1.tgz", + "integrity": "sha1-ypuOX1hKR9cBEm4IBknJVGsRNOA=", + "dev": true, + "requires": { + "coffee-script": "~1.6.2", + "jasmine-node": "^1.14.5" + } + }, + "gzip-js": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/gzip-js/-/gzip-js-0.3.2.tgz", + "integrity": "sha1-IxF+/usozzhSSN7/Df+tiUg22Ws=", + "dev": true, + "requires": { + "crc32": ">= 0.2.2", + "deflate-js": ">= 0.2.2" + } + }, + "handlebars": { + "version": "4.5.3", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.5.3.tgz", + "integrity": "sha512-3yPecJoJHK/4c6aZhSvxOyG4vJKDshV36VHp0iVCDVh7o9w2vwi3NSnL2MMPj3YdduqaBcu7cGbggJQM0br9xA==", + "dev": true, + "requires": { + "neo-async": "^2.6.0", + "optimist": "^0.6.1", + "source-map": "^0.6.1", + "uglify-js": "^3.1.4" + }, + "dependencies": { + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true, + "optional": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "uglify-js": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.7.2.tgz", + "integrity": "sha512-uhRwZcANNWVLrxLfNFEdltoPNhECUR3lc+UdJoG9CBpMcSnKyWA94tc3eAujB1GcMY5Uwq8ZMp4qWpxWYDQmaA==", + "dev": true, + "optional": true, + "requires": { + "commander": "~2.20.3", + "source-map": "~0.6.1" + } + } + } + }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "dev": true + }, + "har-validator": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", + "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", + "dev": true, + "requires": { + "ajv": "^6.5.5", + "har-schema": "^2.0.0" + } + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "requires": { + "ansi-regex": "^2.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + } + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "has-symbols": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==" + }, + "has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "requires": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + } + }, + "has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "requires": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "dependencies": { + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "hash-base": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", + "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", + "requires": { + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "dependencies": { + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "requires": { + "safe-buffer": "~5.2.0" + } + } + } + }, + "safe-buffer": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", + "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==" + } + } + }, + "hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "requires": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "hasha": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hasha/-/hasha-3.0.0.tgz", + "integrity": "sha1-UqMvq4Vp1BymmmH/GiFPjrfIvTk=", + "dev": true, + "requires": { + "is-stream": "^1.0.1" + } + }, + "he": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", + "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", + "dev": true + }, + "hermes-engine": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/hermes-engine/-/hermes-engine-0.2.1.tgz", + "integrity": "sha512-eNHUQHuadDMJARpaqvlCZoK/Nitpj6oywq3vQ3wCwEsww5morX34mW5PmKWQTO7aU0ck0hgulxR+EVDlXygGxQ==" + }, + "hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "requires": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "hoist-non-react-statics": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz", + "integrity": "sha512-wbg3bpgA/ZqWrZuMOeJi8+SKMhr7X9TesL/rXMjTzh0p0JUBo3II8DHboYbuIXWRlttrUFxwcu/5kygrCw8fJw==", + "requires": { + "react-is": "^16.7.0" + } + }, + "home-or-tmp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz", + "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=", + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.1" + } + }, + "hooker": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/hooker/-/hooker-0.2.3.tgz", + "integrity": "sha1-uDT3I8xKJCqmWWNFnfbZhMXT2Vk=", + "dev": true + }, + "hosted-git-info": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.5.tgz", + "integrity": "sha512-kssjab8CvdXfcXMXVcvsXum4Hwdq9XGtRD3TteMEvEbq0LXyiNQr6AprqKqfeaDXze7SxWvRxdpwE6ku7ikLkg==" + }, + "html-element-map": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/html-element-map/-/html-element-map-1.2.0.tgz", + "integrity": "sha512-0uXq8HsuG1v2TmQ8QkIhzbrqeskE4kn52Q18QJ9iAA/SnHoEKXWiUxHQtclRsCFWEUD2So34X+0+pZZu862nnw==", + "dev": true, + "requires": { + "array-filter": "^1.0.0" + }, + "dependencies": { + "array-filter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-1.0.0.tgz", + "integrity": "sha1-uveeYubvTCpMC4MSMtr/7CUfnYM=", + "dev": true + } + } + }, + "html-encoding-sniffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz", + "integrity": "sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==", + "dev": true, + "requires": { + "whatwg-encoding": "^1.0.1" + } + }, + "html-minifier": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-0.7.2.tgz", + "integrity": "sha1-K3lZsQUaSB5xzXxuWaZCcq+JXP0=", + "requires": { + "change-case": "2.3.x", + "clean-css": "3.1.x", + "cli": "0.6.x", + "concat-stream": "1.4.x", + "relateurl": "0.2.x", + "uglify-js": "2.4.x" + }, + "dependencies": { + "async": { + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", + "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=" + }, + "camelcase": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", + "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=" + }, + "clean-css": { + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-3.1.9.tgz", + "integrity": "sha1-29BaFIvklDuzfOBnnmdsvJ9YAmY=", + "requires": { + "commander": "2.6.x", + "source-map": ">=0.1.43 <0.2" + } + }, + "commander": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.6.0.tgz", + "integrity": "sha1-nfflL7Kgyw+4kFjugMMQQiXzfh0=" + }, + "concat-stream": { + "version": "1.4.11", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.4.11.tgz", + "integrity": "sha512-X3JMh8+4je3U1cQpG87+f9lXHDrqcb2MVLg9L7o8b1UZ0DzhRrUpdn65ttzu10PpJPPI3MQNkis+oha6TSA9Mw==", + "requires": { + "inherits": "~2.0.1", + "readable-stream": "~1.1.9", + "typedarray": "~0.0.5" + } + }, + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + }, + "readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "source-map": { + "version": "0.1.43", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", + "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=", + "requires": { + "amdefine": ">=0.0.4" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + }, + "uglify-js": { + "version": "2.4.24", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.4.24.tgz", + "integrity": "sha1-+tV1XB4Vd2WLsG/5q25UjJW+vW4=", + "requires": { + "async": "~0.2.6", + "source-map": "0.1.34", + "uglify-to-browserify": "~1.0.0", + "yargs": "~3.5.4" + }, + "dependencies": { + "source-map": { + "version": "0.1.34", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.34.tgz", + "integrity": "sha1-p8/omux7FoLDsZjQrPtH19CQVms=", + "requires": { + "amdefine": ">=0.0.4" + } + } + } + }, + "wordwrap": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", + "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=" + }, + "yargs": { + "version": "3.5.4", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.5.4.tgz", + "integrity": "sha1-2K/49mXpTDS9JZvevRv68N3TU2E=", + "requires": { + "camelcase": "^1.0.2", + "decamelize": "^1.0.0", + "window-size": "0.1.0", + "wordwrap": "0.0.2" + } + } + } + }, + "htmlparser2": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", + "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", + "dev": true, + "requires": { + "domelementtype": "^1.3.1", + "domhandler": "^2.3.0", + "domutils": "^1.5.1", + "entities": "^1.1.1", + "inherits": "^2.0.1", + "readable-stream": "^3.1.1" + }, + "dependencies": { + "entities": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", + "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", + "dev": true + }, + "readable-stream": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz", + "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "dependencies": { + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "requires": { + "safe-buffer": "~5.2.0" + } + } + } + }, + "safe-buffer": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", + "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==", + "dev": true + } + } + }, + "http-errors": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz", + "integrity": "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==", + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + } + }, + "http-proxy-agent": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz", + "integrity": "sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg==", + "requires": { + "agent-base": "4", + "debug": "3.1.0" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + } + } + }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "https-browserify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-0.0.1.tgz", + "integrity": "sha1-P5E2XKvmC3ftDruiS0VOPgnZWoI=" + }, + "https-proxy-agent": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-3.0.1.tgz", + "integrity": "sha512-+ML2Rbh6DAuee7d07tYGEKOEi2voWPUGan+ExdPbPW6Z3svq+JCqr0v8WmKPOkz1vOVykPCBSuobe7G8GJUtVg==", + "requires": { + "agent-base": "^4.3.0", + "debug": "^3.1.0" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "husky": { + "version": "0.14.3", + "resolved": "https://registry.npmjs.org/husky/-/husky-0.14.3.tgz", + "integrity": "sha512-e21wivqHpstpoiWA/Yi8eFti8E+sQDSS53cpJsPptPs295QTOQR0ZwnHo2TXy1XOpZFD9rPOd3NpmqTK6uMLJA==", + "dev": true, + "requires": { + "is-ci": "^1.0.10", + "normalize-path": "^1.0.0", + "strip-indent": "^2.0.0" + }, + "dependencies": { + "ci-info": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz", + "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==", + "dev": true + }, + "is-ci": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz", + "integrity": "sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==", + "dev": true, + "requires": { + "ci-info": "^1.5.0" + } + }, + "normalize-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-1.0.0.tgz", + "integrity": "sha1-MtDkcvkf80VwHBWoMRAY07CpA3k=", + "dev": true + } + } + }, + "i18n-js": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/i18n-js/-/i18n-js-3.5.1.tgz", + "integrity": "sha512-nJgbE5Vj9qzOQfjdVd/uoMoO8ppVaB/3LB6KOmMfD8IQ1vNNh307iHyQLK8ZnLYWkAszfPvVpYmUt1Le/RuHMQ==" + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "identifierfy": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/identifierfy/-/identifierfy-1.1.1.tgz", + "integrity": "sha1-j5Y2UK+jautC8v8O0V8pX/BAr/A=", + "dev": true, + "requires": { + "babel-runtime": "^6.3.19", + "esutils": "^2.0.2" + } + }, + "ieee754": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.8.tgz", + "integrity": "sha1-vjPUCsEO8ZJnAfbwii2G+/0a0+Q=" + }, + "ignore": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.4.tgz", + "integrity": "sha512-MzbUSahkTW1u7JpKKjY7LCARd1fU5W2rLdxlM4kdkayuCwZImjkpluF9CM1aLewYJguPDqewLam18Y6AU69A8A==", + "dev": true + }, + "image-size": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.6.3.tgz", + "integrity": "sha512-47xSUiQioGaB96nqtp5/q55m0aBQSQdyIloMOc/x+QVTDZLNmXE892IIDrJ0hM1A5vcNUDD5tDffkSP5lCaIIA==" + }, + "immer": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/immer/-/immer-3.3.0.tgz", + "integrity": "sha512-vlWRjnZqoTHuEjadquVHK3GxsXe1gNoATffLEA8Qbrdd++Xb+wHEFiWtwAKTscMBoi1AsvEMXhYRzAXA8Ex9FQ==" + }, + "immutable": { + "version": "3.8.2", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-3.8.2.tgz", + "integrity": "sha1-wkOZUUVbs5kT2vKBN28VMOEErfM=", + "optional": true + }, + "import-fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", + "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", + "requires": { + "caller-path": "^2.0.0", + "resolve-from": "^3.0.0" + } + }, + "import-local": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", + "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", + "dev": true, + "requires": { + "pkg-dir": "^3.0.0", + "resolve-cwd": "^2.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" + }, + "indent-string": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz", + "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=", + "dev": true + }, + "indexof": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", + "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=" + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "ini": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", + "dev": true + }, + "inquirer": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz", + "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==", + "requires": { + "ansi-escapes": "^3.0.0", + "chalk": "^2.0.0", + "cli-cursor": "^2.1.0", + "cli-width": "^2.0.0", + "external-editor": "^2.0.4", + "figures": "^2.0.0", + "lodash": "^4.3.0", + "mute-stream": "0.0.7", + "run-async": "^2.2.0", + "rx-lite": "^4.0.8", + "rx-lite-aggregates": "^4.0.8", + "string-width": "^2.1.0", + "strip-ansi": "^4.0.0", + "through": "^2.3.6" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "requires": { + "loose-envify": "^1.0.0" + } + }, + "invert-kv": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", + "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=" + }, + "ip": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", + "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=" + }, + "ip-regex": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-1.0.3.tgz", + "integrity": "sha1-3FiQdvZZ9BnCIgOaMzFvHHOH7/0=" + }, + "is": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/is/-/is-0.2.7.tgz", + "integrity": "sha1-OzSixI81mXLzUEKEkZOucmS2NWI=" + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-arguments": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.0.4.tgz", + "integrity": "sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA==", + "dev": true + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-boolean-object": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.0.1.tgz", + "integrity": "sha512-TqZuVwa/sppcrhUCAYkGBk7w0yxfQQnxq28fjkO53tnK9FQXmdwz2JS5+GjsWQ6RByES1K40nI+yDic5c9/aAQ==", + "dev": true + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, + "is-callable": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz", + "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==", + "dev": true + }, + "is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "requires": { + "ci-info": "^2.0.0" + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-date-object": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", + "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", + "dev": true + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" + } + } + }, + "is-directory": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", + "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=" + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-finite": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", + "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "is-generator": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-generator/-/is-generator-1.0.3.tgz", + "integrity": "sha1-wUwhBX7TbjKNuANHlmxpP4hjifM=" + }, + "is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "dev": true + }, + "is-git-status-clean": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-git-status-clean/-/is-git-status-clean-1.0.0.tgz", + "integrity": "sha1-3H0sTViYfkyOVPf5pdHKr+q+oRY=", + "dev": true, + "requires": { + "chalk": "^2.3.2", + "indent-string": "^3.2.0", + "meow": "^4.0.0" + } + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-lower-case": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/is-lower-case/-/is-lower-case-1.1.3.tgz", + "integrity": "sha1-fhR75HaNxGbbO/shzGCzHmrWk5M=", + "requires": { + "lower-case": "^1.1.0" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-number-object": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.4.tgz", + "integrity": "sha512-zohwelOAur+5uXtk8O3GPQ1eAcu4ZX3UwxQhUlfFFMNpUd83gXgjbhJh6HmB6LUNV/ieOLQuDwJO3dWJosUeMw==", + "dev": true + }, + "is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=" + }, + "is-object": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/is-object/-/is-object-0.1.2.tgz", + "integrity": "sha1-AO+8CIFsM8/ErIJR0TLhDcZQmNc=" + }, + "is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", + "dev": true + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "requires": { + "isobject": "^3.0.1" + } + }, + "is-promise": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", + "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=" + }, + "is-regex": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz", + "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" + }, + "is-string": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz", + "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==", + "dev": true + }, + "is-subset": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-subset/-/is-subset-0.1.1.tgz", + "integrity": "sha1-ilkRfZMt4d4A8kX83TnOQ/HpOaY=", + "dev": true + }, + "is-symbol": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", + "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", + "dev": true, + "requires": { + "has-symbols": "^1.0.1" + } + }, + "is-there": { + "version": "4.4.4", + "resolved": "https://registry.npmjs.org/is-there/-/is-there-4.4.4.tgz", + "integrity": "sha512-WbEGbR5i/vSLJ/cc72kVCoM0RvKWmtmPpRXriNlhsredolym2aSTHZA02IzvDR5ewmwD0V6e9S3s9aHs6Ygw5A==", + "dev": true + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "is-upper-case": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-upper-case/-/is-upper-case-1.1.2.tgz", + "integrity": "sha1-jQsfp+eTOh5YSDYA7H2WYcuvdW8=", + "requires": { + "upper-case": "^1.1.0" + } + }, + "is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", + "dev": true + }, + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==" + }, + "is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=" + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" + }, + "isomorphic-fetch": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", + "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", + "requires": { + "node-fetch": "^1.0.1", + "whatwg-fetch": ">=0.10.0" + }, + "dependencies": { + "node-fetch": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", + "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", + "requires": { + "encoding": "^0.1.11", + "is-stream": "^1.0.1" + } + } + } + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "dev": true + }, + "istanbul-lib-coverage": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz", + "integrity": "sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==", + "dev": true + }, + "istanbul-lib-hook": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-2.0.7.tgz", + "integrity": "sha512-vrRztU9VRRFDyC+aklfLoeXyNdTfga2EI3udDGn4cZ6fpSXpHLV9X6CHvfoMCPtggg8zvDDmC4b9xfu0z6/llA==", + "dev": true, + "requires": { + "append-transform": "^1.0.0" + } + }, + "istanbul-lib-instrument": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-3.3.0.tgz", + "integrity": "sha512-5nnIN4vo5xQZHdXno/YDXJ0G+I3dAm4XgzfSVTPLQpj/zAV2dV6Juy0yaf10/zrJOJeHoN3fraFe+XRq2bFVZA==", + "dev": true, + "requires": { + "@babel/generator": "^7.4.0", + "@babel/parser": "^7.4.3", + "@babel/template": "^7.4.0", + "@babel/traverse": "^7.4.3", + "@babel/types": "^7.4.0", + "istanbul-lib-coverage": "^2.0.5", + "semver": "^6.0.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "istanbul-lib-processinfo": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-processinfo/-/istanbul-lib-processinfo-1.0.0.tgz", + "integrity": "sha512-FY0cPmWa4WoQNlvB8VOcafiRoB5nB+l2Pz2xGuXHRSy1KM8QFOYfz/rN+bGMCAeejrY3mrpF5oJHcN0s/garCg==", + "dev": true, + "requires": { + "archy": "^1.0.0", + "cross-spawn": "^6.0.5", + "istanbul-lib-coverage": "^2.0.3", + "rimraf": "^2.6.3", + "uuid": "^3.3.2" + } + }, + "istanbul-lib-report": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-2.0.8.tgz", + "integrity": "sha512-fHBeG573EIihhAblwgxrSenp0Dby6tJMFR/HvlerBsrCTD5bkUuoNtn3gVh29ZCS824cGGBPn7Sg7cNk+2xUsQ==", + "dev": true, + "requires": { + "istanbul-lib-coverage": "^2.0.5", + "make-dir": "^2.1.0", + "supports-color": "^6.1.0" + }, + "dependencies": { + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "istanbul-lib-source-maps": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.6.tgz", + "integrity": "sha512-R47KzMtDJH6X4/YW9XTx+jrLnZnscW4VpNN+1PViSYTejLVPWv7oov+Duf8YQSPyVRUvueQqz1TcsC6mooZTXw==", + "dev": true, + "requires": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^2.0.5", + "make-dir": "^2.1.0", + "rimraf": "^2.6.3", + "source-map": "^0.6.1" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "istanbul-reports": { + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-2.2.6.tgz", + "integrity": "sha512-SKi4rnMyLBKe0Jy2uUdx28h8oG7ph2PPuQPvIAh31d+Ci+lSiEu4C+h3oBPuJ9+mPKhOyW0M8gY4U5NM1WLeXA==", + "dev": true, + "requires": { + "handlebars": "^4.1.2" + } + }, + "jackspeak": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-1.4.0.tgz", + "integrity": "sha512-VDcSunT+wcccoG46FtzuBAyQKlzhHjli4q31e1fIHGOsRspqNUFjVzGb+7eIFDlTvqLygxapDHPHS0ouT2o/tw==", + "dev": true, + "requires": { + "cliui": "^4.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "cliui": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", + "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", + "dev": true, + "requires": { + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0", + "wrap-ansi": "^2.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "jasmine-growl-reporter": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/jasmine-growl-reporter/-/jasmine-growl-reporter-0.2.1.tgz", + "integrity": "sha1-1fCje5L2qD/VxkgrgJSVyQqLVf4=", + "dev": true, + "requires": { + "growl": "~1.7.0" + } + }, + "jasmine-node": { + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/jasmine-node/-/jasmine-node-1.16.2.tgz", + "integrity": "sha512-A4AA2WaikuE7s/NYQCqfYsyCczEgObLgNH7IxRQ2SBshLBZg7vUEiiGX4GPbveW5f06nYmXYlzY4UjnZjXjV9g==", + "dev": true, + "requires": { + "coffeescript": "~1.12.7", + "gaze": "~1.1.2", + "jasmine-growl-reporter": "~0.2.0", + "jasmine-reporters": "~1.0.0", + "mkdirp": "~0.3.5", + "requirejs": "~2.3.6", + "underscore": "~1.9.1", + "walkdir": "~0.0.12" + }, + "dependencies": { + "coffeescript": { + "version": "1.12.7", + "resolved": "https://registry.npmjs.org/coffeescript/-/coffeescript-1.12.7.tgz", + "integrity": "sha512-pLXHFxQMPklVoEekowk8b3erNynC+DVJzChxS/LCBBgR6/8AJkHivkm//zbowcfc7BTCAjryuhx6gPqPRfsFoA==", + "dev": true + }, + "mkdirp": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.5.tgz", + "integrity": "sha1-3j5fiWHIjHh+4TaN+EmsRBPsqNc=", + "dev": true + }, + "underscore": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.1.tgz", + "integrity": "sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg==", + "dev": true + } + } + }, + "jasmine-reporters": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/jasmine-reporters/-/jasmine-reporters-1.0.2.tgz", + "integrity": "sha1-q2E+1Zd9x0h+hbPBL2qOqNsq3jE=", + "dev": true, + "requires": { + "mkdirp": "~0.3.5" + }, + "dependencies": { + "mkdirp": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.5.tgz", + "integrity": "sha1-3j5fiWHIjHh+4TaN+EmsRBPsqNc=", + "dev": true + } + } + }, + "jest": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-24.9.0.tgz", + "integrity": "sha512-YvkBL1Zm7d2B1+h5fHEOdyjCG+sGMz4f8D86/0HiqJ6MB4MnDc8FgP5vdWsGnemOQro7lnYo8UakZ3+5A0jxGw==", + "dev": true, + "requires": { + "import-local": "^2.0.0", + "jest-cli": "^24.9.0" + }, + "dependencies": { + "cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dev": true, + "requires": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "jest-cli": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-24.9.0.tgz", + "integrity": "sha512-+VLRKyitT3BWoMeSUIHRxV/2g8y9gw91Jh5z2UmXZzkZKpbC08CSehVxgHUwTpy+HwGcns/tqafQDJW7imYvGg==", + "dev": true, + "requires": { + "@jest/core": "^24.9.0", + "@jest/test-result": "^24.9.0", + "@jest/types": "^24.9.0", + "chalk": "^2.0.1", + "exit": "^0.1.2", + "import-local": "^2.0.0", + "is-ci": "^2.0.0", + "jest-config": "^24.9.0", + "jest-util": "^24.9.0", + "jest-validate": "^24.9.0", + "prompts": "^2.0.1", + "realpath-native": "^1.1.0", + "yargs": "^13.3.0" + } + }, + "require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + }, + "wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + } + }, + "y18n": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", + "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", + "dev": true + }, + "yargs": { + "version": "13.3.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.0.tgz", + "integrity": "sha512-2eehun/8ALW8TLoIl7MVaRUrg+yCnenu8B4kBlRxj3GJGDKU1Og7sMXPNm1BYyM1DOJmTZ4YeN/Nwxv+8XJsUA==", + "dev": true, + "requires": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.1" + } + }, + "yargs-parser": { + "version": "13.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.1.tgz", + "integrity": "sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, + "jest-changed-files": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-24.9.0.tgz", + "integrity": "sha512-6aTWpe2mHF0DhL28WjdkO8LyGjs3zItPET4bMSeXU6T3ub4FPMw+mcOcbdGXQOAfmLcxofD23/5Bl9Z4AkFwqg==", + "dev": true, + "requires": { + "@jest/types": "^24.9.0", + "execa": "^1.0.0", + "throat": "^4.0.0" + } + }, + "jest-config": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-24.9.0.tgz", + "integrity": "sha512-RATtQJtVYQrp7fvWg6f5y3pEFj9I+H8sWw4aKxnDZ96mob5i5SD6ZEGWgMLXQ4LE8UurrjbdlLWdUeo+28QpfQ==", + "dev": true, + "requires": { + "@babel/core": "^7.1.0", + "@jest/test-sequencer": "^24.9.0", + "@jest/types": "^24.9.0", + "babel-jest": "^24.9.0", + "chalk": "^2.0.1", + "glob": "^7.1.1", + "jest-environment-jsdom": "^24.9.0", + "jest-environment-node": "^24.9.0", + "jest-get-type": "^24.9.0", + "jest-jasmine2": "^24.9.0", + "jest-regex-util": "^24.3.0", + "jest-resolve": "^24.9.0", + "jest-util": "^24.9.0", + "jest-validate": "^24.9.0", + "micromatch": "^3.1.10", + "pretty-format": "^24.9.0", + "realpath-native": "^1.1.0" + } + }, + "jest-diff": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-24.9.0.tgz", + "integrity": "sha512-qMfrTs8AdJE2iqrTp0hzh7kTd2PQWrsFyj9tORoKmu32xjPjeE4NyjVRDz8ybYwqS2ik8N4hsIpiVTyFeo2lBQ==", + "dev": true, + "requires": { + "chalk": "^2.0.1", + "diff-sequences": "^24.9.0", + "jest-get-type": "^24.9.0", + "pretty-format": "^24.9.0" + } + }, + "jest-docblock": { + "version": "21.2.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-21.2.0.tgz", + "integrity": "sha512-5IZ7sY9dBAYSV+YjQ0Ovb540Ku7AO9Z5o2Cg789xj167iQuZ2cG+z0f3Uct6WeYLbU6aQiM2pCs7sZ+4dotydw==", + "dev": true + }, + "jest-each": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-24.9.0.tgz", + "integrity": "sha512-ONi0R4BvW45cw8s2Lrx8YgbeXL1oCQ/wIDwmsM3CqM/nlblNCPmnC3IPQlMbRFZu3wKdQ2U8BqM6lh3LJ5Bsog==", + "dev": true, + "requires": { + "@jest/types": "^24.9.0", + "chalk": "^2.0.1", + "jest-get-type": "^24.9.0", + "jest-util": "^24.9.0", + "pretty-format": "^24.9.0" + } + }, + "jest-environment-jsdom": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-24.9.0.tgz", + "integrity": "sha512-Zv9FV9NBRzLuALXjvRijO2351DRQeLYXtpD4xNvfoVFw21IOKNhZAEUKcbiEtjTkm2GsJ3boMVgkaR7rN8qetA==", + "dev": true, + "requires": { + "@jest/environment": "^24.9.0", + "@jest/fake-timers": "^24.9.0", + "@jest/types": "^24.9.0", + "jest-mock": "^24.9.0", + "jest-util": "^24.9.0", + "jsdom": "^11.5.1" + } + }, + "jest-environment-node": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-24.9.0.tgz", + "integrity": "sha512-6d4V2f4nxzIzwendo27Tr0aFm+IXWa0XEUnaH6nU0FMaozxovt+sfRvh4J47wL1OvF83I3SSTu0XK+i4Bqe7uA==", + "dev": true, + "requires": { + "@jest/environment": "^24.9.0", + "@jest/fake-timers": "^24.9.0", + "@jest/types": "^24.9.0", + "jest-mock": "^24.9.0", + "jest-util": "^24.9.0" + } + }, + "jest-fetch-mock": { + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/jest-fetch-mock/-/jest-fetch-mock-1.7.5.tgz", + "integrity": "sha512-fP0CXb24z5oyvHiqakvDiDqEik1LPmIgRqsrqLhXkMNqSfibfsDkP5VJzm9/rmVsT9WSGQGNZ4iD2f1/Sm0qmg==", + "dev": true, + "requires": { + "cross-fetch": "^2.2.2", + "promise-polyfill": "^7.1.1" + }, + "dependencies": { + "promise-polyfill": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/promise-polyfill/-/promise-polyfill-7.1.2.tgz", + "integrity": "sha512-FuEc12/eKqqoRYIGBrUptCBRhobL19PS2U31vMNTfyck1FxPyMfgsXyW4Mav85y/ZN1hop3hOwRlUDok23oYfQ==", + "dev": true + } + } + }, + "jest-get-type": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-24.9.0.tgz", + "integrity": "sha512-lUseMzAley4LhIcpSP9Jf+fTrQ4a1yHQwLNeeVa2cEmbCGeoZAtYPOIv8JaxLD/sUpKxetKGP+gsHl8f8TSj8Q==" + }, + "jest-haste-map": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-24.9.0.tgz", + "integrity": "sha512-kfVFmsuWui2Sj1Rp1AJ4D9HqJwE4uwTlS/vO+eRUaMmd54BFpli2XhMQnPC2k4cHFVbB2Q2C+jtI1AGLgEnCjQ==", + "requires": { + "@jest/types": "^24.9.0", + "anymatch": "^2.0.0", + "fb-watchman": "^2.0.0", + "fsevents": "^1.2.7", + "graceful-fs": "^4.1.15", + "invariant": "^2.2.4", + "jest-serializer": "^24.9.0", + "jest-util": "^24.9.0", + "jest-worker": "^24.9.0", + "micromatch": "^3.1.10", + "sane": "^4.0.3", + "walker": "^1.0.7" + } + }, + "jest-jasmine2": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-24.9.0.tgz", + "integrity": "sha512-Cq7vkAgaYKp+PsX+2/JbTarrk0DmNhsEtqBXNwUHkdlbrTBLtMJINADf2mf5FkowNsq8evbPc07/qFO0AdKTzw==", + "dev": true, + "requires": { + "@babel/traverse": "^7.1.0", + "@jest/environment": "^24.9.0", + "@jest/test-result": "^24.9.0", + "@jest/types": "^24.9.0", + "chalk": "^2.0.1", + "co": "^4.6.0", + "expect": "^24.9.0", + "is-generator-fn": "^2.0.0", + "jest-each": "^24.9.0", + "jest-matcher-utils": "^24.9.0", + "jest-message-util": "^24.9.0", + "jest-runtime": "^24.9.0", + "jest-snapshot": "^24.9.0", + "jest-util": "^24.9.0", + "pretty-format": "^24.9.0", + "throat": "^4.0.0" + } + }, + "jest-leak-detector": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-24.9.0.tgz", + "integrity": "sha512-tYkFIDsiKTGwb2FG1w8hX9V0aUb2ot8zY/2nFg087dUageonw1zrLMP4W6zsRO59dPkTSKie+D4rhMuP9nRmrA==", + "dev": true, + "requires": { + "jest-get-type": "^24.9.0", + "pretty-format": "^24.9.0" + } + }, + "jest-matcher-utils": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-24.9.0.tgz", + "integrity": "sha512-OZz2IXsu6eaiMAwe67c1T+5tUAtQyQx27/EMEkbFAGiw52tB9em+uGbzpcgYVpA8wl0hlxKPZxrly4CXU/GjHA==", + "dev": true, + "requires": { + "chalk": "^2.0.1", + "jest-diff": "^24.9.0", + "jest-get-type": "^24.9.0", + "pretty-format": "^24.9.0" + } + }, + "jest-message-util": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-24.9.0.tgz", + "integrity": "sha512-oCj8FiZ3U0hTP4aSui87P4L4jC37BtQwUMqk+zk/b11FR19BJDeZsZAvIHutWnmtw7r85UmR3CEWZ0HWU2mAlw==", + "requires": { + "@babel/code-frame": "^7.0.0", + "@jest/test-result": "^24.9.0", + "@jest/types": "^24.9.0", + "@types/stack-utils": "^1.0.1", + "chalk": "^2.0.1", + "micromatch": "^3.1.10", + "slash": "^2.0.0", + "stack-utils": "^1.0.1" + } + }, + "jest-mock": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-24.9.0.tgz", + "integrity": "sha512-3BEYN5WbSq9wd+SyLDES7AHnjH9A/ROBwmz7l2y+ol+NtSFO8DYiEBzoO1CeFc9a8DYy10EO4dDFVv/wN3zl1w==", + "requires": { + "@jest/types": "^24.9.0" + } + }, + "jest-pnp-resolver": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.1.tgz", + "integrity": "sha512-pgFw2tm54fzgYvc/OHrnysABEObZCUNFnhjoRjaVOCN8NYc032/gVjPaHD4Aq6ApkSieWtfKAFQtmDKAmhupnQ==", + "dev": true + }, + "jest-prop-type-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/jest-prop-type-error/-/jest-prop-type-error-1.1.0.tgz", + "integrity": "sha512-i/4hdbKSp6cFJc2z3Blu2WEOGjxbQ76pShhtDFIqUfdC8ruMGT57EOsBtBq69FVg915MUMwENNc185ejs7mmtg==", + "dev": true + }, + "jest-regex-util": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-24.9.0.tgz", + "integrity": "sha512-05Cmb6CuxaA+Ys6fjr3PhvV3bGQmO+2p2La4hFbU+W5uOc479f7FdLXUWXw4pYMAhhSZIuKHwSXSu6CsSBAXQA==", + "dev": true + }, + "jest-resolve": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-24.9.0.tgz", + "integrity": "sha512-TaLeLVL1l08YFZAt3zaPtjiVvyy4oSA6CRe+0AFPPVX3Q/VI0giIWWoAvoS5L96vj9Dqxj4fB5p2qrHCmTU/MQ==", + "dev": true, + "requires": { + "@jest/types": "^24.9.0", + "browser-resolve": "^1.11.3", + "chalk": "^2.0.1", + "jest-pnp-resolver": "^1.2.1", + "realpath-native": "^1.1.0" + } + }, + "jest-resolve-dependencies": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-24.9.0.tgz", + "integrity": "sha512-Fm7b6AlWnYhT0BXy4hXpactHIqER7erNgIsIozDXWl5dVm+k8XdGVe1oTg1JyaFnOxarMEbax3wyRJqGP2Pq+g==", + "dev": true, + "requires": { + "@jest/types": "^24.9.0", + "jest-regex-util": "^24.3.0", + "jest-snapshot": "^24.9.0" + } + }, + "jest-runner": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-24.9.0.tgz", + "integrity": "sha512-KksJQyI3/0mhcfspnxxEOBueGrd5E4vV7ADQLT9ESaCzz02WnbdbKWIf5Mkaucoaj7obQckYPVX6JJhgUcoWWg==", + "dev": true, + "requires": { + "@jest/console": "^24.7.1", + "@jest/environment": "^24.9.0", + "@jest/test-result": "^24.9.0", + "@jest/types": "^24.9.0", + "chalk": "^2.4.2", + "exit": "^0.1.2", + "graceful-fs": "^4.1.15", + "jest-config": "^24.9.0", + "jest-docblock": "^24.3.0", + "jest-haste-map": "^24.9.0", + "jest-jasmine2": "^24.9.0", + "jest-leak-detector": "^24.9.0", + "jest-message-util": "^24.9.0", + "jest-resolve": "^24.9.0", + "jest-runtime": "^24.9.0", + "jest-util": "^24.9.0", + "jest-worker": "^24.6.0", + "source-map-support": "^0.5.6", + "throat": "^4.0.0" + }, + "dependencies": { + "jest-docblock": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-24.9.0.tgz", + "integrity": "sha512-F1DjdpDMJMA1cN6He0FNYNZlo3yYmOtRUnktrT9Q37njYzC5WEaDdmbynIgy0L/IvXvvgsG8OsqhLPXTpfmZAA==", + "dev": true, + "requires": { + "detect-newline": "^2.1.0" + } + } + } + }, + "jest-runtime": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-24.9.0.tgz", + "integrity": "sha512-8oNqgnmF3v2J6PVRM2Jfuj8oX3syKmaynlDMMKQ4iyzbQzIG6th5ub/lM2bCMTmoTKM3ykcUYI2Pw9xwNtjMnw==", + "dev": true, + "requires": { + "@jest/console": "^24.7.1", + "@jest/environment": "^24.9.0", + "@jest/source-map": "^24.3.0", + "@jest/transform": "^24.9.0", + "@jest/types": "^24.9.0", + "@types/yargs": "^13.0.0", + "chalk": "^2.0.1", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.1.15", + "jest-config": "^24.9.0", + "jest-haste-map": "^24.9.0", + "jest-message-util": "^24.9.0", + "jest-mock": "^24.9.0", + "jest-regex-util": "^24.3.0", + "jest-resolve": "^24.9.0", + "jest-snapshot": "^24.9.0", + "jest-util": "^24.9.0", + "jest-validate": "^24.9.0", + "realpath-native": "^1.1.0", + "slash": "^2.0.0", + "strip-bom": "^3.0.0", + "yargs": "^13.3.0" + }, + "dependencies": { + "cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dev": true, + "requires": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + }, + "wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + } + }, + "y18n": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", + "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", + "dev": true + }, + "yargs": { + "version": "13.3.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.0.tgz", + "integrity": "sha512-2eehun/8ALW8TLoIl7MVaRUrg+yCnenu8B4kBlRxj3GJGDKU1Og7sMXPNm1BYyM1DOJmTZ4YeN/Nwxv+8XJsUA==", + "dev": true, + "requires": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.1" + } + }, + "yargs-parser": { + "version": "13.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.1.tgz", + "integrity": "sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, + "jest-serializer": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-24.9.0.tgz", + "integrity": "sha512-DxYipDr8OvfrKH3Kel6NdED3OXxjvxXZ1uIY2I9OFbGg+vUkkg7AGvi65qbhbWNPvDckXmzMPbK3u3HaDO49bQ==" + }, + "jest-snapshot": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-24.9.0.tgz", + "integrity": "sha512-uI/rszGSs73xCM0l+up7O7a40o90cnrk429LOiK3aeTvfC0HHmldbd81/B7Ix81KSFe1lwkbl7GnBGG4UfuDew==", + "dev": true, + "requires": { + "@babel/types": "^7.0.0", + "@jest/types": "^24.9.0", + "chalk": "^2.0.1", + "expect": "^24.9.0", + "jest-diff": "^24.9.0", + "jest-get-type": "^24.9.0", + "jest-matcher-utils": "^24.9.0", + "jest-message-util": "^24.9.0", + "jest-resolve": "^24.9.0", + "mkdirp": "^0.5.1", + "natural-compare": "^1.4.0", + "pretty-format": "^24.9.0", + "semver": "^6.2.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "jest-util": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-24.9.0.tgz", + "integrity": "sha512-x+cZU8VRmOJxbA1K5oDBdxQmdq0OIdADarLxk0Mq+3XS4jgvhG/oKGWcIDCtPG0HgjxOYvF+ilPJQsAyXfbNOg==", + "requires": { + "@jest/console": "^24.9.0", + "@jest/fake-timers": "^24.9.0", + "@jest/source-map": "^24.9.0", + "@jest/test-result": "^24.9.0", + "@jest/types": "^24.9.0", + "callsites": "^3.0.0", + "chalk": "^2.0.1", + "graceful-fs": "^4.1.15", + "is-ci": "^2.0.0", + "mkdirp": "^0.5.1", + "slash": "^2.0.0", + "source-map": "^0.6.0" + }, + "dependencies": { + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "jest-validate": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-24.9.0.tgz", + "integrity": "sha512-HPIt6C5ACwiqSiwi+OfSSHbK8sG7akG8eATl+IPKaeIjtPOeBUd/g3J7DghugzxrGjI93qS/+RPKe1H6PqvhRQ==", + "requires": { + "@jest/types": "^24.9.0", + "camelcase": "^5.3.1", + "chalk": "^2.0.1", + "jest-get-type": "^24.9.0", + "leven": "^3.1.0", + "pretty-format": "^24.9.0" + } + }, + "jest-watcher": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-24.9.0.tgz", + "integrity": "sha512-+/fLOfKPXXYJDYlks62/4R4GoT+GU1tYZed99JSCOsmzkkF7727RqKrjNAxtfO4YpGv11wybgRvCjR73lK2GZw==", + "dev": true, + "requires": { + "@jest/test-result": "^24.9.0", + "@jest/types": "^24.9.0", + "@types/yargs": "^13.0.0", + "ansi-escapes": "^3.0.0", + "chalk": "^2.0.1", + "jest-util": "^24.9.0", + "string-length": "^2.0.0" + } + }, + "jest-worker": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-24.9.0.tgz", + "integrity": "sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw==", + "requires": { + "merge-stream": "^2.0.0", + "supports-color": "^6.1.0" + }, + "dependencies": { + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "jetifier": { + "version": "1.6.5", + "resolved": "https://registry.npmjs.org/jetifier/-/jetifier-1.6.5.tgz", + "integrity": "sha512-T7yzBSu9PR+DqjYt+I0KVO1XTb1QhAfHnXV5Nd3xpbXM6Xg4e3vP60Q4qkNU8Fh6PHC2PivPUNN3rY7G2MxcDQ==" + }, + "js-base64": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.3.2.tgz", + "integrity": "sha512-Y2/+DnfJJXT1/FCwUebUhLWb3QihxiSC42+ctHLGogmW2jPY6LCapMdFZXRvVP2z6qyKW7s6qncE/9gSqZiArw==" + }, + "js-beautify": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.10.2.tgz", + "integrity": "sha512-ZtBYyNUYJIsBWERnQP0rPN9KjkrDfJcMjuVGcvXOUJrD1zmOGwhRwQ4msG+HJ+Ni/FA7+sRQEMYVzdTQDvnzvQ==", + "dev": true, + "requires": { + "config-chain": "^1.1.12", + "editorconfig": "^0.15.3", + "glob": "^7.1.3", + "mkdirp": "~0.5.1", + "nopt": "~4.0.1" + }, + "dependencies": { + "nopt": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz", + "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=", + "dev": true, + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + } + } + }, + "js-levenshtein": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.6.tgz", + "integrity": "sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==", + "dev": true + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "js-yaml": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", + "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "dev": true + }, + "jsc-android": { + "version": "241213.1.0", + "resolved": "https://registry.npmjs.org/jsc-android/-/jsc-android-241213.1.0.tgz", + "integrity": "sha512-AH8NYyMNLNhcUEF97QbMxPNLNW+oiSBlvm1rsMNzgJ1d5TQzdh/AOJGsxeeESp3m9YIWGLCgUvGTVoVLs0p68A==" + }, + "jsdom": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-11.12.0.tgz", + "integrity": "sha512-y8Px43oyiBM13Zc1z780FrfNLJCXTL40EWlty/LXUtcjykRBNgLlCjWXpfSPBl2iv+N7koQN+dvqszHZgT/Fjw==", + "dev": true, + "requires": { + "abab": "^2.0.0", + "acorn": "^5.5.3", + "acorn-globals": "^4.1.0", + "array-equal": "^1.0.0", + "cssom": ">= 0.3.2 < 0.4.0", + "cssstyle": "^1.0.0", + "data-urls": "^1.0.0", + "domexception": "^1.0.1", + "escodegen": "^1.9.1", + "html-encoding-sniffer": "^1.0.2", + "left-pad": "^1.3.0", + "nwsapi": "^2.0.7", + "parse5": "4.0.0", + "pn": "^1.1.0", + "request": "^2.87.0", + "request-promise-native": "^1.0.5", + "sax": "^1.2.4", + "symbol-tree": "^3.2.2", + "tough-cookie": "^2.3.4", + "w3c-hr-time": "^1.0.1", + "webidl-conversions": "^4.0.2", + "whatwg-encoding": "^1.0.3", + "whatwg-mimetype": "^2.1.0", + "whatwg-url": "^6.4.1", + "ws": "^5.2.0", + "xml-name-validator": "^3.0.0" + }, + "dependencies": { + "acorn": { + "version": "5.7.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz", + "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==", + "dev": true + }, + "parse5": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz", + "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==", + "dev": true + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "dev": true + }, + "ws": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.2.tgz", + "integrity": "sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA==", + "dev": true, + "requires": { + "async-limiter": "~1.0.0" + } + } + } + }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" + }, + "jshint": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/jshint/-/jshint-0.9.1.tgz", + "integrity": "sha1-/zLsfwn4QAH3SY7q/WPJ5Puy3A4=", + "dev": true, + "requires": { + "cli": "0.4.3", + "minimatch": "0.0.x" + }, + "dependencies": { + "cli": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/cli/-/cli-0.4.3.tgz", + "integrity": "sha1-5oGcjV+qlX9k+Y9mqFBiaMHR8X0=", + "dev": true, + "requires": { + "glob": ">= 3.1.4" + } + }, + "lru-cache": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-1.0.6.tgz", + "integrity": "sha1-qlD5cEdCKsclQ72hd6nJ0BjZhFI=", + "dev": true + }, + "minimatch": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.0.5.tgz", + "integrity": "sha1-lrtJC707poNrv6wRGt91MBsVhN4=", + "dev": true, + "requires": { + "lru-cache": "~1.0.2" + } + } + } + }, + "json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" + }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", + "dev": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "json-stable-stringify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", + "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", + "requires": { + "jsonify": "~0.0.0" + } + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "dev": true + }, + "json3": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.0.tgz", + "integrity": "sha1-Dp5/bF0nC3WJKa9Nb+/chL1m4lk=", + "dev": true + }, + "json5": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.1.tgz", + "integrity": "sha512-l+3HXD0GEI3huGq1njuqtzYK8OYJyXMkOLtQ53pjWh89tvWS2h6l+1zMkYWqlb57+SiQodKZyvMEFb2X+KrFhQ==", + "requires": { + "minimist": "^1.2.0" + } + }, + "jsonfile": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", + "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "jsonify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", + "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=" + }, + "jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, + "jsx-ast-utils": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-2.2.3.tgz", + "integrity": "sha512-EdIHFMm+1BPynpKOpdPqiOsvnIrInRGJD7bzPZdPkjitQEqpdpUuFpq4T0npZFKTiB3RhWFdGN+oqOJIdhDhQA==", + "dev": true, + "requires": { + "array-includes": "^3.0.3", + "object.assign": "^4.1.0" + } + }, + "jwt-decode": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/jwt-decode/-/jwt-decode-2.2.0.tgz", + "integrity": "sha1-fYa9VmefWM5qhHBKZX3TkruoGnk=" + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" + }, + "klaw": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", + "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=", + "requires": { + "graceful-fs": "^4.1.9" + } + }, + "kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "dev": true + }, + "lazy-cache": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", + "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=" + }, + "lazyrequire": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/lazyrequire/-/lazyrequire-1.3.0.tgz", + "integrity": "sha1-ztRdzanV1FfdMnsr3hM0iHLcsF8=", + "requires": { + "callsite": "1", + "chalk": "1", + "fn-getter": "^1.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" + } + } + }, + "lcid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", + "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", + "requires": { + "invert-kv": "^1.0.0" + } + }, + "lcov-parse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lcov-parse/-/lcov-parse-1.0.0.tgz", + "integrity": "sha1-6w1GtUER68VhrLTECO+TY73I9+A=", + "dev": true + }, + "left-pad": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/left-pad/-/left-pad-1.3.0.tgz", + "integrity": "sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA==", + "dev": true + }, + "level-blobs": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/level-blobs/-/level-blobs-0.1.7.tgz", + "integrity": "sha1-mrm5e7mfHtv594o0M+Ie1WOGva8=", + "requires": { + "level-peek": "1.0.6", + "once": "^1.3.0", + "readable-stream": "^1.0.26-4" + } + }, + "level-filesystem": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/level-filesystem/-/level-filesystem-1.2.0.tgz", + "integrity": "sha1-oArKmRnEpN+v3KaoEI0iWq3/Y7M=", + "requires": { + "concat-stream": "^1.4.4", + "errno": "^0.1.1", + "fwd-stream": "^1.0.4", + "level-blobs": "^0.1.7", + "level-peek": "^1.0.6", + "level-sublevel": "^5.2.0", + "octal": "^1.0.0", + "once": "^1.3.0", + "xtend": "^2.2.0" + }, + "dependencies": { + "xtend": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.2.0.tgz", + "integrity": "sha1-7vax8ZjByN6vrYsXZaBNrUoBxak=" + } + } + }, + "level-fix-range": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/level-fix-range/-/level-fix-range-1.0.2.tgz", + "integrity": "sha1-vxW5Fa422EcMgh6IPd95zRZCCCg=" + }, + "level-hooks": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/level-hooks/-/level-hooks-4.5.0.tgz", + "integrity": "sha1-G5rmGSKTDzMF0aYfxNg8gQLA3ZM=", + "requires": { + "string-range": "~1.2" + } + }, + "level-peek": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/level-peek/-/level-peek-1.0.6.tgz", + "integrity": "sha1-vsUccqgu5GTTNkNMfIdsP8vM538=", + "requires": { + "level-fix-range": "~1.0.2" + } + }, + "level-sublevel": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/level-sublevel/-/level-sublevel-5.2.3.tgz", + "integrity": "sha1-dEwSxy0ucr543eO5tc2E1iGRQTo=", + "requires": { + "level-fix-range": "2.0", + "level-hooks": ">=4.4.0 <5", + "string-range": "~1.2.1", + "xtend": "~2.0.4" + }, + "dependencies": { + "clone": { + "version": "0.1.19", + "resolved": "https://registry.npmjs.org/clone/-/clone-0.1.19.tgz", + "integrity": "sha1-YT+2hjmyaklKxTJT4Vsaa9iK2oU=" + }, + "level-fix-range": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/level-fix-range/-/level-fix-range-2.0.0.tgz", + "integrity": "sha1-xBfWIVlEIVGhnZojZ4aPFyTC1Ug=", + "requires": { + "clone": "~0.1.9" + } + }, + "object-keys": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.2.0.tgz", + "integrity": "sha1-zd7AKZiwkb5CvxA1rjLknxy26mc=", + "requires": { + "foreach": "~2.0.1", + "indexof": "~0.0.1", + "is": "~0.2.6" + } + }, + "xtend": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.0.6.tgz", + "integrity": "sha1-XqZXptukRwacLlnFihE4ywxebO4=", + "requires": { + "is-object": "~0.1.2", + "object-keys": "~0.2.0" + } + } + } + }, + "levelup": { + "version": "0.18.6", + "resolved": "https://registry.npmjs.org/levelup/-/levelup-0.18.6.tgz", + "integrity": "sha1-5qAcsIlhbI7MApHCqb0/DETj5es=", + "requires": { + "bl": "~0.8.1", + "deferred-leveldown": "~0.2.0", + "errno": "~0.1.1", + "prr": "~0.0.0", + "readable-stream": "~1.0.26", + "semver": "~2.3.1", + "xtend": "~3.0.0" + }, + "dependencies": { + "prr": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/prr/-/prr-0.0.0.tgz", + "integrity": "sha1-GoS4WQgyVQFBGFPQCB7j+obikmo=" + }, + "semver": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-2.3.2.tgz", + "integrity": "sha1-uYSPJdbPNjMwc+ye+IVtQvEjPlI=" + }, + "xtend": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-3.0.0.tgz", + "integrity": "sha1-XM50B7r2Qsunvs2laBEcST9ZZlo=" + } + } + }, + "leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==" + }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "requires": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + } + }, + "lines-and-columns": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", + "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", + "dev": true + }, + "load-json-file": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", + "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "strip-bom": "^3.0.0" + }, + "dependencies": { + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "requires": { + "error-ex": "^1.2.0" + } + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" + } + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" + }, + "lodash-es": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.15.tgz", + "integrity": "sha512-rlrc3yU3+JNOpZ9zj5pQtxnx2THmvRykwL4Xlxoa8I9lHBlVbbyPhgyPMioxVZ4NqyxaVVtaJnzsyOidQIhyyQ==" + }, + "lodash.assign": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz", + "integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=" + }, + "lodash.escape": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-4.0.1.tgz", + "integrity": "sha1-yQRGkMIeBClL6qUXcS/e0fqI3pg=", + "dev": true + }, + "lodash.flattendeep": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", + "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=", + "dev": true + }, + "lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=", + "dev": true + }, + "lodash.ismatch": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz", + "integrity": "sha1-dWy1FQyjum8RCFp4hJZF8Yj4Xzc=", + "dev": true + }, + "lodash.sortby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", + "dev": true + }, + "lodash.throttle": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz", + "integrity": "sha1-wj6RtxAkKscMN/HhzaknTMOb8vQ=" + }, + "lodash.unescape": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.unescape/-/lodash.unescape-4.0.1.tgz", + "integrity": "sha1-vyJJiGzlFM2hEvrpIYzcBlIR/Jw=", + "dev": true + }, + "lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", + "dev": true + }, + "log-driver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/log-driver/-/log-driver-1.2.7.tgz", + "integrity": "sha512-U7KCmLdqsGHBLeWqYlFA0V0Sl6P08EE1ZrmA9cxjUE0WVqT9qnyVDPz1kzpFEP0jdJuFnasWIfSd7fsaNXkpbg==", + "dev": true + }, + "log-symbols": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", + "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", + "requires": { + "chalk": "^2.0.1" + } + }, + "loggly": { + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/loggly/-/loggly-0.3.11.tgz", + "integrity": "sha1-YsHsNDZ3LwlUWY8muVfSrSmGthE=", + "dev": true, + "requires": { + "request": "2.9.x", + "timespan": "2.x.x" + }, + "dependencies": { + "request": { + "version": "2.9.203", + "resolved": "https://registry.npmjs.org/request/-/request-2.9.203.tgz", + "integrity": "sha1-bBcRpUB/uUoRQhlWPkQUW8v0cjo=", + "dev": true + } + } + }, + "logkitty": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/logkitty/-/logkitty-0.6.1.tgz", + "integrity": "sha512-cHuXN8qUZuzX/7kB6VyS7kB4xyD24e8gyHXIFNhIv+fjW3P+jEXNUhj0o/7qWJtv7UZpbnPgUqzu/AZQ8RAqxQ==", + "requires": { + "ansi-fragments": "^0.2.1", + "dayjs": "^1.8.15", + "yargs": "^12.0.5" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" + }, + "cliui": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", + "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", + "requires": { + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0", + "wrap-ansi": "^2.0.0" + } + }, + "invert-kv": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", + "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==" + }, + "lcid": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", + "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", + "requires": { + "invert-kv": "^2.0.0" + } + }, + "mem": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz", + "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==", + "requires": { + "map-age-cleaner": "^0.1.1", + "mimic-fn": "^2.0.0", + "p-is-promise": "^2.0.0" + } + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" + }, + "os-locale": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", + "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", + "requires": { + "execa": "^1.0.0", + "lcid": "^2.0.0", + "mem": "^4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "requires": { + "ansi-regex": "^3.0.0" + } + }, + "yargs": { + "version": "12.0.5", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz", + "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==", + "requires": { + "cliui": "^4.0.0", + "decamelize": "^1.2.0", + "find-up": "^3.0.0", + "get-caller-file": "^1.0.1", + "os-locale": "^3.0.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1 || ^4.0.0", + "yargs-parser": "^11.1.1" + } + }, + "yargs-parser": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz", + "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==", + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, + "longest": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", + "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=" + }, + "loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "requires": { + "js-tokens": "^3.0.0 || ^4.0.0" + } + }, + "loud-rejection": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", + "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", + "dev": true, + "requires": { + "currently-unhandled": "^0.4.1", + "signal-exit": "^3.0.0" + } + }, + "lower-case": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", + "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=" + }, + "lower-case-first": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/lower-case-first/-/lower-case-first-1.0.2.tgz", + "integrity": "sha1-5dp8JvKacHO+AtUrrJmA5ZIq36E=", + "requires": { + "lower-case": "^1.1.2" + } + }, + "lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.0" + } + }, + "make-error": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.5.tgz", + "integrity": "sha512-c3sIjNUow0+8swNwVpqoH4YCShKNFkMaw6oH1mNS2haDZQqkeZFlHS3dhoeEbKKmJB4vXpJucU6oH75aDYeE9g==", + "dev": true + }, + "makeerror": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz", + "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=", + "requires": { + "tmpl": "1.0.x" + } + }, + "map-age-cleaner": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", + "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", + "requires": { + "p-defer": "^1.0.0" + } + }, + "map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=" + }, + "map-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-2.0.0.tgz", + "integrity": "sha1-plzSkIepJZi4eRJXpSPgISIqwfk=", + "dev": true + }, + "map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "requires": { + "object-visit": "^1.0.0" + } + }, + "md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "mdn-data": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.6.tgz", + "integrity": "sha512-rQvjv71olwNHgiTbfPZFkJtjNMciWgswYeciZhtvWLO8bmX3TnhyA62I6sTWOyZssWHJJjY6/KiWwqQsWWsqOA==" + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" + }, + "mem": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz", + "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", + "requires": { + "mimic-fn": "^1.0.0" + } + }, + "memorizer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/memorizer/-/memorizer-1.0.1.tgz", + "integrity": "sha1-/yGCKzCTlbqhzHqCTOGaE1zBFEc=" + }, + "meow": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/meow/-/meow-4.0.1.tgz", + "integrity": "sha512-xcSBHD5Z86zaOc+781KrupuHAzeGXSLtiAOmBsiLDiPSaYSB6hdew2ng9EBAnZ62jagG9MHAOdxpDi/lWBFJ/A==", + "dev": true, + "requires": { + "camelcase-keys": "^4.0.0", + "decamelize-keys": "^1.0.0", + "loud-rejection": "^1.0.0", + "minimist": "^1.1.3", + "minimist-options": "^3.0.1", + "normalize-package-data": "^2.3.4", + "read-pkg-up": "^3.0.0", + "redent": "^2.0.0", + "trim-newlines": "^2.0.0" + }, + "dependencies": { + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true + }, + "path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, + "requires": { + "pify": "^3.0.0" + } + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + }, + "read-pkg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", + "dev": true, + "requires": { + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" + } + }, + "read-pkg-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", + "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=", + "dev": true, + "requires": { + "find-up": "^2.0.0", + "read-pkg": "^3.0.0" + } + } + } + }, + "merge-source-map": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.1.0.tgz", + "integrity": "sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==", + "dev": true, + "requires": { + "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "merge-stream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-1.0.1.tgz", + "integrity": "sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE=", + "requires": { + "readable-stream": "^2.0.1" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" + }, + "metro": { + "version": "0.54.1", + "resolved": "https://registry.npmjs.org/metro/-/metro-0.54.1.tgz", + "integrity": "sha512-6ODPT4mEo4FCpbExRNnQAcZmf1VeNvYOTMj2Na03FjGqhNODHhI2U/wF/Ul5gqTyJ2dVdkXeyvKW3gl/LrnJRg==", + "requires": { + "@babel/core": "^7.0.0", + "@babel/generator": "^7.0.0", + "@babel/parser": "^7.0.0", + "@babel/plugin-external-helpers": "^7.0.0", + "@babel/template": "^7.0.0", + "@babel/traverse": "^7.0.0", + "@babel/types": "^7.0.0", + "absolute-path": "^0.0.0", + "async": "^2.4.0", + "babel-preset-fbjs": "^3.1.2", + "buffer-crc32": "^0.2.13", + "chalk": "^2.4.1", + "concat-stream": "^1.6.0", + "connect": "^3.6.5", + "debug": "^2.2.0", + "denodeify": "^1.2.1", + "eventemitter3": "^3.0.0", + "fbjs": "^1.0.0", + "fs-extra": "^1.0.0", + "graceful-fs": "^4.1.3", + "image-size": "^0.6.0", + "invariant": "^2.2.4", + "jest-haste-map": "^24.7.1", + "jest-worker": "^24.6.0", + "json-stable-stringify": "^1.0.1", + "lodash.throttle": "^4.1.1", + "merge-stream": "^1.0.1", + "metro-babel-register": "0.54.1", + "metro-babel-transformer": "0.54.1", + "metro-cache": "0.54.1", + "metro-config": "0.54.1", + "metro-core": "0.54.1", + "metro-inspector-proxy": "0.54.1", + "metro-minify-uglify": "0.54.1", + "metro-react-native-babel-preset": "0.54.1", + "metro-resolver": "0.54.1", + "metro-source-map": "0.54.1", + "mime-types": "2.1.11", + "mkdirp": "^0.5.1", + "node-fetch": "^2.2.0", + "nullthrows": "^1.1.0", + "react-transform-hmr": "^1.0.4", + "resolve": "^1.5.0", + "rimraf": "^2.5.4", + "serialize-error": "^2.1.0", + "source-map": "^0.5.6", + "temp": "0.8.3", + "throat": "^4.1.0", + "wordwrap": "^1.0.0", + "write-file-atomic": "^1.2.0", + "ws": "^1.1.5", + "xpipe": "^1.0.5", + "yargs": "^9.0.0" + }, + "dependencies": { + "metro-react-native-babel-preset": { + "version": "0.54.1", + "resolved": "https://registry.npmjs.org/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.54.1.tgz", + "integrity": "sha512-Hfr32+u5yYl3qhYQJU8NQ26g4kQlc3yFMg7keVR/3H8rwBIbFqXgsKt8oe0dOrv7WvrMqBHhDtVdU9ls3sSq8g==", + "requires": { + "@babel/plugin-proposal-class-properties": "^7.0.0", + "@babel/plugin-proposal-export-default-from": "^7.0.0", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.0.0", + "@babel/plugin-proposal-object-rest-spread": "^7.0.0", + "@babel/plugin-proposal-optional-catch-binding": "^7.0.0", + "@babel/plugin-proposal-optional-chaining": "^7.0.0", + "@babel/plugin-syntax-dynamic-import": "^7.0.0", + "@babel/plugin-syntax-export-default-from": "^7.0.0", + "@babel/plugin-syntax-flow": "^7.2.0", + "@babel/plugin-transform-arrow-functions": "^7.0.0", + "@babel/plugin-transform-block-scoping": "^7.0.0", + "@babel/plugin-transform-classes": "^7.0.0", + "@babel/plugin-transform-computed-properties": "^7.0.0", + "@babel/plugin-transform-destructuring": "^7.0.0", + "@babel/plugin-transform-exponentiation-operator": "^7.0.0", + "@babel/plugin-transform-flow-strip-types": "^7.0.0", + "@babel/plugin-transform-for-of": "^7.0.0", + "@babel/plugin-transform-function-name": "^7.0.0", + "@babel/plugin-transform-literals": "^7.0.0", + "@babel/plugin-transform-modules-commonjs": "^7.0.0", + "@babel/plugin-transform-object-assign": "^7.0.0", + "@babel/plugin-transform-parameters": "^7.0.0", + "@babel/plugin-transform-react-display-name": "^7.0.0", + "@babel/plugin-transform-react-jsx": "^7.0.0", + "@babel/plugin-transform-react-jsx-source": "^7.0.0", + "@babel/plugin-transform-regenerator": "^7.0.0", + "@babel/plugin-transform-runtime": "^7.0.0", + "@babel/plugin-transform-shorthand-properties": "^7.0.0", + "@babel/plugin-transform-spread": "^7.0.0", + "@babel/plugin-transform-sticky-regex": "^7.0.0", + "@babel/plugin-transform-template-literals": "^7.0.0", + "@babel/plugin-transform-typescript": "^7.0.0", + "@babel/plugin-transform-unicode-regex": "^7.0.0", + "@babel/template": "^7.0.0", + "metro-babel7-plugin-react-transform": "0.54.1", + "react-transform-hmr": "^1.0.4" + } + } + } + }, + "metro-babel-register": { + "version": "0.54.1", + "resolved": "https://registry.npmjs.org/metro-babel-register/-/metro-babel-register-0.54.1.tgz", + "integrity": "sha512-j3VydgncUG8HP6AZala6GTIt3V01nptodnnOke3JMYLqgk8EJ1LOVOdotK9pXi80o7EmmNKFs/LyyH8z+uAJzQ==", + "requires": { + "@babel/core": "^7.0.0", + "@babel/plugin-proposal-class-properties": "^7.0.0", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.0.0", + "@babel/plugin-proposal-object-rest-spread": "^7.0.0", + "@babel/plugin-proposal-optional-catch-binding": "^7.0.0", + "@babel/plugin-proposal-optional-chaining": "^7.0.0", + "@babel/plugin-transform-async-to-generator": "^7.0.0", + "@babel/plugin-transform-flow-strip-types": "^7.0.0", + "@babel/plugin-transform-modules-commonjs": "^7.0.0", + "@babel/register": "^7.0.0", + "core-js": "^2.2.2", + "escape-string-regexp": "^1.0.5" + }, + "dependencies": { + "core-js": { + "version": "2.6.11", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.11.tgz", + "integrity": "sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg==" + } + } + }, + "metro-babel-transformer": { + "version": "0.54.1", + "resolved": "https://registry.npmjs.org/metro-babel-transformer/-/metro-babel-transformer-0.54.1.tgz", + "integrity": "sha512-2aiAnuYBdcLV1VINb8ENAA4keIaJIepHgR9+iRvIde+9GSjKnexqx4nNmJN392285gRDp1fVZ7uY0uQawK/A5g==", + "requires": { + "@babel/core": "^7.0.0" + } + }, + "metro-babel7-plugin-react-transform": { + "version": "0.54.1", + "resolved": "https://registry.npmjs.org/metro-babel7-plugin-react-transform/-/metro-babel7-plugin-react-transform-0.54.1.tgz", + "integrity": "sha512-jWm5myuMoZAOhoPsa8ItfDxdTcOzKhTTzzhFlbZnRamE7i9qybeMdrZt8KHQpF7i2p/mKzE9Yhf4ouOz5K/jHg==", + "requires": { + "@babel/helper-module-imports": "^7.0.0" + } + }, + "metro-cache": { + "version": "0.54.1", + "resolved": "https://registry.npmjs.org/metro-cache/-/metro-cache-0.54.1.tgz", + "integrity": "sha512-RxCFoNcANHXZYi4MIQNnqh68gUnC3bMpzCFJY5pBoqqdrkkn8ibYglBweA0/DW7hx1OZTJWelwS1Dp8xxmE2CA==", + "requires": { + "jest-serializer": "^24.4.0", + "metro-core": "0.54.1", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4" + } + }, + "metro-config": { + "version": "0.54.1", + "resolved": "https://registry.npmjs.org/metro-config/-/metro-config-0.54.1.tgz", + "integrity": "sha512-FpxrA+63rGkPGvGI653dvuSreJzU+eOTILItVnnhmqwn2SAK5V00N/qGTOIJe2YIuWEFXwCzw9lXmANrXbwuGg==", + "requires": { + "cosmiconfig": "^5.0.5", + "jest-validate": "^24.7.0", + "metro": "0.54.1", + "metro-cache": "0.54.1", + "metro-core": "0.54.1", + "pretty-format": "^24.7.0" + } + }, + "metro-core": { + "version": "0.54.1", + "resolved": "https://registry.npmjs.org/metro-core/-/metro-core-0.54.1.tgz", + "integrity": "sha512-8oz3Ck7QFBzW9dG9tKFhrXHKPu2Ajx3R7eatf61Gl6Jf/tF7PNouv3wHxPsJW3oXDFiwKLszd89+OgleTGkB5g==", + "requires": { + "jest-haste-map": "^24.7.1", + "lodash.throttle": "^4.1.1", + "metro-resolver": "0.54.1", + "wordwrap": "^1.0.0" + } + }, + "metro-inspector-proxy": { + "version": "0.54.1", + "resolved": "https://registry.npmjs.org/metro-inspector-proxy/-/metro-inspector-proxy-0.54.1.tgz", + "integrity": "sha512-sf6kNu7PgFW6U+hU7YGZfbAUKAPVvCJhY8YVu/A1RMKH9nNULrCo+jlWh0gWgmFfWRQiAPCElevROg+5somk8A==", + "requires": { + "connect": "^3.6.5", + "debug": "^2.2.0", + "rxjs": "^5.4.3", + "ws": "^1.1.5", + "yargs": "^9.0.0" + } + }, + "metro-minify-uglify": { + "version": "0.54.1", + "resolved": "https://registry.npmjs.org/metro-minify-uglify/-/metro-minify-uglify-0.54.1.tgz", + "integrity": "sha512-z+pOPna/8IxD4OhjW6Xo1mV2EszgqqQHqBm1FdmtdF6IpWkQp33qpDBNEi9NGZTOr7pp2bvcxZnvNJdC2lrK9Q==", + "requires": { + "uglify-es": "^3.1.9" + } + }, + "metro-react-native-babel-preset": { + "version": "0.56.3", + "resolved": "https://registry.npmjs.org/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.56.3.tgz", + "integrity": "sha512-tGPzX2ZwI8vQ8SiNVBPUIgKqmaRNVB6rtJtHCBQZAYRiMbxh0NHCUoFfKBej6U5qVgxiYYHyN8oB23evG4/Oow==", + "requires": { + "@babel/plugin-proposal-class-properties": "^7.0.0", + "@babel/plugin-proposal-export-default-from": "^7.0.0", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.0.0", + "@babel/plugin-proposal-object-rest-spread": "^7.0.0", + "@babel/plugin-proposal-optional-catch-binding": "^7.0.0", + "@babel/plugin-proposal-optional-chaining": "^7.0.0", + "@babel/plugin-syntax-dynamic-import": "^7.0.0", + "@babel/plugin-syntax-export-default-from": "^7.0.0", + "@babel/plugin-syntax-flow": "^7.2.0", + "@babel/plugin-transform-arrow-functions": "^7.0.0", + "@babel/plugin-transform-block-scoping": "^7.0.0", + "@babel/plugin-transform-classes": "^7.0.0", + "@babel/plugin-transform-computed-properties": "^7.0.0", + "@babel/plugin-transform-destructuring": "^7.0.0", + "@babel/plugin-transform-exponentiation-operator": "^7.0.0", + "@babel/plugin-transform-flow-strip-types": "^7.0.0", + "@babel/plugin-transform-for-of": "^7.0.0", + "@babel/plugin-transform-function-name": "^7.0.0", + "@babel/plugin-transform-literals": "^7.0.0", + "@babel/plugin-transform-modules-commonjs": "^7.0.0", + "@babel/plugin-transform-object-assign": "^7.0.0", + "@babel/plugin-transform-parameters": "^7.0.0", + "@babel/plugin-transform-react-display-name": "^7.0.0", + "@babel/plugin-transform-react-jsx": "^7.0.0", + "@babel/plugin-transform-react-jsx-source": "^7.0.0", + "@babel/plugin-transform-regenerator": "^7.0.0", + "@babel/plugin-transform-runtime": "^7.0.0", + "@babel/plugin-transform-shorthand-properties": "^7.0.0", + "@babel/plugin-transform-spread": "^7.0.0", + "@babel/plugin-transform-sticky-regex": "^7.0.0", + "@babel/plugin-transform-template-literals": "^7.0.0", + "@babel/plugin-transform-typescript": "^7.0.0", + "@babel/plugin-transform-unicode-regex": "^7.0.0", + "@babel/template": "^7.0.0", + "react-refresh": "^0.4.0" + } + }, + "metro-react-native-babel-transformer": { + "version": "0.56.3", + "resolved": "https://registry.npmjs.org/metro-react-native-babel-transformer/-/metro-react-native-babel-transformer-0.56.3.tgz", + "integrity": "sha512-T87m4jDu0gIvJo8kWEvkodWFgQ8XBzJUESs1hUUTBSMIqTa31MdWfA1gs+MipadG7OsEJpcb9m83mGr8K70MWw==", + "requires": { + "@babel/core": "^7.0.0", + "babel-preset-fbjs": "^3.1.2", + "metro-babel-transformer": "0.56.3", + "metro-react-native-babel-preset": "0.56.3", + "metro-source-map": "0.56.3" + }, + "dependencies": { + "metro-babel-transformer": { + "version": "0.56.3", + "resolved": "https://registry.npmjs.org/metro-babel-transformer/-/metro-babel-transformer-0.56.3.tgz", + "integrity": "sha512-N5/ftb3rBkt6uKlgYAv+lwtzYc4dK0tBpfZ8pjec3kcypGuGTuf4LTHEh65EuzySreLngYI0bQzoFSn3G3DYsw==", + "requires": { + "@babel/core": "^7.0.0", + "metro-source-map": "0.56.3" + } + }, + "metro-source-map": { + "version": "0.56.3", + "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.56.3.tgz", + "integrity": "sha512-CheqWbJZSM0zjcNBqELUiocwH3XArrOk6alhVuzJ2gV/WTMBQFwP0TtQssSMwjnouMHNEzY8RxErXKXBk/zJmQ==", + "requires": { + "@babel/traverse": "^7.0.0", + "@babel/types": "^7.0.0", + "invariant": "^2.2.4", + "metro-symbolicate": "0.56.3", + "ob1": "0.56.3", + "source-map": "^0.5.6", + "vlq": "^1.0.0" + } + } + } + }, + "metro-resolver": { + "version": "0.54.1", + "resolved": "https://registry.npmjs.org/metro-resolver/-/metro-resolver-0.54.1.tgz", + "integrity": "sha512-Byv1LIawYAASy9CFRwzrncYnqaFGLe8vpw178EtzStqP05Hu6hXSqkNTrfoXa+3V9bPFGCrVzFx2NY3gFp2btg==", + "requires": { + "absolute-path": "^0.0.0" + } + }, + "metro-source-map": { + "version": "0.54.1", + "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.54.1.tgz", + "integrity": "sha512-E9iSYMSUSq5qYi1R2hTQtxH4Mxjzfgr/jaSmQIWi7h3fG2P1qOZNNSzeaeUeTK+s2N/ksVlkcL5kMikol8CDrQ==", + "requires": { + "@babel/traverse": "^7.0.0", + "@babel/types": "^7.0.0", + "source-map": "^0.5.6" + } + }, + "metro-symbolicate": { + "version": "0.56.3", + "resolved": "https://registry.npmjs.org/metro-symbolicate/-/metro-symbolicate-0.56.3.tgz", + "integrity": "sha512-fSQtjjy4eiJDThSl9eloxMElhrs+5PQB+DKKzmTFXT8e2GDga+pa1xTBFRUACMO8BXGuWmxR7SnGDw0wo5Ngrw==", + "requires": { + "invariant": "^2.2.4", + "metro-source-map": "0.56.3", + "source-map": "^0.5.6", + "through2": "^2.0.1", + "vlq": "^1.0.0" + }, + "dependencies": { + "metro-source-map": { + "version": "0.56.3", + "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.56.3.tgz", + "integrity": "sha512-CheqWbJZSM0zjcNBqELUiocwH3XArrOk6alhVuzJ2gV/WTMBQFwP0TtQssSMwjnouMHNEzY8RxErXKXBk/zJmQ==", + "requires": { + "@babel/traverse": "^7.0.0", + "@babel/types": "^7.0.0", + "invariant": "^2.2.4", + "metro-symbolicate": "0.56.3", + "ob1": "0.56.3", + "source-map": "^0.5.6", + "vlq": "^1.0.0" + } + } + } + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, + "miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "requires": { + "bn.js": "^4.0.0", + "brorand": "^1.0.1" + } + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" + }, + "mime-db": { + "version": "1.23.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.23.0.tgz", + "integrity": "sha1-oxtAcK2uon1zLqMzdApk0OyaZlk=" + }, + "mime-types": { + "version": "2.1.11", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.11.tgz", + "integrity": "sha1-wlnEcb2oCKhdbNGTtDCl+uRHOzw=", + "requires": { + "mime-db": "~1.23.0" + } + }, + "mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==" + }, + "min-document": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", + "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=", + "requires": { + "dom-walk": "^0.1.0" + } + }, + "minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + }, + "minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=" + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimatch-capture": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/minimatch-capture/-/minimatch-capture-1.1.0.tgz", + "integrity": "sha1-1sjCrNupLcL2aSHYAH7Q5CsvmFU=", + "dev": true, + "requires": { + "minimatch": "^3.0.4" + } + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" + }, + "minimist-options": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-3.0.2.tgz", + "integrity": "sha512-FyBrT/d0d4+uiZRbqznPXqw3IpZZG3gl3wKWiX784FycUKVwBt0uLBFkQrtE4tZOrgo78nZp2jnKz3L65T5LdQ==", + "dev": true, + "requires": { + "arrify": "^1.0.1", + "is-plain-obj": "^1.1.0" + } + }, + "minipass": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.1.tgz", + "integrity": "sha512-UFqVihv6PQgwj8/yTGvl9kPz7xIAY+R5z6XYjRInD3Gk3qx6QGSD6zEcpeG4Dy/lQnv1J6zv8ejV90hyYIKf3w==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + }, + "dependencies": { + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, + "mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "requires": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "requires": { + "minimist": "0.0.8" + }, + "dependencies": { + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" + } + } + }, + "mkdirp-then": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mkdirp-then/-/mkdirp-then-1.2.0.tgz", + "integrity": "sha1-pJLIecpNhz9e5FAI+PVf0BUN48U=", + "requires": { + "any-promise": "^1.1.0", + "mkdirp": "^0.5.0" + } + }, + "mnfy": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/mnfy/-/mnfy-3.1.2.tgz", + "integrity": "sha1-FO+5oT7U8uZsnhOaFA3v8wH59y4=", + "requires": { + "clean-css": "^3.4.4", + "html-minifier": "^0.7.2", + "lazyrequire": "^1.2.1", + "mkdirp": "0", + "mz": "^2.0.0", + "slave": "^1.2.2", + "uglify-js": "^2.4.24" + }, + "dependencies": { + "camelcase": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", + "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=" + }, + "cliui": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", + "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", + "requires": { + "center-align": "^0.1.1", + "right-align": "^0.1.1", + "wordwrap": "0.0.2" + } + }, + "uglify-js": { + "version": "2.8.29", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", + "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", + "requires": { + "source-map": "~0.5.1", + "uglify-to-browserify": "~1.0.0", + "yargs": "~3.10.0" + } + }, + "wordwrap": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", + "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=" + }, + "yargs": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", + "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", + "requires": { + "camelcase": "^1.0.2", + "cliui": "^2.1.0", + "decamelize": "^1.0.0", + "window-size": "0.1.0" + } + } + } + }, + "mocha": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-5.2.0.tgz", + "integrity": "sha512-2IUgKDhc3J7Uug+FxMXuqIyYzH7gJjXECKe/w43IGgQHTSj3InJi+yAA7T24L9bQMRKiUEHxEX37G5JpVUGLcQ==", + "dev": true, + "requires": { + "browser-stdout": "1.3.1", + "commander": "2.15.1", + "debug": "3.1.0", + "diff": "3.5.0", + "escape-string-regexp": "1.0.5", + "glob": "7.1.2", + "growl": "1.10.5", + "he": "1.1.1", + "minimatch": "3.0.4", + "mkdirp": "0.5.1", + "supports-color": "5.4.0" + }, + "dependencies": { + "commander": { + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", + "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==", + "dev": true + }, + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "diff": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", + "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", + "dev": true + }, + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "growl": { + "version": "1.10.5", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", + "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", + "dev": true + }, + "supports-color": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "moment": { + "version": "2.24.0", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.24.0.tgz", + "integrity": "sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg==", + "dev": true, + "optional": true + }, + "moo": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/moo/-/moo-0.4.3.tgz", + "integrity": "sha512-gFD2xGCl8YFgGHsqJ9NKRVdwlioeW3mI1iqfLNYQOv0+6JRwG58Zk9DIGQgyIaffSYaO1xsKnMaYzzNr1KyIAw==", + "dev": true + }, + "morgan": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.9.1.tgz", + "integrity": "sha512-HQStPIV4y3afTiCYVxirakhlCfGkI161c76kKFca7Fk1JusM//Qeo1ej2XaMniiNeaZklMVrh3vTtIzpzwbpmA==", + "requires": { + "basic-auth": "~2.0.0", + "debug": "2.6.9", + "depd": "~1.1.2", + "on-finished": "~2.3.0", + "on-headers": "~1.0.1" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "mute-stream": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", + "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=" + }, + "mv": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/mv/-/mv-2.1.1.tgz", + "integrity": "sha1-rmzg1vbV4KT32JN5jQPB6pVZtqI=", + "dev": true, + "optional": true, + "requires": { + "mkdirp": "~0.5.1", + "ncp": "~2.0.0", + "rimraf": "~2.4.0" + }, + "dependencies": { + "glob": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", + "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=", + "dev": true, + "optional": true, + "requires": { + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "rimraf": { + "version": "2.4.5", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz", + "integrity": "sha1-7nEM5dk6j9uFb7Xqj/Di11k0sto=", + "dev": true, + "optional": true, + "requires": { + "glob": "^6.0.1" + } + } + } + }, + "mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "requires": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "nan": { + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz", + "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==", + "optional": true + }, + "nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + } + }, + "native-or-bluebird": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/native-or-bluebird/-/native-or-bluebird-1.2.0.tgz", + "integrity": "sha1-OcR7/Xgl0fuf+tMiEK4l2q3xAck=" + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "ncp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz", + "integrity": "sha1-GVoh1sRuNh0vsSgbo4uR6d9727M=", + "dev": true, + "optional": true + }, + "nearley": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/nearley/-/nearley-2.19.0.tgz", + "integrity": "sha512-2v52FTw7RPqieZr3Gth1luAXZR7Je6q3KaDHY5bjl/paDUdMu35fZ8ICNgiYJRr3tf3NMvIQQR1r27AvEr9CRA==", + "dev": true, + "requires": { + "commander": "^2.19.0", + "moo": "^0.4.3", + "railroad-diagrams": "^1.0.0", + "randexp": "0.4.6", + "semver": "^5.4.1" + }, + "dependencies": { + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + } + } + }, + "negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" + }, + "neo-async": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz", + "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==", + "dev": true + }, + "nested-error-stacks": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/nested-error-stacks/-/nested-error-stacks-2.1.0.tgz", + "integrity": "sha512-AO81vsIO1k1sM4Zrd6Hu7regmJN1NSiAja10gc4bX3F0wd+9rQmcuHQaHVQCYIEC8iFXnE+mavh23GOt7wBgug==", + "dev": true + }, + "netmask": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/netmask/-/netmask-1.0.6.tgz", + "integrity": "sha1-ICl+idhvb2QA8lDZ9Pa0wZRfzTU=" + }, + "nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" + }, + "nixplay-ui-kit": { + "version": "git+ssh://git@git.nixplay.ninja:mobile/nixplay-ui-kit.git#a583f11d446678bed15be05eee1c860167fe12e0", + "from": "git+ssh://git@git.nixplay.ninja:mobile/nixplay-ui-kit.git#1.8.10", + "requires": { + "@react-native-community/blur": "^3.3.1", + "@react-native-community/slider": "^2.0.8", + "lodash": "^4.17.10", + "react-native-animatable": "^1.3.0", + "react-native-fast-image": "6.0.1", + "react-native-iphone-x-helper": "^1.2.0", + "react-native-linear-gradient": "^2.4.0", + "react-native-vector-icons": "^4.6.0" + }, + "dependencies": { + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=" + }, + "react-native-vector-icons": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/react-native-vector-icons/-/react-native-vector-icons-4.6.0.tgz", + "integrity": "sha512-rpfhfPiXCK2PX1nrNhdxSMrEGB/Gw/SvKoPM0G2wAkSoqynnes19K0VYI+Up7DqR1rFIpE4hP2erpT1tNx2tfg==", + "requires": { + "lodash": "^4.0.0", + "prop-types": "^15.5.10", + "yargs": "^8.0.2" + } + }, + "yargs": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-8.0.2.tgz", + "integrity": "sha1-YpmpBVsc78lp/355wdkY3Osiw2A=", + "requires": { + "camelcase": "^4.1.0", + "cliui": "^3.2.0", + "decamelize": "^1.1.1", + "get-caller-file": "^1.0.1", + "os-locale": "^2.0.0", + "read-pkg-up": "^2.0.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1", + "yargs-parser": "^7.0.0" + } + } + } + }, + "node-fetch": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.0.tgz", + "integrity": "sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA==" + }, + "node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=" + }, + "node-modules-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", + "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=" + }, + "node-notifier": { + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-5.4.3.tgz", + "integrity": "sha512-M4UBGcs4jeOK9CjTsYwkvH6/MzuUmGCyTW+kCY7uO+1ZVr0+FHGdPdIf5CCLqAaxnRrWidyoQlNkMIIVwbKB8Q==", + "requires": { + "growly": "^1.3.0", + "is-wsl": "^1.1.0", + "semver": "^5.5.0", + "shellwords": "^0.1.1", + "which": "^1.3.0" + } + }, + "node-releases": { + "version": "1.1.44", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.44.tgz", + "integrity": "sha512-NwbdvJyR7nrcGrXvKAvzc5raj/NkoJudkarh2yIpJ4t0NH4aqjUDz/486P+ynIW5eokKOfzGNRdYoLfBlomruw==", + "dev": true, + "requires": { + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "node-version": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/node-version/-/node-version-1.2.0.tgz", + "integrity": "sha512-ma6oU4Sk0qOoKEAymVoTvk8EdXEobdS7m/mAGhDJ8Rouugho48crHBORAmy5BoOcv8wraPM6xumapQp5hl4iIQ==", + "dev": true + }, + "nodeunit": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/nodeunit/-/nodeunit-0.7.4.tgz", + "integrity": "sha1-yQje9/KZ++Zf96yIh4KVXEaq6fg=", + "dev": true, + "requires": { + "tap": ">=0.2.3" + } + }, + "nopt": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", + "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", + "dev": true, + "requires": { + "abbrev": "1" + } + }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "requires": { + "remove-trailing-separator": "^1.0.1" + } + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "requires": { + "path-key": "^2.0.0" + } + }, + "nth-check": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", + "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "requires": { + "boolbase": "~1.0.0" + } + }, + "nullthrows": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/nullthrows/-/nullthrows-1.1.1.tgz", + "integrity": "sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==" + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" + }, + "nwsapi": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", + "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==", + "dev": true + }, + "nyc": { + "version": "14.1.1", + "resolved": "https://registry.npmjs.org/nyc/-/nyc-14.1.1.tgz", + "integrity": "sha512-OI0vm6ZGUnoGZv/tLdZ2esSVzDwUC88SNs+6JoSOMVxA+gKMB8Tk7jBwgemLx4O40lhhvZCVw1C+OYLOBOPXWw==", + "dev": true, + "requires": { + "archy": "^1.0.0", + "caching-transform": "^3.0.2", + "convert-source-map": "^1.6.0", + "cp-file": "^6.2.0", + "find-cache-dir": "^2.1.0", + "find-up": "^3.0.0", + "foreground-child": "^1.5.6", + "glob": "^7.1.3", + "istanbul-lib-coverage": "^2.0.5", + "istanbul-lib-hook": "^2.0.7", + "istanbul-lib-instrument": "^3.3.0", + "istanbul-lib-report": "^2.0.8", + "istanbul-lib-source-maps": "^3.0.6", + "istanbul-reports": "^2.2.4", + "js-yaml": "^3.13.1", + "make-dir": "^2.1.0", + "merge-source-map": "^1.1.0", + "resolve-from": "^4.0.0", + "rimraf": "^2.6.3", + "signal-exit": "^3.0.2", + "spawn-wrap": "^1.4.2", + "test-exclude": "^5.2.3", + "uuid": "^3.3.2", + "yargs": "^13.2.2", + "yargs-parser": "^13.0.0" + }, + "dependencies": { + "cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dev": true, + "requires": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + }, + "wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + } + }, + "y18n": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", + "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", + "dev": true + }, + "yargs": { + "version": "13.3.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.0.tgz", + "integrity": "sha512-2eehun/8ALW8TLoIl7MVaRUrg+yCnenu8B4kBlRxj3GJGDKU1Og7sMXPNm1BYyM1DOJmTZ4YeN/Nwxv+8XJsUA==", + "dev": true, + "requires": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.1" + } + }, + "yargs-parser": { + "version": "13.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.1.tgz", + "integrity": "sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, + "oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "dev": true + }, + "ob1": { + "version": "0.56.3", + "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.56.3.tgz", + "integrity": "sha512-3JL2ZyWOHDGTEAe4kcG+TxhGPKCCikgyoUIjE82JnXnmpR1LXItM9K3WhGsi4+O7oYngMW6FjpHHoc5xJTMkTQ==" + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + }, + "object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "requires": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "object-diff": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/object-diff/-/object-diff-0.0.4.tgz", + "integrity": "sha1-2IOwRE/o/W4E5ZXXu2ZWgskWBH8=" + }, + "object-inspect": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz", + "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==", + "dev": true + }, + "object-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.0.2.tgz", + "integrity": "sha512-Epah+btZd5wrrfjkJZq1AOB9O6OxUQto45hzFd7lXGrpHPGE0W1k+426yrZV+k6NJOzLNNW/nVsmZdIWsAqoOQ==", + "dev": true + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" + }, + "object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "requires": { + "isobject": "^3.0.0" + } + }, + "object.assign": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", + "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", + "requires": { + "define-properties": "^1.1.2", + "function-bind": "^1.1.1", + "has-symbols": "^1.0.0", + "object-keys": "^1.0.11" + } + }, + "object.entries": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.1.tgz", + "integrity": "sha512-ilqR7BgdyZetJutmDPfXCDffGa0/Yzl2ivVNpbx/g4UeWrCdRnFDUBrKJGLhGieRHDATnyZXWBeCb29k9CJysQ==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1", + "function-bind": "^1.1.1", + "has": "^1.0.3" + } + }, + "object.fromentries": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.2.tgz", + "integrity": "sha512-r3ZiBH7MQppDJVLx6fhD618GKNG40CZYH9wgwdhKxBDDbQgjeWGGd4AtkZad84d291YxvWe7bJGuE65Anh0dxQ==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1", + "function-bind": "^1.1.1", + "has": "^1.0.3" + } + }, + "object.getownpropertydescriptors": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz", + "integrity": "sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1" + } + }, + "object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "requires": { + "isobject": "^3.0.1" + } + }, + "object.values": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.1.tgz", + "integrity": "sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1", + "function-bind": "^1.1.1", + "has": "^1.0.3" + } + }, + "octal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/octal/-/octal-1.0.0.tgz", + "integrity": "sha1-Y+cWKmjvvrniE1iNWOmJ0eXEUws=" + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "requires": { + "ee-first": "1.1.1" + } + }, + "on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==" + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "requires": { + "mimic-fn": "^1.0.0" + } + }, + "open": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/open/-/open-6.4.0.tgz", + "integrity": "sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg==", + "requires": { + "is-wsl": "^1.1.0" + } + }, + "opencollective": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/opencollective/-/opencollective-1.0.3.tgz", + "integrity": "sha1-ruY3K8KBRFg2kMPKja7PwSDdDvE=", + "requires": { + "babel-polyfill": "6.23.0", + "chalk": "1.1.3", + "inquirer": "3.0.6", + "minimist": "1.2.0", + "node-fetch": "1.6.3", + "opn": "4.0.2" + }, + "dependencies": { + "ansi-escapes": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz", + "integrity": "sha1-06ioOzGapneTZisT52HHkRQiMG4=" + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "inquirer": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.0.6.tgz", + "integrity": "sha1-4EqqnQW3o8ubD0B9BDdfBEcZA0c=", + "requires": { + "ansi-escapes": "^1.1.0", + "chalk": "^1.0.0", + "cli-cursor": "^2.1.0", + "cli-width": "^2.0.0", + "external-editor": "^2.0.1", + "figures": "^2.0.0", + "lodash": "^4.3.0", + "mute-stream": "0.0.7", + "run-async": "^2.2.0", + "rx": "^4.1.0", + "string-width": "^2.0.0", + "strip-ansi": "^3.0.0", + "through": "^2.3.6" + } + }, + "node-fetch": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.6.3.tgz", + "integrity": "sha1-3CNO3WSJmC1Y6PDbT2lQKavNjAQ=", + "requires": { + "encoding": "^0.1.11", + "is-stream": "^1.0.1" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" + } + } + }, + "opencollective-postinstall": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.2.tgz", + "integrity": "sha512-pVOEP16TrAO2/fjej1IdOyupJY8KDUM1CvsaScRbw6oddvpQoOfGk4ywha0HKKVAD6RkW4x6Q+tNBwhf3Bgpuw==" + }, + "opener": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.1.tgz", + "integrity": "sha512-goYSy5c2UXE4Ra1xixabeVh1guIX/ZV/YokJksb6q2lubWu6UbvPQ20p542/sFIll1nl8JnCyK9oBaOcCWXwvA==", + "dev": true + }, + "opn": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/opn/-/opn-4.0.2.tgz", + "integrity": "sha1-erwi5kTf9jsKltWrfyeQwPAavJU=", + "requires": { + "object-assign": "^4.0.1", + "pinkie-promise": "^2.0.0" + } + }, + "optimist": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", + "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", + "dev": true, + "requires": { + "minimist": "~0.0.1", + "wordwrap": "~0.0.2" + }, + "dependencies": { + "minimist": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", + "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=", + "dev": true + }, + "wordwrap": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", + "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", + "dev": true + } + } + }, + "optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "requires": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + } + }, + "options": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/options/-/options-0.0.6.tgz", + "integrity": "sha1-7CLTEoBrtT5zF3Pnza788cZDEo8=" + }, + "ora": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/ora/-/ora-3.4.0.tgz", + "integrity": "sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg==", + "requires": { + "chalk": "^2.4.2", + "cli-cursor": "^2.1.0", + "cli-spinners": "^2.0.0", + "log-symbols": "^2.2.0", + "strip-ansi": "^5.2.0", + "wcwidth": "^1.0.1" + }, + "dependencies": { + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" + }, + "os-locale": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", + "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", + "requires": { + "execa": "^0.7.0", + "lcid": "^1.0.0", + "mem": "^1.1.0" + }, + "dependencies": { + "cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "requires": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "execa": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", + "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", + "requires": { + "cross-spawn": "^5.0.1", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=" + } + } + }, + "os-shim": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/os-shim/-/os-shim-0.1.3.tgz", + "integrity": "sha1-a2LDeRz3kJ6jXtRuF2WLtBfLORc=", + "dev": true + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" + }, + "osenv": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", + "dev": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "own-or": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/own-or/-/own-or-1.0.0.tgz", + "integrity": "sha1-Tod/vtqaLsgAD7wLyuOWRe6L+Nw=", + "dev": true + }, + "own-or-env": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/own-or-env/-/own-or-env-1.0.1.tgz", + "integrity": "sha512-y8qULRbRAlL6x2+M0vIe7jJbJx/kmUTzYonRAa2ayesR2qWLswninkVyeJe4x3IEXhdgoNodzjQRKAoEs6Fmrw==", + "dev": true, + "requires": { + "own-or": "^1.0.0" + } + }, + "p-defer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", + "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=" + }, + "p-each-series": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-1.0.0.tgz", + "integrity": "sha1-kw89Et0fUOdDRFeiLNbwSsatf3E=", + "dev": true, + "requires": { + "p-reduce": "^1.0.0" + } + }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" + }, + "p-is-promise": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", + "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==" + }, + "p-limit": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.1.tgz", + "integrity": "sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==", + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-reduce": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-1.0.0.tgz", + "integrity": "sha1-GMKw3ZNqRpClKfgjH1ig/bakffo=", + "dev": true + }, + "p-reflect": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-reflect/-/p-reflect-1.0.0.tgz", + "integrity": "sha1-9Poe4btUbY6z7AMhFI3+CnkTe7g=", + "dev": true + }, + "p-settle": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-settle/-/p-settle-2.1.0.tgz", + "integrity": "sha512-NHFIUYc+fQTFRrzzAugq0l1drwi57PB522smetcY8C/EoTYs6cU/fC6TJj0N3rq5NhhJJbhf0VGWziL3jZDnjA==", + "dev": true, + "requires": { + "p-limit": "^1.2.0", + "p-reflect": "^1.0.0" + }, + "dependencies": { + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "requires": { + "p-try": "^1.0.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true + } + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" + }, + "pac-proxy-agent": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-3.0.1.tgz", + "integrity": "sha512-44DUg21G/liUZ48dJpUSjZnFfZro/0K5JTyFYLBcmh9+T6Ooi4/i4efwUiEy0+4oQusCBqWdhv16XohIj1GqnQ==", + "requires": { + "agent-base": "^4.2.0", + "debug": "^4.1.1", + "get-uri": "^2.0.0", + "http-proxy-agent": "^2.1.0", + "https-proxy-agent": "^3.0.0", + "pac-resolver": "^3.0.0", + "raw-body": "^2.2.0", + "socks-proxy-agent": "^4.0.1" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "pac-resolver": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-3.0.0.tgz", + "integrity": "sha512-tcc38bsjuE3XZ5+4vP96OfhOugrX+JcnpUbhfuc4LuXBLQhoTthOstZeoQJBDnQUDYzYmdImKsbz0xSl1/9qeA==", + "requires": { + "co": "^4.6.0", + "degenerator": "^1.0.4", + "ip": "^1.1.5", + "netmask": "^1.0.6", + "thunkify": "^2.1.2" + } + }, + "package": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package/-/package-1.0.1.tgz", + "integrity": "sha1-0lofmeJQbcsn1nBLg9yooxLk7cw=", + "dev": true + }, + "package-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/package-hash/-/package-hash-3.0.0.tgz", + "integrity": "sha512-lOtmukMDVvtkL84rJHI7dpTYq+0rli8N2wlnqUcBuDWCfVhRUfOmnR9SsoHFMLpACvEV60dX7rd0rFaYDZI+FA==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.15", + "hasha": "^3.0.0", + "lodash.flattendeep": "^4.4.0", + "release-zalgo": "^1.0.0" + } + }, + "pako": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", + "integrity": "sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU=" + }, + "papaparse": { + "version": "4.6.3", + "resolved": "https://registry.npmjs.org/papaparse/-/papaparse-4.6.3.tgz", + "integrity": "sha512-LRq7BrHC2kHPBYSD50aKuw/B/dGcg29omyJbKWY3KsYUZU69RKwaBHu13jGmCYBtOc4odsLCrFyk6imfyNubJQ==", + "dev": true + }, + "param-case": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-1.1.2.tgz", + "integrity": "sha1-3LCRpDwlm5Io8cNB57akTqC/l0M=", + "requires": { + "sentence-case": "^1.1.2" + } + }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + }, + "dependencies": { + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + } + } + }, + "parse-asn1": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.5.tgz", + "integrity": "sha512-jkMYn1dcJqF6d5CpU689bq7w/b5ALS9ROVSpQDPrZsqqesUJii9qutvoT5ltGedNXMO2e16YUWIghG9KxaViTQ==", + "requires": { + "asn1.js": "^4.0.0", + "browserify-aes": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.0", + "pbkdf2": "^3.0.3", + "safe-buffer": "^5.1.1" + } + }, + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + }, + "parse-link-header": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/parse-link-header/-/parse-link-header-0.4.1.tgz", + "integrity": "sha1-9r1hXcZxP9QJNc6XlF5NP1Iu3xQ=", + "requires": { + "xtend": "~4.0.0" + } + }, + "parse-node-version": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", + "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==" + }, + "parse5": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-3.0.3.tgz", + "integrity": "sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" + }, + "pascal-case": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-1.1.2.tgz", + "integrity": "sha1-Pl1kogBDgwp8STRMLXS0G+DJyZs=", + "requires": { + "camel-case": "^1.1.1", + "upper-case-first": "^1.1.0" + } + }, + "pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=" + }, + "path-browserify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz", + "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=" + }, + "path-case": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/path-case/-/path-case-1.1.2.tgz", + "integrity": "sha1-UM5roNO+090LXCqcRVNpdDRAlRQ=", + "requires": { + "sentence-case": "^1.1.2" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" + }, + "path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" + }, + "path-to-regexp": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", + "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", + "requires": { + "isarray": "0.0.1" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + } + } + }, + "path-type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", + "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", + "requires": { + "pify": "^2.0.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" + } + } + }, + "pause": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/pause/-/pause-0.0.1.tgz", + "integrity": "sha1-HUCLP9t2kjuVQ9lvtMnf1TXZy10=", + "dev": true + }, + "pbkdf2": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.8.tgz", + "integrity": "sha1-L4q/FuvsyCJ3lF10irodeHYfYeI=", + "requires": { + "create-hmac": "^1.1.2" + } + }, + "pbxproj-dom": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pbxproj-dom/-/pbxproj-dom-1.2.0.tgz", + "integrity": "sha512-K2czrWqA68AR0q1UXz5EBi/zoxcljrkO4RSJX0jPnVn3iyE0HYnYOzaEEDYMpueczkT/Vtdm3SCc3NM+12kMaQ==", + "dev": true + }, + "pegjs": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/pegjs/-/pegjs-0.10.0.tgz", + "integrity": "sha1-z4uvrm7d/0tafvsYUmnqr0YQ3b0=" + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "dev": true + }, + "picomatch": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.1.1.tgz", + "integrity": "sha512-OYMyqkKzK7blWO/+XZYP6w8hH0LDvkBvdvKukti+7kqYFCiEAk+gI3DWnryapc0Dau05ugGTy0foQ6mqn4AHYA==", + "dev": true + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==" + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=" + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "requires": { + "pinkie": "^2.0.0" + } + }, + "pirates": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz", + "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==", + "requires": { + "node-modules-regexp": "^1.0.0" + } + }, + "pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "requires": { + "find-up": "^3.0.0" + } + }, + "pkg-up": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-2.0.0.tgz", + "integrity": "sha1-yBmscoBZpGHKscOImivjxJoATX8=", + "dev": true, + "requires": { + "find-up": "^2.1.0" + }, + "dependencies": { + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true + } + } + }, + "pkginfo": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/pkginfo/-/pkginfo-0.4.1.tgz", + "integrity": "sha1-tUGO8EOd5UJfxJlQQtztFPsqhP8=", + "dev": true + }, + "plist": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/plist/-/plist-3.0.1.tgz", + "integrity": "sha512-GpgvHHocGRyQm74b6FWEZZVRroHKE1I0/BTjAmySaohK+cUn+hZpbqXkc3KWgW3gQYkqcQej35FohcT0FRlkRQ==", + "requires": { + "base64-js": "^1.2.3", + "xmlbuilder": "^9.0.7", + "xmldom": "0.1.x" + } + }, + "plugin-error": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-0.1.2.tgz", + "integrity": "sha1-O5uzM1zPAPQl4HQ34ZJ2ln2kes4=", + "requires": { + "ansi-cyan": "^0.1.1", + "ansi-red": "^0.1.1", + "arr-diff": "^1.0.1", + "arr-union": "^2.0.1", + "extend-shallow": "^1.1.2" + }, + "dependencies": { + "arr-diff": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-1.1.0.tgz", + "integrity": "sha1-aHwydYFjWI/vfeezb6vklesaOZo=", + "requires": { + "arr-flatten": "^1.0.1", + "array-slice": "^0.2.3" + } + }, + "arr-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-2.1.0.tgz", + "integrity": "sha1-IPnqtexw9cfSFbEHexw5Fh0pLH0=" + }, + "extend-shallow": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-1.1.4.tgz", + "integrity": "sha1-Gda/lN/AnXa6cR85uHLSH/TdkHE=", + "requires": { + "kind-of": "^1.1.0" + } + }, + "kind-of": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-1.1.0.tgz", + "integrity": "sha1-FAo9LUGjbS78+pN3tiwk+ElaXEQ=" + } + } + }, + "pn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz", + "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==", + "dev": true + }, + "polyfills": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/polyfills/-/polyfills-2.1.1.tgz", + "integrity": "sha1-RP/J5bfT05Jzqmcq8oL4Ql+INx4=", + "requires": { + "lru-cache": "2", + "mnfy": "3", + "native-or-bluebird": "1", + "polyfills-db": "3", + "requisition": "1" + }, + "dependencies": { + "lru-cache": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz", + "integrity": "sha1-bUUk6LlV+V1PW1iFHOId1y+06VI=" + } + } + }, + "polyfills-db": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/polyfills-db/-/polyfills-db-3.0.0.tgz", + "integrity": "sha1-0MqYhnne6kv20DkhvWJFBisBr7s=", + "requires": { + "caniuse-db": "1", + "debug": "*", + "memorizer": "1", + "semver": "4", + "useragent": "2" + }, + "dependencies": { + "semver": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz", + "integrity": "sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto=" + } + } + }, + "posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=" + }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=" + }, + "prettier": { + "version": "1.16.4", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.16.4.tgz", + "integrity": "sha512-ZzWuos7TI5CKUeQAtFd6Zhm2s6EpAD/ZLApIhsF9pRvRtM1RFo61dM/4MSRUA0SuLugA/zgrZD8m0BaY46Og7g==", + "dev": true + }, + "pretty-format": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.9.0.tgz", + "integrity": "sha512-00ZMZUiHaJrNfk33guavqgvfJS30sLYf0f8+Srklv0AMPodGGHcoHgksZ3OThYnIvOd+8yMCn0YiEOogjlgsnA==", + "requires": { + "@jest/types": "^24.9.0", + "ansi-regex": "^4.0.0", + "ansi-styles": "^3.2.0", + "react-is": "^16.8.4" + } + }, + "private": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", + "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==" + }, + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=" + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true + }, + "promise": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", + "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", + "requires": { + "asap": "~2.0.3" + } + }, + "promise-polyfill": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/promise-polyfill/-/promise-polyfill-6.1.0.tgz", + "integrity": "sha1-36lpQ+qcEh/KTem1hoyznTRy4Fc=", + "dev": true + }, + "prompt": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/prompt/-/prompt-0.1.12.tgz", + "integrity": "sha1-0xFOT7mFrGbqo1WG3Lez+zsnv8Y=", + "dev": true, + "requires": { + "async": "0.1.x", + "colors": "0.x.x", + "pkginfo": "0.x.x", + "winston": "0.5.x" + }, + "dependencies": { + "async": { + "version": "0.1.22", + "resolved": "https://registry.npmjs.org/async/-/async-0.1.22.tgz", + "integrity": "sha1-D8GqoIig4+8Ovi2IMbqw3PiEUGE=", + "dev": true + } + } + }, + "prompts": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.3.0.tgz", + "integrity": "sha512-NfbbPPg/74fT7wk2XYQ7hAIp9zJyZp5Fu19iRbORqqy1BhtrkZ0fPafBU+7bmn8ie69DpT0R6QpJIN2oisYjJg==", + "dev": true, + "requires": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.3" + } + }, + "prop-types": { + "version": "15.7.2", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", + "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", + "requires": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.8.1" + } + }, + "prop-types-exact": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/prop-types-exact/-/prop-types-exact-1.2.0.tgz", + "integrity": "sha512-K+Tk3Kd9V0odiXFP9fwDHUYRyvK3Nun3GVyPapSIs5OBkITAm15W0CPFD/YKTkMUAbc0b9CUwRQp2ybiBIq+eA==", + "dev": true, + "requires": { + "has": "^1.0.3", + "object.assign": "^4.1.0", + "reflect.ownkeys": "^0.2.0" + } + }, + "proper-lockfile": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/proper-lockfile/-/proper-lockfile-3.2.0.tgz", + "integrity": "sha512-iMghHHXv2bsxl6NchhEaFck8tvX3F9cknEEh1SUpguUOBjN7PAAW9BLzmbc1g/mCD1gY3EE2EABBHPJfFdHFmA==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "retry": "^0.12.0", + "signal-exit": "^3.0.2" + } + }, + "proto-list": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", + "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=", + "dev": true + }, + "proxy-agent": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-3.1.1.tgz", + "integrity": "sha512-WudaR0eTsDx33O3EJE16PjBRZWcX8GqCEeERw1W3hZJgH/F2a46g7jty6UGty6NeJ4CKQy8ds2CJPMiyeqaTvw==", + "requires": { + "agent-base": "^4.2.0", + "debug": "4", + "http-proxy-agent": "^2.1.0", + "https-proxy-agent": "^3.0.0", + "lru-cache": "^5.1.1", + "pac-proxy-agent": "^3.0.1", + "proxy-from-env": "^1.0.0", + "socks-proxy-agent": "^4.0.1" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "requires": { + "ms": "^2.1.1" + } + }, + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "requires": { + "yallist": "^3.0.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + } + } + }, + "proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, + "prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=" + }, + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" + }, + "psl": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.6.0.tgz", + "integrity": "sha512-SYKKmVel98NCOYXpkwUqZqh0ahZeeKfmisiLIcEZdsb+WbLv02g/dI5BUmZnIyOe7RzZtLax81nnb2HbvC2tzA==", + "dev": true + }, + "public-encrypt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", + "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", + "requires": { + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" + }, + "q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=" + }, + "qr.js": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/qr.js/-/qr.js-0.0.0.tgz", + "integrity": "sha1-ys6GOG9ZoNuAUPqQ2baw6IoeNk8=" + }, + "qs": { + "version": "6.9.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.1.tgz", + "integrity": "sha512-Cxm7/SS/y/Z3MHWSxXb8lIFqgqBowP5JMlTUFyJN88y0SGQhVmZnqFK/PeuMX9LzUyWsqqhNxIyg0jlzq946yA==" + }, + "query-string": { + "version": "6.9.0", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-6.9.0.tgz", + "integrity": "sha512-KG4bhCFYapExLsUHrFt+kQVEegF2agm4cpF/VNc6pZVthIfCc/GK8t8VyNIE3nyXG9DK3Tf2EGkxjR6/uRdYsA==", + "requires": { + "decode-uri-component": "^0.2.0", + "split-on-first": "^1.0.0", + "strict-uri-encode": "^2.0.0" + } + }, + "querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=" + }, + "querystring-es3": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", + "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=" + }, + "quick-lru": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-1.1.0.tgz", + "integrity": "sha1-Q2CxfGETatOAeDl/8RQW4Ybc+7g=", + "dev": true + }, + "raf": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz", + "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==", + "dev": true, + "requires": { + "performance-now": "^2.1.0" + } + }, + "railroad-diagrams": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/railroad-diagrams/-/railroad-diagrams-1.0.0.tgz", + "integrity": "sha1-635iZ1SN3t+4mcG5Dlc3RVnN234=", + "dev": true + }, + "randexp": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/randexp/-/randexp-0.4.6.tgz", + "integrity": "sha512-80WNmd9DA0tmZrw9qQa62GPPWfuXJknrmVmLcxvq4uZBdYqb1wYoKTmnlGUchvVWe0XiLupYkBoXVOxz3C8DYQ==", + "dev": true, + "requires": { + "discontinuous-range": "1.0.0", + "ret": "~0.1.10" + } + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "randomfill": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", + "requires": { + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" + } + }, + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" + }, + "raw-body": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.1.tgz", + "integrity": "sha512-9WmIKF6mkvA0SLmA2Knm9+qj89e+j1zqgyn8aXGd7+nAduPoqgI9lO57SAZNn/Byzo5P7JhXTyg9PzaJbH73bA==", + "requires": { + "bytes": "3.1.0", + "http-errors": "1.7.3", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "dependencies": { + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" + } + } + }, + "react": { + "version": "16.9.0", + "resolved": "https://registry.npmjs.org/react/-/react-16.9.0.tgz", + "integrity": "sha512-+7LQnFBwkiw+BobzOF6N//BdoNw0ouwmSJTEm9cglOOmsg/TMiFHZLe2sEoN5M7LgJTj9oHH0gxklfnQe66S1w==", + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "prop-types": "^15.6.2" + } + }, + "react-apollo": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/react-apollo/-/react-apollo-3.0.1.tgz", + "integrity": "sha512-2hsSYBfxPqPquS8CupWq+U+6XuDfr/Rr1ssXwfOTYe5gCyTthdUqafIm+pyStur9X2W4ZNQMFyjVicsPNq2tnA==", + "requires": { + "@apollo/react-common": "^3.0.1", + "@apollo/react-components": "^3.0.1", + "@apollo/react-hoc": "^3.0.1", + "@apollo/react-hooks": "^3.0.1", + "@apollo/react-ssr": "^3.0.1" + } + }, + "react-deep-force-update": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/react-deep-force-update/-/react-deep-force-update-1.1.2.tgz", + "integrity": "sha512-WUSQJ4P/wWcusaH+zZmbECOk7H5N2pOIl0vzheeornkIMhu+qrNdGFm0bDZLCb0hSF0jf/kH1SgkNGfBdTc4wA==" + }, + "react-devtools-core": { + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/react-devtools-core/-/react-devtools-core-3.6.3.tgz", + "integrity": "sha512-+P+eFy/yo8Z/UH9J0DqHZuUM5+RI2wl249TNvMx3J2jpUomLQa4Zxl56GEotGfw3PIP1eI+hVf1s53FlUONStQ==", + "requires": { + "shell-quote": "^1.6.1", + "ws": "^3.3.1" + }, + "dependencies": { + "ultron": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", + "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==" + }, + "ws": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", + "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", + "requires": { + "async-limiter": "~1.0.0", + "safe-buffer": "~5.1.0", + "ultron": "~1.1.0" + } + } + } + }, + "react-dom": { + "version": "16.12.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.12.0.tgz", + "integrity": "sha512-LMxFfAGrcS3kETtQaCkTKjMiifahaMySFDn71fZUNpPHZQEzmk/GiAeIT8JSOrHB23fnuCOMruL2a8NYlw+8Gw==", + "dev": true, + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "prop-types": "^15.6.2", + "scheduler": "^0.18.0" + }, + "dependencies": { + "scheduler": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.18.0.tgz", + "integrity": "sha512-agTSHR1Nbfi6ulI0kYNK0203joW2Y5W4po4l+v03tOoiJKpTBbxpNhWDvqc/4IcOw+KLmSiQLTasZ4cab2/UWQ==", + "dev": true, + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + } + } + } + }, + "react-is": { + "version": "16.12.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.12.0.tgz", + "integrity": "sha512-rPCkf/mWBtKc97aLL9/txD8DZdemK0vkA3JMLShjlJB3Pj3s+lpf1KaBzMfQrAmhMQB0n1cU/SUGgKKBCe837Q==" + }, + "react-lifecycles-compat": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", + "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==" + }, + "react-mixin": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/react-mixin/-/react-mixin-3.1.1.tgz", + "integrity": "sha512-z9fZ0aCRDjlgxLdMeWkJ9TwhmVLhQ09r8RFpin/cEPA2T6jsb7YHNWcIe0Oii+hhJNyMymdy91CSya5mRkuCkg==", + "requires": { + "object-assign": "^4.0.1", + "smart-mixin": "^2.0.0" + } + }, + "react-native": { + "version": "0.61.5", + "resolved": "https://registry.npmjs.org/react-native/-/react-native-0.61.5.tgz", + "integrity": "sha512-MXqE3NoGO0T3dUKIKkIppijBhRRMpfN6ANbhMXHDuyfA+fSilRWgCwYgR/YNCC7ntECoJYikKaNTUBB0DeQy6Q==", + "requires": { + "@babel/runtime": "^7.0.0", + "@react-native-community/cli": "^3.0.0", + "@react-native-community/cli-platform-android": "^3.0.0", + "@react-native-community/cli-platform-ios": "^3.0.0", + "abort-controller": "^3.0.0", + "art": "^0.10.0", + "base64-js": "^1.1.2", + "connect": "^3.6.5", + "create-react-class": "^15.6.3", + "escape-string-regexp": "^1.0.5", + "event-target-shim": "^5.0.1", + "fbjs": "^1.0.0", + "fbjs-scripts": "^1.1.0", + "hermes-engine": "^0.2.1", + "invariant": "^2.2.4", + "jsc-android": "^245459.0.0", + "metro-babel-register": "^0.56.0", + "metro-react-native-babel-transformer": "^0.56.0", + "metro-source-map": "^0.56.0", + "nullthrows": "^1.1.0", + "pretty-format": "^24.7.0", + "promise": "^7.1.1", + "prop-types": "^15.7.2", + "react-devtools-core": "^3.6.3", + "react-refresh": "^0.4.0", + "regenerator-runtime": "^0.13.2", + "scheduler": "0.15.0", + "stacktrace-parser": "^0.1.3", + "whatwg-fetch": "^3.0.0" + }, + "dependencies": { + "@react-native-community/cli": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@react-native-community/cli/-/cli-3.0.4.tgz", + "integrity": "sha512-kt+ENtC+eRUSfWPbbpx3r7fAQDcFwgM03VW/lBdVAUjkNxffPFT2GGdK23CJSBOXTjRSiGuwhvwH4Z28PdrlRA==", + "requires": { + "@hapi/joi": "^15.0.3", + "@react-native-community/cli-debugger-ui": "^3.0.0", + "@react-native-community/cli-tools": "^3.0.0", + "@react-native-community/cli-types": "^3.0.0", + "chalk": "^2.4.2", + "command-exists": "^1.2.8", + "commander": "^2.19.0", + "compression": "^1.7.1", + "connect": "^3.6.5", + "cosmiconfig": "^5.1.0", + "deepmerge": "^3.2.0", + "envinfo": "^7.1.0", + "errorhandler": "^1.5.0", + "execa": "^1.0.0", + "find-up": "^4.1.0", + "fs-extra": "^7.0.1", + "glob": "^7.1.1", + "graceful-fs": "^4.1.3", + "inquirer": "^3.0.6", + "lodash": "^4.17.5", + "metro": "^0.56.0", + "metro-config": "^0.56.0", + "metro-core": "^0.56.0", + "metro-react-native-babel-transformer": "^0.56.0", + "minimist": "^1.2.0", + "mkdirp": "^0.5.1", + "morgan": "^1.9.0", + "node-notifier": "^5.2.1", + "open": "^6.2.0", + "ora": "^3.4.0", + "plist": "^3.0.0", + "semver": "^6.3.0", + "serve-static": "^1.13.1", + "shell-quote": "1.6.1", + "strip-ansi": "^5.2.0", + "sudo-prompt": "^9.0.0", + "wcwidth": "^1.0.1", + "ws": "^1.1.0" + } + }, + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + }, + "core-js": { + "version": "2.6.11", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.11.tgz", + "integrity": "sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg==" + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "jsc-android": { + "version": "245459.0.0", + "resolved": "https://registry.npmjs.org/jsc-android/-/jsc-android-245459.0.0.tgz", + "integrity": "sha512-wkjURqwaB1daNkDi2OYYbsLnIdC/lUM2nPXQKRs5pqEU9chDg435bjvo+LSaHotDENygHQDHe+ntUkkw2gwMtg==" + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "requires": { + "p-locate": "^4.1.0" + } + }, + "metro": { + "version": "0.56.3", + "resolved": "https://registry.npmjs.org/metro/-/metro-0.56.3.tgz", + "integrity": "sha512-mxHpvBGWanZ46wAEZVLinNO5IYMcFbTdMZIRhC7r+rvoSK6r9iPj95AujBfzLXMAl36RI2O3D7yp5hOYif/gEQ==", + "requires": { + "@babel/core": "^7.0.0", + "@babel/generator": "^7.0.0", + "@babel/parser": "^7.0.0", + "@babel/plugin-external-helpers": "^7.0.0", + "@babel/template": "^7.0.0", + "@babel/traverse": "^7.0.0", + "@babel/types": "^7.0.0", + "absolute-path": "^0.0.0", + "async": "^2.4.0", + "babel-preset-fbjs": "^3.1.2", + "buffer-crc32": "^0.2.13", + "chalk": "^2.4.1", + "concat-stream": "^1.6.0", + "connect": "^3.6.5", + "debug": "^2.2.0", + "denodeify": "^1.2.1", + "eventemitter3": "^3.0.0", + "fbjs": "^1.0.0", + "fs-extra": "^1.0.0", + "graceful-fs": "^4.1.3", + "image-size": "^0.6.0", + "invariant": "^2.2.4", + "jest-haste-map": "^24.7.1", + "jest-worker": "^24.6.0", + "json-stable-stringify": "^1.0.1", + "lodash.throttle": "^4.1.1", + "merge-stream": "^1.0.1", + "metro-babel-register": "0.56.3", + "metro-babel-transformer": "0.56.3", + "metro-cache": "0.56.3", + "metro-config": "0.56.3", + "metro-core": "0.56.3", + "metro-inspector-proxy": "0.56.3", + "metro-minify-uglify": "0.56.3", + "metro-react-native-babel-preset": "0.56.3", + "metro-resolver": "0.56.3", + "metro-source-map": "0.56.3", + "metro-symbolicate": "0.56.3", + "mime-types": "2.1.11", + "mkdirp": "^0.5.1", + "node-fetch": "^2.2.0", + "nullthrows": "^1.1.0", + "resolve": "^1.5.0", + "rimraf": "^2.5.4", + "serialize-error": "^2.1.0", + "source-map": "^0.5.6", + "temp": "0.8.3", + "throat": "^4.1.0", + "wordwrap": "^1.0.0", + "write-file-atomic": "^1.2.0", + "ws": "^1.1.5", + "xpipe": "^1.0.5", + "yargs": "^9.0.0" + }, + "dependencies": { + "fs-extra": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-1.0.0.tgz", + "integrity": "sha1-zTzl9+fLYUWIP8rjGR6Yd/hYeVA=", + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^2.1.0", + "klaw": "^1.0.0" + } + }, + "jsonfile": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", + "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", + "requires": { + "graceful-fs": "^4.1.6" + } + } + } + }, + "metro-babel-register": { + "version": "0.56.3", + "resolved": "https://registry.npmjs.org/metro-babel-register/-/metro-babel-register-0.56.3.tgz", + "integrity": "sha512-ILCRtNFdW6vzqmLAG2MYWdTSE1vCAZqDKNggiNhlfViuoxmWAIL0vOqixl1CHZF5z4t55+fk46A0jSN7UgPyVw==", + "requires": { + "@babel/core": "^7.0.0", + "@babel/plugin-proposal-class-properties": "^7.0.0", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.0.0", + "@babel/plugin-proposal-object-rest-spread": "^7.0.0", + "@babel/plugin-proposal-optional-catch-binding": "^7.0.0", + "@babel/plugin-proposal-optional-chaining": "^7.0.0", + "@babel/plugin-transform-async-to-generator": "^7.0.0", + "@babel/plugin-transform-flow-strip-types": "^7.0.0", + "@babel/plugin-transform-modules-commonjs": "^7.0.0", + "@babel/register": "^7.0.0", + "core-js": "^2.2.2", + "escape-string-regexp": "^1.0.5" + } + }, + "metro-babel-transformer": { + "version": "0.56.3", + "resolved": "https://registry.npmjs.org/metro-babel-transformer/-/metro-babel-transformer-0.56.3.tgz", + "integrity": "sha512-N5/ftb3rBkt6uKlgYAv+lwtzYc4dK0tBpfZ8pjec3kcypGuGTuf4LTHEh65EuzySreLngYI0bQzoFSn3G3DYsw==", + "requires": { + "@babel/core": "^7.0.0", + "metro-source-map": "0.56.3" + } + }, + "metro-cache": { + "version": "0.56.3", + "resolved": "https://registry.npmjs.org/metro-cache/-/metro-cache-0.56.3.tgz", + "integrity": "sha512-SsryVe/TVkt2IkEGnYhB3gQlg9iMlu8WJikQHcCEjMfPEnSIzmeymrX73fwQNPnTnN7F3E0HVjH6Wvq6fh0mcA==", + "requires": { + "jest-serializer": "^24.4.0", + "metro-core": "0.56.3", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4" + } + }, + "metro-config": { + "version": "0.56.3", + "resolved": "https://registry.npmjs.org/metro-config/-/metro-config-0.56.3.tgz", + "integrity": "sha512-C3ZLA5y5gW5auDSQN5dsCTduJg7LXEiX/tLAADOkgXWVImr5P74x9Wt8y1MMWrKx6p+4p5RMDyEwWDMXJt/DwA==", + "requires": { + "cosmiconfig": "^5.0.5", + "jest-validate": "^24.7.0", + "metro": "0.56.3", + "metro-cache": "0.56.3", + "metro-core": "0.56.3", + "pretty-format": "^24.7.0" + } + }, + "metro-core": { + "version": "0.56.3", + "resolved": "https://registry.npmjs.org/metro-core/-/metro-core-0.56.3.tgz", + "integrity": "sha512-OAaHP3mBdlACMZRwDJzZzYC0o2S3qfb4BBK75L8H4Ds+y3QUSrjsDEpHACcpaMTOds8rBvjzn+jjB5tqNoHfBA==", + "requires": { + "jest-haste-map": "^24.7.1", + "lodash.throttle": "^4.1.1", + "metro-resolver": "0.56.3", + "wordwrap": "^1.0.0" + } + }, + "metro-inspector-proxy": { + "version": "0.56.3", + "resolved": "https://registry.npmjs.org/metro-inspector-proxy/-/metro-inspector-proxy-0.56.3.tgz", + "integrity": "sha512-7WtHinw+VJcunQ3q8El1MqqzYSRvXEjW5QE13VYwcLtnay3pvcqACeiQmGbWI0IqxB1+QH8tf3nkA7z7pQ7Vpw==", + "requires": { + "connect": "^3.6.5", + "debug": "^2.2.0", + "rxjs": "^5.4.3", + "ws": "^1.1.5", + "yargs": "^9.0.0" + } + }, + "metro-minify-uglify": { + "version": "0.56.3", + "resolved": "https://registry.npmjs.org/metro-minify-uglify/-/metro-minify-uglify-0.56.3.tgz", + "integrity": "sha512-b9ljyeUpkJWVlFy8M/i4aNbvEBI0zN9vJh1jfU7yx+k9dX7FulLnpGmAQxxQdEszcM//sJrsKNS1oLYBxr0NMQ==", + "requires": { + "uglify-es": "^3.1.9" + } + }, + "metro-resolver": { + "version": "0.56.3", + "resolved": "https://registry.npmjs.org/metro-resolver/-/metro-resolver-0.56.3.tgz", + "integrity": "sha512-VvMl4xUp0fy76WiP3YDtzMmrn6tN/jwxOBqlTy9MjN6R9sUXrGyO5thwn/uKQqp5vwBTuJev7nZL7OKzwludKA==", + "requires": { + "absolute-path": "^0.0.0" + } + }, + "metro-source-map": { + "version": "0.56.3", + "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.56.3.tgz", + "integrity": "sha512-CheqWbJZSM0zjcNBqELUiocwH3XArrOk6alhVuzJ2gV/WTMBQFwP0TtQssSMwjnouMHNEzY8RxErXKXBk/zJmQ==", + "requires": { + "@babel/traverse": "^7.0.0", + "@babel/types": "^7.0.0", + "invariant": "^2.2.4", + "metro-symbolicate": "0.56.3", + "ob1": "0.56.3", + "source-map": "^0.5.6", + "vlq": "^1.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "requires": { + "p-limit": "^2.2.0" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "react-native-actionsheet": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/react-native-actionsheet/-/react-native-actionsheet-2.4.2.tgz", + "integrity": "sha512-DBoWIvVwuWXuptF4t46pBqkFxaUxS+rsIdHiA05t0n4BdTIDV2R4s9bLEUVOGzb94D7VxIamsXZPA/3mmw+SXg==" + }, + "react-native-animatable": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/react-native-animatable/-/react-native-animatable-1.3.3.tgz", + "integrity": "sha512-2ckIxZQAsvWn25Ho+DK3d1mXIgj7tITkrS4pYDvx96WyOttSvzzFeQnM2od0+FUMzILbdHDsDEqZvnz1DYNQ1w==", + "requires": { + "prop-types": "^15.7.2" + } + }, + "react-native-app-settings": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/react-native-app-settings/-/react-native-app-settings-2.0.1.tgz", + "integrity": "sha512-MmYtXQbPBJ0tlAmn4MeeOOjrSR9Cup4PI4HFSsETDGUMrOGmb7WETrQ/9bZ06BeisNnqf8/Qj+efgH+OmFYDjQ==" + }, + "react-native-bluetooth-escpos-printer": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/react-native-bluetooth-escpos-printer/-/react-native-bluetooth-escpos-printer-0.0.5.tgz", + "integrity": "sha512-a+GTlz8dctb48wkoJ8woE7gV24NCOoA13J95A+RFEKhjONEWf3/dP5pIqrrlO5fsf/2QYDeMfU3P8bIVQoEqig==" + }, + "react-native-button": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/react-native-button/-/react-native-button-2.4.0.tgz", + "integrity": "sha512-4siaJlpOLeL9fAhX8VU3cnUfcGLe3E2zABDWSKxkF+NiYOd+AnKeYY29WXlV8hXhCFo+Ry7E+alrJ6zjZLTSfg==", + "requires": { + "prop-types": "^15.5.10" + } + }, + "react-native-camera": { + "version": "3.23.1", + "resolved": "https://registry.npmjs.org/react-native-camera/-/react-native-camera-3.23.1.tgz", + "integrity": "sha512-ghQT2IhiZiNMDgixD/MrfwgFx9arwOb2z79xDJ8dsz8DFcpBMbXjXZETaAK0WaZ/MWOaY84k0eGlx1hoVT77wQ==", + "requires": { + "prop-types": "^15.6.2" + } + }, + "react-native-code-push": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/react-native-code-push/-/react-native-code-push-6.2.0.tgz", + "integrity": "sha512-PNkFQuccXxweOg1qrhOnfmhZaq9acgVEiFtuaDF4UmVUUPlLLSpntlNzQdlQfZyGPUQavjvgTGb77sQTFbgHsA==", + "requires": { + "code-push": "^3.1.0", + "glob": "^5.0.15", + "hoist-non-react-statics": "^2.3.1", + "inquirer": "^7.0.3", + "plist": "3.0.1", + "semver": "^7.1.1", + "xcode": "1.0.0" + }, + "dependencies": { + "ansi-escapes": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz", + "integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==", + "requires": { + "type-fest": "^0.11.0" + } + }, + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" + }, + "ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "requires": { + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + } + }, + "base64-js": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.1.2.tgz", + "integrity": "sha1-1kAMrBxMZgl22Q0HoENR2JOV9eg=" + }, + "bplist-creator": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/bplist-creator/-/bplist-creator-0.0.7.tgz", + "integrity": "sha1-N98VNgkoJLh8QvlXsBNEEXNyrkU=", + "requires": { + "stream-buffers": "~2.2.0" + } + }, + "bplist-parser": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.1.1.tgz", + "integrity": "sha1-1g1dzCDLptx+HymbNdPh+V2vuuY=", + "requires": { + "big-integer": "^1.6.7" + } + }, + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" + }, + "cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "requires": { + "restore-cursor": "^3.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "requires": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + } + }, + "figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "glob": { + "version": "5.0.15", + "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", + "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", + "requires": { + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "hoist-non-react-statics": { + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz", + "integrity": "sha512-rqcy4pJo55FTTLWt+bU8ukscqHeE/e9KWvsOW2b/a3afxQZhwkQdT1rPPCJ0rYXdj4vNcasY8zHTH+jF/qStxw==" + }, + "inquirer": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.1.0.tgz", + "integrity": "sha512-5fJMWEmikSYu0nv/flMc475MhGbB7TSPd/2IpFV4I4rMklboCH2rQjYY5kKiYGHqUF9gvaambupcJFFG9dvReg==", + "requires": { + "ansi-escapes": "^4.2.1", + "chalk": "^3.0.0", + "cli-cursor": "^3.1.0", + "cli-width": "^2.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.15", + "mute-stream": "0.0.8", + "run-async": "^2.4.0", + "rxjs": "^6.5.3", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6" + } + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" + }, + "mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" + }, + "onetime": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz", + "integrity": "sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==", + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "requires": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + } + }, + "run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==" + }, + "rxjs": { + "version": "6.5.5", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.5.tgz", + "integrity": "sha512-WfQI+1gohdf0Dai/Bbmk5L5ItH5tYqm3ki2c5GdWhKjalzjg93N3avFjVStyZZz+A2Em+ZxKH5bNghw9UeylGQ==", + "requires": { + "tslib": "^1.9.0" + } + }, + "semver": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", + "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==" + }, + "simple-plist": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/simple-plist/-/simple-plist-0.2.1.tgz", + "integrity": "sha1-cXZts1IyaSjPOoByQrp2IyJjZyM=", + "requires": { + "bplist-creator": "0.0.7", + "bplist-parser": "0.1.1", + "plist": "2.0.1" + }, + "dependencies": { + "plist": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/plist/-/plist-2.0.1.tgz", + "integrity": "sha1-CjLKlIGxw2TpLhjcVch23p0B2os=", + "requires": { + "base64-js": "1.1.2", + "xmlbuilder": "8.2.2", + "xmldom": "0.1.x" + } + } + } + }, + "string-width": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "requires": { + "ansi-regex": "^5.0.0" + } + }, + "supports-color": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", + "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "requires": { + "has-flag": "^4.0.0" + } + }, + "type-fest": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz", + "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==" + }, + "uuid": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.0.1.tgz", + "integrity": "sha1-ZUS7ot/ajBzxfmKaOjBeK7H+5sE=" + }, + "xcode": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/xcode/-/xcode-1.0.0.tgz", + "integrity": "sha1-4fWxRDJF3tOMGAeW3xoQ/e2ghOw=", + "requires": { + "pegjs": "^0.10.0", + "simple-plist": "^0.2.1", + "uuid": "3.0.1" + } + }, + "xmlbuilder": { + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-8.2.2.tgz", + "integrity": "sha1-aSSGc0ELS6QuGmE2VR0pIjNap3M=" + } + } + }, + "react-native-config": { + "version": "0.11.7", + "resolved": "https://registry.npmjs.org/react-native-config/-/react-native-config-0.11.7.tgz", + "integrity": "sha512-dn5s+zhwLyE25vRT/vaEtLk/j8ZL1UZKvejORNDWakSwpOnLmFurFeaZV83IqkPlfWHXHFdsYe2IRYG1WN4WkQ==" + }, + "react-native-creedon-imagepicker": { + "version": "git+ssh://git@git.nixplay.ninja:mobile/react-native-creedon-imagepicker.git#9efb08c656240325de9428ac33d0960c01b25f49", + "from": "git+ssh://git@git.nixplay.ninja:mobile/react-native-creedon-imagepicker.git#1.3.2" + }, + "react-native-crypto": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/react-native-crypto/-/react-native-crypto-2.2.0.tgz", + "integrity": "sha512-eZu9Y8pa8BN9FU2pIex7MLRAi+Cd1Y6bsxfiufKh7sfraAACJvjQTeW7/zcQAT93WMfM+D0OVk+bubvkrbrUkw==", + "requires": { + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.4", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "3.0.8", + "public-encrypt": "^4.0.0", + "randomfill": "^1.0.3" + } + }, + "react-native-default-preference": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/react-native-default-preference/-/react-native-default-preference-1.4.1.tgz", + "integrity": "sha512-UHX8Hsgq2AwEI8SA1IkjU+u6y+Uroht0sCP70UVLhEZWyqRnn8elrcEjRSInWFNUwxSeFF/c7Tnf17fWFHZEcw==" + }, + "react-native-detect-navbar-android": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/react-native-detect-navbar-android/-/react-native-detect-navbar-android-0.2.0.tgz", + "integrity": "sha1-as0ySSwbvHKvnlhdGLINxhCpsdc=" + }, + "react-native-device-detection": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/react-native-device-detection/-/react-native-device-detection-0.2.0.tgz", + "integrity": "sha512-F+AD2m2gyrBkH0nB00xGB7+31PEJE3fsknh7K7ohLmp99OGj5Cw+tr/K3aVWgp8bP5epVOhAXwylnAod0DxEGw==" + }, + "react-native-device-info": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/react-native-device-info/-/react-native-device-info-1.8.0.tgz", + "integrity": "sha512-pGSMzU/ywpJT97bIrC94p0JgNn6VZT4Rrfo9F47PfAfIfQJvsqSef3ulimr6FeUkK1nEfp0oRByV35OaOt+uZA==" + }, + "react-native-draggable-flatlist": { + "version": "git+https://github.com/nixplay/react-native-draggable-flatlist.git#a33fa1ea4e747b0a2a7cf9164de5ed77e25f7af5", + "from": "git+https://github.com/nixplay/react-native-draggable-flatlist.git#a33fa1ea4e747b0a2a7cf9164de5ed77e25f7af5" + }, + "react-native-email": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/react-native-email/-/react-native-email-1.0.2.tgz", + "integrity": "sha512-tszkiFWbXzsymhb2AKvHE/hI/8Aqa31TmWqUHoW9KW7aGfpPKb8sZC2h1jSg4pJex1MyEjU1RZ3hKAF4+UwdwQ==", + "requires": { + "qs": "^6.5.1" + } + }, + "react-native-fabric": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/react-native-fabric/-/react-native-fabric-0.5.2.tgz", + "integrity": "sha512-uarBq3XtADCJIGwzeHMzG7LCTfElGuqUj4UqMxsWbPsXaYForfNw+EMkEQ+6eBq/a2k4PKfuVQXQAC7rfgo/Vg==" + }, + "react-native-fabric-crashlytics": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/react-native-fabric-crashlytics/-/react-native-fabric-crashlytics-0.1.8.tgz", + "integrity": "sha1-ReERHsMYy2bdesezWD26lYO1Yn4=", + "requires": { + "lodash.assign": "^4.2.0", + "stacktrace-js": "^1.1.0" + } + }, + "react-native-fast-image": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/react-native-fast-image/-/react-native-fast-image-6.0.1.tgz", + "integrity": "sha512-jzgFAZrrWQXsnyiLpKgwkHva6YzD24/ZQG65en7kx8YWmS2H14Tpj5J6h0KQZhV3KxBSeCQbKE+vh99bSpT0/Q==" + }, + "react-native-file-type": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/react-native-file-type/-/react-native-file-type-0.0.8.tgz", + "integrity": "sha512-SBVBhtoK4uxxAgIHaO4gnyryOM9lkq+JbLaKYOFnnfFkInds8PGca1rCn3QbpbkPrnuLnrFzG3bsKsGJFp1PHw==", + "requires": { + "buffer": "5.0.8", + "file-type": "7.3.0", + "js-base64": "2.3.2", + "react-native-fs": "2.11.15" + }, + "dependencies": { + "buffer": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.0.8.tgz", + "integrity": "sha512-xXvjQhVNz50v2nPeoOsNqWCLGfiv4ji/gXZM28jnVwdLJxH4mFyqgqCKfaK9zf1KUbG6zTkjLOy7ou+jSMarGA==", + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4" + } + }, + "react-native-fs": { + "version": "2.11.15", + "resolved": "https://registry.npmjs.org/react-native-fs/-/react-native-fs-2.11.15.tgz", + "integrity": "sha512-JDcpYOBYWHHZqaqxG9c17uGapTQQLvVic0GewQWxhad3ftPVodBQ6qMZxyR1h6U8SN2eaJhFqAfenUKl1UtVJg==", + "requires": { + "base-64": "^0.1.0", + "utf8": "^2.1.1" + } + } + } + }, + "react-native-firebase": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/react-native-firebase/-/react-native-firebase-5.6.0.tgz", + "integrity": "sha512-I+o3zNLdIz4pxWTCSZH70M1BcPl+SdqKQfurOT0sWcaMSL2ecDqVy0PCTmN7ORt7/Z879Er6PLgA/psjArQlmw==", + "requires": { + "opencollective-postinstall": "^2.0.0", + "prop-types": "^15.7.2" + } + }, + "react-native-fs": { + "version": "2.16.2", + "resolved": "https://registry.npmjs.org/react-native-fs/-/react-native-fs-2.16.2.tgz", + "integrity": "sha512-N9V8cMAOE49+er0/Qnf/xSFzsVWVWPW7Uggr11KVh18uv7FEPLEfLwEsL1Gv9vdkTgAK+6SYT46nqrhKtJClSw==", + "requires": { + "base-64": "^0.1.0", + "utf8": "^3.0.0" + }, + "dependencies": { + "utf8": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", + "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==" + } + } + }, + "react-native-geocoder": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/react-native-geocoder/-/react-native-geocoder-0.5.0.tgz", + "integrity": "sha1-/0ucVdV2ikeE7vzLQRdhyC4GdXk=" + }, + "react-native-gesture-handler": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/react-native-gesture-handler/-/react-native-gesture-handler-1.6.0.tgz", + "integrity": "sha512-KulGCWKTxa6xBpPP4LWEPmmLqBqOe2jbtdlILOVF/dR4EgImiaBVrKdOHeRMyMzJOYAWxs5uDZsyA8hgSsm+lw==", + "requires": { + "@egjs/hammerjs": "^2.0.17", + "hoist-non-react-statics": "^2.3.1", + "invariant": "^2.2.4", + "prop-types": "^15.7.2" + }, + "dependencies": { + "hoist-non-react-statics": { + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz", + "integrity": "sha512-rqcy4pJo55FTTLWt+bU8ukscqHeE/e9KWvsOW2b/a3afxQZhwkQdT1rPPCJ0rYXdj4vNcasY8zHTH+jF/qStxw==" + } + } + }, + "react-native-haptic-feedback": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/react-native-haptic-feedback/-/react-native-haptic-feedback-1.8.2.tgz", + "integrity": "sha512-arY2vsQtcF6Z/HggcfASTFzXm5HLUvK08rj6xPs6b95mpUDyStxEoC2c6MCFx+GSqnpBuOQvQCf42Zp0ATnWoQ==" + }, + "react-native-image-gallery": { + "version": "git+https://github.com/kundarmah/react-native-image-gallery.git#8fb1bf5688dafa2c9539e85bbe3465cbcd9f27a3", + "from": "git+https://github.com/kundarmah/react-native-image-gallery.git", + "requires": { + "prop-types": "^15.6.0", + "react-mixin": "^3.0.5", + "react-timer-mixin": "^0.13.3" + } + }, + "react-native-image-pan-zoom": { + "version": "git+https://github.com/nixplay/react-native-image-zoom.git#0f4d3e67f76696ae5e7ee7a5803a33c49d6a3094", + "from": "git+https://github.com/nixplay/react-native-image-zoom.git#2.1.12" + }, + "react-native-image-progress": { + "version": "git+https://github.com/nixplay/react-native-image-progress.git#378885830182974cfd3ae0130f2d18c28f0828b7", + "from": "git+https://github.com/nixplay/react-native-image-progress.git#1.0.0", + "requires": { + "prop-types": "^15.5.10" + } + }, + "react-native-image-resizer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/react-native-image-resizer/-/react-native-image-resizer-1.1.0.tgz", + "integrity": "sha512-OgDOV/0J5ERy6qqu9PTSEiJmNkDrsJluqGM20Tj3JX1836VPO3oeIzQvd8pVdvBiuDq+Z6ZKrsy5SdxP8/O+Ig==" + }, + "react-native-interactable": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/react-native-interactable/-/react-native-interactable-1.0.0.tgz", + "integrity": "sha512-e/GyydV3nFWVL36frdM8H+wGxy5pJu0WjlN6dgtBIRCaGz7nLbCRWFINs7SRwIaI9LPXVAqEXQTOc2d5LJN4HA==" + }, + "react-native-iphone-x-helper": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/react-native-iphone-x-helper/-/react-native-iphone-x-helper-1.2.1.tgz", + "integrity": "sha512-/VbpIEp8tSNNHIvstuA3Swx610whci1Zpc9mqNkqn14DkMbw+ORviln2u0XyHG1kPvvwTNGZY6QpeFwxYaSdbQ==" + }, + "react-native-keyboard-spacer": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/react-native-keyboard-spacer/-/react-native-keyboard-spacer-0.4.1.tgz", + "integrity": "sha1-RvGKMgQyCYol6p+on1FD3SVNMy0=" + }, + "react-native-keychain": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/react-native-keychain/-/react-native-keychain-3.1.3.tgz", + "integrity": "sha512-eWUbjYJge4icX8FhWJk/OPlyGxPnW9bZDysBX3WwOG37iurdH692HKnM2Ih+S+0te65RytImvUrcVnHVBbumYg==" + }, + "react-native-largelist-v3": { + "version": "3.0.15", + "resolved": "https://registry.npmjs.org/react-native-largelist-v3/-/react-native-largelist-v3-3.0.15.tgz", + "integrity": "sha512-x7ocNEAy+lJdPaHr1DChSv/TlW4kLmXQRX0tj/sRYzIOFJeAlxdhHMerPvASSu1MzVwDcdc8gZv6dt/H9JPSpA==" + }, + "react-native-level-fs": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/react-native-level-fs/-/react-native-level-fs-3.0.1.tgz", + "integrity": "sha1-8wVGFMK8Gjedyz0+5RtqG2YSMoM=", + "requires": { + "level-filesystem": "^1.0.1", + "levelup": "^0.18.2" + } + }, + "react-native-linear-gradient": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/react-native-linear-gradient/-/react-native-linear-gradient-2.5.6.tgz", + "integrity": "sha512-HDwEaXcQIuXXCV70O+bK1rizFong3wj+5Q/jSyifKFLg0VWF95xh8XQgfzXwtq0NggL9vNjPKXa016KuFu+VFg==" + }, + "react-native-loading-spinner-overlay": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/react-native-loading-spinner-overlay/-/react-native-loading-spinner-overlay-1.0.1.tgz", + "integrity": "sha512-njZZWs+cgyq6Ni7tkYEowMmuAuHVljuH4CqTWA0plNOfSzZhEcrW209y7WcgHjRWz0RvvEYF5oWGT8DWtTq8bA==", + "requires": { + "prop-types": "^15.6.2" + } + }, + "react-native-localize": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/react-native-localize/-/react-native-localize-1.3.1.tgz", + "integrity": "sha512-Y3LzTHyrgsIsDYvjWSRguARBKjiLaahcbJg663ZqP1Tcpan4LYn/f3iusM+Oh6qYvClnlo9AlBkLdCZbWwe7Tw==" + }, + "react-native-log-level": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/react-native-log-level/-/react-native-log-level-1.2.0.tgz", + "integrity": "sha512-C7Ygi1OAvxqFD7kxmmiGkuyodRo34Lzz2WQV8aM5MBvrTUd0aV43OLSMqk+Sadb+s7pQXNDch89zPYJaY9LCdQ==" + }, + "react-native-mime-types": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/react-native-mime-types/-/react-native-mime-types-2.2.1.tgz", + "integrity": "sha512-2H0jjW5l2driXiiKx9PZsJDCFgS8LeMaVLVZPy3iRkBrNcstpQosEr6+YJfihLbW3WvFtmS2qcyFKB7mYw/iJg==", + "requires": { + "mime-db": "~1.25.0" + }, + "dependencies": { + "mime-db": { + "version": "1.25.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.25.0.tgz", + "integrity": "sha1-wY29fHOl2/b0SgJNwNFloeexw5I=" + } + } + }, + "react-native-mixpanel": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/react-native-mixpanel/-/react-native-mixpanel-1.1.1.tgz", + "integrity": "sha512-jjCYGri9xQ+NO5lu9RCm+hH/u9dP++4VPhUe6O8smUiJtqhBVwQtDn+iJM/NBBQwBVq5SKaDipbYdgOHdJT2WQ==" + }, + "react-native-modal": { + "version": "11.5.4", + "resolved": "https://registry.npmjs.org/react-native-modal/-/react-native-modal-11.5.4.tgz", + "integrity": "sha512-3wPBtba2maa4TczV1MeBv/M/8qcipxfOr+HG5pKF7qHmH5MlfaF22OmRhg1ioSN7+rkRkF/gvYIGQOufpI7emQ==", + "requires": { + "prop-types": "^15.6.2", + "react-native-animatable": "1.3.3" + }, + "dependencies": { + "prop-types": { + "version": "15.7.2", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", + "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", + "requires": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.8.1" + } + }, + "react-native-animatable": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/react-native-animatable/-/react-native-animatable-1.3.3.tgz", + "integrity": "sha512-2ckIxZQAsvWn25Ho+DK3d1mXIgj7tITkrS4pYDvx96WyOttSvzzFeQnM2od0+FUMzILbdHDsDEqZvnz1DYNQ1w==", + "requires": { + "prop-types": "^15.7.2" + } + } + } + }, + "react-native-modalbox": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/react-native-modalbox/-/react-native-modalbox-1.7.1.tgz", + "integrity": "sha512-Jqn12MKQaT5OSb1uMAEeDQF02xHS+WWdgKl55ecoIknrDy+FIoC3fXHMEoRZH6agADDg9eVBqx8w+P7+EwXTbQ==", + "requires": { + "create-react-class": "^15.6.0", + "prop-types": "^15.5.10" + } + }, + "react-native-nixplay-core": { + "version": "git+ssh://git@git.nixplay.ninja:mobile/react-native-nixplay-core.git#1996adcd0aeabf7a2e6346ed4e249f2f17e3d392", + "from": "git+ssh://git@git.nixplay.ninja:mobile/react-native-nixplay-core.git#1.1.5" + }, + "react-native-offline": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/react-native-offline/-/react-native-offline-5.2.0.tgz", + "integrity": "sha512-BrWLz/gkaGs1wVr00Ji2T1D8f0Tt5y9KSFuX6JT55b9Gqjjs4tdpNWCpeJirLm/o5HDsU8cPpR25FxKbbcp3JQ==", + "requires": { + "@react-native-community/netinfo": "^4.1.2", + "lodash": "^4.17.11", + "react-redux": "^6.0.0 || ^7.0.0", + "redux": "4.x", + "redux-saga": "^1.0.2" + } + }, + "react-native-os": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/react-native-os/-/react-native-os-1.2.6.tgz", + "integrity": "sha512-OlT+xQAcvkcnf7imgXiu+myMkqDt4xw2bP5SlVo19hEn5XHBkPMLX7dk3sSGxxncH/ToMDsf1KLyrPabNVtadA==" + }, + "react-native-permissions": { + "version": "2.0.3", + "resolved": "git+ssh://git@git.nixplay.ninja/emmanuel/react-native-permissions.git#b350173e8a9b255cf62265315d0671eb8e98e7db" + }, + "react-native-popup-dialog": { + "version": "0.18.3", + "resolved": "https://registry.npmjs.org/react-native-popup-dialog/-/react-native-popup-dialog-0.18.3.tgz", + "integrity": "sha512-ZvqixSEfMlcX2sm9rSRk/KkgWXwvnj7xqq4fIpSGlYGX48FfL8b3Xf2/uT9SvK2H7MX79b7sic53zzwJ+aBh3g==", + "requires": { + "babel-plugin-flow-react-proptypes": "^9.1.1", + "prop-types": "^15.6.0", + "react-native-root-siblings": "^3.2.1" + } + }, + "react-native-progress": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/react-native-progress/-/react-native-progress-4.0.3.tgz", + "integrity": "sha512-UMjY9W82bU/NLJ2PxkQ3rZFHZPzVTwKowuOfO1bWEainuyjAXwlcZdyQnZxuqIgHrLkZpg9ppdu+g2mflT86ZQ==", + "requires": { + "@react-native-community/art": "^1.0.3", + "prop-types": "^15.7.2" + } + }, + "react-native-push-notification": { + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/react-native-push-notification/-/react-native-push-notification-3.1.9.tgz", + "integrity": "sha512-YpEg9AYBjNgJtHRgHKR0xPB7kk3Gj0uSjUxd0feOIvd7wrfR+zeiBM4NZonGmjlAG6thaE37dfAG5qcsONFM7w==", + "requires": { + "@react-native-community/push-notification-ios": "^1.0.1" + } + }, + "react-native-qrcode-generator": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/react-native-qrcode-generator/-/react-native-qrcode-generator-1.2.2.tgz", + "integrity": "sha512-M75uyU3zL8yuL1ppL6OJsKBhL+VDZE3jNI5PAvDv+BCKa3MiSTTpXbGEqu7Y4xlhvFUozes/C0Ia7aS3mQ5w6Q==", + "requires": { + "create-react-class": "^15.6.3", + "prop-types": "^15.5.10", + "qr.js": "^0.0.0" + } + }, + "react-native-qrcode-scanner": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/react-native-qrcode-scanner/-/react-native-qrcode-scanner-1.4.0.tgz", + "integrity": "sha512-W6wLJNbPQ/SQSRaVcAaGDN919me0LQQyHx7xzx3d/bB8NBya1RJ/bn7zUdnPUhSrp5OVDkGhW9BvRZBoX7xHPw==", + "requires": { + "@react-native-community/async-storage": "^1.6.1", + "opencollective": "^1.0.3", + "opencollective-postinstall": "^2.0.2", + "prop-types": "^15.5.10", + "react-native-permissions": "^2.0.2" + }, + "dependencies": { + "@react-native-community/async-storage": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@react-native-community/async-storage/-/async-storage-1.9.0.tgz", + "integrity": "sha512-TlGMr02JcmY4huH1P7Mt7p6wJecosPpW+09+CwCFLn875IhpRqU2XiVA+BQppZOYfQdHUfUzIKyCBeXOlCEbEg==", + "requires": { + "deep-assign": "^3.0.0" + } + } + } + }, + "react-native-randombytes": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/react-native-randombytes/-/react-native-randombytes-3.5.3.tgz", + "integrity": "sha512-n/7QwMrRJxHr+/3mt2KxqqacGylM+ssW+FfBTgXGzvwq5KzSohooEWf6Z6MTSByuJ/izP9VbSPtwomPwzvupKQ==", + "requires": { + "buffer": "^4.9.1", + "sjcl": "^1.0.3" + } + }, + "react-native-reanimated": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/react-native-reanimated/-/react-native-reanimated-1.7.0.tgz", + "integrity": "sha512-FQWSqP605eQVJumuK2HpR+7heF0ZI+qfy4jNguv3Xv8nPFHeIgZaRTXHCEQL2AcuSIj50zy8jGJf5l134QMQWQ==" + }, + "react-native-remote-svg": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/react-native-remote-svg/-/react-native-remote-svg-2.0.6.tgz", + "integrity": "sha512-tQbDL+gtfGgG9Evz5TOn5Odmrn/EYsmsLqVZ0Do0VMJevfLBuQRioLiwRsI/BCgOHu1oQLZIIE5p7V/lN9jLrw==" + }, + "react-native-root-siblings": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/react-native-root-siblings/-/react-native-root-siblings-3.2.3.tgz", + "integrity": "sha512-wOCCtKJteaSIW3K++hzhkfdWRikTqjrG34DnhNDVSzKatuNQyFY1fPBD1YFT/3+kxOIUmNsJdiaPMao9QgoZMA==", + "requires": { + "prop-types": "^15.6.2", + "static-container": "^1.0.0" + } + }, + "react-native-safe-area": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/react-native-safe-area/-/react-native-safe-area-0.5.1.tgz", + "integrity": "sha512-gBLv93P90sM6hk5HzUwTXzFuSDazTpg2ONi5iL9pnUsUfwdw2L9SKgjgVroxX10leGB9+0zz6/ycV+mItqr8OQ==", + "requires": { + "@types/react": "^16.8.8" + } + }, + "react-native-safe-area-view": { + "version": "0.14.8", + "resolved": "https://registry.npmjs.org/react-native-safe-area-view/-/react-native-safe-area-view-0.14.8.tgz", + "integrity": "sha512-MtRSIcZNstxv87Jet+UsPhEd1tpGe8cVskDXlP657x6rHpSrbrc+y13ZNXrwAgGNNhqQNX7UJT68ZIq//ZRmvw==", + "requires": { + "hoist-non-react-statics": "^2.3.1" + }, + "dependencies": { + "hoist-non-react-statics": { + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz", + "integrity": "sha512-rqcy4pJo55FTTLWt+bU8ukscqHeE/e9KWvsOW2b/a3afxQZhwkQdT1rPPCJ0rYXdj4vNcasY8zHTH+jF/qStxw==" + } + } + }, + "react-native-screens": { + "version": "1.0.0-alpha.23", + "resolved": "https://registry.npmjs.org/react-native-screens/-/react-native-screens-1.0.0-alpha.23.tgz", + "integrity": "sha512-tOxHGQUN83MTmQB4ghoQkibqOdGiX4JQEmeyEv96MKWO/x8T2PJv84ECUos9hD3blPRQwVwSpAid1PPPhrVEaw==", + "requires": { + "debounce": "^1.2.0" + } + }, + "react-native-shimmer-placeholder": { + "version": "1.0.35", + "resolved": "https://registry.npmjs.org/react-native-shimmer-placeholder/-/react-native-shimmer-placeholder-1.0.35.tgz", + "integrity": "sha512-qJS+eHjOuXZAxn4tFQFnRGHq6fzJOcNHrCKhbfx2+5v/Oa/W5G9Ww9DSPLiaAqzpRl74lcVZSufKTAxiVSB4qQ==" + }, + "react-native-simple-image-cropper": { + "version": "git+https://github.com/nixplay/react-native-simple-image-cropper.git#8dae756a5ee2c5463c687c2fc7d3fb9e8b2bd073", + "from": "git+https://github.com/nixplay/react-native-simple-image-cropper.git#2.0.3-dev1", + "requires": { + "@react-native-community/image-editor": "*", + "react-native-image-pan-zoom": "*" + } + }, + "react-native-splash-screen": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/react-native-splash-screen/-/react-native-splash-screen-3.2.0.tgz", + "integrity": "sha512-Ls9qiNZzW/OLFoI25wfjjAcrf2DZ975hn2vr6U9gyuxi2nooVbzQeFoQS5vQcbCt9QX5NY8ASEEAtlLdIa6KVg==" + }, + "react-native-star-rating": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/react-native-star-rating/-/react-native-star-rating-1.1.0.tgz", + "integrity": "sha512-ocOYx+BKUvfruvXm45MBbQZtpkVO3PQieBDepB0FaLuxE3vUtDTPzHqXuBes3iCM5oRi5umrnmMUMsM0mEq5ZA==", + "requires": { + "prop-types": "^15.5.10", + "react-native-animatable": "^1.2.4", + "react-native-button": "^2.3.0", + "react-native-vector-icons": "^4.5.0" + }, + "dependencies": { + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=" + }, + "react-native-vector-icons": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/react-native-vector-icons/-/react-native-vector-icons-4.6.0.tgz", + "integrity": "sha512-rpfhfPiXCK2PX1nrNhdxSMrEGB/Gw/SvKoPM0G2wAkSoqynnes19K0VYI+Up7DqR1rFIpE4hP2erpT1tNx2tfg==", + "requires": { + "lodash": "^4.0.0", + "prop-types": "^15.5.10", + "yargs": "^8.0.2" + } + }, + "yargs": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-8.0.2.tgz", + "integrity": "sha1-YpmpBVsc78lp/355wdkY3Osiw2A=", + "requires": { + "camelcase": "^4.1.0", + "cliui": "^3.2.0", + "decamelize": "^1.1.1", + "get-caller-file": "^1.0.1", + "os-locale": "^2.0.0", + "read-pkg-up": "^2.0.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1", + "yargs-parser": "^7.0.0" + } + } + } + }, + "react-native-svg": { + "version": "9.13.6", + "resolved": "https://registry.npmjs.org/react-native-svg/-/react-native-svg-9.13.6.tgz", + "integrity": "sha512-vjjuJhEhQCwWjqsgWyGy6/C/LIBM2REDxB40FU1PMhi8T3zQUwUHnA6M15pJKlQG8vaZyA+QnLyIVhjtujRgig==", + "requires": { + "css-select": "^2.0.2", + "css-tree": "^1.0.0-alpha.37" + } + }, + "react-native-svg-transformer": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/react-native-svg-transformer/-/react-native-svg-transformer-0.13.0.tgz", + "integrity": "sha512-tfcnIDC2Q6FN8+g/BXPootZtb+sWLzKJde3o5jSuUJdXSmKwwSazAbk+V808n/Ez5kd2arzsuPTKONT66qx5Xw==", + "dev": true, + "requires": { + "@svgr/core": "^4.1.0", + "semver": "^5.6.0" + } + }, + "react-native-tab-view": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/react-native-tab-view/-/react-native-tab-view-1.4.1.tgz", + "integrity": "sha512-Bke8KkDcDhvB/z0AS7MnQKMD2p6Kwfc1rSKlMOvg9CC5CnClQ2QEnhPSbwegKDYhUkBI92iH/BYy7hNSm5kbUQ==", + "requires": { + "prop-types": "^15.6.1" + } + }, + "react-native-tcp": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/react-native-tcp/-/react-native-tcp-3.3.2.tgz", + "integrity": "sha512-zjFmjAvYOsBkR1MF7htuPlk+uOzTykKaeu/eN+I7fkZ7UqBCW+9u/gJgWCv6Tjfn2tGgku6hsEWril4Oy3zJhg==", + "requires": { + "base64-js": "0.0.8", + "buffer": "^5.0.0", + "events": "^1.0.2", + "ip-regex": "^1.0.3", + "process": "^0.11.9", + "util": "^0.10.3" + }, + "dependencies": { + "base64-js": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-0.0.8.tgz", + "integrity": "sha1-EQHpVE9KdrG8OybUUsqW16NeeXg=" + }, + "buffer": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.6.0.tgz", + "integrity": "sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==", + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4" + }, + "dependencies": { + "base64-js": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", + "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==" + } + } + } + } + }, + "react-native-udp": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/react-native-udp/-/react-native-udp-2.7.0.tgz", + "integrity": "sha512-tT+Wn0yLbdaTohXkGGor0HYgScGaASWCaCLSO1kCIUdNke7AtcOX5a5nfNLYrEjdUn7/2HRofuplyky7iJHSQA==", + "requires": { + "base64-js": "0.0.8", + "events": "^1.0.2", + "inherits": "^2.0.1", + "ip-regex": "^1.0.3", + "util": "^0.10.3" + }, + "dependencies": { + "base64-js": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-0.0.8.tgz", + "integrity": "sha1-EQHpVE9KdrG8OybUUsqW16NeeXg=" + } + } + }, + "react-native-user-defaults": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/react-native-user-defaults/-/react-native-user-defaults-0.1.5.tgz", + "integrity": "sha1-E4quztW/dRjIjMsI3Y2HjhxjRK4=" + }, + "react-native-vector-icons": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/react-native-vector-icons/-/react-native-vector-icons-6.6.0.tgz", + "integrity": "sha512-MImKVx8JEvVVBnaShMr7/yTX4Y062JZMupht1T+IEgbqBj4aQeQ1z2SH4VHWKNtWtppk4kz9gYyUiMWqx6tNSw==", + "requires": { + "lodash": "^4.0.0", + "prop-types": "^15.6.2", + "yargs": "^13.2.2" + }, + "dependencies": { + "cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "requires": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + }, + "require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "requires": { + "ansi-regex": "^4.1.0" + } + }, + "wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "requires": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + } + }, + "y18n": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", + "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==" + }, + "yargs": { + "version": "13.3.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.0.tgz", + "integrity": "sha512-2eehun/8ALW8TLoIl7MVaRUrg+yCnenu8B4kBlRxj3GJGDKU1Og7sMXPNm1BYyM1DOJmTZ4YeN/Nwxv+8XJsUA==", + "requires": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.1" + } + }, + "yargs-parser": { + "version": "13.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.1.tgz", + "integrity": "sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ==", + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, + "react-native-version": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/react-native-version/-/react-native-version-2.7.0.tgz", + "integrity": "sha512-oZpoawYhu4PfkTf4hN0pG4vrywlWwh2GuQ9hxDYWdGZuKn9RpmbhYaOdjh6RZ7/1DKimm5ruZ7MZ7wYjehbJTw==", + "dev": true, + "requires": { + "chalk": "^2.4.1", + "commander": "^2.9.0", + "common-tags": "^1.4.0", + "detect-indent": "^5.0.0", + "dottie": "^2.0.0", + "js-beautify": "^1.7.4", + "lodash.flattendeep": "^4.4.0", + "lodash.uniq": "^4.5.0", + "p-settle": "^2.0.0", + "pbxproj-dom": "^1.0.11", + "plist": "^3.0.1", + "resolve-from": "^4.0.0", + "semver": "^5.5.0" + }, + "dependencies": { + "detect-indent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-5.0.0.tgz", + "integrity": "sha1-OHHMCmoALow+Wzz38zYmRnXwa50=", + "dev": true + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + } + } + }, + "react-native-view-overflow": { + "version": "git+https://github.com/QuartermasterInc/react-native-view-overflow.git#ee7252c5691401230456f9d92c94563e034107fc", + "from": "git+https://github.com/QuartermasterInc/react-native-view-overflow.git" + }, + "react-native-webview": { + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/react-native-webview/-/react-native-webview-8.1.2.tgz", + "integrity": "sha512-UnGQDttXcgp9JuexidYVu3KIQn1V9xG93yKIs7u6OMdORD5EM4lm7Z1fqqBa59LBeEii5M546kh1/rm0rDA0cA==", + "requires": { + "escape-string-regexp": "2.0.0", + "invariant": "2.2.4" + }, + "dependencies": { + "escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==" + } + } + }, + "react-native-windows": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/react-native-windows/-/react-native-windows-1.0.0.tgz", + "integrity": "sha1-4qzQPfAL3iX/LJQcB/91cSPHvxM=" + }, + "react-navigation": { + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/react-navigation/-/react-navigation-3.13.0.tgz", + "integrity": "sha512-r64bTImY2aNye8wtd39ubouVB6ZMJqjVQYKxH4LFmOav4FsI59fQTDN7sZzyJa29owowYw/wVkh+NWGT+tdD1A==", + "requires": { + "@react-navigation/core": "~3.5.1", + "@react-navigation/native": "~3.6.2", + "react-navigation-drawer": "~1.4.0", + "react-navigation-stack": "1.5.3", + "react-navigation-tabs": "~1.2.0" + }, + "dependencies": { + "hoist-non-react-statics": { + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz", + "integrity": "sha512-rqcy4pJo55FTTLWt+bU8ukscqHeE/e9KWvsOW2b/a3afxQZhwkQdT1rPPCJ0rYXdj4vNcasY8zHTH+jF/qStxw==" + }, + "react-navigation-tabs": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/react-navigation-tabs/-/react-navigation-tabs-1.2.0.tgz", + "integrity": "sha512-I6vq3XX4ub9KhWQzcrggznls+2Z2C6w2ro46vokDGGvJ02CBpQRar7J0ETV29Ot5AJY67HucNUmZdH3yDFckmQ==", + "requires": { + "hoist-non-react-statics": "^2.5.0", + "prop-types": "^15.6.1", + "react-native-tab-view": "^1.4.1" + } + } + } + }, + "react-navigation-drawer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/react-navigation-drawer/-/react-navigation-drawer-1.4.0.tgz", + "integrity": "sha512-ZyWBozcjB2aZ7vwCALv90cYA2NpDjM+WALaiYRshvPvue8l7cqynePbHK8GhlMGyJDwZqp4MxQmu8u1XAKp3Bw==", + "requires": { + "react-native-tab-view": "^1.2.0" + } + }, + "react-navigation-stack": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/react-navigation-stack/-/react-navigation-stack-1.5.3.tgz", + "integrity": "sha512-MQcwDVbZUYsTtDJb5cFOSm+K+e7KpUCoROaGoUOR+JHWE3uuaJ3pd/Nu+32a57J98TNBf4qq0+2TPJWl6z6IBg==", + "requires": { + "prop-types": "^15.7.2" + } + }, + "react-navigation-tabs": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/react-navigation-tabs/-/react-navigation-tabs-2.6.2.tgz", + "integrity": "sha512-b7Bwio3pOyb2dJOsfICm1eXUCekULO63VitLlkslsuwB5v5qXD9u+TkuSGADPiAybRH3Fts4cQX/xA5WGsIsfg==", + "requires": { + "hoist-non-react-statics": "^3.3.0", + "react-lifecycles-compat": "^3.0.4", + "react-native-safe-area-view": "^0.14.6", + "react-native-tab-view": "^2.11.0" + }, + "dependencies": { + "react-native-tab-view": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/react-native-tab-view/-/react-native-tab-view-2.11.0.tgz", + "integrity": "sha512-vqetlxGO7A8bnqvXcB50MWpRZAImXFrDGz1WCQKdCqe03Ey3ZzENe7yLuWrtBJYlepGfOLAsmCXv+wW82Yfm1w==" + } + } + }, + "react-proxy": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/react-proxy/-/react-proxy-1.1.8.tgz", + "integrity": "sha1-nb/Z2SdSjDqp9ETkVYw3gwq4wmo=", + "requires": { + "lodash": "^4.6.1", + "react-deep-force-update": "^1.0.0" + } + }, + "react-redux": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-7.1.3.tgz", + "integrity": "sha512-uI1wca+ECG9RoVkWQFF4jDMqmaw0/qnvaSvOoL/GA4dNxf6LoV8sUAcNDvE5NWKs4hFpn0t6wswNQnY3f7HT3w==", + "requires": { + "@babel/runtime": "^7.5.5", + "hoist-non-react-statics": "^3.3.0", + "invariant": "^2.2.4", + "loose-envify": "^1.4.0", + "prop-types": "^15.7.2", + "react-is": "^16.9.0" + } + }, + "react-refresh": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.4.2.tgz", + "integrity": "sha512-kv5QlFFSZWo7OlJFNYbxRtY66JImuP2LcrFgyJfQaf85gSP+byzG21UbDQEYjU7f//ny8rwiEkO6py2Y+fEgAQ==" + }, + "react-test-renderer": { + "version": "16.9.0", + "resolved": "https://registry.npmjs.org/react-test-renderer/-/react-test-renderer-16.9.0.tgz", + "integrity": "sha512-R62stB73qZyhrJo7wmCW9jgl/07ai+YzvouvCXIJLBkRlRqLx4j9RqcLEAfNfU3OxTGucqR2Whmn3/Aad6L3hQ==", + "dev": true, + "requires": { + "object-assign": "^4.1.1", + "prop-types": "^15.6.2", + "react-is": "^16.9.0", + "scheduler": "^0.15.0" + } + }, + "react-timer-mixin": { + "version": "0.13.4", + "resolved": "https://registry.npmjs.org/react-timer-mixin/-/react-timer-mixin-0.13.4.tgz", + "integrity": "sha512-4+ow23tp/Tv7hBM5Az5/Be/eKKF7DIvJ09voz5LyHGQaqqz9WV8YMs31eFvcYQs7d451LSg7kDJV70XYN/Ug/Q==" + }, + "react-transform-hmr": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/react-transform-hmr/-/react-transform-hmr-1.0.4.tgz", + "integrity": "sha1-4aQL0Krvxy6N/Xp82gmvhQZjl7s=", + "requires": { + "global": "^4.3.0", + "react-proxy": "^1.1.7" + } + }, + "read-pkg": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", + "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", + "requires": { + "load-json-file": "^2.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^2.0.0" + } + }, + "read-pkg-up": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", + "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", + "requires": { + "find-up": "^2.0.0", + "read-pkg": "^2.0.0" + }, + "dependencies": { + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "requires": { + "locate-path": "^2.0.0" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=" + } + } + }, + "readable-stream": { + "version": "1.0.33", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.33.tgz", + "integrity": "sha1-OjYN1mwbHX/UcFOJhg7aHQ9hEmw=", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + } + } + }, + "readdirp": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.3.0.tgz", + "integrity": "sha512-zz0pAkSPOXXm1viEwygWIPSPkcBYjW1xU5j/JBh5t9bGCJwa6f9+BJa6VaB2g+b55yVrmXzqkyLf4xaWYM0IkQ==", + "dev": true, + "requires": { + "picomatch": "^2.0.7" + } + }, + "realpath-native": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/realpath-native/-/realpath-native-1.1.0.tgz", + "integrity": "sha512-wlgPA6cCIIg9gKz0fgAPjnzh4yR/LnXovwuo9hvyGvx3h8nX4+/iLZplfUWasXpqD8BdnGnP5njOFjkUwPzvjA==", + "dev": true, + "requires": { + "util.promisify": "^1.0.0" + } + }, + "recursive-fs": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/recursive-fs/-/recursive-fs-2.1.0.tgz", + "integrity": "sha512-oed3YruYsD52Mi16s/07eYblQOLi5dTtxpIJNdfCEJ7S5v8dDgVcycar0pRWf4IBuPMIkoctC8RTqGJzIKMNAQ==" + }, + "recyclerlistview": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/recyclerlistview/-/recyclerlistview-1.3.4.tgz", + "integrity": "sha1-TA5X0Z1UgNPE5+WrxFsjynzgml8=", + "requires": { + "lodash-es": "4.17.4", + "prop-types": "15.5.8", + "ts-object-utils": "0.0.5" + }, + "dependencies": { + "core-js": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz", + "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=" + }, + "fbjs": { + "version": "0.8.17", + "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.17.tgz", + "integrity": "sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90=", + "requires": { + "core-js": "^1.0.0", + "isomorphic-fetch": "^2.1.1", + "loose-envify": "^1.0.0", + "object-assign": "^4.1.0", + "promise": "^7.1.1", + "setimmediate": "^1.0.5", + "ua-parser-js": "^0.7.18" + } + }, + "lodash-es": { + "version": "4.17.4", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.4.tgz", + "integrity": "sha1-3MHXVS4VCgZABzupyzHXDwMpUOc=" + }, + "prop-types": { + "version": "15.5.8", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.5.8.tgz", + "integrity": "sha1-a3suFBCDvjjIWVqlH8VXdccZk5Q=", + "requires": { + "fbjs": "^0.8.9" + } + } + } + }, + "redent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-2.0.0.tgz", + "integrity": "sha1-wbIAe0LVfrE4kHmzyDM2OdXhzKo=", + "dev": true, + "requires": { + "indent-string": "^3.0.0", + "strip-indent": "^2.0.0" + } + }, + "redux": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/redux/-/redux-4.0.1.tgz", + "integrity": "sha512-R7bAtSkk7nY6O/OYMVR9RiBI+XghjF9rlbl5806HJbQph0LJVHZrU5oaO4q70eUKiqMRqm4y07KLTlMZ2BlVmg==", + "requires": { + "loose-envify": "^1.4.0", + "symbol-observable": "^1.2.0" + } + }, + "redux-form": { + "version": "8.2.6", + "resolved": "https://registry.npmjs.org/redux-form/-/redux-form-8.2.6.tgz", + "integrity": "sha512-krmF7wl1C753BYpEpWIVJ5NM4lUJZFZc5GFUVgblT+jprB99VVBDyBcgrZM3gWWLOcncFyNsHcKNQQcFg8Uanw==", + "requires": { + "@babel/runtime": "^7.2.0", + "es6-error": "^4.1.1", + "hoist-non-react-statics": "^3.2.1", + "immutable": "*", + "invariant": "^2.2.4", + "is-promise": "^2.1.0", + "lodash": "^4.17.15", + "lodash-es": "^4.17.15", + "prop-types": "^15.6.1", + "react-is": "^16.7.0", + "react-lifecycles-compat": "^3.0.4" + } + }, + "redux-logger": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/redux-logger/-/redux-logger-3.0.6.tgz", + "integrity": "sha1-91VZZvMJjzyIYExEnPC69XeCdL8=", + "requires": { + "deep-diff": "^0.3.5" + } + }, + "redux-persist": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/redux-persist/-/redux-persist-6.0.0.tgz", + "integrity": "sha512-71LLMbUq2r02ng2We9S215LtPu3fY0KgaGE0k8WRgl6RkqxtGfl7HUozz1Dftwsb0D/5mZ8dwAaPbtnzfvbEwQ==" + }, + "redux-persist-filesystem-storage": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/redux-persist-filesystem-storage/-/redux-persist-filesystem-storage-2.1.0.tgz", + "integrity": "sha512-KFj4opJCu8WXUveNV8YKZ1OMGiQm0kiTjWHSSYJ2hmQNrhEa7MOMiIcTImfNDO3vfRl9U+bidKDhQebtCeWrCw==", + "requires": { + "rn-fetch-blob": "^0.10.16" + } + }, + "redux-saga": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/redux-saga/-/redux-saga-1.1.3.tgz", + "integrity": "sha512-RkSn/z0mwaSa5/xH/hQLo8gNf4tlvT18qXDNvedihLcfzh+jMchDgaariQoehCpgRltEm4zHKJyINEz6aqswTw==", + "requires": { + "@redux-saga/core": "^1.1.3" + } + }, + "redux-saga-test-plan": { + "version": "4.0.0-rc.3", + "resolved": "https://registry.npmjs.org/redux-saga-test-plan/-/redux-saga-test-plan-4.0.0-rc.3.tgz", + "integrity": "sha512-18Ha1AWmP4Xt64cSyJv2j7sH8lwQzdk/LByiyhoNyuqyhzkQzlKlflHr3LqiSCzn3e2AgFxagynto8XGRqsHcg==", + "dev": true, + "requires": { + "core-js": "^2.4.1", + "fsm-iterator": "^1.1.0", + "lodash.isequal": "^4.5.0", + "lodash.ismatch": "^4.4.0", + "object-assign": "^4.1.0", + "util-inspect": "^0.1.8" + }, + "dependencies": { + "core-js": { + "version": "2.6.11", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.11.tgz", + "integrity": "sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg==", + "dev": true + } + } + }, + "reflect.ownkeys": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/reflect.ownkeys/-/reflect.ownkeys-0.2.0.tgz", + "integrity": "sha1-dJrO7H8/34tj+SegSAnpDFwLNGA=", + "dev": true + }, + "regenerate": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz", + "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==" + }, + "regenerate-unicode-properties": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.1.0.tgz", + "integrity": "sha512-LGZzkgtLY79GeXLm8Dp0BVLdQlWICzBnJz/ipWUgo59qBaZ+BHtq51P2q1uVZlppMuUAT37SDk39qUbjTWB7bA==", + "requires": { + "regenerate": "^1.4.0" + } + }, + "regenerator-runtime": { + "version": "0.13.3", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz", + "integrity": "sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw==" + }, + "regenerator-transform": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.1.tgz", + "integrity": "sha512-flVuee02C3FKRISbxhXl9mGzdbWUVHubl1SMaknjxkFB1/iqpJhArQUvRxOOPEc/9tAiX0BaQ28FJH10E4isSQ==", + "requires": { + "private": "^0.1.6" + } + }, + "regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "requires": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + } + }, + "regexp.prototype.flags": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz", + "integrity": "sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1" + } + }, + "regexpp": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", + "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", + "dev": true + }, + "regexpu-core": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.6.0.tgz", + "integrity": "sha512-YlVaefl8P5BnFYOITTNzDvan1ulLOiXJzCNZxduTIosN17b87h3bvG9yHMoHaRuo88H4mQ06Aodj5VtYGGGiTg==", + "requires": { + "regenerate": "^1.4.0", + "regenerate-unicode-properties": "^8.1.0", + "regjsgen": "^0.5.0", + "regjsparser": "^0.6.0", + "unicode-match-property-ecmascript": "^1.0.4", + "unicode-match-property-value-ecmascript": "^1.1.0" + } + }, + "regjsgen": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.1.tgz", + "integrity": "sha512-5qxzGZjDs9w4tzT3TPhCJqWdCc3RLYwy9J2NB0nm5Lz+S273lvWcpjaTGHsT1dc6Hhfq41uSEOw8wBmxrKOuyg==" + }, + "regjsparser": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.2.tgz", + "integrity": "sha512-E9ghzUtoLwDekPT0DYCp+c4h+bvuUpe6rRHCTYn6eGoqj1LgKXxT6I0Il4WbjhQkOghzi/V+y03bPKvbllL93Q==", + "requires": { + "jsesc": "~0.5.0" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=" + } + } + }, + "relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=" + }, + "release-zalgo": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz", + "integrity": "sha1-CXALflB0Mpc5Mw5TXFqQ+2eFFzA=", + "dev": true, + "requires": { + "es6-error": "^4.0.1" + } + }, + "remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=" + }, + "repeat-element": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", + "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==" + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" + }, + "repeating": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", + "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", + "requires": { + "is-finite": "^1.0.0" + } + }, + "request": { + "version": "2.88.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", + "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", + "dev": true, + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.0", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.4.3", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "dependencies": { + "mime-db": { + "version": "1.42.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.42.0.tgz", + "integrity": "sha512-UbfJCR4UAVRNgMpfImz05smAXK7+c+ZntjaA26ANtkXLlOe947Aag5zdIcKQULAiF9Cq4WxBi9jUs5zkA84bYQ==", + "dev": true + }, + "mime-types": { + "version": "2.1.25", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.25.tgz", + "integrity": "sha512-5KhStqB5xpTAeGqKBAMgwaYMnQik7teQN4IAzC7npDv6kzeU6prfkR67bc87J1kWMPGkoaZSq1npmexMgkmEVg==", + "dev": true, + "requires": { + "mime-db": "1.42.0" + } + }, + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "dev": true + } + } + }, + "request-promise-core": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.3.tgz", + "integrity": "sha512-QIs2+ArIGQVp5ZYbWD5ZLCY29D5CfWizP8eWnm8FoGD1TX61veauETVQbrV60662V0oFBkrDOuaBI8XgtuyYAQ==", + "dev": true, + "requires": { + "lodash": "^4.17.15" + } + }, + "request-promise-native": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.8.tgz", + "integrity": "sha512-dapwLGqkHtwL5AEbfenuzjTYg35Jd6KPytsC2/TLkVMz8rm+tNt72MGUWT1RP/aYawMpN6HqbNGBQaRcBtjQMQ==", + "dev": true, + "requires": { + "request-promise-core": "1.1.3", + "stealthy-require": "^1.1.1", + "tough-cookie": "^2.3.3" + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" + }, + "require-main-filename": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=" + }, + "requirejs": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/requirejs/-/requirejs-2.3.6.tgz", + "integrity": "sha512-ipEzlWQe6RK3jkzikgCupiTbTvm4S0/CAU5GlgptkN5SO6F3u0UD0K18wy6ErDqiCyP4J4YYe1HuAShvsxePLg==", + "dev": true + }, + "requisition": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/requisition/-/requisition-1.7.0.tgz", + "integrity": "sha1-P5n7S0W9e2JiGMeKF2MFGrWTow0=", + "requires": { + "any-promise": "^1.1.0", + "cookie": "^0.2.3", + "destroy": "^1.0.3", + "fs-cp": "^1.2.0", + "http-errors": "^1.2.7", + "media-typer": "^0.3.0", + "memorizer": "^1.0.0", + "methods": "^1.1.0", + "mime-types": "^2.0.2", + "mz": "^2.1.0", + "parse-link-header": "^0.4.1", + "statuses": "^1.2.0", + "stream-to-array": "^2.0.2", + "temp-path": "^1.0.0", + "type-is": "^1.5.2" + } + }, + "reselect": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/reselect/-/reselect-4.0.0.tgz", + "integrity": "sha512-qUgANli03jjAyGlnbYVAV5vvnOmJnODyABz51RdBN7M4WaVu8mecZWgyQNkG8Yqe3KRGRt0l4K4B3XVEULC4CA==" + }, + "resolve": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.14.1.tgz", + "integrity": "sha512-fn5Wobh4cxbLzuHaE+nphztHy43/b++4M6SsGFC2gB8uYwf0C8LcarfCz1un7UTW8OFQg9iNjZ4xpcFVGebDPg==", + "requires": { + "path-parse": "^1.0.6" + } + }, + "resolve-cwd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", + "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", + "dev": true, + "requires": { + "resolve-from": "^3.0.0" + } + }, + "resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=" + }, + "resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=" + }, + "restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", + "requires": { + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" + } + }, + "ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==" + }, + "retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=", + "dev": true + }, + "right-align": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", + "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", + "requires": { + "align-text": "^0.1.1" + } + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "requires": { + "glob": "^7.1.3" + } + }, + "ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "rn-fetch-blob": { + "version": "0.10.16", + "resolved": "https://registry.npmjs.org/rn-fetch-blob/-/rn-fetch-blob-0.10.16.tgz", + "integrity": "sha512-hZV+nF0HK4CWmspXGMw7/G8Q8qugpS/wbKiNLsFpdBZR8XYzjFZNvBWgGyC0F5JWQn3sjmK2w/FJjBlwdQWNQg==", + "requires": { + "base-64": "0.1.0", + "glob": "7.0.6" + }, + "dependencies": { + "glob": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.0.6.tgz", + "integrity": "sha1-IRuvr0nlJbjNkyYNFKsTYVKz9Xo=", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.2", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + } + } + }, + "rn-nodeify": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/rn-nodeify/-/rn-nodeify-10.2.0.tgz", + "integrity": "sha512-mPNe2vNR14UTwAbpebI9fXn9HAU37vebyZDCqZOK6G5GBEUiMCANIVa7zgc9aJ1JeziLUGLR9c+H9/BSbVdd4Q==", + "dev": true, + "requires": { + "@yarnpkg/lockfile": "^1.0.0", + "deep-equal": "^1.0.0", + "findit": "^2.0.0", + "fs-extra": "^0.22.1", + "minimist": "^1.1.2", + "object.pick": "^1.1.1", + "run-parallel": "^1.1.2", + "semver": "^5.0.1", + "xtend": "^4.0.0" + }, + "dependencies": { + "fs-extra": { + "version": "0.22.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.22.1.tgz", + "integrity": "sha1-X9b4BJ3JdsoZ6yNV1lgXPKvM4FY=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^2.1.0", + "rimraf": "^2.2.8" + } + } + } + }, + "rn-viewpager": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/rn-viewpager/-/rn-viewpager-1.2.9.tgz", + "integrity": "sha512-wN4HlNhjTkrg25qBeEHTJ6TzRGtLu8SpKSZ9/mWcgWHMNr3RT06Zzrky3Tg14PPgaPp//6h02FCcAaQ83VGdgQ==" + }, + "rosie": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/rosie/-/rosie-1.6.0.tgz", + "integrity": "sha1-vA72TNQB0AeURQ1XksAnbiJrarA=", + "dev": true + }, + "rst-selector-parser": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/rst-selector-parser/-/rst-selector-parser-2.2.3.tgz", + "integrity": "sha1-gbIw6i/MYGbInjRy3nlChdmwPZE=", + "dev": true, + "requires": { + "lodash.flattendeep": "^4.4.0", + "nearley": "^2.7.10" + } + }, + "rsvp": { + "version": "4.8.5", + "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", + "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==" + }, + "run-async": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", + "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", + "requires": { + "is-promise": "^2.1.0" + } + }, + "run-parallel": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.9.tgz", + "integrity": "sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q==", + "dev": true + }, + "rx": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/rx/-/rx-4.1.0.tgz", + "integrity": "sha1-pfE/957zt0D+MKqAP7CfmIBdR4I=" + }, + "rx-lite": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz", + "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=" + }, + "rx-lite-aggregates": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz", + "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=", + "requires": { + "rx-lite": "*" + } + }, + "rxjs": { + "version": "5.5.12", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.5.12.tgz", + "integrity": "sha512-xx2itnL5sBbqeeiVgNPVuQQ1nC8Jp2WfNJhXWHmElW9YmrpS9UVnNzhP3EH3HFqexO5Tlp8GhYY+WEcqcVMvGw==", + "requires": { + "symbol-observable": "1.0.1" + }, + "dependencies": { + "symbol-observable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.0.1.tgz", + "integrity": "sha1-g0D8RwLDEi310iKI+IKD9RPT/dQ=" + } + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "safe-json-stringify": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz", + "integrity": "sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg==", + "dev": true, + "optional": true + }, + "safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "requires": { + "ret": "~0.1.10" + } + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "sane": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/sane/-/sane-4.1.0.tgz", + "integrity": "sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==", + "requires": { + "@cnakazawa/watch": "^1.0.3", + "anymatch": "^2.0.0", + "capture-exit": "^2.0.0", + "exec-sh": "^0.3.2", + "execa": "^1.0.0", + "fb-watchman": "^2.0.0", + "micromatch": "^3.1.4", + "minimist": "^1.1.1", + "walker": "~1.0.5" + } + }, + "sanitize-filename": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.3.tgz", + "integrity": "sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==", + "dev": true, + "requires": { + "truncate-utf8-bytes": "^1.0.0" + } + }, + "sax": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz", + "integrity": "sha1-e45lYZCyKOgaZq6nSEgNgozS03o=" + }, + "scheduler": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.15.0.tgz", + "integrity": "sha512-xAefmSfN6jqAa7Kuq7LIJY0bwAPG3xlCj0HMEBQk1lxYiDKZscY2xJ5U/61ZTrYbmNQbXa+gc7czPkVo11tnCg==", + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + }, + "send": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", + "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", + "requires": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.7.2", + "mime": "1.6.0", + "ms": "2.1.1", + "on-finished": "~2.3.0", + "range-parser": "~1.2.1", + "statuses": "~1.5.0" + }, + "dependencies": { + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" + } + } + }, + "sentence-case": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/sentence-case/-/sentence-case-1.1.3.tgz", + "integrity": "sha1-gDSq/CFFdy06vhUJqkLJ4QQtwTk=", + "requires": { + "lower-case": "^1.1.1" + } + }, + "serialize-error": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-2.1.0.tgz", + "integrity": "sha1-ULZ51WNc34Rme9yOWa9OW4HV9go=" + }, + "serve-static": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", + "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.17.1" + } + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" + }, + "set-value": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "requires": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" + }, + "setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" + }, + "sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" + }, + "shell-quote": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.6.1.tgz", + "integrity": "sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c=", + "requires": { + "array-filter": "~0.0.0", + "array-map": "~0.0.0", + "array-reduce": "~0.0.0", + "jsonify": "~0.0.0" + } + }, + "shell-utils": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/shell-utils/-/shell-utils-1.0.10.tgz", + "integrity": "sha512-p1xuqhj3jgcXiV8wGoF1eL/NOvapN9tyGDoObqKwvZTUZn7fIzK75swLTEHfGa7sObeN9vxFplHw/zgYUYRTsg==", + "dev": true, + "requires": { + "lodash": "4.x.x" + } + }, + "shellwords": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", + "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==" + }, + "sigmund": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz", + "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=" + }, + "signal-exit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" + }, + "simple-plist": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/simple-plist/-/simple-plist-1.1.0.tgz", + "integrity": "sha512-2i5Tc0BYAqppM7jVzmNrI+aEUntPolIq4fDgji6WuNNn1D/qYdn2KwoLhZdzQkE04lu9L5tUoeJsjuJAvd+lFg==", + "requires": { + "bplist-creator": "0.0.8", + "bplist-parser": "0.2.0", + "plist": "^3.0.1" + } + }, + "sisteransi": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.4.tgz", + "integrity": "sha512-/ekMoM4NJ59ivGSfKapeG+FWtrmWvA1p6FBZwXrqojw90vJu8lBmrTxCMuBCydKtkaUe2zt4PlxeTKpjwMbyig==", + "dev": true + }, + "sjcl": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/sjcl/-/sjcl-1.0.8.tgz", + "integrity": "sha512-LzIjEQ0S0DpIgnxMEayM1rq9aGwGRG4OnZhCdjx7glTaJtf4zRfpg87ImfjSJjoW9vKpagd82McDOwbRT5kQKQ==" + }, + "slash": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==" + }, + "slave": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/slave/-/slave-1.2.2.tgz", + "integrity": "sha1-oiEUfIVZfbggqFim2aLJr6T1YLY=", + "requires": { + "co": "4", + "is-generator": "1", + "native-or-bluebird": "1" + } + }, + "slice-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", + "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", + "requires": { + "ansi-styles": "^3.2.0", + "astral-regex": "^1.0.0", + "is-fullwidth-code-point": "^2.0.0" + }, + "dependencies": { + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + } + } + }, + "slide": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz", + "integrity": "sha1-VusCfWW00tzmyy4tMsTUr8nh1wc=" + }, + "smart-buffer": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.1.0.tgz", + "integrity": "sha512-iVICrxOzCynf/SNaBQCw34eM9jROU/s5rzIhpOvzhzuYHfJR/DhZfDkXiZSgKXfgv26HT3Yni3AV/DGw0cGnnw==" + }, + "smart-mixin": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/smart-mixin/-/smart-mixin-2.0.0.tgz", + "integrity": "sha1-o0oQVeMqdbMNK048oyPcmctT9Dc=" + }, + "snake-case": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-1.1.2.tgz", + "integrity": "sha1-DC8l4wUVjZoY09l3BmGH/vilpmo=", + "requires": { + "sentence-case": "^1.1.2" + } + }, + "snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "requires": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "requires": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "requires": { + "kind-of": "^3.2.0" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "socks": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.3.3.tgz", + "integrity": "sha512-o5t52PCNtVdiOvzMry7wU4aOqYWL0PeCXRWBEiJow4/i/wr+wpsJQ9awEu1EonLIqsfGd5qSgDdxEOvCdmBEpA==", + "requires": { + "ip": "1.1.5", + "smart-buffer": "^4.1.0" + } + }, + "socks-proxy-agent": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-4.0.2.tgz", + "integrity": "sha512-NT6syHhI9LmuEMSK6Kd2V7gNv5KFZoLE7V5udWmn0de+3Mkj3UMA/AJPLyeNUVmElCurSHtUdM3ETpR3z770Wg==", + "requires": { + "agent-base": "~4.2.1", + "socks": "~2.3.2" + }, + "dependencies": { + "agent-base": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.2.1.tgz", + "integrity": "sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg==", + "requires": { + "es6-promisify": "^5.0.0" + } + } + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + }, + "source-map-resolve": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", + "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", + "requires": { + "atob": "^2.1.1", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "source-map-support": { + "version": "0.5.16", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.16.tgz", + "integrity": "sha512-efyLRJDr68D9hBBNIPWFjhpFzURh+KJykQwvMyW5UiZzYwoF6l4YMMDIJJEyFWxWCqfyxLzz6tSfUFR+kXXsVQ==", + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "source-map-url": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", + "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=" + }, + "spawn-sync": { + "version": "1.0.15", + "resolved": "https://registry.npmjs.org/spawn-sync/-/spawn-sync-1.0.15.tgz", + "integrity": "sha1-sAeZVX63+wyDdsKdROih6mfldHY=", + "dev": true, + "requires": { + "concat-stream": "^1.4.7", + "os-shim": "^0.1.2" + } + }, + "spawn-wrap": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-1.4.3.tgz", + "integrity": "sha512-IgB8md0QW/+tWqcavuFgKYR/qIRvJkRLPJDFaoXtLLUaVcCDK0+HeFTkmQHj3eprcYhc+gOl0aEA1w7qZlYezw==", + "dev": true, + "requires": { + "foreground-child": "^1.5.6", + "mkdirp": "^0.5.0", + "os-homedir": "^1.0.1", + "rimraf": "^2.6.2", + "signal-exit": "^3.0.2", + "which": "^1.3.0" + } + }, + "spdx-correct": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", + "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz", + "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==" + }, + "spdx-expression-parse": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", + "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz", + "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==" + }, + "split-on-first": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/split-on-first/-/split-on-first-1.1.0.tgz", + "integrity": "sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==" + }, + "split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "requires": { + "extend-shallow": "^3.0.0" + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" + }, + "sshpk": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", + "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", + "dev": true, + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + } + }, + "stack-generator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/stack-generator/-/stack-generator-1.1.0.tgz", + "integrity": "sha1-NvapIHUabBD0maE8Msu19RoLiyU=", + "requires": { + "stackframe": "^1.0.2" + }, + "dependencies": { + "stackframe": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.1.0.tgz", + "integrity": "sha512-Vx6W1Yvy+AM1R/ckVwcHQHV147pTPBKWCRLrXMuPrFVfvBUc3os7PR1QLIWCMhPpRg5eX9ojzbQIMLGBwyLjqg==" + } + } + }, + "stack-trace": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", + "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=", + "dev": true + }, + "stack-utils": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.2.tgz", + "integrity": "sha512-MTX+MeG5U994cazkjd/9KNAapsHnibjMLnfXodlkXw76JEea0UiNzrqidzo1emMwk7w5Qhc9jd4Bn9TBb1MFwA==" + }, + "stackframe": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-0.3.1.tgz", + "integrity": "sha1-M6qE8Rd6VUjIk1Uzy/6zQgl19aQ=" + }, + "stacktrace-gps": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/stacktrace-gps/-/stacktrace-gps-2.4.4.tgz", + "integrity": "sha1-acgn6dbW9Bz0ONfxleLjy/zyjEQ=", + "requires": { + "source-map": "0.5.6", + "stackframe": "~0.3" + }, + "dependencies": { + "source-map": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", + "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=" + } + } + }, + "stacktrace-js": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/stacktrace-js/-/stacktrace-js-1.3.1.tgz", + "integrity": "sha1-Z8qyWJr1xBe5Yvc2mUAne7O2oYs=", + "requires": { + "error-stack-parser": "^1.3.6", + "stack-generator": "^1.0.7", + "stacktrace-gps": "^2.4.3" + } + }, + "stacktrace-parser": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.8.tgz", + "integrity": "sha512-ig5rHJSdJrAsVqdb3oAI/8C6aQ7dEwJXoy/TIEIOTzdJHssmn12o6RsFoeQSLHoKjq0lX+kqhmnLDpyQTuWiJA==", + "requires": { + "type-fest": "^0.7.1" + } + }, + "static-container": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/static-container/-/static-container-1.5.1.tgz", + "integrity": "sha512-OFChfLKIvSzaMA3otS5CEabJTIzHFPhMxogIT+io4F207PXTvS6woFyjXIyXyqMIYAhryePGeFZYC6uLcG1lpA==" + }, + "static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "requires": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" + }, + "stealthy-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", + "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=", + "dev": true + }, + "stream-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-1.0.0.tgz", + "integrity": "sha1-v5tKv7QrJ011FHnkTg/yZWtvEZM=", + "requires": { + "inherits": "~2.0.1", + "readable-stream": "^1.0.27-1" + } + }, + "stream-buffers": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/stream-buffers/-/stream-buffers-2.2.0.tgz", + "integrity": "sha1-kdX1Ew0c75bc+n9yaUUYh0HQnuQ=" + }, + "stream-to-array": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/stream-to-array/-/stream-to-array-2.3.0.tgz", + "integrity": "sha1-u/azn19D7DC8cbq8s3VXrOzzQ1M=", + "requires": { + "any-promise": "^1.1.0" + } + }, + "strict-uri-encode": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz", + "integrity": "sha1-ucczDHBChi9rFC3CdLvMWGbONUY=" + }, + "string-length": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-2.0.0.tgz", + "integrity": "sha1-1A27aGo6zpYMHP/KVivyxF+DY+0=", + "dev": true, + "requires": { + "astral-regex": "^1.0.0", + "strip-ansi": "^4.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "string-range": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/string-range/-/string-range-1.2.2.tgz", + "integrity": "sha1-qJPtNH5yKZvIO++78qaSqNI51d0=" + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "string.prototype.trim": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.1.tgz", + "integrity": "sha512-MjGFEeqixw47dAMFMtgUro/I0+wNqZB5GKXGt1fFr24u3TzDXCPu7J9Buppzoe3r/LqkSDLDDJzE15RGWDGAVw==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1", + "function-bind": "^1.1.1" + } + }, + "string.prototype.trimleft": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.1.tgz", + "integrity": "sha512-iu2AGd3PuP5Rp7x2kEZCrB2Nf41ehzh+goo8TV7z8/XDBbsvc6HQIlUl9RjkZ4oyrW1XM5UwlGl1oVEaDjg6Ag==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "function-bind": "^1.1.1" + } + }, + "string.prototype.trimright": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.1.tgz", + "integrity": "sha512-qFvWL3/+QIgZXVmJBfpHmxLB7xsUXz6HsUmP8+5dRaC3Q7oKUv9Vo6aMCRZC1smrtyECFsIT30PqBJ1gTjAs+g==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "function-bind": "^1.1.1" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + } + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=" + }, + "strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=" + }, + "strip-indent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz", + "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=", + "dev": true + }, + "strip-json-comments": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.0.1.tgz", + "integrity": "sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw==", + "dev": true + }, + "sudo-prompt": { + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/sudo-prompt/-/sudo-prompt-9.1.1.tgz", + "integrity": "sha512-es33J1g2HjMpyAhz8lOR+ICmXXAqTuKbuXuUWLhOLew20oN9oUCgCJx615U/v7aioZg7IX5lIh9x34vwneu4pA==" + }, + "superagent": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/superagent/-/superagent-5.2.2.tgz", + "integrity": "sha512-pMWBUnIllK4ZTw7p/UaobiQPwAO5w/1NRRTDpV0FTVNmECztsxKspj3ZWEordVEaqpZtmOQJJna4yTLyC/q7PQ==", + "requires": { + "component-emitter": "^1.3.0", + "cookiejar": "^2.1.2", + "debug": "^4.1.1", + "fast-safe-stringify": "^2.0.7", + "form-data": "^3.0.0", + "formidable": "^1.2.1", + "methods": "^1.1.2", + "mime": "^2.4.4", + "qs": "^6.9.1", + "readable-stream": "^3.4.0", + "semver": "^6.3.0" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "requires": { + "ms": "^2.1.1" + } + }, + "form-data": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.0.tgz", + "integrity": "sha512-CKMFDglpbMi6PyN+brwB9Q/GOw0eAnsrEZDgcsH5Krhz5Od/haKHAX0NmQfha2zPPz0JpWzA7GJHGSnvCRLWsg==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + }, + "formidable": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.2.2.tgz", + "integrity": "sha512-V8gLm+41I/8kguQ4/o1D3RIHRmhYFG4pnNyonvua+40rqcEmT4+V71yaZ3B457xbbgCsCfjSPi65u/W6vK1U5Q==" + }, + "mime": { + "version": "2.4.5", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.5.tgz", + "integrity": "sha512-3hQhEUF027BuxZjQA3s7rIv/7VCQPa27hN9u9g87sEkWaKwQPuXOkVKtOeiyUrnWqTDiOs8Ed2rwg733mB0R5w==" + }, + "mime-db": { + "version": "1.44.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", + "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==" + }, + "mime-types": { + "version": "2.1.27", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", + "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", + "requires": { + "mime-db": "1.44.0" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "dependencies": { + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "requires": { + "safe-buffer": "~5.2.0" + } + } + } + }, + "safe-buffer": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", + "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==" + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } + } + }, + "superagent-proxy": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/superagent-proxy/-/superagent-proxy-2.0.0.tgz", + "integrity": "sha512-TktJma5jPdiH1BNN+reF/RMW3b8aBTCV7KlLFV0uYcREgNf3pvo7Rdt564OcFHwkGb3mYEhHuWPBhSbOwiNaYw==", + "requires": { + "debug": "^3.1.0", + "proxy-agent": "3" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + }, + "svg-parser": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.2.tgz", + "integrity": "sha512-1gtApepKFweigFZj3sGO8KT8LvVZK8io146EzXrpVuWCDAbISz/yMucco3hWTkpZNoPabM+dnMOpy6Swue68Zg==", + "dev": true + }, + "swap-case": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/swap-case/-/swap-case-1.1.2.tgz", + "integrity": "sha1-w5IDpFhzhfrTyFCgvRvK+ggZdOM=", + "requires": { + "lower-case": "^1.1.1", + "upper-case": "^1.1.1" + } + }, + "symbol-observable": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz", + "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==" + }, + "symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "dev": true + }, + "table": { + "version": "5.4.6", + "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", + "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", + "dev": true, + "requires": { + "ajv": "^6.10.2", + "lodash": "^4.17.14", + "slice-ansi": "^2.1.0", + "string-width": "^3.0.0" + }, + "dependencies": { + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "tail": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/tail/-/tail-2.0.3.tgz", + "integrity": "sha512-s9NOGkLqqiDEtBttQZI7acLS8ycYK5sTlDwNjGnpXG9c8AWj0cfAtwEIzo/hVRMMiC5EYz+bXaJWC1u1u0GPpQ==", + "dev": true + }, + "tap": { + "version": "14.10.5", + "resolved": "https://registry.npmjs.org/tap/-/tap-14.10.5.tgz", + "integrity": "sha512-8I8zMFEVu7e7RVcjK1GUNf1vW+6B9TRCZWGgif5siMBfvwTE9/EPN/7aH6W2r+WR2H2YHXcrCJ3XhRitYEVKfQ==", + "dev": true, + "requires": { + "@types/react": "^16.9.16", + "async-hook-domain": "^1.1.3", + "bind-obj-methods": "^2.0.0", + "browser-process-hrtime": "^1.0.0", + "chokidar": "^3.3.0", + "color-support": "^1.1.0", + "coveralls": "^3.0.8", + "diff": "^4.0.1", + "esm": "^3.2.25", + "findit": "^2.0.0", + "flow-remove-types": "^2.112.0", + "foreground-child": "^1.3.3", + "fs-exists-cached": "^1.0.0", + "function-loop": "^1.0.2", + "glob": "^7.1.6", + "import-jsx": "^3.0.0", + "ink": "^2.5.0", + "isexe": "^2.0.0", + "istanbul-lib-processinfo": "^1.0.0", + "jackspeak": "^1.4.0", + "minipass": "^3.1.1", + "mkdirp": "^0.5.1", + "nyc": "^14.1.1", + "opener": "^1.5.1", + "own-or": "^1.0.0", + "own-or-env": "^1.0.1", + "react": "^16.12.0", + "rimraf": "^2.7.1", + "signal-exit": "^3.0.0", + "source-map-support": "^0.5.16", + "stack-utils": "^1.0.2", + "tap-mocha-reporter": "^5.0.0", + "tap-parser": "^10.0.1", + "tap-yaml": "^1.0.0", + "tcompare": "^3.0.0", + "treport": "^1.0.1", + "trivial-deferred": "^1.0.1", + "ts-node": "^8.5.2", + "typescript": "^3.7.2", + "which": "^2.0.2", + "write-file-atomic": "^3.0.1", + "yaml": "^1.7.2", + "yapool": "^1.0.0" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.5.5", + "bundled": true, + "dev": true, + "requires": { + "@babel/highlight": "^7.0.0" + } + }, + "@babel/core": { + "version": "7.7.5", + "bundled": true, + "dev": true, + "requires": { + "@babel/code-frame": "^7.5.5", + "@babel/generator": "^7.7.4", + "@babel/helpers": "^7.7.4", + "@babel/parser": "^7.7.5", + "@babel/template": "^7.7.4", + "@babel/traverse": "^7.7.4", + "@babel/types": "^7.7.4", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "json5": "^2.1.0", + "lodash": "^4.17.13", + "resolve": "^1.3.2", + "semver": "^5.4.1", + "source-map": "^0.5.0" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "bundled": true, + "dev": true + } + } + }, + "@babel/generator": { + "version": "7.7.4", + "bundled": true, + "dev": true, + "requires": { + "@babel/types": "^7.7.4", + "jsesc": "^2.5.1", + "lodash": "^4.17.13", + "source-map": "^0.5.0" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "bundled": true, + "dev": true + } + } + }, + "@babel/helper-builder-react-jsx": { + "version": "7.7.4", + "bundled": true, + "dev": true, + "requires": { + "@babel/types": "^7.7.4", + "esutils": "^2.0.0" + } + }, + "@babel/helper-function-name": { + "version": "7.7.4", + "bundled": true, + "dev": true, + "requires": { + "@babel/helper-get-function-arity": "^7.7.4", + "@babel/template": "^7.7.4", + "@babel/types": "^7.7.4" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.7.4", + "bundled": true, + "dev": true, + "requires": { + "@babel/types": "^7.7.4" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.0.0", + "bundled": true, + "dev": true + }, + "@babel/helper-split-export-declaration": { + "version": "7.7.4", + "bundled": true, + "dev": true, + "requires": { + "@babel/types": "^7.7.4" + } + }, + "@babel/helpers": { + "version": "7.7.4", + "bundled": true, + "dev": true, + "requires": { + "@babel/template": "^7.7.4", + "@babel/traverse": "^7.7.4", + "@babel/types": "^7.7.4" + } + }, + "@babel/highlight": { + "version": "7.5.0", + "bundled": true, + "dev": true, + "requires": { + "chalk": "^2.0.0", + "esutils": "^2.0.2", + "js-tokens": "^4.0.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "bundled": true, + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "supports-color": { + "version": "5.5.0", + "bundled": true, + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "@babel/parser": { + "version": "7.7.5", + "bundled": true, + "dev": true + }, + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.7.4", + "bundled": true, + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-object-rest-spread": "^7.7.4" + } + }, + "@babel/plugin-syntax-jsx": { + "version": "7.7.4", + "bundled": true, + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-syntax-object-rest-spread": { + "version": "7.7.4", + "bundled": true, + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-destructuring": { + "version": "7.7.4", + "bundled": true, + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-react-jsx": { + "version": "7.7.4", + "bundled": true, + "dev": true, + "requires": { + "@babel/helper-builder-react-jsx": "^7.7.4", + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-jsx": "^7.7.4" + } + }, + "@babel/runtime": { + "version": "7.7.6", + "bundled": true, + "dev": true, + "requires": { + "regenerator-runtime": "^0.13.2" + } + }, + "@babel/template": { + "version": "7.7.4", + "bundled": true, + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "@babel/parser": "^7.7.4", + "@babel/types": "^7.7.4" + } + }, + "@babel/traverse": { + "version": "7.7.4", + "bundled": true, + "dev": true, + "requires": { + "@babel/code-frame": "^7.5.5", + "@babel/generator": "^7.7.4", + "@babel/helper-function-name": "^7.7.4", + "@babel/helper-split-export-declaration": "^7.7.4", + "@babel/parser": "^7.7.4", + "@babel/types": "^7.7.4", + "debug": "^4.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.13" + } + }, + "@babel/types": { + "version": "7.7.4", + "bundled": true, + "dev": true, + "requires": { + "esutils": "^2.0.2", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" + } + }, + "@types/color-name": { + "version": "1.1.1", + "bundled": true, + "dev": true + }, + "@types/prop-types": { + "version": "15.7.3", + "bundled": true, + "dev": true + }, + "@types/react": { + "version": "16.9.16", + "bundled": true, + "dev": true, + "requires": { + "@types/prop-types": "*", + "csstype": "^2.2.0" + } + }, + "ansi-escapes": { + "version": "4.3.0", + "bundled": true, + "dev": true, + "requires": { + "type-fest": "^0.8.1" + } + }, + "ansi-regex": { + "version": "5.0.0", + "bundled": true, + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "bundled": true, + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "ansicolors": { + "version": "0.3.2", + "bundled": true, + "dev": true + }, + "arrify": { + "version": "2.0.1", + "bundled": true, + "dev": true + }, + "astral-regex": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "auto-bind": { + "version": "3.0.0", + "bundled": true, + "dev": true + }, + "caller-callsite": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "requires": { + "callsites": "^2.0.0" + } + }, + "caller-path": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "requires": { + "caller-callsite": "^2.0.0" + } + }, + "callsites": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "cardinal": { + "version": "2.1.1", + "bundled": true, + "dev": true, + "requires": { + "ansicolors": "~0.3.2", + "redeyed": "~2.1.0" + } + }, + "chalk": { + "version": "3.0.0", + "bundled": true, + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.2.0", + "bundled": true, + "dev": true, + "requires": { + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "bundled": true, + "dev": true + } + } + }, + "ci-info": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "cli-cursor": { + "version": "3.1.0", + "bundled": true, + "dev": true, + "requires": { + "restore-cursor": "^3.1.0" + } + }, + "cli-truncate": { + "version": "2.1.0", + "bundled": true, + "dev": true, + "requires": { + "slice-ansi": "^3.0.0", + "string-width": "^4.2.0" + } + }, + "color-convert": { + "version": "1.9.3", + "bundled": true, + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "bundled": true, + "dev": true + }, + "convert-source-map": { + "version": "1.7.0", + "bundled": true, + "dev": true, + "requires": { + "safe-buffer": "~5.1.1" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "bundled": true, + "dev": true + } + } + }, + "csstype": { + "version": "2.6.8", + "bundled": true, + "dev": true + }, + "debug": { + "version": "4.1.1", + "bundled": true, + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "emoji-regex": { + "version": "8.0.0", + "bundled": true, + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "bundled": true, + "dev": true + }, + "esprima": { + "version": "4.0.1", + "bundled": true, + "dev": true + }, + "esutils": { + "version": "2.0.3", + "bundled": true, + "dev": true + }, + "events-to-array": { + "version": "1.1.2", + "bundled": true, + "dev": true + }, + "globals": { + "version": "11.12.0", + "bundled": true, + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "bundled": true, + "dev": true + }, + "import-jsx": { + "version": "3.0.0", + "bundled": true, + "dev": true, + "requires": { + "@babel/core": "^7.5.5", + "@babel/plugin-proposal-object-rest-spread": "^7.5.5", + "@babel/plugin-transform-destructuring": "^7.5.0", + "@babel/plugin-transform-react-jsx": "^7.3.0", + "caller-path": "^2.0.0", + "resolve-from": "^3.0.0" + } + }, + "ink": { + "version": "2.6.0", + "bundled": true, + "dev": true, + "requires": { + "ansi-escapes": "^4.2.1", + "arrify": "^2.0.1", + "auto-bind": "^3.0.0", + "chalk": "^3.0.0", + "cli-cursor": "^3.1.0", + "cli-truncate": "^2.0.0", + "is-ci": "^2.0.0", + "lodash.throttle": "^4.1.1", + "log-update": "^3.0.0", + "prop-types": "^15.6.2", + "react-reconciler": "^0.24.0", + "scheduler": "^0.18.0", + "signal-exit": "^3.0.2", + "slice-ansi": "^3.0.0", + "string-length": "^3.1.0", + "widest-line": "^3.1.0", + "wrap-ansi": "^6.2.0", + "yoga-layout-prebuilt": "^1.9.3" + } + }, + "is-ci": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "requires": { + "ci-info": "^2.0.0" + } + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "bundled": true, + "dev": true + }, + "js-tokens": { + "version": "4.0.0", + "bundled": true, + "dev": true + }, + "jsesc": { + "version": "2.5.2", + "bundled": true, + "dev": true + }, + "json5": { + "version": "2.1.1", + "bundled": true, + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "lodash": { + "version": "4.17.15", + "bundled": true, + "dev": true + }, + "lodash.throttle": { + "version": "4.1.1", + "bundled": true, + "dev": true + }, + "log-update": { + "version": "3.3.0", + "bundled": true, + "dev": true, + "requires": { + "ansi-escapes": "^3.2.0", + "cli-cursor": "^2.1.0", + "wrap-ansi": "^5.0.0" + }, + "dependencies": { + "ansi-escapes": { + "version": "3.2.0", + "bundled": true, + "dev": true + }, + "ansi-regex": { + "version": "4.1.0", + "bundled": true, + "dev": true + }, + "cli-cursor": { + "version": "2.1.0", + "bundled": true, + "dev": true, + "requires": { + "restore-cursor": "^2.0.0" + } + }, + "emoji-regex": { + "version": "7.0.3", + "bundled": true, + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "mimic-fn": { + "version": "1.2.0", + "bundled": true, + "dev": true + }, + "onetime": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "requires": { + "mimic-fn": "^1.0.0" + } + }, + "restore-cursor": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "requires": { + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" + } + }, + "string-width": { + "version": "3.1.0", + "bundled": true, + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "bundled": true, + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + }, + "wrap-ansi": { + "version": "5.1.0", + "bundled": true, + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + } + } + } + }, + "loose-envify": { + "version": "1.4.0", + "bundled": true, + "dev": true, + "requires": { + "js-tokens": "^3.0.0 || ^4.0.0" + } + }, + "mimic-fn": { + "version": "2.1.0", + "bundled": true, + "dev": true + }, + "minimist": { + "version": "1.2.0", + "bundled": true, + "dev": true + }, + "minipass": { + "version": "3.1.1", + "bundled": true, + "dev": true, + "requires": { + "yallist": "^4.0.0" + }, + "dependencies": { + "yallist": { + "version": "4.0.0", + "bundled": true, + "dev": true + } + } + }, + "ms": { + "version": "2.1.2", + "bundled": true, + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "bundled": true, + "dev": true + }, + "onetime": { + "version": "5.1.0", + "bundled": true, + "dev": true, + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "path-parse": { + "version": "1.0.6", + "bundled": true, + "dev": true + }, + "prop-types": { + "version": "15.7.2", + "bundled": true, + "dev": true, + "requires": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.8.1" + } + }, + "punycode": { + "version": "2.1.1", + "bundled": true, + "dev": true + }, + "react": { + "version": "16.12.0", + "resolved": "https://registry.npmjs.org/react/-/react-16.12.0.tgz", + "integrity": "sha512-fglqy3k5E+81pA8s+7K0/T3DBCF0ZDOher1elBFzF7O6arXJgzyu/FW+COxFvAWXJoJN9KIZbT2LXlukwphYTA==", + "dev": true, + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "prop-types": "^15.6.2" + } + }, + "react-is": { + "version": "16.12.0", + "bundled": true, + "dev": true + }, + "react-reconciler": { + "version": "0.24.0", + "bundled": true, + "dev": true, + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "prop-types": "^15.6.2", + "scheduler": "^0.18.0" + } + }, + "redeyed": { + "version": "2.1.1", + "bundled": true, + "dev": true, + "requires": { + "esprima": "~4.0.0" + } + }, + "regenerator-runtime": { + "version": "0.13.3", + "bundled": true, + "dev": true + }, + "resolve": { + "version": "1.13.1", + "bundled": true, + "dev": true, + "requires": { + "path-parse": "^1.0.6" + } + }, + "resolve-from": { + "version": "3.0.0", + "bundled": true, + "dev": true + }, + "restore-cursor": { + "version": "3.1.0", + "bundled": true, + "dev": true, + "requires": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + } + }, + "scheduler": { + "version": "0.18.0", + "bundled": true, + "dev": true, + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + } + }, + "semver": { + "version": "5.7.1", + "bundled": true, + "dev": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true, + "dev": true + }, + "slice-ansi": { + "version": "3.0.0", + "bundled": true, + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.2.0", + "bundled": true, + "dev": true, + "requires": { + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "bundled": true, + "dev": true + } + } + }, + "string-length": { + "version": "3.1.0", + "bundled": true, + "dev": true, + "requires": { + "astral-regex": "^1.0.0", + "strip-ansi": "^5.2.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "bundled": true, + "dev": true + }, + "astral-regex": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "strip-ansi": { + "version": "5.2.0", + "bundled": true, + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "string-width": { + "version": "4.2.0", + "bundled": true, + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "strip-ansi": { + "version": "6.0.0", + "bundled": true, + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + }, + "supports-color": { + "version": "7.1.0", + "bundled": true, + "dev": true, + "requires": { + "has-flag": "^4.0.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "bundled": true, + "dev": true + } + } + }, + "tap-parser": { + "version": "10.0.1", + "bundled": true, + "dev": true, + "requires": { + "events-to-array": "^1.0.1", + "minipass": "^3.0.0", + "tap-yaml": "^1.0.0" + } + }, + "tap-yaml": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "yaml": "^1.5.0" + } + }, + "to-fast-properties": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "treport": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "requires": { + "cardinal": "^2.1.1", + "chalk": "^3.0.0", + "import-jsx": "^3.0.0", + "ink": "^2.5.0", + "ms": "^2.1.2", + "string-length": "^3.1.0", + "tap-parser": "^10.0.1", + "unicode-length": "^2.0.2" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "bundled": true, + "dev": true + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "unicode-length": { + "version": "2.0.2", + "bundled": true, + "dev": true, + "requires": { + "punycode": "^2.0.0", + "strip-ansi": "^3.0.1" + } + } + } + }, + "type-fest": { + "version": "0.8.1", + "bundled": true, + "dev": true + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "widest-line": { + "version": "3.1.0", + "bundled": true, + "dev": true, + "requires": { + "string-width": "^4.0.0" + } + }, + "wrap-ansi": { + "version": "6.2.0", + "bundled": true, + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.2.0", + "bundled": true, + "dev": true, + "requires": { + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "bundled": true, + "dev": true + } + } + }, + "write-file-atomic": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.1.tgz", + "integrity": "sha512-JPStrIyyVJ6oCSz/691fAjFtefZ6q+fP6tm+OS4Qw6o+TGQxNp1ziY2PgS+X/m0V8OWhZiO/m4xSj+Pr4RrZvw==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "yaml": { + "version": "1.7.2", + "bundled": true, + "dev": true, + "requires": { + "@babel/runtime": "^7.6.3" + } + }, + "yoga-layout-prebuilt": { + "version": "1.9.3", + "bundled": true, + "dev": true + } + } + }, + "tap-mocha-reporter": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/tap-mocha-reporter/-/tap-mocha-reporter-5.0.0.tgz", + "integrity": "sha512-8HlAtdmYGlDZuW83QbF/dc46L7cN+AGhLZcanX3I9ILvxUAl+G2/mtucNPSXecTlG/4iP1hv6oMo0tMhkn3Tsw==", + "dev": true, + "requires": { + "color-support": "^1.1.0", + "debug": "^2.1.3", + "diff": "^1.3.2", + "escape-string-regexp": "^1.0.3", + "glob": "^7.0.5", + "readable-stream": "^2.1.5", + "tap-parser": "^10.0.0", + "tap-yaml": "^1.0.0", + "unicode-length": "^1.0.0" + }, + "dependencies": { + "diff": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-1.4.0.tgz", + "integrity": "sha1-fyjS657nsVqX79ic5j3P2qPMur8=", + "dev": true + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "optional": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "optional": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "tap-parser": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/tap-parser/-/tap-parser-10.0.1.tgz", + "integrity": "sha512-qdT15H0DoJIi7zOqVXDn9X0gSM68JjNy1w3VemwTJlDnETjbi6SutnqmBfjDJAwkFS79NJ97gZKqie00ZCGmzg==", + "dev": true, + "requires": { + "events-to-array": "^1.0.1", + "minipass": "^3.0.0", + "tap-yaml": "^1.0.0" + } + }, + "tap-yaml": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/tap-yaml/-/tap-yaml-1.0.0.tgz", + "integrity": "sha512-Rxbx4EnrWkYk0/ztcm5u3/VznbyFJpyXO12dDBHKWiDVxy7O2Qw6MRrwO5H6Ww0U5YhRY/4C/VzWmFPhBQc4qQ==", + "dev": true, + "requires": { + "yaml": "^1.5.0" + } + }, + "tcompare": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/tcompare/-/tcompare-3.0.4.tgz", + "integrity": "sha512-Q3TitMVK59NyKgQyFh+857wTAUE329IzLDehuPgU4nF5e8g+EUQ+yUbjUy1/6ugiNnXztphT+NnqlCXolv9P3A==", + "dev": true, + "requires": { + "diff-frag": "^1.0.1" + } + }, + "telnet-client": { + "version": "0.15.3", + "resolved": "https://registry.npmjs.org/telnet-client/-/telnet-client-0.15.3.tgz", + "integrity": "sha512-GSfdzQV0BKIYsmeXq7bJFJ2wHeJud6icaIxCUf6QCGQUD6R0BBGbT1+yLDhq67JRdgRpwyPwUbV7JxFeRrZomQ==", + "dev": true, + "requires": { + "bluebird": "3.5.x" + } + }, + "temp": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/temp/-/temp-0.8.3.tgz", + "integrity": "sha1-4Ma8TSa5AxJEEOT+2BEDAU38H1k=", + "requires": { + "os-tmpdir": "^1.0.0", + "rimraf": "~2.2.6" + }, + "dependencies": { + "rimraf": { + "version": "2.2.8", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz", + "integrity": "sha1-5Dm+Kq7jJzIZUnMPmaiSnk/FBYI=" + } + } + }, + "temp-dir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz", + "integrity": "sha1-CnwOom06Oa+n4OvqnB/AvE2qAR0=", + "dev": true + }, + "temp-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/temp-path/-/temp-path-1.0.0.tgz", + "integrity": "sha1-JLFUOXOrRCiW2a02fdnL2/r+kYs=" + }, + "tempfile": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/tempfile/-/tempfile-2.0.0.tgz", + "integrity": "sha1-awRGhWqbERTRhW/8vlCczLCXcmU=", + "dev": true, + "requires": { + "temp-dir": "^1.0.0", + "uuid": "^3.0.1" + } + }, + "temporary": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/temporary/-/temporary-0.0.8.tgz", + "integrity": "sha1-oYqYHSi6jKNgJ/s8MFOMPst0CsA=", + "dev": true, + "requires": { + "package": ">= 1.0.0 < 1.2.0" + } + }, + "test-exclude": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-5.2.3.tgz", + "integrity": "sha512-M+oxtseCFO3EDtAaGH7iiej3CBkzXqFMbzqYAACdzKui4eZA+pq3tZEwChvOdNfa7xxy8BfbmgJSIr43cC/+2g==", + "dev": true, + "requires": { + "glob": "^7.1.3", + "minimatch": "^3.0.4", + "read-pkg-up": "^4.0.0", + "require-main-filename": "^2.0.0" + }, + "dependencies": { + "load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + } + }, + "path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, + "requires": { + "pify": "^3.0.0" + } + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + }, + "read-pkg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", + "dev": true, + "requires": { + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" + } + }, + "read-pkg-up": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-4.0.0.tgz", + "integrity": "sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA==", + "dev": true, + "requires": { + "find-up": "^3.0.0", + "read-pkg": "^3.0.0" + } + }, + "require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + } + } + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "thenify": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.0.tgz", + "integrity": "sha1-5p44obq+lpsBCCB5eLn2K4hgSDk=", + "requires": { + "any-promise": "^1.0.0" + } + }, + "thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY=", + "requires": { + "thenify": ">= 3.1.0 < 4" + } + }, + "throat": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/throat/-/throat-4.1.0.tgz", + "integrity": "sha1-iQN8vJLFarGJJua6TLsgDhVnKmo=" + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" + }, + "through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "requires": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "thunkify": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/thunkify/-/thunkify-2.1.2.tgz", + "integrity": "sha1-+qDp0jDFGsyVyhOjYawFyn4EVT0=" + }, + "time-stamp": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz", + "integrity": "sha1-dkpaEa9QVhkhsTPztE5hhofg9cM=" + }, + "timers-browserify": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-1.4.2.tgz", + "integrity": "sha1-ycWLV1voQHN1y14kYtrO50NZ9B0=", + "requires": { + "process": "~0.11.0" + } + }, + "timespan": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/timespan/-/timespan-2.3.0.tgz", + "integrity": "sha1-SQLOBAvRPYRcj1myfp1ZutbzmSk=", + "dev": true + }, + "title-case": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/title-case/-/title-case-1.1.2.tgz", + "integrity": "sha1-+uSmrlRr+iLQg6DuqRCkDRLtT1o=", + "requires": { + "sentence-case": "^1.1.1", + "upper-case": "^1.0.3" + } + }, + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "requires": { + "os-tmpdir": "~1.0.2" + } + }, + "tmpl": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz", + "integrity": "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=" + }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" + }, + "to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "requires": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + }, + "toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" + }, + "tough-cookie": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", + "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", + "dev": true, + "requires": { + "psl": "^1.1.24", + "punycode": "^1.4.1" + }, + "dependencies": { + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true + } + } + }, + "tr46": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", + "dev": true, + "requires": { + "punycode": "^2.1.0" + }, + "dependencies": { + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + } + } + }, + "trim-newlines": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-2.0.0.tgz", + "integrity": "sha1-tAPQuRvlDDMd/EuC7s6yLD3hbSA=", + "dev": true + }, + "trim-right": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", + "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=" + }, + "trivial-deferred": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/trivial-deferred/-/trivial-deferred-1.0.1.tgz", + "integrity": "sha1-N21NKdlR1jaKb3oK6FwvTV4GWPM=", + "dev": true + }, + "truncate-utf8-bytes": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz", + "integrity": "sha1-QFkjkJWS1W94pYGENLC3hInKXys=", + "dev": true, + "requires": { + "utf8-byte-length": "^1.0.1" + } + }, + "ts-invariant": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/ts-invariant/-/ts-invariant-0.4.4.tgz", + "integrity": "sha512-uEtWkFM/sdZvRNNDL3Ehu4WVpwaulhwQszV8mrtcdeE8nN00BV9mAmQ88RkrBhFgl9gMgvjJLAQcZbnPXI9mlA==", + "requires": { + "tslib": "^1.9.3" + } + }, + "ts-node": { + "version": "8.5.4", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-8.5.4.tgz", + "integrity": "sha512-izbVCRV68EasEPQ8MSIGBNK9dc/4sYJJKYA+IarMQct1RtEot6Xp0bXuClsbUSnKpg50ho+aOAx8en5c+y4OFw==", + "dev": true, + "requires": { + "arg": "^4.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "source-map-support": "^0.5.6", + "yn": "^3.0.0" + } + }, + "ts-object-utils": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/ts-object-utils/-/ts-object-utils-0.0.5.tgz", + "integrity": "sha1-lTYc3s1+UhZ8/F5jTHY0XpCiYHc=" + }, + "tslib": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz", + "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==" + }, + "tsutils": { + "version": "3.17.1", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.17.1.tgz", + "integrity": "sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g==", + "dev": true, + "requires": { + "tslib": "^1.8.1" + } + }, + "tty-browserify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", + "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=" + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "dev": true, + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "dev": true + }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "requires": { + "prelude-ls": "~1.1.2" + } + }, + "type-fest": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.7.1.tgz", + "integrity": "sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==" + }, + "type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "dependencies": { + "mime-db": { + "version": "1.42.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.42.0.tgz", + "integrity": "sha512-UbfJCR4UAVRNgMpfImz05smAXK7+c+ZntjaA26ANtkXLlOe947Aag5zdIcKQULAiF9Cq4WxBi9jUs5zkA84bYQ==" + }, + "mime-types": { + "version": "2.1.25", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.25.tgz", + "integrity": "sha512-5KhStqB5xpTAeGqKBAMgwaYMnQik7teQN4IAzC7npDv6kzeU6prfkR67bc87J1kWMPGkoaZSq1npmexMgkmEVg==", + "requires": { + "mime-db": "1.42.0" + } + } + } + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" + }, + "typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dev": true, + "requires": { + "is-typedarray": "^1.0.0" + } + }, + "typescript": { + "version": "3.7.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.7.4.tgz", + "integrity": "sha512-A25xv5XCtarLwXpcDNZzCGvW2D1S3/bACratYBx2sax8PefsFhlYmkQicKHvpYflFS8if4zne5zT5kpJ7pzuvw==", + "dev": true + }, + "typescript-compare": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/typescript-compare/-/typescript-compare-0.0.2.tgz", + "integrity": "sha512-8ja4j7pMHkfLJQO2/8tut7ub+J3Lw2S3061eJLFQcvs3tsmJKp8KG5NtpLn7KcY2w08edF74BSVN7qJS0U6oHA==", + "requires": { + "typescript-logic": "^0.0.0" + } + }, + "typescript-logic": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/typescript-logic/-/typescript-logic-0.0.0.tgz", + "integrity": "sha512-zXFars5LUkI3zP492ls0VskH3TtdeHCqu0i7/duGt60i5IGPIpAHE/DWo5FqJ6EjQ15YKXrt+AETjv60Dat34Q==" + }, + "typescript-tuple": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/typescript-tuple/-/typescript-tuple-2.2.1.tgz", + "integrity": "sha512-Zcr0lbt8z5ZdEzERHAMAniTiIKerFCMgd7yjq1fPnDJ43et/k9twIFQMUYff9k5oXcsQ0WpvFcgzK2ZKASoW6Q==", + "requires": { + "typescript-compare": "^0.0.2" + } + }, + "ua-parser-js": { + "version": "0.7.21", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.21.tgz", + "integrity": "sha512-+O8/qh/Qj8CgC6eYBVBykMrNtp5Gebn4dlGD/kKXVkJNDwyrAwSIqwz8CDf+tsAIWVycKcku6gIXJ0qwx/ZXaQ==" + }, + "uglify-es": { + "version": "3.3.9", + "resolved": "https://registry.npmjs.org/uglify-es/-/uglify-es-3.3.9.tgz", + "integrity": "sha512-r+MU0rfv4L/0eeW3xZrd16t4NZfK8Ld4SWVglYBb7ez5uXFWHuVRs6xCTrf1yirs9a4j4Y27nn7SRfO6v67XsQ==", + "requires": { + "commander": "~2.13.0", + "source-map": "~0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "uglify-to-browserify": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", + "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=" + }, + "ultron": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.0.2.tgz", + "integrity": "sha1-rOEWq1V80Zc4ak6I9GhTeMiy5Po=" + }, + "underscore": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.2.4.tgz", + "integrity": "sha1-6NpiQaoG9k3yRzuyWQuMF8hMPH4=", + "dev": true + }, + "underscore.string": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.1.1.tgz", + "integrity": "sha1-RYOXeZEUubZ/YDC7UnsK+uaJwGE=", + "dev": true + }, + "unicode-canonical-property-names-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", + "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==" + }, + "unicode-length": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/unicode-length/-/unicode-length-1.0.3.tgz", + "integrity": "sha1-Wtp6f+1RhBpBijKM8UlHisg1irs=", + "dev": true, + "requires": { + "punycode": "^1.3.2", + "strip-ansi": "^3.0.1" + } + }, + "unicode-match-property-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", + "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", + "requires": { + "unicode-canonical-property-names-ecmascript": "^1.0.4", + "unicode-property-aliases-ecmascript": "^1.0.4" + } + }, + "unicode-match-property-value-ecmascript": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.1.0.tgz", + "integrity": "sha512-hDTHvaBk3RmFzvSl0UVrUmC3PuW9wKVnpoUDYH0JDkSIovzw+J5viQmeYHxVSBptubnr7PbH2e0fnpDRQnQl5g==" + }, + "unicode-property-aliases-ecmascript": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.5.tgz", + "integrity": "sha512-L5RAqCfXqAwR3RriF8pM0lU0w4Ryf/GgzONwi6KnL1taJQa7x1TCxdJnILX59WIGOwR57IVxn7Nej0fz1Ny6fw==" + }, + "union-value": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "requires": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + } + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" + }, + "unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "requires": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "dependencies": { + "has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "requires": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "dependencies": { + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "requires": { + "isarray": "1.0.0" + } + } + } + }, + "has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=" + } + } + }, + "untildify": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/untildify/-/untildify-3.0.3.tgz", + "integrity": "sha512-iSk/J8efr8uPT/Z4eSUywnqyrQU7DSdMfdqK4iWEaUVVmcP5JcnpRqmVMwcwcnmI1ATFNgC5V90u09tBynNFKA==", + "dev": true + }, + "upper-case": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", + "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=" + }, + "upper-case-first": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/upper-case-first/-/upper-case-first-1.1.2.tgz", + "integrity": "sha1-XXm+3P8UQZUY/S7bCgUHybaFkRU=", + "requires": { + "upper-case": "^1.1.1" + } + }, + "uri-js": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", + "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + }, + "dependencies": { + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + } + } + }, + "urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=" + }, + "url": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/url/-/url-0.10.3.tgz", + "integrity": "sha1-Ah5NnHcF8hu/N9A861h2dAJ3TGQ=", + "requires": { + "punycode": "1.3.2", + "querystring": "0.2.0" + } + }, + "use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==" + }, + "useragent": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/useragent/-/useragent-2.3.0.tgz", + "integrity": "sha512-4AoH4pxuSvHCjqLO04sU6U/uE65BYza8l/KKBS0b0hnUPWi+cQ2BpeTEwejCSx9SPV5/U03nniDTrWx5NrmKdw==", + "requires": { + "lru-cache": "4.1.x", + "tmp": "0.0.x" + } + }, + "utf8": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/utf8/-/utf8-2.1.2.tgz", + "integrity": "sha1-H6DZJw6b6FDZsFAn9jUZv0ZFfZY=" + }, + "utf8-byte-length": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz", + "integrity": "sha1-9F8VDExm7uloGGUFq5P8u4rWv2E=", + "dev": true + }, + "util": { + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", + "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", + "requires": { + "inherits": "2.0.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + } + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "util-inspect": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/util-inspect/-/util-inspect-0.1.8.tgz", + "integrity": "sha1-KznbzS2SHy2EMJI8r/QPS1zqXbE=", + "dev": true, + "requires": { + "array-map": "0.0.0", + "array-reduce": "0.0.0", + "foreach": "2.0.4", + "indexof": "0.0.1", + "isarray": "0.0.1", + "json3": "3.3.0", + "object-keys": "0.5.0" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "object-keys": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.5.0.tgz", + "integrity": "sha1-CeIR8+ADGK/E9ZLjbnzcENmtcpM=", + "dev": true + } + } + }, + "util.promisify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz", + "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "object.getownpropertydescriptors": "^2.0.3" + } + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" + }, + "uuid": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.3.tgz", + "integrity": "sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ==" + }, + "uuid-js": { + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/uuid-js/-/uuid-js-0.7.5.tgz", + "integrity": "sha1-bIhtAqU9LUDc8l2RoXC0p7JblNA=", + "dev": true + }, + "v8-compile-cache": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz", + "integrity": "sha512-usZBT3PW+LOjM25wbqIlZwPeJV+3OSz3M1k1Ws8snlW39dZyYL9lOGC5FgPVHfk0jKmjiDV8Z0mIbVQPiwFs7g==", + "dev": true + }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "validate.js": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/validate.js/-/validate.js-0.12.0.tgz", + "integrity": "sha512-/x2RJSvbqEyxKj0RPN4xaRquK+EggjeVXiDDEyrJzsJogjtiZ9ov7lj/svVb4DM5Q5braQF4cooAryQbUwOxlA==" + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "vlq": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/vlq/-/vlq-1.0.1.tgz", + "integrity": "sha512-gQpnTgkubC6hQgdIcRdYGDSDc+SaujOdyesZQMv6JlfQee/9Mp0Qhnys6WxDWvQnL5WZdT7o2Ul187aSt0Rq+w==" + }, + "vm-browserify": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz", + "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=", + "requires": { + "indexof": "0.0.1" + } + }, + "w3c-hr-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.1.tgz", + "integrity": "sha1-gqwr/2PZUOqeMYmlimViX+3xkEU=", + "dev": true, + "requires": { + "browser-process-hrtime": "^0.1.2" + }, + "dependencies": { + "browser-process-hrtime": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-0.1.3.tgz", + "integrity": "sha512-bRFnI4NnjO6cnyLmOV/7PVoDEMJChlcfN0z4s1YMBY989/SvlfMI1lgCnkFUs53e9gQF+w7qu7XdllSTiSl8Aw==", + "dev": true + } + } + }, + "walkdir": { + "version": "0.0.12", + "resolved": "https://registry.npmjs.org/walkdir/-/walkdir-0.0.12.tgz", + "integrity": "sha512-HFhaD4mMWPzFSqhpyDG48KDdrjfn409YQuVW7ckZYhW4sE87mYtWifdB/+73RA7+p4s4K18n5Jfx1kHthE1gBw==", + "dev": true + }, + "walker": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz", + "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=", + "requires": { + "makeerror": "1.0.x" + } + }, + "wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", + "requires": { + "defaults": "^1.0.3" + } + }, + "webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", + "dev": true + }, + "whatwg-encoding": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", + "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", + "dev": true, + "requires": { + "iconv-lite": "0.4.24" + } + }, + "whatwg-fetch": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.0.0.tgz", + "integrity": "sha512-9GSJUgz1D4MfyKU7KRqwOjXCXTqWdFNvEr7eUBYchQiVc744mqK/MzXPNR2WsPkmkOa4ywfg8C2n8h+13Bey1Q==" + }, + "whatwg-mimetype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", + "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", + "dev": true + }, + "whatwg-url": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.5.0.tgz", + "integrity": "sha512-rhRZRqx/TLJQWUpQ6bmrt2UV4f0HCQ463yQuONJqC6fO2VoEb1pTYddbe59SkYq87aoM5A3bdhMZiUiVws+fzQ==", + "dev": true, + "requires": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "requires": { + "isexe": "^2.0.0" + } + }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" + }, + "window-size": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", + "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=" + }, + "winston": { + "version": "0.5.11", + "resolved": "https://registry.npmjs.org/winston/-/winston-0.5.11.tgz", + "integrity": "sha1-nYTq2YGkl6kt33ZhYTer72YcQU8=", + "dev": true, + "requires": { + "async": "0.1.x", + "colors": "0.x.x", + "eyes": "0.1.x", + "loggly": "0.3.x >=0.3.7", + "pkginfo": "0.2.x", + "stack-trace": "0.0.x" + }, + "dependencies": { + "async": { + "version": "0.1.22", + "resolved": "https://registry.npmjs.org/async/-/async-0.1.22.tgz", + "integrity": "sha1-D8GqoIig4+8Ovi2IMbqw3PiEUGE=", + "dev": true + }, + "pkginfo": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/pkginfo/-/pkginfo-0.2.3.tgz", + "integrity": "sha1-cjnEKl72wwuPMoQ52bn/cQQkkPg=", + "dev": true + } + } + }, + "wml": { + "version": "0.0.83", + "resolved": "https://registry.npmjs.org/wml/-/wml-0.0.83.tgz", + "integrity": "sha512-t/atXKIcMLIvMIReoPGELN+JkpjF6B661dWuJjKYNydX3N7M0vUYiy8UP3oxIUyO+b0tOwuRKKW/VsPka0Hfjw==", + "dev": true, + "requires": { + "colors": "^1.1.2", + "extend": "^3.0.0", + "fb-watchman": "^1.9.0", + "fs-extra": "^0.30.0", + "inquirer": "^1.2.3", + "is-there": "^4.3.3", + "q": "^1.4.1", + "untildify": "^3.0.2", + "uuid-js": "^0.7.5", + "yargs": "^4.7.1" + }, + "dependencies": { + "ansi-escapes": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz", + "integrity": "sha1-06ioOzGapneTZisT52HHkRQiMG4=", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "bser": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bser/-/bser-1.0.2.tgz", + "integrity": "sha1-OBEWlwsqbe6lZG3RXdcnhES1YWk=", + "dev": true, + "requires": { + "node-int64": "^0.4.0" + } + }, + "camelcase": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "cli-cursor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", + "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", + "dev": true, + "requires": { + "restore-cursor": "^1.0.1" + } + }, + "colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", + "dev": true + }, + "external-editor": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-1.1.1.tgz", + "integrity": "sha1-Etew24UPf/fnCBuvQAVwAGDEYAs=", + "dev": true, + "requires": { + "extend": "^3.0.0", + "spawn-sync": "^1.0.15", + "tmp": "^0.0.29" + } + }, + "fb-watchman": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-1.9.2.tgz", + "integrity": "sha1-okz0eCf4LTj7Waaa1wt247auc4M=", + "dev": true, + "requires": { + "bser": "1.0.2" + } + }, + "figures": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", + "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5", + "object-assign": "^4.1.0" + } + }, + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true, + "requires": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "fs-extra": { + "version": "0.30.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz", + "integrity": "sha1-8jP/zAjU2n1DLapEl3aYnbHfk/A=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^2.1.0", + "klaw": "^1.0.0", + "path-is-absolute": "^1.0.0", + "rimraf": "^2.2.8" + } + }, + "inquirer": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-1.2.3.tgz", + "integrity": "sha1-TexvMvN+97sLLtPx0aXD9UUHSRg=", + "dev": true, + "requires": { + "ansi-escapes": "^1.1.0", + "chalk": "^1.0.0", + "cli-cursor": "^1.0.1", + "cli-width": "^2.0.0", + "external-editor": "^1.1.0", + "figures": "^1.3.5", + "lodash": "^4.3.0", + "mute-stream": "0.0.6", + "pinkie-promise": "^2.0.0", + "run-async": "^2.2.0", + "rx": "^4.1.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.0", + "through": "^2.3.6" + } + }, + "load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" + } + }, + "mute-stream": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.6.tgz", + "integrity": "sha1-SJYrGeFp/R38JAs/HnMXYnu8R9s=", + "dev": true + }, + "onetime": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", + "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=", + "dev": true + }, + "os-locale": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", + "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", + "dev": true, + "requires": { + "lcid": "^1.0.0" + } + }, + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true, + "requires": { + "error-ex": "^1.2.0" + } + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true, + "requires": { + "pinkie-promise": "^2.0.0" + } + }, + "path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "dev": true, + "requires": { + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" + } + }, + "read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "dev": true, + "requires": { + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" + } + }, + "restore-cursor": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz", + "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", + "dev": true, + "requires": { + "exit-hook": "^1.0.0", + "onetime": "^1.0.0" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true, + "requires": { + "is-utf8": "^0.2.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + }, + "tmp": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.29.tgz", + "integrity": "sha1-8lEl/w3Z2jzLDC3Tce4SiLuRKMA=", + "dev": true, + "requires": { + "os-tmpdir": "~1.0.1" + } + }, + "which-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", + "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=", + "dev": true + }, + "window-size": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.2.0.tgz", + "integrity": "sha1-tDFbtCFKPXBY6+7okuE/ok2YsHU=", + "dev": true + }, + "yargs": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-4.8.1.tgz", + "integrity": "sha1-wMQpJMpKqmsObaFznfshZDn53cA=", + "dev": true, + "requires": { + "cliui": "^3.2.0", + "decamelize": "^1.1.1", + "get-caller-file": "^1.0.1", + "lodash.assign": "^4.0.3", + "os-locale": "^1.4.0", + "read-pkg-up": "^1.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^1.0.1", + "which-module": "^1.0.0", + "window-size": "^0.2.0", + "y18n": "^3.2.1", + "yargs-parser": "^2.4.1" + } + }, + "yargs-parser": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-2.4.1.tgz", + "integrity": "sha1-hVaN488VD/SfpRgl8DqMiA3cxcQ=", + "dev": true, + "requires": { + "camelcase": "^3.0.0", + "lodash.assign": "^4.0.6" + } + } + } + }, + "word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==" + }, + "wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=" + }, + "wrap-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" + }, + "dependencies": { + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + } + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "write": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", + "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", + "dev": true, + "requires": { + "mkdirp": "^0.5.1" + } + }, + "write-file-atomic": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-1.3.4.tgz", + "integrity": "sha1-+Aek8LHZ6ROuekgRLmzDrxmRtF8=", + "requires": { + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "slide": "^1.1.5" + } + }, + "ws": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ws/-/ws-1.1.5.tgz", + "integrity": "sha512-o3KqipXNUdS7wpQzBHSe180lBGO60SoK0yVo3CYJgb2MkobuWuBX6dhkYP5ORCLd55y+SaflMOV5fqAB53ux4w==", + "requires": { + "options": ">=0.0.5", + "ultron": "1.0.x" + } + }, + "xcode": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/xcode/-/xcode-2.1.0.tgz", + "integrity": "sha512-uCrmPITrqTEzhn0TtT57fJaNaw8YJs1aCzs+P/QqxsDbvPZSv7XMPPwXrKvHtD6pLjBM/NaVwraWJm8q83Y4iQ==", + "requires": { + "simple-plist": "^1.0.0", + "uuid": "^3.3.2" + } + }, + "xml-name-validator": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", + "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", + "dev": true + }, + "xmlbuilder": { + "version": "9.0.7", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", + "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=" + }, + "xmldoc": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/xmldoc/-/xmldoc-1.1.2.tgz", + "integrity": "sha512-ruPC/fyPNck2BD1dpz0AZZyrEwMOrWTO5lDdIXS91rs3wtm4j+T8Rp2o+zoOYkkAxJTZRPOSnOGei1egoRmKMQ==", + "requires": { + "sax": "^1.2.1" + } + }, + "xmldom": { + "version": "0.1.31", + "resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.1.31.tgz", + "integrity": "sha512-yS2uJflVQs6n+CyjHoaBmVSqIDevTAWrzMmjG1Gc7h1qQ7uVozNhEPJAwZXWyGQ/Gafo3fCwrcaokezLPupVyQ==" + }, + "xpipe": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/xpipe/-/xpipe-1.0.5.tgz", + "integrity": "sha1-jdi/Rfw/f1Xw4FS4ePQ6YmFNr98=" + }, + "xregexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-2.0.0.tgz", + "integrity": "sha1-UqY+VsoLhKfzpfPWGHLxJq16WUM=" + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" + }, + "y18n": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", + "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=" + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" + }, + "yaml": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.7.2.tgz", + "integrity": "sha512-qXROVp90sb83XtAoqE8bP9RwAkTTZbugRUTm5YeFCBfNRPEp2YzTeqWiz7m5OORHzEvrA/qcGS8hp/E+MMROYw==", + "dev": true, + "requires": { + "@babel/runtime": "^7.6.3" + } + }, + "yapool": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/yapool/-/yapool-1.0.0.tgz", + "integrity": "sha1-9pPymjFbUNmp2iZGp6ZkXJaYW2o=", + "dev": true + }, + "yargs": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-9.0.1.tgz", + "integrity": "sha1-UqzCP+7Kw0BCB47njAwAf1CF20w=", + "requires": { + "camelcase": "^4.1.0", + "cliui": "^3.2.0", + "decamelize": "^1.1.1", + "get-caller-file": "^1.0.1", + "os-locale": "^2.0.0", + "read-pkg-up": "^2.0.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1", + "yargs-parser": "^7.0.0" + }, + "dependencies": { + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=" + } + } + }, + "yargs-parser": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-7.0.0.tgz", + "integrity": "sha1-jQrELxbqVd69MyyvTEA4s+P139k=", + "requires": { + "camelcase": "^4.1.0" + }, + "dependencies": { + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=" + } + } + }, + "yazl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/yazl/-/yazl-2.5.1.tgz", + "integrity": "sha512-phENi2PLiHnHb6QBVot+dJnaAZ0xosj7p3fWl+znIjBDlnMI2PsZCJZ306BPTFOaHf5qdDEI8x5qFrSOBN5vrw==", + "requires": { + "buffer-crc32": "~0.2.3" + } + }, + "yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true + }, + "zen-observable": { + "version": "0.8.15", + "resolved": "https://registry.npmjs.org/zen-observable/-/zen-observable-0.8.15.tgz", + "integrity": "sha512-PQ2PC7R9rslx84ndNBZB/Dkv8V8fZEpk83RLgXtYd0fwUgEjseMn1Dgajh2x6S8QbZAFa9p2qVCEuYZNgve0dQ==" + }, + "zen-observable-ts": { + "version": "0.8.21", + "resolved": "https://registry.npmjs.org/zen-observable-ts/-/zen-observable-ts-0.8.21.tgz", + "integrity": "sha512-Yj3yXweRc8LdRMrCC8nIc4kkjWecPAUVh0TI0OUrWXx6aX790vLcDlWca6I4vsyCGH3LpWxq0dJRcMOFoVqmeg==", + "requires": { + "tslib": "^1.9.3", + "zen-observable": "^0.8.0" + } + } + } +} diff --git a/ioneapps-maagapp-ee31119a522d/package.json b/ioneapps-maagapp-ee31119a522d/package.json new file mode 100644 index 0000000..e9f2b37 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/package.json @@ -0,0 +1,334 @@ +{ + "name": "MAAGApp", + "version": "0.0.12", + "private": true, + "scripts": { + "android": "react-native run-android --variant=devDebug", + "android:rnd": "export ENVFILE=.env.rnd && react-native run-android --variant=rndDebug --appId com.creedon.Nixplay.rnd", + "android:qa": "export ENVFILE=.env.qa && react-native run-android --variant=qaDebug --appId com.creedon.Nixplay.qa", + "android:alpha": "export ENVFILE=.env.alpha && react-native run-android --variant=alphaDebug --appId com.creedon.Nixplay.alpha", + "android:beta": "export ENVFILE=.env.beta && react-native run-android --variant=betaDebug --appId com.creedon.Nixplay.beta", + "android:prod": "export ENVFILE=.env.props && react-native run-android --variant=prodDebug --appId com.creedon.Nixplay", + "build:ios": "react-native bundle --entry-file='index.js' --bundle-output='./ios/main.jsbundle' --dev=false --platform='ios' --assets-dest='./ios'", + "coverage": "jest --coverage", + "ios": "react-native run-ios", + "ios:rnd": "react-native run-ios --scheme \"NixplayRnd\"", + "ios:qa": "react-native run-ios --scheme \"NixplayQA\"", + "ios:alpha": "react-native run-ios --scheme \"NixplayAlpha\"", + "ios:release:testflight": "npm ci && bundle exec fastlane ios alpha_testflight --env alpha_testflight", + "ios:release:alpha": "npm ci && bundle exec fastlane ios alpha --env alpha", + "ios:release:beta": "npm ci && bundle exec fastlane ios beta --env beta", + "ios:release:qa": "npm ci && bundle exec fastlane ios qa --env qa", + "ios:release:rnd": "npm ci && bundle exec fastlane ios rnd --env rnd", + "ios:release:prod": "npm ci && bundle exec fastlane ios production", + "android:release:alpha": "export ENVFILE=.env.alpha && npm ci && bundle exec fastlane android alpha --env alpha", + "android:release:beta": "export ENVFILE=.env.beta && npm ci && bundle exec fastlane android beta --env beta", + "android:release:rnd": "export ENVFILE=.env.rnd && npm ci && bundle exec fastlane android rnd --env rnd", + "android:release:qa": "export ENVFILE=.env.qa && npm ci && bundle exec fastlane android qa --env qa", + "android:release:production": "export ENVFILE=.env && npm ci && bundle exec fastlane android production", + "release:rnd": "npm ci && bundle exec fastlane ios rnd --env rnd && export ENVFILE=.env.rnd && bundle exec fastlane android rnd --env rnd", + "release:qa": "npm ci && bundle exec fastlane ios qa --env qa && export ENVFILE=.env.qa && bundle exec fastlane android qa --env qa", + "release:alpha": "npm ci && bundle exec fastlane ios alpha_testflight --env alpha_testflight && export ENVFILE=.env.alpha && bundle exec fastlane android alpha --env alpha", + "ios:release:reset": "rm -rf ~/Library/Developer/Xcode/DerivedData/ && rm -rf ./ios/build && rm -rf node_modules && npm ci", + "increment-build": "react-native-version -b ", + "lint": "eslint .", + "postinstall": "./postinstall.sh && npx jetify", + "prestart": "./update-revision.sh", + "prepush": "is-git-status-clean && npm run lint", + "prerelease": "react-native-version && git add . && version=$( jq -r '.version' package.json)-$(grep -o \"versionCode\\s\\+\\d\\+\" android/app/build.gradle | awk '{ print $2 }') && git commit -m 'Bumped build number' && git push --no-verify", + "create:release:branch": "git flow release start $( jq -r '.version' package.json)", + "start": "node node_modules/react-native/local-cli/cli.js start", + "preversion": "npm test", + "postversion": "react-native-version", + "test": "jest --coverage", + "test:clear": "jest --clearCache", + "test:watch": "jest --watch --coverage", + "update-snapshot": "jest -u", + "clean:android": "./android/gradlew -p ./android clean", + "bump:build:ios": "cd ios/ && agvtool next-version -all && cd ..", + "set:build:ios": "cd ios/ && agvtool new-version -all", + "set:version:ios": "cd ios/ && agvtool new-marketing-version", + "android:reset": "rm -rf ./android/build && rm -rf ./android/app/build", + "android:uninstall:rnd": "adb uninstall com.creedon.Nixplay.rnd", + "android:uninstall:qa": "adb uninstall com.creedon.Nixplay.qa", + "android:uninstall:dev": "adb uninstall com.creedon.Nixplay.dev", + "android:uninstall:alpha": "adb uninstall com.creedon.Nixplay.alpha", + "android:uninstall:beta": "adb uninstall com.creedon.Nixplay.beta", + "android:uninstall:prod": "adb uninstall com.creedon.Nixplay", + "android:uninstall:all": "npm run android:uninstall:qa && npm run android:uninstall:dev && npm run android:uninstall:rnd && npm run android:uninstall:alpha && npm run android:uninstall:beta && npm run android:uninstall:prod", + "clean": "watchman watch-del-all && rm -rf node_modules && rm -rf android/build/ && rm -rf ./android/app/build/ && find . -name \"*.iml\" | xargs -n 1 rm && rm -rf ./android/.gradle/ && rm -rf ./android/.idea/ && rm -rf ./ios/build && rm -rf ~/Library/Developer/Xcode/DerivedData && npm install", + "pod": "cd ios && pod install && pod update && cd ../" + }, + "dependencies": { + "@react-native-community/async-storage": "1.2.4", + "@react-native-community/blur": "^3.3.1", + "@react-native-community/cameraroll": "^1.4.1", + "@react-native-community/geolocation": "^1.4.2", + "@react-native-community/image-editor": "^2.2.0", + "@react-native-community/netinfo": "^4.0.0", + "@react-native-community/push-notification-ios": "^1.0.3", + "@react-native-community/slider": "^2.0.8", + "@react-native-community/viewpager": "^1.1.7", + "@tradle/react-native-http": "^2.0.1", + "apollo-client": "^2.6.4", + "apollo-link": "^1.2.12", + "apollo-link-context": "^1.0.18", + "apollo-link-http": "^1.5.15", + "assert": "^1.5.0", + "browserify-zlib": "^0.1.4", + "console-browserify": "^1.2.0", + "constants-browserify": "^1.0.0", + "core-js": "^3.0.0", + "dns.js": "^1.0.1", + "domain-browser": "^1.2.0", + "events": "^1.1.1", + "faker": "^4.1.0", + "graceful-fs": "^4.1.11", + "graphql": "^15.0.0", + "graphql-tag": "^2.10.1", + "https-browserify": "0.0.1", + "i18n-js": "^3.2.1", + "immer": "^3.1.3", + "jsc-android": "^241213.1.0", + "jwt-decode": "^2.2.0", + "lodash": "^4.17.15", + "metro-config": "^0.54.1", + "nixplay-ui-kit": "git+ssh://git@git.nixplay.ninja:mobile/nixplay-ui-kit.git#1.8.10", + "object-diff": "0.0.4", + "path-browserify": "0.0.0", + "polyfills": "^2.1.1", + "prop-types": "15.7.2", + "querystring-es3": "^0.2.1", + "react": "16.9.0", + "react-apollo": "^3.0.1", + "react-native": "0.61.5", + "react-native-actionsheet": "^2.4.2", + "react-native-animatable": "^1.3.2", + "react-native-app-settings": "^2.0.1", + "react-native-bluetooth-escpos-printer": "0.0.5", + "react-native-camera": "^3.23.1", + "react-native-code-push": "^6.2.0", + "react-native-config": "^0.11.5", + "react-native-creedon-imagepicker": "git+ssh://git@git.nixplay.ninja:mobile/react-native-creedon-imagepicker.git#1.3.2", + "react-native-crypto": "^2.2.0", + "react-native-default-preference": "^1.3.2", + "react-native-detect-navbar-android": "^0.2.0", + "react-native-device-detection": "^0.2.0", + "react-native-device-info": "^1.4.1", + "react-native-draggable-flatlist": "git+https://github.com/nixplay/react-native-draggable-flatlist.git#a33fa1ea4e747b0a2a7cf9164de5ed77e25f7af5", + "react-native-email": "^1.0.2", + "react-native-fabric": "^0.5.2", + "react-native-fabric-crashlytics": "^0.1.8", + "react-native-fast-image": "^6.0.1", + "react-native-file-type": "0.0.8", + "react-native-firebase": "^5.6.0", + "react-native-fs": "^2.16.0", + "react-native-geocoder": "^0.5.0", + "react-native-gesture-handler": "^1.6.0", + "react-native-haptic-feedback": "^1.7.1", + "react-native-image-gallery": "git+https://github.com/kundarmah/react-native-image-gallery.git", + "react-native-image-pan-zoom": "git+https://github.com/nixplay/react-native-image-zoom.git#2.1.12", + "react-native-image-progress": "git+https://github.com/nixplay/react-native-image-progress.git#1.0.0", + "react-native-image-resizer": "^1.0.1", + "react-native-interactable": "^1.0.0", + "react-native-iphone-x-helper": "^1.2.0", + "react-native-keyboard-spacer": "^0.4.1", + "react-native-keychain": "^3.1.1", + "react-native-largelist-v3": "^3.0.15", + "react-native-level-fs": "^3.0.1", + "react-native-linear-gradient": "^2.5.4", + "react-native-loading-spinner-overlay": "^1.0.1", + "react-native-localize": "^1.1.2", + "react-native-log-level": "^1.1.0", + "react-native-mime-types": "^2.2.1", + "react-native-mixpanel": "^1.1.1", + "react-native-modal": "^11.5.4", + "react-native-modalbox": "^1.7.1", + "react-native-nixplay-core": "git+ssh://git@git.nixplay.ninja:mobile/react-native-nixplay-core.git#1.1.5", + "react-native-offline": "^5.2.0", + "react-native-os": "^1.2.6", + "react-native-permissions": "^2.0.0", + "react-native-popup-dialog": "^0.18.0", + "react-native-progress": "^4.0.3", + "react-native-push-notification": "^3.1.2", + "react-native-qrcode-generator": "^1.2.2", + "react-native-qrcode-scanner": "^1.4.0", + "react-native-randombytes": "^3.5.3", + "react-native-reanimated": "^1.7.0", + "react-native-remote-svg": "^2.0.3", + "react-native-safe-area": "^0.5.0", + "react-native-shimmer-placeholder": "^1.0.35", + "react-native-simple-image-cropper": "git+https://github.com/nixplay/react-native-simple-image-cropper.git#2.0.3-dev1", + "react-native-splash-screen": "^3.2.0", + "react-native-star-rating": "^1.1.0", + "react-native-svg": "^9.5.1", + "react-native-tcp": "^3.3.2", + "react-native-udp": "^2.7.0", + "react-native-user-defaults": "^0.1.5", + "react-native-vector-icons": "^6.4.2", + "react-native-view-overflow": "git+https://www.github.com/QuartermasterInc/react-native-view-overflow.git", + "react-native-webview": "^8.1.2", + "react-native-windows": "^1.0.0", + "react-navigation": "^3.7.1", + "react-navigation-tabs": "^2.6.2", + "react-redux": "^7.0.3", + "readable-stream": "^1.0.33", + "recyclerlistview": "^1.3.4", + "redux": "4.0.1", + "redux-form": "^8.2.0", + "redux-logger": "*", + "redux-persist": "6.0.0", + "redux-persist-filesystem-storage": "^2.1.0", + "redux-saga": "^1.1.3", + "reselect": "^4.0.0", + "rn-fetch-blob": "^0.10.13", + "rn-viewpager": "^1.2.9", + "stream-browserify": "^1.0.0", + "string_decoder": "^0.10.31", + "timers-browserify": "^1.4.2", + "tty-browserify": "0.0.0", + "url": "^0.10.3", + "util": "^0.10.4", + "validate.js": "^0.12.0", + "vm-browserify": "0.0.4" + }, + "devDependencies": { + "@babel/core": "^7.6.2", + "@babel/plugin-proposal-object-rest-spread": "^7.4.4", + "@babel/plugin-transform-modules-commonjs": "^7.2.0", + "@babel/plugin-transform-spread": "^7.2.2", + "@babel/preset-env": "^7.0.0", + "@babel/preset-flow": "^7.0.0", + "@babel/runtime": "^7.6.2", + "@react-native-community/eslint-config": "^0.0.5", + "@types/react": "^16.8.24", + "alias": "0.0.5", + "babel-core": "^7.0.0-bridge.0", + "babel-eslint": "^9.0.0", + "babel-jest": "^24.9.0", + "babel-plugin-import-glob": "^2.0.0", + "babel-plugin-module-resolver": "^3.1.1", + "babel-plugin-relay": "^1.7.0", + "babel-preset-react-native-stage-0": "^1.0.1", + "detox": "^12.0.0", + "enzyme": "^3.3.0", + "enzyme-adapter-react-16": "^1.1.1", + "eslint": "^6.5.1", + "eslint-config-airbnb": "^16.1.0", + "eslint-import-resolver-babel-module": "^5.0.1", + "eslint-plugin-import": "^2.16.0", + "eslint-plugin-jsx-a11y": "^6.1.1", + "eslint-plugin-react": "^7.8.2", + "husky": "^0.14.3", + "is-git-status-clean": "^1.0.0", + "jest": "^24.9.0", + "jest-fetch-mock": "^1.6.2", + "jest-prop-type-error": "^1.1.0", + "metro-react-native-babel-preset": "^0.56.0", + "mocha": "^5.2.0", + "papaparse": "^4.4.0", + "react-dom": "^16.4.0", + "react-native-svg-transformer": "^0.13.0", + "react-native-version": "^2.6.0", + "react-test-renderer": "16.9.0", + "redux-saga-test-plan": "^4.0.0-beta.2", + "rn-nodeify": "^10.2.0", + "rosie": "^1.6.0", + "wml": "0.0.83" + }, + "jest": { + "preset": "react-native", + "verbose": true, + "moduleDirectories": [ + "node_modules", + "src" + ], + "transform": { + "^.+\\.(js)$": "/node_modules/babel-jest" + }, + "transformIgnorePatterns": [ + "/node_modules/(?!(react-native|react-native-i18n|redux-form|react-native-device-info|react-native-fs|lodash-es|react-native-haptic-feedback|@react-native-community))/" + ], + "modulePathIgnorePatterns": [ + "/__tests__/testHelpers/setupJest.js" + ], + "testPathIgnorePatterns": [ + "/__tests__/testHelpers/", + "e2e/" + ], + "setupFiles": [ + "/__tests__/testHelpers/setupJest.js", + "jest-prop-type-error" + ] + }, + "rnpm": { + "assets": [ + "src/fonts" + ] + }, + "detox": { + "configurations": { + "ios.sim.debug": { + "binaryPath": "ios/build/Build/Products/Debug-iphonesimulator/Nixplay.app", + "build": "xcodebuild -workspace ios/Nixplay.xcworkspace -scheme Nixplay -configuration Debug -sdk iphonesimulator -derivedDataPath ios/build", + "type": "ios.simulator", + "name": "iPhone X" + } + } + }, + "resolutions": { + "apollo-client": "2.6.4" + }, + "react-native": { + "zlib": "browserify-zlib", + "console": "console-browserify", + "constants": "constants-browserify", + "crypto": "react-native-crypto", + "dns": "dns.js", + "net": "react-native-tcp", + "domain": "domain-browser", + "http": "@tradle/react-native-http", + "https": "https-browserify", + "os": "react-native-os", + "path": "path-browserify", + "querystring": "querystring-es3", + "fs": "react-native-level-fs", + "_stream_transform": "readable-stream/transform", + "_stream_readable": "readable-stream/readable", + "_stream_writable": "readable-stream/writable", + "_stream_duplex": "readable-stream/duplex", + "_stream_passthrough": "readable-stream/passthrough", + "dgram": "react-native-udp", + "stream": "stream-browserify", + "timers": "timers-browserify", + "tty": "tty-browserify", + "vm": "vm-browserify", + "tls": false + }, + "browser": { + "zlib": "browserify-zlib", + "console": "console-browserify", + "constants": "constants-browserify", + "crypto": "react-native-crypto", + "dns": "dns.js", + "net": "react-native-tcp", + "domain": "domain-browser", + "http": "@tradle/react-native-http", + "https": "https-browserify", + "os": "react-native-os", + "path": "path-browserify", + "querystring": "querystring-es3", + "fs": "react-native-level-fs", + "_stream_transform": "readable-stream/transform", + "_stream_readable": "readable-stream/readable", + "_stream_writable": "readable-stream/writable", + "_stream_duplex": "readable-stream/duplex", + "_stream_passthrough": "readable-stream/passthrough", + "dgram": "react-native-udp", + "stream": "stream-browserify", + "timers": "timers-browserify", + "tty": "tty-browserify", + "vm": "vm-browserify", + "tls": false + } +} diff --git a/ioneapps-maagapp-ee31119a522d/postinstall.sh b/ioneapps-maagapp-ee31119a522d/postinstall.sh new file mode 100644 index 0000000..ede7e4e --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/postinstall.sh @@ -0,0 +1,16 @@ +: ' + While waiting for the AWS AppSync PR to be merged we need to hotfix it for now: + https://github.com/awslabs/aws-mobile-appsync-sdk-js/issues/410 + + Author: Gianfranco S. del Mundo +' + +# echo '##############################################' +# echo '# CODE PUSH HEADER SEARCH PATH FIX. #' +# echo '# If you have questions ask the author. #' +# echo '# Author: Gianfranco S. del Mundo #' +# echo '##############################################' +cp -a ./scripts/. ./node_modules/ +# echo '##############################################' +# echo '# DONE COPYING. #' +# echo '##############################################' diff --git a/ioneapps-maagapp-ee31119a522d/scripts/aws-appsync/lib/store.js b/ioneapps-maagapp-ee31119a522d/scripts/aws-appsync/lib/store.js new file mode 100644 index 0000000..0c8e721 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/scripts/aws-appsync/lib/store.js @@ -0,0 +1,144 @@ +"use strict"; +var __assign = (this && this.__assign) || function () { + __assign = Object.assign || function(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) + t[p] = s[p]; + } + return t; + }; + return __assign.apply(this, arguments); +}; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __generator = (this && this.__generator) || function (thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; + return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (_) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +}; +var __rest = (this && this.__rest) || function (s, e) { + var t = {}; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) + t[p] = s[p]; + if (s != null && typeof Object.getOwnPropertySymbols === "function") + for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) if (e.indexOf(p[i]) < 0) + t[p[i]] = s[p[i]]; + return t; +}; +var _this = this; +Object.defineProperty(exports, "__esModule", { value: true }); +/*! + * Copyright 2017-2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * SPDX-License-Identifier: Apache-2.0 + */ +var utils_1 = require("./utils"); +var redux_1 = require("redux"); +var redux_offline_1 = require("@redux-offline/redux-offline"); +var defaults_1 = require("@redux-offline/redux-offline/lib/defaults"); +var constants_1 = require("@redux-offline/redux-offline/lib/constants"); +var constants_2 = require("redux-persist/lib/constants"); +var redux_thunk_1 = require("redux-thunk"); +var index_1 = require("./cache/index"); +var retry_link_1 = require("./link/retry-link"); +var offline_link_1 = require("./link/offline-link"); +var deltaSync_1 = require("./deltaSync"); +var apollo_link_1 = require("apollo-link"); +var detectNetwork = defaults_1.default.detectNetwork; +var logger = utils_1.rootLogger.extend('store'); +exports.DEFAULT_KEY_PREFIX = constants_2.KEY_PREFIX; +var newStore = function (_a) { + var _b = _a.clientGetter, clientGetter = _b === void 0 ? function () { return null; } : _b, _c = _a.persistCallback, persistCallback = _c === void 0 ? function () { return null; } : _c, dataIdFromObject = _a.dataIdFromObject, keyPrefix = _a.keyPrefix, storage = _a.storage, _d = _a.callback, callback = _d === void 0 ? function () { } : _d; + logger('Creating store'); + var store = redux_1.createStore(redux_1.combineReducers(__assign({ rehydrated: function (state, action) { + if (state === void 0) { state = false; } + switch (action.type) { + case constants_1.PERSIST_REHYDRATE: + return true; + default: + return state; + } + } }, index_1.reducer(), reducer(dataIdFromObject))), typeof window !== 'undefined' && window.__REDUX_DEVTOOLS_EXTENSION__ && window.__REDUX_DEVTOOLS_EXTENSION__(), redux_1.compose(redux_1.applyMiddleware(redux_thunk_1.default), redux_offline_1.offline(__assign({}, defaults_1.default, { retry: retry_link_1.getEffectDelay, persistCallback: function () { + logger('Storage ready'); + persistCallback(); + }, persistOptions: __assign({}, (keyPrefix && { keyPrefix: keyPrefix + ":" }), (storage && { storage: storage }), { whitelist: [ + index_1.NORMALIZED_CACHE_KEY, + index_1.METADATA_KEY, + 'offline', + ] }), effect: function (effectPayload, action) { return effect(effectPayload, action, store, clientGetter(), callback, detectNetwork); }, discard: function (error, action, retries) { return discard(callback, error, action, retries); } })))); + return store; +}; +exports.createStore = newStore; +var offlineEffectsConfigs = [ + offline_link_1.offlineEffectConfig, + deltaSync_1.offlineEffectConfig +].filter(Boolean).reduce(function (acc, _a) { + var enqueueAction = _a.enqueueAction, rest = __rest(_a, ["enqueueAction"]); + acc[enqueueAction] = __assign({ enqueueAction: enqueueAction }, rest); + return acc; +}, {}); +var reducer = function (dataIdFromObject) { + var _a; + return (_a = {}, + _a[index_1.METADATA_KEY] = function (state, action) { return Object.entries(offlineEffectsConfigs) + .reduce(function (acc, _a) { + var _b = _a[1].reducer, reducer = _b === void 0 ? function () { return function (x) { return x; }; } : _b; + return reducer(dataIdFromObject)(acc, action); + }, state); }, + _a); +}; +var effect = function (effect, action, store, clientGetter, callback, offlineStatusChangeCallbackCreator) { return __awaiter(_this, void 0, void 0, function () { + var config, observable; + return __generator(this, function (_a) { + config = offlineEffectsConfigs[action.type]; + observable = new apollo_link_1.Observable(function (observer) { + offlineStatusChangeCallbackCreator(function (onlineStatus) { + observer.next(onlineStatus); + }); + return function () { }; + }); + if (config && config.effect) { + logger("Executing effect for " + action.type); + return [2 /*return*/, config.effect(store, clientGetter, effect, action, callback, observable)]; + } + logger("No effect found for " + action.type); + return [2 /*return*/]; + }); +}); }; +var discard = function (callback, error, action, retries) { + var discard = offlineEffectsConfigs[action.type].discard; + if (discard) { + logger("Executing discard for " + action.type, discard); + return discard(callback, error, action, retries); + } + logger("No custom discard found for " + action.type + ". Discarding effect."); + return true; +}; diff --git a/ioneapps-maagapp-ee31119a522d/scripts/react-native-largelist-v3/Group.js b/ioneapps-maagapp-ee31119a522d/scripts/react-native-largelist-v3/Group.js new file mode 100644 index 0000000..bb7f703 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/scripts/react-native-largelist-v3/Group.js @@ -0,0 +1,82 @@ +/* + * + * Created by Stone + * Email: shanshang130@gmail.com + * Date: 2018/7/17 + * + */ + +import React from "react"; +import { StyleSheet } from "react-native"; +import type { GroupPropType } from "./Types"; + +export class Group extends React.Component { + _currentIndex = 0; + _offset = 0; + _margin = 0; + + constructor(props) { + super(props); + if (props.initialContentOffset) { + this.contentConversion(props.initialContentOffset.y, true); + } + } + + contentConversion(offset: number, init: boolean = false) { + this._offset = offset; + const { input, output } = this.props; + const cc = []; + output.forEach(v => cc.indexOf(v) < 0 && cc.push(v)); + for (let i = 0; i < input.length; ++i) { + if (offset >= input[i] && offset <= input[i + 1]) { + this.update(cc.indexOf(output[i]), init); + break; + } + } + } + + update(index: number, init: boolean) { + if (index < 0 || index >= this.props.indexes.length || this._currentIndex === index) return; + this._currentIndex = index; + !init && this.forceUpdate(); + } + + UNSAFE_componentWillReceiveProps(next: GroupPropType) { + if (next.offset) { + this._offset = null; + this.contentConversion(next.offset); + } + } + + render() { + const { indexes, heightForSection, heightForIndexPath, renderIndexPath, inverted } = this.props; + if (this._currentIndex >= indexes.length) return null; + this._margin = 0; + return indexes[this._currentIndex].map((indexPath, index) => { + if (indexPath.row === -1) { + this._margin = this._margin + heightForSection(indexPath.section); + return null; + } + const height = heightForIndexPath(indexPath); + if (height === 0) return null; + const cell = React.Children.only(renderIndexPath(indexPath)); + const marginTop = this._margin; + this._margin = 0; + const style = StyleSheet.flatten([ + cell.props.style, + { + height, + marginTop, + alignSelf: "stretch", + flex: 0, + transform: [{ scaleY: inverted ? -1 : 1 }] + } + ]); + const key = cell.props.key ? cell.props.key : index; + return React.cloneElement(cell, { + key, + style + }); + }); + } +} diff --git a/ioneapps-maagapp-ee31119a522d/scripts/react-native-video/android-exoplayer/.project b/ioneapps-maagapp-ee31119a522d/scripts/react-native-video/android-exoplayer/.project new file mode 100644 index 0000000..c81c2f8 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/scripts/react-native-video/android-exoplayer/.project @@ -0,0 +1,17 @@ + + + android-exoplayer + Project android-exoplayer created by Buildship. + + + + + org.eclipse.buildship.core.gradleprojectbuilder + + + + + + org.eclipse.buildship.core.gradleprojectnature + + diff --git a/ioneapps-maagapp-ee31119a522d/scripts/react-native-video/android-exoplayer/build.gradle b/ioneapps-maagapp-ee31119a522d/scripts/react-native-video/android-exoplayer/build.gradle new file mode 100644 index 0000000..17b2e7a --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/scripts/react-native-video/android-exoplayer/build.gradle @@ -0,0 +1,39 @@ +apply plugin: 'com.android.library' + +def safeExtGet(prop, fallback) { + rootProject.ext.has(prop) ? rootProject.ext.get(prop) : fallback +} + +android { + compileSdkVersion safeExtGet('compileSdkVersion', 27) + buildToolsVersion safeExtGet('buildToolsVersion', '27.0.3') + + defaultConfig { + minSdkVersion safeExtGet('minSdkVersion', 16) + targetSdkVersion safeExtGet('targetSdkVersion', 27) + versionCode 1 + versionName "1.0" + } +} + +dependencies { + def appcompat_version = "1.1.0" + + compileOnly "com.facebook.react:react-native:${safeExtGet('reactNativeVersion', '+')}" + implementation('com.google.android.exoplayer:exoplayer:2.9.3') { + exclude group: 'com.android.support' + } + + // All support libs must use the same version + implementation "androidx.annotation:annotation:$appcompat_version" + implementation "androidx.appcompat:appcompat:$appcompat_version" + // implementation "com.android.support:support-annotations:${safeExtGet('supportLibVersion', '+')}" + // implementation "com.android.support:support-compat:${safeExtGet('supportLibVersion', '+')}" + // implementation "com.android.support:support-media-compat:${safeExtGet('supportLibVersion', '+')}" + + implementation('com.google.android.exoplayer:extension-okhttp:2.9.3') { + exclude group: 'com.squareup.okhttp3', module: 'okhttp' + } + implementation 'com.squareup.okhttp3:okhttp:3.12.1' + +} \ No newline at end of file diff --git a/ioneapps-maagapp-ee31119a522d/setup-env.sh b/ioneapps-maagapp-ee31119a522d/setup-env.sh new file mode 100644 index 0000000..fabb5bf --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/setup-env.sh @@ -0,0 +1,17 @@ +#!/usr/bin/env bash + +echo "$ENVFILE" + +if [ "$ENVFILE" == ".env.qa" ]; then + echo "Switching to QA environment" + yes | cp -rf "src/config/qa.google-services.json" android/app/google-services.json +elif [ "$ENVFILE" == ".env.alpha" ]; then + echo "Switching to Alpha environment" + yes | cp -rf "src/config/alpha.google-services.json" android/app/google-services.json +elif [ "$ENVFILE" == ".env.beta" ]; then + echo "Switching to Beta environment" + yes | cp -rf "src/config/beta.google-services.json" android/app/google-services.json +else + echo "Switching to Dev environment" + yes | cp -rf "src/config/dev.google-services.json" android/app/google-services.json +fi diff --git a/ioneapps-maagapp-ee31119a522d/shim.js b/ioneapps-maagapp-ee31119a522d/shim.js new file mode 100644 index 0000000..812d6b4 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/shim.js @@ -0,0 +1,26 @@ +if (typeof __dirname === 'undefined') global.__dirname = '/' +if (typeof __filename === 'undefined') global.__filename = '' +if (typeof process === 'undefined') { + global.process = require('process') +} else { + const bProcess = require('process') + for (var p in bProcess) { + if (!(p in process)) { + process[p] = bProcess[p] + } + } +} + +process.browser = false +if (typeof Buffer === 'undefined') global.Buffer = require('buffer').Buffer + +// global.location = global.location || { port: 80 } +const isDev = typeof __DEV__ === 'boolean' && __DEV__ +process.env['NODE_ENV'] = isDev ? 'development' : 'production' +if (typeof localStorage !== 'undefined') { + localStorage.debug = isDev ? '*' : '' +} + +// If using the crypto shim, uncomment the following line to ensure +// crypto is loaded first, so it can populate global.crypto +// require('crypto') diff --git a/ioneapps-maagapp-ee31119a522d/src/App.js b/ioneapps-maagapp-ee31119a522d/src/App.js new file mode 100644 index 0000000..b726dc8 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/src/App.js @@ -0,0 +1,188 @@ +import React, { Component } from 'react'; +import _ from 'lodash'; +import { YellowBox, View, AppState } from 'react-native'; +import { Provider } from 'react-redux'; +import { PersistGate } from 'redux-persist/integration/react'; +import { store, persistor } from '~/store/store'; +import { Root } from '~/navigation'; +import { NavigationActions } from 'react-navigation'; +import SplashScreen from 'react-native-splash-screen'; +import Mixpanel from 'react-native-mixpanel'; +import { + RESET_REQUEST_STATE, + UPDATE_APP_STATE, +} from '~/store/actionTypes'; +import { Toaster, ToasterService } from 'nixplay-ui-kit'; + +// AppSync Start +import { ApolloProvider } from 'react-apollo'; + +import { config } from '~/config'; + +// https://github.com/react-navigation/react-navigation/issues/3956#issuecomment-380648083 +YellowBox.ignoreWarnings([ + 'Warning: isMounted(...) is deprecated', + 'Module RCTImageLoader', + 'Module RNFetchBlob requires main queue setup since it overrides', + 'Module RCTImageLoader requires main queue setup since it overrides', + 'Module RCTImagePickerManager requires main queue setup since it overrides', + 'Module RNSafeArea requires main queue setup since it overrides ', + 'Module ReactNativeShareExtension requires main queue setup since it overrides', + 'Module RNGoogleSignin requires main queue setup since it over\ides', + 'RNReactNativeHapticFeedback is not available', + 'Class RCTCxxModule', + // supress rectjs major deprecated warning, MUST resolve it in the near future + 'Warning: componentWillReceiveProps', + 'Warning: componentWillMount', +]); + +export default class App extends Component { + constructor(props) { + super(props); + // firebase.crashlytics().enableCrashlyticsCollection(); + // remove me if not login + // if (__DEV__) DefaultPreference.clearAll().then(() => {}); + this.state = { + friendsBadged: false, + photosBadged: false, + moreBadged: false, + uploadTotal: 0, + elapsed: 0, + previousScreen: '', + currentScreen: '', + isConnected: true, + previousNavRoot: '', + hasUser: false, + }; + // pushNotifications.configure(); + this.handleAppStateChange = this.handleAppStateChange.bind(this); + this.currentRoot = ''; + this.client = {}; + // Current device language + // console.log('locales', RNLocalize.getLocales()); + // User preferred languages (in order) + // console.log('locales', RNLocalize.getLocales()); + // this.debouncerSwitchRoot = _.debounce(this.switchRoot, 100, { + // leading: true, + // trailing: false, + // }); + const mxToken = (config.IS_DEBUG) ? '5abbc4ceb43eda28f17b05179749caf9' : 'b16233ccc93e4b1a6d9863bb269b70af'; + Mixpanel.sharedInstanceWithToken(mxToken); + } + + componentDidMount() { + store.subscribe(this.onStoreUpdate.bind(this)); + AppState.addEventListener('change', this.handleAppStateChange); + SplashScreen.hide(); + } + + componentWillUnmount() { + AppState.removeEventListener('change', this.handleAppStateChange); + } + + onRehydrate = async () => { + store.dispatch({ type: RESET_REQUEST_STATE }); + } + + onStoreUpdate() { + const { + root, + } = store.getState().app; + + if (this.currentRoot !== root) { + this.currentRoot = root; + } + + const { + network, + } = store.getState(); + + this.switchRoot(); + const enabledBottomNotification = false; + + this.setState({ + bottomNotificationTheme: network.isConnected ? 'normal' : 'alert', + enabledBottomNotification, + // uploadTotal: network.isConnected ? _.size(items) : 0, + // message: this.getBottomNotificationMessage(network, meta.elapsed, _.size(items)), + // linkMessage: network.isConnected && _.size(items) > 0 + // ? ` ${i18n.t('common.viewProgress')}` + // : '', + // elapsed: network.isConnected ? (meta.elapsed || 0) : 0, + isConnected: network.isConnected, + }); + } + + switchRoot = () => { + const { users } = store.getState(); + // console.log('beneficiaries: ', beneficiaries.scannedUsers); + if (this.navigation) { + if (!_.isEqual(this.state.previousNavRoot, this.currentRoot)) { + // console.log('EMPTY SCREEN'); + if (this.currentRoot === 'main' || this.state.hasUser || !_.isEmpty(users.currentUser)) { + // console.log('LOGGED USER 1'); + const { currentUser } = users; + this.setState({ hasUser: true, previousNavRoot: this.currentRoot }); + if (parseInt(currentUser.regType, 0) === 5) { + this.navigation.dispatch(NavigationActions.navigate({ routeName: 'SWTeacherDashboard' })); + } else if (parseInt(currentUser.regType, 0) === 4) { + this.navigation.dispatch(NavigationActions.navigate({ routeName: 'SWValidatorDashboard' })); + } else if (parseInt(currentUser.regType, 0) === 3) { + this.navigation.dispatch(NavigationActions.navigate({ routeName: 'SWAssessorDashboard' })); + } else if (parseInt(currentUser.regType, 0) === 2) { + this.navigation.dispatch(NavigationActions.navigate({ routeName: 'SocialWorkerDashboard' })); + } else if (parseInt(currentUser.regType, 0) === 1) { + this.navigation.dispatch(NavigationActions.navigate({ routeName: 'BasicUserDashboard' })); + } else { + this.navigation.dispatch(NavigationActions.navigate({ routeName: 'NonAuthedFlow' })); + } + } else { + this.setState({ previousNavRoot: this.currentRoot }); + // console.log('NonAuthedFlow'); + this.navigation.dispatch(NavigationActions.navigate({ routeName: 'NonAuthedFlow' })); + } + } + } + } + + handleAppStateChange = (nextAppState) => { + store.dispatch({ type: UPDATE_APP_STATE, payload: nextAppState }); + } + + render() { + return ( + + + + + { this.navigation = nav; }} + onNavigationStateChange={() => {}} + screenProps={{ + gqlClient: this.client, + friendsBadged: this.state.friendsBadged, + photosBadged: this.state.photosBadged, + moreBadged: this.state.moreBadged, + enabled: this.state.enabledBottomNotification, + uploadTotal: this.state.uploadTotal, + elapsed: this.state.elapsed, + theme: this.state.bottomNotificationTheme, + progressMessage: this.state.message, + linkMessage: this.state.linkMessage, + previousScreen: this.state.previousScreen, + currentScreen: this.state.currentScreen, + isConnected: this.state.isConnected, + currentRoot: this.state.currentRoot, + }} + /> + { ToasterService.setGlobalToaster(toaster); }} /> + + + + + ); + } +} diff --git a/ioneapps-maagapp-ee31119a522d/src/components/AccountSettings/customPicker.js b/ioneapps-maagapp-ee31119a522d/src/components/AccountSettings/customPicker.js new file mode 100644 index 0000000..85f74cd --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/src/components/AccountSettings/customPicker.js @@ -0,0 +1,87 @@ +import React from 'react'; +import _ from 'lodash'; +import { + StyleSheet, + View, + TouchableOpacity, +} from 'react-native'; +import { + Text, + color, + NixplayIcon as Icon, +} from 'nixplay-ui-kit'; +import PropTypes from 'prop-types'; + +import { debounceWrapper } from '~/lib/utils'; +import * as TEST_IDS from '~/store/testIDConstants'; +import setTestID from '~/test/testUtils'; +import { color as basicColor } from '~/styles/variables'; + +const styles = StyleSheet.create({ + container: { + flex: 1, + flexDirection: 'row', + }, + button: { + flex: 1, + flexDirection: 'row', + borderStyle: 'solid', + borderWidth: 1, + borderTopRightRadius: 4, + borderTopLeftRadius: 4, + borderBottomRightRadius: 4, + borderBottomLeftRadius: 4, + borderColor: color.borderMistBlue, + padding: 2, + alignItems: 'center', + height: 42, + }, + textContainer: { + flex: 1, + flexDirection: 'column', + justifyContent: 'center', + padding: 6, + }, +}); + +export const CustomPicker = (props) => { + const { + action, itemSelected, name, placeholder, hasError, + } = props; + const TouchableOpacityEx = debounceWrapper(TouchableOpacity); + const displayText = (!_.isEmpty(itemSelected)) ? itemSelected : placeholder; + const txtColor = (!_.isEmpty(itemSelected)) ? basicColor.wrikeGreen2 : basicColor.gitlabGray4; + const errorColor = (hasError) ? color.red : color.borderMistBlue; + return ( + + action()} + style={[styles.button, { borderColor: errorColor }]} + {...setTestID(`${TEST_IDS.NIX_PICKER}${name}`)} + > + + {displayText} + + + + + + ); +}; + +CustomPicker.propTypes = { + action: PropTypes.func.isRequired, + itemSelected: PropTypes.string.isRequired, + name: PropTypes.string.isRequired, + placeholder: PropTypes.string.isRequired, + hasError: PropTypes.string, +}; + +CustomPicker.defaultProps = { + hasError: false, +}; diff --git a/ioneapps-maagapp-ee31119a522d/src/components/Albums/albumActions.js b/ioneapps-maagapp-ee31119a522d/src/components/Albums/albumActions.js new file mode 100644 index 0000000..91e83c2 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/src/components/Albums/albumActions.js @@ -0,0 +1,264 @@ +import React, { Component } from 'react'; +import _ from 'lodash'; +import { connect } from 'react-redux'; +import PropTypes from 'prop-types'; +import { submit, isSubmitting, SubmissionError } from 'redux-form'; +import { View } from 'react-native'; +import { Dialogue } from 'nixplay-ui-kit'; +import { ModalNameForm } from '~comp/Forms/modalNameForm'; +import { ModalForm } from '~comp/Forms/modalForm'; +import { Form, TextInput2 } from '~comp/reduxForm'; + +import i18n from '~/locale/i18n'; +import { analytics } from '~/lib/utils'; +import { + NAME_ALBUM_ANALYTICS, +} from '~/store/analyticsConstant'; + +import { + CREATE_ALBUM, + RENAME_ALBUM, + DELETE_ALBUM, + DELETE_ALBUM_CONTENT, + UPDATE_CONTENT_CAPTION, + SHOW_TOAST_ERROR, +} from '~/store/actionTypes'; + + +export class AlbumActionsComponent extends Component { + static propTypes = { + actions: PropTypes.array, + route: PropTypes.string.isRequired, + deleteFormMeta: PropTypes.object.isRequired, + submitDeleteForm: PropTypes.func.isRequired, + isConnected: PropTypes.bool.isRequired, + toastError: PropTypes.func.isRequired, + } + + static defaultProps = { + actions: [ + CREATE_ALBUM, + RENAME_ALBUM, + DELETE_ALBUM, + ], + } + + constructor(props) { + super(props); + + this.state = { + selectedAction: '', + selectedAlbumId: -1, + selectedAlbumName: '', + additionalParams: {}, + onActionSuccess: () => {}, + }; + + this.dialogue = this.dialogue.bind(this); + this.doAction = this.doAction.bind(this); + this.closeAction = this.closeAction.bind(this); + this.submitActionForm = this.submitActionForm.bind(this); + this.actionExists = this.actionExists.bind(this); + + this.onSubmitFail = (errors) => { + const { _error: error } = errors; + this.props.toastError({ + text: typeof error.toString === 'function' ? error.toString() : error, + }); + }; + } + + dialogue(action) { + switch (action) { + case DELETE_ALBUM: + analytics.logAction('open_album_delete'); + return this.deleteDialogue; + case DELETE_ALBUM_CONTENT: + analytics.logAction('open_album_delete_content'); + return this.deleteContentDialogue; + case UPDATE_CONTENT_CAPTION: + analytics.logAction('open_album_edit_caption'); + return this.captionDialogue; + default: + analytics.logAction('open_album_rename'); + return this.modalNameForm; + } + } + + doAction(action, albumId, additionalParams, onActionSuccess) { + if (this.props.actions.indexOf(action) < 0) return; + this.setState({ + selectedAction: action, + selectedAlbumId: albumId, + selectedAlbumName: additionalParams.name, + additionalParams, + onActionSuccess, + }, () => { + this.dialogue(action).open(); + }); + } + + closeAction(callback, result) { + this.dialogue(this.state.selectedAction).close(); + this.setState({ + selectedAction: '', + selectedAlbumId: -1, + selectedAlbumName: '', + additionalParams: {}, + onActionSuccess: () => {}, + }, () => { + if (typeof callback === 'function') callback(result); + }); + } + + submitActionForm(values, dispatch) { + return new Promise((resolve, reject) => { + if (this.props.isConnected) { + dispatch({ + type: this.state.selectedAction, + payload: { + ...this.state.additionalParams, + ...values, + albumId: this.state.selectedAlbumId, + resolve, + reject, + }, + }); + } else { + reject(new SubmissionError({ _error: i18n.t('common.noInternetConnection') })); + } + }); + } + + actionExists(actions) { + return (_.intersection(this.props.actions, actions)).length > 0; + } + + render() { + const { selectedAlbumName, additionalParams } = this.state; + + let checkAndTranslateMyAlbums = ''; + if (additionalParams.name === 'My Uploads' && additionalParams.type === 'Email') { + checkAndTranslateMyAlbums = i18n.t('common.myUploads'); + } else { + checkAndTranslateMyAlbums = selectedAlbumName; + } + + return ( + + {this.actionExists([CREATE_ALBUM, RENAME_ALBUM]) && + { this.modalNameForm = ref; }} + form={`${this.props.route}NameForm`} + onRequestClose={this.closeAction} + onSubmit={this.submitActionForm} + onSubmitSuccess={() => { + this.closeAction(this.state.onActionSuccess); + analytics.logEvent(NAME_ALBUM_ANALYTICS); + }} + onSubmitFail={(errors) => { + this.onSubmitFail(errors); + this.modalNameForm.reset(); + }} + onCancel={this.closeAction} + formTitle={this.state.selectedAction === CREATE_ALBUM ? i18n.t('albums.addNewAlbum') : i18n.t('albums.renameAlbum')} + placeholder={i18n.t('albums.albumName')} + initialValues={{ name: this.state.selectedAlbumName }} + enableReinitialize + />} + {this.actionExists([DELETE_ALBUM]) && +
{ + this.closeAction(this.state.onActionSuccess); + }} + onSubmitFail={this.onSubmitFail} + > + { this.deleteDialogue = ref; }} + loading={this.props.deleteFormMeta.submitting} + withClose={false} + onRequestClose={this.closeAction} + > + {i18n.t('albums.deleteAlbum')} + {i18n.t('albums.deleteConfirmText', { albumName: checkAndTranslateMyAlbums })} + {i18n.t('common.cancel')} + {i18n.t('common.delete')} + +
} + {this.actionExists([DELETE_ALBUM_CONTENT]) && + { this.deleteContentDialogue = ref; }} + form={`${this.props.route}DeleteContentForm`} + onSubmit={this.submitActionForm} + onSubmitSuccess={() => { + this.closeAction(this.state.onActionSuccess); + }} + onSubmitFail={(errors) => { + this.onSubmitFail(errors); + this.deleteContentDialogue.reset(); + }} + onCancel={this.closeAction} + submitText={i18n.t('common.delete')} + submitColor="red" + > + {i18n.t('common.permanentDelete')} + {i18n.t('contents.deleteConfirmation')} + } + {this.actionExists([UPDATE_CONTENT_CAPTION]) && + { this.captionDialogue = ref; }} + form={`${this.props.route}UpdateCaption`} + initialValues={{ caption: this.state.additionalParams.caption }} + enableReinitialize + onSubmit={this.submitActionForm} + onSubmitSuccess={(result) => { + this.closeAction(this.state.onActionSuccess, result); + }} + onSubmitFail={(errors) => { + this.onSubmitFail(errors); + this.captionDialogue.reset(); + }} + onCancel={this.closeAction} + submitText={i18n.t('common.ok')} + > + {i18n.t('contents.editCaption')} + + + + } +
+ ); + } +} + +const mapStateToProps = (state, ownProps) => { + const { route } = ownProps; + return { + deleteFormMeta: { + submitting: isSubmitting(`${route}DeleteForm`)(state), + }, + isConnected: state.network.isConnected, + }; +}; + +const mapActionsToProps = (dispatch, ownProps) => { + const { route } = ownProps; + return { + submitDeleteForm() { + dispatch(submit(`${route}DeleteForm`)); + }, + toastError(payload) { + dispatch({ type: SHOW_TOAST_ERROR, payload }); + }, + }; +}; + + +export default connect( + mapStateToProps, + mapActionsToProps, + null, + { forwardRef: true }, +)(AlbumActionsComponent); diff --git a/ioneapps-maagapp-ee31119a522d/src/components/Albums/empty.js b/ioneapps-maagapp-ee31119a522d/src/components/Albums/empty.js new file mode 100644 index 0000000..83575ad --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/src/components/Albums/empty.js @@ -0,0 +1,72 @@ +import React from 'react'; +import { + StyleSheet, + View, +} from 'react-native'; +import { ContentGridEmpty, Loading, Button } from 'nixplay-ui-kit'; + +import i18n from '~/locale/i18n'; +import PropTypes from 'prop-types'; +import OfflineEmpty from '~comp/offlineEmpty'; + +const styles = StyleSheet.create({ + container: { + height: '100%', + alignItems: 'center', + justifyContent: 'space-between', + }, + buttonContainer: { + height: 144, + }, + loadingContainer: { + flex: 1, + alignItems: 'center', + justifyContent: 'center', + }, +}); + +const AlbumsEmptyComponent = (props) => (props.loading ? ( + +) : ( + + + + {i18n.t('albums.noAlbums')} + {i18n.t('albums.needCreateAlbum')} + + {typeof props.createNew === 'function' && + + + } + +)); + +AlbumsEmptyComponent.propTypes = { + loading: PropTypes.bool.isRequired, + createNew: PropTypes.func, +}; + +AlbumsEmptyComponent.defaultProps = { + createNew: null, +}; + +export const AlbumsEmpty = (props) => ( + props.isConnected ? ( + + ) : ( + + + + ) +); + +AlbumsEmpty.propTypes = { + isConnected: PropTypes.bool.isRequired, +}; diff --git a/ioneapps-maagapp-ee31119a522d/src/components/Albums/gridItem.js b/ioneapps-maagapp-ee31119a522d/src/components/Albums/gridItem.js new file mode 100644 index 0000000..92fcfb4 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/src/components/Albums/gridItem.js @@ -0,0 +1,47 @@ +import React from 'react'; +import { ContentCoverGridItem, ContentCount } from 'nixplay-ui-kit'; +import PropTypes from 'prop-types'; + +import { EMAIL } from '~/store/contentTypes'; + + +export const AlbumGridItem = (props) => { + const { album } = props; + const counts = [ + { icon: 'photo-small', text: album.count }, + ]; + + const thumbs = []; + if (album.cover.url) { + thumbs.push(album.cover); + } else if (album.thumbs[0]) { + thumbs.push(album.thumbs[0]); + } + + return ( + { props.openAlbum(album.id); }} + > + {album.type === EMAIL && + } + + + + + ); +}; + +AlbumGridItem.propTypes = { + album: PropTypes.object.isRequired, + openAlbum: PropTypes.func, +}; + +AlbumGridItem.defaultProps = { + openAlbum: () => {}, +}; diff --git a/ioneapps-maagapp-ee31119a522d/src/components/CTAHeader.js b/ioneapps-maagapp-ee31119a522d/src/components/CTAHeader.js new file mode 100644 index 0000000..7e90f00 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/src/components/CTAHeader.js @@ -0,0 +1,96 @@ +import React, { Component } from 'react'; +import { + View, + StyleSheet, +} from 'react-native'; +import { connect } from 'react-redux'; +import PropTypes from 'prop-types'; +import { + NixplayIcon, + basicColor, + Button, + transparentize, + color, +} from 'nixplay-ui-kit'; +import { debounceWrapper } from '~/lib/utils'; + +const ButtonEx = debounceWrapper(Button); + +const styles = StyleSheet.create({ + createNewIcon: { + marginRight: 0, + }, + headerButton: { + flex: 1, + marginVertical: 8, + borderRadius: 8, + padding: 0, + borderColor: basicColor.mistBlue03, + backgroundColor: 'rgba(254, 254, 254, 0.89)', + }, +}); +class CTAHeader extends Component { + static propTypes = { + isConnected: PropTypes.bool.isRequired, + onPress: PropTypes.func.isRequired, + title: PropTypes.string.isRequired, + iconHidden: PropTypes.bool, + textSize: PropTypes.number, + innerButtonStyle: PropTypes.object, + innerButtonProps: PropTypes.object, + } + render() { + const { + iconHidden, + innerButtonProps, + innerButtonStyle, + isConnected, + onPress, + textSize, + title, + ...otherProps + } = this.props; + const buttonStyle = isConnected ? 'blue' : transparentize(color.grey04, 50); + return ( + + + {!iconHidden && + + } + + {title} + + + + ); + } +} + + +CTAHeader.defaultProps = { + innerButtonStyle: {}, + innerButtonProps: {}, + iconHidden: false, + textSize: 20, +}; + + +const mapStateToProps = (state) => ({ + isConnected: state.network.isConnected, +}); + +export default connect(mapStateToProps, null, null, { forwardRef: true })(CTAHeader); diff --git a/ioneapps-maagapp-ee31119a522d/src/components/ContentPager/Debug.js b/ioneapps-maagapp-ee31119a522d/src/components/ContentPager/Debug.js new file mode 100644 index 0000000..8f90d6d --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/src/components/ContentPager/Debug.js @@ -0,0 +1,126 @@ +import React from 'react'; +import PropTypes from 'prop-types'; +import _ from 'lodash'; + +import { + Text, + StyleSheet, +} from 'react-native'; + + +import Reanimated from 'react-native-reanimated'; +import { PanGestureHandler, State } from 'react-native-gesture-handler'; + +const { + add, + block, + Code, + call, + cond, + eq, + event, + set, + not, +} = Reanimated; + +const styles = StyleSheet.create({ + container: { + position: 'absolute', + top: 0, + left: 0, + borderWidth: 1, + borderColor: '#00ffaa', + marginLeft: 10, + marginTop: 50, + backgroundColor: '#FFFFFF', + }, +}); + +export default class Debug extends React.Component { + static propTypes = { + info: PropTypes.object.isRequired, + } + + constructor(props) { + super(props); + const infoList = Object.keys(props.info); + this.stateChangeDebouncer = {}; + const infoListValues = infoList.map((item) => props.info[item]); + + this.changeState = _.throttle((args) => { + const state = {}; + infoList.forEach((item, index) => { + state[item] = args[index]; + }); + this.setState(state); + }, 100, { leading: true, trailing: false }); + + this.state = { + infoList, + }; + const is = block(call(infoListValues, this.changeState)); + this.listener = () => is; + + this.panOffsetX = new Reanimated.Value(0); + this.panOffsetY = new Reanimated.Value(0); + + this.translateX = new Reanimated.Value(0); + this.translateY = new Reanimated.Value(0); + + this.isPanning = new Reanimated.Value(0); + + this.panEvent = event([{ + nativeEvent: ({ + translationX, translationY, + }) => block([ + cond(this.isPanning, [ + set(this.translateX, add(translationX, this.panOffsetX)), + set(this.translateY, add(translationY, this.panOffsetY)), + ]), + ]), + }], { + useNativeDriver: true, + }); + + + this.panChangeState = event([{ + nativeEvent: ({ state }) => block([ + cond(eq(state, State.ACTIVE), [ + cond(not(this.isPanning), [ + set(this.isPanning, 1), + ]), + ], cond(eq(state, State.END), [ + // set(this.translateX, add(translationX, this.panOffsetX)), + // set(this.translateY, add(translationY, this.panOffsetY)), + set(this.panOffsetX, this.translateX), + set(this.panOffsetY, this.translateY), + set(this.isPanning, 0), + ])), + ]), + }], { + useNativeDriver: true, + }); + } + + + render() { + const { infoList } = this.state; + return ( + <> + {this.listener} + + + {infoList.map((item) => ( + {item}: {this.state[item]} + ))} + + + + ); + } +} diff --git a/ioneapps-maagapp-ee31119a522d/src/components/ContentPager/PhotoContent.js b/ioneapps-maagapp-ee31119a522d/src/components/ContentPager/PhotoContent.js new file mode 100644 index 0000000..ed284d2 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/src/components/ContentPager/PhotoContent.js @@ -0,0 +1,93 @@ +import React from 'react'; +import { + ActivityIndicator, + Dimensions, + View, + StyleSheet, +} from 'react-native'; +import { color } from 'nixplay-ui-kit'; +import PropTypes from 'prop-types'; +import FastImage from 'react-native-fast-image'; + +const { width: screenWidth, height: screenHeight } = Dimensions.get('window'); + +const styles = StyleSheet.create({ + container: { + height: screenHeight, + width: screenWidth, + justifyContent: 'center', + alignItems: 'center', + backgroundColor: 'black', + }, + portrait: { + width: screenWidth, + height: screenHeight, + }, + landscape: { + width: screenHeight, + height: screenWidth, + }, + loadingContainer: { + position: 'absolute', + alignItems: 'center', + justifyContent: 'center', + top: 0, + right: 0, + left: 0, + bottom: 0, + }, +}); + + +export default class PhotoContent extends React.Component { + static propTypes = { + index: PropTypes.number.isRequired, + item: PropTypes.object.isRequired, + onImageLoad: PropTypes.func, + } + + static defaultProps = { + onImageLoad: () => {}, + } + + constructor(props) { + super(props); + + this.state = { + isLoading: true, + }; + } + + onImageLoad = ({ nativeEvent }) => { + const { width, height } = nativeEvent; + const { index, onImageLoad, item } = this.props; + this.setState({ + isLoading: false, + }, () => { + onImageLoad({ + width, height, index, url: item.previewUrl, + }); + }); + } + + render() { + const { previewUrl, rotation } = this.props.item; + const isPortrait = (rotation === 0 || rotation % 180 === 0); + const { isLoading } = this.state; + return ( + + + {isLoading && } + + ); + } +} diff --git a/ioneapps-maagapp-ee31119a522d/src/components/ContentPager/VideoContent.js b/ioneapps-maagapp-ee31119a522d/src/components/ContentPager/VideoContent.js new file mode 100644 index 0000000..2208ac1 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/src/components/ContentPager/VideoContent.js @@ -0,0 +1,231 @@ +import React from 'react'; +import _ from 'lodash'; +import { + ActivityIndicator, + Dimensions, + View, + StyleSheet, + // Platform, + // TouchableOpacity, +} from 'react-native'; +import { color, Image } from 'nixplay-ui-kit'; +import PropTypes from 'prop-types'; +import Video from 'react-native-video'; +import { TapGestureHandler, State } from 'react-native-gesture-handler'; +import Reanimated from 'react-native-reanimated'; + +import playButton from '~/images/general/play-button.png'; +import PhotoContent from './PhotoContent'; + +const { width: screenWidth, height: screenHeight } = Dimensions.get('window'); + +const styles = StyleSheet.create({ + container: { + width: screenWidth, + height: screenHeight, + justifyContent: 'center', + alignItems: 'center', + }, + image: { + flex: 1, + }, + playButtonContainer: { + position: 'absolute', + left: (screenWidth / 2) - 50, + top: (screenHeight / 2) - 50, + bottom: 0, + right: 0, + width: 100, + height: 100, + justifyContent: 'center', + alignItems: 'center', + padding: 8, + zIndex: 2000, + }, + playButton: { + flex: 1, + width: 52, + height: 52, + }, +}); + +// const isIOS = Platform.OS === 'ios'; +// const isAndroid = Platform.OS === 'android'; + +const bufferConfig = { + minBufferMs: 5000, + maxBufferMs: 15000, + bufferForPlaybackMs: 2000, + bufferForPlaybackAfterRebufferMs: 5000, +}; + +export default class VideoContent extends React.Component { + static propTypes = { + index: PropTypes.number.isRequired, + item: PropTypes.object.isRequired, + onVideoPlay: PropTypes.func, + onVideoPause: PropTypes.func, + onVideoError: PropTypes.func, + onImageLoad: PropTypes.func, + } + + static defaultProps = { + onImageLoad: () => { }, + onVideoPlay: () => { }, + onVideoPause: () => { }, + onVideoError: () => { }, + } + + constructor(props) { + super(props); + + this.state = { + currentTime: 0, + isVideoMounted: false, + isVideoLoading: false, + isVideoReady: false, + paused: true, + }; + } + + componentDidUpdate(prevProps) { + if (!_.isEqual(prevProps, this.props)) { + // eslint-disable-next-line react/no-did-update-set-state + this.setState({ paused: true }, () => { + if (this.player !== undefined) { + this.player.seek(0); + } + }); + } + } + + onPreviewLoad = (e) => { + const { onImageLoad } = this.props; + onImageLoad(e); + } + + // onBuffer = () => { + // this.setState({ isVideoBuffering: true }); + // } + + onEnd = () => { + this.setState({ paused: true, currentTime: 0 }, () => { + if (this.player !== undefined) { + this.player.seek(0); + } + }); + } + + onLoadStart = () => { + this.setState({ isVideoLoading: true }); + } + + onLoad = () => { + this.player.seek(0); + this.setState({ isVideoLoading: false }); + } + + onProgress = ({ currentTime }) => { + this.setState({ currentTime }); + } + + pauseVideo = () => { + this.setState({ paused: true }, () => { + this.props.onVideoPause(); + }); + } + + playVideo = () => { + this.setState({ paused: !this.state.paused, isVideoMounted: true }, () => { + this.props.onVideoPlay(this.pauseVideo); + }); + if (this.player !== undefined) { + if (_.isEqual(this.state.currentTime, 0)) { + this.player.seek(this.state.currentTime); + } + } + } + + render() { + const { + isVideoMounted, + isVideoReady, + isVideoLoading, + paused, + } = this.state; + const { item, index } = this.props; + const isLoading = isVideoLoading; + return ( + + {!isVideoReady && + + + + } + {isVideoMounted && + { + if (State.ACTIVE === nativeEvent.state) { + this.pauseVideo(); + } + }} + > + + + + } + {paused && + { + if (State.ACTIVE === nativeEvent.state) { + this.playVideo(); + } + }} + > + + + + + } + {isLoading && + + + + } + + ); + } +} diff --git a/ioneapps-maagapp-ee31119a522d/src/components/ContentPager/index.js b/ioneapps-maagapp-ee31119a522d/src/components/ContentPager/index.js new file mode 100644 index 0000000..16f461d --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/src/components/ContentPager/index.js @@ -0,0 +1,1116 @@ +/* eslint-disable react/no-did-update-set-state */ + +import React from 'react'; +import _ from 'lodash'; +import PropTypes from 'prop-types'; +import { color } from 'nixplay-ui-kit'; +import { PanGestureHandler, PinchGestureHandler, TapGestureHandler, State } from 'react-native-gesture-handler'; +import Reanimated, { Easing } from 'react-native-reanimated'; +import { + ActivityIndicator, + View, + StyleSheet, + Dimensions, +} from 'react-native'; + +import PhotoContent from './PhotoContent'; +import VideoContent from './VideoContent'; +// import Debug from './Debug'; + +const { + abs, + add, + and, + block, + call, + cond, + clockRunning, + divide, + event, + eq, + interpolate, + set, + sub, + or, + neq, + not, + greaterThan, + greaterOrEq, + lessThan, + multiply, + startClock, + stopClock, + timing, + Clock, + Value, + Extrapolate, +} = Reanimated; + +const { width: screenWidth, height: screenHeight } = Dimensions.get('window'); + +const halfScreenWidth = screenWidth / 2; +const halfScreenHeight = screenHeight / 2; + +const styles = StyleSheet.create({ + container: { + height: screenHeight, + width: screenWidth, + position: 'absolute', + top: 0, + left: 0, + }, +}); + +// contains dimensions of loaded images +const imageDimensions = {}; + +const getSwipeOffset = (index) => index * -screenWidth; + +export default class ContentPager extends React.Component { + static propTypes = { + initialIndex: PropTypes.number, + photos: PropTypes.array, + onPageChange: PropTypes.func, + onEndReached: PropTypes.func, + onZoomStart: PropTypes.func, + onZoomEnd: PropTypes.func, + onTap: PropTypes.func, + onDoubleTap: PropTypes.func, + hasNext: PropTypes.bool, + } + + static defaultProps = { + initialIndex: 0, + photos: [], + hasNext: false, + onPageChange: () => {}, + onEndReached: () => {}, + onZoomStart: () => {}, + onZoomEnd: () => {}, + onTap: () => {}, + onDoubleTap: () => {}, + } + + constructor(props) { + super(props); + + this.state = { + index: props.initialIndex, + }; + + this.nextIndexValue = props.initialIndex; + + // this.renderingPhotos = new Value(1); + this.renderingPhotosStarted = new Value(0); + + this.index = new Value(props.initialIndex); + this.nextIndex = new Value(props.initialIndex); + this.photosCount = new Value(props.photos.length); + this.hasNext = new Value(props.hasNext ? 1 : 0); + + this.imageContainerWidth = new Value(0); + this.imageContainerHeight = new Value(0); + this.imageOriginalWidth = new Value(0); + this.imageOriginalHeight = new Value(0); + this.maxScale = new Value(0); + + this.isZooming = new Value(0); + this.isSwipingLeft = new Value(0); + this.isSwipingRight = new Value(0); + this.allowSwipeWhileZooming = new Value(0); + + // this.testValue = new Value(0); + const initialSwipeOffset = getSwipeOffset(props.initialIndex); + + this.currentPageSwipeOffset = new Value(initialSwipeOffset); + this.nextPageSwipeOffset = new Value(initialSwipeOffset); + + this.animData = { + isPanning: new Value(0), + isPinching: new Value(0), + isScrolling: new Value(0), + swipePos: new Value(initialSwipeOffset), + swipePosOffset: new Value(initialSwipeOffset), + panOffsetX: new Value(0), + panOffsetY: new Value(0), + translateX: new Value(0), + translateY: new Value(0), + tempTranslateX: new Value(0), + tempTranslateY: new Value(0), + panExcessX: new Value(0), + panExcessY: new Value(0), + xBound: new Value(0), + xBoundLeft: new Value(0), + xBoundRight: new Value(0), + yBound: new Value(0), + yBoundTop: new Value(0), + yBoundBottom: new Value(0), + imageScale: new Value(1), + imageScaleOffset: new Value(1), + imageScaleHeight: new Value(0), + imageScaleWidth: new Value(0), + imageScaleHalfHeight: new Value(0), + imageScaleHalfWidth: new Value(0), + imageScaleHeightDiff: new Value(0), + imageScaleWidthDiff: new Value(0), + imageScaleScreenHeightDiff: new Value(0), + imageScaleScreenWidthDiff: new Value(0), + lastImageScaleHeight: new Value(0), + lastImageScaleWidth: new Value(0), + scaleFocusX: new Value(0), + scaleFocusY: new Value(0), + centerFocusX: new Value(0), + centerFocusY: new Value(0), + scaleTranslateX: new Value(0), + scaleTranslateY: new Value(0), + focalCenterY: new Value(0), + tX: new Value(0), + tY: new Value(0), + focalOffsetX: new Value(0), + focalOffsetY: new Value(0), + }; + + const { + swipePos, + swipePosOffset, + isPanning, + isPinching, + imageScale, + imageScaleOffset, + panOffsetX, + panOffsetY, + translateX, + translateY, + panExcessX, + panExcessY, + tempTranslateX, + tempTranslateY, + xBound, + xBoundLeft, + xBoundRight, + yBound, + yBoundTop, + yBoundBottom, + tX, + tY, + focalOffsetX, + focalOffsetY, + imageScaleHeight, + imageScaleWidth, + imageScaleHeightDiff, + imageScaleWidthDiff, + imageScaleHalfHeight, + imageScaleHalfWidth, + imageScaleScreenHeightDiff, + imageScaleScreenWidthDiff, + lastImageScaleHeight, + lastImageScaleWidth, + scaleFocusX, + scaleFocusY, + centerFocusX, + centerFocusY, + scaleTranslateX, + scaleTranslateY, + } = this.animData; + + this.swipeClock = new Clock(); + this.swipeClockState = { + finished: new Value(0), + // position: swipePos, + position: new Value(0), + time: new Value(0), + frameTime: new Value(0), + }; + this.swipeClockConfig = { + duration: 800, + toValue: new Value(1), + easing: Easing.out(Easing.exp), + }; + + this.panFromX = new Value(0); + this.panToX = new Value(0); + this.panFromY = new Value(0); + this.panToY = new Value(0); + + this.panClock = new Clock(); + this.panClockState = { + finished: new Value(0), + position: new Value(0), + time: new Value(0), + frameTime: new Value(0), + }; + this.panClockConfig = { + duration: 150, + toValue: new Value(1), + easing: Easing.inOut(Easing.ease), + }; + + this.translateBounceX = interpolate(this.panClockState.position, { + inputRange: [0, 1], + outputRange: [this.panFromX, this.panToX], + extrapolate: Extrapolate.CLAMP, + }); + + this.translateBounceY = interpolate(this.panClockState.position, { + inputRange: [0, 1], + outputRange: [this.panFromY, this.panToY], + extrapolate: Extrapolate.CLAMP, + }); + + this.pinchClock = new Clock(); + this.pinchClockState = { + finished: new Value(0), + position: new Value(0), + time: new Value(0), + frameTime: new Value(0), + }; + this.pinchClockConfig = { + duration: 150, + toValue: new Value(1), + easing: Easing.inOut(Easing.ease), + }; + + this.zoomFrom = new Value(0); + this.zoomTo = new Value(0); + + this.scaleBounce = interpolate(this.pinchClockState.position, { + inputRange: [0, 1], + outputRange: [this.zoomFrom, this.zoomTo], + extrapolate: Extrapolate.CLAMP, + }); + + this.setPageRight = block([ + set(this.nextIndex, add(this.index, 1)), + set(this.nextPageSwipeOffset, multiply(this.nextIndex, -screenWidth)), + set(this.swipeClockConfig.toValue, this.nextPageSwipeOffset), + call([], () => { this.nextIndexValue = this.state.index + 1; }), + ]); + + this.setPageLeft = block([ + set(this.nextIndex, sub(this.index, 1)), + set(this.nextPageSwipeOffset, multiply(this.nextIndex, -screenWidth)), + set(this.swipeClockConfig.toValue, this.nextPageSwipeOffset), + call([], () => { this.nextIndexValue = this.state.index - 1; }), + ]); + + this.setPageCenter = block([ + set(this.nextPageSwipeOffset, this.currentPageSwipeOffset), + set(this.swipeClockConfig.toValue, this.nextPageSwipeOffset), + set(this.nextIndex, this.index), + call([], () => { this.nextIndexValue = this.state.index; }), + ]); + + this.triggerTranslateBounce = block([ + set(this.panClockState.finished, 0), + set(this.panClockState.frameTime, 0), + set(this.panClockState.time, 0), + set(this.panClockState.position, 0), + set(this.panFromX, translateX), + set(this.panFromY, translateY), + cond(greaterThan(translateX, xBoundLeft), [ + set(this.panToX, xBoundLeft), + set(translateX, xBoundLeft), + set(this.isSwipingLeft, 1), + ], cond(lessThan(translateX, xBoundRight), [ + set(this.panToX, xBoundRight), + set(translateX, xBoundRight), + set(this.isSwipingRight, 1), + ], [ + set(this.panToX, translateX), + ])), + cond(greaterThan(translateY, yBoundTop), [ + set(this.panToY, yBoundTop), + set(translateY, yBoundTop), + ], cond(lessThan(translateY, yBoundBottom), [ + set(this.panToY, yBoundBottom), + set(translateY, yBoundBottom), + ], [ + set(this.panToY, translateY), + ])), + set(panOffsetX, translateX), + set(panOffsetY, translateY), + startClock(this.panClock), + ]); + + this.pinchEvent = event([{ + nativeEvent: ({ scale, focalX, focalY }) => block([ + // cond(isPinching, greaterOrEq(multiply(imageScaleOffset, scale), 1)), [ + cond(isPinching, [ + set(imageScale, multiply(imageScaleOffset, scale)), + + set(imageScaleHeight, multiply(imageScale, this.imageContainerHeight)), + set(imageScaleWidth, multiply(imageScale, this.imageContainerWidth)), + set(imageScaleHalfHeight, divide(imageScaleHeight, 2)), + set(imageScaleHalfWidth, divide(imageScaleWidth, 2)), + + set(imageScaleWidthDiff, sub(imageScaleWidth, this.imageContainerWidth)), + set(imageScaleHeightDiff, sub(imageScaleHeight, this.imageContainerHeight)), + + set(imageScaleScreenWidthDiff, sub(imageScaleWidth, screenWidth)), + set(imageScaleScreenHeightDiff, sub(imageScaleHeight, screenHeight)), + + set(xBound, cond(greaterThan(imageScaleScreenWidthDiff, 0), divide(imageScaleScreenWidthDiff, 2), 0)), + set(yBound, cond(greaterThan(imageScaleScreenHeightDiff, 0), divide(imageScaleScreenHeightDiff, 2), 0)), + + set(xBoundLeft, xBound), + set(xBoundRight, multiply(xBound, -1)), + set(yBoundTop, yBound), + set(yBoundBottom, multiply(yBound, -1)), + + set(scaleFocusX, multiply(divide(centerFocusX, lastImageScaleWidth), imageScaleWidth)), + set(scaleFocusY, multiply(divide(centerFocusY, lastImageScaleHeight), imageScaleHeight)), + + set( + scaleTranslateX, + multiply( + divide(sub(scaleFocusX, imageScaleHalfWidth), imageScaleWidth), + sub(lastImageScaleWidth, imageScaleWidth), + ), + ), + set( + scaleTranslateY, + multiply( + divide(sub(scaleFocusY, imageScaleHalfHeight), imageScaleHeight), + sub(lastImageScaleHeight, imageScaleHeight), + ), + ), + + set(translateX, add(add(scaleTranslateX, panOffsetX), sub(focalX, focalOffsetX))), + set(translateY, add(add(scaleTranslateY, panOffsetY), sub(focalY, focalOffsetY))), + ]), + ]), + }], { + useNativeDriver: true, + }); + + this.pinchChangeState = event([{ + nativeEvent: ({ state, focalX, focalY }) => block([ + cond(and(this.imageOriginalHeight, this.imageOriginalWidth), [ + cond(eq(state, State.ACTIVE), [ + cond(and(not(isPinching), this.imageContainerWidth, this.imageContainerHeight), [ + cond(not(this.isZooming), set(this.isZooming, 1)), + set(focalOffsetX, focalX), + set(focalOffsetY, focalY), + + set(lastImageScaleHeight, multiply(imageScale, this.imageContainerHeight)), + set(lastImageScaleWidth, multiply(imageScale, this.imageContainerWidth)), + + set(centerFocusX, add(sub(sub(divide(lastImageScaleWidth, 2), panOffsetX), halfScreenWidth), focalOffsetX)), + set(centerFocusY, add(sub(sub(divide(lastImageScaleHeight, 2), panOffsetY), halfScreenHeight), focalOffsetY)), + + set(isPinching, 1), + call([add(imageScale)], ([s]) => { this.props.onZoomStart(s); }), + ]), + ]), + cond(and(eq(state, State.END), isPinching), [ + set(panOffsetX, translateX), + set(panOffsetY, translateY), + set(this.pinchClockState.finished, 0), + set(this.pinchClockState.frameTime, 0), + set(this.pinchClockState.time, 0), + set(this.pinchClockState.position, 0), + set(this.zoomFrom, imageScale), + cond(greaterThan(imageScale, this.maxScale), [ + set(this.zoomTo, this.maxScale), + + set(lastImageScaleHeight, multiply(imageScale, this.imageContainerHeight)), + set(lastImageScaleWidth, multiply(imageScale, this.imageContainerWidth)), + + set(centerFocusX, add(sub(sub(divide(lastImageScaleWidth, 2), panOffsetX), halfScreenWidth), focalOffsetX)), + set(centerFocusY, add(sub(sub(divide(lastImageScaleHeight, 2), panOffsetY), halfScreenHeight), focalOffsetY)), + + set(imageScale, this.maxScale), + + set(imageScaleHeight, multiply(imageScale, this.imageContainerHeight)), + set(imageScaleWidth, multiply(imageScale, this.imageContainerWidth)), + set(imageScaleHalfHeight, divide(imageScaleHeight, 2)), + set(imageScaleHalfWidth, divide(imageScaleWidth, 2)), + + set(imageScaleWidthDiff, sub(imageScaleWidth, this.imageContainerWidth)), + set(imageScaleHeightDiff, sub(imageScaleHeight, this.imageContainerHeight)), + + set(imageScaleScreenWidthDiff, sub(imageScaleWidth, screenWidth)), + set(imageScaleScreenHeightDiff, sub(imageScaleHeight, screenHeight)), + + set(xBound, cond(greaterThan(imageScaleScreenWidthDiff, 0), divide(imageScaleScreenWidthDiff, 2), 0)), + set(yBound, cond(greaterThan(imageScaleScreenHeightDiff, 0), divide(imageScaleScreenHeightDiff, 2), 0)), + + set(xBoundLeft, xBound), + set(xBoundRight, multiply(xBound, -1)), + set(yBoundTop, yBound), + set(yBoundBottom, multiply(yBound, -1)), + + set(scaleFocusX, multiply(divide(centerFocusX, lastImageScaleWidth), imageScaleWidth)), + set(scaleFocusY, multiply(divide(centerFocusY, lastImageScaleHeight), imageScaleHeight)), + + set( + scaleTranslateX, + multiply( + divide(sub(scaleFocusX, imageScaleHalfWidth), imageScaleWidth), + sub(lastImageScaleWidth, imageScaleWidth), + ), + ), + set( + scaleTranslateY, + multiply( + divide(sub(scaleFocusY, imageScaleHalfHeight), imageScaleHeight), + sub(lastImageScaleHeight, imageScaleHeight), + ), + ), + + set(tempTranslateX, add(scaleTranslateX, panOffsetX)), + set(tempTranslateY, add(scaleTranslateY, panOffsetY)), + + set(this.panFromX, translateX), + set(this.panFromY, translateY), + + cond(greaterThan(tempTranslateX, xBoundLeft), [ + set(this.panToX, xBoundLeft), + set(tempTranslateX, xBoundLeft), + set(this.isSwipingLeft, 1), + ], cond(lessThan(tempTranslateX, xBoundRight), [ + set(this.panToX, xBoundRight), + set(tempTranslateX, xBoundRight), + set(this.isSwipingRight, 1), + ], [ + set(this.panToX, tempTranslateX), + ])), + cond(greaterThan(tempTranslateY, yBoundTop), [ + set(this.panToY, yBoundTop), + set(tempTranslateY, yBoundTop), + ], cond(lessThan(tempTranslateY, yBoundBottom), [ + set(this.panToY, yBoundBottom), + set(tempTranslateY, yBoundBottom), + ], [ + set(this.panToY, tempTranslateY), + ])), + + set(this.panClockState.finished, 0), + set(this.panClockState.frameTime, 0), + set(this.panClockState.time, 0), + set(this.panClockState.position, 0), + + startClock(this.panClock), + + set(translateX, tempTranslateX), + set(translateY, tempTranslateY), + set(panOffsetX, tempTranslateX), + set(panOffsetY, tempTranslateY), + ], cond(lessThan(imageScale, 1), [ + set(this.zoomTo, 1), + set(imageScale, 1), + set(xBoundLeft, 0), + set(xBoundRight, 0), + set(yBoundTop, 0), + set(yBoundBottom, 0), + this.triggerTranslateBounce, + ], [ + set(this.zoomTo, imageScale), + this.triggerTranslateBounce, + ])), + set(imageScaleOffset, imageScale), + startClock(this.pinchClock), + set(isPinching, 0), + call([add(imageScale)], ([s]) => { this.props.onZoomEnd(s); }), + ]), + ]), + ]), + }], { + useNativeDriver: true, + }); + + this.panEvent = event([{ + nativeEvent: ({ + translationX, translationY, numberOfPointers, + }) => block([ + // cond(and(isPanning, not(this.renderingPhotos)), [ + cond(isPanning, [ + set(tempTranslateX, add(translationX, panOffsetX)), + set(tempTranslateY, add(translationY, panOffsetY)), + // cond(or(lessOrEq(imageScale, 1)), [ + cond(eq(imageScale, 1), [ + cond(eq(numberOfPointers, 1), set(swipePos, add(translationX, swipePosOffset))), + set(this.isSwipingLeft, 1), + set(this.isSwipingRight, 1), + ], [ + cond(greaterThan(tempTranslateX, xBoundLeft), [ + cond(this.isSwipingLeft, [ + set(swipePos, add(translationX, swipePosOffset)), + ], [ + set(panExcessX, divide(sub(tempTranslateX, xBoundLeft), 3)), + set(translateX, add(xBoundLeft, panExcessX)), + ]), + ], cond(lessThan(tempTranslateX, xBoundRight), [ + cond(this.isSwipingRight, [ + set(swipePos, add(translationX, swipePosOffset)), + ], [ + set(panExcessX, divide(sub(tempTranslateX, xBoundRight), 3)), + set(translateX, add(xBoundRight, panExcessX)), + ]), + ], [ + cond(this.isSwipingLeft, set(this.isSwipingLeft, 0)), + cond(this.isSwipingRight, set(this.isSwipingRight, 0)), + set(translateX, tempTranslateX), + ])), + cond(greaterThan(tempTranslateY, yBoundTop), [ + set(panExcessY, divide(sub(tempTranslateY, yBoundTop), 3)), + set(translateY, add(yBoundTop, panExcessY)), + ], cond(lessThan(tempTranslateY, yBoundBottom), [ + set(panExcessY, divide(sub(tempTranslateY, yBoundBottom), 3)), + set(translateY, add(yBoundBottom, panExcessY)), + ], [ + set(translateY, tempTranslateY), + ])), + ]), + ]), + ]), + }], { + useNativeDriver: true, + }); + this.panChangeState = event([{ + nativeEvent: ({ + state, translationX, translationY, velocityX, + }) => block([ + cond(eq(state, State.ACTIVE), [ + cond(not(isPanning), [ + // cond(and(this.renderingPhotosStarted, not(this.renderingPhotos)), [ + cond(this.renderingPhotosStarted, [ + set(this.swipeClockState.finished, 1), + ]), + set(isPanning, 1), + ]), + ], cond(and(or(eq(state, State.END), eq(state, State.CANCELLED)), isPanning), [ + set(isPanning, 0), + set(swipePosOffset, swipePos), + set(panOffsetX, translateX), + set(panOffsetY, translateY), + set(tX, translationX), + set(tY, translationY), + cond(and(or(this.isSwipingLeft, this.isSwipingRight), not(clockRunning(this.swipeClock))), [ + // set(this.swipeClockConfig.duration, multiply(divide(1000, add(abs(velocityX), 100))), 1000), + // set(this.swipeClockConfig.duration, multiply(divide(1000, add(abs(velocityX), 100)), 1000)), + set(this.swipeClockState.finished, 0), + set(this.swipeClockState.frameTime, 0), + set(this.swipeClockState.time, 0), + set(this.swipeClockState.position, swipePos), + cond(and( + greaterThan(swipePos, add(this.currentPageSwipeOffset, halfScreenWidth)), + greaterOrEq(sub(this.index, 1), 0), + ), [ + this.setPageLeft, + ], cond(and( + lessThan(swipePos, sub(this.currentPageSwipeOffset, halfScreenWidth)), + cond(this.hasNext, [ + lessThan(add(this.index, 1), add(this.photosCount, 1)), + ], lessThan(add(this.index, 1), this.photosCount)), + ), [ + this.setPageRight, + ], cond( + greaterThan(abs(velocityX), 50), [ + cond( + greaterThan(translationX, 0), + cond(greaterOrEq(sub(this.index, 1), 0), this.setPageLeft, this.setPageCenter), + cond([ + cond(this.hasNext, [ + lessThan(add(this.index, 1), add(this.photosCount, 1)), + ], lessThan(add(this.index, 1), this.photosCount)), + ], this.setPageRight, [ + call([], () => { this.props.onEndReached(); }), + this.setPageCenter, + ]), + ), + ], + this.setPageCenter, + ))), + startClock(this.swipeClock), + set(this.renderingPhotosStarted, 1), + // set(this.renderingPhotos, 1), + cond(neq(this.nextIndex, this.index), [ + set(panOffsetX, 0), + set(panOffsetY, 0), + set(translateX, 0), + set(translateY, 0), + set(xBoundLeft, 0), + set(xBoundRight, 0), + set(imageScale, 1), + set(imageScaleOffset, 1), + set(this.isZooming, 0), + set(this.imageContainerWidth, 0), + set(this.imageContainerHeight, 0), + set(this.imageOriginalWidth, 0), + set(this.imageOriginalHeight, 0), + set(this.maxScale, 1), + ]), + cond(this.isSwipingLeft, set(this.isSwipingLeft, 0)), + cond(this.isSwipingRight, set(this.isSwipingRight, 0)), + set(this.index, this.nextIndex), + call([], () => { + if (typeof this.nextIndexValue !== 'undefined') { + const currentIndex = this.nextIndexValue; + this.setState({ index: currentIndex }, () => { + // this.renderingPhotos.setValue(0); + this.setupCurrentImageDimensions(currentIndex); + this.props.onPageChange(currentIndex); + }); + } + }), + ], this.triggerTranslateBounce), + ])), + + ]), + }], { + useNativeDriver: true, + }); + + this.doubleTapChangeState = event([{ + nativeEvent: ({ + state, x, y, + }) => block([ + cond(and(eq(state, State.END), this.imageContainerWidth, this.imageContainerHeight), [ + set(this.pinchClockState.finished, 0), + set(this.pinchClockState.frameTime, 0), + set(this.pinchClockState.time, 0), + set(this.pinchClockState.position, 0), + set(this.zoomFrom, imageScale), + call([add(imageScale)], ([s]) => { this.props.onDoubleTap(s); }), + cond(eq(imageScale, 1), [ + set(this.zoomTo, this.maxScale), + + set(lastImageScaleHeight, multiply(imageScale, this.imageContainerHeight)), + set(lastImageScaleWidth, multiply(imageScale, this.imageContainerWidth)), + + set(imageScale, this.maxScale), + + set(imageScaleHeight, multiply(imageScale, this.imageContainerHeight)), + set(imageScaleWidth, multiply(imageScale, this.imageContainerWidth)), + set(imageScaleHalfHeight, divide(imageScaleHeight, 2)), + set(imageScaleHalfWidth, divide(imageScaleWidth, 2)), + + set(imageScaleWidthDiff, sub(imageScaleWidth, this.imageContainerWidth)), + set(imageScaleHeightDiff, sub(imageScaleHeight, this.imageContainerHeight)), + + set(imageScaleScreenWidthDiff, sub(imageScaleWidth, screenWidth)), + set(imageScaleScreenHeightDiff, sub(imageScaleHeight, screenHeight)), + + set(centerFocusX, add(sub(divide(lastImageScaleWidth, 2), halfScreenWidth), x)), + set(centerFocusY, add(sub(divide(lastImageScaleHeight, 2), halfScreenHeight), y)), + + set(xBound, cond(greaterThan(imageScaleScreenWidthDiff, 0), divide(imageScaleScreenWidthDiff, 2), 0)), + set(yBound, cond(greaterThan(imageScaleScreenHeightDiff, 0), divide(imageScaleScreenHeightDiff, 2), 0)), + + set(xBoundLeft, xBound), + set(xBoundRight, multiply(xBound, -1)), + set(yBoundTop, yBound), + set(yBoundBottom, multiply(yBound, -1)), + + set(scaleFocusX, multiply(divide(centerFocusX, lastImageScaleWidth), imageScaleWidth)), + set(scaleFocusY, multiply(divide(centerFocusY, lastImageScaleHeight), imageScaleHeight)), + + set( + scaleTranslateX, + multiply( + divide(sub(scaleFocusX, imageScaleHalfWidth), imageScaleWidth), + sub(lastImageScaleWidth, imageScaleWidth), + ), + ), + set( + scaleTranslateY, + multiply( + divide(sub(scaleFocusY, imageScaleHalfHeight), imageScaleHeight), + sub(lastImageScaleHeight, imageScaleHeight), + ), + ), + + set(tempTranslateX, scaleTranslateX), + set(tempTranslateY, scaleTranslateY), + + set(this.panFromX, translateX), + set(this.panFromY, translateY), + + cond(greaterThan(tempTranslateX, xBoundLeft), [ + set(this.panToX, xBoundLeft), + set(tempTranslateX, xBoundLeft), + ], cond(lessThan(tempTranslateX, xBoundRight), [ + set(this.panToX, xBoundRight), + set(tempTranslateX, xBoundRight), + ], [ + set(this.panToX, tempTranslateX), + ])), + cond(greaterThan(tempTranslateY, yBoundTop), [ + set(this.panToY, yBoundTop), + set(tempTranslateY, yBoundTop), + ], cond(lessThan(tempTranslateY, yBoundBottom), [ + set(this.panToY, yBoundBottom), + set(tempTranslateY, yBoundBottom), + ], [ + set(this.panToY, tempTranslateY), + ])), + + set(this.panClockState.finished, 0), + set(this.panClockState.frameTime, 0), + set(this.panClockState.time, 0), + set(this.panClockState.position, 0), + + startClock(this.panClock), + + set(translateX, tempTranslateX), + set(translateY, tempTranslateY), + set(panOffsetX, tempTranslateX), + set(panOffsetY, tempTranslateY), + ], [ + set(this.zoomTo, 1), + set(imageScale, 1), + set(xBoundLeft, 0), + set(xBoundRight, 0), + set(yBoundTop, 0), + set(yBoundBottom, 0), + this.triggerTranslateBounce, + ]), + set(imageScaleOffset, imageScale), + startClock(this.pinchClock), + ]), + ]), + }]); + + this.eventListener = () => block([ + timing(this.swipeClock, this.swipeClockState, this.swipeClockConfig), + timing(this.panClock, this.panClockState, this.panClockConfig), + timing(this.pinchClock, this.pinchClockState, this.pinchClockConfig), + + cond(and(clockRunning(this.swipeClock), this.swipeClockState.finished), [ + stopClock(this.swipeClock), + set(swipePos, this.swipeClockState.position), + set(swipePosOffset, this.swipeClockState.position), + set(this.currentPageSwipeOffset, multiply(this.index, -screenWidth)), + set(this.renderingPhotosStarted, 0), + // set(this.renderingPhotos, 0), + ]), + cond(and(clockRunning(this.panClock), this.panClockState.finished), [ + stopClock(this.panClock), + ]), + cond(and(clockRunning(this.pinchClock), this.pinchClockState.finished), [ + stopClock(this.pinchClock), + ]), + // call([this.swipeClockState.position], ([pos]) => { console.log('clock pos', pos); }), + // call([imageScale, imageScaleOffset], ([is, io]) => { console.log(`imageScale: ${is}, offset: ${io}, left: ${((is * screenWidth) - screenWidth) * -1}, right: ${(is * screenWidth) - screenWidth}`); }), + // call([ + // panOffsetX, + // translateX, + // tempTranslateX, + // xBoundLeft, + // xBoundRight, + // imageScale, + // ], ([x0, x1, x2, x3, x4, x5]) => { console.log(`panOffsetX: ${x0}, translateX: ${x1}, tempTranslateX: ${x2} xBoundLeft: ${x3}, xBoundRight: ${x4}, scale: ${x5}, screenWidth: ${screenWidth}`); }), + // call([tempFocalX, imageScaleWidth, multiply(sub(tempFocalX, divide(screenWidth, 2)), -1)], ([f, w, x]) => { console.log(`tempFocalX: ${f}, imageScaleWidth: ${w}, test: ${x}`); }), + // call([this.testValue], ([testv]) => { console.log(testv); }), + // call([scaleFocusX, scaleFocusY, imageScale, imageScaleWidth, imageScaleHeight], ([sx, sy, s, sw, sh]) => { console.log(`scaleFocusX: ${sx}, scaleFocusY: ${sy}, scale: ${s}, imageScaleWidth: ${sw}, imageScaleHeight: ${sh}`); }), + // call([swipePos, swipePosOffset], ([s]) => { console.log(`swipePos: ${s}, swipePosOffset: ${s}`); }), + // call([swipePos, this.index, this.renderingPhotos], ([s, i, R]) => { console.log(`swipePos: ${s}, rendering: ${R}, nativeIndex: ${i}, jsIndex: ${this.state.index}`); }), + // call([translateX, translateY, panOffsetX, panOffsetY], ([x, y, a, b]) => { console.log(`translateX: ${x}, translateY: ${y}, panOffsetX: ${a}, panOffsetY: ${b}`); }), + ]); + + // this.debugInfo = { + // imageScale, + // focalOffsetX, + // focalOffsetY, + // centerFocusX, + // centerFocusY, + // scaleFocusX, + // scaleFocusY, + // scaleTranslateX, + // scaleTranslateY, + // imageScaleWidth, + // imageScaleHeight, + // translateX, + // translateY, + // ratioX: divide(scaleFocusX, imageScaleWidth), + // ratioY: divide(scaleFocusY, imageScaleHeight), + // }; + } + + componentDidMount() { + _.defer(() => { + this.setupCurrentImageDimensions(this.props.initialIndex); + // this.renderingPhotos.setValue(0); + }); + } + + componentDidUpdate(prevProps) { + const { photos, hasNext } = this.props; + const { index } = this.state; + if (prevProps.photos.length !== photos.length) { + const { + translateX, translateY, xBoundLeft, xBoundRight, imageScale, imageScaleOffset, + } = this.animData; + this.photosCount.setValue(photos.length); + if (index >= photos.length) { + const newIndex = photos.length - 1; + const newPosOffset = getSwipeOffset(newIndex); + this.setState({ index: newIndex }, () => { + translateX.setValue(0); + translateY.setValue(0); + xBoundLeft.setValue(0); + xBoundRight.setValue(0); + imageScale.setValue(1); + imageScaleOffset.setValue(1); + this.isZooming.setValue(0); + this.isSwipingLeft.setValue(0); + this.isSwipingRight.setValue(0); + this.index.setValue(newIndex); + this.nextIndex.setValue(newIndex); + this.currentPageSwipeOffset.setValue(newPosOffset); + this.nextPageSwipeOffset.setValue(newPosOffset); + this.props.onPageChange(newIndex); + }); + } + } + if (prevProps.hasNext !== hasNext) { + this.hasNext.setValue(hasNext ? 1 : 0); + } + } + + onImageLoad = ({ width, height, index }) => { + const photo = this.props.photos[index]; + if (photo && !imageDimensions[photo.id]) { + const { rotation } = photo; + let adjustedWidth = screenWidth; + let adjustedHeight; + let originalWidth; + let originalHeight; + if (rotation === 0 || rotation % 180 === 0) { + const aspectRatio = screenWidth / width; + adjustedHeight = aspectRatio * height; + originalWidth = width; + originalHeight = height; + } else { + const aspectRatio = screenWidth / height; + adjustedHeight = aspectRatio * width; + originalWidth = height; + originalHeight = width; + } + if (adjustedHeight > screenHeight) { + const diffRatio = (adjustedHeight - screenHeight) / adjustedHeight; + adjustedWidth -= (adjustedWidth * diffRatio); + adjustedHeight = screenHeight; + } + const dimensions = { + originalWidth, + originalHeight, + adjustedWidth, + adjustedHeight, + }; + imageDimensions[photo.id] = dimensions; + if (index === this.state.index) { + this.setImageDimensionValues(dimensions); + } + } + } + + setupCurrentImageDimensions = (index) => { + const currentPhoto = this.props.photos[index]; + const currentImageDimensions = currentPhoto && imageDimensions[currentPhoto.id]; + if (currentImageDimensions) { + this.setImageDimensionValues(currentImageDimensions); + } + } + + setImageDimensionValues = ({ + adjustedWidth, adjustedHeight, originalWidth, originalHeight, + }) => { + let maxScale; + if (originalHeight > originalWidth) { + maxScale = originalHeight / screenHeight; + } else { + maxScale = originalWidth / screenWidth; + } + if (maxScale < 1) maxScale = 1; + maxScale += 0.5; + this.imageContainerWidth.setValue(adjustedWidth); + this.imageContainerHeight.setValue(adjustedHeight); + this.imageOriginalWidth.setValue(originalWidth); + this.imageOriginalHeight.setValue(originalHeight); + this.maxScale.setValue(maxScale); + } + + renderContent = (index) => { + const { photos, hasNext } = this.props; + const { index: currentIndex } = this.state; + const photo = photos[index]; + const { + translateX, translateY, imageScale, + } = this.animData; + if (photo && index >= 0 && index < photos.length && photos[index] && photos[index].previewUrl) { + let content; + if (photo.videoUrl) { + content = ( { this.pauseVideoFn = null; }} + onVideoError={this.onVideoError} + />); + } else { + content = ( + + ); + } + return ( + + {content} + {/* */} + + ); + } else if (hasNext && index >= photos.length) { + return ( + + + + ); + } + return ; + } + + render() { + const { + swipePos, + // focalOffsetX, + // focalOffsetY, + // scaleFocusX, + // scaleFocusY, + } = this.animData; + const { index } = this.state; + const prevIndex = index - 1; + const nextIndex = index + 1; + const pinchRef = React.createRef(); + const panRef = React.createRef(); + const tapRef = React.createRef(); + const doubleTapRef = React.createRef(); + return ( + <> + {this.eventListener} + + + + + + { + if (nativeEvent.state === State.ACTIVE) { + this.props.onTap(this.state.index); + } + }} + > + + + + + {this.renderContent(prevIndex)} + {this.renderContent(index)} + {this.renderContent(nextIndex)} + + {/* */} + {/* */} + {/* */} + + + + + + + + + + ); + } +} diff --git a/ioneapps-maagapp-ee31119a522d/src/components/Forms/modalForm.js b/ioneapps-maagapp-ee31119a522d/src/components/Forms/modalForm.js new file mode 100644 index 0000000..91404c1 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/src/components/Forms/modalForm.js @@ -0,0 +1,127 @@ +import React, { Component } from 'react'; +import { Form } from '~comp/reduxForm'; +import { Dialogue } from 'nixplay-ui-kit'; +import { connect } from 'react-redux'; +import { submit, isSubmitting, isValid, reset } from 'redux-form'; +import PropTypes from 'prop-types'; + +import i18n from '~/locale/i18n'; + + +export class ModalFormComponent extends Component { + static propTypes = { + children: PropTypes.any, + form: PropTypes.string.isRequired, + onCancel: PropTypes.func.isRequired, + submit: PropTypes.func.isRequired, + reset: PropTypes.func.isRequired, + submitting: PropTypes.bool.isRequired, + valid: PropTypes.bool.isRequired, + resetOnOpen: PropTypes.bool, + + cancelText: PropTypes.string, + submitText: PropTypes.string, + submitColor: PropTypes.string, + withClose: PropTypes.bool, + withLoadingText: PropTypes.bool, + loadingText: PropTypes.string, + }; + + static defaultProps = { + children: {}, + cancelText: '', + submitText: '', + submitColor: 'blue', + withClose: false, + withLoadingText: true, + loadingText: '', + resetOnOpen: true, + }; + + constructor(props) { + super(props); + + this.setRef = this.setRef.bind(this); + this.reset = () => { this.props.reset(); }; + } + + setRef(ref) { + this.modal = ref; + this.open = () => { + if (this.props.resetOnOpen) this.reset(); + if (this.modal) this.modal.open(); + }; + this.close = (callback) => this.modal && this.modal.close(callback); + } + + render() { + const { + onCancel, + submit: submitFn, + cancelText, + submitText, + submitColor, + valid, + submitting, + children, + withLoadingText, + loadingText, + ...others + } = this.props; + + const cText = cancelText || i18n.t('common.cancel'); + const sText = submitText || i18n.t('common.submit'); + + return ( +
+ + {children} + {cText} + + {sText} + + +
+ ); + } +} + +const mapStateToProps = (state, ownProps) => { + const { form } = ownProps; + return { + submitting: isSubmitting(form)(state), + valid: isValid(form)(state), + }; +}; + +const mapActionsToProps = (dispatch, ownProps) => { + const { form } = ownProps; + return { + submit() { + dispatch(submit(form)); + }, + reset() { + dispatch(reset(form)); + }, + }; +}; + +export const ModalForm = connect( + mapStateToProps, + mapActionsToProps, + null, + { forwardRef: true }, +)(ModalFormComponent); diff --git a/ioneapps-maagapp-ee31119a522d/src/components/Forms/modalNameForm.js b/ioneapps-maagapp-ee31119a522d/src/components/Forms/modalNameForm.js new file mode 100644 index 0000000..82854ad --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/src/components/Forms/modalNameForm.js @@ -0,0 +1,61 @@ +import React, { Component } from 'react'; +import { TextInput2 } from '~comp/reduxForm'; +import { Dialogue } from 'nixplay-ui-kit'; +import PropTypes from 'prop-types'; + +import { validator, defaultConstrains } from '~/lib/validate'; + +import { ModalForm } from './modalForm'; + + +const nameValidate = (values) => { + let errors = {}; + errors = validator({ + name: values.name, + }, { + name: defaultConstrains.required, + }); + return errors; +}; + +export class ModalNameForm extends Component { + static propTypes = { + form: PropTypes.string.isRequired, + formTitle: PropTypes.string.isRequired, + placeholder: PropTypes.string, + maxLength: PropTypes.number, + }; + + static defaultProps = { + placeholder: '', + maxLength: 100, + }; + + constructor(props) { + super(props); + + this.setRef = this.setRef.bind(this); + } + + setRef(ref) { + this.modal = ref; + this.open = () => this.modal && this.modal.open(); + this.close = (callback) => this.modal && this.modal.close(callback); + this.reset = () => this.modal && this.modal.reset(); + } + + render() { + return ( + + {this.props.formTitle} + + + + + ); + } +} diff --git a/ioneapps-maagapp-ee31119a522d/src/components/FramePairing/empty.js b/ioneapps-maagapp-ee31119a522d/src/components/FramePairing/empty.js new file mode 100644 index 0000000..4c9c93f --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/src/components/FramePairing/empty.js @@ -0,0 +1,86 @@ +import React from 'react'; +import { + StyleSheet, + View, + ActivityIndicator, + StatusBar, +} from 'react-native'; +import { ContentGridEmpty, Button, Text, color } from 'nixplay-ui-kit'; + +import i18n from '~/locale/i18n'; +import PropTypes from 'prop-types'; + + +const styles = StyleSheet.create({ + container: { + height: '100%', + flex: 1, + alignItems: 'center', + marginHorizontal: 48, + }, + loadingContainer: { + flex: 1, + alignItems: 'center', + justifyContent: 'center', + }, + button: { + marginVertical: 10, + }, + description: { + marginHorizontal: 56, + }, + circle: { + padding: 2, + }, +}); + +export const FrameEmpty = (props) => ( + props.loading ? ( + + + + + {i18n.t('frames.lookingForyourFrame')} + + + ) : ( + + + + + {i18n.t('frames.noFramesFound')} + {i18n.t('frames.noFrameFoundDescription')} + + + + + + + + ) +); + +FrameEmpty.propTypes = { + loading: PropTypes.bool.isRequired, + tryToSearchAgain: PropTypes.func.isRequired, + enterSerialNumber: PropTypes.func.isRequired, +}; diff --git a/ioneapps-maagapp-ee31119a522d/src/components/Frames/assignPlaylist.js b/ioneapps-maagapp-ee31119a522d/src/components/Frames/assignPlaylist.js new file mode 100644 index 0000000..bfe1b20 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/src/components/Frames/assignPlaylist.js @@ -0,0 +1,151 @@ +import React, { Component } from 'react'; +import _ from 'lodash'; +import { View, ViewPropTypes, StyleSheet, FlatList } from 'react-native'; +import { TableCellPlaylist, TableCell, Switch, color } from 'nixplay-ui-kit'; +import { connect } from 'react-redux'; +import PropTypes from 'prop-types'; +import { UPDATE_FRAME_PLAYLIST_ASSIGNMENT } from '~/store/actionTypes'; +import { analytics } from '~/lib/utils'; +import PlaylistTypeLabel from '~comp/playlistTypeLabel'; + +const styles = StyleSheet.create({ + container: { + backgroundColor: color.white, + }, + playlist: { + paddingLeft: 16, + }, + label: { + left: 5, + }, +}); + +export class AssignPlaylistToFrame extends Component { + static propTypes = { + ...ViewPropTypes, + allPlaylists: PropTypes.array.isRequired, + allPlaylistsLoading: PropTypes.bool.isRequired, + frameId: PropTypes.number, + framePlaylists: PropTypes.array, + updateFrame: PropTypes.func.isRequired, + onPlaylistsChange: PropTypes.func, + isConnected: PropTypes.bool.isRequired, + } + + static defaultProps = { + onPlaylistsChange: () => { }, + frameId: -1, + framePlaylists: [], + } + + constructor(props) { + super(props); + + this.state = { + playlistsSwitch: {}, + }; + + this.onTogglePlaylist = this.onTogglePlaylist.bind(this); + } + + componentWillMount() { + this.setInitialValues(); + } + + onTogglePlaylist(playlistId, value) { + this.setState({ + playlistsSwitch: { + ...this.state.playlistsSwitch, + [playlistId]: value, + }, + }, () => { + const playlistIds = _.filter( + _.keys(this.state.playlistsSwitch), + (k) => this.state.playlistsSwitch[k] === true, + ); + this.props.onPlaylistsChange(_.map(playlistIds, _.parseInt), playlistId, value); + if (this.props.frameId !== -1) { + this.props.updateFrame(this.props.frameId, playlistId, value ? 'add' : 'remove'); + if (value) { + analytics.logAction('add_playlist_to_frame'); + } else { + analytics.logAction('remove_playlist_from_frame'); + } + } + }); + } + + setInitialValues() { + const values = {}; + this.props.framePlaylists.forEach((f) => { + values[f.id] = true; + }); + this.setState({ playlistsSwitch: values }); + } + + render() { + const { + style, + allPlaylists, + allPlaylistsLoading, + ...others + } = this.props; + return ( + + `${playlist.id}`} + loading={allPlaylistsLoading} + renderItem={({ item: playlist, index }) => ( + _.isEqual(playlist.type, 'google') && + () + } + showFrameCount + > + + { this.onTogglePlaylist(playlist.id, v); }} + withEye + disabled={!this.props.isConnected} + /> + + + )} + /> + + ); + } +} + +const mapStateToProps = (state) => ({ + allPlaylists: [...state.playlists.playlists].sort((a, b) => b.id - a.id), + allPlaylistsLoading: state.playlists.meta.loading, + isConnected: state.network.isConnected, +}); + +const mapActionsToProps = (dispatch) => ({ + updateFrame(frameId, playlistId, operation) { + dispatch({ + type: UPDATE_FRAME_PLAYLIST_ASSIGNMENT, + payload: { + frameIds: [frameId], + playlistIds: [playlistId], + operation, + }, + }); + }, +}); + +export default connect( + mapStateToProps, + mapActionsToProps, + null, + { forwardRef: true }, +)(AssignPlaylistToFrame); diff --git a/ioneapps-maagapp-ee31119a522d/src/components/Frames/bezel.js b/ioneapps-maagapp-ee31119a522d/src/components/Frames/bezel.js new file mode 100644 index 0000000..a4ef3ca --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/src/components/Frames/bezel.js @@ -0,0 +1,372 @@ +import React, { Component } from 'react'; +import { View, TouchableOpacity, Dimensions, Image } from 'react-native'; +import PropTypes from 'prop-types'; +import _ from 'lodash'; +import { color, NixplayIcon as Icon, Loading, Thumbnail, ImageIcon } from 'nixplay-ui-kit'; +import { getDimensions } from '~/lib/frames'; +import { debounceWrapper, analytics } from '~/lib/utils'; +import { frameColors, FRAME_POWER } from '~/store/frameConstants'; + +import { bezel } from '~/images'; + +import placeholder from '~/images/home/frame-empty.jpg'; +import tutorialBg from '~/images/home/frame-bg.jpg'; +import welcomeEn from '~/images/home/frame-welcome-en.png'; +import welcomeDe from '~/images/home/frame-welcome-de.png'; +import welcomeJap from '~/images/home/frame-welcome-jap.png'; + +const styles = { + container: { + height: '100%', + width: '100%', + alignItems: 'center', + justifyContent: 'center', + top: 0, + }, + frame: { + height: '100%', + width: '100%', + zIndex: 2, + }, + frameImage: { + height: '100%', + width: '100%', + zIndex: 1, + alignItems: 'center', + justifyContent: 'center', + shadowColor: '#000', + shadowOffset: { width: 0, height: 4 }, + shadowOpacity: 0.4, + shadowRadius: 4, + }, + noPhotos: { + position: 'absolute', + backgroundColor: color.mistBlue05, + alignItems: 'center', + justifyContent: 'center', + }, + thumbImage: { + width: '100%', + height: '100%', + overflow: 'hidden', + }, + loadingContainer: { + height: '100%', + alignItems: 'center', + justifyContent: 'center', + }, +}; + +const TRANSITION_TIME = 5000; + +const TouchableOpacityEx = debounceWrapper(TouchableOpacity); + +function getBezel(frameModel, frameColor, frameOrientation, bezelLinks) { + if (frameModel.includes('W07A') || + frameModel.includes('W13B') || + frameModel.includes('W10B') || + frameModel.includes('W13C')) { + switch (frameColor) { + case frameColors.BLUE: + return frameOrientation === 'landscape' ? bezel.seed07BlueLandscape : bezel.seed07BluePortrait; + case frameColors.MANGO: + return frameOrientation === 'landscape' ? bezel.seed07MangoLandscape : bezel.seed07MangoPortrait; + case frameColors.MULBERRY: + return frameOrientation === 'landscape' ? bezel.seed07MulberryLandscape : bezel.seed07MulberryPortrait; + default: + return frameOrientation === 'landscape' ? bezel.seed07BlackLandscape : bezel.seed07BlackPortrait; + } + } else if (frameModel.includes('W10J') || frameModel.includes('W10F')) { + switch (frameColor) { + case frameColors.BLACK: + return frameOrientation === 'landscape' ? bezel.seed10FBlackLandscape : bezel.seed10FBlackPortrait; + case frameColors.WOOD: + return frameOrientation === 'landscape' ? bezel.seed10FWoodLandscape : bezel.seed10FWoodPortrait; + default: + return frameOrientation === 'landscape' ? bezel.seed10FBlackLandscape : bezel.seed10FBlackPortrait; + } + } else if (frameModel.includes('W08D') || + frameModel.includes('W10A')) { + switch (frameColor) { + case frameColors.BLUE: + return frameOrientation === 'landscape' ? bezel.seed08BlueLandscape : bezel.seed08BluePortrait; + case frameColors.MANGO: + return frameOrientation === 'landscape' ? bezel.seed08MangoLandscape : bezel.seed08MangoPortrait; + case frameColors.MULBERRY: + return frameOrientation === 'landscape' ? bezel.seed08MulberryLandscape : bezel.seed08MulberryPortrait; + case frameColors.WOOD: + return frameOrientation === 'landscape' ? bezel.seed08WoodLandscape : bezel.seed08WoodPortrait; + case frameColors.WHITE: + return frameOrientation === 'landscape' ? bezel.seed10WhiteLandscape : bezel.seed10WhitePortrait; + default: + return frameOrientation === 'landscape' ? bezel.seed08BlackLandscape : bezel.seed08BlackPortrait; + } + } else if (frameModel.includes('W08E')) { + switch (frameColor) { + case frameColors.BRONZE: + return frameOrientation === 'landscape' ? bezel.iris08BronzeLandscape : bezel.iris08BronzePortrait; + case frameColors.COPPER: + return frameOrientation === 'landscape' ? bezel.iris08RosegoldLandscape : bezel.iris08RosegoldPortrait; + case frameColors.SILVER: + return frameOrientation === 'landscape' ? bezel.iris08SilverLandscape : bezel.iris08SilverPortrait; + default: + return frameOrientation === 'landscape' ? bezel.iris08BronzeLandscape : bezel.iris08BronzePortrait; + } + } else if (frameModel.includes('W08A') || frameModel.includes('W08B') || frameModel.includes('W12') || frameModel.includes('W15')) { + return frameOrientation === 'landscape' ? bezel.original12BlackLandscape : bezel.original12BlackPortrait; + } else if (frameModel.includes('W08C')) { + return frameOrientation === 'landscape' ? bezel.edge08BlackLandscape : bezel.edge08BlackPortrait; + } else if (frameModel.includes('W13A')) { + return frameOrientation === 'landscape' ? bezel.edge13BlackLandscape : bezel.edge13BlackPortrait; + } else if (frameModel.includes('W18')) { + return frameOrientation === 'landscape' ? bezel.original18BlackLandscape : bezel.original18BlackPortrait; + } else if (!_.isEmpty(bezelLinks[frameOrientation])) { + return { uri: bezelLinks[frameOrientation] }; + } else { + return frameOrientation === 'landscape' ? bezel.original12BlackLandscape : bezel.original12BlackPortrait; + } +} + +function getPlaceHolderIcon(props) { + if (props.needUpdate) { + return 'invalid'; + } else if (!props.isConnected) { + return 'plug'; + } else if (props.power === FRAME_POWER.OFF) { + return 'sleep'; + } else if (props.isConnected && props.noPlaylistAssigned) { + return 'playlist'; + } else if (props.isConnected && _.isEmpty(props.thumbs)) { + return 'photo-broken'; + } + return 'plug'; +} + +export class Bezel extends Component { + constructor(props) { + super(props); + + const { height: deviceHeight, width: deviceWidth } = Dimensions.get('window'); + const height = props.orientation === 'landscape' ? deviceWidth / 2.2 : deviceHeight / 3.2; + const width = props.orientation === 'landscape' ? deviceHeight / 3.2 : deviceWidth / 2.2; + const thumbDimensions = { width, height }; + + this.state = { + thumbDimensions, + thumbnail: this.props.thumbs[0] || { url: '', rotation: 0 }, + counter: 0, + loading: true, + bezelSettings: getBezel(props.model, props.color, props.orientation, this.props.bezel), + opened: false, + }; + this.onLayout = this.onLayout.bind(this); + this.startCarousel = this.startCarousel.bind(this); + this.thumbnailPressed = this.thumbnailPressed.bind(this); + } + + componentDidMount() { + if (this.props.power === FRAME_POWER.ON) { + this.startCarousel(); + } + } + + componentWillReceiveProps(nextProps) { + if (this.state.thumbnail.url === '' && nextProps.thumbs[0] && !_.isEmpty(nextProps.thumbs[0].url)) { + this.setState({ thumbnail: nextProps.thumbs[0] }); + } + + if (nextProps.model !== this.props.model || + nextProps.color !== this.props.color || + nextProps.orientation !== this.props.orientation) { + this.setState({ + bezelSettings: getBezel(nextProps.model, nextProps.color, nextProps.orientation, this.props.bezel), + }); + } + + if (nextProps.carousel !== this.props.carousel && nextProps.power === FRAME_POWER.ON) { + if (nextProps.carousel) { + this.startCarousel(this.state.counter); + } + } else if (nextProps.power !== this.props.power && nextProps.power === FRAME_POWER.ON) { + this.startCarousel(this.state.counter); + } + } + + shouldComponentUpdate(nextProps, nextState) { + if ((_.isEqual(this.props, nextProps) && _.isEqual(this.state, nextState)) || + !_.isEqual(_.get(this.props, 'currentFrame.meta'), _.get(nextProps, 'currentFrame.meta'))) { + return false; + } + return true; + } + + componentDidUpdate(prevProps) { + if (prevProps.playlistId !== this.props.playlistId) { + this.startCarousel(this.state.counter); + } + } + + componentWillUnmount() { + clearTimeout(this.timer); + } + + onLayout({ nativeEvent: { layout: { width, height } } }) { + const bezelSettings = getBezel(this.props.model, this.props.color, this.props.orientation, this.props.bezel); + const thumbDimensions = getDimensions({ + width, + height, + orientation: this.props.orientation, + dimensions: this.props.dimensions, + }); + + this.setState({ + thumbDimensions, + loading: false, + bezelSettings, + }); + } + + startCarousel(index = 0) { + if (!_.isEmpty(this.props.thumbs) && index === this.state.counter) { + const counter = (index < (this.props.thumbs.length - 1)) ? index + 1 : 0; + const thumbnail = this.props.thumbs[counter] || { url: '', rotation: 0 }; + this.setState({ thumbnail, counter }); + this.timer = setTimeout(() => { + if (this.props.carousel && this.props.power === FRAME_POWER.ON) { + this.startCarousel(counter); + } + }, TRANSITION_TIME); + } + return null; + } + + thumbnailPressed() { + analytics.logAction('tap_mini_frame'); + if (!this.state.opened) { + this.props.openPlaylist(this.props.playlistId); + this.setState({ opened: true }); + setTimeout(() => this.setState({ opened: false }), 1500); + } + } + + renderWelcome = () => { + const { languageCode } = this.props; + let imageIcon; + if (_.startsWith(languageCode, 'de')) { + imageIcon = welcomeDe; + } else if (_.startsWith(languageCode, 'ja')) { + imageIcon = welcomeJap; + } else { + imageIcon = welcomeEn; + } + return (); + } + + render() { + const showNormalCarousel = this.props.isConnected && !_.isEmpty(this.props.thumbs); + const placeholderIcon = getPlaceHolderIcon(this.props); + const userHasNoPlaylists = this.props.playlistLength < 1; + return ( + + + + + {showNormalCarousel && !this.props.showTutorial && !this.state.loading && + + {this.props.power === FRAME_POWER.OFF && !this.props.needUpdate && + + + + } + {!_.isEmpty(this.state.thumbnail.url) && + + } + {_.isEmpty(this.state.thumbnail.url) && + + + + } + + + + } + {((!showNormalCarousel && !this.props.showTutorial && !this.state.loading) + || (this.props.needUpdate && this.props.power === FRAME_POWER.OFF)) && + + } + {(this.props.showTutorial || (_.isEmpty(this.props.thumbs) && userHasNoPlaylists)) && + this.renderWelcome() + } + + ); + } +} + +Bezel.propTypes = { + bezel: PropTypes.object.isRequired, + model: PropTypes.string.isRequired, + color: PropTypes.string.isRequired, + orientation: PropTypes.string.isRequired, + thumbs: PropTypes.array.isRequired, + playlistLength: PropTypes.number, + carousel: PropTypes.bool, + power: PropTypes.string.isRequired, + openPlaylist: PropTypes.func.isRequired, + isConnected: PropTypes.bool, + playlistId: PropTypes.number, + dimensions: PropTypes.object, + showTutorial: PropTypes.bool, + needUpdate: PropTypes.bool, + languageCode: PropTypes.string, +}; + +Bezel.defaultProps = { + carousel: true, + playlistId: -1, + playlistLength: 0, + isConnected: false, + dimensions: { height: 600, width: 800 }, + showTutorial: false, + needUpdate: false, + languageCode: '', +}; diff --git a/ioneapps-maagapp-ee31119a522d/src/components/Frames/index.js b/ioneapps-maagapp-ee31119a522d/src/components/Frames/index.js new file mode 100644 index 0000000..9bda86c --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/src/components/Frames/index.js @@ -0,0 +1,3 @@ +export { MiniFrame } from './miniFrame'; +export { PairEmptyFrame } from './pair'; +export { InfoLabel } from './infoLabel'; diff --git a/ioneapps-maagapp-ee31119a522d/src/components/Frames/infoLabel.js b/ioneapps-maagapp-ee31119a522d/src/components/Frames/infoLabel.js new file mode 100644 index 0000000..df0ca56 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/src/components/Frames/infoLabel.js @@ -0,0 +1,156 @@ +import React from 'react'; +import { View, Dimensions } from 'react-native'; +import PropTypes from 'prop-types'; +import { Text, color, NixplayIcon as Icon, transparentize } from 'nixplay-ui-kit'; +import { FRAME_POWER } from '~/store/frameConstants'; +import i18n from '~/locale/i18n'; +import { config } from '~/config'; + +const { height, width } = Dimensions.get('window'); +const aspectRatio = height / width; + +const paddingHorizontal = (aspectRatio > 1.775) ? 0.15 : 0.09; + +const styles = { + labelContainer: { + top: 10, + // maxWidth: '80%', + alignItems: 'center', + paddingHorizontal: (width * paddingHorizontal), + }, + infoLabel: { + padding: 10, + borderRadius: 8, + backgroundColor: transparentize(color.mistBlue04, 30), + justifyContent: 'space-between', + flexDirection: 'row', + }, + infoError: { + backgroundColor: color.red, + }, + infoSection: { + flex: 6, + justifyContent: 'flex-start', + flexDirection: 'row', + }, + infoText: { + marginHorizontal: 15, + color: color.white, + }, + underline: { + textDecorationLine: 'underline', + }, + infoLink: { + color: color.mistBlue05, + }, + iconSection: { + flex: 0.5, + justifyContent: 'flex-start', + flexDirection: 'column', + }, + icon: { + top: 2, + }, + iconUnconnected: { + top: 2, + alignSelf: 'flex-end', + }, +}; + +function getTextLabel(text, onPress, nestedTextComponent, isError = false, marginBottom = 8, top = 0, opacity = 1) { + return ( + + + {text} + {nestedTextComponent} + + ); +} + +function unconnectedFrame(text, onPress, nestedTextComponent, isError = false, marginBottom = 8, top = 0, opacity = 1) { + return ( + + + + + + {text} + {nestedTextComponent} + + + ); +} + +export const InfoLabel = (props) => { + const labelText = + (!props.needUpdate && (props.online && props.power === FRAME_POWER.ON && + props.noPlaylistAssigned && props.empty && !props.doesUserHavePlaylists)) ? + 'playlists.noPlaylistAssigned' : 'contents.noPhotosAvailable'; + return ( + + {props.needUpdate && + getTextLabel(i18n.tWithComponent( + 'frames.requireUpdate', + null, + [ + (text) => ( { props.openWebview(`${config.urls.softwareUpdateHelp}`); }}>{text}), + ], + (text) => ({text}), + ), undefined, undefined, true)} + {!props.needUpdate && props.online && props.power === FRAME_POWER.OFF && + getTextLabel(i18n.t('common.off'), () => {}, null, false) + } + {!props.needUpdate && !props.online && + unconnectedFrame( + i18n.t('frames.disconnectedFrameText'), + () => props.openWebview(i18n.t('urls.helpUrl')), + props.openWebview(i18n.t('urls.helpUrl'))} + textStyle="subhead" + style={styles.infoLink} + >{i18n.t('common.getHelp')} + , + ) + } + { props.empty && !props.needUpdate && props.online && getTextLabel(i18n.t(`${labelText}`), () => {}, null, false, undefined, undefined) } + + ); +}; + + +InfoLabel.propTypes = { + power: PropTypes.string, + online: PropTypes.bool, + needUpdate: PropTypes.bool, + empty: PropTypes.bool.isRequired, + openWebview: PropTypes.func, + noPlaylistAssigned: PropTypes.bool.isRequired, + doesUserHavePlaylists: PropTypes.bool.isRequired, +}; + +InfoLabel.defaultProps = { + power: FRAME_POWER.OFF, + online: false, + needUpdate: false, + openWebview: () => {}, +}; diff --git a/ioneapps-maagapp-ee31119a522d/src/components/Frames/miniFrame.js b/ioneapps-maagapp-ee31119a522d/src/components/Frames/miniFrame.js new file mode 100644 index 0000000..222fcc2 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/src/components/Frames/miniFrame.js @@ -0,0 +1,81 @@ +import React from 'react'; +import _ from 'lodash'; +import { View, Dimensions } from 'react-native'; +import PropTypes from 'prop-types'; +import { color } from 'nixplay-ui-kit'; +import { Bezel } from '~comp/Frames/bezel'; +import { FRAME_ORIENTATION, FRAME_POWER } from '~/store/frameConstants'; +import setTestID from '~/test/testUtils'; + +const frameContainerSize = 0.35; + +const styles = { + frameContent: { + alignSelf: 'center', + }, + frameScrollView: { + height: Dimensions.get('window').width, + top: Dimensions.get('window').height * 0.07, + }, + frameContainer: { + height: Dimensions.get('window').height * frameContainerSize, + width: Dimensions.get('window').height * frameContainerSize, + }, + infoLabel: { + paddingVertical: 8, + paddingHorizontal: 16, + backgroundColor: color.mistBlue04, + borderRadius: 8, + maxWidth: '90%', + flexDirection: 'row', + position: 'absolute', + bottom: '25%', + }, + infoText: { + marginHorizontal: 15, + color: color.white, + textAlign: 'left', + }, + icon: { + top: 2, + }, +}; + +export const MiniFrame = (props) => ( + + + + + +); + +MiniFrame.propTypes = { + currentFrame: PropTypes.object.isRequired, + playlistLength: PropTypes.number.isRequired, + thumbs: PropTypes.array.isRequired, + openPlaylist: PropTypes.func.isRequired, + carousel: PropTypes.bool.isRequired, + refreshing: PropTypes.bool.isRequired, + noPlaylistAssigned: PropTypes.bool.isRequired, + isConnected: PropTypes.bool.isRequired, + languageCode: PropTypes.string.isRequired, +}; diff --git a/ioneapps-maagapp-ee31119a522d/src/components/Frames/pair.js b/ioneapps-maagapp-ee31119a522d/src/components/Frames/pair.js new file mode 100644 index 0000000..a2f3c34 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/src/components/Frames/pair.js @@ -0,0 +1,79 @@ +import React from 'react'; +import { View } from 'react-native'; +import { Button, Text, color, transparentize } from 'nixplay-ui-kit'; +import PropTypes from 'prop-types'; +import i18n from '~/locale/i18n'; +import { debounceWrapper } from '~/lib/utils'; + + +const ButtonEx = debounceWrapper(Button); +const opacity = 0.76; + +const styles = { + frameContent: { + justifyContent: 'center', + }, + frameOuterBorder: { + borderWidth: 2, + borderColor: color.grey02, + borderStyle: 'dashed', + height: 259, + width: 208, + justifyContent: 'center', + alignItems: 'center', + backgroundColor: color.mistBlue01, + }, + frameInnerBorder: { + borderWidth: 2, + borderColor: color.grey02, + borderStyle: 'dashed', + height: 216, + width: 165, + justifyContent: 'center', + alignItems: 'center', + }, + pairButton: { + width: 70, + height: 70, + borderRadius: 35, + }, + pairText: { + marginTop: 5, + }, +}; + +export const PairEmptyFrame = (props) => ( + + + + + + + {i18n.t('frames.pairFrame')} + + + +); + +PairEmptyFrame.propTypes = { + pairFrame: PropTypes.func.isRequired, + isConnected: PropTypes.bool, +}; + + +PairEmptyFrame.defaultProps = { + isConnected: true, +}; diff --git a/ioneapps-maagapp-ee31119a522d/src/components/FriendActivities/commentItem.js b/ioneapps-maagapp-ee31119a522d/src/components/FriendActivities/commentItem.js new file mode 100644 index 0000000..525d4ff --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/src/components/FriendActivities/commentItem.js @@ -0,0 +1,187 @@ +import React from 'react'; +import { + StyleSheet, + View, + TouchableOpacity, +} from 'react-native'; +import { + Avatar, + Text, + color, +} from 'nixplay-ui-kit'; +// import _ from 'lodash'; +import PropTypes from 'prop-types'; +import moment from 'moment'; +import i18n from '~/locale/i18n'; + +// import { getSourceAvatar } from '~/lib/utils'; + +const styles = StyleSheet.create({ + container: { + backgroundColor: 'transparent', + marginLeft: 9, + marginRight: 9, + paddingTop: 4, + paddingBottom: 4, + flexDirection: 'row', + }, + mainContainer: { + flex: 1, + flexDirection: 'row', + }, + avatarContainer: { + width: 36, + height: 36, + position: 'relative', + bottom: 0, + left: 0, + aspectRatio: 1, + alignSelf: 'flex-end', + }, + avatar: { + aspectRatio: 1, + width: 32, + height: 32, + }, + badge: { + alignSelf: 'center', + }, + avatarBadgeContainer: { + position: 'absolute', + right: 0, + bottom: 0, + width: 16, + height: 16, + marginRight: 4, + alignItems: 'center', + justifyContent: 'center', + borderRadius: 8, + overflow: 'hidden', + backgroundColor: color.green, + }, + meBadgeContainer: { + width: 24, + height: 24, + alignSelf: 'flex-end', + justifyContent: 'center', + borderRadius: 16, + marginLeft: 4, + backgroundColor: color.mistBlue03, + overflow: 'hidden', + }, + meBadgeText: { + alignSelf: 'center', + }, + contentContainer: { + flex: 1, + flexDirection: 'row', + alignItems: 'stretch', + marginTop: 5, + marginBottom: 5, + }, + contentColumn: { + flex: 1, + flexDirection: 'column', + justifyContent: 'center', + }, + content: { + padding: 12, + borderRadius: 8, + }, + rowContainer: { + flex: 1, + flexDirection: 'row', + alignItems: 'flex-end', + marginRight: 14, + }, + rowContent: { + flexDirection: 'row', + }, + activityText: { + flex: 1, + marginRight: 4, + }, + nameText: { + flex: 1, + marginRight: 4, + }, + timeIndicator: { + position: 'relative', + top: 0, + right: 0, + marginBottom: 4, + }, +}); + + +export const CommentItem = (props) => { + const { comment, isOutgoing, fullName } = props; + const firstName = fullName.split(' ').slice(0, -1).join(' '); + const lastName = fullName.split(' ').slice(-1).join(' '); + const alignment = isOutgoing ? 'flex-end' : 'flex-start'; + const contentBackgroundColor = isOutgoing ? color.mistBlue02 : color.grey01; + const leftContentMargin = isOutgoing ? 35 : 0; + const rightContentMargin = isOutgoing ? 0 : 35; + + function renderTimestampText() { + if (isOutgoing) { + return `${i18n.t('common.me')} · ${moment(comment.timestamp).fromNow()}`; + } + return `${firstName} · ${moment(comment.timestamp).fromNow()}`; + } + return ( + + + {!isOutgoing && + + + + } + + + + {renderTimestampText()} + + + + + {comment.comment} + + + + + + + + ); +}; + +CommentItem.propTypes = { + comment: PropTypes.object.isRequired, + isOutgoing: PropTypes.bool.isRequired, + fullName: PropTypes.string.isRequired, +}; diff --git a/ioneapps-maagapp-ee31119a522d/src/components/FriendActivities/friendActivityActions.js b/ioneapps-maagapp-ee31119a522d/src/components/FriendActivities/friendActivityActions.js new file mode 100644 index 0000000..d3944c8 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/src/components/FriendActivities/friendActivityActions.js @@ -0,0 +1,162 @@ +import React, { Component } from 'react'; +import _ from 'lodash'; +import { connect } from 'react-redux'; +import PropTypes from 'prop-types'; +import { submit, isSubmitting } from 'redux-form'; +import { View } from 'react-native'; +import { Dialogue } from 'nixplay-ui-kit'; +import { ModalForm } from '~comp/Forms/modalForm'; + +import i18n from '~/locale/i18n'; + +import { DELETE_ACTIVITY_PHOTO } from '~/store/actionTypes'; + +export class FriendActivitiesActions extends Component { + static propTypes = { + actions: PropTypes.array, + route: PropTypes.string.isRequired, + event: PropTypes.string.isRequired, + toastError: PropTypes.func.isRequired, + } + + static defaultProps = { + actions: [ + DELETE_ACTIVITY_PHOTO, + ], + } + + constructor(props) { + super(props); + + this.state = { + payload: {}, + onActionSuccess: () => {}, + }; + + this.dialogue = this.dialogue.bind(this); + this.closeAction = this.closeAction.bind(this); + this.submitDeletePhoto = this.submitDeletePhoto.bind(this); + this.actionExists = this.actionExists.bind(this); + } + + onSubmitFail = (errors) => { + const { _error: error } = errors; + this.props.toastError({ + text: typeof error.toString === 'function' ? error.toString() : error, + }); + }; + + dialogue(action) { + switch (action) { + case DELETE_ACTIVITY_PHOTO: + return this.deletePhotoDialog; + default: + return this.modalNameForm; + } + } + + doAction(action, payload, onActionSuccess) { + if (this.props.actions.indexOf(action) < 0) return; + this.setState({ + payload, + selectedAction: action, + onActionSuccess, + }, () => { + this.dialogue(action).open(); + }); + } + + closeAction(callback) { + this.dialogue(this.state.selectedAction).close(); + this.setState({ + payload: {}, + onActionSuccess: () => {}, + }, () => { + if (typeof callback === 'function') callback(); + }); + } + + submitDeletePhoto(values, dispatch) { + return new Promise((resolve, reject) => { + dispatch({ + type: DELETE_ACTIVITY_PHOTO, + payload: { + s3Key: this.state.payload.s3Key, + albumId: this.state.payload.albumId, + timestamp: this.state.payload.timestamp, + friend: this.state.payload.friend, + resolve, + reject, + }, + }); + }); + } + + actionExists(actions) { + return (_.intersection(this.props.actions, actions)).length > 0; + } + + render() { + let bodyMessage = ''; + let alertButton = 'common.delete'; + let alertTitle; + let eventAction; + if (this.props.event === 'deletePhoto') { + eventAction = this.submitDeletePhoto; + alertTitle = 'common.permanentDelete'; + bodyMessage = i18n.t('common.deletePermanentConfirmation'); + alertButton = 'common.delete'; + } + return ( + + {this.actionExists([DELETE_ACTIVITY_PHOTO]) && + { this.deletePhotoDialog = ref; }} + form={`${this.props.route}DeletePhotoForm`} + onSubmit={eventAction} + onSubmitSuccess={() => { + this.closeAction(this.state.onActionSuccess); + }} + onSubmitFail={(errors) => { + this.onSubmitFail(errors); + this.deletePhotoDialog.reset(); + this.closeAction(this.state.onActionSuccess); + }} + onCancel={this.closeAction} + submitText={i18n.t(alertButton)} + submitColor="red" + > + {i18n.t(alertTitle)} + {bodyMessage} + } + + ); + } +} + +const mapStateToProps = (state, ownProps) => { + const { route, event } = ownProps; + return { + deleteFormMeta: { + submitting: isSubmitting(`${route}DeleteForm`)(state), + }, + event, + }; +}; + +const mapActionsToProps = (dispatch, ownProps) => { + const { route } = ownProps; + return { + submitDeleteForm() { + dispatch(submit(`${route}DeleteForm`)); + }, + }; +}; + + +export default connect( + mapStateToProps, + mapActionsToProps, + null, + { forwardRef: true }, +)(FriendActivitiesActions); diff --git a/ioneapps-maagapp-ee31119a522d/src/components/FriendActivities/listItem.js b/ioneapps-maagapp-ee31119a522d/src/components/FriendActivities/listItem.js new file mode 100644 index 0000000..e72f2a0 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/src/components/FriendActivities/listItem.js @@ -0,0 +1,343 @@ +import React from 'react'; +import { + StyleSheet, + View, + TouchableOpacity, +} from 'react-native'; +import { + Avatar, + NixplayIcon as Icon, + Text, + color, +} from 'nixplay-ui-kit'; +import _ from 'lodash'; +import FastImage from 'react-native-fast-image'; + +import i18n from '~/locale/i18n'; +import PropTypes from 'prop-types'; +import moment from 'moment/min/moment-with-locales'; +import { debounceWrapper } from '~/lib/utils'; +import { activityMessage, isOutgoingActivity } from '~/lib/activities'; +import { MediaRow } from './mediaRow'; + +const styles = StyleSheet.create({ + container: { + backgroundColor: 'transparent', + flexDirection: 'column', + }, + mainContainer: { + flex: 1, + marginLeft: 9, + marginRight: 9, + paddingTop: 4, + paddingBottom: 4, + flexDirection: 'row', + }, + newMessageContainer: { + flex: 1, + marginTop: 16, + marginBottom: 8, + justifyContent: 'center', + }, + newMessageText: { + alignSelf: 'center', + position: 'absolute', + backgroundColor: 'white', + paddingRight: 4, + paddingLeft: 4, + }, + newMessageLine: { + width: '100%', + height: 1, + backgroundColor: color.mistBlue03, + position: 'absolute', + alignSelf: 'center', + }, + avatarContainer: { + width: 36, + height: 36, + position: 'relative', + bottom: 0, + left: 0, + aspectRatio: 1, + alignSelf: 'flex-end', + }, + avatar: { + aspectRatio: 1, + width: 32, + height: 32, + }, + badge: { + alignSelf: 'center', + }, + avatarBadgeContainer: { + position: 'absolute', + right: 0, + bottom: 0, + width: 16, + height: 16, + marginRight: 4, + alignItems: 'center', + justifyContent: 'center', + borderRadius: 8, + overflow: 'hidden', + backgroundColor: color.green, + }, + meBadgeContainer: { + width: 24, + height: 24, + alignSelf: 'flex-end', + justifyContent: 'center', + borderRadius: 16, + marginLeft: 4, + overflow: 'hidden', + }, + contentContainer: { + flex: 1, + flexDirection: 'row', + alignItems: 'stretch', + marginTop: 5, + marginBottom: 5, + }, + contentColumn: { + flex: 1, + flexDirection: 'column', + justifyContent: 'center', + overflow: 'hidden', + }, + content: { + padding: 12, + borderRadius: 8, + }, + rowContainer: { + flex: 1, + flexDirection: 'row', + alignItems: 'stretch', + marginRight: 14, + }, + rowContent: { + flexDirection: 'row', + }, + activityText: { + flex: 1, + marginRight: 4, + }, + nameText: { + flex: 1, + marginRight: 4, + }, + textContainer: { + width: '75%', + }, + textContent: { + marginLeft: 4, + }, + timeIndicator: { + position: 'relative', + top: 0, + right: 0, + marginBottom: 4, + }, +}); + + +export const ActivityListItem = (props) => { + const { + activity, + firstName, + lastName, + languageCode, + onMediaItemPress, + uuid, + source: avatarSource, + } = props; + const TouchableOpacityEx = debounceWrapper(TouchableOpacity); + function renderContent() { + if (activity.connectionEvent || activity.deletedPhotos) { + return ({activityMessage(activity)}); + } else if (activity.mediaExchange) { + return ( + {}} + photos={activity.mediaExchange.content.photos} + mediaKeys={activity.mediaExchange.content.successKeys} + data={activity.mediaExchange.content.photos.map((item, index) => ({ + url: activity.mediaExchange.content.thumbnailUrls[index], + orientation: _.has(activity.mediaExchange.content, `metadata['${item}'].orientation`) + ? activity.mediaExchange.content.metadata[item].orientation + : 0, + }))} + onOpenMedia={(index) => onMediaItemPress(activity, index, false)} + /> + ); + } else if (activity.comment) { + return ( + + {}} + photos={[activity.comment.s3key]} + data={[{ + url: activity.comment.photoUrl, + orientation: _.has(activity.comment.content.metadata, `['${activity.comment.s3key}'].orientation`) + ? activity.comment.content.metadata[activity.comment.s3key].orientation + : 0, + }]} + onOpenMedia={() => { + const index = _.indexOf(activity.comment.content.photos, activity.comment.s3key); + onMediaItemPress(activity, index, !(activity.comment.s3key.indexOf('DELETED') > -1)); + }} + /> + {!(activity.comment.content.photos[0].indexOf('DELETED') > -1) && + + + {activityMessage(activity)} + + } + + ); + } + return null; + } + + function getTimestamp() { + moment.locale(`${languageCode}`); + let { timestamp } = activity; + if (timestamp > moment().utc().valueOf()) { + timestamp = moment().utc().valueOf() - 1; + } + return `${moment(timestamp).fromNow()}`; + } + + const alignment = isOutgoingActivity(activity) ? 'flex-end' : 'flex-start'; + const contentBackgroundColor = isOutgoingActivity(activity) ? color.mistBlue02 : color.grey01; + let badgeIcon = ''; + let badgeBackgroundColor = 'transparent'; + const leftContentMargin = isOutgoingActivity(activity) ? 35 : 0; + const rightContentMargin = isOutgoingActivity(activity) ? 0 : 35; + + // get activity type's icon and color + if (activity.connectionEvent) { + badgeIcon = 'checkbox-circle-o'; + badgeBackgroundColor = color.green; + } else if (activity.mediaExchange) { + badgeIcon = 'photo'; + badgeBackgroundColor = color.blue; + } else if (activity.comment) { + badgeIcon = 'chat'; + badgeBackgroundColor = color.orange; + } else if (activity.deletedPhotos) { + badgeIcon = 'trash'; + badgeBackgroundColor = color.red; + } + // avatar filter + const source = (_.has(avatarSource, 'uri') && avatarSource.uri !== null) ? { ...avatarSource, cache: FastImage.cacheControl.web, priority: FastImage.priority.high } : null; + return ( + { + if (activity.comment) { + const index = _.indexOf(activity.comment.content.photos, activity.comment.s3key); + onMediaItemPress(activity, index, !(activity.comment.s3key.indexOf('DELETED') > -1)); + } + }} + > + {activity.newMessage && + + + + {i18n.t('friends.NewMessages')} + + + } + + {!isOutgoingActivity(activity) && + + + + + + + } + + + + {isOutgoingActivity(activity) && `${i18n.t('common.me')} · `}{getTimestamp()} + + + {renderContent()} + + + {isOutgoingActivity(activity) && + + + + } + + + + ); +}; + +ActivityListItem.propTypes = { + activity: PropTypes.object.isRequired, + firstName: PropTypes.string, + lastName: PropTypes.string, + onMediaItemPress: PropTypes.func, + uuid: PropTypes.string, + source: PropTypes.object.isRequired, + languageCode: PropTypes.string, +}; + +ActivityListItem.defaultProps = { + firstName: '', + lastName: '', + onMediaItemPress: () => {}, + uuid: '', + languageCode: '', +}; diff --git a/ioneapps-maagapp-ee31119a522d/src/components/FriendActivities/mediaRow.js b/ioneapps-maagapp-ee31119a522d/src/components/FriendActivities/mediaRow.js new file mode 100644 index 0000000..5b93e05 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/src/components/FriendActivities/mediaRow.js @@ -0,0 +1,181 @@ +import React from 'react'; +import { + View, + StyleSheet, + TouchableOpacity, + Dimensions, + FlatList, +} from 'react-native'; +import _ from 'lodash'; +import { Thumbnail, Text, NixplayIcon as Icon, color } from 'nixplay-ui-kit'; +import PropTypes from 'prop-types'; +import { debounceWrapper } from '~/lib/utils'; +import { orientationToRotation } from '~/lib/sdk/helper'; + +const itemLimit = 4; +const { width: screenWidth } = Dimensions.get('window'); +const itemSize = screenWidth / (itemLimit + 2); + +const styles = StyleSheet.create({ + container: { + flex: 1, + }, + mediaContainer: { + width: itemSize, + height: itemSize, + aspectRatio: 1, + margin: 3, + /** + * James Kong + * avoid shadow warning message by setting background to container + * */ + backgroundColor: color.white, + borderRadius: 4, + shadowColor: 'black', + shadowOpacity: 0.2, + shadowRadius: 2, + shadowOffset: { x: 0, y: 0 }, + }, + thumbnail: { + flex: 1, + borderRadius: 4, + overflow: 'hidden', + }, + overflowIndicator: { + flex: 1, + backgroundColor: 'rgba(0,0,0,0.5)', + position: 'absolute', + alignSelf: 'center', + alignItems: 'center', + justifyContent: 'center', + top: 0, + right: 0, + left: 0, + bottom: 0, + borderRadius: 4, + overflow: 'hidden', + }, + videoHintContainer: { + flex: 1, + backgroundColor: 'rgba(255,255,255,0.87)', + borderRadius: 16, + position: 'absolute', + bottom: 0, + left: 0, + paddingRight: 8, + paddingLeft: 8, + paddingBottom: 3, + paddingTop: 3, + margin: 4, + shadowColor: 'black', + shadowOffset: { x: 0, y: 2 }, + shadowRadius: 4, + shadowOpacity: 0.3, + }, + errorBg: { + flex: 1, + alignItems: 'center', + justifyContent: 'center', + backgroundColor: color.mistBlue01, + }, +}); + +export const MediaRow = (props) => { + const filteredData = _.dropRight(props.data.map((media, index) => ({ + url: media.url, + rotation: orientationToRotation(media.orientation) + ? orientationToRotation(media.orientation).rotation + : 0, + photo: props.photos[index], + index, + })), props.data.length - itemLimit); + const TouchableOpacityEx = debounceWrapper(TouchableOpacity); + + function isMediaDeleted(url) { + return _.endsWith(url, '.DELETED'); + } + + const { uuid } = props; + + return ( + {}} + data={filteredData} + refreshing={false} + contentContainerStyle={styles.container} + numColumns={itemLimit} + numPerPage={itemLimit} + keyExtractor={(media) => `${media.url}`} + getItemLayout={(data, index) => ( + { length: itemSize, offset: itemSize * index, index } + )} + renderItem={({ item, index }) => ( + + props.onOpenMedia(index) + } + > + {!isMediaDeleted(item.photo) && + + } + {isMediaDeleted(item.photo) && + + + + } + {index === itemLimit - 1 && props.data.length - itemLimit > 0 && + + + {(props.data.length + 1) - itemLimit}+ + + + } + {props.mediaKeys && props.mediaKeys.length > index && + !_.isEmpty(props.mediaKeys[index]) && + _.startsWith(props.mediaKeys[index], 'video:', 0) && + + + + } + + )} + /> + ); +}; + + +MediaRow.propTypes = { + data: PropTypes.array, + photos: PropTypes.array, + mediaKeys: PropTypes.array, + onOpenMedia: PropTypes.func, + uuid: PropTypes.string, +}; + +MediaRow.defaultProps = { + data: [], + photos: [], + mediaKeys: [], + onOpenMedia: () => {}, + uuid: '', +}; diff --git a/ioneapps-maagapp-ee31119a522d/src/components/FriendActivities/timestampedList.js b/ioneapps-maagapp-ee31119a522d/src/components/FriendActivities/timestampedList.js new file mode 100644 index 0000000..ad434c9 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/src/components/FriendActivities/timestampedList.js @@ -0,0 +1,192 @@ +import React, { Component } from 'react'; +import _ from 'lodash'; +import { FlatList, RefreshControl, View, Platform, StyleSheet, PixelRatio } from 'react-native'; +import { Loading, color, ContentGridEmpty } from 'nixplay-ui-kit'; +import { checkInternetConnection } from 'react-native-offline'; + +import PropTypes from 'prop-types'; +import i18n from '~/locale/i18n'; +import { ActivityListItem } from '~/components/FriendActivities/listItem'; + +const styles = StyleSheet.create({ + loadingContainer: { + backgroundColor: color.white, + flex: 1, + position: 'absolute', + width: '100%', + height: '100%', + justifyContent: 'center', + }, + baseContainer: { + opacity: 1, + }, +}); + +const isAndroid = Platform.OS !== 'ios'; +const numItemRender = (PixelRatio.get() === 1) ? 10 : 19; + +export class TimestampedList extends Component { + static propTypes = { + data: PropTypes.array.isRequired, + getData: PropTypes.func.isRequired, + loading: PropTypes.bool.isRequired, + firstName: PropTypes.string.isRequired, + lastName: PropTypes.string.isRequired, + onMediaItemPress: PropTypes.func.isRequired, + onEndReached: PropTypes.func.isRequired, + numPerPage: PropTypes.number, + uuid: PropTypes.string.isRequired, + source: PropTypes.any, + languageCode: PropTypes.string, + } + + static defaultProps = { + numPerPage: 20, + source: null, + languageCode: '', + } + + constructor(props) { + super(props); + + this.state = { + refreshing: false, + didScroll: false, + isVisibleLoading: true, + loading: false, + }; + + this.debouncerScroll = _.debounce(() => { + if (!this.state.didScroll && !_.isEmpty(this.flatList)) { + this.flatList.scrollToEnd({ animated: false }); + } + }, 400, { leading: false, trailing: true }); + this.refreshData = this.refreshData.bind(this); + this.onEndReached = this.onEndReached.bind(this); + } + + static getDerivedStateFromProps(nextProps, prevState) { + if ((nextProps.loading !== prevState.loading)) { + return { loading: nextProps.loading, isVisibleLoading: false }; + } + return null; + } + + componentWillUnmount() { + if (this.debouncerScroll) { + this.debouncerScroll.cancel(); + } + } + + onEndReached() { + if (this.state.isVisibleLoading) { + this.setState({ isVisibleLoading: false }); + } + } + + onProcessAvatar = (avatar) => { + if (_.has(avatar, 'uri')) { + this.props.onEndReached(avatar); + } + } + + refreshData = () => { + if (this.debouncerScroll) { + this.debouncerScroll.cancel(); + } + checkInternetConnection().then(isConnected => { + if (isConnected) { + if (this.state.refreshing) return; + if (!this.props.loading && !_.isEmpty(this)) { + this.setState({ + refreshing: true, + didScroll: true, + }, () => { + this.props.getData( + true, + () => { // resolve + this.setState({ refreshing: false }); + }, + () => { // reject + this.setState({ refreshing: false }); + }, + ); + }); + } + } + }); + } + + renderFooter = () => (); + + renderLoading = (opacity) => ( + + + + ); + + renderEmptyPhotos = () => ( + + + + Beneficiary Photos + Add required photos + + + ); + + render() { + const opacity = (this.state.isVisibleLoading) ? 1 : 0; + return ( + + { (!_.isEmpty(this.props.photos) ? ( + { this.flatList = comp; }} + data={this.props.data} + contentContainerStyle={styles.baseContainer} + showsVerticalScrollIndicator={false} + removeClippedSubviews={isAndroid} + initialNumToRender={numItemRender} + maxToRenderPerBatch={numItemRender} + onContentSizeChange={() => { + this.debouncerScroll(); + }} + onEndReached={this.onEndReached} + renderItem={({ item }) => { + this.onProcessAvatar(this.props.source); + return ( + + ); + }} + refreshControl={ + { this.refreshData(); }} + title="" + /> + } + ListFooterComponent={this.renderFooter} + /> + ) : (this.renderEmptyPhotos()) + } + {this.renderLoading(opacity)} + + ); + } +} diff --git a/ioneapps-maagapp-ee31119a522d/src/components/Friends/badge.js b/ioneapps-maagapp-ee31119a522d/src/components/Friends/badge.js new file mode 100644 index 0000000..33c117f --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/src/components/Friends/badge.js @@ -0,0 +1,43 @@ +import React from 'react'; +import { + StyleSheet, + View, +} from 'react-native'; +import { + Text, + color, +} from 'nixplay-ui-kit'; +import PropTypes from 'prop-types'; + +const styles = StyleSheet.create({ + badge: { + position: 'absolute', + paddingLeft: 4, + paddingRight: 4, + height: 20, + width: 20, + borderRadius: 10, + marginBottom: 14, + }, + badgeText: { + color: color.white, + alignSelf: 'center', + alignContent: 'center', + }, +}); + + +export const Badge = (props) => ( + + + +); + + +Badge.propTypes = { + style: PropTypes.any.isRequired, +}; diff --git a/ioneapps-maagapp-ee31119a522d/src/components/Friends/empty.js b/ioneapps-maagapp-ee31119a522d/src/components/Friends/empty.js new file mode 100644 index 0000000..69ccfa2 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/src/components/Friends/empty.js @@ -0,0 +1,109 @@ +import React from 'react'; +import { + StyleSheet, + View, +} from 'react-native'; +import { + Button, + Text, + NixplayIcon as Icon, +} from 'nixplay-ui-kit'; + +import i18n from '~/locale/i18n'; +import PropTypes from 'prop-types'; +import OfflineEmpty from '~comp/offlineEmpty'; + +const styles = StyleSheet.create({ + container: { + height: '100%', + alignItems: 'center', + justifyContent: 'space-between', + }, + loadingContainer: { + height: '100%', + alignItems: 'center', + justifyContent: 'center', + }, + buttonContainer: { + height: 144, + }, + textContainer: { + justifyContent: 'center', + alignItems: 'center', + margin: 40, + }, + centerIcon: { + margin: 16, + }, + centerText: { + textAlign: 'center', + }, + inviteButton: { + minWidth: 184, + }, +}); + +export const FriendsEmptyComponent = (props) => (props.loading ? ( + +) : ( + + + + + {i18n.t('friends.startInviteFriends')} + + + {i18n.t('friends.asFriendsText')} + + + + + + +)); + +FriendsEmptyComponent.propTypes = { + loading: PropTypes.bool.isRequired, + onInvite: PropTypes.func.isRequired, + isConnected: PropTypes.bool.isRequired, +}; + + +export const FriendsEmpty = (props) => ( + props.isConnected ? ( + + ) : ( + + + + ) +); + +FriendsEmpty.propTypes = { + isConnected: PropTypes.bool.isRequired, +}; diff --git a/ioneapps-maagapp-ee31119a522d/src/components/Friends/friendsActions.js b/ioneapps-maagapp-ee31119a522d/src/components/Friends/friendsActions.js new file mode 100644 index 0000000..6baee30 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/src/components/Friends/friendsActions.js @@ -0,0 +1,216 @@ +import React, { Component } from 'react'; +import _ from 'lodash'; +import { connect } from 'react-redux'; +import PropTypes from 'prop-types'; +import { submit, isSubmitting, isValid } from 'redux-form'; +import { View } from 'react-native'; +import { Text, Dialogue } from 'nixplay-ui-kit'; +import { ModalForm } from '~comp/Forms/modalForm'; + +import i18n from '~/locale/i18n'; + +import { REJECT_FRIEND_INVITE, SHOW_TOAST_ERROR } from '~/store/actionTypes'; +import { FRIEND_STATUS_PENDING } from '~/store/contentTypes'; + +export class FriendsActionsComponent extends Component { + static propTypes = { + actions: PropTypes.array, + route: PropTypes.string.isRequired, + event: PropTypes.string.isRequired, + status: PropTypes.string.isRequired, + toastError: PropTypes.func.isRequired, + } + + static defaultProps = { + actions: [ + REJECT_FRIEND_INVITE, + ], + } + + constructor(props) { + super(props); + + this.state = { + selectedInvite: {}, + onActionSuccess: () => {}, + }; + + this.dialogue = this.dialogue.bind(this); + this.closeAction = this.closeAction.bind(this); + this.submitRejectInvite = this.submitRejectInvite.bind(this); + this.submitUnfriend = this.submitUnfriend.bind(this); + this.actionExists = this.actionExists.bind(this); + + this.onSubmitFail = (errors) => { + const { _error: error } = errors; + this.props.toastError({ + text: typeof error.toString === 'function' ? error.toString() : error, + }); + }; + } + + dialogue(action) { + switch (action) { + case REJECT_FRIEND_INVITE: + return this.rejectInviteDialogue; + default: + return this.modalNameForm; + } + } + + doAction(action, invite, onActionSuccess) { + if (this.props.actions.indexOf(action) < 0) return; + this.setState({ + selectedAction: action, + selectedInvite: invite, + onActionSuccess, + }, () => { + this.dialogue(action).open(); + }); + } + + closeAction(callback) { + this.dialogue(this.state.selectedAction).close(); + this.setState({ + selectedAction: '', + selectedInvite: -1, + onActionSuccess: () => {}, + }, () => { + if (typeof callback === 'function') callback(); + }); + } + + submitUnfriend(values, dispatch) { + return new Promise((resolve, reject) => { + dispatch({ + type: this.state.selectedInvite.type, + payload: { + lookupKey: this.state.selectedInvite.requester, + resolve, + reject, + }, + }); + }); + } + + submitRejectInvite(values, dispatch) { + return new Promise((resolve, reject) => { + dispatch({ + ...values, + type: this.state.selectedAction, + payload: { + requester: this.state.selectedInvite.requester, + type: this.state.selectedInvite.type, + resolve, + reject, + }, + }); + }); + } + + actionExists(actions) { + return (_.intersection(this.props.actions, actions)).length > 0; + } + + render() { + let bodyMessage = i18n.tWithComponent( + 'friends.rejectFriendInviteConfirm', + { + requesterName: (this.state.selectedInvite) ? `${this.state.selectedInvite.requesterFirstName} ${this.state.selectedInvite.requesterLastName}` : '', + }, + [ + (text) => ({text}), + ], + (text) => ({text}), + ); + let alertButton = 'common.decline'; + let eventAction = this.submitUnfriend; + if (this.props.event === 'unfriend') { + bodyMessage = i18n.tWithComponent( + 'friends.removeFriendConfirm', + { + requesterName: (this.state.selectedInvite) ? `${this.state.selectedInvite.requesterFirstName} ${this.state.selectedInvite.requesterLastName}` : '', + }, + [ + (text) => ({text}), + ], + (text) => ({text}), + ); + alertButton = 'common.remove'; + } + if (this.props.status === FRIEND_STATUS_PENDING) { + eventAction = this.submitRejectInvite; + bodyMessage = i18n.t('friends.withdrawFriendInviteConfirm'); + alertButton = 'common.ok'; + } else if (_.isEmpty(this.props.status)) { + eventAction = this.submitRejectInvite; + } + return ( + + {this.actionExists([REJECT_FRIEND_INVITE]) && + { this.rejectInviteDialogue = ref; }} + form={`${this.props.route}RejectInviteForm`} + onSubmit={eventAction} + onSubmitSuccess={() => { + this.state.onActionSuccess.call(); + this.closeAction(); + }} + onSubmitFail={(errors) => { + this.onSubmitFail(errors); + this.rejectInviteDialogue.reset(); + this.closeAction(this.state.onActionSuccess); + }} + onCancel={this.closeAction} + submitText={i18n.t(alertButton)} + submitColor="red" + > + {i18n.t('common.confirmation')} + {bodyMessage} + } + + ); + } +} + +const mapStateToProps = (state, ownProps) => { + const { route, event } = ownProps; + let userStatus = ''; + if (_.has(ownProps, 'status')) { + userStatus = ownProps.status; + } + return { + nameFormMeta: { + submitting: isSubmitting(`${route}NameForm`)(state), + valid: isValid(`${route}NameForm`)(state), + }, + deleteFormMeta: { + submitting: isSubmitting(`${route}DeleteForm`)(state), + }, + event, + status: userStatus, + }; +}; + +const mapActionsToProps = (dispatch, ownProps) => { + const { route } = ownProps; + return { + submitNameForm() { + dispatch(submit(`${route}NameForm`)); + }, + submitDeleteForm() { + dispatch(submit(`${route}DeleteForm`)); + }, + toastError(payload) { + dispatch({ type: SHOW_TOAST_ERROR, payload }); + }, + }; +}; + + +export default connect( + mapStateToProps, + mapActionsToProps, + null, + { forwardRef: true }, +)(FriendsActionsComponent); diff --git a/ioneapps-maagapp-ee31119a522d/src/components/Friends/inviteListItem.js b/ioneapps-maagapp-ee31119a522d/src/components/Friends/inviteListItem.js new file mode 100644 index 0000000..8c924fb --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/src/components/Friends/inviteListItem.js @@ -0,0 +1,168 @@ +import React from 'react'; +import { + StyleSheet, + View, + TouchableOpacity, +} from 'react-native'; +import { + Avatar, + Text, + NixplayIcon as Icon, + color, + transparentize, +} from 'nixplay-ui-kit'; +import PropTypes from 'prop-types'; +import { debounceWrapper } from '~/lib/utils'; + +const TouchableOpacityEx = debounceWrapper(TouchableOpacity); + +const styles = StyleSheet.create({ + container: { + backgroundColor: 'white', + paddingTop: 8, + paddingLeft: 20, + paddingRight: 20, + paddingBottom: 8, + flexDirection: 'row', + }, + highlighted: { + backgroundColor: color.mistBlue02, + }, + mainContainer: { + flex: 1, + flexDirection: 'row', + }, + avatar: { + width: 56, + height: 56, + aspectRatio: 1, + }, + textContainer: { + marginLeft: 7, + marginRight: 7, + marginTop: 5, + position: 'relative', + left: 4, + right: 4, + flex: 1, + }, + accessoryContainer: { + flexDirection: 'row', + justifyContent: 'center', + alignItems: 'center', + }, + ctaButton: { + width: 32, + height: 32, + alignSelf: 'center', + alignItems: 'center', + justifyContent: 'center', + borderRadius: 16, + }, +}); + + +export const InviteListItem = ({ + isConnected, + invite, + highlighted, + status, + onAccept, + onReject, +}) => { + function onRejectInvite() { + onReject(invite); + } + + function onAcceptInvite() { + onAccept(invite); + } + return ( + + + + + + + + {invite.requesterFirstName} {invite.requesterLastName} + + + {status} + + + + + + + + + + + + + ); +}; + +InviteListItem.defaultProps = { + highlighted: false, + isConnected: true, + status: '', +}; + +InviteListItem.propTypes = { + invite: PropTypes.object.isRequired, + highlighted: PropTypes.bool, + status: PropTypes.string, + onAccept: PropTypes.func.isRequired, + onReject: PropTypes.func.isRequired, + isConnected: PropTypes.bool, +}; diff --git a/ioneapps-maagapp-ee31119a522d/src/components/Friends/listItem.js b/ioneapps-maagapp-ee31119a522d/src/components/Friends/listItem.js new file mode 100644 index 0000000..9eec264 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/src/components/Friends/listItem.js @@ -0,0 +1,195 @@ +import React from 'react'; +import _ from 'lodash'; +import { + StyleSheet, + View, + TouchableOpacity, +} from 'react-native'; +import { + Avatar, + Text, + color, +} from 'nixplay-ui-kit'; +import PropTypes from 'prop-types'; +import moment from 'moment/min/moment-with-locales'; +import i18n from '~/locale/i18n'; +import { activityMessage } from '~/lib/activities'; +import { debounceWrapper } from '~/lib/utils'; +import { Badge } from './badge'; + +const TouchableOpacityEx = debounceWrapper(TouchableOpacity); + +const styles = StyleSheet.create({ + container: { + backgroundColor: 'transparent', + marginTop: 8, + marginBottom: 8, + marginLeft: 20, + marginRight: 20, + flexDirection: 'row', + }, + mainContainer: { + flex: 1, + flexDirection: 'row', + }, + avatarContainer: { + width: 56, + height: 56, + aspectRatio: 1, + }, + avatar: { + aspectRatio: 1, + }, + avatarBadge: { + position: 'absolute', + right: 0, + top: 0, + width: 12, + height: 12, + backgroundColor: color.red, + }, + textContainer: { + marginLeft: 11, + marginTop: 5, + marginBottom: 5, + position: 'relative', + flex: 1, + }, + rowContainer: { + flex: 1, + flexDirection: 'row', + alignItems: 'stretch', + }, + activityText: { + flex: 1, + marginRight: 4, + }, + nameText: { + flex: 1, + marginRight: 4, + }, + timeIndicator: { + position: 'relative', + top: 0, + right: 0, + alignSelf: 'flex-start', + }, +}); + + +const FriendListItemComponent = (props) => { + const { friend, onPress } = props; + const lastSeenTimestamp = friend.lastSeenTimestamp ? friend.lastSeenTimestamp : 0; + let firstName = ''; + let lastName = ''; + + if (friend.fullName) { + firstName = friend.fullName.split(' ').slice(0, -1).join(' '); + lastName = friend.fullName.split(' ').slice(-1).join(' '); + } + + function renderActivityText() { + let status = ''; + if (friend.activity) { + status = activityMessage(friend.activity); + } else if (friend.status === 'pending') { + status = i18n.t('common.waitingAcceptance'); + } + return status; + } + + function getTimestamp() { + let outputTimestamp; + moment.locale(`${props.languageCode}`); + if (friend.activity) { + outputTimestamp = friend.activity.timestamp; + } else if (friend.requestTimestamp) { + outputTimestamp = friend.requestTimestamp; + } + if (outputTimestamp > 0) { + if (outputTimestamp > moment().utc().valueOf()) { + outputTimestamp = moment().utc().valueOf() - 1; + } + return moment(outputTimestamp).fromNow(); + } + return ''; + } + + function onItemPress() { + onPress(friend); + } + + const { activity, avatar } = friend; + const isBadged = friend.activity && activity.sender !== ' ' && lastSeenTimestamp < friend.activity.timestamp; + const sourceUri = (!_.isEmpty(avatar) && avatar.url.indexOf('ui-avatars') === -1) ? avatar.url : null; + return ( + { onItemPress(); }} + > + + + + {isBadged && + + } + + + + + {friend.fullName} + + {(friend.activity || friend.requestTimestamp) && + + { getTimestamp() } + + } + + + + { renderActivityText() } + + + + + + ); +}; + +FriendListItemComponent.propTypes = { + friend: PropTypes.object.isRequired, + languageCode: PropTypes.string, + onPress: PropTypes.func.isRequired, +}; + +FriendListItemComponent.defaultProps = { + languageCode: 'en', +}; + +export const FriendListItem = React.memo(FriendListItemComponent); diff --git a/ioneapps-maagapp-ee31119a522d/src/components/Friends/playlistCheckbox.js b/ioneapps-maagapp-ee31119a522d/src/components/Friends/playlistCheckbox.js new file mode 100644 index 0000000..f7107ab --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/src/components/Friends/playlistCheckbox.js @@ -0,0 +1,221 @@ +import React from 'react'; +import _ from 'lodash'; +import { + StyleSheet, + View, + TouchableOpacity, +} from 'react-native'; +import { + Text, + NixplayIcon as Icon, + Image, + color, +} from 'nixplay-ui-kit'; +import { debounceWrapper } from '~/lib/utils'; +import i18n from '~/locale/i18n'; +import PropTypes from 'prop-types'; +// import playlists from '../../lib/sdk/playlists'; + +const styles = StyleSheet.create({ + inputContainer: { + paddingTop: 8, + paddingLeft: 20, + paddingRight: 20, + paddingBottom: 12, + }, + inputElement: { + paddingBottom: 6, + }, + cbContainer: { + flex: 1, + flexDirection: 'row', + }, + cbContent: { + flex: 1, + flexDirection: 'column', + }, + iconSpace: { + paddingRight: 10, + }, + plistContainer: { + flex: 1, + flexDirection: 'row', + borderStyle: 'solid', + borderWidth: 1, + borderTopRightRadius: 4, + borderTopLeftRadius: 4, + borderBottomRightRadius: 4, + borderBottomLeftRadius: 4, + borderColor: color.borderMistBlue, + padding: 2, + alignItems: 'center', + marginBottom: 20, + }, + thumbnailsContainer: { + margin: 5, + alignItems: 'center', + justifyContent: 'center', + marginLeft: 8, + width: 60, + height: 60, + }, + textContainer: { + flex: 1, + flexDirection: 'column', + justifyContent: 'center', + }, + textInput: { + display: 'none', + }, + thumbs: { + // position: 'absolute', + borderRadius: 5, + width: 60, + height: 60, + overflow: 'hidden', + }, + iconBlank: { + position: 'absolute', + borderRadius: 5, + width: 25, + height: 25, + margin: 17.5, + }, + errorBg: { + backgroundColor: color.mistBlue01, + alignItems: 'center', + justifyContent: 'center', + }, +}); + +const ThumbNail = (playlist) => + ( + (!_.isEmpty(playlist.thumbs)) ? ( + playlist.thumbs.map((thumb, i) => ( + (i === 0) && + + + + )) + ) : ( + + + + ) + ); + +export const PlaylistCheckbox = (props) => { + const { + recent, playlist, action, select, + } = props; + const hasFrame = _.has(recent, 'frames'); + const title = (!_.isEmpty(recent.name)) ? recent.name : i18n.t('playlists.noPlaylistAvailable'); + let colorFrameTxt = 'blue'; + let frameTxt = i18n.t('frames.onNFrame', { count: hasFrame ? recent.frames.length : 0 }); + if (hasFrame && recent.frames.length === 0) { + frameTxt = i18n.t('frames.noFrameAssigned'); + colorFrameTxt = 'grey02'; + } + if (_.isEmpty(recent.name)) { + frameTxt = i18n.t('playlists.addNewPlaylist'); + } + const isActiveStyle = (playlist.get(0).status === true) ? '' : { opacity: 0.5 }; + const TouchableOpacityEx = debounceWrapper(TouchableOpacity); + return ( + + {/* { (!_.isEmpty(recent)) ? + } */} + + action(0)} + > + + + + action(0)} + > + + { i18n.t('friends.defaultPlaylistWhenReceive') } + + + select(-1)} + style={[styles.plistContainer]} + > + + + + + {title} + + + {frameTxt} + + + + + + + + action(1)} + style={styles.cbContainer} + > + + + + { i18n.t('playlists.doNotSend') } + + + + + ); +}; + +PlaylistCheckbox.propTypes = { + recent: PropTypes.object.isRequired, + playlist: PropTypes.object.isRequired, + action: PropTypes.func.isRequired, + select: PropTypes.func.isRequired, +}; diff --git a/ioneapps-maagapp-ee31119a522d/src/components/Friends/playlistItem.js b/ioneapps-maagapp-ee31119a522d/src/components/Friends/playlistItem.js new file mode 100644 index 0000000..8bfb6b1 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/src/components/Friends/playlistItem.js @@ -0,0 +1,142 @@ +import React from 'react'; +import { + StyleSheet, + View, + TouchableOpacity, +} from 'react-native'; +import { + Text, + NixplayIcon as Icon, + Thumbnail, + color, +} from 'nixplay-ui-kit'; +import PropTypes from 'prop-types'; +import i18n from '~/locale/i18n'; + + +const styles = StyleSheet.create({ + container: { + backgroundColor: 'white', + marginTop: 8, + marginBottom: 8, + marginLeft: 12, + marginRight: 12, + }, + mainContainer: { + flexDirection: 'row', + }, + plistContainer: { + flex: 1, + flexDirection: 'row', + alignItems: 'center', + marginBottom: 8, + }, + thumbnailsContainer: { + margin: 5, + alignItems: 'center', + justifyContent: 'center', + marginLeft: 8, + width: 60, + height: 60, + }, + textContainer: { + flex: 1, + flexDirection: 'column', + justifyContent: 'center', + paddingLeft: 10, + }, + thumbs: { + position: 'absolute', + borderRadius: 5, + width: 60, + height: 60, + overflow: 'hidden', + }, + errorBg: { + backgroundColor: color.mistBlue01, + alignItems: 'center', + justifyContent: 'center', + }, + textInput: { + display: 'none', + }, + iconBlank: { + position: 'absolute', + borderRadius: 5, + width: 25, + height: 25, + margin: 17.5, + }, +}); + +const ImagePlaceholder = (playlist) => ( + playlist.thumbs.length === 0 ? ( + + + + ) : ( + playlist.thumbs.map((thumb, i) => ( + (i === 0) && + )) + ) +); + +export const PlaylistItem = (props) => { + const { + data, + action, + index, + } = props; + const { status } = data; + const title = data.name; + let colorFrameTxt = 'blue'; + let frameTxt = i18n.t('frames.onNFrame', { count: data.frames.length }); + if (data.frames.length === 0) { + frameTxt = i18n.t('frames.noFrameAssigned'); + colorFrameTxt = 'grey02'; + } + return ( + { action(index, data.id); }} + > + + + + + + {title} + + {frameTxt} + + + + + + ); +}; + +PlaylistItem.propTypes = { + data: PropTypes.object.isRequired, + action: PropTypes.func.isRequired, + index: PropTypes.number.isRequired, +}; diff --git a/ioneapps-maagapp-ee31119a522d/src/components/Friends/playlistSelectionHeader.js b/ioneapps-maagapp-ee31119a522d/src/components/Friends/playlistSelectionHeader.js new file mode 100644 index 0000000..c7468a6 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/src/components/Friends/playlistSelectionHeader.js @@ -0,0 +1,68 @@ +import React from 'react'; +import _ from 'lodash'; +import { + StyleSheet, + View, + TouchableOpacity, +} from 'react-native'; +import { Text, NixplayIcon as Icon, color, transparentize } from 'nixplay-ui-kit'; +import PropTypes from 'prop-types'; +import i18n from '~/locale/i18n'; + +const styles = StyleSheet.create({ + headerViewStyle: { + backgroundColor: color.mistBlue03, + flexDirection: 'row', + paddingLeft: 16, + paddingRight: 16, + justifyContent: 'space-between', + alignItems: 'center', + }, + headerContainer: { + flexDirection: 'row', + justifyContent: 'center', + alignItems: 'center', + flex: 1, + }, + textInput: { + display: 'none', + }, + header: { + flexDirection: 'column', + }, +}); + +export const PlayListSelectionHeader = (props) => { + const { action, playlist, isConnected } = props; + const buttonStyle = isConnected ? 'blue' : transparentize(color.grey04, 50); + return ( + + + { i18n.t('playlists.sendToNewPlaylist') } + + + + + + { i18n.t('playlists.addNewPlaylist') } + + + + { (!_.isEmpty(playlist)) ? + + { i18n.t('common.orSendTo') } + : + } + + ); +}; + +PlayListSelectionHeader.propTypes = { + action: PropTypes.func.isRequired, + playlist: PropTypes.array.isRequired, + isConnected: PropTypes.bool.isRequired, +}; diff --git a/ioneapps-maagapp-ee31119a522d/src/components/GetHelp/index.js b/ioneapps-maagapp-ee31119a522d/src/components/GetHelp/index.js new file mode 100644 index 0000000..7adb4db --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/src/components/GetHelp/index.js @@ -0,0 +1,108 @@ +import React, { Component } from 'react'; +import { StyleSheet, TouchableOpacity } from 'react-native'; +import { ActionSheet, Text, color } from 'nixplay-ui-kit'; +import { PropTypes } from 'prop-types'; +import call from 'react-native-phone-call'; +import email from 'react-native-email'; +import _ from 'lodash'; +import { config } from '~/config'; +import i18n from '~/locale/i18n'; +import { analytics } from '~/lib/utils'; + +const options = [ + { tel: config.supportTelUK, locale: '[UK]' }, + { tel: config.supportTelUS, locale: '[US]' }, + { tel: config.supportTelDE, locale: '[DE]' }, +]; + +const styles = StyleSheet.create({ + actionText: { + flexDirection: 'row', + justifyContent: 'center', + alignContent: 'center', + + }, + actionButton: { + paddingHorizontal: 16, + height: 56, + justifyContent: 'center', + }, + text: { + paddingHorizontal: 5, + textAlign: 'center', + }, +}); +export class GetHelp extends Component { + constructor(props) { + super(props); + this.open = () => this.contentActionSheet.open(); + this.close = () => this.contentActionSheet.close(); + } + + callAction = (tel, locale, cb) => { + const args = { + number: tel, // String value with the number to call + prompt: false, + }; + call(args).then(() => cb); + if (!_.isEmpty(locale)) { + let formatLocale = locale.replace('[', ''); + formatLocale = formatLocale.replace(']', ''); + formatLocale = formatLocale.toLowerCase(); + analytics.logEvent(`${this.props.origin}_call_${formatLocale}`); + } + }; + + emailAction = (cb) => { + const to = [config.supportEmail];// string or array of email addresses + email(to, {}).then(() => cb); + }; + + renderAction = (tel, locale) => ( + + { + this.callAction(tel, locale, () => { + this.contentActionSheet.close(); + }); + }} + > + + {i18n.t('common.call')} {tel} {locale} + + + + + ) + + render() { + return ( + { this.contentActionSheet = actionSheet; }} + > + { + this.emailAction(() => { + this.contentActionSheet.close(); + }); + }} + testID="SupportEmail" + > + {config.supportEmail} + + { + _.flatMap(options, (item) => this.renderAction(item.tel, item.locale)) + } + {i18n.t('common.cancel')} + + ); + } +} + +GetHelp.propTypes = { + origin: PropTypes.string.isRequired, +}; diff --git a/ioneapps-maagapp-ee31119a522d/src/components/GooglePhotos/empty.js b/ioneapps-maagapp-ee31119a522d/src/components/GooglePhotos/empty.js new file mode 100644 index 0000000..7a10e8c --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/src/components/GooglePhotos/empty.js @@ -0,0 +1,32 @@ +import React from 'react'; +import { + StyleSheet, + View, +} from 'react-native'; +import { ContentGridEmpty } from 'nixplay-ui-kit'; +import PropTypes from 'prop-types'; +import i18n from '~/locale/i18n'; +import OfflineEmpty from '~comp/offlineEmpty'; + +const styles = StyleSheet.create({ + container: { + marginLeft: 20, + marginRight: 20, + }, +}); + +export const GooglePhotosEmpty = (props) => (props.isConnected ? ( + + + + {i18n.t('contents.noPhotos')} + {i18n.t('contents.noPhotosInGoogle')} + + +) : ( + +)); + +GooglePhotosEmpty.propTypes = { + isConnected: PropTypes.bool.isRequired, +}; diff --git a/ioneapps-maagapp-ee31119a522d/src/components/GooglePhotos/loading.js b/ioneapps-maagapp-ee31119a522d/src/components/GooglePhotos/loading.js new file mode 100644 index 0000000..cb28b8c --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/src/components/GooglePhotos/loading.js @@ -0,0 +1,30 @@ +import React from 'react'; +import { + StyleSheet, + View, +} from 'react-native'; +import { Text, Loading } from 'nixplay-ui-kit'; +import i18n from '~/locale/i18n'; + +const styles = StyleSheet.create({ + // loadingContainer: { + // height: '100%', + // alignItems: 'center', + // justifyContent: 'center', + // }, + loadingContainer: { + height: '50%', + alignItems: 'center', + justifyContent: 'center', + }, +}); + +export const GooglePhotosLoading = () => ( + + + + {i18n.t('common.loading')} + {i18n.t('contents.fetchingLatest')} + + +); diff --git a/ioneapps-maagapp-ee31119a522d/src/components/KeyboardShift/index.js b/ioneapps-maagapp-ee31119a522d/src/components/KeyboardShift/index.js new file mode 100644 index 0000000..8137ba8 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/src/components/KeyboardShift/index.js @@ -0,0 +1,93 @@ +import { PropTypes } from 'prop-types'; +import React, { Component } from 'react'; +import { Animated, Dimensions, Keyboard, StyleSheet, TextInput, UIManager } from 'react-native'; + +const { State: TextInputState } = TextInput; + +const styles = StyleSheet.create({ + container: { + height: '100%', + left: 0, + position: 'absolute', + top: 0, + width: '100%', + }, +}); + +export default class KeyboardShift extends Component { + constructor(props) { + super(props); + this.state = { + shift: new Animated.Value(0), + }; + } + + componentDidMount() { + this.keyboardDidShowSub = Keyboard.addListener('keyboardDidShow', this.handleKeyboardDidShow); + this.keyboardDidHideSub = Keyboard.addListener('keyboardDidHide', this.handleKeyboardDidHide); + } + + componentWillUnmount() { + this.keyboardDidShowSub.remove(); + this.keyboardDidHideSub.remove(); + } + + handleKeyboardDidShow = (event) => { + const { height: windowHeight } = Dimensions.get('window'); + const keyboardHeight = event.endCoordinates.height; + const currentlyFocusedField = TextInputState.currentlyFocusedField(); + UIManager.measure(currentlyFocusedField, (originX, originY, width, height, pageX, pageY) => { + const fieldHeight = height; + const fieldTop = pageY + 50; + const gap = (windowHeight - keyboardHeight) - (fieldTop + fieldHeight); + if (gap >= 0) { + return; + } + Animated.timing( + this.state.shift, + { + toValue: gap, + duration: 0, + useNativeDriver: true, + }, + ).start(); + }); + } + + handleKeyboardDidHide = () => { + Animated.timing( + this.state.shift, + { + toValue: 0, + duration: 0, + useNativeDriver: true, + }, + ).start(); + } + + render() { + const { children } = this.props; + const { shift } = this.state; + return ( + + {React.Children.map(children, (child) => (child))} + + ); + } +} + +KeyboardShift.propTypes = { + children: PropTypes.any, +}; +KeyboardShift.defaultProps = { + children: null, +}; diff --git a/ioneapps-maagapp-ee31119a522d/src/components/LanguageChangedDialog.js b/ioneapps-maagapp-ee31119a522d/src/components/LanguageChangedDialog.js new file mode 100644 index 0000000..d1b2555 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/src/components/LanguageChangedDialog.js @@ -0,0 +1,46 @@ +import React from 'react'; +import PropTypes from 'prop-types'; +import i18n from '~/locale/i18n'; +import { Dialogue } from 'nixplay-ui-kit'; + +export default class LanguageChangedDialog extends React.Component { + static propTypes = { + closeLanguageChangedDialog: PropTypes.func.isRequired, + getRef: PropTypes.func.isRequired, + } + + shouldComponentUpdate() { + if (!this.dialogRef || + !this.dialogRef.modal || + this.dialogRef.modal.state.visible) { + return false; + } + return true; + } + + getRef = (ref) => { + this.dialogRef = ref; + this.props.getRef(ref); + } + + render() { + const { closeLanguageChangedDialog } = this.props; + return ( + + {i18n.t('users.languageChanged', { locale: i18n.prevLocale })} + {i18n.t('users.languageChangedDialogBody', { locale: i18n.prevLocale })} + + {i18n.t('common.ok', { locale: i18n.prevLocale })} + + + ); + } +} diff --git a/ioneapps-maagapp-ee31119a522d/src/components/PhotoPrintTutorial/tutorialContents.js b/ioneapps-maagapp-ee31119a522d/src/components/PhotoPrintTutorial/tutorialContents.js new file mode 100644 index 0000000..439e1c1 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/src/components/PhotoPrintTutorial/tutorialContents.js @@ -0,0 +1,114 @@ +import React from 'react'; +import { + StyleSheet, + ScrollView, + View, +} from 'react-native'; + +import { Text, color, transparentize } from 'nixplay-ui-kit'; +import i18n from '~/locale/i18n'; +import PropTypes from 'prop-types'; + +const styles = StyleSheet.create({ + scrollContainer: { + flex: 1, + paddingBottom: 8, + }, + contentContainerStyle: { + }, + container: { + flex: 1, + justifyContent: 'space-between', + paddingHorizontal: 8, + }, + title: { + flex: 1, + textAlign: 'center', + }, + infoBox: { + flex: 1, + borderWidth: 1, + borderRadius: 5, + justifyContent: 'flex-start', + borderColor: transparentize(color.orange, 10), + paddingVertical: 16, + }, + infoText: { + textAlign: 'left', + }, + warningText: { + textAlign: 'center', + paddingTop: 8, + }, +}); + +export const DeliveryOptions = (props) => ( + + {props.numberBullet} + + {props.deliveryMethod} + {props.products} + + +); + + +DeliveryOptions.propTypes = { + numberBullet: PropTypes.string.isRequired, + deliveryMethod: PropTypes.string.isRequired, + products: PropTypes.string.isRequired, +}; + +DeliveryOptions.defaultProps = { +}; + + +export const TutorialContents = (props) => { + const Warpper = props.shouldScroll ? ScrollView : View; + return ( + + + + {i18n.t('contents.printYourBestMemories')} + + + {i18n.t('contents.partnerWithFujifilm')} + + + {i18n.t('contents.yourPicturesMakegreateGiftForEveryOccassion')} + + + {i18n.t('contents.twoDeliveryOptions')} + + + + + {i18n.t('contents.photoPrintUSOnly')} + + ); +}; + +TutorialContents.propTypes = { + shouldScroll: PropTypes.bool, +}; + +TutorialContents.defaultProps = { + shouldScroll: false, +}; diff --git a/ioneapps-maagapp-ee31119a522d/src/components/PhotoPrintTutorial/tutorialModal.js b/ioneapps-maagapp-ee31119a522d/src/components/PhotoPrintTutorial/tutorialModal.js new file mode 100644 index 0000000..a9bc247 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/src/components/PhotoPrintTutorial/tutorialModal.js @@ -0,0 +1,171 @@ + +import React, { Component } from 'react'; +import { + StyleSheet, + View, + Platform, + TouchableOpacity, +} from 'react-native'; +import { + Text, + Button, + Modal, + NixplayIcon as Icon, + color, +} from 'nixplay-ui-kit'; +import ViewOverflow from 'react-native-view-overflow'; +import SafeArea from 'react-native-safe-area'; +import PropTypes from 'prop-types'; +import { Checkbox } from '~comp/checkbox'; +import i18n from '~/locale/i18n'; +import { TutorialContents } from './tutorialContents'; + +const isiOS = Platform.OS === 'ios'; + +const styles = StyleSheet.create({ + fullScreenModal: { + flex: 1, + overflow: 'hidden', + backgroundColor: color.white, + }, + contentContainerStyle: { + paddingBottom: 34, + }, + contents: { + flex: 1, + justifyContent: 'center', + alignContent: 'center', + alignItems: 'center', + }, + modalContent: { + flex: 1, + justifyContent: 'center', + backgroundColor: 'white', + }, + checkbox: { + marginHorizontal: 8, + }, + modalButton: { + marginHorizontal: 8, + marginBottom: 8, + }, + closeButtonContainer: { + width: '100%', + flexDirection: 'row', + justifyContent: 'flex-end', + }, + closeButton: { + marginRight: 8, + width: 16, + height: 16, + }, +}); + +export class TutorialModal extends Component { + constructor(props) { + super(props); + this.state = { + safeAreaInsets: { + top: 0, left: 0, bottom: 0, right: 0, + }, + mSkipPhotoPrintTutorial: props.skipPhotoPrintTutorial, + }; + SafeArea.getSafeAreaInsetsForRootView() + .then((result) => { + this.setState({ + safeAreaInsets: result.safeAreaInsets, + }); + }); + } + + static getDerivedStateFromProps(nextProps, prevState) { + if ((nextProps.skipPhotoPrintTutorial !== prevState.mSkipPhotoPrintTutorial)) { + return { mSkipPhotoPrintTutorial: nextProps.skipPhotoPrintTutorial }; + } + return null; + } + + componentDidMount() { + SafeArea.addEventListener('safeAreaInsetsForRootViewDidChange', this.onSafeAreaInsetsForRootViewChange); + } + + componentWillUnmount() { + // Remove event listener + SafeArea.removeEventListener('safeAreaInsetsForRootViewDidChange', this.onSafeAreaInsetsForRootViewChange); + } + + onSafeAreaInsetsForRootViewChange = (result) => { + // Called every time that safe area insets changed + this.setState({ + safeAreaInsets: result.safeAreaInsets, + }); + } + getSafeMargin = () => ({ + marginTop: this.state.safeAreaInsets.top, + marginBottom: this.state.safeAreaInsets.bottom, + marginLeft: this.state.safeAreaInsets.left, + marginRight: this.state.safeAreaInsets.right, + }) + render() { + const Wrapper = isiOS ? View : ViewOverflow; + return ( + + + + + + + + + + + + { + this.props.toggleSkipPhotoPrintTutorial(!this.state.mSkipPhotoPrintTutorial); + }} + /> + {i18n.t('contents.gotItSkipThisPageNextTime')} + + + + + + ); + } +} + + +TutorialModal.propTypes = { + confirm: PropTypes.func, + cancel: PropTypes.func, + setRef: PropTypes.func, + skipPhotoPrintTutorial: PropTypes.bool, + toggleSkipPhotoPrintTutorial: PropTypes.func, + cta: PropTypes.string, +}; + +TutorialModal.defaultProps = { + confirm: () => {}, + cancel: () => {}, + setRef: () => {}, + skipPhotoPrintTutorial: false, + toggleSkipPhotoPrintTutorial: () => {}, + cta: i18n.t('common.continue'), +}; + diff --git a/ioneapps-maagapp-ee31119a522d/src/components/Photos/AssetPreview.js b/ioneapps-maagapp-ee31119a522d/src/components/Photos/AssetPreview.js new file mode 100644 index 0000000..1df4ade --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/src/components/Photos/AssetPreview.js @@ -0,0 +1,321 @@ +import React, { Component } from 'react'; +import { + View, + Dimensions, + Platform, + TouchableOpacity, + Image as RNImage, +} from 'react-native'; +import Video from 'react-native-video'; +import { Image as UIKitImage } from 'nixplay-ui-kit'; +import PropTypes from 'prop-types'; +import _ from 'lodash'; +import playButton from '~/images/general/play-button.png'; +import withTransformable from '~/components/Photos/withTransformable'; +import { isValidVideo } from '~/lib/validate'; + +const { width, height } = Dimensions.get('window'); + +const BasImage = (props) => ( + + { + (Platform.OS === 'ios') && + } + { + (Platform.OS === 'android') && + } + + + +); +const Image = withTransformable(BasImage); + +const styles = { + slide: { + flex: 1, + }, + thumb: { + flex: 1, + }, + preview: { + flex: 1, + width, + height, + }, +}; + +export class AssetPreview extends Component { + constructor(props) { + super(props); + + this.state = { + uri: this.getVideoPath(), + thumbnailPath: this.getImagePath(), + paused: true, + currentTime: props.startTime, + }; + } + + async componentWillMount() { + if (this.isVideo()) { + if (Platform.OS === 'ios') { + this.pauseVideo(); + } else { + this.setState({ uri: this.getVideoPath(), paused: true }); + } + } + } + + // static getDerivedStateFromProps(props, state) { + // if (!_.isEqual(props.paused, state.paused)) { + // return { paused: props.paused }; + // } + // return null; + // } + + shouldComponentUpdate(nextProps, nextState) { + if (!_.isEqual(nextState.paused, this.state.paused)) { + return true; + } + if (!_.isEqual(nextProps.paused, this.props.paused)) { + return true; + } + if (!_.isEqual(nextProps.startTime, this.props.startTime) || !_.isEqual(nextProps.endTime, this.props.endTime)) { + return true; + } + if (!_.isEqual(this.state.uri, nextState.uri)) { + return true; + } + return false; + } + + componentDidUpdate(prevProps) { + if (this.isVideo()) { + if (!_.isEqual(prevProps.startTime, this.props.startTime) + || !_.isEqual(prevProps.endTime, this.props.endTime)) { + // eslint-disable-next-line react/no-did-update-set-state + this.setState({ paused: true, currentTime: this.props.startTime }, () => { + if (this.player) this.player.seek(this.props.startTime); + }); + } + if (!_.isEqual(prevProps.paused, this.props.paused)) { + // eslint-disable-next-line react/no-did-update-set-state + this.setState({ paused: this.props.paused }); + } + } + } + + componentWillUnmount() { + this.setState({ paused: true }); + } + + onEnd = () => { + this.setState({ paused: true, currentTime: this.props.startTime }); + } + + onLoad = () => { + if (this.props.startTime >= 0 && this.props.endTime > 0) { + if (this.player) this.player.seek(this.state.currentTime); + } else if (this.player) { + this.player.seek(0); + } + } + + onProgress = ({ + currentTime, + }) => { + if (this.props.startTime >= 0 && this.props.endTime > 0) { + if (currentTime >= this.props.endTime) { + this.player.paused = true; + this.setState({ paused: true, currentTime: this.props.startTime }); + } else { + this.setState({ currentTime }); + } + } + } + getVideoPath = () => { + if (Platform.OS === 'android' && _.has(this.props.item, 'fullFilePath')) { + const filePath = ((this.props.item.fullFilePath.indexOf('file://') < 0) ? 'file://' : '') + this.props.item.fullFilePath; + return filePath; + } else if (_.has(this.props.item, 'uri')) { + return this.props.item.uri.replace('ph://', 'photos://'); + } + return ''; + } + + getImagePath = () => { + if (_.has(this.props.item, 'uri')) { + return this.props.item.uri; + } else if (_.has(this.props.item, 'previewUrl')) { + return this.props.item.previewUrl; + } + return ''; + } + + getImagePreview() { + if (this.isVideo() && !this.state.paused) { + return ( + + + ); + } else if (Platform.OS === 'ios') { + return ( + + ); + } + return ( + + ); + } + + setZoomRef = (node) => { + if (node) { + this.zoomRef = node; + this.scrollResponderRef = this.zoomRef.getScrollResponder(); + } + } + + playVideo = () => { + if (this.isVideo()) { + if (this.state.currentTime !== this.props.startTime) { + // continue currnet time + this.setState({ paused: false }); + } else { + // video never play or completed playback + this.setState({ uri: this.getVideoPath(), paused: false }); + if (this.props.startTime > 0 && this.props.endTime > 0) { + if (this.player) this.player.seek(this.state.currentTime); + } + } + this.props.videoDidPlay({ + index: this.props.index, + uri: this.getVideoPath(), + AssetPreview: this, + }); + } + } + + pauseVideo = () => { + if (this.isVideo()) { + this.setState({ paused: true }); + } + } + toggleVideo = () => { + if (this.isVideo()) { + if (this.state.paused) { + this.playVideo(); + } else { + this.pauseVideo(); + } + } + } + + handleResetZoomScale = () => { + this.scrollResponderRef.scrollResponderZoomTo({ + x: 0, + y: 0, + width: this.props.zoomWidth, + height: this.props.zoomHeight, + animated: true, + }); + } + + isVideo = () => isValidVideo(this.props.item.type); + + render() { + return ( + + { + this.getImagePreview() + } + { + this.isVideo() && this.state.paused && + + + + } + + ); + } +} + +AssetPreview.propTypes = { + index: PropTypes.number, + item: PropTypes.any, + zoomHeight: PropTypes.number, + zoomWidth: PropTypes.number, + videoDidPlay: PropTypes.func, + startTime: PropTypes.number, + endTime: PropTypes.number, + paused: PropTypes.bool, +}; + +AssetPreview.defaultProps = { + item: {}, + index: 0, + startTime: -1, + endTime: -1, + zoomHeight: width, + zoomWidth: height, + videoDidPlay: () => {}, + paused: true, +}; diff --git a/ioneapps-maagapp-ee31119a522d/src/components/Photos/AssetThumbnail.js b/ioneapps-maagapp-ee31119a522d/src/components/Photos/AssetThumbnail.js new file mode 100644 index 0000000..a803537 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/src/components/Photos/AssetThumbnail.js @@ -0,0 +1,171 @@ +import React, { PureComponent } from 'react'; +import { + Image, + TouchableOpacity, + Platform, + View, + StyleSheet, +} from 'react-native'; +import { Text, NixplayIcon as Icon } from 'nixplay-ui-kit'; +import PropTypes from 'prop-types'; +import DeviceInfo from 'react-native-device-info'; +import { color, fontSizes } from '~/styles/variables'; +import { isValidVideo } from '~/lib/validate'; + +const isiOS = Platform.OS === 'ios'; +const sysVersion = parseFloat(DeviceInfo.getSystemVersion()); + +const styles = StyleSheet.create({ + thumbContainer: { + justifyContent: 'space-around', + width: 64, + height: 56, + }, + thumb: { + width: 56, + height: 56, + borderRadius: 10, + backgroundColor: 'black', + }, + thumbHighlight: { + width: 56, + height: 56, + borderWidth: 2, + borderColor: color.blue, + borderRadius: 10, + backgroundColor: 'black', + }, + videoIconBackground: { + position: 'absolute', + bottom: 5, + left: 5, + right: 15, + backgroundColor: color.white, + borderRadius: 10, + flexDirection: 'row', + alignItems: 'center', + justifyContent: 'space-around', + }, + videoIcon: { + shadowColor: color.black, + shadowOffset: { width: 1, height: 1 }, + shadowOpacity: 0.3, + shadowRadius: 1, + paddingLeft: 4, + }, + videoDuration: { + paddingRight: 4, + color: color.gray, + fontSize: fontSizes.small, + }, + invalidIconBackground: { + position: 'absolute', + top: 0, + right: 3, + backgroundColor: color.red, + borderRadius: 12, + flexDirection: 'column', + alignItems: 'center', + width: 24, + height: 24, + justifyContent: 'center', + }, + invalidIcon: { + shadowColor: color.black, + shadowOffset: { width: 1, height: 1 }, + shadowOpacity: 0.3, + shadowRadius: 1, + }, +}); +export class AssetThumbnail extends PureComponent { + constructor(props) { + super(props); + this.state = { + // fixed portrait image + thumbnailPath: (!isiOS) + ? props.item.fullFilePath + : props.item.uri, + duration: `${(props.item.endTime - props.item.startTime).toFixed(0)}s`, + }; + } + + componentWillReceiveProps(nextProps) { + this.setState({ duration: `${(nextProps.item.endTime - nextProps.item.startTime).toFixed(0)}s` }); + } + + isVideo = () => isValidVideo(this.props.item.type); + + isAndroidVideo = () => !isiOS && this.isVideo(); + + render() { + /** + * Defect issue on the ios 9.3 iPad Mini for RN Image resizeMode cover + */ + const resizeMode = ((isiOS) && sysVersion <= 9.3) ? 'contain' : 'cover'; + const additionalStyle = ((isiOS) && sysVersion <= '9.3') ? { backgroundColor: 'black' } : {}; + return ( + + this.props.thumbPressHandle(this.props.index)} + onShowUnderlay={this.props.separators.highlight} + onHideUnderlay={this.props.separators.unhighlight} + > + + + { this.isVideo() && + + + {this.state.duration} + + } + + + { (this.props.broken) && + + + + } + + ); + } +} + + +AssetThumbnail.propTypes = { + item: PropTypes.object.isRequired, + index: PropTypes.number.isRequired, + selected: PropTypes.bool, + thumbPressHandle: PropTypes.func, + separators: PropTypes.object, + broken: PropTypes.bool, +}; + +AssetThumbnail.defaultProps = { + separators: { + highlight: '#AA000000', + unhighlight: '#AAAAAAAA', + }, + selected: false, + thumbPressHandle: () => {}, + broken: false, +}; diff --git a/ioneapps-maagapp-ee31119a522d/src/components/Photos/PreviewPager.js b/ioneapps-maagapp-ee31119a522d/src/components/Photos/PreviewPager.js new file mode 100644 index 0000000..6e8d682 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/src/components/Photos/PreviewPager.js @@ -0,0 +1,266 @@ +import React, { Component } from 'react'; +import { View, Dimensions } from 'react-native'; +import PropTypes from 'prop-types'; +import { RecyclerListView, DataProvider, LayoutProvider } from 'recyclerlistview'; +import _ from 'lodash'; +import { ContentPreview } from '~/components/Photos/contentPreview'; +import { AssetPreview } from './AssetPreview'; + +const { width: screenWidth, height: screenHeight } = Dimensions.get('window'); + +export class PreviewPager extends Component { + static propTypes = { + data: PropTypes.array.isRequired, + onPagerIndexChanged: PropTypes.func, + onPagerScroll: PropTypes.func, + paused: PropTypes.bool, + style: PropTypes.any.isRequired, + selectedIndex: PropTypes.number, + }; + + static defaultProps = { + onPagerIndexChanged: () => {}, + onPagerScroll: () => {}, + paused: true, + selectedIndex: 0, + }; + + constructor(props) { + super(props); + + this.scrollToIndex = this.scrollToIndex.bind(this); + this.refRecyclerListView = this.refRecyclerListView.bind(this); + this.onVisibleIndexesChanged = this.onVisibleIndexesChanged.bind(this); + this.updateData = this.updateData.bind(this); + this.getItemIndex = this.getItemIndex.bind(this); + this.getProperIndex = this.getProperIndex.bind(this); + this.pauseVideo = this.pauseVideo.bind(this); + this.layoutProvider = new LayoutProvider( + () => 0, + // eslint-disable-next-line no-param-reassign + (type, dim) => { dim.width = screenWidth; dim.height = screenHeight; }, + ); + this.rowRenderer = this.rowRenderer.bind(this); + + this.state = { + dataProvider: new DataProvider((r1, r2) => !_.isEqual(r1, r2)).cloneWithRows(props.data), + paused: true, + index: 0, + }; + } + + componentWillReceiveProps(nextProps) { + if (!_.isEqual(nextProps.data.map(a => a.uri), this.props.data.map(a => a.uri)) + && _.size(nextProps.data) > 0) { + const nextLen = _.size(nextProps.data); + const propsLen = _.size(this.props.data); + this.pauseVideo(); + let toIndex = this.state.index; + const diffLen = nextLen - propsLen; + const curItem = this.props.data[this.state.index]; + const lastItemIndex = this.getItemIndex(curItem, nextProps.data); + switch (diffLen) { + case -1: + if (lastItemIndex === -1) { + if (toIndex === (propsLen - 1)) { + toIndex = nextLen - 1; + // if remove item at the tail + } else { + toIndex = this.state.index; + // if remove item at the head or middle + } + } else { + toIndex = lastItemIndex; + } + break; + default: + toIndex = nextLen - 1; + break; + } + this.updateData(nextProps.data, toIndex, (diffLen >= 0)); + } else if (!_.isEqual(nextProps.data, this.props.data)) { + // if selected asset meta changed, update AssetPreview, e.g. trimmed time + this.setState({ + dataProvider: this.state.dataProvider.cloneWithRows(nextProps.data), + paused: true, + }); + } + } + + shouldComponentUpdate(nextProps, nextState) { + if (!_.isEqual(nextProps.data, this.props.data)) { + return true; + } + if (!_.isEqual(nextProps.paused, this.props.paused)) { + return true; + } + if (!_.isEqual(nextState.paused, this.state.paused)) { + return true; + } + if (!_.isEqual(nextState.index, this.state.index)) { + return true; + } + return false; + } + + onVisibleIndexesChanged= (all) => { + // console.log('onVisibleIndexesChanged', all); + if (_.size(all) === 1) { + this.setState({ index: all[0], paused: true }, () => { + this.pauseVideo(); + this.props.onPagerIndexChanged(this.state.index); + }); + } + } + + onMomentumScrollEnd = (event) => { + const index = _.round(event.nativeEvent.contentOffset.x / screenWidth); + if (this.state.index !== index) { + this.pauseVideo(); + this.setState({ index, paused: true }, () => { + this.props.onPagerIndexChanged(this.state.index); + }); + } + } + + getItemIndex = (item, array) => { + if (typeof item === 'object') { + return _.findIndex(array, item); + } + return -1; + } + + getProperIndex = (index) => ((index - 1) > 0 ? index - 1 : 0); + + pauseVideo = () => { + if (this.assetPreviewRef && this.assetPreviewRef instanceof AssetPreview) { + this.assetPreviewRef.pauseVideo(); + this.assetPreviewRef = null; + } + } + + updateData = (newData, toIndex, more) => { + const prvIndex = this.state.index; + // console.log('prvIndex', prvIndex, 'toIndex', toIndex); + // const indexDidNotChanged = (Math.abs(prvIndex - toIndex) === 0); + const dataProvider = this.state.dataProvider.cloneWithRows(newData); + if (more) { + this.setState({ + index: toIndex, + dataProvider, + }, () => { + setTimeout(() => { + if (!_.isEmpty(this.recyclerListView)) { + this.recyclerListView.scrollToIndex( + this.state.index, + Math.abs(this.state.index, prvIndex) < 2, + ); + this.props.onPagerIndexChanged(this.state.index); + } + }, 50); + }); + } else { + this.setState({ + index: toIndex, + dataProvider, + }, () => { + if (!_.isEmpty(this.recyclerListView)) { + const targetIndex = toIndex >= 0 ? toIndex : Math.max(0, _.size(newData) - 1); + const topRowNewOffset = + this.recyclerListView._virtualRenderer // eslint-disable-line no-underscore-dangle + .getLayoutManager() + .getOffsetForIndex(targetIndex); + setTimeout( + () => { + // console.log('this.recyclerListView.scrollToOffset'); + this.recyclerListView.scrollToOffset( + topRowNewOffset.x, + 0, + Math.abs(toIndex - prvIndex) < 2, + ); + this.props.onPagerIndexChanged(toIndex); + // console.log(`this.props.onPagerIndexChanged(${toIndex});`); + }, + 50, + ); + } + }); + } + } + + scrollToIndex(param) { + const animated = (param.animated && typeof param.animated === 'boolean') + ? param.animated : Math.abs(this.state.index - param.index) < 2; + this.pauseVideo(); + if (this.state.index !== param.index) { + this.setState({ index: param.index, paused: true }, () => { + if (!_.isEmpty(this.recyclerListView)) { + this.recyclerListView.scrollToIndex(param.index, animated); + } + }); + } + } + + rowRenderer = (type, item, index) => { + if (item) { + return _.has(item, 'previewUrl') ? + ( + + ) : + ( + { this.assetPreviewRef = param.AssetPreview; }} + index={index} + /> + ); + } + return ( + + ); + }; + + // handleScroll = (event) => { + // / + // // this.props.onPagerScroll(event); + // if (this.assetPreviewRef && this.assetPreviewRef instanceof AssetPreview) { + // this.assetPreviewRef.pauseVideo(); + // } + // } + + refRecyclerListView(ref) { + this.recyclerListView = ref; + } + + render() { + return ( + + ); + } +} diff --git a/ioneapps-maagapp-ee31119a522d/src/components/Photos/ViewPager.js b/ioneapps-maagapp-ee31119a522d/src/components/Photos/ViewPager.js new file mode 100644 index 0000000..ad70092 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/src/components/Photos/ViewPager.js @@ -0,0 +1,85 @@ +import React, { Component } from 'react'; +import { Dimensions } from 'react-native'; +import PropTypes from 'prop-types'; +import { RecyclerListView, DataProvider, LayoutProvider } from 'recyclerlistview'; +import _ from 'lodash'; + +const { width: screenWidth, height: screenHeight } = Dimensions.get('window'); + +export class ViewPager extends Component { + static propTypes = { + data: PropTypes.array.isRequired, + onPageSelected: PropTypes.func, + initialRenderIndex: PropTypes.number, + layoutProvider: PropTypes.object, + }; + + static defaultProps = { + onPageSelected: () => { }, + initialRenderIndex: 0, + layoutProvider: new LayoutProvider( + () => 0, + // eslint-disable-next-line no-param-reassign + (type, dim) => { dim.width = screenWidth; dim.height = screenHeight; }, + ), + }; + + constructor(props) { + super(props); + + this.state = { + index: props.initialRenderIndex, + dataProvider: new DataProvider((r1, r2) => !_.isEqual(r1, r2)).cloneWithRows(props.data), + }; + } + + componentDidMount() { + } + + componentWillReceiveProps(nextProps) { + if (!_.isEqual(nextProps.data, this.props.data) && !_.isEmpty(nextProps.data)) { + let nextIndex = this.state.index; + if (nextProps.data.length < this.props.data.length && nextIndex >= nextProps.data.length) { + nextIndex = nextProps.data.length - 1; + } + this.recyclerListView.scrollToIndex(nextIndex); + setTimeout(() => { + this.setState({ + index: nextIndex, + dataProvider: this.state.dataProvider.cloneWithRows(nextProps.data), + }); + this.props.onPageSelected(nextIndex); + }, 100); + } + } + + momentumScrollEnd = (event) => { + const index = _.round(event.nativeEvent.contentOffset.x / screenWidth); + this.setState({ index }); + this.props.onPageSelected(index); + } + + scrollToIndex = (index) => { + const prevIndex = this.state.index; + this.setState({ index }, () => { + this.recyclerListView.scrollToIndex(index, Math.abs(index - prevIndex) < 2); + this.props.onPageSelected(index); + }); + } + + render() { + return ( + { this.recyclerListView = ref; }} + scrollEventThrottle={160} + pagingEnabled + isHorizontal + layoutProvider={this.props.layoutProvider} + dataProvider={this.state.dataProvider} + onMomentumScrollEnd={this.momentumScrollEnd} + removeClippedSubviews + /> + ); + } +} diff --git a/ioneapps-maagapp-ee31119a522d/src/components/Photos/ViewPager2.js b/ioneapps-maagapp-ee31119a522d/src/components/Photos/ViewPager2.js new file mode 100644 index 0000000..6f4fcbe --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/src/components/Photos/ViewPager2.js @@ -0,0 +1,298 @@ +/** + * @providesModule ViewPager + * @flow + */ + +import React, { Component } from 'react'; +import { + View, + ScrollView, + StyleSheet, + Platform, + // Dimensions, + // Element, +} from 'react-native'; +import ViewPagerAndroid from '@react-native-community/viewpager'; +import PropTypes from 'prop-types'; + +// const { width } = Dimensions.get('window'); + + +const styles = StyleSheet.create({ + container: { + flex: 1, + }, +}); + +class ViewPager extends Component { + static propTypes = { + onChangeThrottle: PropTypes.number, + renderHeader: PropTypes.func, + renderFooter: PropTypes.func, + initialPage: PropTypes.number, + onChangePage: PropTypes.func, + children: PropTypes.array.isRequired, + style: PropTypes.object, + } + + static defaultProps = { + onChangeThrottle: 250, + renderHeader: null, + renderFooter: null, + initialPage: 0, + onChangePage: () => {}, + style: {}, + } + + constructor(props) { + super(props); + this.state = { + width: '100%', + }; + + this.active = 0; + this.header = null; + this.footer = null; + this.pageDelayTimeout = null; + this.viewPager = null; + this.scrollView = null; + + // iOS only + this.state = { + width: 0, + height: 0, + }; + } + + // state: State; + + /** + * Call inital page handlers on mount + */ + componentDidMount() { + if (this.header && this.header.onChangePage) { + this.header.onChangePage(this.props.initialPage); + } + if (this.footer && this.footer.onChangePage) { + this.footer.onChangePage(this.props.initialPage); + } + } + + /** + * Helper to set component refs + * @param type + * @param component + */ + // setRef = (type: string, component: any) => { + // if (!component) { + // this[type] = null; + // } else { + // this[type] = component; + // } + // } + + // /** + // * @param component + // */ + // setHeaderRef = (component: any) => { + // this.setRef('header', component); + // } + + // /** + // * @param component + // */ + // setFooterRef = (component: any) => { + // this.setRef('footer', component); + // }; + + // props: Props; + + // viewPager: any; + + // scrollView: any; + + // active: number; + + // header: any; + + // footer: any; + + // pageDelayTimeout: ?setTimeout; + + /** + * Set the page dimensions + * @param e + */ + setDimensions = (e) => { + this.setState({ + width: e.nativeEvent.layout.width, + height: e.nativeEvent.layout.height, + }); + } + + /** + * Gets the current page index + * @returns {number} + */ + currentPage = () => this.active; + /** + * Handle a page change event + * @param e + * @returns {*} + */ + handlePageChange = (e) => { + // Use ViewPager position + if (Platform.OS === 'android') { + return this.goToPage(e.nativeEvent.position); + } + + // Calculate current index + const index = e.nativeEvent.contentOffset.x / this.state.width; + + // Only call the function if the index is an integer (page) + if (index === parseInt(index, 0)) { + // Don't do anything if it's bouncing out of view + if (index < 0 || index >= React.Children.count(this.props.children)) { + return undefined; + } + + return this.goToPage(index); + } + + return undefined; + } + /** + * Manually navigate to a page + * @param page + */ + goToPage = (page, animated) => { + this.active = page; + + if (Platform.OS === 'android') { + if (animated) { + this.viewPager.setPage(this.active); + } else { + this.viewPager.setPageWithoutAnimation(this.active); + } + } else { + this.scrollView.scrollTo({ + x: this.active * this.state.width, + animated, + }); + } + + // Throttle page events to avoid spamming + clearTimeout(this.pageDelayTimeout); + this.pageDelayTimeout = setTimeout(() => { + if (this.header && this.header.onChangePage) { + this.header.onChangePage(this.active); + } + if (this.footer && this.footer.onChangePage) { + this.footer.onChangePage(this.active); + } + if (this.props.onChangePage) this.props.onChangePage(this.active); + }, this.props.onChangeThrottle || 250); + } + + /** + * Render each child view in the ViewPager + * @returns {*} + */ + renderChildren = () => { + const iosStyles = {}; + + if (Platform.OS === 'ios') { + iosStyles.width = this.state.width; + iosStyles.height = this.state.height; + } + + return React.Children.map(this.props.children, (child, index) => ( + // eslint-disable-next-line react/no-array-index-key + + {child} + + )); + } + + /** + * Render a paging ScrollView. No ViewPager exists on iOS. + * @returns {XML} + */ + renderIOS() { + return ( + { this.scrollView = s; }} + horizontal + pagingEnabled + removeClippedSubviews + directionalLockEnabled + scrollEventThrottle={100} + bounces={false} + scrollsToTop={false} + automaticallyAdjustContentInsets={false} + showsHorizontalScrollIndicator={false} + showsVerticalScrollIndicator={false} + onScroll={(e) => this.handlePageChange(e)} + onLayout={e => this.setDimensions(e)} + contentOffset={{ + x: this.state.width * this.props.initialPage, + y: 0, + }} + > + {this.renderChildren()} + + ); + } + + /** + * Render a native scrollView + * @returns {XML} + */ + renderAndroid() { + return ( + { this.viewPager = v; }} + initialPage={this.props.initialPage} + onPageSelected={e => this.handlePageChange(e)} + style={styles.container} + > + {this.renderChildren()} + + ); + } + + /** + * Render + * @returns {XML} + */ + render() { + const props = { + initialPage: this.props.initialPage, + goToPage: this.goToPage.bind(this), + setHeaderRef: this.setHeaderRef, + setFooterRef: this.setFooterRef, + }; + + let header = null; + let footer = null; + + if (this.props.renderHeader) { + header = React.cloneElement(this.props.renderHeader(props), props); + } + if (this.props.renderFooter) { + footer = React.cloneElement(this.props.renderFooter(props), props); + } + + return ( + + {header} + {Platform.OS === 'ios' ? this.renderIOS() : this.renderAndroid()} + {footer} + + ); + } +} + + +export default ViewPager; diff --git a/ioneapps-maagapp-ee31119a522d/src/components/Photos/ZoomableViewPager.js b/ioneapps-maagapp-ee31119a522d/src/components/Photos/ZoomableViewPager.js new file mode 100644 index 0000000..6dbd978 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/src/components/Photos/ZoomableViewPager.js @@ -0,0 +1,64 @@ +import React, { Component } from 'react'; +// import { Dimensions } from 'react-native'; +import PropTypes from 'prop-types'; +// import { DataProvider, LayoutProvider } from 'recyclerlistview'; +// import _ from 'lodash'; +import Gallery from '~comp/SharedPlaylist/Gallery'; + +// const { width: screenWidth, height: screenHeight } = Dimensions.get('window'); + +export class ZoomableViewPager extends Component { + static propTypes = { + data: PropTypes.array.isRequired, + onPageSelected: PropTypes.func, + onTap: PropTypes.func, + initialRenderIndex: PropTypes.number, + rowRenderer: PropTypes.func, + }; + + static defaultProps = { + onPageSelected: () => { }, + onTap: () => {}, + initialRenderIndex: 0, + rowRenderer: () => { }, + }; + + constructor(props) { + super(props); + + this.state = { + index: props.initialRenderIndex, + // dataProvider: new DataProvider((r1, r2) => !_.isEqual(r1, r2)).cloneWithRows(props.data), + }; + + // this.layoutProvider = new LayoutProvider( + // () => 0, + // // eslint-disable-next-line no-param-reassign + // (type, dim) => { dim.width = screenWidth; dim.height = screenHeight; }, + // ); + } + + render() { + // console.log('PROPS DATA: ', this.props.data) + const { + onPageSelected, onTap, rowRenderer, data, + } = this.props; + return ( + rowRenderer( + imageProps, + imageDimensions, + pageData, + )} + /> + ); + } +} diff --git a/ioneapps-maagapp-ee31119a522d/src/components/Photos/contentPreview.js b/ioneapps-maagapp-ee31119a522d/src/components/Photos/contentPreview.js new file mode 100644 index 0000000..16a6743 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/src/components/Photos/contentPreview.js @@ -0,0 +1,372 @@ +import React, { Component } from 'react'; +import { + View, + Dimensions, + TouchableOpacity, + StyleSheet, + ActivityIndicator, + Platform, +} from 'react-native'; +import { SafeAreaView } from 'react-navigation'; +import Video from 'react-native-video'; +import { Image, color, Text } from 'nixplay-ui-kit'; +import PropTypes from 'prop-types'; +import { ifIphoneX } from 'react-native-iphone-x-helper'; +import FastImage from 'react-native-fast-image'; +import _ from 'lodash'; + +import { + VIDEO_STATE_IDLE, + VIDEO_STATE_LOADING, + VIDEO_STATE_LOADED, + VIDEO_STATE_PLAYING, +} from '~/store/contentTypes'; +import playButton from '~/images/general/play-button.png'; +import { Avatar } from '~comp/SharedPlaylist/avatar'; + +const { width, height } = Dimensions.get('window'); + +const styles = StyleSheet.create({ + container: { + flex: 1, + justifyContent: 'center', + alignItems: 'center', + }, + videoContainer: { + flex: 1, + width: '100%', + height: '100%', + }, + video: { + flex: 1, + }, + image: { + width: '100%', + height: '100%', + }, + playButtonContainer: { + position: 'absolute', + left: (width / 2) - 50, + top: (height / 2) - 50, + bottom: 0, + right: 0, + width: 100, + height: 100, + justifyContent: 'center', + alignItems: 'center', + padding: 8, + }, + playButton: { + flex: 1, + width: 52, + height: 52, + }, + + loadingContainer: { + position: 'absolute', + left: (width / 2) - 25, + top: (height / 2) - 25, + bottom: 0, + right: 0, + width: 50, + height: 50, + justifyContent: 'center', + alignItems: 'center', + }, + loading: { + flex: 1, + }, +}); + +const isIOS = Platform.OS === 'ios'; +const isAndroid = Platform.OS === 'android'; + +export class ContentPreview extends Component { + static propTypes = { + item: PropTypes.any, + onVideoPlay: PropTypes.func, + onVideoPause: PropTypes.func, + onVideoError: PropTypes.func, + userId: PropTypes.number, + } + + static defaultProps = { + item: {}, + userId: 0, + onVideoPlay: () => { }, + onVideoPause: () => { }, + onVideoError: () => { }, + } + + constructor(props) { + super(props); + + this.state = { + paused: true, + imgWidth: 0, + imgHeight: 0, + isMounted: false, + currentTime: 0, + showLoadingIndicator: false, + showCustomAndroidLoadingIndicator: false, + videoStatus: VIDEO_STATE_IDLE, + showPreview: true, + }; + + this.pauseVideo = this.pauseVideo.bind(this); + this.onLoad = this.onLoad.bind(this); + this.onEnd = this.onEnd.bind(this); + } + + shouldComponentUpdate(nextProps, nextState) { + if (!_.isEqual(nextState.paused, this.state.paused) || + !_.isEqual(nextState.showLoadingIndicator, this.state.showLoadingIndicator) || + !_.isEqual(nextState.showCustomAndroidLoadingIndicator, this.state.showCustomAndroidLoadingIndicator) || + !_.isEqual(nextState.showPreview, this.state.showPreview) || + !_.isEqual(nextState.videoStatus, this.state.videoStatus) || + !_.isEqual(nextProps.item.previewUrl, this.props.item.previewUrl) || + !_.isEqual(nextProps.item.userAvatar, this.props.item.userAvatar) || + // !_.isEqual(nextProps.item.userFullName, this.props.item.userFullName) || // it keeps re-rendering + !_.isEqual(nextProps.userId, this.props.userId)) { + return true; + } + return false; + } + + componentDidUpdate(prevProps) { + if (this.isVideo()) { + if (!_.isEqual(prevProps, this.props)) { + // eslint-disable-next-line react/no-did-update-set-state + this.setState({ paused: true }, () => { + if (this.player !== undefined) { + this.player.seek(0); + } + }); + } + } + } + + componentWillUnmount() { + this.setState({ isMounted: false }); + } + + onEnd = () => { + this.setState({ paused: true, currentTime: 0 }, () => { + if (this.player !== undefined) { + this.player.seek(0); + } + }); + } + + onLoadStart = () => { + this.setState({ showLoadingIndicator: true, videoStatus: VIDEO_STATE_LOADING }); + } + + onLoad = () => { + this.player.seek(0); + this.setState({ + showLoadingIndicator: true, + showPreview: true, + currentTime: 0, + videoStatus: VIDEO_STATE_LOADED, + }); + } + + onProgress = ({ currentTime }) => { + this.setState((prevState) => { + const loading = _.isEqual(prevState.videoStatus, VIDEO_STATE_LOADING); + const showLoadingIndicator = (loading || _.isEqual(Math.abs(prevState.currentTime - currentTime), 0)); + const showPreview = (loading || _.isEqual(currentTime, 0)); + return { + currentTime, + showLoadingIndicator, + showPreview, + videoStatus: VIDEO_STATE_PLAYING, + }; + }); + } + + playVideo = () => { + this.setState({ isMounted: true, showLoadingIndicator: true }, () => { + if (this.isVideo()) { + this.setState({ paused: !this.state.paused }, () => { + this.props.onVideoPlay(this.pauseVideo); + }); + if (this.player !== undefined) { + if (_.isEqual(this.state.currentTime, 0)) { + this.player.seek(this.state.currentTime); + } + } + } + }); + } + + pauseVideo = () => { + if (this.isVideo()) { + this.setState({ paused: true, showLoadingIndicator: false }, () => { + this.props.onVideoPause(); + }); + } + } + + isVideo = () => (!_.isEmpty(this.props.item.videoUrl)); + + render() { + const { imgWidth, imgHeight } = this.state; + const { item } = this.props; + const userAvatar = (!_.isEmpty(item.userAvatar)) ? { uri: item.userAvatar.avatar.url } : null; + // alter object due to different avatar component source + if (_.has(userAvatar, 'cache')) { + userAvatar.cache = 'reload'; + } + const isShared = !_.isEmpty(item.userFullName); + const isVideo = !_.isEmpty(item.videoUrl); + const name = !_.isEmpty(item.userFullName) ? item.userFullName.split(' ') : ''; + return ( + + {isVideo && + {}} + > + {this.state.isMounted && } + { isIOS ? ((this.state.showPreview || this.state.paused) && { + if (this.props.item.rotation % 180 === 0) { + this.setState({ imgWidth: width, imgHeight: height, showLoadingIndicator: true }); + } else { + this.setState({ imgWidth: height, imgHeight: width, showLoadingIndicator: true }); + } + }} + onLoadEnd={() => { this.setState({ showLoadingIndicator: false }); }} + resizeMode="contain" + withProgress={!isVideo} + />) : ( + + { + if (this.props.item.rotation % 180 === 0) { + this.setState({ imgWidth: width, imgHeight: height, showCustomAndroidLoadingIndicator: true }); + } else { + this.setState({ imgWidth: height, imgHeight: width, showCustomAndroidLoadingIndicator: true }); + } + }} + onLoadEnd={() => { this.setState({ showCustomAndroidLoadingIndicator: false }); }} + resizeMode="contain" + /> + + )} + {isAndroid && !isVideo && this.state.showCustomAndroidLoadingIndicator && + + + + } + {isVideo && this.state.paused && + + + } + {isVideo && (this.state.showLoadingIndicator && !this.state.paused) && + + + } + {(isShared && !_.isEqual(this.props.userId, item.userProfileId)) && + + + + {item.userFullName} + + } + + ); + } +} diff --git a/ioneapps-maagapp-ee31119a522d/src/components/Photos/coverImage.js b/ioneapps-maagapp-ee31119a522d/src/components/Photos/coverImage.js new file mode 100644 index 0000000..52e9ea0 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/src/components/Photos/coverImage.js @@ -0,0 +1,58 @@ +import React, { Component } from 'react'; +import { View, Image as RNImage } from 'react-native'; +import PropTypes from 'prop-types'; +import imgAddIcon from '~/images/photos/404.png'; +import FastImage from 'react-native-fast-image'; + +export class CoverImage extends Component { + static propTypes = { + source: PropTypes.object.isRequired, + style: PropTypes.any.isRequired, + transform: PropTypes.any.isRequired, + resizeMode: PropTypes.string.isRequired, + } + + constructor(props) { + super(props); + this.state = { + source: props.source, + style: props.style, + transform: props.transform, + resizeMode: props.resizeMode, + error: false, + }; + this.onError = this.onError.bind(this); + } + + onError() { + this.setState({ + error: false, + }); + } + + render() { + return this.state.error ? + ( + + + + ) : ( + ); + } +} diff --git a/ioneapps-maagapp-ee31119a522d/src/components/Photos/emptyAlbum.js b/ioneapps-maagapp-ee31119a522d/src/components/Photos/emptyAlbum.js new file mode 100644 index 0000000..fccc031 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/src/components/Photos/emptyAlbum.js @@ -0,0 +1,62 @@ +import React from 'react'; +import { + StyleSheet, + View, +} from 'react-native'; +import { ContentGridEmpty, Loading } from 'nixplay-ui-kit'; + +import i18n from '~/locale/i18n'; +import PropTypes from 'prop-types'; +import OfflineEmpty from '~comp/offlineEmpty'; + +const styles = StyleSheet.create({ + container: { + height: '100%', + alignItems: 'center', + justifyContent: 'space-between', + paddingBottom: 64, + }, + loadingContainer: { + height: '100%', + alignItems: 'center', + justifyContent: 'center', + }, +}); + +const AlbumEmptyComponent = ({ loading, count }) => (loading || count ? ( + +) : ( + + + + {i18n.t('albums.emptyAlbum')} + {i18n.t('contents.letsAddFirstPhoto')} + + +)); + +AlbumEmptyComponent.propTypes = { + loading: PropTypes.bool, + count: PropTypes.any, +}; + +AlbumEmptyComponent.defaultProps = { + loading: true, + count: 0, +}; + + +export const AlbumEmpty = (props) => (props.isConnected ? ( + +) : ( + +)); + +AlbumEmpty.propTypes = { + loading: PropTypes.bool, + isConnected: PropTypes.bool.isRequired, +}; + +AlbumEmpty.defaultProps = { + loading: true, +}; diff --git a/ioneapps-maagapp-ee31119a522d/src/components/Photos/emptyPlaylist.js b/ioneapps-maagapp-ee31119a522d/src/components/Photos/emptyPlaylist.js new file mode 100644 index 0000000..77dd4ce --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/src/components/Photos/emptyPlaylist.js @@ -0,0 +1,69 @@ +import React from 'react'; +import { + StyleSheet, + View, +} from 'react-native'; +import { ContentGridEmpty } from 'nixplay-ui-kit'; + +import PropTypes from 'prop-types'; +import i18n from '~/locale/i18n'; +import OfflineEmpty from '~comp/offlineEmpty'; + +const styles = StyleSheet.create({ + container: { + height: '100%', + alignItems: 'center', + }, + loadingContainer: { + top: 150, + alignItems: 'center', + justifyContent: 'center', + }, +}); + +const PlaylistEmptyComponent = ({ loading, playlistType, playlistCount }) => (!loading && playlistCount === 0) && + ( + + + + {playlistType === 'all' ? i18n.t('contents.noPhotos') : i18n.t('playlists.emptyPlaylist')} + + {playlistType === 'normal' && i18n.t('contents.letsAddFirstPhoto')} + + + + ); + +PlaylistEmptyComponent.propTypes = { + playlistType: PropTypes.string, + loading: PropTypes.bool, + playlistCount: PropTypes.number, +}; + +PlaylistEmptyComponent.defaultProps = { + playlistType: 'normal', + loading: false, + playlistCount: 1, +}; + + +export const PlaylistEmpty = (props) => ( + props.isConnected ? ( + + ) : ( + + ) +); + +PlaylistEmpty.propTypes = { + playlistType: PropTypes.string, + loading: PropTypes.bool, + isConnected: PropTypes.bool, +}; + +PlaylistEmpty.defaultProps = { + playlistType: 'normal', + loading: false, + isConnected: true, +}; + diff --git a/ioneapps-maagapp-ee31119a522d/src/components/Photos/grid.js b/ioneapps-maagapp-ee31119a522d/src/components/Photos/grid.js new file mode 100644 index 0000000..ca86cd6 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/src/components/Photos/grid.js @@ -0,0 +1,183 @@ +import _ from 'lodash'; +import moment from 'moment'; +import React from 'react'; +import { + StyleSheet, + View, + TouchableOpacity, + Dimensions, + Image, +} from 'react-native'; +import FastImage from 'react-native-fast-image'; +import { PaginationScroll, InfiniteScroll } from '~comp'; +import { Image as NixplayImage, NixplayIcon, Text, color, transparentize } from 'nixplay-ui-kit'; +import PropTypes from 'prop-types'; + +import { ifIphoneX } from 'react-native-iphone-x-helper'; +import { debounceWrapper } from '~/lib/utils'; +import { CONTENT_PAGE_SIZE } from '~/store/contentsConstants'; + +const { width: screenWidth } = Dimensions.get('window'); +const thumbHeight = screenWidth / 3; + +const styles = StyleSheet.create({ + container: { + ...ifIphoneX({ + paddingBottom: 34, + }, { + paddingBottom: 30, + }), + }, + thumbContainer: { + flex: 1 / 3, + aspectRatio: 1, + }, + thumb: { + flex: 1, + margin: 1, + }, + videoIconContainer: { + position: 'absolute', + bottom: 4, + left: 4, + backgroundColor: transparentize(color.white, 20), + paddingHorizontal: 8, + paddingVertical: 2, + borderRadius: 8, + flexDirection: 'row', + alignItems: 'center', + }, + videoDuration: { + marginLeft: 4, + }, + selectedIcon: { + position: 'absolute', + top: 4, + right: 4, + width: 24, + height: 24, + borderRadius: 12, + backgroundColor: color.white, + shadowOffset: { width: 0, height: 1 }, + shadowColor: color.black, + shadowOpacity: 0.2, + shadowRadius: 2, + elevation: 1, + }, +}); + +const videoDuration = (seconds) => { + const duration = moment.duration(seconds, 'seconds'); + return `${_.padStart(duration.minutes(), 2, 0)}:${_.padStart(duration.seconds(), 2, 0)}`; +}; + +const TouchableOpacityEx = debounceWrapper(TouchableOpacity); + +export const PhotosGrid = (props) => { + const ScrollComponent = props.asyncData && !props.pagination ? InfiniteScroll : PaginationScroll; + const { contentContainerStyle, ...others } = props; + return ( + `${photo.id}`} + getItemLayout={(data, index) => ( + { length: thumbHeight, offset: thumbHeight * index, index } + )} + extraData={props.selectedContent} + renderItem={({ item: photo, index, moveStart }) => { + const disabled = !props.itemSelectable(photo); + const photoUrl = (!_.isEmpty(photo.microThumbnailUrl) && photo.microThumbnailUrl.indexOf('MICRO_THUMBNAIL') >= 1) ? photo.microThumbnailUrl : photo.thumbnailUrl; + return ( + props.onPressContent(photo.id, index)} + onLongPress={(e) => props.onLongPressContent(photo.id, index, e, moveStart)} + testID={`thumb${index}`} + > + { + (_.has(photo, 'thumbnailUrl')) ? () : () + } + {!_.isEmpty(photo.videoUrl) && + + + + {videoDuration(photo.videoDuration)} + + + } + { + disabled && + + } + {props.selectMode && props.selectedContent.indexOf(photo.id) >= 0 && + + + + } + + ); + }} + /> + ); +}; + +PhotosGrid.propTypes = { + asyncData: PropTypes.bool, + pagination: PropTypes.bool, + data: PropTypes.array, + onPressContent: PropTypes.func, + onLongPressContent: PropTypes.func, + selectMode: PropTypes.bool, + selectedContent: PropTypes.array, + itemSelectable: PropTypes.func, + contentContainerStyle: PropTypes.any, +}; + +PhotosGrid.defaultProps = { + asyncData: false, + pagination: false, + data: [], + onPressContent: () => {}, + onLongPressContent: () => {}, + selectMode: false, + selectedContent: [], + itemSelectable: () => true, + contentContainerStyle: {}, +}; diff --git a/ioneapps-maagapp-ee31119a522d/src/components/Photos/pickerOptions.js b/ioneapps-maagapp-ee31119a522d/src/components/Photos/pickerOptions.js new file mode 100644 index 0000000..7eb36bf --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/src/components/Photos/pickerOptions.js @@ -0,0 +1,18 @@ +import i18n from '~/locale/i18n'; +import _ from 'lodash'; +import { config } from '~/config'; + +export const PickerOptions = () => ( + { + title: i18n.t('albums.albums'), + mediaType: 'mixed', + multiple: true, + videoSelectionLimit: i18n.t('contents.videoSelectionLimit', { count: config.defaultMaxVideo }), + imageSelectionLimit: i18n.t('contents.imageSelectionLimit', { count: config.defaultMaxImage }), + okButtonTitle: i18n.t('common.ok'), + quality: 100, + noData: true, + maximumImageCount: config.defaultMaxImage, + maximumVideoCount: config.defaultMaxVideo, + } +); diff --git a/ioneapps-maagapp-ee31119a522d/src/components/Photos/withTransformable.js b/ioneapps-maagapp-ee31119a522d/src/components/Photos/withTransformable.js new file mode 100644 index 0000000..d67fb74 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/src/components/Photos/withTransformable.js @@ -0,0 +1,205 @@ +import React, { Component } from 'react'; +import { + Animated, + PanResponder, + ScrollView, + Platform, +} from 'react-native'; + +const DIFF_ZOOM_SCALE = 0.1; +const MAX_ZOOM = 3; +const MIN_ZOOM = 0.5; +const MAX_SCALE = 5; +const MIN_SCALE = 1; + +function withTransformable(WrappedComponent) { + return class extends Component { + constructor(props) { + super(props); + this.state = { + latestTranslateX: 0, + latestTranslateY: 0, + translateX: 0, + translateY: 0, + scale: 1, + width: 0, + height: 0, + }; + + this.historyZoomDistance = 0; + this.createPanResponder(); + this.reset = this.reset.bind(this); + } + + // onLayout + onLayout = ({ nativeEvent }) => { + const { layout } = nativeEvent; + const { width, height } = layout; + this.setState({ width, height }); + } + + onMoveShouldSetPanResponder = (_, gestureState) => ( + this.state.scale > 1 || gestureState.numberActiveTouches >= 2 + ); + + onPanResponderMove = (event, gestureState) => { + if (gestureState.numberActiveTouches >= 2) { + const { nativeEvent } = event; + const { touches } = nativeEvent; + this.calculateZoomType(touches[0], touches[1]); + } else { + const { dx, dy } = gestureState; + this.calculateScrollX(dx); + this.calculateScrollY(dy); + } + } + + onPanResponderRelease = () => { + this.resizeToScaleLimit(); + this.resetScroll(); + } + + // Pan gesture + createPanResponder = () => { + this.panResponder = PanResponder.create({ + onMoveShouldSetPanResponder: this.onMoveShouldSetPanResponder, + onPanResponderMove: this.onPanResponderMove, + onPanResponderRelease: this.onPanResponderRelease, + }); + } + + // Scroll handler + calculateScrollX = (dX) => { + this.setState(prev => { + let translateX = prev.latestTranslateX + dX; + const maxTranslateX = ((prev.scale * prev.width) - prev.width) / 2; + if (translateX > maxTranslateX) { + translateX = maxTranslateX; + } else if (translateX < -maxTranslateX) { + translateX = -maxTranslateX; + } + return { translateX }; + }); + } + + calculateScrollY = (dY) => { + this.setState(prev => { + let translateY = prev.latestTranslateY + dY; + const maxTranslateY = ((prev.scale * prev.height) - prev.height) / 2; + if (translateY > maxTranslateY) { + translateY = maxTranslateY; + } else if (translateY < -maxTranslateY) { + translateY = -maxTranslateY; + } + return { translateY }; + }); + } + + resetScroll = () => { + this.setState(prev => { + if (prev.scale === 1) { + return { + translateX: 0, + translateY: 0, + latestTranslateX: 0, + latestTranslateY: 0, + }; + } + return { + latestTranslateX: prev.translateX, + latestTranslateY: prev.translateY, + }; + }); + } + + // Zoom handler + calculateZoomType = (firstTouchPoint, secondTouchPoint) => { + const dX = firstTouchPoint.pageX - secondTouchPoint.pageX; + const dY = firstTouchPoint.pageY - secondTouchPoint.pageY; + const distance = Math.sqrt((dX * dX) + (dY * dY)); + + if (distance > this.historyZoomDistance) { + this.zoomIn(); + } else { + this.zoomOut(); + } + + this.historyZoomDistance = distance; + } + + zoomIn = () => { + this.setState(prev => { + let scale = prev.scale + DIFF_ZOOM_SCALE; + if (scale > MAX_ZOOM) { + scale = MAX_ZOOM; + } + return { scale }; + }); + } + + zoomOut = () => { + this.setState(prev => { + let scale = prev.scale - DIFF_ZOOM_SCALE; + if (scale < MIN_ZOOM) { scale = MIN_ZOOM; } + return { scale }; + }); + } + + resizeToScaleLimit = () => { + this.setState(prev => { + let { scale } = prev; + if (scale < MIN_SCALE) { + scale = MIN_SCALE; + } else if (scale > MAX_SCALE) { scale = MAX_SCALE; } + return { scale }; + }); + } + + reset() { + this.setState({ + scale: 1, + translateX: 0, + translateY: 0, + }); + } + + render() { + const layout = { + width: this.state.width, + height: this.state.height, + }; + const Child = ; + if (Platform.OS === 'android') { + return ( + + {Child} + + ); + } + + return ( + + {Child} + + ); + } + }; +} + +export default withTransformable; diff --git a/ioneapps-maagapp-ee31119a522d/src/components/Playlists/assignToFrame.js b/ioneapps-maagapp-ee31119a522d/src/components/Playlists/assignToFrame.js new file mode 100644 index 0000000..6d0fc32 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/src/components/Playlists/assignToFrame.js @@ -0,0 +1,159 @@ +import React, { Component } from 'react'; +import _ from 'lodash'; +import { View, ViewPropTypes, StyleSheet, FlatList } from 'react-native'; +import { Text, TableCellFrame, TableCell, Switch, color } from 'nixplay-ui-kit'; +import { connect } from 'react-redux'; +import PropTypes from 'prop-types'; + +import i18n from '~/locale/i18n'; +import { analytics } from '~/lib/utils'; +import { attachLocalizedFrameName } from '~/lib/locale'; + +import { UPDATE_FRAME_PLAYLIST_ASSIGNMENT, SHOW_TOAST_ERROR } from '~/store/actionTypes'; + + +const styles = StyleSheet.create({ + container: { + backgroundColor: color.mistBlue01, + borderTopWidth: 1, + borderTopColor: color.mistBlue03, + }, + title: { + textAlign: 'center', + paddingTop: 13, + paddingBottom: 16, + }, +}); + +export class AssignPlaylistToFrame extends Component { + static propTypes = { + ...ViewPropTypes, + allFrames: PropTypes.array.isRequired, + allFramesLoading: PropTypes.bool.isRequired, + playlistId: PropTypes.number, + playlistFrames: PropTypes.array, + updateFrame: PropTypes.func.isRequired, + onFramesChange: PropTypes.func, + isConnected: PropTypes.bool.isRequired, + toastError: PropTypes.func.isRequired, + framePairing: PropTypes.object.isRequired, + } + + static defaultProps = { + onFramesChange: () => {}, + playlistId: -1, + playlistFrames: [], + } + + constructor(props) { + super(props); + + this.state = { + framesSwitch: {}, + }; + + this.onToggleFrame = this.onToggleFrame.bind(this); + } + + componentWillMount() { + this.setInitialValues(); + } + + onToggleFrame(frameId, value) { + this.setState({ + framesSwitch: { + ...this.state.framesSwitch, + [frameId]: value, + }, + }, () => { + const frameIds = _.filter( + _.keys(this.state.framesSwitch), + (k) => this.state.framesSwitch[k] === true, + ); + this.props.onFramesChange(_.map(frameIds, _.parseInt), frameId, value); + if (this.props.playlistId !== -1) { + this.props.updateFrame(frameId, this.props.playlistId, value ? 'add' : 'remove'); + if (value) { + analytics.logAction('add_playlist_to_frame'); + } else { + analytics.logAction('remove_playlist_from_frame'); + } + } + }); + } + + setInitialValues() { + const values = {}; + this.props.playlistFrames.forEach((f) => { + values[f.id] = true; + }); + this.setState({ framesSwitch: values }); + } + + render() { + const { + style, + allFrames, + allFramesLoading, + ...others + } = this.props; + const opacity = (!_.isEmpty(allFrames)) ? 1 : 0; + return ( + + {i18n.t('playlists.assignToFrame')} + `${frame.id}`} + loading={allFramesLoading} + renderItem={({ item: frame, index }) => ( + + + { this.onToggleFrame(frame.id, v); }} + withEye + disabled={!this.props.isConnected} + /> + + + )} + /> + + ); + } +} + +const mapStateToProps = (state) => ({ + allFrames: [...state.frames.frames].sort((a, b) => b.id - a.id), + allFramesLoading: state.frames.meta.loading, + isConnected: state.network.isConnected, + framePairing: !_.isEmpty(_.get(state, 'framePairing.specs')) ? _.get(state, 'framePairing.specs') : [], +}); + +const mapActionsToProps = (dispatch) => ({ + updateFrame(frameId, playlistId, operation) { + dispatch({ + type: UPDATE_FRAME_PLAYLIST_ASSIGNMENT, + payload: { + frameIds: [frameId], + playlistIds: [playlistId], + operation, + }, + }); + }, + toastError(payload) { + dispatch({ type: SHOW_TOAST_ERROR, payload }); + }, +}); + +export default connect( + mapStateToProps, + mapActionsToProps, + null, + { forwardRef: true }, +)(AssignPlaylistToFrame); diff --git a/ioneapps-maagapp-ee31119a522d/src/components/Playlists/empty.js b/ioneapps-maagapp-ee31119a522d/src/components/Playlists/empty.js new file mode 100644 index 0000000..24fdedb --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/src/components/Playlists/empty.js @@ -0,0 +1,86 @@ +import React from 'react'; +import { + StyleSheet, + View, +} from 'react-native'; +import { ContentGridEmpty, Loading, Button } from 'nixplay-ui-kit'; + +import i18n from '~/locale/i18n'; +import PropTypes from 'prop-types'; +import OfflineEmpty from '~comp/offlineEmpty'; + +const styles = StyleSheet.create({ + container: { + height: '100%', + alignItems: 'center', + justifyContent: 'space-between', + }, + buttonContainer: { + height: 128, + }, + loadingContainer: { + flex: 1, + alignItems: 'center', + justifyContent: 'center', + }, +}); + +const PlaylistsEmptyComponent = (props) => ( + props.loading ? ( + + ) : ( + + + + {i18n.t('playlists.noPlaylists')} + {i18n.t('playlists.needCreatePlaylist')} + { props.initializing && + {i18n.t('playlists.needCreatePlaylist')} + } + + + + + + ) +); + +PlaylistsEmptyComponent.propTypes = { + loading: PropTypes.bool.isRequired, + createNew: PropTypes.func.isRequired, + initializing: PropTypes.bool, +}; + +PlaylistsEmptyComponent.defaultProps = { + initializing: false, +}; + + +export const PlaylistsEmpty = (props) => ( + props.isConnected ? ( + + ) : ( + + + + ) +); + + +PlaylistsEmpty.propTypes = { + loading: PropTypes.bool.isRequired, + createNew: PropTypes.func.isRequired, + initializing: PropTypes.bool, + isConnected: PropTypes.bool.isRequired, +}; + +PlaylistsEmpty.defaultProps = { + initializing: false, +}; diff --git a/ioneapps-maagapp-ee31119a522d/src/components/Playlists/gridItem.js b/ioneapps-maagapp-ee31119a522d/src/components/Playlists/gridItem.js new file mode 100644 index 0000000..b4a690b --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/src/components/Playlists/gridItem.js @@ -0,0 +1,99 @@ +import React from 'react'; +import { StyleSheet } from 'react-native'; +import { ContentCoverGridItem, ContentCount, Text, Label } from 'nixplay-ui-kit'; +import PropTypes from 'prop-types'; +import _ from 'lodash'; +import { + SYNC_ACCOUNT_DISCONNECTED, + SYNC_ALBUM_NOT_FOUND, + SYNC_SUCCESS, + SYNC_IN_PROGRESS, + SYNC_INIT, +} from '~/store/dynamicPlaylistStates'; +import { NORMAL } from '~/store/contentTypes'; +import i18n from '~/locale/i18n'; + + +const styles = StyleSheet.create({ + label: { marginLeft: 4 }, +}); + +function getSyncInfo(defaultCounts, playlist) { + if (playlist.meta.uploading) { + return { state: 'processing', counts: [{ icon: '', text: i18n.t('contents.contentUploading') }] }; + } else if (playlist.trackerId) { + return { state: 'processing', counts: [{ icon: '', text: i18n.t('playlists.playlistPreparing') }] }; + } + switch (playlist.status) { + case SYNC_ALBUM_NOT_FOUND: { + return { state: playlist.status, counts: [...defaultCounts, { icon: 'invalid', text: i18n.t('albums.albumNotFound') }] }; + } + case SYNC_ACCOUNT_DISCONNECTED: { + return { state: playlist.status, counts: [...defaultCounts, { icon: 'account-disconnected', text: i18n.t('users.accountDisconnected') }] }; + } + case SYNC_SUCCESS: { + return { state: playlist.status, counts: [...defaultCounts, { icon: 'clock', text: i18n.t('common.lastUpdated', { lastSynced: playlist.lastSynced }) }] }; + } + case SYNC_IN_PROGRESS: { + return { state: playlist.status, counts: [...defaultCounts, { icon: 'refresh', spin: true, text: i18n.t('common.syncing') }] }; + } + case SYNC_INIT: { + return { state: playlist.status, counts: [{ icon: '', text: i18n.t('common.takeWhile') }] }; + } + default: { + return { counts: defaultCounts }; + } + } +} + +export const PlaylistGridItem = (props) => { + const { playlist, googleId } = props; + const defaultCounts = [ + { icon: 'photo-small', text: playlist.count }, + { + icon: 'frame-small', + text: playlist.frames.length, + }, + ]; + const isFull = playlist.type === NORMAL && playlist.count >= playlist.maxSlides; + if (isFull) { + defaultCounts[0].color = 'yellow'; + } + const playlistState = getSyncInfo(defaultCounts, playlist, googleId); + return ( + { props.openPlaylist(playlist.id); }} + > + {playlist.type !== 'normal' && + + {i18n.t('common.from', { source: playlist.mediaName })} + } + + + {isFull && + } + + + ); +}; + +PlaylistGridItem.propTypes = { + playlist: PropTypes.object.isRequired, + openPlaylist: PropTypes.func, + assignToFrame: PropTypes.func, + googleId: PropTypes.string, +}; + +PlaylistGridItem.defaultProps = { + googleId: '', + openPlaylist: () => { }, + assignToFrame: () => { }, +}; diff --git a/ioneapps-maagapp-ee31119a522d/src/components/Playlists/openCreatePlaylist.js b/ioneapps-maagapp-ee31119a522d/src/components/Playlists/openCreatePlaylist.js new file mode 100644 index 0000000..0e9f1b4 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/src/components/Playlists/openCreatePlaylist.js @@ -0,0 +1,180 @@ +import React, { Component } from 'react'; +import { StyleSheet, TouchableOpacity, View } from 'react-native'; +import { ActionSheet, Text, NixplayIcon, Button, Dialogue } from 'nixplay-ui-kit'; +import googlePlaylistIcon from '~/images/social/google-photos.png'; +import PropTypes from 'prop-types'; +import i18n from '~/locale/i18n'; +import { config } from '~/config'; + +const styles = StyleSheet.create({ + actionText: { + flexDirection: 'row', + justifyContent: 'center', + alignContent: 'center', + + }, + actionButton: { + paddingHorizontal: 16, + height: 56, + justifyContent: 'center', + }, + text: { + paddingHorizontal: 5, + textAlign: 'center', + }, + createPlaylistCustomSheet: { + flexDirection: 'row', + justifyContent: 'space-evenly', + alignItems: 'center', + flexWrap: 'wrap', + }, + createPlaylistSheetTitle: { + flexDirection: 'row', + justifyContent: 'center', + alignItems: 'center', + width: '100%', + paddingTop: 24, + }, + createPlaylistSheetTitleInfo: { + marginLeft: 4, + }, + buttonContainer: { + alignItems: 'center', + paddingVertical: 24, + maxWidth: 130, + }, + buttonTitleStyle: { + paddingTop: 10, + textAlign: 'center', + }, + createPlaylistInfoText: { + marginBottom: 20, + }, + createPlaylistInfoTextBold: { + marginBottom: 20, + fontWeight: '600', + }, +}); + +export class OpenCreatePlaylist extends Component { + static propTypes = { + showAndCreatePlaylist: PropTypes.func.isRequired, + showAndCreateAlbum: PropTypes.func.isRequired, + showAndCreateGooglePlaylist: PropTypes.func.isRequired, + navigateToScreen: PropTypes.func.isRequired, + }; + + constructor(props) { + super(props); + this.openCreatePlaylistActionSheet = () => this.createPlaylistActionSheet.open(); + this.closeCreatePlaylistActionSheet = () => this.createPlaylistActionSheet.close(); + this.openCreatePlaylistInfo = () => this.createPlaylistInfo.open(); + this.closeCreatePlaylistInfo = () => this.createPlaylistInfo.close(); + } + + pressPlaylistLearnMore = () => { + this.createPlaylistInfo.close(() => { + this.createPlaylistActionSheet.close(() => { + this.props.navigateToScreen('WebView', { webViewUrl: config.urls.playlistLearnMore }); + }); + }); + } + + render() { + return ( + { + this.createPlaylistActionSheet = actionSheet; + }} + > + + + {i18n.t('playlists.createStandardPlaylist')} + this.createPlaylistInfo.open()} + > + + + + + + {i18n.t('contents.photoLibrary')} + + + + {i18n.t('albums.cloudAlbum')} + + + + + {i18n.t('playlists.createDynamicPlaylist')} + this.createPlaylistInfo.open()} + > + + + + + + {i18n.t('playlists.createGooglePlaylist')} + + { this.createPlaylistInfo = ref; }} + withClose={false} + > + {i18n.t('playlists.standardVsDynamic')} + + {i18n.t('playlists.standardPlaylistInfo')} + {i18n.t('playlists.dynamicPlaylistInfo')} + {i18n.t('playlists.syncedEvery30Minutes')} + this.pressPlaylistLearnMore()}> + {i18n.t('common.learnMore')} + + + this.createPlaylistInfo.close()} + color="blue" + testID="GotIt" + > + {i18n.t('common.gotIt')} + + + + {i18n.t('common.cancel')} + + ); + } +} + +export default OpenCreatePlaylist; diff --git a/ioneapps-maagapp-ee31119a522d/src/components/Playlists/playlistActions.js b/ioneapps-maagapp-ee31119a522d/src/components/Playlists/playlistActions.js new file mode 100644 index 0000000..3bbb2de --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/src/components/Playlists/playlistActions.js @@ -0,0 +1,586 @@ +import React, { Component } from 'react'; +import _ from 'lodash'; +import { connect } from 'react-redux'; +import PropTypes from 'prop-types'; +import { submit, isSubmitting, SubmissionError } from 'redux-form'; +import { View, Alert, StyleSheet } from 'react-native'; +import { Dialogue, ActionSheet, NixplayIcon, Text } from 'nixplay-ui-kit'; +import { ModalNameForm } from '~comp/Forms/modalNameForm'; +import { ModalForm } from '~comp/Forms/modalForm'; +import { Form } from '~comp/reduxForm'; + +import i18n from '~/locale/i18n'; +import { store } from '~/store/store'; +import { analytics } from '~/lib/utils'; + +import { + CREATE_PLAYLIST, + RENAME_PLAYLIST, + DELETE_PLAYLIST, + DELETE_SHARED_PLAYLIST, + LEAVE_SHARED_PLAYLIST, + REMOVE_PLAYLIST_CONTENT, + REMOVE_SHARED_PLAYLIST_AUDIENCE, + REMOVE_SHARED_PLAYLIST_CONTENT, + SHOW_TOAST_ERROR, + SET_PLAYLIST_SORT, + START_REORDERING_PHOTOS_IN_PLAYLIST, +} from '~/store/actionTypes'; +import { PLAYLIST_SORT } from '~/store/contentsConstants'; + + +const styles = StyleSheet.create({ + sortActions: { + flexDirection: 'row', + justifyContent: 'center', + alignItems: 'center', + paddingHorizontal: 44, + }, + sortActionIcon: { + marginLeft: 4, + }, + sortActionCheckmark: { + position: 'absolute', + right: 16, + }, +}); + +export class PlaylistActionsComponent extends Component { + static propTypes = { + actions: PropTypes.array, + route: PropTypes.string.isRequired, + deleteFormMeta: PropTypes.object.isRequired, + submitDeleteForm: PropTypes.func.isRequired, + changeSorting: PropTypes.func.isRequired, + isConnected: PropTypes.bool.isRequired, + toastError: PropTypes.func.isRequired, + setReorderingPhotosStatus: PropTypes.func.isRequired, + playlist: PropTypes.shape({ + sortOrder: PropTypes.string, + }), + contentSeqChanged: PropTypes.bool, + } + + static defaultProps = { + actions: [ + CREATE_PLAYLIST, + RENAME_PLAYLIST, + DELETE_PLAYLIST, + DELETE_SHARED_PLAYLIST, + LEAVE_SHARED_PLAYLIST, + ], + playlist: { + sortOrder: 'MOST_RECENTLY_ADDED', + }, + contentSeqChanged: false, + } + + constructor(props) { + super(props); + + const sortOptions = [{ + label: i18n.t('common.mostRecentlyAdded'), + value: PLAYLIST_SORT.MOST_RECENTLY_ADDED, + }, { + label: i18n.t('common.leastRecentlyAdded'), + value: PLAYLIST_SORT.LEAST_RECENTLY_ADDED, + }]; + + this.state = { + selectedAction: '', + selectedPlaylistId: -1, + selectedPlaylistName: '', + selectedContributor: '', + contributorsListLength: 0, + additionalParams: {}, + onActionSuccess: () => {}, + sortOptions, + nextSortOption: '', + }; + + this.dialogue = this.dialogue.bind(this); + this.doAction = this.doAction.bind(this); + this.closeAction = this.closeAction.bind(this); + this.submitActionForm = this.submitActionForm.bind(this); + this.actionExists = this.actionExists.bind(this); + + this.onSubmitFail = (errors) => { + const { _error: error } = errors; + this.props.toastError({ + text: typeof error.toString === 'function' ? error.toString() : error, + }); + }; + } + + dialogue(action) { + switch (action) { + case DELETE_PLAYLIST: + analytics.logAction('open_playlist_delete'); + return this.deleteDialogue; + case DELETE_SHARED_PLAYLIST: + analytics.logAction('open_shared_playlist_delete'); + return this.deleteSharedDialogue; + case REMOVE_PLAYLIST_CONTENT: + analytics.logAction('open_playlist_delete_content'); + return this.removeContentDialogue; + case SET_PLAYLIST_SORT: + analytics.logAction('open_playlist_sort'); + return this.sortPicker; + case LEAVE_SHARED_PLAYLIST: + return this.leaveSharedPlaylistDialogue; + case REMOVE_SHARED_PLAYLIST_AUDIENCE: + return this.removeAudienceDialouge; + case REMOVE_SHARED_PLAYLIST_CONTENT: + return this.removeSharedPlaylistContentDialouge; + default: + analytics.logAction('open_playlist_rename'); + return this.modalNameForm; + } + } + + doAction(action, playlistId, additionalParams, onActionSuccess) { + if (this.props.actions.indexOf(action) < 0) return; + this.setState({ + selectedAction: action, + selectedPlaylistId: playlistId, + selectedPlaylistName: additionalParams.name, + selectedContributor: additionalParams.contributorName, + contributorsListLength: additionalParams.contributorLength, + isShared: additionalParams.shared, + additionalParams, + onActionSuccess, + }, () => { + if (action === SET_PLAYLIST_SORT) { + this.processSortOptions(() => this.dialogue(action).open()); + } else { + this.dialogue(action).open(); + } + }); + } + + closeAction(callback) { + this.dialogue(this.state.selectedAction).close(); + this.setState({ + selectedAction: '', + selectedPlaylistId: -1, + selectedPlaylistName: '', + selectedContributor: '', + additionalParams: {}, + onActionSuccess: () => {}, + }, () => { + if (typeof callback === 'function') callback(); + }); + } + + submitActionForm(values, dispatch) { + const { playlists } = store.getState(); + return new Promise((resolve, reject) => { + if (this.props.isConnected) { + /** + * Validate pre-existing playlist name + */ + if (!_.find(playlists.playlists, _.matchesProperty('name', values.name))) { + dispatch({ + type: this.state.selectedAction, + payload: { + ...this.state.additionalParams, + ...values, + playlistId: this.state.selectedPlaylistId, + resolve, + reject, + }, + }); + } else { + reject(); + this.showAlert({ title: i18n.t('common.error'), msg: i18n.t('playlists.playlistNamesExists') }); + } + } else { + reject(new SubmissionError({ _error: i18n.t('common.noInternetConnection') })); + } + }); + } + + actionExists(actions) { + return (_.intersection(this.props.actions, actions)).length > 0; + } + + showAlert = ({ title, msg, callback }) => { + Alert.alert( + title, + msg, + [ + { + text: i18n.t('common.ok'), + onPress: callback ? callback() : + () => {}, + }, + ], + { cancelable: false }, + ); + } + + processSortOptions = (callback) => { + if (this.props.playlist.sortOrder === PLAYLIST_SORT.CUSTOM && + _.findIndex(this.state.sortOptions, { value: PLAYLIST_SORT.CUSTOM }) === -1 + ) { + // If sort is 'custom' but there is NO custom option = add custom option + this.setState({ + sortOptions: [...this.state.sortOptions, { + label: i18n.t('common.custom'), + value: PLAYLIST_SORT.CUSTOM, + withIcon: 'information', + }], + }, callback); + } else if (this.props.playlist.sortOrder !== PLAYLIST_SORT.CUSTOM && + _.findIndex(this.state.sortOptions, { value: PLAYLIST_SORT.CUSTOM }) >= 0 + ) { + // If sort is NOT 'custom' but there is custom option = remove custom option + this.setState({ + sortOptions: _.filter(this.state.sortOptions, (option) => option.value !== PLAYLIST_SORT.CUSTOM), + }, callback); + } else if (_.isFunction(callback)) { + callback(); + } + } + + sortChange = (value) => { + if (value === PLAYLIST_SORT.CUSTOM) { + this.sortPicker.close(() => { + this.sortCustomInfo.open(); + }); + } else if (value === this.props.playlist.sortOrder) { + this.sortPicker.close(); + } else if (this.props.playlist.sortOrder === PLAYLIST_SORT.CUSTOM) { + this.setState({ nextSortOption: value }, () => { + this.sortPicker.close(() => { + if (PLAYLIST_SORT.MOST_RECENTLY_ADDED === this.state.nextSortOption && this.sortChangeCustomToMostDialogue) { + this.sortChangeCustomToMostDialogue.open(); + } else if (PLAYLIST_SORT.LEAST_RECENTLY_ADDED === this.state.nextSortOption + && this.sortChangeCustomToLeastDialogue) { + this.sortChangeCustomToLeastDialogue.open(); + } + }); + }); + } else { + this.sortPicker.close(() => { + this.changeSorting(value); + }); + } + } + + sortCustomInfoClose = () => { + this.sortCustomInfo.close(() => { + this.sortPicker.open(); + }); + } + + sortConfirmChangeCustom = () => { + this.changeSorting(this.state.nextSortOption); + } + + changeSorting = (sortOrder) => { + if (this.props.isConnected) { + this.props.changeSorting( + this.state.selectedPlaylistId, + sortOrder, + () => { + this.props.setReorderingPhotosStatus(); + }, + (err) => { + this.props.toastError(err); + }, + ); + } else { + this.props.toastError({ text: i18n.t('common.noInternetConnection') }); + } + } + + render() { + const sortMostRecentSelected = this.props.playlist.sortOrder === PLAYLIST_SORT.MOST_RECENTLY_ADDED + && !this.props.contentSeqChanged; + const sortLeastRecentSelected = this.props.playlist.sortOrder === PLAYLIST_SORT.LEAST_RECENTLY_ADDED + && !this.props.contentSeqChanged; + const sortCustomSelected = this.props.playlist.sortOrder === PLAYLIST_SORT.CUSTOM || this.props.contentSeqChanged; + + return ( + + {this.actionExists([RENAME_PLAYLIST]) && + { this.modalNameForm = ref; }} + form={`${this.props.route}NameForm`} + onRequestClose={this.closeAction} + onSubmit={this.submitActionForm} + onSubmitSuccess={() => { + this.closeAction(this.state.onActionSuccess); + }} + onSubmitFail={(errors) => { + this.onSubmitFail(errors); + this.modalNameForm.reset(); + }} + onCancel={this.closeAction} + formTitle={i18n.t('playlists.renamePlaylist')} + placeholder={i18n.t('playlists.playlistName')} + initialValues={{ name: this.state.selectedPlaylistName }} + enableReinitialize + />} + {this.actionExists([DELETE_PLAYLIST]) && +
{ + this.closeAction(this.state.onActionSuccess); + }} + onSubmitFail={this.onSubmitFail} + > + { this.deleteDialogue = ref; }} + loading={this.props.deleteFormMeta.submitting} + withClose={false} + onRequestClose={this.closeAction} + > + {i18n.t('playlists.deletePlaylist')} + {i18n.t('playlists.deleteConfirmText', { playlistName: this.state.selectedPlaylistName })} + {i18n.t('common.cancel')} + {i18n.t('common.delete')} + +
} + {this.actionExists([DELETE_SHARED_PLAYLIST]) && +
{ + this.closeAction(this.state.onActionSuccess); + }} + onSubmitFail={this.onSubmitFail} + > + { this.deleteSharedDialogue = ref; }} + loading={this.props.deleteFormMeta.submitting} + withClose={false} + onRequestClose={this.closeAction} + > + {i18n.t('playlists.deletePlaylist')} + {i18n.t('playlists.deleteSharedConfirmText', { playlistName: this.state.selectedPlaylistName })} + {i18n.t('common.cancel')} + {i18n.t('common.delete')} + +
} + {this.actionExists([LEAVE_SHARED_PLAYLIST]) && + { this.leaveSharedPlaylistDialogue = ref; }} + form={`${this.props.route}DeleteContentForm`} + onSubmit={this.submitActionForm} + onSubmitSuccess={() => { + this.closeAction(this.state.onActionSuccess); + }} + onSubmitFail={(errors) => { + this.onSubmitFail(errors); + this.leaveSharedPlaylistDialogue.reset(); + }} + onCancel={this.closeAction} + submitText={i18n.t('common.confirm')} + submitColor="red" + > + {i18n.t('playlists.exitPlaylist')} + {i18n.t('playlists.exitPlaylistDialogue', { playlistName: this.state.selectedPlaylistName })} + } + {this.actionExists([REMOVE_PLAYLIST_CONTENT]) && + { this.removeContentDialogue = ref; }} + form={`${this.props.route}DeleteContentForm`} + onSubmit={this.submitActionForm} + onSubmitSuccess={() => { + this.closeAction(this.state.onActionSuccess); + }} + onSubmitFail={(errors) => { + this.onSubmitFail(errors); + this.removeContentDialogue.reset(); + }} + onCancel={this.closeAction} + submitText={i18n.t('common.remove')} + submitColor="red" + > + {this.state.isShared ? + {i18n.t('contents.removeContent')} + : + {i18n.t('contents.removeItems')} + } + {this.state.isShared ? + {i18n.t('contents.removeSelectedSharedPlaylistItem')} + : + {i18n.t('contents.removeSelectedItemsConfirm')} + } + } + {this.actionExists([REMOVE_SHARED_PLAYLIST_CONTENT]) && + { this.removeSharedPlaylistContentDialouge = ref; }} + form={`${this.props.route}DeleteContentForm`} + onSubmit={this.submitActionForm} + onSubmitSuccess={() => { + this.closeAction(this.state.onActionSuccess); + }} + onSubmitFail={(errors) => { + this.onSubmitFail(errors); + this.removeSharedPlaylistContentDialouge.reset(); + }} + onCancel={this.closeAction} + submitText={i18n.t('common.confirm')} + submitColor="red" + > + {i18n.t('contents.removeContent')} + {i18n.t('contents.removeSelectedSharedPlaylistItem')} + } + {this.actionExists([REMOVE_SHARED_PLAYLIST_AUDIENCE]) && + { this.removeAudienceDialouge = ref; }} + form={`${this.props.route}DeleteContentForm`} + onSubmit={this.submitActionForm} + onSubmitSuccess={() => { + this.closeAction(this.state.onActionSuccess); + }} + onSubmitFail={(errors) => { + this.onSubmitFail(errors); + this.removeAudienceDialouge.reset(); + }} + onCancel={this.closeAction} + submitText={i18n.t('common.confirm')} + submitColor="red" + > + {i18n.t('contents.removeFriend')} + {this.state.contributorsListLength === 1 ? + + {i18n.t('contents.unsharePlaylistFromYourOnlyFriend', { name: this.state.selectedContributor })} + {'\n\n'} + {i18n.t('contents.unsharePlaylistNotice')} + + : + + { + i18n.t('contents.unsharePlaylistFromFriend', { name: this.state.selectedContributor }) + } + + } + } + {this.actionExists([SET_PLAYLIST_SORT]) && + + { this.sortPicker = actionSheet; }} + > + {i18n.t('common.arrangeBy')} + this.sortChange(PLAYLIST_SORT.MOST_RECENTLY_ADDED)} testID="SortMostRecentAdded"> + {i18n.t('common.mostRecentlyAdded')} + {sortMostRecentSelected && } + + this.sortChange(PLAYLIST_SORT.LEAST_RECENTLY_ADDED)} testID="SortLeastRecentAdded"> + {i18n.t('common.leastRecentlyAdded')} + {sortLeastRecentSelected && } + + {sortCustomSelected && + this.sortPicker && this.sortPicker.close()} testID="SortCustom"> + {i18n.t('common.custom')} + + } + this.sortPicker && this.sortPicker.close()} >{i18n.t('common.cancel')} + + { this.sortCustomInfo = ref; }} + withClose={false} + onRequestClose={this.sortCustomInfoClose} + > + + {i18n.t('playlists.sortCustomInfoTitle')} + {i18n.t('playlists.sortCustomInfoBody')} + + {i18n.t('common.gotIt')} + + + { this.sortChangeCustomToMostDialogue = ref; }} + withClose={false} + onRequestClose={() => this.sortChangeCustomToMostDialogue && this.sortChangeCustomToMostDialogue.close()} + > + {i18n.t('playlists.dialogue.sort.change.fromCustomToMost.title')} + {i18n.t('playlists.dialogue.sort.change.fromCustomToMost.description')} + this.sortChangeCustomToMostDialogue && this.sortChangeCustomToMostDialogue.close()} testID="Cancel">{i18n.t('common.cancel')} + { + if (this.sortChangeCustomToMostDialogue) { + this.sortChangeCustomToMostDialogue.close(this.sortConfirmChangeCustom); + } + }} + color="blue" + testID="SortChangeConfirm" + >{i18n.t('common.ok')} + + + { this.sortChangeCustomToLeastDialogue = ref; }} + withClose={false} + onRequestClose={() => this.sortChangeCustomToLeastDialogue && this.sortChangeCustomToLeastDialogue.close()} + > + {i18n.t('playlists.dialogue.sort.change.fromCustomToLeast.title')} + {i18n.t('playlists.dialogue.sort.change.fromCustomToLeast.description')} + this.sortChangeCustomToLeastDialogue && this.sortChangeCustomToLeastDialogue.close()} testID="Cancel">{i18n.t('common.cancel')} + { + if (this.sortChangeCustomToLeastDialogue) { + this.sortChangeCustomToLeastDialogue.close(this.sortConfirmChangeCustom); + } + }} + color="blue" + testID="SortChangeConfirm" + >{i18n.t('common.ok')} + + + } +
+ ); + } +} + +const mapStateToProps = (state, ownProps) => { + const { route } = ownProps; + return { + deleteFormMeta: { + submitting: isSubmitting(`${route}DeleteForm`)(state), + }, + isConnected: state.network.isConnected, + }; +}; + +const mapActionsToProps = (dispatch, ownProps) => { + const { route } = ownProps; + return { + submitDeleteForm() { + dispatch(submit(`${route}DeleteForm`)); + }, + changeSorting(playlistId, order, resolve, reject) { + dispatch({ + type: SET_PLAYLIST_SORT, + payload: { + playlistId, + order, + resolve, + reject, + }, + }); + }, + setReorderingPhotosStatus() { + dispatch({ type: START_REORDERING_PHOTOS_IN_PLAYLIST, payload: {} }); + }, + toastError(payload) { + dispatch({ type: SHOW_TOAST_ERROR, payload }); + }, + }; +}; + +export default connect( + mapStateToProps, + mapActionsToProps, + null, + { forwardRef: true }, +)(PlaylistActionsComponent); diff --git a/ioneapps-maagapp-ee31119a522d/src/components/PrintQueue/empty.js b/ioneapps-maagapp-ee31119a522d/src/components/PrintQueue/empty.js new file mode 100644 index 0000000..5bbac7d --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/src/components/PrintQueue/empty.js @@ -0,0 +1,57 @@ +import React from 'react'; +import { + StyleSheet, + View, +} from 'react-native'; +import { ContentGridEmpty } from 'nixplay-ui-kit'; +// import { TutorialContents } from '~comp/PhotoPrintTutorial/tutorialContents'; +// import i18n from '~/locale/i18n'; + +const styles = StyleSheet.create({ + container: { + alignItems: 'center', + height: '100%', + justifyContent: 'space-between', + }, + textContainer: { + justifyContent: 'center', + alignItems: 'center', + margin: 40, + }, + centerText: { + textAlign: 'center', + }, + buttonContainer: { + height: 128, + }, + loadingContainer: { + flex: 1, + alignItems: 'center', + justifyContent: 'center', + }, +}); + +// Photo print will be set to english only so i18n's will be removed +// this is the wrike task for that: https://www.wrike.com/open.htm?id=453723168 +const PrintQueueEmptyComponent = () => ( + + + + + {/* {i18n.t('contents.letsGetStarted')} */} + {'Let\'s Get Started'} + {/* + {i18n.t('contents.selectPhotosToContinue')} + */} + + Select Photos to continue + + + + + + +); + +export const PrintQueueEmpty = (props) => (); + diff --git a/ioneapps-maagapp-ee31119a522d/src/components/ProgressBar/index.js b/ioneapps-maagapp-ee31119a522d/src/components/ProgressBar/index.js new file mode 100644 index 0000000..15a4699 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/src/components/ProgressBar/index.js @@ -0,0 +1,35 @@ +import React from 'react'; +import { + ProgressViewIOS, + ProgressBarAndroid, + Platform, +} from 'react-native'; +import { + color, +} from 'nixplay-ui-kit'; +import _ from 'lodash'; +import PropTypes from 'prop-types'; + +const isIOS = _.isEqual(Platform.OS, 'ios'); + +export const ProgressBar = (props) => ( + isIOS ? + : + +); + +ProgressBar.propTypes = { + progress: PropTypes.number, +}; + +ProgressBar.defaultProps = { + progress: 0, +}; diff --git a/ioneapps-maagapp-ee31119a522d/src/components/ShareExtension/friendItem.js b/ioneapps-maagapp-ee31119a522d/src/components/ShareExtension/friendItem.js new file mode 100644 index 0000000..33e4fb0 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/src/components/ShareExtension/friendItem.js @@ -0,0 +1,112 @@ +import React from 'react'; +import { + StyleSheet, + View, + TouchableOpacity, +} from 'react-native'; +import { + Text, + NixplayIcon as Icon, + color, +} from 'nixplay-ui-kit'; +import PropTypes from 'prop-types'; + +const styles = StyleSheet.create({ + container: { + backgroundColor: 'white', + width: '100%', + }, + mainContainer: { + flexDirection: 'row', + }, + plistContainer: { + flex: 1, + flexDirection: 'row', + alignItems: 'center', + marginBottom: 8, + }, + thumbnailsContainer: { + margin: 5, + alignItems: 'center', + justifyContent: 'center', + marginLeft: 8, + width: 60, + height: 60, + }, + textContainer: { + flex: 1, + flexDirection: 'column', + justifyContent: 'center', + paddingLeft: 10, + }, + thumbs: { + position: 'absolute', + borderRadius: 5, + width: 60, + height: 60, + overflow: 'hidden', + }, + errorBg: { + backgroundColor: color.mistBlue01, + alignItems: 'center', + justifyContent: 'center', + }, + textInput: { + display: 'none', + }, + iconBlank: { + position: 'absolute', + borderRadius: 5, + width: 25, + height: 25, + margin: 17.5, + }, + separator: { + backgroundColor: color.grey01, + height: 1, + width: '100%', + marginLeft: 16, + }, + row: { + flex: 1, + flexDirection: 'row', + alignItems: 'center', + height: 52, + }, +}); + +export const FriendItem = (props) => { + const { + data, + action, + index, + } = props; + const { isSelected } = data; + const title = data.fullName; + return ( + { action(index, data.id); }} + > + + + + + {title} + + + + + + ); +}; + +FriendItem.propTypes = { + data: PropTypes.object.isRequired, + action: PropTypes.func.isRequired, + index: PropTypes.number.isRequired, +}; diff --git a/ioneapps-maagapp-ee31119a522d/src/components/ShareExtension/playlistItem.js b/ioneapps-maagapp-ee31119a522d/src/components/ShareExtension/playlistItem.js new file mode 100644 index 0000000..cad9a8b --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/src/components/ShareExtension/playlistItem.js @@ -0,0 +1,112 @@ +import React from 'react'; +import { + StyleSheet, + View, + TouchableOpacity, +} from 'react-native'; +import { + Text, + NixplayIcon as Icon, + color, +} from 'nixplay-ui-kit'; +import PropTypes from 'prop-types'; + +const styles = StyleSheet.create({ + container: { + backgroundColor: 'white', + width: '100%', + }, + mainContainer: { + flexDirection: 'row', + }, + plistContainer: { + flex: 1, + flexDirection: 'row', + alignItems: 'center', + marginBottom: 8, + }, + thumbnailsContainer: { + margin: 5, + alignItems: 'center', + justifyContent: 'center', + marginLeft: 8, + width: 60, + height: 60, + }, + textContainer: { + flex: 1, + flexDirection: 'column', + justifyContent: 'center', + paddingLeft: 10, + }, + thumbs: { + position: 'absolute', + borderRadius: 5, + width: 60, + height: 60, + overflow: 'hidden', + }, + errorBg: { + backgroundColor: color.mistBlue01, + alignItems: 'center', + justifyContent: 'center', + }, + textInput: { + display: 'none', + }, + iconBlank: { + position: 'absolute', + borderRadius: 5, + width: 25, + height: 25, + margin: 17.5, + }, + separator: { + backgroundColor: color.grey01, + height: 1, + width: '100%', + marginLeft: 16, + }, + row: { + flex: 1, + flexDirection: 'row', + alignItems: 'center', + height: 52, + }, +}); + +export const PlaylistItem = (props) => { + const { + data, + action, + index, + } = props; + const { isSelected } = data; + const title = data.name; + return ( + { action(index, data.id); }} + > + + + + + {title} + + + + + + ); +}; + +PlaylistItem.propTypes = { + data: PropTypes.object.isRequired, + action: PropTypes.func.isRequired, + index: PropTypes.number.isRequired, +}; diff --git a/ioneapps-maagapp-ee31119a522d/src/components/ShareExtension/sharePreviewItem.js b/ioneapps-maagapp-ee31119a522d/src/components/ShareExtension/sharePreviewItem.js new file mode 100644 index 0000000..84ef698 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/src/components/ShareExtension/sharePreviewItem.js @@ -0,0 +1,95 @@ +import React from 'react'; +import { + StyleSheet, + View, + Image, + Keyboard, +} from 'react-native'; +import i18n from '~/locale/i18n'; +import { config } from '~/config'; +import { color, Text } from 'nixplay-ui-kit'; +import PropTypes from 'prop-types'; +import { TextInput2 } from '~comp/reduxForm'; + + +const styles = StyleSheet.create({ + container: { + flex: 1, + minHeight: 350, + backgroundColor: 'transparent', + marginHorizontal: 12, + marginBottom: 12, + flexDirection: 'column', + justifyContent: 'center', + alignItems: 'center', + }, + preview: { + flex: 1, + width: '100%', + height: 300, + alignItems: 'center', + justifyContent: 'center', + backgroundColor: 'black', + }, + caption: { + width: '100%', + minHeight: 50, + marginVertical: 8, + borderColor: color.grey02, + }, +}); + + +export const SharePreviewItem = (props) => { + const { + data, + index, + event, + } = props; + const { uri } = data; + return ( + + + + { + data.fileSize > config.fileSizeLimit + ? {i18n.t('contents.selectionErrorFileTooLarge')} + : { event(index, text); }} + /> + } + + + ); +}; + +SharePreviewItem.propTypes = { + data: PropTypes.object.isRequired, + index: PropTypes.number.isRequired, + event: PropTypes.func.isRequired, +}; diff --git a/ioneapps-maagapp-ee31119a522d/src/components/SharedPlaylist/ErrorBoundary/index.js b/ioneapps-maagapp-ee31119a522d/src/components/SharedPlaylist/ErrorBoundary/index.js new file mode 100644 index 0000000..0ea7689 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/src/components/SharedPlaylist/ErrorBoundary/index.js @@ -0,0 +1,41 @@ +/* eslint-disable */ +import React, { Component } from 'react'; +import { StyleSheet, View } from 'react-native'; +import { + Text, + color, +} from 'nixplay-ui-kit'; + +const styles = StyleSheet.create({ + text: { justifyContent: 'center', alignItems: 'center', textAlign: 'center' }, + container: { flex: 1, alignItems: 'center', justifyContent: 'center' }, +}); + +class ErrorBoundary extends Component { + constructor(props) { + super(props); + this.state = { hasError: false }; + } + + static getDerivedStateFromError(error) { + return { hasError: true }; + } + + render() { + if (!__DEV__) { + if (this.state.hasError) { + // You can render any custom fallback UI + return ( + + Oops, Something went wrong. + + ); + } + } + return this.props.children; + } +} + +export default ErrorBoundary; + +/* eslint-enable */ diff --git a/ioneapps-maagapp-ee31119a522d/src/components/SharedPlaylist/Gallery/index.js b/ioneapps-maagapp-ee31119a522d/src/components/SharedPlaylist/Gallery/index.js new file mode 100644 index 0000000..856e327 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/src/components/SharedPlaylist/Gallery/index.js @@ -0,0 +1,311 @@ +/* eslint-disable */ +import React, { PureComponent } from 'react'; +import { View, ViewPropTypes, Dimensions } from 'react-native'; +import PropTypes from 'prop-types'; +import { createResponder } from './libraries/GestureResponder'; +import TransformableImage from './libraries/TransformableImage'; +import ViewPager from './libraries/ViewPager'; + +const DEFAULT_FLAT_LIST_PROPS = { + windowSize: 3, // limits memory usage to 3 screens full of photos (ie. 3 photos) + initialNumToRender: 3, // limit amount, must also be limited, is not controlled by other props + maxToRenderPerBatch: 2, // when rendering ahead, how many should we render at the same time + getItemLayout: (data, index) => ({ // fixes scroll and pinch behavior + length: Dimensions.get('screen').width, + offset: Dimensions.get('screen').width * index, + index, + }), +}; + +export default class Gallery extends PureComponent { + static propTypes = { + ...View.propTypes, + images: PropTypes.arrayOf(PropTypes.object), + initialPage: PropTypes.number, + scrollViewStyle: ViewPropTypes ? ViewPropTypes.style : View.propTypes.style, + pageMargin: PropTypes.number, + onPageSelected: PropTypes.func, + onPageScrollStateChanged: PropTypes.func, + onPageScroll: PropTypes.func, + onSingleTapConfirmed: PropTypes.func, + onGalleryStateChanged: PropTypes.func, + onLongPress: PropTypes.func, + removeClippedSubviews: PropTypes.bool, + imageComponent: PropTypes.func, + errorComponent: PropTypes.func, + flatListProps: PropTypes.object, + enableZoom: PropTypes.bool, + }; + + static defaultProps = { + removeClippedSubviews: true, + imageComponent: undefined, + scrollViewStyle: {}, + enableZoom: true, + flatListProps: DEFAULT_FLAT_LIST_PROPS + }; + + imageRefs = new Map(); + activeResponder = undefined; + firstMove = true; + currentPage = 0; + pageCount = 0; + gestureResponder = undefined; + + constructor (props) { + super(props); + + this.renderPage = this.renderPage.bind(this); + this.onPageSelected = this.onPageSelected.bind(this); + this.onPageScrollStateChanged = this.onPageScrollStateChanged.bind(this); + this.getViewPagerInstance = this.getViewPagerInstance.bind(this); + this.getCurrentImageTransformer = this.getCurrentImageTransformer.bind(this); + this.getImageTransformer = this.getImageTransformer.bind(this); + this.getViewPagerInstance = this.getViewPagerInstance.bind(this); + this.activeImageResponder = this.activeImageResponder.bind(this); + } + + componentWillMount () { + let onResponderReleaseOrTerminate = (evt, gestureState) => { + if (this.activeResponder) { + if (this.activeResponder === this.viewPagerResponder && + !this.shouldScrollViewPager(evt, gestureState) && + Math.abs(gestureState.vx) > 0.5) { + this.activeResponder.onEnd(evt, gestureState, true); + this.getViewPagerInstance().flingToPage(this.currentPage, gestureState.vx); + } else { + this.activeResponder.onEnd(evt, gestureState); + } + this.activeResponder = null; + } + this.firstMove = true; + this.props.onGalleryStateChanged && this.props.onGalleryStateChanged(true); + }; + + this.gestureResponder = createResponder({ + onStartShouldSetResponderCapture: (evt, gestureState) => true, + onStartShouldSetResponder: (evt, gestureState) => true, + onResponderGrant: this.activeImageResponder, + onResponderMove: (evt, gestureState) => { + if (this.firstMove) { + this.firstMove = false; + if (this.shouldScrollViewPager(evt, gestureState)) { + this.activeViewPagerResponder(evt, gestureState); + } + this.props.onGalleryStateChanged && this.props.onGalleryStateChanged(false); + } + if (this.activeResponder === this.viewPagerResponder) { + const dx = gestureState.moveX - gestureState.previousMoveX; + const offset = this.getViewPagerInstance().getScrollOffsetFromCurrentPage(); + if (dx > 0 && offset > 0 && !this.shouldScrollViewPager(evt, gestureState)) { + if (dx > offset) { // active image responder + this.getViewPagerInstance().scrollByOffset(offset); + gestureState.moveX -= offset; + this.activeImageResponder(evt, gestureState); + } + } else if (dx < 0 && offset < 0 && !this.shouldScrollViewPager(evt, gestureState)) { + if (dx < offset) { // active image responder + this.getViewPagerInstance().scrollByOffset(offset); + gestureState.moveX -= offset; + this.activeImageResponder(evt, gestureState); + } + } + } + this.activeResponder.onMove(evt, gestureState); + }, + onResponderRelease: onResponderReleaseOrTerminate, + onResponderTerminate: onResponderReleaseOrTerminate, + onResponderTerminationRequest: (evt, gestureState) => false, // Do not allow parent view to intercept gesture + onResponderSingleTapConfirmed: (evt, gestureState) => { + this.props.onSingleTapConfirmed && this.props.onSingleTapConfirmed(this.currentPage); + } + }); + + this.viewPagerResponder = { + onStart: (evt, gestureState) => { + this.getViewPagerInstance().onResponderGrant(evt, gestureState); + }, + onMove: (evt, gestureState) => { + this.getViewPagerInstance().onResponderMove(evt, gestureState); + }, + onEnd: (evt, gestureState, disableSettle) => { + this.getViewPagerInstance().onResponderRelease(evt, gestureState, disableSettle); + } + }; + + this.imageResponder = { + onStart: (evt, gestureState) => { + const currentImageTransformer = this.getCurrentImageTransformer(); + currentImageTransformer && currentImageTransformer.onResponderGrant(evt, gestureState); + if (this.props.onLongPress) { + this._longPressTimeout = setTimeout(() => { + this.props.onLongPress(gestureState); + }, 600); + } + }, + onMove: (evt, gestureState) => { + const currentImageTransformer = this.getCurrentImageTransformer(); + currentImageTransformer && currentImageTransformer.onResponderMove(evt, gestureState); + clearTimeout(this._longPressTimeout); + }, + onEnd: (evt, gestureState) => { + const currentImageTransformer = this.getCurrentImageTransformer(); + currentImageTransformer && currentImageTransformer.onResponderRelease(evt, gestureState); + clearTimeout(this._longPressTimeout); + } + }; + } + + componentDidMount () { + this._isMounted = true; + } + + componentWillUnmount () { + this._isMounted = false; + } + + shouldScrollViewPager (evt, gestureState) { + if (gestureState.numberActiveTouches > 1) { + return false; + } + const viewTransformer = this.getCurrentImageTransformer(); + if (!viewTransformer) { + return false; + } + + const space = viewTransformer.getAvailableTranslateSpace(); + const dx = gestureState.moveX - gestureState.previousMoveX; + + if (dx > 0 && space.left <= 0 && this.currentPage > 0) { + return true; + } + if (dx < 0 && space.right <= 0 && this.currentPage < this.pageCount - 1) { + return true; + } + return false; + } + + activeImageResponder (evt, gestureState) { + if (this.activeResponder !== this.imageResponder) { + if (this.activeResponder === this.viewPagerResponder) { + this.viewPagerResponder.onEnd(evt, gestureState, true); // pass true to disable ViewPager settle + } + this.activeResponder = this.imageResponder; + this.imageResponder.onStart(evt, gestureState); + } + } + + activeViewPagerResponder (evt, gestureState) { + if (this.activeResponder !== this.viewPagerResponder) { + if (this.activeResponder === this.imageResponder) { + this.imageResponder.onEnd(evt, gestureState); + } + this.activeResponder = this.viewPagerResponder; + this.viewPagerResponder.onStart(evt, gestureState); + } + } + + getImageTransformer (page) { + if (page >= 0 && page < this.pageCount) { + let ref = this.imageRefs.get(page); + if (ref) { + return ref.getViewTransformerInstance(); + } + } + } + + getCurrentImageTransformer () { + return this.getImageTransformer(this.currentPage); + } + + getViewPagerInstance () { + return this.refs['galleryViewPager']; + } + + onPageSelected (page) { + this.currentPage = page; + this.props.onPageSelected && this.props.onPageSelected(page); + } + + onPageScrollStateChanged (state) { + if (state === 'idle') { + this.resetHistoryImageTransform(); + } + this.props.onPageScrollStateChanged && this.props.onPageScrollStateChanged(state); + } + + renderPage (pageData, pageId) { + const { onViewTransformed, onTransformGestureReleased, errorComponent, imageComponent } = this.props; + // console.log('pageData: ', pageData) + const imageUrl = { + source: { + uri: pageData.previewUrl + } + } + + // console.log(imageUrl) + return ( + { + onViewTransformed && onViewTransformed(transform, pageId); + })} + onTransformGestureReleased={((transform) => { + // need the 'return' here because the return value is checked in ViewTransformer + return onTransformGestureReleased && onTransformGestureReleased(transform, pageId); + })} + ref={((ref) => { this.imageRefs.set(pageId, ref); })} + key={'innerImage#' + pageId} + errorComponent={errorComponent} + imageComponent={imageComponent} + image={imageUrl} + pageData={pageData} + /> + ); + } + + resetHistoryImageTransform () { + let transformer = this.getImageTransformer(this.currentPage + 1); + if (transformer) { + transformer.forceUpdateTransform({scale: 1, translateX: 0, translateY: 0}); + } + + transformer = this.getImageTransformer(this.currentPage - 1); + if (transformer) { + transformer.forceUpdateTransform({scale: 1, translateX: 0, translateY: 0}); + } + } + + render () { + let gestureResponder = this.gestureResponder; + + let images = this.props.images; + if (!images) { + images = []; + } + this.pageCount = images.length; + + if (this.pageCount <= 0) { + gestureResponder = {}; + } + + const flatListProps = {...DEFAULT_FLAT_LIST_PROPS, ...this.props.flatListProps}; + // console.log(this.pageCount) + return ( + + ); + } +} +/* eslint-enable */ diff --git a/ioneapps-maagapp-ee31119a522d/src/components/SharedPlaylist/Gallery/libraries/GestureResponder/TouchDistanceMath.js b/ioneapps-maagapp-ee31119a522d/src/components/SharedPlaylist/Gallery/libraries/GestureResponder/TouchDistanceMath.js new file mode 100644 index 0000000..f25fe15 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/src/components/SharedPlaylist/Gallery/libraries/GestureResponder/TouchDistanceMath.js @@ -0,0 +1,42 @@ +/* eslint-disable */ +'use strict'; + +export function distance (touchTrackA, touchTrackB, ofCurrent) { + let xa, ya, xb, yb; + if (ofCurrent) { + xa = touchTrackA.currentPageX; + ya = touchTrackA.currentPageY; + xb = touchTrackB.currentPageX; + yb = touchTrackB.currentPageY; + } else { + xa = touchTrackA.previousPageX; + ya = touchTrackA.previousPageY; + xb = touchTrackB.previousPageX; + yb = touchTrackB.previousPageY; + } + return Math.sqrt(Math.pow(xa - xb, 2) + Math.pow(ya - yb, 2)); +} + +export function maxDistance (touchBank, ofCurrent) { + let max = 0; + for (let i = 0; i < touchBank.length - 1; i++) { + for (let j = i + 1; j < touchBank.length; j++) { + let d = distance(touchBank[i], touchBank[j], ofCurrent); + if (d > max) { + max = d; + } + } + } + return max; +} + +export function pinchDistance (touchHistory, touchesChangedAfter, ofCurrent) { + let touchBank = touchHistory.touchBank; + if (touchHistory.numberActiveTouches > 1) { + let filteredTouchBank = touchBank.filter((touchTrack) => { + return touchTrack && touchTrack.currentTimeStamp >= touchesChangedAfter; + }); + return maxDistance(filteredTouchBank, ofCurrent); + } +} +/* eslint-enable */ diff --git a/ioneapps-maagapp-ee31119a522d/src/components/SharedPlaylist/Gallery/libraries/GestureResponder/TouchHistoryMath.js b/ioneapps-maagapp-ee31119a522d/src/components/SharedPlaylist/Gallery/libraries/GestureResponder/TouchHistoryMath.js new file mode 100644 index 0000000..da73c7b --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/src/components/SharedPlaylist/Gallery/libraries/GestureResponder/TouchHistoryMath.js @@ -0,0 +1,105 @@ +/* eslint-disable */ +/** + * @providesModule TouchHistoryMath + */ + +'use strict'; + +var TouchHistoryMath = { + /** + * This code is optimized and not intended to look beautiful. This allows + * computing of touch centroids that have moved after `touchesChangedAfter` + * timeStamp. You can compute the current centroid involving all touches + * moves after `touchesChangedAfter`, or you can compute the previous + * centroid of all touches that were moved after `touchesChangedAfter`. + * + * @param {TouchHistoryMath} touchHistory Standard Responder touch track + * data. + * @param {number} touchesChangedAfter timeStamp after which moved touches + * are considered "actively moving" - not just "active". + * @param {boolean} isXAxis Consider `x` dimension vs. `y` dimension. + * @param {boolean} ofCurrent Compute current centroid for actively moving + * touches vs. previous centroid of now actively moving touches. + * @return {number} value of centroid in specified dimension. + */ + centroidDimension: function (touchHistory, touchesChangedAfter, isXAxis, ofCurrent) { + var touchBank = touchHistory.touchBank; + var total = 0; + var count = 0; + + var oneTouchData = touchHistory.numberActiveTouches === 1 ? + touchHistory.touchBank[touchHistory.indexOfSingleActiveTouch] : null; + + if (oneTouchData !== null) { + if (oneTouchData.touchActive && oneTouchData.currentTimeStamp > touchesChangedAfter) { + total += ofCurrent && isXAxis ? oneTouchData.currentPageX : + ofCurrent && !isXAxis ? oneTouchData.currentPageY : + !ofCurrent && isXAxis ? oneTouchData.previousPageX : + oneTouchData.previousPageY; + count = 1; + } + } else { + for (var i = 0; i < touchBank.length; i++) { + var touchTrack = touchBank[i]; + if (touchTrack !== null && touchTrack !== undefined && touchTrack.touchActive && touchTrack.currentTimeStamp >= touchesChangedAfter) { + var toAdd; // Yuck, program temporarily in invalid state. + if (ofCurrent && isXAxis) { + toAdd = touchTrack.currentPageX; + } else if (ofCurrent && !isXAxis) { + toAdd = touchTrack.currentPageY; + } else if (!ofCurrent && isXAxis) { + toAdd = touchTrack.previousPageX; + } else { + toAdd = touchTrack.previousPageY; + } + total += toAdd; + count++; + } + } + } + return count > 0 ? total / count : TouchHistoryMath.noCentroid; + }, + + currentCentroidXOfTouchesChangedAfter: function (touchHistory, touchesChangedAfter) { + return TouchHistoryMath.centroidDimension(touchHistory, touchesChangedAfter, true, // isXAxis + true // ofCurrent + ); + }, + + currentCentroidYOfTouchesChangedAfter: function (touchHistory, touchesChangedAfter) { + return TouchHistoryMath.centroidDimension(touchHistory, touchesChangedAfter, false, // isXAxis + true // ofCurrent + ); + }, + + previousCentroidXOfTouchesChangedAfter: function (touchHistory, touchesChangedAfter) { + return TouchHistoryMath.centroidDimension(touchHistory, touchesChangedAfter, true, // isXAxis + false // ofCurrent + ); + }, + + previousCentroidYOfTouchesChangedAfter: function (touchHistory, touchesChangedAfter) { + return TouchHistoryMath.centroidDimension(touchHistory, touchesChangedAfter, false, // isXAxis + false // ofCurrent + ); + }, + + currentCentroidX: function (touchHistory) { + return TouchHistoryMath.centroidDimension(touchHistory, 0, // touchesChangedAfter + true, // isXAxis + true // ofCurrent + ); + }, + + currentCentroidY: function (touchHistory) { + return TouchHistoryMath.centroidDimension(touchHistory, 0, // touchesChangedAfter + false, // isXAxis + true // ofCurrent + ); + }, + + noCentroid: -1 +}; + +module.exports = TouchHistoryMath; +/* eslint-enable */ diff --git a/ioneapps-maagapp-ee31119a522d/src/components/SharedPlaylist/Gallery/libraries/GestureResponder/createResponder.android.js b/ioneapps-maagapp-ee31119a522d/src/components/SharedPlaylist/Gallery/libraries/GestureResponder/createResponder.android.js new file mode 100644 index 0000000..1f61eae --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/src/components/SharedPlaylist/Gallery/libraries/GestureResponder/createResponder.android.js @@ -0,0 +1,318 @@ +/* eslint-disable */ +/** + * Inspired by 'PanResponder' from Facebook. + */ + +'use strict'; + +import {InteractionManager} from 'react-native'; +import TouchHistoryMath from './TouchHistoryMath'; // copied from react/lib/TouchHistoryMath.js +import {pinchDistance} from './TouchDistanceMath'; +import TimerMixin from 'react-timer-mixin'; + +const currentCentroidXOfTouchesChangedAfter = TouchHistoryMath.currentCentroidXOfTouchesChangedAfter; +const currentCentroidYOfTouchesChangedAfter = TouchHistoryMath.currentCentroidYOfTouchesChangedAfter; +const previousCentroidXOfTouchesChangedAfter = TouchHistoryMath.previousCentroidXOfTouchesChangedAfter; +const previousCentroidYOfTouchesChangedAfter = TouchHistoryMath.previousCentroidYOfTouchesChangedAfter; +const currentCentroidX = TouchHistoryMath.currentCentroidX; +const currentCentroidY = TouchHistoryMath.currentCentroidY; + +const TAP_UP_TIME_THRESHOLD = 400; +const TAP_MOVE_THRESHOLD = 10; +const MOVE_THRESHOLD = 3; + +let DEV = false; + +function initializeGestureState (gestureState) { + gestureState.moveX = 0; + gestureState.moveY = 0; + gestureState.x0 = 0; + gestureState.y0 = 0; + gestureState.dx = 0; + gestureState.dy = 0; + gestureState.vx = 0; + gestureState.vy = 0; + gestureState.numberActiveTouches = 0; + // All `gestureState` accounts for timeStamps up until: + gestureState._accountsForMovesUpTo = 0; + + gestureState.previousMoveX = 0; + gestureState.previousMoveY = 0; + gestureState.pinch = undefined; + gestureState.previousPinch = undefined; + gestureState.singleTapUp = false; + gestureState.doubleTapUp = false; + gestureState._singleTabFailed = false; +} + +function updateGestureStateOnMove (gestureState, touchHistory, e) { + const movedAfter = gestureState._accountsForMovesUpTo; + const prevX = previousCentroidXOfTouchesChangedAfter(touchHistory, movedAfter); + const x = currentCentroidXOfTouchesChangedAfter(touchHistory, movedAfter); + const prevY = previousCentroidYOfTouchesChangedAfter(touchHistory, movedAfter); + const y = currentCentroidYOfTouchesChangedAfter(touchHistory, movedAfter); + const dx = x - prevX; + const dy = y - prevY; + + gestureState.numberActiveTouches = touchHistory.numberActiveTouches; + gestureState.moveX = x; + gestureState.moveY = y; + + // TODO: This must be filtered intelligently. + // const dt = touchHistory.mostRecentTimeStamp - movedAfter; + const dt = convertToMillisecIfNeeded(touchHistory.mostRecentTimeStamp - movedAfter); + gestureState.vx = dx / dt; + gestureState.vy = dy / dt; + gestureState.dx += dx; + gestureState.dy += dy; + gestureState._accountsForMovesUpTo = touchHistory.mostRecentTimeStamp; + + gestureState.previousMoveX = prevX; + gestureState.previousMoveY = prevY; + gestureState.pinch = pinchDistance(touchHistory, movedAfter, true); + gestureState.previousPinch = pinchDistance(touchHistory, movedAfter, false); +} + +function clearInteractionHandle (interactionState) { + if (interactionState.handle) { + InteractionManager.clearInteractionHandle(interactionState.handle); + interactionState.handle = null; + } +} + +/** + * Due to commit https://github.com/facebook/react-native/commit/f2c1868b56bdfc8b0d6f448733848eafed2cd440, + * Android is using nanoseconds while iOS is using milliseconds. + * @param interval + * @returns {*} + */ +function convertToMillisecIfNeeded (interval) { + if (interval > 1000000) { + return interval / 1000000; + } + return interval; +} + +function cancelSingleTapConfirm (gestureState) { + if (typeof gestureState._singleTapConfirmId !== 'undefined') { + TimerMixin.clearTimeout(gestureState._singleTapConfirmId); + gestureState._singleTapConfirmId = undefined; + } +} + +/** + * The config object contains same callbacks as the default gesture responder(https://facebook.github.io/react-native/docs/gesture-responder-system.html). + * And every callback are called with an additional argument 'gestureState', like PanResponder. + * @param config + * @returns {{}} + */ + +/** + * The config object contains same callbacks as the default gesture responder(https://facebook.github.io/react-native/docs/gesture-responder-system.html). + * And every callback are called with an additional argument 'gestureState', like PanResponder. + * @param config + * @param debug true to enable debug logs + * @returns {{}} + */ +export default function create (config) { + if (config.debug) { + DEV = true; + } + + const interactionState = { + handle: null + }; + const gestureState = { + // Useful for debugging + stateID: Math.random() + }; + initializeGestureState(gestureState); + + const handlers = { + onStartShouldSetResponder: function (e) { + DEV && console.log('onStartShouldSetResponder...'); + cancelSingleTapConfirm(gestureState); + return config.onStartShouldSetResponder ? + config.onStartShouldSetResponder(e, gestureState) : + false; + }, + onMoveShouldSetResponder: function (e) { + DEV && console.log('onMoveShouldSetResponder...'); + + return config.onMoveShouldSetResponder && effectiveMove(config, gestureState) ? + config.onMoveShouldSetResponder(e, gestureState) : + false; + }, + // onStartShouldSetResponderCapture: function (e) { + // // DEV && console.log('onStartShouldSetResponderCapture...'); + // // cancelSingleTapConfirm(gestureState); + // // // TODO: Actually, we should reinitialize the state any time + // // // touches.length increases from 0 active to > 0 active. + + // if (e.nativeEvent.touches.length === 1) { + // initializeGestureState(gestureState); + // } + // gestureState.numberActiveTouches = e.touchHistory.numberActiveTouches; + // // return config.onStartShouldSetResponderCapture ? + // // config.onStartShouldSetResponderCapture(e, gestureState) : + // // false; + // return false; + + // }, + + onMoveShouldSetResponderCapture: function (e) { + DEV && console.log('onMoveShouldSetResponderCapture...'); + const touchHistory = e.touchHistory; + // Responder system incorrectly dispatches should* to current responder + // Filter out any touch moves past the first one - we would have + // already processed multi-touch geometry during the first event. + if (gestureState._accountsForMovesUpTo === touchHistory.mostRecentTimeStamp) { + return false; + } + updateGestureStateOnMove(gestureState, touchHistory, e); + return config.onMoveShouldSetResponderCapture && effectiveMove(config, gestureState) ? + config.onMoveShouldSetResponderCapture(e, gestureState) : + false; + }, + + onResponderGrant: function (e) { + DEV && console.log('onResponderGrant...'); + cancelSingleTapConfirm(gestureState); + if (!interactionState.handle) { + interactionState.handle = InteractionManager.createInteractionHandle(); + } + gestureState._grantTimestamp = e.touchHistory.mostRecentTimeStamp; + gestureState.x0 = currentCentroidX(e.touchHistory); + gestureState.y0 = currentCentroidY(e.touchHistory); + gestureState.dx = 0; + gestureState.dy = 0; + if (config.onResponderGrant) { + config.onResponderGrant(e, gestureState); + } + // TODO: t7467124 investigate if this can be removed + return config.onShouldBlockNativeResponder === undefined ? + true : + config.onShouldBlockNativeResponder(); + }, + + onResponderReject: function (e) { + DEV && console.log('onResponderReject...'); + clearInteractionHandle(interactionState); + config.onResponderReject && config.onResponderReject(e, gestureState); + }, + + onResponderRelease: function (e) { + if (gestureState.singleTapUp) { + if (gestureState._lastSingleTapUp) { + if (convertToMillisecIfNeeded(e.touchHistory.mostRecentTimeStamp - gestureState._lastReleaseTimestamp) < TAP_UP_TIME_THRESHOLD) { + gestureState.doubleTapUp = true; + } + } + gestureState._lastSingleTapUp = true; + + // schedule to confirm single tap + if (!gestureState.doubleTapUp) { + const snapshot = Object.assign({}, gestureState); + const timeoutId = TimerMixin.setTimeout(() => { + if (gestureState._singleTapConfirmId === timeoutId) { + DEV && console.log('onResponderSingleTapConfirmed...'); + config.onResponderSingleTapConfirmed && config.onResponderSingleTapConfirmed(e, snapshot); + } + }, TAP_UP_TIME_THRESHOLD); + gestureState._singleTapConfirmId = timeoutId; + } + } + gestureState._lastReleaseTimestamp = e.touchHistory.mostRecentTimeStamp; + + DEV && console.log('onResponderRelease...' + JSON.stringify(gestureState)); + clearInteractionHandle(interactionState); + config.onResponderRelease && config.onResponderRelease(e, gestureState); + initializeGestureState(gestureState); + }, + + onResponderStart: function (e) { + DEV && console.log('onResponderStart...'); + const touchHistory = e.touchHistory; + gestureState.numberActiveTouches = touchHistory.numberActiveTouches; + if (config.onResponderStart) { + config.onResponderStart(e, gestureState); + } + }, + + onResponderMove: function (e) { + const touchHistory = e.touchHistory; + // Guard against the dispatch of two touch moves when there are two + // simultaneously changed touches. + if (gestureState._accountsForMovesUpTo === touchHistory.mostRecentTimeStamp) { + return; + } + // Filter out any touch moves past the first one - we would have + // already processed multi-touch geometry during the first event. + updateGestureStateOnMove(gestureState, touchHistory, e); + + DEV && console.log('onResponderMove...' + JSON.stringify(gestureState)); + if (config.onResponderMove && effectiveMove(config, gestureState)) { + config.onResponderMove(e, gestureState); + } + }, + + onResponderEnd: function (e) { + const touchHistory = e.touchHistory; + gestureState.numberActiveTouches = touchHistory.numberActiveTouches; + + if (touchHistory.numberActiveTouches > 0 || + convertToMillisecIfNeeded(touchHistory.mostRecentTimeStamp - gestureState._grantTimestamp) > TAP_UP_TIME_THRESHOLD || + Math.abs(gestureState.dx) >= TAP_MOVE_THRESHOLD || + Math.abs(gestureState.dy) >= TAP_MOVE_THRESHOLD + ) { + gestureState._singleTabFailed = true; + } + if (!gestureState._singleTabFailed) { + gestureState.singleTapUp = true; + } + + DEV && console.log('onResponderEnd...' + JSON.stringify(gestureState)); + clearInteractionHandle(interactionState); + config.onResponderEnd && config.onResponderEnd(e, gestureState); + }, + + onResponderTerminate: function (e) { + DEV && console.log('onResponderTerminate...'); + clearInteractionHandle(interactionState); + config.onResponderTerminate && config.onResponderTerminate(e, gestureState); + initializeGestureState(gestureState); + }, + + onResponderTerminationRequest: function (e) { + DEV && console.log('onResponderTerminationRequest...'); + return config.onResponderTerminationRequest ? + config.onResponderTerminationRequest(e.gestureState) : + true; + } + }; + return {...handlers}; +} + +/** + * On Android devices, the default gesture responder is too sensitive that a single tap(no move intended) may trigger a move event. + * We can use a moveThreshold config to avoid those unwanted move events. + * @param config + * @param gestureState + * @returns {boolean} + */ +function effectiveMove (config, gestureState) { + if (gestureState.numberActiveTouches > 1) { + // on iOS simulator, a pinch gesture(move with alt pressed) will not change gestureState.dx(always 0) + return true; + } + + let moveThreshold = MOVE_THRESHOLD; + if (typeof config.moveThreshold === 'number') { + moveThreshold = config.minMoveDistance; + } + if (Math.abs(gestureState.dx) >= moveThreshold || Math.abs(gestureState.dy) >= moveThreshold) { + return true; + } + return false; +} +/* eslint-enable */ diff --git a/ioneapps-maagapp-ee31119a522d/src/components/SharedPlaylist/Gallery/libraries/GestureResponder/createResponder.ios.js b/ioneapps-maagapp-ee31119a522d/src/components/SharedPlaylist/Gallery/libraries/GestureResponder/createResponder.ios.js new file mode 100644 index 0000000..3a8a307 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/src/components/SharedPlaylist/Gallery/libraries/GestureResponder/createResponder.ios.js @@ -0,0 +1,319 @@ +/* eslint-disable */ +/** + * Inspired by 'PanResponder' from Facebook. + */ + +'use strict'; + +import {InteractionManager} from 'react-native'; +import TouchHistoryMath from './TouchHistoryMath'; // copied from react/lib/TouchHistoryMath.js +import {pinchDistance} from './TouchDistanceMath'; +import TimerMixin from 'react-timer-mixin'; + +const currentCentroidXOfTouchesChangedAfter = TouchHistoryMath.currentCentroidXOfTouchesChangedAfter; +const currentCentroidYOfTouchesChangedAfter = TouchHistoryMath.currentCentroidYOfTouchesChangedAfter; +const previousCentroidXOfTouchesChangedAfter = TouchHistoryMath.previousCentroidXOfTouchesChangedAfter; +const previousCentroidYOfTouchesChangedAfter = TouchHistoryMath.previousCentroidYOfTouchesChangedAfter; +const currentCentroidX = TouchHistoryMath.currentCentroidX; +const currentCentroidY = TouchHistoryMath.currentCentroidY; + +const TAP_UP_TIME_THRESHOLD = 400; +const TAP_MOVE_THRESHOLD = 10; +const MOVE_THRESHOLD = 2; + +let DEV = false; + +function initializeGestureState (gestureState) { + gestureState.moveX = 0; + gestureState.moveY = 0; + gestureState.x0 = 0; + gestureState.y0 = 0; + gestureState.dx = 0; + gestureState.dy = 0; + gestureState.vx = 0; + gestureState.vy = 0; + gestureState.numberActiveTouches = 0; + // All `gestureState` accounts for timeStamps up until: + gestureState._accountsForMovesUpTo = 0; + + gestureState.previousMoveX = 0; + gestureState.previousMoveY = 0; + gestureState.pinch = undefined; + gestureState.previousPinch = undefined; + gestureState.singleTapUp = false; + gestureState.doubleTapUp = false; + gestureState._singleTabFailed = false; +} + +function updateGestureStateOnMove (gestureState, touchHistory, e) { + const movedAfter = gestureState._accountsForMovesUpTo; + const prevX = previousCentroidXOfTouchesChangedAfter(touchHistory, movedAfter); + const x = currentCentroidXOfTouchesChangedAfter(touchHistory, movedAfter); + const prevY = previousCentroidYOfTouchesChangedAfter(touchHistory, movedAfter); + const y = currentCentroidYOfTouchesChangedAfter(touchHistory, movedAfter); + const dx = x - prevX; + const dy = y - prevY; + + gestureState.numberActiveTouches = touchHistory.numberActiveTouches; + gestureState.moveX = x; + gestureState.moveY = y; + + // TODO: This must be filtered intelligently. + // const dt = touchHistory.mostRecentTimeStamp - movedAfter; + const dt = convertToMillisecIfNeeded(touchHistory.mostRecentTimeStamp - movedAfter); + gestureState.vx = dx / dt; + gestureState.vy = dy / dt; + gestureState.dx += dx; + gestureState.dy += dy; + gestureState._accountsForMovesUpTo = touchHistory.mostRecentTimeStamp; + + gestureState.previousMoveX = prevX; + gestureState.previousMoveY = prevY; + gestureState.pinch = pinchDistance(touchHistory, movedAfter, true); + gestureState.previousPinch = pinchDistance(touchHistory, movedAfter, false); +} + +function clearInteractionHandle (interactionState) { + if (interactionState.handle) { + InteractionManager.clearInteractionHandle(interactionState.handle); + interactionState.handle = null; + } +} + +/** + * Due to commit https://github.com/facebook/react-native/commit/f2c1868b56bdfc8b0d6f448733848eafed2cd440, + * Android is using nanoseconds while iOS is using milliseconds. + * @param interval + * @returns {*} + */ +function convertToMillisecIfNeeded (interval) { + if (interval > 1000000) { + return interval / 1000000; + } + return interval; +} + +function cancelSingleTapConfirm (gestureState) { + if (typeof gestureState._singleTapConfirmId !== 'undefined') { + TimerMixin.clearTimeout(gestureState._singleTapConfirmId); + gestureState._singleTapConfirmId = undefined; + } +} + +/** + * The config object contains same callbacks as the default gesture responder(https://facebook.github.io/react-native/docs/gesture-responder-system.html). + * And every callback are called with an additional argument 'gestureState', like PanResponder. + * @param config + * @returns {{}} + */ + +/** + * The config object contains same callbacks as the default gesture responder(https://facebook.github.io/react-native/docs/gesture-responder-system.html). + * And every callback are called with an additional argument 'gestureState', like PanResponder. + * @param config + * @param debug true to enable debug logs + * @returns {{}} + */ +export default function create (config) { + if (config.debug) { + DEV = true; + } + + const interactionState = { + handle: null + }; + const gestureState = { + // Useful for debugging + stateID: Math.random() + }; + initializeGestureState(gestureState); + + const handlers = { + onStartShouldSetResponder: function (e) { + DEV && console.log('onStartShouldSetResponder...'); + cancelSingleTapConfirm(gestureState); + return config.onStartShouldSetResponder ? + config.onStartShouldSetResponder(e, gestureState) : + false; + }, + onMoveShouldSetResponder: function (e) { + DEV && console.log('onMoveShouldSetResponder...'); + + // return config.onMoveShouldSetResponder && effectiveMove(config, gestureState) ? + // config.onMoveShouldSetResponder(e, gestureState) : + // false; + return true; + }, + onStartShouldSetResponderCapture: function (e) { + DEV && console.log('onStartShouldSetResponderCapture...'); + cancelSingleTapConfirm(gestureState); + // TODO: Actually, we should reinitialize the state any time + // touches.length increases from 0 active to > 0 active. + + if (e.nativeEvent.touches.length === 1) { + initializeGestureState(gestureState); + } + gestureState.numberActiveTouches = e.touchHistory.numberActiveTouches; + // return config.onStartShouldSetResponderCapture ? + // config.onStartShouldSetResponderCapture(e, gestureState) : + // false; + return false; + + }, + + onMoveShouldSetResponderCapture: function (e) { + DEV && console.log('onMoveShouldSetResponderCapture...'); + const touchHistory = e.touchHistory; + // Responder system incorrectly dispatches should* to current responder + // Filter out any touch moves past the first one - we would have + // already processed multi-touch geometry during the first event. + if (gestureState._accountsForMovesUpTo === touchHistory.mostRecentTimeStamp) { + return false; + } + updateGestureStateOnMove(gestureState, touchHistory, e); + return config.onMoveShouldSetResponderCapture && effectiveMove(config, gestureState) ? + config.onMoveShouldSetResponderCapture(e, gestureState) : + false; + }, + + onResponderGrant: function (e) { + DEV && console.log('onResponderGrant...'); + cancelSingleTapConfirm(gestureState); + if (!interactionState.handle) { + interactionState.handle = InteractionManager.createInteractionHandle(); + } + gestureState._grantTimestamp = e.touchHistory.mostRecentTimeStamp; + gestureState.x0 = currentCentroidX(e.touchHistory); + gestureState.y0 = currentCentroidY(e.touchHistory); + gestureState.dx = 0; + gestureState.dy = 0; + if (config.onResponderGrant) { + config.onResponderGrant(e, gestureState); + } + // TODO: t7467124 investigate if this can be removed + return config.onShouldBlockNativeResponder === undefined ? + true : + config.onShouldBlockNativeResponder(); + }, + + onResponderReject: function (e) { + DEV && console.log('onResponderReject...'); + clearInteractionHandle(interactionState); + config.onResponderReject && config.onResponderReject(e, gestureState); + }, + + onResponderRelease: function (e) { + if (gestureState.singleTapUp) { + if (gestureState._lastSingleTapUp) { + if (convertToMillisecIfNeeded(e.touchHistory.mostRecentTimeStamp - gestureState._lastReleaseTimestamp) < TAP_UP_TIME_THRESHOLD) { + gestureState.doubleTapUp = true; + } + } + gestureState._lastSingleTapUp = true; + + // schedule to confirm single tap + if (!gestureState.doubleTapUp) { + const snapshot = Object.assign({}, gestureState); + const timeoutId = TimerMixin.setTimeout(() => { + if (gestureState._singleTapConfirmId === timeoutId) { + DEV && console.log('onResponderSingleTapConfirmed...'); + config.onResponderSingleTapConfirmed && config.onResponderSingleTapConfirmed(e, snapshot); + } + }, TAP_UP_TIME_THRESHOLD); + gestureState._singleTapConfirmId = timeoutId; + } + } + gestureState._lastReleaseTimestamp = e.touchHistory.mostRecentTimeStamp; + + DEV && console.log('onResponderRelease...' + JSON.stringify(gestureState)); + clearInteractionHandle(interactionState); + config.onResponderRelease && config.onResponderRelease(e, gestureState); + initializeGestureState(gestureState); + }, + + onResponderStart: function (e) { + DEV && console.log('onResponderStart...'); + const touchHistory = e.touchHistory; + gestureState.numberActiveTouches = touchHistory.numberActiveTouches; + if (config.onResponderStart) { + config.onResponderStart(e, gestureState); + } + }, + + onResponderMove: function (e) { + const touchHistory = e.touchHistory; + // Guard against the dispatch of two touch moves when there are two + // simultaneously changed touches. + if (gestureState._accountsForMovesUpTo === touchHistory.mostRecentTimeStamp) { + return; + } + // Filter out any touch moves past the first one - we would have + // already processed multi-touch geometry during the first event. + updateGestureStateOnMove(gestureState, touchHistory, e); + + DEV && console.log('onResponderMove...' + JSON.stringify(gestureState)); + if (config.onResponderMove && effectiveMove(config, gestureState)) { + config.onResponderMove(e, gestureState); + } + }, + + onResponderEnd: function (e) { + const touchHistory = e.touchHistory; + gestureState.numberActiveTouches = touchHistory.numberActiveTouches; + + if (touchHistory.numberActiveTouches > 0 || + convertToMillisecIfNeeded(touchHistory.mostRecentTimeStamp - gestureState._grantTimestamp) > TAP_UP_TIME_THRESHOLD || + Math.abs(gestureState.dx) >= TAP_MOVE_THRESHOLD || + Math.abs(gestureState.dy) >= TAP_MOVE_THRESHOLD + ) { + gestureState._singleTabFailed = true; + } + if (!gestureState._singleTabFailed) { + gestureState.singleTapUp = true; + } + + DEV && console.log('onResponderEnd...' + JSON.stringify(gestureState)); + clearInteractionHandle(interactionState); + config.onResponderEnd && config.onResponderEnd(e, gestureState); + }, + + onResponderTerminate: function (e) { + DEV && console.log('onResponderTerminate...'); + clearInteractionHandle(interactionState); + config.onResponderTerminate && config.onResponderTerminate(e, gestureState); + initializeGestureState(gestureState); + }, + + onResponderTerminationRequest: function (e) { + DEV && console.log('onResponderTerminationRequest...'); + return config.onResponderTerminationRequest ? + config.onResponderTerminationRequest(e.gestureState) : + true; + } + }; + return {...handlers}; +} + +/** + * On Android devices, the default gesture responder is too sensitive that a single tap(no move intended) may trigger a move event. + * We can use a moveThreshold config to avoid those unwanted move events. + * @param config + * @param gestureState + * @returns {boolean} + */ +function effectiveMove (config, gestureState) { + if (gestureState.numberActiveTouches > 1) { + // on iOS simulator, a pinch gesture(move with alt pressed) will not change gestureState.dx(always 0) + return true; + } + + let moveThreshold = MOVE_THRESHOLD; + if (typeof config.moveThreshold === 'number') { + moveThreshold = config.minMoveDistance; + } + if (Math.abs(gestureState.dx) >= moveThreshold || Math.abs(gestureState.dy) >= moveThreshold) { + return true; + } + return false; +} +/* eslint-enable */ diff --git a/ioneapps-maagapp-ee31119a522d/src/components/SharedPlaylist/Gallery/libraries/GestureResponder/index.js b/ioneapps-maagapp-ee31119a522d/src/components/SharedPlaylist/Gallery/libraries/GestureResponder/index.js new file mode 100644 index 0000000..d627484 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/src/components/SharedPlaylist/Gallery/libraries/GestureResponder/index.js @@ -0,0 +1,7 @@ +/* eslint-disable */ +'use strict'; + +import createResponder from './createResponder'; + +export { createResponder }; +/* eslint-enable */ diff --git a/ioneapps-maagapp-ee31119a522d/src/components/SharedPlaylist/Gallery/libraries/Scroller/AnimationUtils.js b/ioneapps-maagapp-ee31119a522d/src/components/SharedPlaylist/Gallery/libraries/Scroller/AnimationUtils.js new file mode 100644 index 0000000..32066a4 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/src/components/SharedPlaylist/Gallery/libraries/Scroller/AnimationUtils.js @@ -0,0 +1,5 @@ +/* eslint-disable */ +export function currentAnimationTimeMillis() { + return Date.now(); +} +/* eslint-enable */ diff --git a/ioneapps-maagapp-ee31119a522d/src/components/SharedPlaylist/Gallery/libraries/Scroller/ViscousFluidInterpolator.js b/ioneapps-maagapp-ee31119a522d/src/components/SharedPlaylist/Gallery/libraries/Scroller/ViscousFluidInterpolator.js new file mode 100644 index 0000000..1c6b99a --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/src/components/SharedPlaylist/Gallery/libraries/Scroller/ViscousFluidInterpolator.js @@ -0,0 +1,31 @@ +/* eslint-disable */ +'use strict'; + +const VISCOUS_FLUID_SCALE = 8; +const VISCOUS_FLUID_NORMALIZE = 1 / viscousFluid(1); +const VISCOUS_FLUID_OFFSET = 1 - VISCOUS_FLUID_NORMALIZE * viscousFluid(1); + +function viscousFluid (x) { + x *= VISCOUS_FLUID_SCALE; + if (x < 1) { + x -= (1 - Math.exp(-x)); + } else { + var start = 0.36787944117; // 1/e == exp(-1) + x = 1 - Math.exp(1 - x); + x = start + x * (1 - start); + } + return x; +} + +const ViscousFluidInterpolator = { + getInterpolation: function (input) { + var interpolated = VISCOUS_FLUID_NORMALIZE * viscousFluid(input); + if (interpolated > 0) { + return interpolated + VISCOUS_FLUID_OFFSET; + } + return interpolated; + } +}; + +export default ViscousFluidInterpolator; +/* eslint-enable */ diff --git a/ioneapps-maagapp-ee31119a522d/src/components/SharedPlaylist/Gallery/libraries/Scroller/index.js b/ioneapps-maagapp-ee31119a522d/src/components/SharedPlaylist/Gallery/libraries/Scroller/index.js new file mode 100644 index 0000000..f81052b --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/src/components/SharedPlaylist/Gallery/libraries/Scroller/index.js @@ -0,0 +1,357 @@ +/* eslint-disable */ +'use strict'; + +/** + * Inspired by Android Scroller + */ + +import ViscousFluidInterpolator from './ViscousFluidInterpolator'; +import {currentAnimationTimeMillis} from './AnimationUtils'; + +/** + * The coefficient of friction applied to flings/scrolls. + * @type {number} + */ +// const SCROLL_FRICTION = 0.015; +const SCROLL_FRICTION = 0.03; + +const DEFAULT_DURATION = 250; +const SCROLL_MODE = 0; +const FLING_MODE = 1; + +const DECELERATION_RATE = Math.log(0.78) / Math.log(0.9); +const INFLEXION = 0.35; // Tension lines cross at (INFLEXION, 1) +const START_TENSION = 0.5; +const END_TENSION = 1.0; +const P1 = START_TENSION * INFLEXION; +const P2 = 1.0 - END_TENSION * (1.0 - INFLEXION); + +const NB_SAMPLES = 100; +const SPLINE_POSITION = []; +const SPLINE_TIME = []; + +const GRAVITY_EARTH = 9.80665; + +(function () { + var x_min = 0; + var y_min = 0; + for (let i = 0; i < NB_SAMPLES; i++) { + let alpha = i / NB_SAMPLES; + + let x_max = 1; + let x, tx, coef; + while (true) { + x = x_min + (x_max - x_min) / 2.0; + coef = 3.0 * x * (1.0 - x); + tx = coef * ((1.0 - x) * P1 + x * P2) + x * x * x; + if (Math.abs(tx - alpha) < 1E-5) break; + if (tx > alpha) x_max = x; + else x_min = x; + } + SPLINE_POSITION[i] = coef * ((1.0 - x) * START_TENSION + x) + x * x * x; + + let y_max = 1.0; + let y, dy; + while (true) { + y = y_min + (y_max - y_min) / 2.0; + coef = 3.0 * y * (1.0 - y); + dy = coef * ((1.0 - y) * START_TENSION + y) + y * y * y; + if (Math.abs(dy - alpha) < 1E-5) break; + if (dy > alpha) y_max = y; + else y_min = y; + } + SPLINE_TIME[i] = coef * ((1.0 - y) * P1 + y * P2) + y * y * y; + } + SPLINE_POSITION[NB_SAMPLES] = SPLINE_TIME[NB_SAMPLES] = 1.0; +})(); + +function signum (number) { + if (isNaN(number)) { + return NaN; + } + var sig = number; + if (number > 0) { + sig = 1; + } else if (number < 0) { + sig = -1; + } + return sig; +} + +export default class Scroller { + /** + * + * @param flywheel specify whether or not to support progressive "flywheel" behavior in flinging. + */ + constructor (flywheel, onScrollCallback) { + this.mCurrX = 0; + this.mCurrY = 0; + this.mFinished = true; + this.mInterpolator = ViscousFluidInterpolator; + // this.mPpi = PixelRatio.get() * 160; + this.mPpi = 160; + this.mDeceleration = this.computeDeceleration(SCROLL_FRICTION); + this.mFlywheel = flywheel; + + this.mPhysicalCoeff = this.computeDeceleration(0.84); // look and feel tuning + + this.mFlingFriction = SCROLL_FRICTION; + this.onScrollCallback = onScrollCallback; + } + + computeDeceleration (friction) { + return GRAVITY_EARTH * 39.37 * this.mPpi * friction; + } + + /** + * Returns whether the scroller has finished scrolling. + * @returns {Boolean} True if the scroller has finished scrolling, false otherwise. + */ + isFinished () { + return this.mFinished; + } + + /** + * Force the finished field to a particular value. + * @param finished The new finished value. + */ + forceFinished (finished) { + this.mFinished = finished; + } + + /** + * Returns the current X offset in the scroll. + * @returns {*} The new X offset as an absolute distance from the origin. + */ + getCurrX () { + return this.mCurrX; + } + + /** + * Returns the current Y offset in the scroll. + * @returns {*} The new Y offset as an absolute distance from the origin. + */ + getCurrY () { + return this.mCurrY; + } + + getCurrVelocity () { + return this.mMode === FLING_MODE ? + this.mCurrVelocity : this.mVelocity - this.mDeceleration * this.timePassed() / 2000.0; + } + + computeScrollOffset () { + if (this.mFinished) { + this.onScrollCallback && this.onScrollCallback(0, 0, this); + return false; + } + + var timePassed = currentAnimationTimeMillis() - this.mStartTime; + + if (timePassed < this.mDuration) { + switch (this.mMode) { + case SCROLL_MODE: + let x = this.mInterpolator.getInterpolation(timePassed * this.mDurationReciprocal); + this.mCurrX = this.mStartX + Math.round(x * this.mDeltaX); + this.mCurrY = this.mStartY + Math.round(x * this.mDeltaY); + break; + case FLING_MODE: + let t = timePassed / this.mDuration; + let index = parseInt(NB_SAMPLES * t); + let distanceCoef = 1; + let velocityCoef = 0; + if (index < NB_SAMPLES) { + let t_inf = index / NB_SAMPLES; + let t_sup = (index + 1) / NB_SAMPLES; + let d_inf = SPLINE_POSITION[index]; + let d_sup = SPLINE_POSITION[index + 1]; + velocityCoef = (d_sup - d_inf) / (t_sup - t_inf); + distanceCoef = d_inf + (t - t_inf) * velocityCoef; + } + + this.mCurrVelocity = velocityCoef * this.mDistance / this.mDuration * 1000; + + this.mCurrX = this.mStartX + Math.round(distanceCoef * (this.mFinalX - this.mStartX)); + // Pin to mMinX <= mCurrX <= mMaxX + // this.mCurrX = Math.min(this.mCurrX, this.mMaxX); + // this.mCurrX = Math.max(this.mCurrX, this.mMinX); + + this.mCurrY = this.mStartY + Math.round(distanceCoef * (this.mFinalY - this.mStartY)); + // Pin to mMinY <= mCurrY <= mMaxY + this.mCurrY = Math.min(this.mCurrY, this.mMaxY); + this.mCurrY = Math.max(this.mCurrY, this.mMinY); + + if (this.mCurrX == this.mFinalX && this.mCurrY == this.mFinalY) { + this.mFinished = true; + } + + break; + } + } else { + this.mCurrX = this.mFinalX; + this.mCurrY = this.mFinalY; + this.mFinished = true; + } + + var dx = this.mCurrX - this.mLastX; + var dy = this.mCurrY - this.mLastY; + + this.mLastX = this.mCurrX; + this.mLastY = this.mCurrY; + + this.onScrollCallback && this.onScrollCallback(dx, dy, this); + + if (dx === 0 && dy === 0 && this.mFinished) { + return false; + } + return true; + } + + startScroll (startX, startY, dx, dy, duration = DEFAULT_DURATION) { + this.mMode = SCROLL_MODE; + this.mFinished = false; + this.mDuration = duration; + this.mStartTime = currentAnimationTimeMillis(); + this.mStartX = startX; + this.mStartY = startY; + this.mFinalX = startX + dx; + this.mFinalY = startY + dy; + this.mDeltaX = dx; + this.mDeltaY = dy; + this.mDurationReciprocal = 1.0 / this.mDuration; + + this.mLastX = this.mStartX; + this.mLastY = this.mStartY; + + this.performAnimation(); + } + + /** + * Start scrolling based on a fling gesture. The distance travelled will + * depend on the initial velocity of the fling. + * @param startX + * @param startY + * @param velocityX Initial velocity of the fling (X) measured in dp or pt per second + * @param velocityY Initial velocity of the fling (Y) measured in dp or pt per second + * @param minX + * @param maxX + * @param minY + * @param maxY + */ + fling (startX, startY, velocityX, velocityY, + minX, maxX, minY, maxY) { + // Continue a scroll or fling in progress + if (this.mFlywheel && !this.mFinished) { + let oldVel = this.getCurrVelocity(); + + let dx = this.mFinalX - this.mStartX; + let dy = this.mFinalY - this.mStartY; + let hyp = Math.hypot(dx, dy); + + let ndx = dx / hyp; + let ndy = dy / hyp; + + let oldVelocityX = ndx * oldVel; + let oldVelocityY = ndy * oldVel; + if (signum(velocityX) === signum(oldVelocityX) && + signum(velocityY) === signum(oldVelocityY)) { + velocityX += oldVelocityX; + velocityY += oldVelocityY; + } + } + + this.mMode = FLING_MODE; + this.mFinished = false; + + let velocity = Math.hypot(velocityX, velocityY); + + this.mVelocity = velocity; + this.mDuration = this.getSplineFlingDuration(velocity); + this.mStartTime = currentAnimationTimeMillis(); + this.mStartX = startX; + this.mStartY = startY; + + let coeffX = velocity == 0 ? 1.0 : velocityX / velocity; + let coeffY = velocity == 0 ? 1.0 : velocityY / velocity; + + let totalDistance = this.getSplineFlingDistance(velocity); + this.mDistance = totalDistance * signum(velocity); + + this.mMinX = minX; + this.mMaxX = maxX; + this.mMinY = minY; + this.mMaxY = maxY; + + this.mFinalX = startX + Math.round(totalDistance * coeffX); + // Pin to mMinX <= mFinalX <= mMaxX + this.mFinalX = Math.min(this.mFinalX, this.mMaxX); + this.mFinalX = Math.max(this.mFinalX, this.mMinX); + + this.mFinalY = startY + Math.round(totalDistance * coeffY); + // Pin to mMinY <= mFinalY <= mMaxY + this.mFinalY = Math.min(this.mFinalY, this.mMaxY); + this.mFinalY = Math.max(this.mFinalY, this.mMinY); + + this.mLastX = this.mStartX; + this.mLastY = this.mStartY; + + this.performAnimation(); + } + + getSplineDeceleration (velocity) { + return Math.log(INFLEXION * Math.abs(velocity) / (this.mFlingFriction * this.mPhysicalCoeff)); + } + + getSplineFlingDuration (velocity) { + var l = this.getSplineDeceleration(velocity); + var decelMinusOne = DECELERATION_RATE - 1.0; + return 1000.0 * Math.exp(l / decelMinusOne); + } + + getSplineFlingDistance (velocity) { + var l = this.getSplineDeceleration(velocity); + var decelMinusOne = DECELERATION_RATE - 1.0; + return this.mFlingFriction * this.mPhysicalCoeff * Math.exp(DECELERATION_RATE / decelMinusOne * l); + } + + performAnimation () { + if (this.computeScrollOffset()) { + requestAnimationFrame(this.performAnimation.bind(this)); + } else { + } + } + + abortAnimation () { + this.mCurrX = this.mFinalX; + this.mCurrY = this.mFinalY; + this.mFinished = true; + } + + extendDuration (extend) { + var passed = timePassed(); + this.mDuration = passed + extend; + this.mDurationReciprocal = 1.0 / this.mDuration; + this.mFinished = false; + } + + timePassed () { + return currentAnimationTimeMillis() - this.mStartTime; + } + + setFinalX (newX) { + this.mFinalX = newX; + this.mDeltaX = this.mFinalX - this.mStartX; + this.mFinished = false; + } + + setFinalY (newY) { + this.mFinalY = newY; + this.mDeltaY = this.mFinalY - this.mStartY; + this.mFinished = false; + } + + debugInfo () { + return 'cur=' + this.mCurrX + ' ' + this.mCurrY + ', final=' + this.mFinalX + ' ' + this.mFinalY; + } +} +/* eslint-enable */ diff --git a/ioneapps-maagapp-ee31119a522d/src/components/SharedPlaylist/Gallery/libraries/TransformableImage/index.js b/ioneapps-maagapp-ee31119a522d/src/components/SharedPlaylist/Gallery/libraries/TransformableImage/index.js new file mode 100644 index 0000000..16e0bef --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/src/components/SharedPlaylist/Gallery/libraries/TransformableImage/index.js @@ -0,0 +1,234 @@ +/* eslint-disable */ +import React, { PureComponent } from 'react'; +import { View, Text, Image, ViewPropTypes, Dimensions } from 'react-native'; +import PropTypes from 'prop-types'; +import ViewTransformer from '../ViewTransformer'; +import i18n from "~/locale/i18n"; + +const { width: screenWidth } = Dimensions.get('window'); + +export default class TransformableImage extends PureComponent { + static propTypes = { + image: PropTypes.shape({ + source: PropTypes.oneOfType([ + PropTypes.object, + PropTypes.number + ]).isRequired, + dimensions: PropTypes.shape({ width: PropTypes.number, height: PropTypes.number }) + }).isRequired, + style: ViewPropTypes ? ViewPropTypes.style : View.propTypes.style, + onLoad: PropTypes.func, + onLoadStart: PropTypes.func, + enableTransform: PropTypes.bool, + enableScale: PropTypes.bool, + enableTranslate: PropTypes.bool, + onTransformGestureReleased: PropTypes.func, + onViewTransformed: PropTypes.func, + imageComponent: PropTypes.func, + resizeMode: PropTypes.string, + errorComponent: PropTypes.func, + enableZoom: PropTypes.bool, + }; + + static defaultProps = { + enableTransform: true, + enableScale: true, + enableTranslate: true, + enableZoom: true, + imageComponent: undefined, + resizeMode: 'contain', + }; + + constructor (props) { + super(props); + + this.onLayout = this.onLayout.bind(this); + this.onLoad = this.onLoad.bind(this); + this.onLoadStart = this.onLoadStart.bind(this); + this.getViewTransformerInstance = this.getViewTransformerInstance.bind(this); + this.renderError = this.renderError.bind(this); + + this.state = { + viewWidth: 0, + viewHeight: 0, + imageLoaded: false, + imageDimensions: props.image.dimensions, + keyAcumulator: 1 + }; + } + + componentWillMount () { + if (!this.state.imageDimensions) { + this.getImageSize(this.props.image); + } + } + + componentDidMount () { + this._mounted = true; + } + + componentWillReceiveProps (nextProps) { + if (!sameImage(this.props.image.source, nextProps.image.source)) { + // image source changed, clear last image's imageDimensions info if any + this.setState({ imageDimensions: nextProps.image.dimensions, keyAcumulator: this.state.keyAcumulator + 1 }); + if (!nextProps.image.dimensions) { // if we don't have image dimensions provided in source + this.getImageSize(nextProps.image); + } + } + } + + componentWillUnmount () { + this._mounted = false; + } + + onLoadStart (e) { + this.props.onLoadStart && this.props.onLoadStart(e); + if (this.state.imageLoaded) { + this.setState({ imageLoaded: false }); + } + } + + onLoad (e) { + this.props.onLoad && this.props.onLoad(e); + if (!this.state.imageLoaded) { + this.setState({ imageLoaded: true }); + } + } + + onLayout (e) { + let {width, height} = e.nativeEvent.layout; + if (this.state.viewWidth !== width || this.state.viewHeight !== height) { + this.setState({ viewWidth: width, viewHeight: height }); + } + } + + getImageSize (image) { + if (!image) { + return; + } + const { source, dimensions } = image; + const { pageData } = this.props; + const { rotation } = pageData; + if (dimensions) { + this.setState({ imageDimensions: dimensions }); + return; + } + + if (source && source.uri) { + Image.getSize( + source.uri, + (width, height) => { + if (width && height) { + const adjustedWidth = screenWidth; + let adjustedHeight; + let originalWidth; + let originalHeight; + if (rotation === 0 || rotation % 180 === 0) { + const aspectRatio = screenWidth / width; + adjustedHeight = aspectRatio * height; + originalWidth = width; + originalHeight = height; + } else { + const aspectRatio = screenWidth / height; + adjustedHeight = aspectRatio * width; + originalWidth = height; + originalHeight = width; + } + if (this.state.imageDimensions && this.state.imageDimensions.width === adjustedWidth && this.state.imageDimensions.height === adjustedHeight) { + // no need to update state + } else { + this._mounted && this.setState({ imageDimensions: { width: adjustedWidth, height: adjustedHeight, originalWidth, originalHeight, rotation } }); + } + } + }, + () => { + this._mounted && this.setState({ error: true }); + } + ); + } else { + console.warn('react-native-image-gallery', 'Please provide dimensions of your local images'); + } + } + + getViewTransformerInstance () { + return this.refs['viewTransformer']; + } + + renderError () { + return (this.props.errorComponent && this.props.errorComponent()) || ( + + {i18n.t('playlists.thisImageCannotBeDisplayed')} + + ); + } + + render () { + const { imageDimensions, viewWidth, viewHeight, error, keyAccumulator, imageLoaded } = this.state; + const { style, image, pageData, imageComponent, resizeMode, enableTransform, enableScale, enableTranslate, onTransformGestureReleased, onViewTransformed, enableZoom } = this.props; + // console.log('imageComponent: ', imageComponent) + // console.log('pageData: ', this.props.pageData) + let maxScale = 1; + let contentAspectRatio; + let width, height, originalWidth, originalHeight; // imageDimensions + + + if (imageDimensions) { + width = imageDimensions.width; + height = imageDimensions.height; + originalWidth = imageDimensions.originalWidth; + originalHeight = imageDimensions.originalHeight; + } + + if (originalWidth && originalHeight) { + contentAspectRatio = originalWidth / originalHeight; + if (viewWidth && viewHeight) { + maxScale = Math.max(originalWidth / viewWidth, originalHeight / viewHeight); + maxScale = Math.max(1, maxScale); + } + } + + const imageProps = { + ...this.props, + imageLoaded, + source: image.source, + style: [style, { backgroundColor: 'transparent' }], + resizeMode: resizeMode, + onLoadStart: this.onLoadStart, + onLoad: this.onLoad, + capInsets: { left: 0.1, top: 0.1, right: 0.1, bottom: 0.1 } + }; + + const content = imageComponent ? imageComponent(imageProps, imageDimensions, pageData) : ; + // console.log('content: ', content) + return ( + + { error ? this.renderError() : content } + + ); + } +} + +function sameImage (source, nextSource) { + if (source === nextSource) { + return true; + } + if (source && nextSource) { + if (source.uri && nextSource.uri) { + return source.uri === nextSource.uri; + } + } + return false; +} +/* eslint-enable */ diff --git a/ioneapps-maagapp-ee31119a522d/src/components/SharedPlaylist/Gallery/libraries/ViewPager/index.js b/ioneapps-maagapp-ee31119a522d/src/components/SharedPlaylist/Gallery/libraries/ViewPager/index.js new file mode 100644 index 0000000..1294190 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/src/components/SharedPlaylist/Gallery/libraries/ViewPager/index.js @@ -0,0 +1,339 @@ +/* eslint-disable */ +import React, { PureComponent } from 'react'; +import { + View, + FlatList, + ViewPropTypes, + InteractionManager, + Dimensions +} from 'react-native'; +import PropTypes from 'prop-types'; +import Scroller from '../Scroller'; +import { createResponder } from '../GestureResponder'; + +const MIN_FLING_VELOCITY = 0.5; + +// Dimensions are only used initially. +// onLayout should handle orientation swap. +const { width, height } = Dimensions.get('window'); + +export default class ViewPager extends PureComponent { + static propTypes = { + ...View.propTypes, + initialPage: PropTypes.number, + pageMargin: PropTypes.number, + scrollViewStyle: ViewPropTypes ? ViewPropTypes.style : View.propTypes.style, + scrollEnabled: PropTypes.bool, + renderPage: PropTypes.func, + pageDataArray: PropTypes.array, + initialListSize: PropTypes.number, + removeClippedSubviews: PropTypes.bool, + onPageSelected: PropTypes.func, + onPageScrollStateChanged: PropTypes.func, + onPageScroll: PropTypes.func, + flatListProps: PropTypes.object + }; + + static defaultProps = { + initialPage: 0, + pageMargin: 0, + scrollEnabled: true, + pageDataArray: [], + initialListSize: 50, + removeClippedSubviews: true, + flatListProps: {} + }; + + currentPage = undefined; // Do not initialize to make onPageSelected(0) be dispatched + layoutChanged = false; + activeGesture = false; + gestureResponder = undefined; + + state = { width, height }; + + constructor (props) { + super(props); + + this.onLayout = this.onLayout.bind(this); + this.renderRow = this.renderRow.bind(this); + this.onResponderGrant = this.onResponderGrant.bind(this); + this.onResponderMove = this.onResponderMove.bind(this); + this.onResponderRelease = this.onResponderRelease.bind(this); + this.getItemLayout = this.getItemLayout.bind(this); + + this.scroller = this.createScroller(); + } + + createScroller () { + return new Scroller(true, (dx, dy, scroller) => { + if (dx === 0 && dy === 0 && scroller.isFinished()) { + if (!this.activeGesture) { + this.onPageScrollStateChanged('idle'); + } + } else { + const curX = this.scroller.getCurrX(); + this.refs['innerFlatList'] && this.refs['innerFlatList'].scrollToOffset({ offset: curX, animated: false }); + + let position = Math.floor(curX / (this.state.width + this.props.pageMargin)); + position = this.validPage(position); + let offset = (curX - this.getScrollOffsetOfPage(position)) / (this.state.width + this.props.pageMargin); + let fraction = (curX - this.getScrollOffsetOfPage(position) - this.props.pageMargin) / this.state.width; + if (fraction < 0) { + fraction = 0; + } + this.props.onPageScroll && this.props.onPageScroll({ + position, offset, fraction + }); + } + }); + } + + componentWillMount () { + this.gestureResponder = createResponder({ + onStartShouldSetResponder: (evt, gestureState) => true, + onResponderGrant: this.onResponderGrant, + onResponderMove: this.onResponderMove, + onResponderRelease: this.onResponderRelease, + onResponderTerminate: this.onResponderRelease + }); + } + + componentDidMount () { + // FlatList is set to render at initialPage. + // The scroller we use is not aware of this. + // Let it know by simulating most of what happens in scrollToPage() + this.onPageScrollStateChanged('settling'); + + const page = this.validPage(this.props.initialPage); + this.onPageChanged(page); + + const finalX = this.getScrollOffsetOfPage(page); + this.scroller.startScroll(this.scroller.getCurrX(), 0, finalX - this.scroller.getCurrX(), 0, 0); + + requestAnimationFrame(() => { + // this is here to work around a bug in FlatList, as discussed here + // https://github.com/facebook/react-native/issues/1831 + // (and solved here https://github.com/facebook/react-native/commit/03ae65bc ?) + this.scrollByOffset(1); + this.scrollByOffset(-1); + }); + } + + componentDidUpdate (prevProps) { + if (this.layoutChanged) { + this.layoutChanged = false; + if (typeof this.currentPage === 'number') { + this.scrollToPage(this.currentPage, true); + } + } else if (this.currentPage + 1 >= this.props.pageDataArray.length && + this.props.pageDataArray.length !== prevProps.pageDataArray.length) { + this.scrollToPage(this.props.pageDataArray.length, true); + } + } + + onLayout (e) { + let { width, height } = e.nativeEvent.layout; + let sizeChanged = this.state.width !== width || this.state.height !== height; + if (width && height && sizeChanged) { + this.layoutChanged = true; + this.setState({ width, height }); + } + } + + onResponderGrant (evt, gestureState) { + // this.scroller.forceFinished(true); + this.activeGesture = true; + this.onPageScrollStateChanged('dragging'); + } + + onResponderMove (evt, gestureState) { + let dx = gestureState.moveX - gestureState.previousMoveX; + this.scrollByOffset(dx); + } + + onResponderRelease (evt, gestureState, disableSettle) { + this.activeGesture = false; + if (!disableSettle) { + this.settlePage(gestureState.vx); + } + } + + onPageChanged (page) { + if (this.currentPage !== page) { + this.currentPage = page; + this.props.onPageSelected && this.props.onPageSelected(page); + } + } + + onPageScrollStateChanged (state) { + this.props.onPageScrollStateChanged && this.props.onPageScrollStateChanged(state); + } + + settlePage (vx) { + const { pageDataArray } = this.props; + + if (vx < -MIN_FLING_VELOCITY) { + if (this.currentPage < pageDataArray.length - 1) { + this.flingToPage(this.currentPage + 1, vx); + } else { + this.flingToPage(pageDataArray.length - 1, vx); + } + } else if (vx > MIN_FLING_VELOCITY) { + if (this.currentPage > 0) { + this.flingToPage(this.currentPage - 1, vx); + } else { + this.flingToPage(0, vx); + } + } else { + let page = this.currentPage; + let progress = (this.scroller.getCurrX() - this.getScrollOffsetOfPage(this.currentPage)) / this.state.width; + if (progress > 1 / 3) { + page += 1; + } else if (progress < -1 / 3) { + page -= 1; + } + page = Math.min(pageDataArray.length - 1, page); + page = Math.max(0, page); + this.scrollToPage(page); + } + } + + getScrollOffsetOfPage (page) { + return this.getItemLayout(this.props.pageDataArray, page).offset; + } + + flingToPage (page, velocityX) { + this.onPageScrollStateChanged('settling'); + + page = this.validPage(page); + this.onPageChanged(page); + + velocityX *= -1000; // per sec + const finalX = this.getScrollOffsetOfPage(page); + this.scroller.fling(this.scroller.getCurrX(), 0, velocityX, 0, finalX, finalX, 0, 0); + } + + scrollToPage (page, immediate) { + this.onPageScrollStateChanged('settling'); + + page = this.validPage(page); + this.onPageChanged(page); + + const finalX = this.getScrollOffsetOfPage(page); + if (immediate) { + InteractionManager.runAfterInteractions(() => { + this.scroller.startScroll(this.scroller.getCurrX(), 0, finalX - this.scroller.getCurrX(), 0, 0); + this.refs['innerFlatList'] && this.refs['innerFlatList'].scrollToOffset({offset: finalX, animated: false}); + this.refs['innerFlatList'] && this.refs['innerFlatList'].recordInteraction(); + }); + } else { + this.scroller.startScroll(this.scroller.getCurrX(), 0, finalX - this.scroller.getCurrX(), 0, 400); + } + } + + scrollByOffset (dx) { + this.scroller.startScroll(this.scroller.getCurrX(), 0, -dx, 0, 0); + } + + validPage (page) { + page = Math.min(this.props.pageDataArray.length - 1, page); + page = Math.max(0, page); + return page; + } + + getScrollOffsetFromCurrentPage () { + return this.scroller.getCurrX() - this.getScrollOffsetOfPage(this.currentPage); + } + + getItemLayout (data, index) { + // this method is called 'getItemLayout', but it is not actually used + // as the 'getItemLayout' function for the FlatList. We use it within + // the code on this page though. The reason for this is that working + // with 'getItemLayout' for FlatList is buggy. You might end up with + // unrendered / missing content. Therefore we work around it, as + // described here + // https://github.com/facebook/react-native/issues/15734#issuecomment-330616697 + return { + length: this.state.width + this.props.pageMargin, + offset: (this.state.width + this.props.pageMargin) * index, + index + }; + } + + keyExtractor (item, index) { + return `${item.id}`; + } + + renderRow ({ item, index }) { + const { width, height } = this.state; + let page = this.props.renderPage(item, index); + + const layout = { + width, + height, + position: 'relative' + }; + const style = page.props.style ? [page.props.style, layout] : layout; + + let newProps = { ...page.props, ref: page.ref, style }; + const element = React.createElement(page.type, newProps); + + if (this.props.pageMargin > 0 && index > 0) { + // Do not using margin style to implement pageMargin. + // The ListView seems to calculate a wrong width for children views with margin. + return ( + + { element } + + ); + } else { + return element; + } + } + + render () { + const { width, height } = this.state; + const { pageDataArray, scrollEnabled, style, scrollViewStyle } = this.props; + + if (width && height) { + let list = pageDataArray; + if (!list) { + list = []; + } + } + + let gestureResponder = this.gestureResponder; + if (!scrollEnabled || pageDataArray.length <= 0) { + gestureResponder = {}; + } + + return ( + + + + ); + } +} +/* eslint-enable */ diff --git a/ioneapps-maagapp-ee31119a522d/src/components/SharedPlaylist/Gallery/libraries/ViewTransformer/Rect.js b/ioneapps-maagapp-ee31119a522d/src/components/SharedPlaylist/Gallery/libraries/ViewTransformer/Rect.js new file mode 100644 index 0000000..256f59f --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/src/components/SharedPlaylist/Gallery/libraries/ViewTransformer/Rect.js @@ -0,0 +1,73 @@ +/* eslint-disable */ +export default class Rect { + constructor (left, top, right, bottom) { + this.left = left; + this.top = top; + this.right = right; + this.bottom = bottom; + } + + set (left, top, right, bottom) { + this.left = left; + this.top = top; + this.right = right; + this.bottom = bottom; + } + + width () { + return this.right - this.left; + } + + height () { + return this.bottom - this.top; + } + + centerX () { + return (this.left + this.right) / 2; + } + + centerY () { + return (this.top + this.bottom) / 2; + } + + offset (dx, dy) { + this.left += dx; + this.right += dx; + this.top += dy; + this.bottom += dy; + return this; + } + + copy () { + return new Rect(this.left, this.top, this.right, this.bottom); + } + + equals (rect, epsilon) { + if (!epsilon) { + return ( + this.left === rect.left && + this.top === rect.top && + this.right === rect.right && + this.bottom === rect.bottom + ); + } else { + return ( + Math.abs(this.left - rect.left) < epsilon && + Math.abs(this.top - rect.top) < epsilon && + Math.abs(this.right - rect.right) < epsilon && + Math.abs(this.bottom - rect.bottom) < epsilon + ); + } + } + + isValid () { + if (typeof this.left === 'number' && + typeof this.right === 'number' && + typeof this.top === 'number' && + typeof this.bottom === 'number') { + return true; + } + return false; + } +} +/* eslint-enable */ diff --git a/ioneapps-maagapp-ee31119a522d/src/components/SharedPlaylist/Gallery/libraries/ViewTransformer/TransformUtils.js b/ioneapps-maagapp-ee31119a522d/src/components/SharedPlaylist/Gallery/libraries/ViewTransformer/TransformUtils.js new file mode 100644 index 0000000..c3f27bc --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/src/components/SharedPlaylist/Gallery/libraries/ViewTransformer/TransformUtils.js @@ -0,0 +1,163 @@ +/* eslint-disable */ +import Rect from './Rect'; + +export { Rect }; + +export class Transform { + constructor (scale, translateX, translateY, pivot) { + this.scale = scale; + this.translateX = translateX; + this.translateY = translateY; + this.pivot = pivot; + } +} + +function isValidNumber (number) { + if (typeof number === 'number') { + if (!isNaN(number)) { + return true; + } + } + return false; +} + +function isValidRect (rect) { + if (rect instanceof Rect && rect.isValid()) { + return true; + } + return false; +} + +function isValidTransform (transform) { + if (transform && isValidNumber(transform.scale) && isValidNumber(transform.translateX) && isValidNumber(transform.translateY)) { + return true; + } + return false; +} + +export function fitCenterRect (contentAspectRatio, containerRect) { + let w = containerRect.width(); + let h = containerRect.height(); + let viewAspectRatio = w / h; + + if (contentAspectRatio > viewAspectRatio) { + h = w / contentAspectRatio; + } else { + w = h * contentAspectRatio; + } + + return new Rect( + containerRect.centerX() - w / 2, + containerRect.centerY() - h / 2, + containerRect.centerX() + w / 2, + containerRect.centerY() + h / 2 + ); +} + +/** + * The React Native transform system use the center of the view as the pivot when scaling. + * The translations are applied before scaling. + * @param rect + * @param transform + * @returns {*} + */ +export function transformedRect (rect, transform) { + if (!isValidRect(rect)) { + throw new Error('transformedRect...invalid rect'); + } + if (!isValidTransform(transform)) { + throw new Error('transformedRect...invalid transform'); + } + + let scale = transform.scale; + let translateX = transform.translateX; + let translateY = transform.translateY; + + let pivot = transform.pivot; + if (pivot === undefined || pivot === null) { + let width = rect.width() * scale; + let height = rect.height() * scale; + let centerX = rect.centerX() + translateX * scale; + let centerY = rect.centerY() + translateY * scale; + + return new Rect( + centerX - width / 2, + centerY - height / 2, + centerX + width / 2, + centerY + height / 2 + ); + } else { + let pivotX = pivot.x; + let pivotY = pivot.y; + if (!isValidNumber(pivotX) || !isValidNumber(pivotY)) { + throw new Error('transformedRect...invalid pivot x=' + pivot.x + ', y=' + pivot.y); + } + + // first make the center still + let resultRect = transformedRect(rect, { + scale, translateX, translateY + }); + + // the pivot moved during scaling, now move it back + let dx = (scale - 1) * (pivotX - resultRect.centerX()); + let dy = (scale - 1) * (pivotY - resultRect.centerY()); + return resultRect.offset(-dx, -dy); + } +} + +/** + * Calculate the transform from fromRect to toRect + * @param fromRect + * @param toRect + * @returns {Transform} + */ +export function getTransform (fromRect, toRect) { + let scale = toRect.width() / fromRect.width(); + let translateX = (toRect.centerX() - fromRect.centerX()) / scale; + let translateY = (toRect.centerY() - fromRect.centerY()) / scale; + + return new Transform(scale, translateX, translateY); +} + +/** + * Align edges of the rect with the viewport to avoid unnecessary blank space. NO scaling is performed here. + * @param rect + * @param viewPortRect + * @returns {*|{line, column}|{column, line}|{x}} + */ +export function alignedRect (rect, viewPortRect) { + let dx = 0; + let dy = 0; + + if (rect.width() > viewPortRect.width()) { + if (rect.left > viewPortRect.left) { + dx = viewPortRect.left - rect.left; + } else if (rect.right < viewPortRect.right) { + dx = viewPortRect.right - rect.right; + } + } else { + dx = viewPortRect.centerX() - rect.centerX(); + } + + if (rect.height() > viewPortRect.height()) { + if (rect.top > viewPortRect.top) { + dy = viewPortRect.top - rect.top; + } else if (rect.bottom < viewPortRect.bottom) { + dy = viewPortRect.bottom - rect.bottom; + } + } else { + dy = viewPortRect.centerY() - rect.centerY(); + } + + return rect.copy().offset(dx, dy); +} + +export function availableTranslateSpace (rect, viewPortRect) { + return { + left: viewPortRect.left - rect.left, + right: rect.right - viewPortRect.right, + top: viewPortRect.top - rect.top, + bottom: rect.bottom - viewPortRect.bottom + }; +} +/* eslint-enable */ diff --git a/ioneapps-maagapp-ee31119a522d/src/components/SharedPlaylist/Gallery/libraries/ViewTransformer/index.js b/ioneapps-maagapp-ee31119a522d/src/components/SharedPlaylist/Gallery/libraries/ViewTransformer/index.js new file mode 100644 index 0000000..018c328 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/src/components/SharedPlaylist/Gallery/libraries/ViewTransformer/index.js @@ -0,0 +1,423 @@ +/* eslint-disable */ +import React from 'react'; +import ReactNative, { View, Animated, Easing, NativeModules } from 'react-native'; +import Scroller from '../Scroller'; +import PropTypes from 'prop-types'; +import { createResponder } from '../GestureResponder'; +import { Rect, Transform, transformedRect, availableTranslateSpace, fitCenterRect, alignedRect, getTransform } from './TransformUtils'; + +export default class ViewTransformer extends React.Component { + static Rect = Rect; + static getTransform = getTransform; + + static propTypes = { + enableTransform: PropTypes.bool, + enableScale: PropTypes.bool, + enableTranslate: PropTypes.bool, + maxOverScrollDistance: PropTypes.number, + maxScale: PropTypes.number, + contentAspectRatio: PropTypes.number, + enableResistance: PropTypes.bool, + onViewTransformed: PropTypes.func, + onTransformGestureReleased: PropTypes.func, + onSingleTapConfirmed: PropTypes.func, + onLayout: PropTypes.func, + onTransformStart: PropTypes.func, + children: PropTypes.node + }; + + static defaultProps = { + maxOverScrollDistance: 20, + enableScale: true, + enableTranslate: true, + enableTransform: true, + maxScale: 1, + enableResistance: false + }; + + constructor (props) { + super(props); + this.state = { + // transform state + scale: 1, + translateX: 0, + translateY: 0, + // animation state + animator: new Animated.Value(0), + // layout + width: 0, + height: 0, + pageX: 0, + pageY: 0 + }; + this._viewPortRect = new Rect(); // A holder to avoid new too much + + this.onLayout = this.onLayout.bind(this); + this.cancelAnimation = this.cancelAnimation.bind(this); + this.contentRect = this.contentRect.bind(this); + this.transformedContentRect = this.transformedContentRect.bind(this); + this.animate = this.animate.bind(this); + + this.scroller = new Scroller(true, (dx, dy, scroller) => { + if (dx === 0 && dy === 0 && scroller.isFinished()) { + this.animateBounce(); + return; + } + + this.updateTransform({ + translateX: this.state.translateX + dx / this.state.scale, + translateY: this.state.translateY + dy / this.state.scale + }); + }); + } + + viewPortRect () { + this._viewPortRect.set(0, 0, this.state.width, this.state.height); + return this._viewPortRect; + } + + contentRect () { + let rect = this.viewPortRect().copy(); + if (this.props.contentAspectRatio && this.props.contentAspectRatio > 0) { + rect = fitCenterRect(this.props.contentAspectRatio, rect); + } + return rect; + } + + transformedContentRect () { + let rect = transformedRect(this.viewPortRect(), this.currentTransform()); + if (this.props.contentAspectRatio && this.props.contentAspectRatio > 0) { + rect = fitCenterRect(this.props.contentAspectRatio, rect); + } + return rect; + } + + currentTransform () { + return new Transform(this.state.scale, this.state.translateX, this.state.translateY); + } + + componentWillMount () { + this.gestureResponder = createResponder({ + onStartShouldSetResponder: (evt, gestureState) => true, + onMoveShouldSetResponderCapture: (evt, gestureState) => true, + // onMoveShouldSetResponder: this.handleMove, + onResponderMove: this.onResponderMove, + onResponderGrant: this.onResponderGrant, + onResponderRelease: this.onResponderRelease, + onResponderTerminate: this.onResponderRelease, + onResponderTerminationRequest: (evt, gestureState) => false, // Do not allow parent view to intercept gesture + onResponderSingleTapConfirmed: (evt, gestureState) => { + this.props.onSingleTapConfirmed && this.props.onSingleTapConfirmed(); + } + }); + } + + componentDidUpdate (prevProps, prevState) { + this.props.onViewTransformed && this.props.onViewTransformed({ + scale: this.state.scale, + translateX: this.state.translateX, + translateY: this.state.translateY + }); + } + + componentWillUnmount () { + this.cancelAnimation(); + } + + render () { + let gestureResponder = this.gestureResponder; + if (!this.props.enableTransform) { + gestureResponder = {}; + } + + return ( + + + { this.props.children } + + + ); + } + + onLayout (e) { + const {width, height} = e.nativeEvent.layout; + if (width !== this.state.width || height !== this.state.height) { + this.setState({width, height}); + } + this.measureLayout(); + + this.props.onLayout && this.props.onLayout(e); + } + + measureLayout () { + let handle = ReactNative.findNodeHandle(this.refs['innerViewRef']); + NativeModules.UIManager.measure(handle, (x, y, width, height, pageX, pageY) => { + if (typeof pageX === 'number' && typeof pageY === 'number') { // avoid undefined values on Android devices + if (this.state.pageX !== pageX || this.state.pageY !== pageY) { + this.setState({ pageX: pageX, pageY: pageY }); + } + } + }); + } + + onResponderGrant (evt, gestureState) { + this.props.onTransformStart && this.props.onTransformStart(); + this.setState({responderGranted: true}); + this.measureLayout(); + } + + onResponderMove (evt, gestureState) { + this.cancelAnimation(); + + let dx = gestureState.moveX - gestureState.previousMoveX; + let dy = gestureState.moveY - gestureState.previousMoveY; + if (this.props.enableResistance) { + let d = this.applyResistance(dx, dy); + dx = d.dx; + dy = d.dy; + } + + if (!this.props.enableTranslate) { + dx = dy = 0; + } + + let transform = {}; + if (gestureState.previousPinch && gestureState.pinch && this.props.enableScale) { + let scaleBy = gestureState.pinch / gestureState.previousPinch; + let pivotX = gestureState.moveX - this.state.pageX; + let pivotY = gestureState.moveY - this.state.pageY; + + let rect = transformedRect( + transformedRect( + this.contentRect(), + this.currentTransform() + ), + new Transform(scaleBy, dx, dy, { x: pivotX, y: pivotY }) + ); + transform = getTransform(this.contentRect(), rect); + } else { + if (Math.abs(dx) > 2 * Math.abs(dy)) { + dy = 0; + } else if (Math.abs(dy) > 2 * Math.abs(dx)) { + dx = 0; + } + transform.translateX = this.state.translateX + dx / this.state.scale; + transform.translateY = this.state.translateY + dy / this.state.scale; + } + + this.updateTransform(transform); + return true; + } + + onResponderRelease (evt, gestureState) { + let handled = this.props.onTransformGestureReleased && this.props.onTransformGestureReleased({ + scale: this.state.scale, + translateX: this.state.translateX, + translateY: this.state.translateY + }); + if (handled) { + return; + } + + if (gestureState.doubleTapUp) { + if (!this.props.enableScale) { + this.animateBounce(); + return; + } + let pivotX = 0; + let pivotY = 0; + if (gestureState.dx || gestureState.dy) { + pivotX = gestureState.moveX - this.state.pageX; + pivotY = gestureState.moveY - this.state.pageY; + } else { + pivotX = gestureState.x0 - this.state.pageX; + pivotY = gestureState.y0 - this.state.pageY; + } + + this.performDoubleTapUp(pivotX, pivotY); + } else { + if (this.props.enableTranslate) { + this.performFling(gestureState.vx, gestureState.vy); + } else { + this.animateBounce(); + } + } + } + + performFling (vx, vy) { + let startX = 0; + let startY = 0; + let maxX, minX, maxY, minY; + let availablePanDistance = availableTranslateSpace(this.transformedContentRect(), this.viewPortRect()); + if (vx > 0) { + minX = 0; + if (availablePanDistance.left > 0) { + maxX = availablePanDistance.left + this.props.maxOverScrollDistance; + } else { + maxX = 0; + } + } else { + maxX = 0; + if (availablePanDistance.right > 0) { + minX = -availablePanDistance.right - this.props.maxOverScrollDistance; + } else { + minX = 0; + } + } + if (vy > 0) { + minY = 0; + if (availablePanDistance.top > 0) { + maxY = availablePanDistance.top + this.props.maxOverScrollDistance; + } else { + maxY = 0; + } + } else { + maxY = 0; + if (availablePanDistance.bottom > 0) { + minY = -availablePanDistance.bottom - this.props.maxOverScrollDistance; + } else { + minY = 0; + } + } + + vx *= 1000; // per second + vy *= 1000; + if (Math.abs(vx) > 2 * Math.abs(vy)) { + vy = 0; + } else if (Math.abs(vy) > 2 * Math.abs(vx)) { + vx = 0; + } + + this.scroller.fling(startX, startY, vx, vy, minX, maxX, minY, maxY); + } + + performDoubleTapUp (pivotX, pivotY) { + let curScale = this.state.scale; + let scaleBy; + if (curScale > (1 + this.props.maxScale) / 2) { + scaleBy = 1 / curScale; + } else { + scaleBy = this.props.maxScale / curScale; + } + + let rect = transformedRect( + this.transformedContentRect(), + new Transform(scaleBy, 0, 0, { x: pivotX, y: pivotY }) + ); + rect = transformedRect( + rect, + new Transform( + 1, + this.viewPortRect().centerX() - pivotX, + this.viewPortRect().centerY() - pivotY + ) + ); + rect = alignedRect(rect, this.viewPortRect()); + this.animate(rect); + } + + applyResistance (dx, dy) { + let availablePanDistance = availableTranslateSpace(this.transformedContentRect(), this.viewPortRect()); + + if ((dx > 0 && availablePanDistance.left < 0) || + (dx < 0 && availablePanDistance.right < 0)) { + dx /= 3; + } + if ((dy > 0 && availablePanDistance.top < 0) || + (dy < 0 && availablePanDistance.bottom < 0)) { + dy /= 3; + } + return { dx, dy }; + } + + cancelAnimation () { + this.state.animator.stopAnimation(); + } + + animate (targetRect, durationInMillis) { + let duration = 200; + if (durationInMillis) { + duration = durationInMillis; + } + + let fromRect = this.transformedContentRect(); + if (fromRect.equals(targetRect, 0.01)) { + return; + } + + this.state.animator.removeAllListeners(); + this.state.animator.setValue(0); + this.state.animator.addListener((state) => { + let progress = state.value; + + let left = fromRect.left + (targetRect.left - fromRect.left) * progress; + let right = fromRect.right + (targetRect.right - fromRect.right) * progress; + let top = fromRect.top + (targetRect.top - fromRect.top) * progress; + let bottom = fromRect.bottom + (targetRect.bottom - fromRect.bottom) * progress; + + let transform = getTransform(this.contentRect(), new Rect(left, top, right, bottom)); + this.updateTransform(transform); + }); + + Animated.timing( + this.state.animator, + { + toValue: 1, + duration: duration, + easing: Easing.inOut(Easing.ease) + } + ).start(); + } + + animateBounce () { + let curScale = this.state.scale; + let minScale = 1; + let maxScale = this.props.maxScale; + let scaleBy = 1; + if (curScale > maxScale) { + scaleBy = maxScale / curScale; + } else if (curScale < minScale) { + scaleBy = minScale / curScale; + } + + let rect = transformedRect( + this.transformedContentRect(), + new Transform( + scaleBy, + 0, + 0, + { + x: this.viewPortRect().centerX(), + y: this.viewPortRect().centerY() + } + ) + ); + rect = alignedRect(rect, this.viewPortRect()); + this.animate(rect); + } + + updateTransform (transform) { + this.setState(transform); + } + + forceUpdateTransform (transform) { + this.setState(transform); + } + + getAvailableTranslateSpace () { + return availableTranslateSpace(this.transformedContentRect(), this.viewPortRect()); + } +} +/* eslint-enable */ diff --git a/ioneapps-maagapp-ee31119a522d/src/components/SharedPlaylist/avatar.js b/ioneapps-maagapp-ee31119a522d/src/components/SharedPlaylist/avatar.js new file mode 100644 index 0000000..716e555 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/src/components/SharedPlaylist/avatar.js @@ -0,0 +1,257 @@ +import React from 'react'; +import { View, StyleSheet, Text, Platform, Image } from 'react-native'; +import _ from 'lodash'; +import PropTypes from 'prop-types'; + +import { color } from '~/styles/variables'; +import RedDot from '~/components/redDot'; + +const styles = StyleSheet.create({ + container: { + justifyContent: 'center', + borderWidth: 2, + borderColor: color.white, + borderRadius: 10, + overflow: 'hidden', + }, + small: { + borderRadius: 18, + width: 36, + height: 36, + }, + smallRadius: { + borderRadius: 18, + }, + default: { + borderRadius: 28, + width: 56, + height: 56, + }, + defaultRadius: { + borderRadius: 28, + }, + large: { + borderRadius: 36, + width: 72, + height: 72, + }, + largeRadius: { + borderRadius: 36, + }, + text: { + textAlign: 'center', + }, + image: { + width: '100%', + height: '100%', + }, + avatarContainer: { + width: 36, + height: 36, + position: 'relative', + bottom: 0, + left: 0, + aspectRatio: 1, + alignSelf: 'flex-end', + }, + avatar: { + aspectRatio: 1, + width: 32, + height: 32, + }, + + title1: { + fontSize: 28, + lineHeight: 34, + letterSpacing: 0.364, + fontWeight: '300', + }, + title2: { + fontSize: 22, + lineHeight: 28, + letterSpacing: 0.352, + }, + subhead: { + fontSize: 15, + lineHeight: 20, + letterSpacing: -0.24, + }, + countContainer: { + flexDirection: 'row-reverse', + }, + withShadow: { + ...Platform.select({ + ios: { + shadowColor: color.grayDark, + shadowOpacity: 0.23, + shadowRadius: 2.62, + shadowOffset: { + width: 0, + height: 2, + }, + }, + android: { + elevation: 4, + }, + }), + }, +}); + +export const Avatar = (props) => { + const initial = (props.firstName.substr(0, 1) + props.lastName.substr(0, 1)).toUpperCase(); + const isImage = props.source !== null; + let textSize = styles.title2; + switch (props.size) { + case 'large': textSize = styles.title1; break; + case 'small': textSize = styles.subhead; break; + default: textSize = styles.title2; + } + return ( + + { props.isNew && } + + {!isImage ? ( + {initial} + ) : ( + + ) + } + + + ); +}; + +Avatar.propTypes = { + index: PropTypes.number, + firstName: PropTypes.string, + lastName: PropTypes.string, + size: PropTypes.oneOf(['default', 'large', 'small']), + source: PropTypes.any, + style: PropTypes.any, + isTranslucent: PropTypes.bool, + withShadow: PropTypes.bool, + isNew: PropTypes.bool, +}; + +Avatar.defaultProps = { + index: 0, + withShadow: false, + firstName: '', + lastName: '', + size: 'small', + source: null, + style: {}, + isTranslucent: false, + isNew: false, +}; + +export const AvatarCount = (props) => { + const avatarPreview = [...props.avatars]; + // host + 4 friends + if (avatarPreview.length > 5) { + const hiddenAvatars = avatarPreview.splice(4, avatarPreview.length - 4); + const isNewAudienceIncluded = hiddenAvatars.find(ava => ava.isNewAudience === true); + avatarPreview.push({ firstName: '+', lastName: `${hiddenAvatars.length}`, isNewAudience: Boolean(isNewAudienceIncluded) }); + } + return ( + + {avatarPreview.reverse().map((avatar, index) => { + let source = null; + if (!_.isEmpty(avatar.source)) { + const { uri } = avatar.source; + source = uri ? { uri } : null; + } + return (); + })} + + ); +}; + +AvatarCount.propTypes = { + avatars: PropTypes.array, + stackable: PropTypes.bool, + style: PropTypes.any, +}; + +AvatarCount.defaultProps = { + avatars: [], + stackable: false, + style: {}, +}; + +export const mapAvatarFromProps = ({ sharing, newAudience = {} }) => { + const { contributors, invites, owner } = sharing; + let mapInvites = []; + let mapContributor = []; + + if (!_.isEmpty(contributors)) { + mapContributor = contributors.map((value) => { + const { username } = value; + const name = value.fullName.split(' '); + const sourceVal = (_.has(value, 'avatar') && _.has(value.avatar, 'url') && value.avatar.url.indexOf('ui-avatars') === -1) ? { uri: value.avatar.url } : null; + return { + firstName: !_.isEmpty(name) ? name[0].charAt(0) : '', + lastName: + (name.length > 1 ? name[name.length - 1].charAt(0) : + ''), + isAccepted: true, + source: sourceVal, + isNewAudience: Boolean(newAudience[username]), + // source: { uri: (_.has(value, 'avatar')) ? value.avatar.url : null }, + }; + }); + } + + if (!_.isEmpty(invites)) { + mapInvites = invites.map((value) => { + const name = value.fullName.split(' '); + const sourceVal = (_.has(value, 'avatar') && _.has(value.avatar, 'url') && value.avatar.url.indexOf('ui-avatars') === -1) ? { uri: value.avatar.url } : null; + return { + firstName: name[0].charAt(0), + lastName: + (name.length > 1 ? name[name.length - 1].charAt(0) : + ''), + isAccepted: false, + source: sourceVal, + isNewAudience: false, + // source: { uri: (_.has(value, 'avatar')) ? value.avatar.url : null }, + }; + }); + } + + const avatarUrl = (_.has(owner, 'avatar') && _.has(owner.avatar, 'url') && owner.avatar.url.indexOf('ui-avatars') === -1) ? { uri: owner.avatar.url } : null; + const ownerObj = { + firstName: owner.firstName, + lastName: owner.lastName, + isAccepted: true, + source: avatarUrl, + }; + + return [...ownerObj, ...mapContributor, ...mapInvites]; +}; diff --git a/ioneapps-maagapp-ee31119a522d/src/components/SharedPlaylist/clickableIcon.js b/ioneapps-maagapp-ee31119a522d/src/components/SharedPlaylist/clickableIcon.js new file mode 100644 index 0000000..23ebcdb --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/src/components/SharedPlaylist/clickableIcon.js @@ -0,0 +1,56 @@ +import React, { Component } from 'react'; +import { + TouchableOpacity, + StyleSheet, +} from 'react-native'; +import { NixplayIcon } from 'nixplay-ui-kit'; +// import _ from 'lodash'; +import { color, transparentize } from '~/styles/variables'; + + +import PropTypes from 'prop-types'; + +const styles = StyleSheet.create({ + shadow: { + textShadowRadius: 2, + textShadowOffset: { + width: 0, + height: 1, + }, + textShadowColor: transparentize(color.black, 50), + }, +}); + +export class ClickableIcon extends Component { + static propTypes = { + style: PropTypes.any, + iconName: PropTypes.string, + iconSize: PropTypes.number, + iconColor: PropTypes.string, + func: PropTypes.any, + withShadow: PropTypes.bool, + }; + + static defaultProps = { + style: {}, + iconName: null, + iconSize: 24, + iconColor: 'white', + func: null, + withShadow: true, + }; + + render() { + // const isFunctionAvailable = typeof this.props.func === 'function' ? _.debounce(this.props.func, 1000) : null; + return ( + + + + ); + } +} diff --git a/ioneapps-maagapp-ee31119a522d/src/components/SharedPlaylist/collapsibleHeader.js b/ioneapps-maagapp-ee31119a522d/src/components/SharedPlaylist/collapsibleHeader.js new file mode 100644 index 0000000..d042e6e --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/src/components/SharedPlaylist/collapsibleHeader.js @@ -0,0 +1,315 @@ +/* eslint-disable react/prop-types */ +import React, { PureComponent } from 'react'; +import PropTypes from 'prop-types'; + +import { + StyleSheet, + View, + TouchableOpacity, + Animated, + Dimensions, + InteractionManager, + FlatList, +} from 'react-native'; +import { + NixplayIcon, + color, + Text, +} from 'nixplay-ui-kit'; +import _ from 'lodash'; + +import setTestID from '~/test/testUtils'; +import * as TEST_IDS from '~/store/testIDConstants'; + +// TODO: +// 1. Fix header style for albums instead of using header height - keembee +// 2. a better approach for rendering the children - keembee + +const Screen = { + height: Dimensions.get('window').height, + width: Dimensions.get('window').width, +}; + +const HEADER_HEIGHT = 100; +const THUMB_HEIGHT = Screen.width / 3; + +const styles = StyleSheet.create({ + container: { + flex: 1, + backgroundColor: color.white, + }, + touchableContainer: { + justifyContent: 'flex-end', + padding: 12, + }, + iconContainer: { + flex: 1, + width: '100%', + position: 'absolute', + backgroundColor: color.white, + top: 0, + height: 50, + flexDirection: 'row', + justifyContent: 'space-between', + }, + placeholderEmpty: { + width: THUMB_HEIGHT, + height: THUMB_HEIGHT, + margin: 1, + backgroundColor: color.mistBlue03, + }, +}); + +class CollapsibleHeader extends PureComponent { + static propTypes = { + toggleMode: PropTypes.bool, + selectMode: PropTypes.bool, + fetchData: PropTypes.func, + loadMoreData: PropTypes.func, + navigation: PropTypes.object, + count: PropTypes.number, + title: PropTypes.string, + subtitle: PropTypes.object, + rightIconPress: PropTypes.func, + onRefresh: PropTypes.func, + refreshing: PropTypes.bool, + paginate: PropTypes.bool, + hasMore: PropTypes.bool, + } + + static defaultProps = { + toggleMode: false, + selectMode: false, + fetchData: () => {}, + loadMoreData: () => {}, + navigation: {}, + count: 1, + title: '', + subtitle: {}, + rightIconPress: {}, + onRefresh: () => {}, + refreshing: false, + paginate: false, + hasMore: false, + } + + constructor(props) { + super(props); + + this.state = { + isDoneAnimating: false, + scrollY: new Animated.Value(0), + opacity: new Animated.Value(0.5), // init opacity 0 + }; + } + + componentDidMount() { + InteractionManager.runAfterInteractions(() => { + this.setState({ isDoneAnimating: true }, () => { + Animated.timing( + // Uses easing functions + this.state.opacity, // The value to drive + { + toValue: 1, + duration: 100, + useNativeDriver: true, + }, // Configuration + ).start(() => { + this.fetchData(); + }); // Don't forget start! + }); + }); + } + + getScale = () => { + const { scrollY } = this.state; + + return scrollY.interpolate({ + inputRange: [0, 50], + outputRange: [1.5, 1], + extrapolate: 'clamp', + }); + } + + getHeaderHeight = () => { + const { scrollY } = this.state; + + return scrollY.interpolate({ + inputRange: [0, 50], + outputRange: [0, -50], + extrapolateRight: 'clamp', + }); + } + + goBack = () => { + this.setState({ isDoneAnimating: false }, () => { + this.props.navigation.goBack(); + }); + } + + fetchData = () => { + this.props.fetchData(); + } + + handleLoadMore = () => { + if (!this.props.hasMore) return; + this.props.loadMoreData(); + } + + keyExtractor = (item, index) => `${item.id}-${index}`; + + renderPlaceholder = () => ( + 12 ? 12 : this.props.count)} + contentContainerStyle={{ paddingTop: HEADER_HEIGHT, marginTop: 25 }} + scrollEventThrottle={16} + bounces={false} + numColumns={3} + keyExtractor={this.keyExtractor} + renderItem={() => ( + + )} + /> + + ) + + render() { + const { + title, + subtitle, + selectMode, + rightIconPress, + onRefresh, + refreshing, + } = this.props; + + const { + opacity, + isDoneAnimating, + } = this.state; + + const headerHeight = this.getHeaderHeight(); + const scaleLevel = this.getScale(); + + return ( + + { isDoneAnimating && { this.flatlist = ref; }} + style={{ + height: Screen.height, + opacity, + marginTop: 25, + }} + // Start of default FlatList config + maxToRenderPerBatch={10} + initialNumToRender={10} + onEndReached={this.handleLoadMore} + onEndReachedThreshold={3} + removeClippedSubviews + contentContainerStyle={{ paddingTop: HEADER_HEIGHT, marginBottom: 30 }} + scrollEventThrottle={1} + numColumns={3} + refreshing={refreshing} + onRefresh={onRefresh} + windowSize={11} + keyExtractor={this.keyExtractor} + // End of default Flatlist config + + // data={playlist.slides} + getItemLayout={(data, index) => ( + { length: THUMB_HEIGHT, offset: THUMB_HEIGHT * index, index } + )} + onScroll={Animated.event( + [{ nativeEvent: { contentOffset: { y: this.state.scrollY } } }], + { + useNativeDriver: true, + listener: () => { + if (isDoneAnimating) { + this.setState({ isDoneAnimating: true }); + } + }, + }, + )} + /> } + { !isDoneAnimating && this.renderPlaceholder() } + { selectMode ? + + this.goBack()} style={styles.touchableContainer} iconName="more"> + + + this.openPlaylistActionSheet()} style={styles.touchableContainer} iconName="more"> + + + : + + this.props.toggleSelectModePressed()} style={styles.touchableContainer} iconName="more"> + + + + } + { + !selectMode ? + + this.goBack()} style={styles.touchableContainer} iconName="more" {...setTestID(TEST_IDS.NAV_CLOSE)}> + + + rightIconPress()} style={styles.touchableContainer} iconName="more" {...setTestID(TEST_IDS.NAV_MORE)}> + + + : + + this.props.toggleSelectModePressed()} style={styles.touchableContainer} iconName="more" {...setTestID(TEST_IDS.NAV_XCLOSE)}> + + + + } + + + {title} + + {subtitle} + + + {this.props.children} + + ); + } +} + +export default CollapsibleHeader; diff --git a/ioneapps-maagapp-ee31119a522d/src/components/SharedPlaylist/contentCount.js b/ioneapps-maagapp-ee31119a522d/src/components/SharedPlaylist/contentCount.js new file mode 100644 index 0000000..12dd64b --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/src/components/SharedPlaylist/contentCount.js @@ -0,0 +1,126 @@ +import React from 'react'; +import { + View, + StyleSheet, + TouchableOpacity, +} from 'react-native'; +import PropTypes from 'prop-types'; +import { Text, NixplayIcon, AnimatedIcon } from 'nixplay-ui-kit'; +import { color, transparentize } from '~/styles/variables'; + +const styles = StyleSheet.create({ + container: { + flexDirection: 'row', + alignItems: 'center', + }, + margin: { + marginRight: 2, + }, + textWithShadow: { + textShadowRadius: 4, + textShadowOffset: { width: 0, height: 2 }, + textShadowColor: transparentize(color.black, 50), + }, + textBigger: { + fontSize: 16, + lineHeight: 20, + }, +}); + +const Element = (props) => ( + + {props.index > 0 && props.withDot && + } + {props.icon !== '' && !props.spin && + + } + {props.icon !== '' && props.spin && + + } + + {props.text} + + +); + +Element.propTypes = { + // index: PropTypes.number.isRequired, + icon: PropTypes.string, + color: PropTypes.string, + text: PropTypes.oneOfType([PropTypes.string, PropTypes.number]), + spin: PropTypes.bool, + isGoogle: PropTypes.bool, + iconSize: PropTypes.number, + index: PropTypes.number, + withDot: PropTypes.bool, + textStyle: PropTypes.any, + bigger: PropTypes.bool, +}; + +Element.defaultProps = { + bigger: false, + icon: '', + color: 'white', + text: '', + spin: false, + isGoogle: false, + iconSize: 16, + withDot: false, + index: 0, + textStyle: 'caption1', +}; + +export const ContentCount = (props) => ( + + {props.counts.map((count, index) => (typeof count.onPress === 'function' ? ( + + + + ) : ( + + )))} + +); + +ContentCount.propTypes = { + counts: PropTypes.array, + isGoogle: PropTypes.bool, + iconSize: PropTypes.number, + containerStyle: PropTypes.any, + withDot: PropTypes.bool, + textStyle: PropTypes.any, + bigger: PropTypes.bool, +}; + +ContentCount.defaultProps = { + bigger: false, + counts: [], + isGoogle: false, + withDot: false, + iconSize: 16, + textStyle: 'caption1', + containerStyle: {}, +}; diff --git a/ioneapps-maagapp-ee31119a522d/src/components/SharedPlaylist/label.js b/ioneapps-maagapp-ee31119a522d/src/components/SharedPlaylist/label.js new file mode 100644 index 0000000..a9bfb83 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/src/components/SharedPlaylist/label.js @@ -0,0 +1,49 @@ +import React from 'react'; +import PropTypes from 'prop-types'; +import { Text, StyleSheet, View, ViewPropTypes } from 'react-native'; + +import { color } from '~/styles/variables'; + +const labelStyles = StyleSheet.create({ + container: { + alignSelf: 'flex-start', + flexShrink: 1, + borderRadius: 2, + }, + small: { + height: 16, + paddingLeft: 6, + paddingRight: 6, + }, + caption: { + fontSize: 11, + lineHeight: 13, + letterSpacing: 0.066, + }, +}); + +export const Label = (props) => ( + + {props.label} + +); + +Label.propTypes = { + ...ViewPropTypes, + label: PropTypes.string.isRequired, + labelColor: PropTypes.string, + textColor: PropTypes.string, + style: PropTypes.any, +}; + +Label.defaultProps = { + labelColor: 'blue', + textColor: 'white', + style: {}, +}; diff --git a/ioneapps-maagapp-ee31119a522d/src/components/SharedPlaylist/plusIcon.js b/ioneapps-maagapp-ee31119a522d/src/components/SharedPlaylist/plusIcon.js new file mode 100644 index 0000000..cf37325 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/src/components/SharedPlaylist/plusIcon.js @@ -0,0 +1,63 @@ +import React, { Component } from 'react'; +import { View, StyleSheet } from 'react-native'; +import { NixplayIcon } from 'nixplay-ui-kit'; +import PropTypes from 'prop-types'; +import { color } from '~/styles/variables'; + +const styles = StyleSheet.create({ + container: { + justifyContent: 'center', + alignItems: 'center', + backgroundColor: color.white, + borderWidth: 1, + borderColor: color.mistBlue03, + marginLeft: 3, + }, + small: { + borderRadius: 18, + width: 34, + height: 34, + }, + text: { + textAlign: 'center', + }, + image: { + width: '100%', + height: '100%', + }, + avatar: { + aspectRatio: 1, + }, +}); + +export class PlusIcon extends Component { + static propTypes = { + style: PropTypes.any, + func: PropTypes.any, + }; + + static defaultProps = { + style: {}, + func: null, + }; + + render() { + return ( + + + + ); + } +} diff --git a/ioneapps-maagapp-ee31119a522d/src/components/SharedPlaylist/sharedPlaylistActions.js b/ioneapps-maagapp-ee31119a522d/src/components/SharedPlaylist/sharedPlaylistActions.js new file mode 100644 index 0000000..fdc523a --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/src/components/SharedPlaylist/sharedPlaylistActions.js @@ -0,0 +1,122 @@ +import React from 'react'; +import { View, StyleSheet } from 'react-native'; +import { ActionSheet, Button, Text } from 'nixplay-ui-kit'; +import PropTypes from 'prop-types'; +import PlaylistActions from '~comp/Playlists/playlistActions'; +import i18n from '~/locale/i18n'; + +export const styles = StyleSheet.create({ + bottomButton: { + marginTop: -30, + }, + customSheet: { + flexDirection: 'row', + justifyContent: 'center', + paddingVertical: 20, + }, + buttonContainer: { + alignItems: 'center', + marginHorizontal: 22, + }, + buttonTextStyle: { + paddingTop: 8, + marginHorizontal: -20, + }, +}); + +const SharedPlaylistActions = (props) => ( + + + {i18n.t('contents.addPhotos')} + + + + {i18n.t('contents.photoLibrary')} + + + + {i18n.t('albums.cloudAlbum')} + + + {i18n.t('common.cancel')} + + + {props.playlist.feature.removeContent === true && + {i18n.t('common.select')}} + {props.playlist.feature.sort === true && + {i18n.t('common.sortBy')}} + {props.isFrameOwner && + {i18n.t('frames.assignToFrame')}} + {props.playlist.feature.rename === true && + {i18n.t('playlists.renamePlaylist')}} + {i18n.t('playlists.deletePlaylist')} + {i18n.t('common.cancel')} + + + +); + +SharedPlaylistActions.propTypes = { + playlist: PropTypes.object, + addPhotoRef: PropTypes.func, + playlistMoreActionSheet: PropTypes.func, + onPhotoLibraryPressed: PropTypes.func, + onCloudAlbumPressed: PropTypes.func, + playlistActionsRef: PropTypes.func, + assignToFramePressed: PropTypes.func, + toggleSelectModePressed: PropTypes.func, + sortPlaylistPressed: PropTypes.func, + renamePlaylistPressed: PropTypes.func, + deletePlaylistPressed: PropTypes.func, + actions: PropTypes.array, + contentSeqChanged: PropTypes.bool, + isFrameOwner: PropTypes.bool, +}; + +SharedPlaylistActions.defaultProps = { + playlist: {}, + addPhotoRef: () => {}, + playlistMoreActionSheet: () => {}, + onPhotoLibraryPressed: () => {}, + onCloudAlbumPressed: () => {}, + playlistActionsRef: () => {}, + assignToFramePressed: () => {}, + toggleSelectModePressed: () => {}, + sortPlaylistPressed: () => {}, + renamePlaylistPressed: () => {}, + deletePlaylistPressed: () => {}, + actions: [], + contentSeqChanged: false, + isFrameOwner: false, +}; + + +export default SharedPlaylistActions; diff --git a/ioneapps-maagapp-ee31119a522d/src/components/SharedPlaylist/sharedPlaylistInvite.js b/ioneapps-maagapp-ee31119a522d/src/components/SharedPlaylist/sharedPlaylistInvite.js new file mode 100644 index 0000000..5c32fcf --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/src/components/SharedPlaylist/sharedPlaylistInvite.js @@ -0,0 +1,201 @@ +import React from 'react'; +import PropTypes from 'prop-types'; +import _ from 'lodash'; +import { + StyleSheet, + View, + Platform, +} from 'react-native'; +import { + Text, + Button, + Thumbnail, +} from 'nixplay-ui-kit'; +import { + // analytics, + debounceWrapper, +} from '~/lib/utils'; +import FastImage from 'react-native-fast-image'; +import { color } from '~/styles/variables'; +import i18n from '~/locale/i18n'; +import * as Animatable from 'react-native-animatable'; + +const ButtonEx = debounceWrapper(Button); + +const styles = StyleSheet.create({ + thumbnail: { + position: 'absolute', + borderRadius: 6, + height: 170, + width: '100%', + }, + text: { + color: color.textGrey, + textAlign: 'center', + }, + container: { + flex: 1, + height: 170, + margin: 10, + borderRadius: 6, + alignItems: 'center', + justifyContent: 'center', + backgroundColor: color.white, + ...Platform.select({ + ios: { + shadowColor: '#7998A5', + shadowOffset: { + width: 0, + height: 6, + }, + shadowOpacity: 0.20, + shadowRadius: 6, + + elevation: 2, + }, + android: { + elevation: 15, + }, + }), + }, + outerContainer: { + height: 170, + width: '100%', + // backgroundColor: color.white, + borderRadius: 6, + }, + buttonContainer: { + width: '100%', + marginTop: 20, + paddingHorizontal: 20, + justifyContent: 'center', + flexDirection: 'row', + }, + innerContainer: { + height: '100%', + width: '100%', + borderRadius: 6, + alignItems: 'center', + justifyContent: 'center', + // backgroundColor: color.lighten(color.mistBlue01, 1), + }, + acceptButton: { + flex: 1, + alignSelf: 'flex-start', + paddingHorizontal: 25, + alignItems: 'center', + justifyContent: 'center', + marginHorizontal: 10, + marginRight: 5, + }, + acceptButtonDisabled: { + borderColor: color.grey03, + backgroundColor: color.grey03, + }, + declineButton: { + flex: 1, + alignSelf: 'flex-start', + paddingHorizontal: 25, + alignItems: 'center', + justifyContent: 'center', + marginHorizontal: 10, + marginLeft: 5, + }, + declineButtonDisabled: { + borderColor: color.grey03, + backgroundColor: color.white, + }, +}); + +const sharedPlaylistInvite = ({ + playlistName, + ownerFirstName, + ownerLastName, + imageURL, + isConnected, + acceptSharedPlaylistInvite, + rejectSharedPlaylistInvite, +}) => ( + + { !_.isEmpty(imageURL) && } + + + + {i18n.t('playlists.playlistInvited', { ownerFullname: `${ownerFirstName} ${ownerLastName}` })} + {(playlistName === 'My Playlist') ? `"${ownerFirstName}'s Playlist"` : `"${playlistName}"`} + + + + + + {i18n.t('common.accept')} + + + + + + {i18n.t('common.decline')} + + + +); + +sharedPlaylistInvite.propTypes = { + playlistName: PropTypes.string, + ownerFirstName: PropTypes.string, + ownerLastName: PropTypes.string, + imageURL: PropTypes.string, + isConnected: PropTypes.bool.isRequired, + acceptSharedPlaylistInvite: PropTypes.func, + rejectSharedPlaylistInvite: PropTypes.func, +}; + +sharedPlaylistInvite.defaultProps = { + playlistName: '', + ownerFirstName: '', + ownerLastName: '', + imageURL: '', + rejectSharedPlaylistInvite: () => {}, + acceptSharedPlaylistInvite: () => {}, +}; + +export default sharedPlaylistInvite; diff --git a/ioneapps-maagapp-ee31119a522d/src/components/SharedPlaylist/subtitleContainer.js b/ioneapps-maagapp-ee31119a522d/src/components/SharedPlaylist/subtitleContainer.js new file mode 100644 index 0000000..a153608 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/src/components/SharedPlaylist/subtitleContainer.js @@ -0,0 +1,25 @@ +import React from 'react'; +import { + StyleSheet, + View, +} from 'react-native'; + +import PropTypes from 'prop-types'; + +const styles = StyleSheet.create({ + containerStyle: { + flexDirection: 'row', + }, +}); + +export const SubtitleContainer = (props) => ( + +); + +SubtitleContainer.propTypes = { + style: PropTypes.any, +}; + +SubtitleContainer.defaultProps = { + style: {}, +}; diff --git a/ioneapps-maagapp-ee31119a522d/src/components/SharedPlaylist/thumbnail.js b/ioneapps-maagapp-ee31119a522d/src/components/SharedPlaylist/thumbnail.js new file mode 100644 index 0000000..3eab6f9 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/src/components/SharedPlaylist/thumbnail.js @@ -0,0 +1,528 @@ +import React, { Component } from 'react'; +import PropTypes from 'prop-types'; +import { State, LongPressGestureHandler } from 'react-native-gesture-handler'; +import { + StyleSheet, + View, + Dimensions, + TouchableOpacity, + LayoutAnimation, + UIManager, + Platform, +} from 'react-native'; +import DeviceInfo from 'react-native-device-info'; +import Animated from 'react-native-reanimated'; +import { + Image, + NixplayIcon, + Text, + color, + transparentize, +} from 'nixplay-ui-kit'; + +import moment from 'moment'; +import _ from 'lodash'; +import FastImage from 'react-native-fast-image'; + +import * as TEST_IDS from '~/store/testIDConstants'; +import setTestID from '~/test/testUtils'; + +const Screen = { + height: Dimensions.get('window').height, + width: Dimensions.get('window').width, +}; +const thumbHeight = (Screen.width / 3) - 2; + +const styles = StyleSheet.create({ + thumb: { + flex: 1, + }, + dot: { + backgroundColor: color.red, + width: 10, + height: 10, + borderRadius: 5, + position: 'absolute', + right: 4, + top: 4, + }, + marginCorrection: { + right: 10, + }, + placeholder: { + width: thumbHeight, + height: thumbHeight, + margin: 1, + backgroundColor: color.mistBlue03, + }, + videoIconContainer: { + position: 'absolute', + bottom: 4, + left: 4, + backgroundColor: transparentize(color.white, 20), + paddingHorizontal: 8, + paddingVertical: 2, + borderRadius: 8, + flexDirection: 'row', + alignItems: 'center', + }, + videoDuration: { + marginLeft: 4, + }, + selectedIcon: { + position: 'absolute', + top: 4, + right: 4, + width: 24, + height: 24, + borderRadius: 12, + backgroundColor: color.white, + shadowOffset: { width: 0, height: 1 }, + shadowColor: color.black, + shadowOpacity: 0.2, + shadowRadius: 2, + elevation: 1, + }, +}); + +const videoDuration = (seconds) => { + const duration = moment.duration(seconds, 'seconds'); + return `${_.padStart(duration.minutes(), 2, 0)}:${_.padStart(duration.seconds(), 2, 0)}`; +}; + +const hasNotch = DeviceInfo.hasNotch(); +const isIOS = Platform.OS === 'ios'; +const HEADER_PADDING = hasNotch ? 38 : 70; +const { + cond, + eq, + sub, + Value, + event, + call, +} = Animated; + +if (Platform.OS === 'android') { + if (UIManager.setLayoutAnimationEnabledExperimental) { + UIManager.setLayoutAnimationEnabledExperimental(true); + } +} + +class Thumbnail extends Component { + constructor(props) { + super(props); + this.state = { + dragging: false, + currentIndex: -1, + }; + this.dragging = new Value(0); + this.X = new Value(0); + this.Y = new Value(0); + this.minIndex = -1; + this.activeIndex = new Value(0); + this.gestureState = new Value(-1); + this.scrolling = false; + this.selectedIndex = -1; + this.offsetX = new Value(0); + this.offsetY = new Value(0); + this.holderX = 0; + this.holderY = 0; + this.floating = false; + this.holderIndex = -1; + this.scale = new Value(0.8); + this.floatingScale = new Value(0.8); + this.onGestureEvent = event([ + { + nativeEvent: { + absoluteX: this.X, + absoluteY: this.Y, + state: this.gestureState, + }, + }, + ], { useNativeDriver: true }); + } + + shouldComponentUpdate(nextProps, nextState) { + if (!_.isEqual(nextProps.selectedContent, this.props.selectedContent) || + !_.isEqual(nextProps.dragMode, this.props.dragMode) || + !_.isEqual(nextProps.selectMode, this.props.selectMode) || + !_.isEqual(nextProps.activeIndex, this.props.activeIndex) || + !_.isEqual(nextProps.index, this.props.index) || + !_.isEqual(nextState.dragging, this.state.dragging)) { + return true; + } + return false; + } + + getActiveIndex = async ([Y, X]) => { + const { + setActiveIndex, scrollY, index, + } = this.props; + + this.selectedIndex = index; + + if (Y > Screen.height - 100) { + this.props.setDraggingTrue(); + this.props.scrollList(5); + } else if (Y < 100) { + this.props.setDraggingTrue(); + this.props.scrollList(-5); + } else { + this.props.setDraggingFalse(); + const holderX = Math.floor(X / (thumbHeight + 2)); + const holderY = (Y + HEADER_PADDING + scrollY) / (thumbHeight + 2); + const indexHolder = ((Math.floor(holderY) * 3) - 3) + holderX; + + this.setState({ currentIndex: indexHolder }); + setActiveIndex(indexHolder); + LayoutAnimation.configureNext(LayoutAnimation.create(100, 'easeOut', 'opacity')); + } + + this.setState({ dragging: true }); + + // this.selectedIndex = index; + // const holderX = Math.floor(X / (thumbHeight + 2)); + // const holderY = (Y + HEADER_PADDING + scrollY) / (thumbHeight + 2); + // const indexHolder = ((Math.floor(holderY) * 3) - 3) + holderX; + + // setActiveIndex(indexHolder); + // this.setState({ currentIndex: indexHolder, activeIndex: index }); + // this.thumbref.measure( (fx, fy, width, height, px, py) => { + + // console.log('Component width is: ' + width) + // console.log('Component height is: ' + height) + // console.log('X offset to frame: ' + fx) + // console.log('Y offset to frame: ' + fy) + // console.log('X offset to page: ' + px) + // console.log('Y offset to page: ' + py) + // console.log(scrollY) + // }) + // console.log(indexHolder); + + // block([ + // set(this.holderX, floor(divide(X, thumbHeight))), + // set(this.holderY, floor(divide(add(Y, HEADER_PADDING), add(thumbHeight, 2)))), + // set(this.holderIndex, add(this.holderX, multiply(sub(this.holderY, 1), 3))), + // ]) + } + + setFloatingComponent = () => { + if (!this.floating) { + this.floating = true; + this.props.setFloatingComponent(this.renderFloatingComponent); + } + } + + // setFloatingComponent = () => { + // const Component = 'HELLO'; + // this.props.floatingComponent(Component); + // } + + // scrollList = (index) => { + // const { scrollY } = this.props; + // this.props.getFlatListRef().getNode().scrollToIndex({ + // offset: index, + // animated: false, + // }); + // } + + reset = async () => { + const { onMoveEnd, activeIndex } = this.props; + const { currentIndex } = this.state; + this.props.setDraggingFalse(); + this.setState({ dragging: false }); + this.floating = false; + if (this.minIndex === -1 || this.minIndex < this.selectedIndex) { + this.minIndex = this.selectedIndex; + } + if (!_.isEqual(this.selectedIndex, activeIndex)) { + if (this.selectedIndex < currentIndex) { // from upper slot to lower slot + onMoveEnd(this.selectedIndex, currentIndex + 1); + } else { // from lower slot to upper slot + onMoveEnd(this.selectedIndex, currentIndex); + } + } + this.props.setActiveIndex(-1); + } + + renderFloatingComponent = () => { + const { photo } = this.props; + const { dragging } = this.state; + const photoUrl = (!_.isEmpty(photo.microThumbnailUrl) && photo.microThumbnailUrl.indexOf('MICRO_THUMBNAIL') >= 1) ? photo.microThumbnailUrl : photo.thumbnailUrl; + + return dragging && ( + + + + ); + } + + render() { + const { + photo, dragMode, activeIndex, index, onPressContent, playlistLastSeenTimestamp, + isSharedPlaylist, onLongPressContent, selectMode, playlistId, + // itemSelectable + } = this.props; + const photoUrl = (!_.isEmpty(photo.microThumbnailUrl) && photo.microThumbnailUrl.indexOf('MICRO_THUMBNAIL') >= 1) ? photo.microThumbnailUrl : photo.thumbnailUrl; + const { dragging } = this.state; + // const isShared = this.props.isSharedPlaylist; + // const isPlaylistOwned = this.props.isOwner; + // const isMatchUser = (selectMode && _.isEqual(photo.username, this.props.username)); + // const thumbOpacity = (isPlaylistOwned || isMatchUser) ? 1 : 0.5; + + + // const disabled = itemSelectable !== -1 ? !itemSelectable(this.props.photo) : false; + // const opacity = (selectMode && isShared) ? thumbOpacity : 1.0; + // const photoPrintOpacity = disabled ? 0.5 : 1.0; + + const photoTimestamp = (photo.timestamp === undefined) ? playlistLastSeenTimestamp : photo.timestamp; + const isRedDot = (parseInt(photoTimestamp, 0) >= parseInt(playlistLastSeenTimestamp, 0)); + + return ( + // { this.panGestureRef = ref; }} + // simultaneousHandlers={this.longPressRef} + // waitFor={this.props.getFlatListRef()} + // onHandlerStateChange={this.onGestureEvent} + // onGestureEvent={this.onGestureEvent} + // > + // onLongPressContent(photo.id, index, e, moveStart)} + // onPress={() => onPressContent(photo.id, index)} + // {...setTestID(`${TEST_IDS.THUMBNAIL}${index}`)} + // > + // + // { + // if (e.nativeEvent.state === State.ACTIVE) { + // onPressContent(photo.id, index); + // } + // }} + // > + // + { this.longPressRef = ref; }} + {...setTestID(`${TEST_IDS.THUMBNAIL}${index}`)} + > + + onPressContent(photo.id, index, playlistId)} + onLongPress={() => onLongPressContent(photo.id, index)} + > + + + {() => cond(eq(this.gestureState, State.ACTIVE), [ + call([this.Y, this.X], this.getActiveIndex), + call([], this.setFloatingComponent), + ]) + } + + + {() => cond(eq(this.gestureState, State.END), [ + call([], this.setFloatingComponent), + call([this.Y], this.reset), + call([], () => { this.floating = false; }), + ]) + } + + + + {!dragging && } + + {!_.isEmpty(photo.videoUrl) && + + + + {videoDuration(photo.videoDuration)} + + + } + {this.props.selectMode && this.props.selectedContent.indexOf(photo.id) >= 0 && + + + + } + {(isRedDot && isSharedPlaylist && !selectMode && !dragMode) && } + {} + + + + // + // + ); + } +} + +Thumbnail.propTypes = { + photo: PropTypes.object, + index: PropTypes.number, + onPressContent: PropTypes.func, + onLongPressContent: PropTypes.func, + selectMode: PropTypes.bool, + selectedContent: PropTypes.array, + moveStart: PropTypes.func, + username: PropTypes.string, + playlistLastSeenTimestamp: PropTypes.number, + isSharedPlaylist: PropTypes.bool, + isOwner: PropTypes.bool, + itemSelectable: PropTypes.any, + setActiveIndex: PropTypes.func, + scrollY: PropTypes.number, + dragMode: PropTypes.bool, + activeIndex: PropTypes.number, + onMoveEnd: PropTypes.func, + setDraggingFalse: PropTypes.func, + setDraggingTrue: PropTypes.func, + setFloatingComponent: PropTypes.func, + scrollList: PropTypes.func, + playlistId: PropTypes.number, +}; + +Thumbnail.defaultProps = { + photo: { thumbnailUrl: '' }, + scrollY: 0, + playlistId: 0, + setFloatingComponent: () => {}, + scrollList: () => {}, + playlistLastSeenTimestamp: -1, + index: 0, + onPressContent: () => {}, + onLongPressContent: () => {}, + setActiveIndex: () => {}, + selectMode: false, + selectedContent: [], + moveStart: () => {}, + onMoveEnd: () => {}, + username: '', + isSharedPlaylist: false, + isOwner: false, + itemSelectable: -1, + setDraggingFalse: () => {}, + setDraggingTrue: () => {}, + dragMode: false, + activeIndex: -1, +}; + +export default Thumbnail; diff --git a/ioneapps-maagapp-ee31119a522d/src/components/SharedPlaylist/title.js b/ioneapps-maagapp-ee31119a522d/src/components/SharedPlaylist/title.js new file mode 100644 index 0000000..8987a78 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/src/components/SharedPlaylist/title.js @@ -0,0 +1,59 @@ +import React from 'react'; +import { + Text, + StyleSheet, + Platform, +} from 'react-native'; +import PropTypes from 'prop-types'; +import { color, transparentize } from '~/styles/variables'; + +export const textStyles = StyleSheet.create({ + titleStyle: { + fontSize: 17, + lineHeight: 22, + letterSpacing: -0.408, + fontWeight: '600', + opacity: 1, + }, + shadow: { + textShadowRadius: 4, + textShadowOffset: { width: 0, height: 2 }, + textShadowColor: transparentize(color.black, 50), + }, +}); + + +// Hack to fix android text got cut +// https://github.com/facebook/react-native/issues/15114#issuecomment-364458149 +const styles = StyleSheet.create({ + text: { + ...(Platform.OS === 'android' ? { fontFamily: 'Roboto' } : {} + ), + }, +}); + + +export const Title = (props) => ( + +); + +Title.propTypes = { + textColor: PropTypes.string, + style: PropTypes.any, + withShadow: PropTypes.bool, +}; + +Title.defaultProps = { + textColor: 'white', + style: {}, + withShadow: false, +}; diff --git a/ioneapps-maagapp-ee31119a522d/src/components/SharedPlaylist/unsharedPlaylist.js b/ioneapps-maagapp-ee31119a522d/src/components/SharedPlaylist/unsharedPlaylist.js new file mode 100644 index 0000000..1f0595f --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/src/components/SharedPlaylist/unsharedPlaylist.js @@ -0,0 +1,121 @@ +import React from 'react'; +import PropTypes from 'prop-types'; + +import { + StyleSheet, + View, + Platform, +} from 'react-native'; +import { + Text, + Button, + NixplayIcon, +} from 'nixplay-ui-kit'; +import { color } from '~/styles/variables'; +import i18n from '~/locale/i18n'; + +const styles = StyleSheet.create({ + container: { + flex: 1, + height: 170, + margin: 10, + borderRadius: 6, + alignItems: 'center', + justifyContent: 'center', + backgroundColor: color.mistBlue01, + ...Platform.select({ + ios: { + shadowColor: '#7998A5', + shadowOffset: { + width: 0, + height: 6, + }, + shadowOpacity: 0.20, + shadowRadius: 6, + + elevation: 2, + }, + android: { + elevation: 15, + }, + }), + }, + unsharedPlaylist: { + position: 'absolute', + left: 0, + right: 0, + top: 0, + bottom: 0, + borderRadius: 6, + alignItems: 'center', + justifyContent: 'center', + padding: 12, + }, + playlistIconContainer: { + position: 'absolute', + top: 10, + left: 10, + right: 10, + bottom: 10, + borderRadius: 6, + justifyContent: 'center', + alignItems: 'center', + backgroundColor: color.white, + opacity: 0.8, + }, + button: { + margin: 20, + paddingHorizontal: 25, + backgroundColor: color.white, + }, + buttonDisabled: { + borderColor: color.grey03, + backgroundColor: color.white, + }, + text: { + color: color.textGrey, + textAlign: 'center', + }, +}); + +const unsharedPlaylist = ({ + playlistName, onPress, disabled, +}) => ( + + + + + + {`"${playlistName}"`} + {i18n.t('playlists.isUnavailable')} + + + +); + +unsharedPlaylist.propTypes = { + playlistName: PropTypes.string, + onPress: PropTypes.func, + disabled: PropTypes.bool, +}; + +unsharedPlaylist.defaultProps = { + playlistName: '', + onPress: () => {}, + disabled: false, +}; + +export default unsharedPlaylist; diff --git a/ioneapps-maagapp-ee31119a522d/src/components/button.js b/ioneapps-maagapp-ee31119a522d/src/components/button.js new file mode 100644 index 0000000..a6808c8 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/src/components/button.js @@ -0,0 +1,131 @@ +import React from 'react'; +import { TouchableOpacity, Platform } from 'react-native'; +import PropTypes from 'prop-types'; +import { NixplayIcon } from 'nixplay-ui-kit'; +import DeviceInfo from 'react-native-device-info'; +import { color, fontSizes } from '~/styles/variables'; +import setTestID from '~/test/testUtils'; +import { Text } from './text'; + +import { color as basicColor } from '~/styles/variables' + +const isAndroid = Platform.OS !== 'ios'; +const PREFIX_TESTID = 'btn'; + +const colorStyles = { + primary: { + touchable: { + backgroundColor: basicColor.wrikeBg, + }, + text: { + color: basicColor.wrikeGreen2, + }, + }, + link: { + touchable: { + backgroundColor: 'transparent', + padding: 0, + paddingTop: 0, + paddingBottom: 0, + }, + text: {}, + }, + disabled: { + touchable: { + backgroundColor: basicColor.wrikeGreen1, + }, + text: { + color: basicColor.wrikeGreen2, + }, + }, +}; + +const sizeStyles = { + base: { + padding: fontSizes.base, + paddingTop: fontSizes.base * 0.625, + paddingBottom: fontSizes.base * 0.625, + }, +}; + +export const Button = (props) => { + const { + testID, fontWeight, fontStyle, size, text, type, disabled, color: textColor, icon, languageCode, ...other + } = props; + const colorStyle = colorStyles[type] || colorStyles.primary; + const sizeStyle = sizeStyles[size] || sizeStyles.base; + const devId = DeviceInfo.getDeviceId(); + const paddingTop = (languageCode.indexOf('ja') === 0 && devId.indexOf() !== 'iPhone6' && !isAndroid) + ? { paddingTop: 5 } : {}; + return ( + + {icon && } + + {text} + + + ); +}; + +Button.propTypes = { + fontWeight: PropTypes.string, + fontStyle: PropTypes.string, + size: PropTypes.string, + type: PropTypes.string, + disabled: PropTypes.bool, + style: PropTypes.any, + text: PropTypes.string, + color: PropTypes.string, + testID: PropTypes.string, + setNumberOfLines: PropTypes.number, + icon: PropTypes.string, + languageCode: PropTypes.string, +}; + +Button.defaultProps = { + fontWeight: 'SemiBold', + fontStyle: 'normal', + size: 'base', + type: 'primary', + disabled: false, + style: {}, + text: '', + color: 'black', + testID: '', + setNumberOfLines: 1, + icon: null, + languageCode: 'en', +}; diff --git a/ioneapps-maagapp-ee31119a522d/src/components/checkbox.js b/ioneapps-maagapp-ee31119a522d/src/components/checkbox.js new file mode 100644 index 0000000..d6952c3 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/src/components/checkbox.js @@ -0,0 +1,65 @@ +import React, { Component } from 'react'; +import { TouchableHighlight } from 'react-native'; +import PropTypes from 'prop-types'; +import { NixplayIcon } from 'nixplay-ui-kit'; +import { color } from '~/styles/variables'; + +class Checkbox extends Component { + constructor(props) { + super(props); + this.handleToggle = this.handleToggle.bind(this); + } + + handleToggle() { + this.props.onToggle(!this.props.checked); + } + + render() { + const { checked: isChecked, size } = this.props; + return ( + + + + ); + } +} + +Checkbox.propTypes = { + size: PropTypes.number, + color: PropTypes.string, + checkBoxStyle: PropTypes.object, + iconStyle: PropTypes.object, + iconProps: PropTypes.object, + checked: PropTypes.bool, + onToggle: PropTypes.func, +}; + +Checkbox.defaultProps = { + size: 24, + color: 'black', + checkBoxStyle: {}, + iconStyle: {}, + iconProps: {}, + checked: false, + onToggle: () => {}, +}; + +export { Checkbox }; diff --git a/ioneapps-maagapp-ee31119a522d/src/components/hintsModal.js b/ioneapps-maagapp-ee31119a522d/src/components/hintsModal.js new file mode 100644 index 0000000..24c50e9 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/src/components/hintsModal.js @@ -0,0 +1,160 @@ +import React, { Component } from 'react'; +import { + TouchableOpacity, + Platform, + View, + Modal, +} from 'react-native'; +import { + color, + transparentize, + NixplayIcon, + Text, +} from 'nixplay-ui-kit'; +import PropTypes from 'prop-types'; +import SafeArea from 'react-native-safe-area'; +import ViewOverflow from 'react-native-view-overflow'; +import Arrow from '~/images/general/arrow.svg'; +import i18n from '~/locale/i18n'; + +const isiOS = Platform.OS === 'ios'; + +const styles = { + button: { + }, + wrapper: { + backgroundColor: transparentize(color.black, 50), + alignContent: 'center', + justifyContent: 'flex-end', + flex: 1, + }, + buttonContainer: { + + height: 115, + alignItems: 'center', + justifyContent: 'space-between', + }, + buttonRound: { + height: 68, + width: 68, + paddingTop: 14, + paddingBottom: 0, + borderRadius: 34, + alignItems: 'center', + justifyContent: 'center', + }, + circleLine: { + flex: 0, + height: 62, + width: 62, + paddingTop: 14, + borderRadius: 31, + borderWidth: 1, + borderColor: color.mistBlue03, + }, + buttonContent: { + flex: 1, + alignItems: 'center', + justifyContent: 'space-between', + }, + container: { + backgroundColor: 'skyblue', + alignContent: 'center', + alignItems: 'center', + }, +}; + +export class HintsModal extends Component { + constructor(props) { + super(props); + this.state = { + safeAreaInsets: { + top: 0, left: 0, bottom: 0, right: 0, + }, + }; + SafeArea.getSafeAreaInsetsForRootView() + .then((result) => { + this.setState({ + safeAreaInsets: result.safeAreaInsets, + }); + }); + this.onSafeAreaInsetsForRootViewChange = this.onSafeAreaInsetsForRootViewChange.bind(this); + + if (!isiOS) { + this.setState({ + safeAreaInsets: { + top: 0, left: 0, bottom: 0, right: 0, + }, + }); + } + } + + componentDidMount() { + SafeArea.addEventListener('safeAreaInsetsForRootViewDidChange', this.onSafeAreaInsetsForRootViewChange); + } + + componentWillUnmount() { + // Remove event listener + SafeArea.removeEventListener('safeAreaInsetsForRootViewDidChange', this.onSafeAreaInsetsForRootViewChange); + } + + onSafeAreaInsetsForRootViewChange(result) { + // Called every time that safe area insets changed + this.setState({ + safeAreaInsets: result.safeAreaInsets, + }); + } + + getSafeMargin() { + return { + marginBottom: this.state.safeAreaInsets.bottom, + marginLeft: this.state.safeAreaInsets.left, + marginRight: this.state.safeAreaInsets.right, + }; + } + + render() { + const { + modalVisible, + } = this.props; + const Wrapper = isiOS ? View : ViewOverflow; + return ( + { + }} + > + + + + + {i18n.t('frames.addYourPhotovideoHints')} + + + + + + + + + + + + + + + ); + } +} +HintsModal.propTypes = { + modalVisible: PropTypes.bool.isRequired, + onPress: PropTypes.func, +}; + +HintsModal.defaultProps = { + onPress: () => {}, +}; diff --git a/ioneapps-maagapp-ee31119a522d/src/components/homeButtons.js b/ioneapps-maagapp-ee31119a522d/src/components/homeButtons.js new file mode 100644 index 0000000..65f5a60 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/src/components/homeButtons.js @@ -0,0 +1,76 @@ +import React from 'react'; +import _ from 'lodash'; +import PropTypes from 'prop-types'; +import { View } from 'react-native'; +import { IconButton } from '~comp'; +import { FRAME_POWER } from '~/store/frameConstants'; + +const styles = { + bottomBar: { + flexDirection: 'row', + justifyContent: 'center', + alignItems: 'flex-start', + width: '100%', + }, +}; + +const HomeButtonsComponent = (props) => ( + + { !props.currentFrame.online && + props.offButtons().map(({ + name, text, color, onPress, + }) => + ( onPress(props.currentFrame.id)} + />)) + } + { props.currentFrame.online && props.currentFrame.power === FRAME_POWER.OFF && + props.offButtons().map(({ + name, text, color, onPress, + }) => + ( onPress(props.currentFrame.id)} + disabled={!props.isConnected} + />)) + } + { props.currentFrame.online && props.currentFrame.power === FRAME_POWER.ON && + props.onButtons().map(({ + name, text, color, onPress, isActive, + }) => + ()) + } + +); + +HomeButtonsComponent.propTypes = { + currentFrame: PropTypes.object.isRequired, + onButtons: PropTypes.func.isRequired, + offButtons: PropTypes.func.isRequired, + isConnected: PropTypes.bool.isRequired, + style: PropTypes.object, + noPlaylistAssigned: PropTypes.bool, +}; + +HomeButtonsComponent.defaultProps = { + style: {}, + noPlaylistAssigned: false, +}; + +export const HomeButtons = React.memo(HomeButtonsComponent, _.isEqual); diff --git a/ioneapps-maagapp-ee31119a522d/src/components/homePlaylistPicker.js b/ioneapps-maagapp-ee31119a522d/src/components/homePlaylistPicker.js new file mode 100644 index 0000000..25683e1 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/src/components/homePlaylistPicker.js @@ -0,0 +1,425 @@ +import React, { forwardRef, useState, useRef } from 'react'; +import { + View, + TouchableOpacity, + Dimensions, + StyleSheet, + Platform, +} from 'react-native'; +import _ from 'lodash'; +import PropTypes from 'prop-types'; +import { + ActionSheet, + Text, + TableCellPlaylist, + RadioIcon, +} from 'nixplay-ui-kit'; +import Animated, { Easing } from 'react-native-reanimated'; +import { BlurView } from '@react-native-community/blur'; +import i18n from '~/locale/i18n'; +import CTAHeader from '~comp/CTAHeader'; +import PlaylistTypeLabel from '~comp/playlistTypeLabel'; +import RedDot from '~comp/redDot'; +import { color } from '~/styles/variables'; + +const { height } = Dimensions.get('window'); +const actionSheetMaxHeight = height * 0.67; +const isiOS = Platform.OS === 'ios'; + +const styles = StyleSheet.create({ + actionSheet: { + maxHeight: actionSheetMaxHeight, + }, + actionSheetTitle: { + textAlign: 'center', + paddingVertical: 24, + }, + actionSheetItem: { + paddingHorizontal: 16, + }, + noHorizontalPadding: { + paddingHorizontal: 0, + }, + plusPlanRadio: { + alignSelf: 'center', + marginLeft: 2, + marginRight: 12, + }, + playAllTextStyle: { + alignSelf: 'center', + fontSize: 17, + lineHeight: 22, + letterSpacing: 0.408, + color: '#466A78', + textAlign: 'left', + }, + selectFramesContainer: { + flexDirection: 'row', + justifyContent: 'center', + paddingHorizontal: 16, + }, + ctaHeader: { + margin: 0, + height: 60, + width: '80%', + marginVertical: 8, + backgroundColor: color.translucentBg, + flex: 1, + }, + innerCTAButton: { + marginLeft: 0, + }, + newPlaylistButton: { + left: 0, + }, + wideButton: { + width: Dimensions.get('window').width, + paddingHorizontal: 16, + }, + assignPlaylistButton: { + right: 0, + }, + floatingHeader: { + position: 'absolute', + top: (isiOS) ? 75 : 70, + alignSelf: 'center', + width: '100%', + }, + translucentBg: { + backgroundColor: (isiOS) ? color.translucentBg : 'rgba(250, 250, 250, 0.8)', + }, + hiddenHeader: { + width: 10, + }, + label: { + right: 5, + }, + dynamicLabel: { + left: 5, + }, + blur: { + position: 'absolute', + top: 0, + bottom: 0, + left: 0, + right: 0, + }, +}); + +// CUSTOM REACT HOOK: useFade +// This hook holds the scroll position (scrollY); see: https://reactjs.org/docs/hooks-reference.html#useref +// It also interpolates opacity to be between 0 and 1, and changes zIndex accordingly +// Use them in tandem with an Animated component +const useFade = () => { + // The range [0, 100] defines the length of scroll for the fade out animation to complete + const MIN_SCROLL = 0; + const MAX_SCROLL = 100; + + // scrollY will be attached to the value of the scrollbar in the ScrollView component + // min- and max- scrollRange variables are the animatable bounds of interpolation + // clamp determines the visible animatable properties (opacity, zIndex) + const scrollY = useRef(new Animated.Value(0)).current; + const minScrollRange = useRef(new Animated.Value(MIN_SCROLL)).current; + const maxScrollRange = useRef(new Animated.Value(MAX_SCROLL)).current; + const clamp = Animated.diffClamp(scrollY, Animated.max(1, scrollY), maxScrollRange); + + // the input range for all interpolations always range from min- and max- scrollRange + const inputRange = [minScrollRange, maxScrollRange]; + + // interpolate the clamp from the input range into values from 1 to 0 + // this lets opacity decrease as the user scrolls down, and vice versa + const opacityButtons = Animated.interpolate(clamp, { + inputRange, + outputRange: [1, 0], + extrapolateLeft: 'identity', + extrapolateRight: 'clamp', + }); + + // interpolate the clamp from the input range into values from 0 to 1 + // this lets the ScrollView quickly move forward as opacity decreases + const zIndexScrollView = Animated.interpolate(clamp, { + inputRange, + outputRange: [0, 1], + extrapolate: 'clamp', + }); + + // interpolate the clamp from the input range into values from 7 to 0 + // this lets the button headers slowly move backward as opacity decreases + const zIndexButtons = Animated.interpolate(clamp, { + inputRange, + outputRange: [7, 0], + extrapolate: 'clamp', + }); + + // call this when we need to make the header visible + // when offset is `undefined`, it snaps the values to the default with no animation + // otherwise, it animates the headers as specified in: https://www.wrike.com/open.htm?id=422801675 + const fadeInHeader = (offset, duration = 500) => { + if (offset !== undefined) { + Animated.timing(minScrollRange, { + toValue: new Animated.Value(offset), + duration, + easing: Easing.inOut(Easing.ease), + }).start(); + Animated.timing(maxScrollRange, { + toValue: Animated.add(offset, MAX_SCROLL), + duration, + easing: Easing.inOut(Easing.ease), + }).start(); + } else { + // this exact order is important + // do not change the order + minScrollRange.setValue(MIN_SCROLL); + maxScrollRange.setValue(MAX_SCROLL); + scrollY.setValue(0); + } + }; + + return [scrollY, opacityButtons, zIndexButtons, zIndexScrollView, fadeInHeader]; +}; + +const renderOneButton = ( + scrollY, + selectPlaylistActionSheet, + createPlaylistActionSheet, + openPlaylistAssignment, + resetAllPlaylistIdsWhenClosed, +) => ( + { + selectPlaylistActionSheet.close(); + createPlaylistActionSheet.openCreatePlaylistActionSheet(); + resetAllPlaylistIdsWhenClosed(); + }} + textSize={14} + /> +); + +const renderTwoButtons = ( + scrollY, + selectPlaylistActionSheet, + createPlaylistActionSheet, + openPlaylistAssignment, + resetAllPlaylistIdsWhenClosed, +) => ( + + { + selectPlaylistActionSheet.close(); + createPlaylistActionSheet.openCreatePlaylistActionSheet(); + resetAllPlaylistIdsWhenClosed(); + }} + textSize={14} + /> + + { + openPlaylistAssignment(true); + resetAllPlaylistIdsWhenClosed(); + }} + textSize={14} + iconHidden + innerButtonStyle={styles.innerCTAButton} + innerButtonProps={{ + numberOfLines: 1, + ellipsizeMode: 'tail', + }} + /> + +); + +const renderPlayAllPlaylistsOption = ( + scrollY, + thisActionSheet, + currentFrame, + changeCurrentPlaylist, + currentFramePlaylists, + allNewCreatedPlaylistIds, + resetAllPlaylistIdsWhenClosed, +) => ( + { + changeCurrentPlaylist(-1); + thisActionSheet.close(); + resetAllPlaylistIdsWhenClosed(); + }} + > + + + + {i18n.t('playlists.playAllPlaylistsBelow')} + + + +); + +const renderPlayOnePlaylistOption = ( + scrollY, + thisActionSheet, + currentFrame, + changeCurrentPlaylist, + currentFramePlaylists, + allNewCreatedPlaylistIds, + resetAllPlaylistIdsWhenClosed, +) => (playlist) => ( + { + changeCurrentPlaylist(playlist.id); + thisActionSheet.close(); + resetAllPlaylistIdsWhenClosed(); + }} + > + + {currentFramePlaylists.length > 1 && ( + + )} + allNewCreatedPlaylistIds.indexOf(playlist.id) > -1 && + + } + dynamicPlaylistLabel={() => _.isEqual(playlist.type, 'google') && + + } + style={{ + width: currentFramePlaylists.length > 1 ? + (Dimensions.get('window').width * 0.86) : (Dimensions.get('window').width - 38), + }} + /> + + +); + +const renderCancelButton = (OS, resetAllPlaylistIdsWhenClosed) => ( + + {i18n.t('common.cancel')} + +); + +const HomePlaylistPicker = forwardRef((props, ref) => { + const { + // Props + playlists, + currentFrame, + currentFramePlaylists, + allNewCreatedPlaylistIds, + // Methods + openPlaylistAssignment, + changeCurrentPlaylist, + resetAllPlaylistIdsWhenClosed, + // Refs + createPlaylistActionSheet, + } = props; + + const [scrollviewHeight, useScrollviewHeight] = useState(0); + const [thisActionSheet, setThisActionSheet] = useState({ close: () => {} }); + const [selectPlaylistActionSheet, setSelectPlaylistActionSheet] = useState({ close: () => {} }); + const [scrollY, opacityButtons, zIndexButtons, zIndexScrollView, fadeInHeader] = useFade(); + + const buttonDependencies = [ + scrollY, + selectPlaylistActionSheet, + createPlaylistActionSheet, + openPlaylistAssignment, + resetAllPlaylistIdsWhenClosed, + ]; + const radioOptionsDependencies = [ + scrollY, + thisActionSheet, + currentFrame, + changeCurrentPlaylist, + currentFramePlaylists, + allNewCreatedPlaylistIds, + resetAllPlaylistIdsWhenClosed, + ]; + const cancelDependencies = [ + Platform.OS, + resetAllPlaylistIdsWhenClosed, + ]; + + return ( + { + setThisActionSheet(actionSheet); + setSelectPlaylistActionSheet(actionSheet); + ref(actionSheet, fadeInHeader); + }} + > + + {i18n.t('frames.frameContents')} + { fadeInHeader(event.nativeEvent.contentOffset.y); }} + onScrollEndDrag={(event) => { fadeInHeader(event.nativeEvent.contentOffset.y); }} + scrollEventThrottle={16} + bounces={false} + decelerationRate="fast" + onLayout={(event) => { useScrollviewHeight(event.nativeEvent.layout.height); }} + showsVerticalScrollIndicator={false} + > + + { currentFramePlaylists.length > 1 && renderPlayAllPlaylistsOption(...radioOptionsDependencies) } + { currentFramePlaylists.map(renderPlayOnePlaylistOption(...radioOptionsDependencies)) } + + = actionSheetMaxHeight ? styles.translucentBg : {}), + { opacity: opacityButtons }, + { zIndex: zIndexButtons }, + ]} + > + { isiOS && ()} + { playlists.length <= 1 ? renderOneButton(...buttonDependencies) : renderTwoButtons(...buttonDependencies) } + + + { renderCancelButton(...cancelDependencies) } + + ); +}); + +HomePlaylistPicker.propTypes = { + playlists: PropTypes.array.isRequired, + currentFrame: PropTypes.object.isRequired, + currentFramePlaylists: PropTypes.array.isRequired, + openPlaylistAssignment: PropTypes.func.isRequired, + changeCurrentPlaylist: PropTypes.func.isRequired, + createPlaylistActionSheet: PropTypes.object, + allNewCreatedPlaylistIds: PropTypes.array, + resetAllPlaylistIdsWhenClosed: PropTypes.func, +}; + +HomePlaylistPicker.defaultProps = { + createPlaylistActionSheet: {}, + allNewCreatedPlaylistIds: [], + resetAllPlaylistIdsWhenClosed: () => {}, +}; + +export default HomePlaylistPicker; diff --git a/ioneapps-maagapp-ee31119a522d/src/components/iconButton.js b/ioneapps-maagapp-ee31119a522d/src/components/iconButton.js new file mode 100644 index 0000000..40b04c8 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/src/components/iconButton.js @@ -0,0 +1,72 @@ +import React from 'react'; +import { View } from 'react-native'; +import PropTypes from 'prop-types'; +import { Button, Text, color } from 'nixplay-ui-kit'; + +const styles = { + button: { + marginHorizontal: 8, + alignItems: 'center', + maxWidth: 85, + }, + homeButton: { + shadowOffset: { + width: 0, + height: 2, + }, + elevation: 1, + shadowColor: color.blue, + shadowOpacity: 0.3, + }, + homeButtonActive: { + borderWidth: 2, + borderColor: color.blue, + }, + text: { + textAlign: 'center', + marginTop: 5, + fontSize: 11, + fontWeight: '600', + }, +}; + +export const IconButton = (props) => ( + + {!props.disabled && + + } + {props.disabled && + + } + + {props.text} + + +); + +IconButton.propTypes = { + name: PropTypes.string.isRequired, + text: PropTypes.string, + buttonColor: PropTypes.string, + textColor: PropTypes.string, + color: PropTypes.string, + disabled: PropTypes.bool, + isActive: PropTypes.func, + innerTextProps: PropTypes.object, + innerTextStyle: PropTypes.object, +}; + +IconButton.defaultProps = { + text: '', + buttonColor: 'white', + textColor: 'mistBlue04', + color: 'mistBlue04', + disabled: false, + isActive: () => false, + innerTextProps: {}, + innerTextStyle: {}, +}; diff --git a/ioneapps-maagapp-ee31119a522d/src/components/index.js b/ioneapps-maagapp-ee31119a522d/src/components/index.js new file mode 100644 index 0000000..a264c5a --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/src/components/index.js @@ -0,0 +1,15 @@ +export { Text } from './text'; +export { TextInput } from './textInput'; +export { Button } from './button'; +export { Checkbox } from './checkbox'; +export { Picker } from './picker'; +export { MenuItem } from './menuItem'; +export { UserAvatar } from './userAvatar'; +export { InfiniteScroll } from './infiniteScroll'; +export { PaginationScroll } from './paginationScroll'; +export { CoverImage } from './Photos/coverImage'; +export { PickerOptions } from './Photos/pickerOptions'; +export { Loading } from './loading'; +export { IconButton } from './iconButton'; +export { HomeButtons } from './homeButtons'; +export { HintsModal } from './hintsModal'; diff --git a/ioneapps-maagapp-ee31119a522d/src/components/infiniteScroll.js b/ioneapps-maagapp-ee31119a522d/src/components/infiniteScroll.js new file mode 100644 index 0000000..6cdf5d0 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/src/components/infiniteScroll.js @@ -0,0 +1,121 @@ +import React, { PureComponent } from 'react'; +import { View, StyleSheet, Platform, ActivityIndicator } from 'react-native'; +import DraggableFlatList from 'react-native-draggable-flatlist'; +import { Text } from 'nixplay-ui-kit'; +import PropTypes from 'prop-types'; +import { checkInternetConnection } from 'react-native-offline'; +import i18n from '~/locale/i18n'; + +const styles = StyleSheet.create({ + loadingContainer: { + alignItems: 'center', + justifyContent: 'center', + }, + flatListFix: { + borderWidth: 1, + borderColor: 'transparent', + }, +}); + +const isAndroid = Platform.OS !== 'ios'; + +export class InfiniteScroll extends PureComponent { + static propTypes = { + data: PropTypes.array.isRequired, + getData: PropTypes.func.isRequired, + loading: PropTypes.bool.isRequired, + hasMore: PropTypes.bool, + numPerPage: PropTypes.number, + flatListRef: PropTypes.func, + style: PropTypes.any, + } + + static defaultProps = { + hasMore: true, + numPerPage: 30, + flatListRef: () => {}, + style: null, + } + + constructor(props) { + super(props); + + this.state = { + offset: 0, + refreshing: false, + }; + } + + componentDidMount() { + this.requestData(); + } + + componentWillReceiveProps(nextProps) { + if ((this.props.loading && !nextProps.loading)) { + this.setState({ refreshing: false }); + } + } + + requestData = () => { + this.props.getData( + this.state.offset, // start index (offset) + this.props.numPerPage, // number per page + ); + } + + refreshData = () => { + checkInternetConnection().then(isConnected => { + if (isConnected) { + if (this.state.refreshing) return; + this.setState({ + offset: 0, + refreshing: true, + }, () => { + this.requestData(); + }); + } else { + this.setState({ refreshing: false }); + } + }); + } + + loadMoreData = () => { + if (!this.props.hasMore) return; + this.setState({ + offset: this.props.data.length, + }, () => { + this.requestData(); + }); + } + + render() { + return ( + ( + this.props.loading && this.state.offset > 0 && this.props.hasMore ? ( + + + {i18n.t('common.loading')} + + ) : ( + + ) + )} + // Weird fix for the onReachEnd Sometimes doesn't work on android devices. + style={[(isAndroid && styles.flatListFix)]} + /> + ); + } +} diff --git a/ioneapps-maagapp-ee31119a522d/src/components/loading.js b/ioneapps-maagapp-ee31119a522d/src/components/loading.js new file mode 100644 index 0000000..f1329a4 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/src/components/loading.js @@ -0,0 +1,38 @@ +import React from 'react'; +import { View, ActivityIndicator, StyleSheet } from 'react-native'; +import PropTypes from 'prop-types'; +import { color } from '~/styles/variables'; + +const styles = StyleSheet.create({ + normal: { + flex: 1, + padding: '50%', + justifyContent: 'center', + alignContent: 'center', + alignItems: 'center', + }, + overlay: { + position: 'absolute', + top: 0, + bottom: 0, + left: 0, + right: 0, + zIndex: 100, + padding: 0, + backgroundColor: 'rgba(0,0,0,0.2)', + }, +}); + +export const Loading = ({ overlay }) => ( + + + +); + +Loading.propTypes = { + overlay: PropTypes.bool, +}; + +Loading.defaultProps = { + overlay: false, +}; diff --git a/ioneapps-maagapp-ee31119a522d/src/components/menuItem.js b/ioneapps-maagapp-ee31119a522d/src/components/menuItem.js new file mode 100644 index 0000000..5516942 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/src/components/menuItem.js @@ -0,0 +1,47 @@ +import React from 'react'; +import PropTypes from 'prop-types'; +import { TouchableHighlight, View, Text, StyleSheet } from 'react-native'; +import Ionicons from 'react-native-vector-icons/Ionicons'; + +import { color, fontSizes } from '~/styles/variables'; + +export const styles = StyleSheet.create({ + li: { + paddingTop: 10, + paddingLeft: 15, + paddingRight: 15, + paddingBottom: 10, + }, + item: { + flexDirection: 'row', + justifyContent: 'space-between', + }, + liText: { + fontSize: fontSizes.large, + color: color.white, + }, +}); + +export const MenuItem = (props) => { + const { children, onClick } = props; + return ( + + + { children } + + + + ); +}; + +MenuItem.propTypes = { + children: PropTypes.string.isRequired, + onClick: PropTypes.func.isRequired, +}; diff --git a/ioneapps-maagapp-ee31119a522d/src/components/navBarProgressView.js b/ioneapps-maagapp-ee31119a522d/src/components/navBarProgressView.js new file mode 100644 index 0000000..b747263 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/src/components/navBarProgressView.js @@ -0,0 +1,157 @@ +/* +Deprecated +but lot of useful implementation here +animation icon, progress view +*/ +import React, { Component } from 'react'; +import { Image, TouchableOpacity, StyleSheet } from 'react-native'; +// import { NixplayIcon as Icon } from 'nixplay-ui-kit'; +import RNNixplayCore from 'react-native-nixplay-core'; +// import * as Animatable from 'react-native-animatable'; +import PropTypes from 'prop-types'; +// import * as Progress from 'react-native-progress'; +// import { ToasterService } from 'nixplay-ui-kit'; +import icon from '~/images/home/icon.gif'; +import { deprecate } from 'util'; +// import i18n from '~/locale/i18n'; + +export const styles = StyleSheet.create({ + headerViewParent: { + flex: 1, + flexDirection: 'row', + justifyContent: 'center', + alignItems: 'center', + width: 30, + height: 30, + }, + headerViewChild: { + flex: 1, + position: 'absolute', + flexDirection: 'column', + justifyContent: 'center', + alignItems: 'center', + alignSelf: 'center', + }, +}); +@deprecate +export default class NavBarProgressView extends Component { + static propTypes = { + onPress: PropTypes.func, + } + static defaultProps = { + onPress: () => {}, + } + constructor(props) { + super(props); + this.state = { + showUploadIndicator: false, + // indeterminate: false, + // progress: 0, + }; + this.nixplayCoreCompletedListener = this.nixplayCoreCompletedListener.bind(this); + this.nixplayCoreProgressListener = this.nixplayCoreProgressListener.bind(this); + // this.nixplayCoreErrorListener = this.nixplayCoreErrorListener.bind(this); + // this.bounce = this.bounce.bind(this); + } + + componentDidMount() { + RNNixplayCore.addListener('progress', this.nixplayCoreProgressListener); + RNNixplayCore.addListener('completed', this.nixplayCoreCompletedListener); + // RNNixplayCore.addListener('error', this.nixplayCoreErrorListener); + // this.bounce(); + } + + componentWillUnmount() { + RNNixplayCore.removeListener('progress', this.nixplayCoreProgressListener); + RNNixplayCore.removeListener('completed', this.nixplayCoreCompletedListener); + // RNNixplayCore.removeListener('error', this.nixplayCoreErrorListener); + } + + nixplayCoreCompletedListener = (data) => { + if (data.event === RNNixplayCore.didFinishUploading) { + this.setState({ showUploadIndicator: false }); + // ToasterService.toast({ text: i18n.t('uploadMonitor.elapsed') }); + } else if (data.event === RNNixplayCore.didFinishUploadingWithError) { + this.setState({ showUploadIndicator: false }); + } + } + nixplayCoreProgressListener = () => { + if (!this.state.showUploadIndicator) { + this.setState({ showUploadIndicator: true }); + // ToasterService.toast({ + // text: i18n.t('contents.uploadBegin'), + // }); + } + } + // nixplayCoreProgressListener = (data) => { + // if (data.event === RNNixplayCore.uploadingWithBytesSent) { + // this.setState((state) => { + // const itemProgress = (data.bytesSent / data.totalBytes); + // const progress = ((itemProgress + data.currentIndex) / data.total); + // if (!state.showUploadIndicator) { + // return { + // showUploadIndicator: true, + // progress, + // }; + // } else if (progress === 0) { + // return { indeterminate: true }; + // } + // return { progress }; + // }); + // } + // } + // nixplayCoreErrorListener = (data) => { + // console.log('nixplayCoreErrorListener', data); + // } + + render() { + return ( + { + if (this.state.showUploadIndicator) { + this.props.onPress(); + } + }} + > + {/* { this.state.showUploadIndicator && + + } */} + { + this.state.showUploadIndicator && + + } + {/* { + this.state.showUploadIndicator && + + + + } */} + + ); + } +} + diff --git a/ioneapps-maagapp-ee31119a522d/src/components/offlineEmpty.js b/ioneapps-maagapp-ee31119a522d/src/components/offlineEmpty.js new file mode 100644 index 0000000..6c869be --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/src/components/offlineEmpty.js @@ -0,0 +1,101 @@ +import React, { Component } from 'react'; +import { View, StyleSheet } from 'react-native'; +import { ContentGridEmpty, Button } from 'nixplay-ui-kit'; +import { connect } from 'react-redux'; +import PropTypes from 'prop-types'; +import _ from 'lodash'; +import { checkInternetConnection, offlineActionTypes } from 'react-native-offline'; +import i18n from '~/locale/i18n'; +import { SHOW_TOAST_ERROR } from '~/store/actionTypes'; + +const styles = StyleSheet.create({ + container: { + marginHorizontal: 20, + flex: 1, + alignItems: 'center', + justifyContent: 'space-between', + paddingBottom: 64, + }, +}); + +class OfflineEmpty extends Component { + static propTypes = { + onPress: PropTypes.func, + title: PropTypes.string, + description: PropTypes.string, + onConnectionChanged: PropTypes.func.isRequired, + toastError: PropTypes.func.isRequired, + }; + + static defaultProps = { + onPress: null, + title: i18n.t('common.noNetwork'), + description: i18n.t('common.offlineRetryAgainDescription', { contentsType: i18n.t('common.contents') }), + }; + + componentWillMount() { + this.debounceCheckInternetConnection = _.debounce(this.checkConnection, 1000); + } + + componentWillUnmount() { + this.debounceCheckInternetConnection.cancel(); + } + + /** + * James Kong 20190128 + * I want to actively check the connectivity, debounce to avoid overload + */ + checkConnection = () => checkInternetConnection() + .then(isConnected => { + if (isConnected) { + this.props.onConnectionChanged(isConnected); + this.props.onPress(); + } else { + this.props.toastError({ text: i18n.t('common.noInternetConnection') }); + } + }); + + render() { + return ( + + + + + {this.props.title} + + + {this.props.description} + + + {typeof this.props.onPress === 'function' && + + } + + + + ); + } +} + +const mapActionsToProps = (dispatch) => ({ + onConnectionChanged(isConnected) { + dispatch({ + type: offlineActionTypes.CONNECTION_CHANGE, + payload: isConnected, + }); + }, + toastError(payload) { + dispatch({ type: SHOW_TOAST_ERROR, payload }); + }, +}); + +export default connect(null, mapActionsToProps)(OfflineEmpty); diff --git a/ioneapps-maagapp-ee31119a522d/src/components/offlineNotificationBar.js b/ioneapps-maagapp-ee31119a522d/src/components/offlineNotificationBar.js new file mode 100644 index 0000000..62017d0 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/src/components/offlineNotificationBar.js @@ -0,0 +1,44 @@ +import React, { Component } from 'react'; +import { connect } from 'react-redux'; +import PropTypes from 'prop-types'; +import { + NotificationBar, + transparentize, + color, +} from 'nixplay-ui-kit'; +import { getBottomSpace } from 'react-native-iphone-x-helper'; +import i18n from '~/locale/i18n'; + + +class OfflineNotificationBar extends Component { + static propTypes = { + isConnected: PropTypes.bool.isRequired, + stack: PropTypes.bool, + } + + static defaultProps = { + stack: false, + } + + render() { + return !this.props.isConnected ? ( + + + {i18n.t('common.noInternetConnection')} + + + ) : null; + } +} + + +const mapStateToProps = (state) => ({ + isConnected: state.network.isConnected, +}); + +export default connect(mapStateToProps, null)(OfflineNotificationBar); diff --git a/ioneapps-maagapp-ee31119a522d/src/components/paginationScroll.js b/ioneapps-maagapp-ee31119a522d/src/components/paginationScroll.js new file mode 100644 index 0000000..4ba4ea1 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/src/components/paginationScroll.js @@ -0,0 +1,138 @@ +import React, { Component } from 'react'; +import _ from 'lodash'; +import { FlatList, Platform } from 'react-native'; +import PropTypes from 'prop-types'; +import { checkInternetConnection } from 'react-native-offline'; + +const isIOS = Platform.OS === 'ios'; + +export class PaginationScroll extends Component { + static propTypes = { + asyncData: PropTypes.bool, + data: PropTypes.array.isRequired, + getData: PropTypes.func.isRequired, + loading: PropTypes.bool.isRequired, + numPerPage: PropTypes.number, + onRefresh: PropTypes.func, + extraData: PropTypes.any, + style: PropTypes.any, + hasMore: PropTypes.bool, + } + + static defaultProps = { + asyncData: false, + numPerPage: 20, + onRefresh: null, + extraData: {}, + style: {}, + hasMore: false, + } + + constructor(props) { + super(props); + + this.state = { + items: [], + page: 1, + numPerPage: props.numPerPage, + refreshing: false, + hasMore: true, + }; + + this.generateRenderData = this.generateRenderData.bind(this); + this.refreshData = this.refreshData.bind(this); + this.loadMoreData = this.loadMoreData.bind(this); + } + + componentDidMount() { + this.props.getData(); + } + + componentWillReceiveProps(nextProps) { + if (!nextProps.loading && (_.isEqual(this.props.getData.name, nextProps.getData.name))) { + if (this.props.asyncData) { + this.setState({ + refreshing: false, + }); + } else { + this.generateRenderData(nextProps); + } + } + } + + shouldComponentUpdate(nextProps) { + if (_.isEqual(this.props.data, nextProps.data) && + _.isEqual(this.props.extraData, nextProps.extraData)) { + return false; + } + return true; + } + + generateRenderData(props = this.props) { + const end = this.state.page * this.state.numPerPage; + this.setState({ + refreshing: false, + items: props.data.slice(0, end), + hasMore: end < props.data.length, + }); + } + + refreshData() { + checkInternetConnection().then(isConnected => { + if (isConnected) { + if (this.state.refreshing) return; + this.setState({ + page: 1, + refreshing: true, + }, () => { + if (_.isFunction(this.props.onRefresh)) { + this.props.onRefresh(); + } else { + this.props.getData(this.state.page, this.state.numPerPage); + } + }); + } else { + this.setState({ refreshing: false }); + } + }); + } + + loadMoreData() { + if ((this.props.asyncData && !this.props.hasMore && !this.state.refreshing) || + (!this.props.asyncData && !this.state.hasMore)) return; + const nextPage = this.state.page + 1; + if (this.props.asyncData) { + this.props.getData(nextPage, this.state.numPerPage, ({ content }) => { + this.setState({ + page: nextPage, + refreshing: false, + items: [...this.state.items, ...content], + }); + }); + } else { + this.setState({ + page: nextPage, + }, () => { + this.generateRenderData(); + }); + } + } + + render() { + return ( + + ); + } +} diff --git a/ioneapps-maagapp-ee31119a522d/src/components/picker.js b/ioneapps-maagapp-ee31119a522d/src/components/picker.js new file mode 100644 index 0000000..7426024 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/src/components/picker.js @@ -0,0 +1,235 @@ +import React, { Component } from 'react'; +import { + StyleSheet, + View, + TouchableOpacity, + Modal, + FlatList, +} from 'react-native'; +import PropTypes from 'prop-types'; +import { color, fontSizes } from '~/styles/variables'; +import { NixplayIcon } from 'nixplay-ui-kit'; +import Ionicons from 'react-native-vector-icons/Ionicons'; +import { ifIphoneX } from 'react-native-iphone-x-helper'; +import i18n from '~/locale/i18n'; +import { Text } from './text'; + +const styles = StyleSheet.create({ + inputContainer: { + marginBottom: 10, + }, + button: { + padding: 15, + paddingTop: 10, + paddingBottom: 10, + borderWidth: 1, + borderColor: color.grayLighter, + borderRadius: 4, + backgroundColor: color.white, + flexDirection: 'row', + justifyContent: 'space-between', + alignItems: 'center', + }, + inputError: { + paddingLeft: 15, + paddingRight: 15, + }, + modal: { + flex: 1, + ...ifIphoneX({ + paddingTop: 44, + }, {}), + }, + selectContainer: { + ...ifIphoneX({ + marginBottom: 34, + }, {}), + }, + modalHeader: { + flexDirection: 'row', + padding: 15, + borderBottomWidth: 1, + borderColor: color.grayLighter, + alignItems: 'center', + marginTop: 15, + }, + modalBackButton: { + color: color.blue, + }, + modalHeaderText: { + flex: 1, + textAlign: 'center', + // paddingLeft: 15, + // paddingRight: 20, + }, + selectOption: { + padding: 12, + paddingLeft: 16, + paddingRight: 16, + borderBottomWidth: 1, + borderColor: color.grayLightest, + }, + selectOptionSelected: { + flexDirection: 'row', + justifyContent: 'space-between', + alignItems: 'center', + backgroundColor: color.blueLight, + }, +}); + + +class Picker extends Component { + static propTypes = { + value: PropTypes.any.isRequired, + options: PropTypes.any.isRequired, + onChange: PropTypes.func, + fontWeight: PropTypes.string, + fontStyle: PropTypes.string, + size: PropTypes.string, + style: PropTypes.any, + placeholder: PropTypes.string, + labelKey: PropTypes.string, + valueKey: PropTypes.string, + meta: PropTypes.object, + disabled: PropTypes.bool, + } + + static defaultProps = { + onChange: () => {}, + fontWeight: 'Normal', + fontStyle: 'normal', + size: 'base', + style: {}, + placeholder: '', + labelKey: 'label', + valueKey: 'value', + meta: {}, + disabled: false, + } + + constructor(props) { + super(props); + this.openModal = this.openModal.bind(this); + this.closeModal = this.closeModal.bind(this); + } + + state = { + modalVisible: false, + } + + openModal() { + this.setState({ modalVisible: true }); + } + + closeModal() { + this.setState({ modalVisible: false }); + } + + render() { + const { + fontWeight, fontStyle, size, placeholder, options, value, onChange, meta, + } = this.props; + const selected = options.find((o) => o[this.props.valueKey] === value); + const opacity = selected ? 1.0 : 0.4; + const fontColor = selected ? 'mistBlue05' : 'gray'; + return ( + + this.openModal()} + > + -1 && { height: 19 }), + }]} + fontWeight={fontWeight} + fontStyle={fontStyle} + fontSize={size} + color={fontColor} + numberOfLines={1} + ellipsizeMode="tail" + > + {selected ? selected[this.props.labelKey] : placeholder} + + + + + {meta.error} + + this.closeModal()} + > + + + this.closeModal()} + /> + + {placeholder} + + + option[this.props.valueKey]} + renderItem={({ item }) => { + const l = item[this.props.labelKey]; + const v = item[this.props.valueKey]; + return ( + { + onChange(v); + this.closeModal(); + }} + > + {l} + + {v === value && } + + ); + }} + /> + + + + ); + } +} + +export { Picker }; diff --git a/ioneapps-maagapp-ee31119a522d/src/components/playlistTypeLabel.js b/ioneapps-maagapp-ee31119a522d/src/components/playlistTypeLabel.js new file mode 100644 index 0000000..3c41181 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/src/components/playlistTypeLabel.js @@ -0,0 +1,121 @@ +import React from 'react'; +import PropTypes from 'prop-types'; +import { Text, StyleSheet, View } from 'react-native'; +import { color } from '~/styles/variables'; + +import i18n from '~/locale/i18n'; + +const styles = StyleSheet.create({ + container: { + borderRadius: 4, + marginTop: 2, + paddingHorizontal: 8, + paddingVertical: 2, + }, + containerStandard: { + backgroundColor: color.gray, + }, + containerShared: { + backgroundColor: color.greenLabel, + }, + containerFull: { + backgroundColor: color.yellow, + }, + containerGoogle: { + backgroundColor: color.blue, + }, + containerDropbox: { + backgroundColor: color.blue, + }, + containerNew: { + backgroundColor: color.greenLabel, + }, + text: { + color: 'white', + fontSize: 10, + }, +}); + +const types = { + standard: { + translationDir: 'playlists.standard', + styles: { + container: styles.containerStandard, + }, + }, + shared: { + translationDir: 'playlists.shared', + styles: { + container: styles.containerShared, + }, + }, + sharedByMe: { + translationDir: 'playlists.sharedByMe', + styles: { + container: styles.containerShared, + }, + }, + full: { + translationDir: 'playlists.playlistFull', + styles: { + container: styles.containerFull, + }, + }, + google: { + translationDir: 'common.from', + translationParam: { source: 'Google Photos' }, + styles: { + container: styles.containerGoogle, + }, + }, + googlePhotos: { + translationDir: 'common.googlePhotos', + styles: { + container: styles.containerGoogle, + }, + }, + googlePhotosAssign: { + translationDir: 'common.googlePhotos', + styles: { + container: styles.containerGoogle, + }, + }, + dropbox: { + translationDir: 'common.from', + translationParam: { source: 'Dropbox' }, + styles: { + container: styles.containerDropbox, + }, + }, + new: { + translationDir: 'common.new', + styles: { + container: styles.containerNew, + }, + }, +}; +const playlistTypeLabel = (props) => { + const type = (props.type && types[props.type]) || types.standard; + return ( + + + {i18n.t(type.translationDir, type.translationParam)} + + + ); +}; + + +playlistTypeLabel.propTypes = { + type: PropTypes.string, + containerStyle: PropTypes.object, + textStyle: PropTypes.object, +}; + +playlistTypeLabel.defaultProps = { + type: 'standard', + containerStyle: {}, + textStyle: {}, +}; + +export default playlistTypeLabel; diff --git a/ioneapps-maagapp-ee31119a522d/src/components/redDot.js b/ioneapps-maagapp-ee31119a522d/src/components/redDot.js new file mode 100644 index 0000000..1310223 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/src/components/redDot.js @@ -0,0 +1,57 @@ +import React from 'react'; +import { + View, + StyleSheet, + Platform, +} from 'react-native'; +import { zIndexRedDot } from '~/store/constants'; +import { color } from 'nixplay-ui-kit'; +import PropTypes from 'prop-types'; + +const styles = StyleSheet.create({ + dot: { + backgroundColor: color.red, + width: 10, + height: 10, + borderRadius: 5, + position: 'absolute', + zIndex: zIndexRedDot, + elevation: (Platform.OS === 'android') ? zIndexRedDot : 0, + }, + topLeft: { + top: 0, + right: 0, + }, + topRight: { + top: 0, + right: 0, + }, + bottomLeft: { + bottom: 0, + left: 0, + }, + bottomRight: { + bottom: 0, + right: 0, + }, +}); + +const redDot = ({ + scale, margin, position, style, +}) => (); + +redDot.propTypes = { + scale: PropTypes.number, + margin: PropTypes.number, + position: PropTypes.oneOf(['topLeft', 'topRight', 'bottomLeft', 'bottomRight']), + style: PropTypes.object, +}; + +redDot.defaultProps = { + scale: 1, + margin: 0, + position: 'topRight', + style: {}, +}; + +export default redDot; diff --git a/ioneapps-maagapp-ee31119a522d/src/components/reduxForm/form.js b/ioneapps-maagapp-ee31119a522d/src/components/reduxForm/form.js new file mode 100644 index 0000000..9ab176b --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/src/components/reduxForm/form.js @@ -0,0 +1,9 @@ +import React from 'react'; +import { reduxForm } from 'redux-form'; +import { View } from 'react-native'; + +const Form = (props) => ( + +); + +export default reduxForm()(Form); diff --git a/ioneapps-maagapp-ee31119a522d/src/components/reduxForm/index.js b/ioneapps-maagapp-ee31119a522d/src/components/reduxForm/index.js new file mode 100644 index 0000000..7e63972 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/src/components/reduxForm/index.js @@ -0,0 +1,60 @@ +import React from 'react'; +import { Field } from 'redux-form'; +import PropTypes from 'prop-types'; + +import Form from './form'; + +import { + pickerRenderer, + picker2Renderer, + textInputRenderer, + textInput2Renderer, + switchRenderer, + sliderRenderer, +} from './renderer'; + + +const fieldCreator = (renderComponent) => { + const FieldWrapper = React.forwardRef((props, ref) => { + const { + name, validate, onChange, defaultValue, useDefaultValue, ...otherProps + } = props; + return ( + + ); + }); + + FieldWrapper.propTypes = { + name: PropTypes.string.isRequired, + validate: PropTypes.func, + onChange: PropTypes.func, + defaultValue: PropTypes.string, + useDefaultValue: PropTypes.bool, + }; + + FieldWrapper.defaultProps = { + validate: () => { }, + onChange: () => { }, + defaultValue: '', + useDefaultValue: false, + }; + + return FieldWrapper; +}; + +export { Form }; +export const Picker = fieldCreator(pickerRenderer); +export const Picker2 = fieldCreator(picker2Renderer); +export const TextInput = fieldCreator(textInputRenderer); +export const TextInput2 = fieldCreator(textInput2Renderer); +export const Switch = fieldCreator(switchRenderer); +export const Slider = fieldCreator(sliderRenderer); diff --git a/ioneapps-maagapp-ee31119a522d/src/components/reduxForm/renderer.js b/ioneapps-maagapp-ee31119a522d/src/components/reduxForm/renderer.js new file mode 100644 index 0000000..7fd3176 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/src/components/reduxForm/renderer.js @@ -0,0 +1,171 @@ +import React from 'react'; +import { + Picker, + TextInput, +} from '~comp'; +import { + TextInput as TextInput2, + Picker as Picker2, + Switch, + Slider, +} from 'nixplay-ui-kit'; +import PropTypes from 'prop-types'; + + +export const pickerRenderer = (props) => { + const { + input: { value, onChange }, + meta, + ...otherProps + } = props; + return ( + + ); +}; + +pickerRenderer.propTypes = { + input: PropTypes.object.isRequired, + meta: PropTypes.object.isRequired, +}; + + +export const picker2Renderer = (props) => { + const { + input: { value, onChange }, + meta, + refName, + defaultValue, + useDefaultValue, + ...otherProps + } = props; + const val = (() => { + if (useDefaultValue && defaultValue) { + return defaultValue; + } + return value; + })(); + return ( + + ); +}; + +picker2Renderer.propTypes = { + input: PropTypes.object.isRequired, + meta: PropTypes.object.isRequired, + refName: PropTypes.func, + defaultValue: PropTypes.string, + useDefaultValue: PropTypes.bool, + setPickerNumberOfLines: PropTypes.number, +}; + +picker2Renderer.defaultProps = { + refName: () => {}, + defaultValue: '', + useDefaultValue: false, + setPickerNumberOfLines: 1, +}; + + +export const textInputRenderer = (props) => { + const { + input: { value, onChange, ...otherInputProps }, + meta, + ...otherProps + } = props; + return ( + + ); +}; + +textInputRenderer.propTypes = { + input: PropTypes.object.isRequired, + meta: PropTypes.object.isRequired, +}; + + +export const textInput2Renderer = (props) => { + const { + input: { value, onChange, ...otherInputProps }, + meta, + ...otherProps + } = props; + return ( + + ); +}; + +textInput2Renderer.propTypes = { + input: PropTypes.object.isRequired, + meta: PropTypes.object.isRequired, +}; + + +export const switchRenderer = (props) => { + const { + input: { value, onChange, ...otherInputProps }, + meta, + ...otherProps + } = props; + return ( + + ); +}; + +switchRenderer.propTypes = { + input: PropTypes.object.isRequired, + meta: PropTypes.object.isRequired, +}; + + +export const sliderRenderer = (props) => { + const { + input: { value, onChange, ...otherInputProps }, + meta, + ...otherProps + } = props; + return ( + + ); +}; + +sliderRenderer.propTypes = { + input: PropTypes.object.isRequired, + meta: PropTypes.object.isRequired, +}; + diff --git a/ioneapps-maagapp-ee31119a522d/src/components/sharedPlaylistOnboardingModal.js b/ioneapps-maagapp-ee31119a522d/src/components/sharedPlaylistOnboardingModal.js new file mode 100644 index 0000000..a2e76dc --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/src/components/sharedPlaylistOnboardingModal.js @@ -0,0 +1,173 @@ +import React from 'react'; +import { + View, + Modal, + Dimensions, + Image, + TouchableOpacity, + StyleSheet, +} from 'react-native'; +import { + Text, + NixplayIcon, + Button, +} from 'nixplay-ui-kit'; +import PropTypes from 'prop-types'; +import i18n from '~/locale/i18n'; +import { basicColor, color } from '~/styles/variables'; + +const { width, height } = Dimensions.get('window'); +const bigText = Math.floor(width * 0.047); +const smallText = Math.floor(width * 0.036); +const lineHeight = Math.floor(width * 0.038); +const innerViewHeight = (height / width) < 2 ? 0.75 : 0.58; + +const styles = StyleSheet.create({ + styles: { + flex: 1, + flexDirection: 'column', + margin: 0, + justifyContent: 'center', + alignItems: 'center', + backgroundColor: 'rgba(100,100,100, 0.5)', + }, + innerView: { + width: width * 0.8, + height: height * innerViewHeight, + borderRadius: 15, + overflow: 'hidden', + }, + innerViewBanner: { + flex: 5, + borderTopLeftRadius: 15, + borderTopRightRadius: 15, + overflow: 'hidden', + zIndex: 1, + }, + closeIcon: { + position: 'absolute', + right: 15, + top: 15, + zIndex: 2, + }, + bannerImage: { + width: '100%', + height: '100%', + overflow: 'hidden', + }, + innerViewBody: { + flex: 3, + backgroundColor: basicColor.white, + flexDirection: 'column', + justifyContent: 'space-around', + alignItems: 'center', + paddingVertical: 10, + paddingHorizontal: 20, + letterSpacing: 0, + }, + titleText: { + fontWeight: 'bold', + fontSize: bigText, + textAlign: 'center', + }, + bodyText: { + fontSize: smallText, + textAlign: 'center', + lineHeight, + }, + innerViewButtons: { + flex: 2, + backgroundColor: basicColor.white, + borderBottomLeftRadius: 15, + borderBottomRightRadius: 15, + flexDirection: 'column', + alignItems: 'center', + justifyContent: 'space-around', + }, + buttonOkay: { + height: '35%', + width: '75%', + }, + buttonOkayText: { + fontSize: smallText, + fontWeight: 'bold', + color: basicColor.white, + }, + buttonLater: { + height: '40%', + width: '75%', + backgroundColor: basicColor.white, + borderWidth: 0, + borderColor: basicColor.white, + marginBottom: 10, + }, + buttonLaterText: { + fontSize: smallText, + color: color.blue, + }, +}); + +const SharedPlaylistOnboardingModal = (props) => { + const { + image, + visible, + onDiscover, + onLater, + } = props; + return ( + {}} + transparent + visible={visible} + > + + + + + + + + + + + + {i18n.t('playlists.introducingSharedPlaylistTitle')} + + + + {i18n.t('playlists.introducingSharedPlaylistBody')} + + + + + + + + + + ); +}; + +SharedPlaylistOnboardingModal.propTypes = { + image: PropTypes.any.isRequired, + visible: PropTypes.bool.isRequired, + onDiscover: PropTypes.func.isRequired, + onLater: PropTypes.func.isRequired, +}; + +export default SharedPlaylistOnboardingModal; diff --git a/ioneapps-maagapp-ee31119a522d/src/components/text.js b/ioneapps-maagapp-ee31119a522d/src/components/text.js new file mode 100644 index 0000000..1532437 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/src/components/text.js @@ -0,0 +1,41 @@ +import React from 'react'; +import { Text as ReactText } from 'react-native'; +import PropTypes from 'prop-types'; +import { fontMaker } from '~/styles/fonts'; +import { color, fontSizes } from '~/styles/variables'; + +export const Text = (props) => { + const { + fontWeight, fontStyle, fontSize, ...other + } = props; + const fontProp = { + weight: props.fontWeight, + style: props.fontStyle, + }; + return ( + + ); +}; + +Text.propTypes = { + fontWeight: PropTypes.string, + fontStyle: PropTypes.string, + fontSize: PropTypes.string, + color: PropTypes.string, + style: PropTypes.any, +}; + +Text.defaultProps = { + fontWeight: 'Normal', + fontStyle: 'normal', + fontSize: 'base', + color: 'black', + style: {}, +}; diff --git a/ioneapps-maagapp-ee31119a522d/src/components/textInput.js b/ioneapps-maagapp-ee31119a522d/src/components/textInput.js new file mode 100644 index 0000000..de83bf6 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/src/components/textInput.js @@ -0,0 +1,144 @@ +import React, { Component } from 'react'; +import { + StyleSheet, + View, + TextInput as ReactTextInput, +} from 'react-native'; +import { NixplayIcon, color } from 'nixplay-ui-kit'; +import PropTypes from 'prop-types'; +import { fontMaker } from '~/styles/fonts'; +import { fontSizes } from '~/styles/variables'; +import { Text } from './text'; + + +const styles = StyleSheet.create({ + container: { + marginBottom: 10, + }, + inputContainer: { + flexDirection: 'row', + alignItems: 'center', + }, + input: { + flex: 1, + padding: 15, + paddingTop: 10, + paddingBottom: 10, + borderWidth: 1, + borderColor: color.borderMistBlue, + borderRadius: 4, + backgroundColor: color.white, + color: color.mistBlue05, + }, + inputError: { + paddingLeft: 15, + paddingRight: 15, + }, + secureTextToggle: { + position: 'absolute', + right: 10, + color: color.mistBlue04, + }, +}); + +class TextInput extends Component { + static propTypes = { + fontWeight: PropTypes.string, + fontStyle: PropTypes.string, + size: PropTypes.string, + style: PropTypes.any, + hideError: PropTypes.bool, + secureTextEntry: PropTypes.bool, + searchBoxEntry: PropTypes.bool, + meta: PropTypes.object, + defaultText: PropTypes.string, + } + + static defaultProps = { + fontWeight: 'Normal', + fontStyle: 'normal', + size: 'base', + style: {}, + hideError: false, + secureTextEntry: false, + searchBoxEntry: false, + meta: {}, + defaultText: '' + } + + constructor(props) { + super(props); + this.state = { + secureText: this.props.secureTextEntry, + }; + this.toggleSecureText = this.toggleSecureText.bind(this); + } + + toggleSecureText() { + this.setState({ secureText: !this.state.secureText }); + } + + render() { + const { + fontWeight, fontStyle, size, style, meta, defaultText, + ...other + } = this.props; + const fontProp = { + weight: fontWeight, + style: fontStyle, + }; + const font = StyleSheet.create({ + font: fontMaker(fontProp), + }); + // const formStates = ['active', 'autofilled', 'asyncValidating', 'dirty', 'invalid', + // 'pristine', 'submitting', 'touched', 'valid', 'visited', 'error']; + return ( + + + + {this.props.secureTextEntry && + + } + {this.props.searchBoxEntry && + + } + + + {meta.error} + + {/* { + formStates.filter((state) => meta[state]).map((state) => ( + - {state} + )) + } */} + + ); + } +} + +export { TextInput }; diff --git a/ioneapps-maagapp-ee31119a522d/src/components/userAvatar.js b/ioneapps-maagapp-ee31119a522d/src/components/userAvatar.js new file mode 100644 index 0000000..0e00692 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/src/components/userAvatar.js @@ -0,0 +1,49 @@ +import React from 'react'; +import _ from 'lodash'; +import { View, Text, StyleSheet } from 'react-native'; +import PropTypes from 'prop-types'; + +import { color } from '~/styles/variables'; + +export const UserAvatar = (props) => { + const { + size, firstName, lastName, bgColor, color: textColor, textSize, + } = props; + const styles = StyleSheet.create({ + circle: { + width: size, + height: size, + borderRadius: size / 2, + backgroundColor: color[bgColor], + alignItems: 'center', + justifyContent: 'center', + }, + text: { + fontSize: textSize || (size / 2.5), + color: color[textColor], + }, + }); + const initial = _.toUpper(firstName.substr(0, 1) + lastName.substr(0, 1)); + return ( + + {initial} + + ); +}; + +UserAvatar.propTypes = { + size: PropTypes.number.isRequired, + textSize: PropTypes.number, + firstName: PropTypes.string, + lastName: PropTypes.string, + bgColor: PropTypes.string, + color: PropTypes.string, +}; + +UserAvatar.defaultProps = { + textSize: 0, + bgColor: 'white', + color: 'menuBlue', + firstName: '', + lastName: '', +}; diff --git a/ioneapps-maagapp-ee31119a522d/src/components/webViewComponent.js b/ioneapps-maagapp-ee31119a522d/src/components/webViewComponent.js new file mode 100644 index 0000000..0a1f30e --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/src/components/webViewComponent.js @@ -0,0 +1,57 @@ +import React from 'react'; +import { View, StyleSheet, ActivityIndicator } from 'react-native'; +import { WebView } from 'react-native-webview'; +import PropTypes from 'prop-types'; + +export const styles = StyleSheet.create({ + container: { + flex: 1, + }, + webViewStyle: { + flex: 1, + }, + ActivityIndicatorStyle: { + position: 'absolute', + left: 0, + right: 0, + top: 0, + bottom: 0, + alignItems: 'center', + justifyContent: 'center', + }, +}); + +const activityIndicatorLoadingView = () => + ( + + ); + +class WebViewComponent extends React.Component { + static propTypes = { + url: PropTypes.string.isRequired, + } + + render() { + return ( + + + + ); + } +} + +export default WebViewComponent; diff --git a/ioneapps-maagapp-ee31119a522d/src/config/ReduxPersist.js b/ioneapps-maagapp-ee31119a522d/src/config/ReduxPersist.js new file mode 100644 index 0000000..5e8c5a8 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/src/config/ReduxPersist.js @@ -0,0 +1,20 @@ +// import storage from 'redux-persist/lib/storage'; +import FilesystemStorage from 'redux-persist-filesystem-storage'; +// import { Platform } from 'react-native'; + +const REDUX_PERSIST = { + active: true, + persistConfig: { + version: '0.0.2', + key: 'root', + storage: FilesystemStorage, + blacklist: ['form', 'network', 'loading', 'redirect'], + }, + // albumPersistConfig: { + // key: 'auth', + // storage: FilesystemStorage, + // blacklist: ['tempSelectedContents'], + // }, +}; + +export default REDUX_PERSIST; diff --git a/ioneapps-maagapp-ee31119a522d/src/config/alpha.google-services.json b/ioneapps-maagapp-ee31119a522d/src/config/alpha.google-services.json new file mode 100644 index 0000000..9ea5d1a --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/src/config/alpha.google-services.json @@ -0,0 +1,13 @@ +{ + "installed": { + "client_id": "530768309016-8g6fak98g21vmdrpdcuui0s0hllo3nqj.apps.googleusercontent.com", + "project_id": "api-project-530768309016", + "auth_uri": "https://accounts.google.com/o/oauth2/auth", + "token_uri": "https://www.googleapis.com/oauth2/v3/token", + "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs", + "redirect_uris": [ + "urn:ietf:wg:oauth:2.0:oob", + "http://localhost" + ] + } +} diff --git a/ioneapps-maagapp-ee31119a522d/src/config/beta.google-services.json b/ioneapps-maagapp-ee31119a522d/src/config/beta.google-services.json new file mode 100644 index 0000000..ae78750 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/src/config/beta.google-services.json @@ -0,0 +1,13 @@ +{ + "installed": { + "client_id": "530768309016-3dpej3vppvlfbu5tne0020cci384glj2.apps.googleusercontent.com", + "project_id": "api-project-530768309016", + "auth_uri": "https://accounts.google.com/o/oauth2/auth", + "token_uri": "https://www.googleapis.com/oauth2/v3/token", + "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs", + "redirect_uris": [ + "urn:ietf:wg:oauth:2.0:oob", + "http://localhost" + ] + } +} diff --git a/ioneapps-maagapp-ee31119a522d/src/config/dev.google-services.json b/ioneapps-maagapp-ee31119a522d/src/config/dev.google-services.json new file mode 100644 index 0000000..af6bec9 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/src/config/dev.google-services.json @@ -0,0 +1,13 @@ +{ + "installed": { + "client_id": "530768309016-jlqnsdq98gp1c8t3r88j40tb57hekh2s.apps.googleusercontent.com", + "project_id": "api-project-530768309016", + "auth_uri": "https://accounts.google.com/o/oauth2/auth", + "token_uri": "https://www.googleapis.com/oauth2/v3/token", + "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs", + "redirect_uris": [ + "urn:ietf:wg:oauth:2.0:oob", + "http://localhost" + ] + } +} diff --git a/ioneapps-maagapp-ee31119a522d/src/config/index.js b/ioneapps-maagapp-ee31119a522d/src/config/index.js new file mode 100644 index 0000000..78ae5c1 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/src/config/index.js @@ -0,0 +1,30 @@ +import Config from 'react-native-config'; + +export const config = { + env: Config.ENV, + debug: Config.debug, + appID: Config.APP_ID, + appGroupID: Config.APP_GROUP_ID, + bucketPrefix: Config.BUCKET_PREFIX, + fileSizeLimit: 20000000, + widthLimit: 8000, + heightLimit: 8000, + maxWidthOptimize: 1820, + maxHeightOptimize: 1820, + urls: { + mobileApi: 'https://87kprj6t9i.execute-api.ap-southeast-1.amazonaws.com/staging', + }, + defaultMaxImage: 100, + defaultMaxVideo: 10, + network: { + fetchTimeout: __DEV__ ? 10000 : 30000, + pingTimeout: __DEV__ ? 3000 : 20000, + pingServerUrl: 'https://www.google.com/', + shouldPing: true, + pingInterval: __DEV__ ? 5000 : 30000, + pingOnlyIfOffline: false, + pingInBackground: false, + httpMethod: 'HEAD', + }, + IS_DEBUG: true, +}; diff --git a/ioneapps-maagapp-ee31119a522d/src/config/qa.google-services.json b/ioneapps-maagapp-ee31119a522d/src/config/qa.google-services.json new file mode 100644 index 0000000..681cd51 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/src/config/qa.google-services.json @@ -0,0 +1,13 @@ +{ + "installed": { + "client_id": "530768309016-2878kmuj1sr6vd6is0s3mdqn0ims3rna.apps.googleusercontent.com", + "project_id": "api-project-530768309016", + "auth_uri": "https://accounts.google.com/o/oauth2/auth", + "token_uri": "https://www.googleapis.com/oauth2/v3/token", + "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs", + "redirect_uris": [ + "urn:ietf:wg:oauth:2.0:oob", + "http://localhost" + ] + } +} diff --git a/ioneapps-maagapp-ee31119a522d/src/containers/AddBeneficiaryRecord/index.js b/ioneapps-maagapp-ee31119a522d/src/containers/AddBeneficiaryRecord/index.js new file mode 100644 index 0000000..edc195e --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/src/containers/AddBeneficiaryRecord/index.js @@ -0,0 +1,1331 @@ +import _ from 'lodash'; +import React, { Component } from 'react'; +import { + SafeAreaView, + View, + Keyboard, + ScrollView, + TouchableOpacity, + Image, + PixelRatio, + Platform, +} from 'react-native'; +import ImageResizer from 'react-native-image-resizer'; +import PropTypes from 'prop-types'; +import { reduxForm } from 'redux-form'; +import { connect } from 'react-redux'; +import { Text, Avatar, NixplayIcon as Icon, color } from 'nixplay-ui-kit'; + +import i18n from '~/locale/i18n'; +import { validator } from '~/lib/validate'; +import { createConstrains } from '~/lib/validate/preset'; +import { TextInput } from '~comp/reduxForm'; +import { Button } from '~comp'; +import { PickerOptions } from '~/components/Photos/pickerOptions'; + + +import { color as basicColor } from '~/styles/variables'; +import { CustomPicker } from '~comp/AccountSettings/customPicker'; +import { SHOW_TOAST, SAVE_BENE_RECORD, GET_ASSETS } from '~/store/actionTypes'; +import { styles } from './styles'; +import { set } from 'react-native-reanimated'; + +const isAndroid = Platform.OS !== 'ios'; +let currentState = {}; + +export class AddBeneficiaryRecord extends Component { + static navigationOptions = () => { + const leftButtons = []; + const rightButtons = []; + return { + headerTransparent: false, + title: 'Add Record', + subtitle: '', + hideBackButton: false, + leftButtons, + rightButtons, + }; + } + + static propTypes = { + navigation: PropTypes.object.isRequired, + // isLoggedIn: PropTypes.bool.isRequired, + handleSubmit: PropTypes.func.isRequired, + dirty: PropTypes.bool.isRequired, + // submitting: PropTypes.bool.isRequired, + launchImagePicker: PropTypes.func.isRequired, + } + + constructor(props) { + super(props); + currentState = {}; + const fullName = this.props.navigation.getParam('fullName', ''); + const mobileNumber = this.props.navigation.getParam('mobileNumber', ''); + currentState = { + ...currentState, fullName, mobileNumber, + }; + // console.log('current: ', currentState); + this.state = { + SACFormID: '', + region: '', + province: '', + municipality: '', + barangay: '', + cRegion: '', + cProvince: '', + cMunicipality: '', + cBarangay: '', + bottomOpacity: 1, + sector: '', + sex: '', + ethnicity: '', + dob: '', + occupation: '', + monthlyIncome: '', + education: '', + houseOwnership: '', + healthCondition: '', + program: '', + programID: '', + nationalId: '', + idNumber: '', + // reliefAssistance: '', + remarks: '', + lastName: '', + firstName: '', + middleName: '', + suffix: '', + beneficiaryMobile: '', + avatarPhoto: null, + dobColor: basicColor.wrikeBg, + }; + + this.debouncerHandleSubmit = _.debounce(this.props.handleSubmit, 3000, { + leading: true, + trailing: false, + }); + } + + async componentDidMount() { + if (Platform.OS === 'ios') { + this.keyboardWillShowSub = Keyboard.addListener('keyboardWillShow', this.keyboardWillShow); + this.keyboardWillHideSub = Keyboard.addListener('keyboardWillHide', this.keyboardWillHide); + } else { + this.keyboardWillShowSub = Keyboard.addListener('keyboardDidShow', this.keyboardDidShow); + this.keyboardWillHideSub = Keyboard.addListener('keyboardDidHide', this.keyboardDidHide); + } + } + + componentWillUnmount() { + this.keyboardWillShowSub.remove(); + this.keyboardWillHideSub.remove(); + } + + keyboardWillShow = () => { + this.setState({ bottomOpacity: 0 }); + }; + + keyboardWillHide = () => { + this.setState({ bottomOpacity: 1 }); + }; + + keyboardDidShow = () => { + this.setState({ bottomOpacity: 0 }); + }; + + keyboardDidHide = () => { + this.setState({ bottomOpacity: 1 }); + }; + + goToWebView(url) { + this.props.navigation.push('WebView', { webViewUrl: url }); + } + + // Place of Birth + onUpdateRegion = (region) => { + console.log('region'); + this.setState({ region, province: '', municipality: '', barangay: '' }); + currentState = {...currentState, region, province: '', municipality: '', barangay: '' }; + } + regionSelect = () => { + console.log('regionSelect') + this.props.navigation.push('RegionSelection',{ + selected: this.state.region, + onUpdateRegion: this.onUpdateRegion, + origin: 1 + }); + } + + onUpdateProvice = (province) => { + this.setState({ province, municipality: '', barangay: '' }); + currentState = {...currentState, province, municipality: '', barangay: '' }; + } + provinceSelect = () => { + this.props.navigation.push('ProvinceSelection',{ + selected: this.state.province, + region: this.state.region.regCode, + onUpdateProvice: this.onUpdateProvice, + origin: 1 + }); + } + + onUpdateMunicipality = (municipality) => { + this.setState({ municipality, barangay: '' }); + currentState = {...currentState, municipality, barangay: '' }; + } + municipalitySelect = () => { + this.props.navigation.push( + 'MunicipalitySelection', + { + selected: this.state.municipality, + provCode: this.state.province.provCode, + onUpdateMunicipality: this.onUpdateMunicipality, + origin: 1, + }, + ); + } + + onUpdateBarangay = (barangay) => { + this.setState({ barangay }); + currentState = { ...currentState, barangay }; + } + barangaySelect = () => { + this.props.navigation.push( + 'BarangaySelection', + { + selected: this.state.barangay, + citymunCode: this.state.municipality.citymunCode, + onUpdateBarangay: this.onUpdateBarangay, + origin: 1, + }, + ); + } + // Current Address + onUpdateCRegion = (region) => { + this.setState({ cRegion: region, cProvince: '', cMunicipality: '', cBarangay: '' }); + currentState = { ...currentState, cRegion: region, cProvince: '', cMunicipality: '', cBarangay: '' }; + } + cRegionSelect = () => { + this.props.navigation.push( + 'RegionSelection', + { + selected: this.state.cRegion, + onUpdateRegion: this.onUpdateCRegion, + origin: 1, + }, + ); + } + onUpdateCProvice = (province) => { + this.setState({ cProvince: province, cMunicipality: '', cBarangay: '' }); + currentState = {...currentState, cProvince: province, cMunicipality: '', cBarangay: '' }; + } + cProvinceSelect = () => { + this.props.navigation.push( + 'ProvinceSelection', + { + selected: this.state.cProvince, + region: this.state.cRegion.regCode, + onUpdateProvice: this.onUpdateCProvice, + origin: 1, + }, + ); + } + onUpdateCMunicipality = (municipality) => { + this.setState({ cMunicipality: municipality, cBarangay: '' }); + currentState = {...currentState, cMunicipality: municipality, cBarangay: '' }; + } + cMunicipalitySelect = () => { + this.props.navigation.push( + 'MunicipalitySelection', + { + selected: this.state.cMunicipality, + provCode: this.state.cProvince.provCode, + onUpdateMunicipality: this.onUpdateCMunicipality, + origin: 1, + }, + ); + } + onUpdateCBarangay = (barangay) => { + this.setState({ cBarangay: barangay }); + currentState = {...currentState, cBarangay: barangay }; + } + cBarangaySelect = () => { + this.props.navigation.push( + 'BarangaySelection', + { + selected: this.state.cBarangay, + citymunCode: this.state.cMunicipality.citymunCode, + onUpdateBarangay: this.onUpdateCBarangay, + origin: 1, + }, + ); + } + + onUpdateEthnic = (ethnicity) => { + this.setState({ ethnicity }); + currentState = { ...currentState, ethnicity }; + } + ethnicSelect = () => { + this.props.navigation.push( + 'EthnicSelection', + { + selected: this.state.ethnicity, + onUpdate: this.onUpdateEthnic, + origin: 1, + }, + ); + } + // onUpdateOccupation = (occupation) => { + // this.setState({ occupation }); + // currentState = {...currentState, occupation }; + // } + // occupationSelect = () => { + // this.props.navigation.push( + // 'OccupationSelection', + // { + // selected: this.state.occupation, + // onUpdate: this.onUpdateOccupation, + // origin: 1, + // }, + // ); + // } + onUpdateEducation = (education) => { + this.setState({ education }); + currentState = { ...currentState, education }; + } + educationSelect = () => { + this.props.navigation.push( + 'EducationSelection', + { + selected: this.state.education, + onUpdate: this.onUpdateEducation, + origin: 1, + }, + ); + } + onUpdateSector = (sector) => { + this.setState({ sector }); + currentState = {...currentState, sector }; + } + sectorSelect = () => { + this.props.navigation.push( + 'SectorSelection', + { + selected: this.state.sector, + onUpdate: this.onUpdateSector, + origin: 1, + }, + ); + } + onUpdateMonthIncome = (monthlyIncome) => { + this.setState({ monthlyIncome }); + currentState = { ...currentState, monthlyIncome }; + } + monthIncomeSelect = () => { + this.props.navigation.push( + 'MonthIncomeSelection', + { + selected: this.state.monthlyIncome, + onUpdate: this.onUpdateMonthIncome, + origin: 1, + }, + ); + } + onUpdateHouseOwnership = (houseOwnership) => { + this.setState({ houseOwnership }); + currentState = { ...currentState, houseOwnership }; + } + houseOwnershipSelect = () => { + this.props.navigation.push( + 'HouseholdSelection', + { + selected: this.state.houseOwnership, + onUpdateHousehold: this.onUpdateHouseOwnership, + origin: 1, + }, + ); + } + onUpdateHealth = (healthCondition) => { + this.setState({ healthCondition }); + currentState = { ...currentState, healthCondition }; + } + healthSelect = () => { + this.props.navigation.push( + 'HealthSelection', + { + selected: this.state.healthCondition, + onUpdate: this.onUpdateHealth, + origin: 1, + }, + ); + } + onUpdateNatID = (nationalId) => { + this.setState({ nationalId }); + currentState = { ...currentState, nationalId }; + } + natIDSelect = () => { + this.props.navigation.push( + 'NatIDSelection', + { + selected: this.state.nationalId, + onUpdate: this.onUpdateNatID, + origin: 1, + }, + ); + } + + // onUpdateReliefAssitance = (reliefAssistance) => { + // this.setState({ reliefAssistance }); + // currentState = { ...currentState, reliefAssistance }; + // } + // reliefSelect = () => { + // this.props.navigation.push( + // 'ReliefSelection', + // { + // selected: this.state.reliefAssistance, + // onUpdate: this.onUpdateReliefAssitance, + // origin: 1, + // }, + // ); + // } + + onUpdateSuffix = (suffix) => { + this.setState({ suffix }); + currentState = { ...currentState, suffix }; + } + suffixSelect = () => { + this.props.navigation.push( + 'SuffixSelection', + { + selected: this.state.suffix, + onUpdate: this.onUpdateSuffix, + origin: 1, + }, + ); + } + + onUpdateGender = (sex) => { + this.setState({ sex }); + currentState = { ...currentState, sex }; + } + genderSelect = () => { + this.props.navigation.push( + 'GenderSelection', + { + selected: this.state.sex, + onUpdate: this.onUpdateGender, + origin: 1, + }, + ); + } + onUpdateProgram = (program) => { + this.setState({ program }); + currentState = { ...currentState, program }; + } + programSelect = () => { + this.props.navigation.push( + 'ProgramSelection', + { + selected: this.state.program, + onUpdate: this.onUpdateProgram, + origin: 1, + }, + ); + } + + processSourceImage = (rawImage) => { + this.setState({ }, async () => { + try { + let sourceUri = rawImage; + Image.getSize(sourceUri, async (w, h) => { + const safeSize = PixelRatio.roundToNearestPixel(1000); // approximate preferred max dimension size + let width = w; + let height = h; + + if (width > safeSize && width > height) { + const percentageDiff = (safeSize / width); + width = safeSize; + height = PixelRatio.roundToNearestPixel(height * percentageDiff); + } else if (height > safeSize && height > width) { + const percentageDiff = (safeSize / height); + height = safeSize; + width = PixelRatio.roundToNearestPixel(width * percentageDiff); + } + const resizedImage = await ImageResizer.createResizedImage(sourceUri, width, height, 'JPEG', 100, 0, null); + sourceUri = resizedImage.uri; + this.setState({ avatarPhoto: sourceUri }); + currentState = { ...currentState, avatarPhoto: sourceUri }; + }, (e) => { + console.log('error2: ', e); + }); + } catch (e) { + console.log('error1: ', e); + } + }); + }; + + launchImagePicker = () => { + this.props.launchImagePicker({ + options: { + ...PickerOptions([]), + maximumImageCount: 1, + imageSelectionLimit: i18n.t('contents.imageSelectionLimit', { count: 1 }), + mediaType: 'image', + allowsMultipleSelection: '0', + }, + resolve: (imagesPicked) => { + if (imagesPicked && imagesPicked[0] && imagesPicked[0].uri) { + console.log('IMAGE: ', imagesPicked[0].uri); + this.processSourceImage(imagesPicked[0].uri); + } + }, + }); + } + + onChangeTextDob = (text) => { + const isDeleting = (text.length < this.state.dob.length); + let tempText = text.replace(/-/g, ''); + let dobColor = basicColor.wrikeBg; + // eslint-disable-next-line no-restricted-globals + if (!isNaN(tempText)) { + if (tempText.length >= 2) { + if ((parseInt(tempText.substr(0, 2), 0) >= 13) + || (parseInt(tempText.substr(2, 2), 0) >= 32) + || (parseInt(tempText.substr(4, 4), 0) > (new Date()).getFullYear())) { + dobColor = basicColor.red; + } + } + } else { + dobColor = basicColor.red; + } + if (!isDeleting && tempText.length === 2) { + tempText = [tempText.slice(0, 2), '-', tempText.slice(2)].join(''); + } else if (!isDeleting && !_.isEqual(dobColor, basicColor.red) && tempText.length === 4) { + tempText = [tempText.slice(0, 2), '-', tempText.slice(2)].join('').concat('-'); + } else { + tempText = text; + } + currentState = { ...currentState, dobError: (_.isEqual(dobColor, basicColor.red)) }; + this.setState({ dob: tempText, dobColor }); + } + + render() { + // console.log('render: ', this.state.avatarPhoto); + + const { + region, province, municipality, barangay, + cRegion, cProvince, cMunicipality, cBarangay, + lastName, firstName, middleName, suffix, + sex, ethnicity, dob, + occupation, sector, monthlyIncome, + education, houseOwnership, healthCondition, + program, programID, nationalId, idNumber, + remarks, dobColor, + beneficiaryMobile, emailAddress, SACFormID, + } = this.state; + // const hasError = (!_.isEmpty(currentState.gotError)); + const dobErrorColor = (currentState.dobError) ? color.red : color.borderMistBlue; + const lnameColor = (currentState.lastNameError) ? color.red : color.borderMistBlue; + const fnameColor = (currentState.firstNameError) ? color.red : color.borderMistBlue; + const mnameColor = (currentState.middleNameError) ? color.red : color.borderMistBlue; + const beMobColor = (currentState.beneficiaryMobileError) ? color.red : color.borderMistBlue; + const occupColor = (currentState.occupationError) ? color.red : color.borderMistBlue; + return ( + + + + Basic Information + + + SAC Form ID + + this.setState({ SACFormID: text })} + /> + + Last Name + + this.setState({ lastName: text })} + /> + + First Name + + this.setState({ firstName: text })} + /> + + Middle Name + + this.setState({ middleName: text })} + /> + Suffix + + Sex + + + Date of Birth + + + + Mobile Number + + { if (_.isEmpty(beneficiaryMobile)) { this.setState({ beneficiaryMobile: '+63' }); } }} + onChange={text => { this.setState({ beneficiaryMobile: text }); }} + /> + + Email Address + + this.setState({ emailAddress: text })} + /> + + Educational Attainment + + + + + + + + + {/* Place of Birth */} + Place of Birth + + + Region + + + { (!_.isEmpty(region)) && + + Province + + + } + { (!_.isEmpty(province)) && + + Municipality + + + } + { (!_.isEmpty(municipality)) && + + Barangay + + + } + + + + + + {/* Current Address */} + Current Address + + + Region + + + { (!_.isEmpty(cRegion)) && + + Province + + + } + { (!_.isEmpty(cProvince)) && + + Municipality + + + } + { (!_.isEmpty(cMunicipality)) && + + Barangay + + + } + + + + + + {/* Educational Background */} + Other details + + + Type of Ethnicity + + + + Occupation + {/* */} + this.setState({ occupation: text })} + /> + + + Sector + + + + Monthly Income + + + + House Ownership + + + + Health Condition + + + + Government ID + + + { (!_.isEqual(nationalId, 'None')) && + + + Presented ID Number + + this.setState({ idNumber: text })} + /> + + } + + Government Benefit Program + + + { (_.isEqual(program, 'Pantawid')) && + + + Government Benefit Program ID + + this.setState({ programID: text })} + /> + + } + {/* + Relief Assitance Received from Government + + */} + + + Remarks + + this.setState({ remarks: text })} + /> + + + + Add Profile Photo + + + + + + + + + + + + + + + + + + + + + {/* { this.contentActionSheet = actionSheet; }} + > + { this.registerType(1); }} testID="Beneficiary">Register as Beneficiary + { this.registerType(2); }} testID="SW">Social Worker + { this.registerType(3); }} testID="SWA">SW - Assessor + { this.registerType(4); }} testID="SWV">SW - Validator + { this.registerType(5); }} testID="SWT">SW - Teacher + {i18n.t('common.close')} + */} + + ); + } +} + +const onSubmit = (values, dispatch) => ( + new Promise((resolve, reject) => { + const username = _.get(values, 'username', ''); + const password = _.get(values, 'password', ''); + const callAPI = () => { + checkInternetConnection().then(isConnected => { + if (isConnected) { + Mixpanel.trackWithProperties('try_login', { username }); + // console.log('username: ', username, password); + dispatch({ + type: REQUEST_LOGIN, + payload: { + username, + password, + resolve, + reject, + }, + }); + } else { + dispatch({ type: SHOW_TOAST, payload: { text: 'No Network Connection.' } }); + } + }); + }; + if (!_.isEmpty(username) && !_.isEmpty(password)) { + if (username.length >= 6 && password.length >= 6) { + callAPI(); + } else { + dispatch({ type: SHOW_TOAST, payload: { text: 'Verify your username or password length.' } }); + reject(); + } + } else { + dispatch({ type: SHOW_TOAST, payload: { text: 'Some fields are required.' } }); + reject(); + } + }) +); + +const onSubmitSuccess = (result, dispatch) => { + if (_.has(result, 'status')) { + dispatch({ type: SHOW_TOAST_ERROR, payload: { text: 'Invalid username or password.' } }); + } else { + dispatch({ + type: CHANGE_APP_ROOT, + payload: { root: 'main' }, + }); + } +}; + +const mapStateToProps = (state) => ({ + isLoggedIn: !_.isEmpty(state.user.token), + languageCode: _.get(state, 'settings.languageCode'), +}); + +const mapActionsToProps = (dispatch) => ({ + updateLocation(payload) { + dispatch({ type: UPDATE_LOCATION_COORDINATES, payload }); + }, +}); + +const FormContainer = reduxForm({ + form: 'OnboardingIntro', + onSubmit, + onSubmitSuccess, + destroyOnUnmount: true, +})(OnboardingIntro); + +export default connect(mapStateToProps, mapActionsToProps)(FormContainer); diff --git a/ioneapps-maagapp-ee31119a522d/src/containers/PhotoList/index.js b/ioneapps-maagapp-ee31119a522d/src/containers/PhotoList/index.js new file mode 100644 index 0000000..fdc7466 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/src/containers/PhotoList/index.js @@ -0,0 +1,298 @@ +import _ from 'lodash'; +import React, { Component } from 'react'; +import { + View, + FlatList, + TouchableOpacity, + BackHandler, + Alert, + Image, + PixelRatio, +} from 'react-native'; +import ImageResizer from 'react-native-image-resizer'; +import { connect } from 'react-redux'; +import { + Text, + ActionSheet, + ContentGridEmpty, +} from 'nixplay-ui-kit'; +import PropTypes from 'prop-types'; +import { ADD_PHOTO_BENEFICIARY, GET_ASSETS, GET_PHOTO_BENEFICIARY } from '~/store/actionTypes'; +import { PickerOptions } from '~/components/Photos/pickerOptions'; +import i18n from '~/locale/i18n'; +import { color as basicColor } from '~/styles/variables'; +import { styles } from './styles'; + +let currentState = {}; + +export class PhotoList extends Component { + static navigationOptions = ({ navigation }) => { + const { getParam } = navigation; + return { + title: 'Photos', + headerTransparent: false, + hideBackButton: false, + leftButtons: [], + rightButtons: [{ + onPress: () => { getParam('onAddNewEntry')(); }, + icon: 'plus', + }], + }; + } + + static propTypes = { + navigation: PropTypes.object.isRequired, + photos: PropTypes.object.isRequired, + launchImagePicker: PropTypes.func.isRequired, + addBeneficiaryPhoto: PropTypes.func.isRequired, + } + + constructor(props) { + super(props); + + const memberRefId = this.props.navigation.getParam('memberRefId', ''); + currentState = { ...currentState, memberRefId }; + console.log('PHOTOS: ', memberRefId); + this.state = { + safeAreaInsets: { + top: 0, left: 0, bottom: 0, right: 0, + }, + options: [], + selected: {}, + memberRefId, + }; + // console.log('LIST: ', this.state.options); + this.debounceOnPressBack = _.debounce(this.onPressBack, 3000, { + leading: true, + trailing: false, + }); + this.didFocusSubscription = props.navigation.addListener('didFocus', () => + BackHandler.addEventListener('hardwareBackPress', this.onBackButtonPressAndroid)); + this.willBlurSubscription = this.props.navigation.addListener('willBlur', () => + BackHandler.removeEventListener('hardwareBackPress', this.onBackButtonPressAndroid)); + this.props.navigation.setParams({ + onPressBack: this.debounceOnPressBack, + }); + this.props.navigation.setParams({ + onAddNewEntry: this.onAddNewEntry, + }); + } + + componentWillUnmount() { + if (!_.isEmpty(this.didFocusSubscription)) this.didFocusSubscription.remove(); + if (!_.isEmpty(this.willBlurSubscription)) this.willBlurSubscription.remove(); + } + + // static getDerivedStateFromProps(nextProps, prevState) { + // if (!_.isEqual(prevState.options, nextProps.photos)) { + // const uniqBy = _.uniqBy(nextProps.photos, 'memberRefId'); + // const filtered = _.filter(uniqBy, (o) => (!_.isEmpty(o) && _.isEqual(o.memberRefId, currentState.memberRefId))); + // return { options: filtered }; + // } + // return null; + // } + + onAddNewEntry = () => { + // launch photo library + this.launchImagePicker(); + } + + onBackButtonPressAndroid = () => { + this.debounceOnPressBack(); + return true; + }; + + onPressBack = (selected) => { + if (!_.isEmpty(selected)) { + this.state.onUpdateHousehold(selected); + } + this.props.navigation.goBack(); + } + + getSafeMargin() { + return { + marginBottom: this.state.safeAreaInsets.bottom, + marginLeft: this.state.safeAreaInsets.left, + marginRight: this.state.safeAreaInsets.right, + }; + } + + selectItem = (item = {}) => { + if (!_.isEmpty(item)) { + this.setState({ selected: item }); + this.contentActionSheet.open(); + // console.log('item: ', item.lastName); + } + } + + deletePhoto = () => { + if (!_.isEmpty(this.state.selected)) { + console.log('DELETE'); + } + } + + showPhoto = () => { + if (!_.isEmpty(this.state.selected)) { + console.log('SHOW'); + } + } + + addPhoto = () => { + if (!_.isEmpty(this.state.selected)) { + console.log('ADD'); + } + } + + showAlert = (title, msg, callbackCancel, callbackContinue) => { + Alert.alert( + title, + msg, + [ + { + text: i18n.t('common.cancel'), + onPress: callbackCancel ? () => { callbackCancel(); this.contentActionSheet.close(); } : + () => { this.contentActionSheet.close(); }, + }, + { + text: i18n.t('common.continue'), + onPress: callbackContinue ? () => { callbackContinue(); this.contentActionSheet.close(); } : + () => { this.contentActionSheet.close(); }, + }, + ], + { cancelable: false }, + ); + } + + processSourceImage = (rawImage) => { + this.setState({ }, async () => { + try { + const { memberRefId } = this.state; + let sourceUri = rawImage; + Image.getSize(sourceUri, async (w, h) => { + const safeSize = PixelRatio.roundToNearestPixel(1000); // approximate preferred max dimension size + let width = w; + let height = h; + + if (width > safeSize && width > height) { + const percentageDiff = (safeSize / width); + width = safeSize; + height = PixelRatio.roundToNearestPixel(height * percentageDiff); + } else if (height > safeSize && height > width) { + const percentageDiff = (safeSize / height); + height = safeSize; + width = PixelRatio.roundToNearestPixel(width * percentageDiff); + } + const resizedImage = await ImageResizer.createResizedImage(sourceUri, width, height, 'JPEG', 100, 0, null); + sourceUri = resizedImage.uri; + // save to reducer + // console.log(`SOURCE: ${sourceUri} BENE: ${memberRefId}`); + const dateCreated = Math.floor(new Date().getTime() / 1000.0); + this.props.addBeneficiaryPhoto({ sourceUri, memberRefId, dateCreated }); + }, (e) => { + console.log('error2: ', e); + }); + } catch (e) { + console.log('error1: ', e); + } + }); + }; + + launchImagePicker = () => { + this.props.launchImagePicker({ + options: { + ...PickerOptions([]), + maximumImageCount: 1, + imageSelectionLimit: i18n.t('contents.imageSelectionLimit', { count: 1 }), + mediaType: 'image', + allowsMultipleSelection: '0', + }, + resolve: (imagesPicked) => { + if (imagesPicked && imagesPicked[0] && imagesPicked[0].uri) { + console.log('IMAGE: ', imagesPicked[0].uri); + this.processSourceImage(imagesPicked[0].uri); + } + }, + }); + } + + renderPhotoItem = (item) => ( + { }} + disabled={_.isEqual(item, i18n.t('common.noResult'))} + > + + + + + {`Created: ${(new Date(item.dateCreated * 1000))}, ID: ${item.dateCreated}`} + + + + ) + + renderEmptyPhotos = () => ( + + + Beneficiary Photos + Add required photos + + + ); + + render() { + return ( + + { (!_.isEmpty(this.props.photos)) ? + { this.flatListRef = ref; }} + style={styles.listContainer} + data={this.props.photos} + keyExtractor={(item) => (_.isEmpty(item) ? 0 : item.dateCreated)} + inverted={false} + renderItem={({ item }) => this.renderPhotoItem(item)} + /> : this.renderEmptyPhotos() + } + { this.contentActionSheet = actionSheet; }} + > + {}} testID="showPhoto"> + Add Photo + Delete Photo + {i18n.t('common.cancel')} + + + ); + } +} + +const mapStateToProps = (state, props) => { + const memberRefId = props.navigation.getParam('memberRefId', ''); + return { + isConnected: state.network.isConnected, + users: state.users, + photos: state.photos.beneficiaryPhotos[memberRefId], + }; +}; + +export const mapActionsToProps = (dispatch) => ({ + launchImagePicker(payload) { + dispatch({ type: GET_ASSETS, payload }); + }, + addBeneficiaryPhoto(payload) { + dispatch({ type: ADD_PHOTO_BENEFICIARY, payload }); + }, +}); + +export default connect(mapStateToProps, mapActionsToProps)(PhotoList); diff --git a/ioneapps-maagapp-ee31119a522d/src/containers/PhotoList/styles.js b/ioneapps-maagapp-ee31119a522d/src/containers/PhotoList/styles.js new file mode 100644 index 0000000..2eb17ac --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/src/containers/PhotoList/styles.js @@ -0,0 +1,203 @@ +import { StyleSheet, Dimensions } from 'react-native'; +import { ifIphoneX, getBottomSpace } from 'react-native-iphone-x-helper'; +import { color } from 'nixplay-ui-kit'; + +export const styles = StyleSheet.create({ + container: { + flex: 1, + backgroundColor: color.white, + }, + bottomContainer: { + position: 'absolute', + left: 0, + right: 0, + bottom: 0, + }, + listContainer: { + paddingBottom: 54, + }, + listItem: { + marginLeft: 20, + marginRight: 20, + }, + friendsContainer: { + flex: 1, + }, + separator: { + height: 0.5, + backgroundColor: color.mistBlue03, + }, + scrollViewContainer: { + flexDirection: 'column', + ...ifIphoneX({ + paddingBottom: 80, + }, { + paddingBottom: 60, + }), + }, + createNewButton: { + height: 56, + flexDirection: 'row', + alignItems: 'center', + justifyContent: 'center', + position: 'absolute', + left: 0, + }, + createNewIcon: { + marginRight: 12, + }, + selectButton: { + height: 56, + flexDirection: 'row', + alignItems: 'center', + position: 'absolute', + right: 0, + }, + footerContainer: { + height: 46, + marginBottom: 68, + padding: 0, + }, + footerText: { + fontSize: 12, + color: '#02ADF0', + }, + headerViewStyle: { + backgroundColor: color.mistBlue03, + flexDirection: 'row', + paddingLeft: 16, + paddingRight: 16, + justifyContent: 'space-between', + alignItems: 'center', + }, + headerContainer: { + flexDirection: 'row', + justifyContent: 'center', + alignItems: 'center', + flex: 1, + }, + textInput: { + display: 'none', + }, + header: { + flexDirection: 'column', + }, + // container: { + // height: 38, + // paddingLeft: 12, + // paddingRight: 8, + // flexDirection: 'row', + // alignItems: 'center', + // borderWidth: 1, + // borderRadius: 4, + // borderColor: color.mistBlue03, + // backgroundColor: color.white, + // }, + input: { + flex: 1, + }, + modalFullscreen: { + flex: 1, + backgroundColor: color.white, + }, + flatListFullscreen: { + flexGrow: 1, + justifyContent: 'flex-start', + marginBottom: getBottomSpace(), + }, + shadow: { + // maxHeight: '66%', + shadowOffset: { width: 0, height: 16 }, + shadowColor: color.mistBlue03, + shadowOpacity: 0.8, + shadowRadius: 24, + borderRadius: 12, + elevation: 7, + }, + dialogue: { + width: 300, + backgroundColor: color.white, + borderRadius: 12, + shadowOffset: { width: 0, height: 4 }, + shadowColor: color.mistBlue05, + shadowOpacity: 0.1, + shadowRadius: 8, + }, + modalTitle: { + borderBottomWidth: 1, + borderColor: color.mistBlue03, + }, + modalTitleText: { + textAlign: 'center', + paddingTop: 16, + paddingBottom: 12, + paddingHorizontal: 16, + }, + option: { + flexDirection: 'column', + alignItems: 'center', + paddingVertical: 15, + marginHorizontal: 16, + borderBottomWidth: 1, + borderColor: color.mistBlue03, + }, + lastOption: { + borderBottomWidth: 0, + }, + optionLabel: { + flex: 1, + flexDirection: 'row', + alignItems: 'center', + }, + optionLabelCenter: { + marginLeft: 16, + marginRight: 28, + }, + optionIcon: { + marginLeft: 4, + }, + closeButton: { + height: 55, + justifyContent: 'center', + borderTopWidth: 1, + borderTopColor: color.mistBlue03, + }, + closeText: { + textAlign: 'center', + }, + locationPickerTextBox: { + backgroundColor: 'rgba(250, 250, 250, 0.96)', + }, + locationPickerList: { + width: Dimensions.get('window').width - 30, + margin: 15, + }, + customSheet: { + flexDirection: 'row', + justifyContent: 'center', + paddingVertical: 20, + }, + buttonContainer: { + alignItems: 'center', + marginHorizontal: 22, + }, + buttonTextStyle: { + paddingTop: 8, + marginHorizontal: -20, + }, + actionSheetTitle: { + textAlign: 'center', + paddingVertical: 24, + }, + avatarContainer: { + width: 300, + height: 300, + aspectRatio: 1, + marginRight: 10, + backgroundColor: 'black', + }, + thumb: { + flex: 1, + margin: 1, + }, +}); diff --git a/ioneapps-maagapp-ee31119a522d/src/containers/ProgramSelection/index.js b/ioneapps-maagapp-ee31119a522d/src/containers/ProgramSelection/index.js new file mode 100644 index 0000000..9e64ce7 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/src/containers/ProgramSelection/index.js @@ -0,0 +1,145 @@ +import React, { Component } from 'react'; +import _ from 'lodash'; +import { + View, + FlatList, + TouchableOpacity, + BackHandler, +} from 'react-native'; +import { connect } from 'react-redux'; +import { + Text, + NixplayIcon as Icon, +} from 'nixplay-ui-kit'; +import PropTypes from 'prop-types'; +import i18n from '~/locale/i18n'; +import lifeStatus from '~/store/lifeStatusOpts.json'; +import { styles } from './styles'; + +import { color as basicColor } from '~/styles/variables' + +export class ProgramSelection extends Component { + static navigationOptions = ({ navigation }) => { + const { getParam } = navigation; + return { + title: 'Select Enrolled Program', + headerTransparent: false, + hideBackButton: true, + leftButtons: [{ + icon: 'close', + onPress: () => { getParam('onPressBack')(); }, + }], + }; + } + + static propTypes = { + navigation: PropTypes.object.isRequired, + } + + constructor(props) { + super(props); + + // provinces + const { dswdProgram } = lifeStatus; + + this.state = { + safeAreaInsets: { + top: 0, left: 0, bottom: 0, right: 0, + }, + provinceFilter: '', + options: dswdProgram, + program: this.props.navigation.getParam('selected', ''), + txtInput: '', + onUpdate: this.props.navigation.getParam('onUpdate', () => {}), + }; + + this.debounceOnPressBack = _.debounce(this.onPressBack, 3000, { + leading: true, + trailing: false, + }); + this.didFocusSubscription = props.navigation.addListener('didFocus', () => + BackHandler.addEventListener('hardwareBackPress', this.onBackButtonPressAndroid)); + this.willBlurSubscription = this.props.navigation.addListener('willBlur', () => + BackHandler.removeEventListener('hardwareBackPress', this.onBackButtonPressAndroid)); + this.props.navigation.setParams({ + onPressBack: this.debounceOnPressBack, + }); + } + + componentWillUnmount() { + if (!_.isEmpty(this.didFocusSubscription)) this.didFocusSubscription.remove(); + if (!_.isEmpty(this.willBlurSubscription)) this.willBlurSubscription.remove(); + } + + onBackButtonPressAndroid = () => { + this.debounceOnPressBack(); + return true; + }; + + onPressBack = (selected) => { + if (!_.isEmpty(selected)) { + this.state.onUpdate(selected); + } + this.props.navigation.goBack(); + } + + getSafeMargin() { + return { + marginBottom: this.state.safeAreaInsets.bottom, + marginLeft: this.state.safeAreaInsets.left, + marginRight: this.state.safeAreaInsets.right, + }; + } + + selectItem = (item = {}) => { + if (!_.isEmpty(item)) { + this.debounceOnPressBack(item); + } + } + + render() { + const { options, program } = this.state; + return ( + + { this.flatListRef = ref; }} + style={styles.listContainer} + data={options} + keyExtractor={(option) => `${program}`} + inverted={false} + renderItem={({ item, index }) => { + const isSelected = (_.isEqual(item, program)); + return ( + { this.selectItem(item); }} + disabled={_.isEqual(item, i18n.t('common.noResult'))} + > + {/* {isSelected && } */} + + {item} + + {!_.isEmpty(item.withIcon) && + } + + + ); + }} + /> + + ); + } +} + +export default connect(null, null)(ProgramSelection); diff --git a/ioneapps-maagapp-ee31119a522d/src/containers/ProgramSelection/styles.js b/ioneapps-maagapp-ee31119a522d/src/containers/ProgramSelection/styles.js new file mode 100644 index 0000000..483e590 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/src/containers/ProgramSelection/styles.js @@ -0,0 +1,175 @@ +import { StyleSheet, Dimensions } from 'react-native'; +import { ifIphoneX, getBottomSpace } from 'react-native-iphone-x-helper'; +import { color } from 'nixplay-ui-kit'; + +export const styles = StyleSheet.create({ + container: { + flex: 1, + backgroundColor: color.white, + }, + bottomContainer: { + position: 'absolute', + left: 0, + right: 0, + bottom: 0, + }, + listContainer: { + paddingBottom: 54, + }, + listItem: { + marginLeft: 20, + marginRight: 20, + }, + friendsContainer: { + flex: 1, + }, + separator: { + height: 0.5, + backgroundColor: color.mistBlue03, + }, + scrollViewContainer: { + flexDirection: 'column', + ...ifIphoneX({ + paddingBottom: 80, + }, { + paddingBottom: 60, + }), + }, + createNewButton: { + height: 56, + flexDirection: 'row', + alignItems: 'center', + justifyContent: 'center', + position: 'absolute', + left: 0, + }, + createNewIcon: { + marginRight: 12, + }, + selectButton: { + height: 56, + flexDirection: 'row', + alignItems: 'center', + position: 'absolute', + right: 0, + }, + footerContainer: { + height: 46, + marginBottom: 68, + padding: 0, + }, + footerText: { + fontSize: 12, + color: '#02ADF0', + }, + headerViewStyle: { + backgroundColor: color.mistBlue03, + flexDirection: 'row', + paddingLeft: 16, + paddingRight: 16, + justifyContent: 'space-between', + alignItems: 'center', + }, + headerContainer: { + flexDirection: 'row', + justifyContent: 'center', + alignItems: 'center', + flex: 1, + }, + textInput: { + display: 'none', + }, + header: { + flexDirection: 'column', + }, + // container: { + // height: 38, + // paddingLeft: 12, + // paddingRight: 8, + // flexDirection: 'row', + // alignItems: 'center', + // borderWidth: 1, + // borderRadius: 4, + // borderColor: color.mistBlue03, + // backgroundColor: color.white, + // }, + input: { + flex: 1, + }, + modalFullscreen: { + flex: 1, + backgroundColor: color.white, + }, + flatListFullscreen: { + flexGrow: 1, + justifyContent: 'flex-start', + marginBottom: getBottomSpace(), + }, + shadow: { + // maxHeight: '66%', + shadowOffset: { width: 0, height: 16 }, + shadowColor: color.mistBlue03, + shadowOpacity: 0.8, + shadowRadius: 24, + borderRadius: 12, + elevation: 7, + }, + dialogue: { + width: 300, + backgroundColor: color.white, + borderRadius: 12, + shadowOffset: { width: 0, height: 4 }, + shadowColor: color.mistBlue05, + shadowOpacity: 0.1, + shadowRadius: 8, + }, + modalTitle: { + borderBottomWidth: 1, + borderColor: color.mistBlue03, + }, + modalTitleText: { + textAlign: 'center', + paddingTop: 16, + paddingBottom: 12, + paddingHorizontal: 16, + }, + option: { + flexDirection: 'row', + alignItems: 'center', + paddingVertical: 15, + marginHorizontal: 16, + borderBottomWidth: 1, + borderColor: color.mistBlue03, + }, + lastOption: { + borderBottomWidth: 0, + }, + optionLabel: { + flex: 1, + flexDirection: 'row', + alignItems: 'center', + }, + optionLabelCenter: { + marginLeft: 16, + marginRight: 28, + }, + optionIcon: { + marginLeft: 4, + }, + closeButton: { + height: 55, + justifyContent: 'center', + borderTopWidth: 1, + borderTopColor: color.mistBlue03, + }, + closeText: { + textAlign: 'center', + }, + locationPickerTextBox: { + backgroundColor: 'rgba(250, 250, 250, 0.96)', + }, + locationPickerList: { + width: Dimensions.get('window').width - 30, + margin: 15, + }, +}); diff --git a/ioneapps-maagapp-ee31119a522d/src/containers/ProvinceSelection/index.js b/ioneapps-maagapp-ee31119a522d/src/containers/ProvinceSelection/index.js new file mode 100644 index 0000000..cf2606c --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/src/containers/ProvinceSelection/index.js @@ -0,0 +1,234 @@ +import React, { Component } from 'react'; +import _ from 'lodash'; +import { + View, + FlatList, + TouchableOpacity, + BackHandler, + Platform, +} from 'react-native'; +import { reduxForm } from 'redux-form'; +import { connect } from 'react-redux'; +import { + Text, + NixplayIcon as Icon, +} from 'nixplay-ui-kit'; +import PropTypes from 'prop-types'; +import i18n from '~/locale/i18n'; +import { TextInput } from '~comp/reduxForm'; +import provinces from '~/store/provinces.json'; +import { color as basicColor } from '~/styles/variables'; +import { styles } from './styles'; + +const isAndroid = Platform.OS !== 'ios'; + +export class ProvinceSelection extends Component { + static navigationOptions = ({ navigation }) => { + const { getParam } = navigation; + return { + title: 'Select Province', + headerTransparent: false, + hideBackButton: true, + leftButtons: [{ + icon: 'close', + onPress: () => { getParam('onPressBack')(); }, + }], + }; + } + + static propTypes = { + navigation: PropTypes.object.isRequired, + reset: PropTypes.func.isRequired, + } + + constructor(props) { + super(props); + + const region = this.props.navigation.getParam('region', ''); + // provinces + const { RECORDS: Provinces } = provinces; + let filterProvinces = Provinces; + if (!_.isEmpty(region)) { + filterProvinces = _.filter(Provinces, ['regCode', region]); + } + + this.state = { + safeAreaInsets: { + top: 0, left: 0, bottom: 0, right: 0, + }, + options: _.sortBy(filterProvinces, ['provDesc']), + province: this.props.navigation.getParam('selected', ''), + onUpdateProvice: this.props.navigation.getParam('onUpdateProvice', () => {}), + locationFilter: '', + fieldHasValue: false, + }; + + this.debounceOnPressBack = _.debounce(this.onPressBack, 3000, { + leading: true, + trailing: false, + }); + this.didFocusSubscription = props.navigation.addListener('didFocus', () => + BackHandler.addEventListener('hardwareBackPress', this.onBackButtonPressAndroid)); + this.willBlurSubscription = this.props.navigation.addListener('willBlur', () => + BackHandler.removeEventListener('hardwareBackPress', this.onBackButtonPressAndroid)); + this.props.navigation.setParams({ + onPressBack: this.debounceOnPressBack, + }); + } + + componentWillUnmount() { + if (!_.isEmpty(this.didFocusSubscription)) this.didFocusSubscription.remove(); + if (!_.isEmpty(this.willBlurSubscription)) this.willBlurSubscription.remove(); + } + + onBackButtonPressAndroid = () => { + this.debounceOnPressBack(); + return true; + }; + + onPressBack = (selected) => { + if (!_.isEmpty(selected)) { + this.state.onUpdateProvice(selected); + } + this.props.navigation.goBack(); + } + + getSafeMargin() { + return { + marginBottom: this.state.safeAreaInsets.bottom, + marginLeft: this.state.safeAreaInsets.left, + marginRight: this.state.safeAreaInsets.right, + }; + } + + selectItem = (item = {}) => { + if (!_.isEmpty(item)) { + this.debounceOnPressBack(item); + } + } + + checkCrossButton = (key) => { + if (!_.isEmpty(key)) { + this.setState({ fieldHasValue: true }); + } else { + this.setState({ fieldHasValue: false }); + } + } + + updateList = (key = '') => { + const region = this.props.navigation.getParam('region', ''); + // provinces + const { RECORDS: Provinces } = provinces; + let filterProvinces = Provinces; + if (!_.isEmpty(region)) { + filterProvinces = _.filter(Provinces, ['regCode', region]); + } + + this.checkCrossButton(key); + const lcText = _.toLower(key); + const newData = _.filter(_.sortBy(filterProvinces, ['provDesc']), ({ provDesc: name }) => { + const lcName = _.toLower(name); + return ( + lcName.indexOf(lcText) > -1 || + lcText.indexOf(lcName) > -1 + ); + }); + const noResult = i18n.t('common.noResult'); + const noItemsData = [{ + name: noResult, displayName: noResult, spellings: '', noCheck: true, + }]; + const nonEmptyData = newData.length === 0 ? noItemsData : newData; + this.setState({ options: nonEmptyData, locationFilter: key }); + } + + resetField = () => { + const { reset } = this.props; + const key = ''; + reset(); + this.updateCountryList(key); + this.checkCrossButton(); + } + + render() { + const { options, province } = this.state; + const valueKey = 'id'; + const labelKey = 'provDesc'; + return ( + + + this.resetField()} + onChange={(text) => this.updateList(text)} + /> + + { this.flatListRef = ref; }} + style={styles.listContainer} + data={options} + keyExtractor={(option) => `${option[valueKey]}`} + inverted={false} + renderItem={({ item, index }) => { + const l = item[labelKey]; + const v = item[valueKey]; + const isSelected = (_.isEqual(v, province.id)); + return ( + { this.selectItem(item); }} + disabled={_.isEqual(l, i18n.t('common.noResult'))} + > + {/* {isSelected && } */} + + {l} + + {!_.isEmpty(item.withIcon) && + } + + + ); + }} + /> + + ); + } +} + +const onSubmit = (values, dispatch, ownProps) => ( + new Promise(() => { + const { navigation } = ownProps; + navigation.goBack(null); + }) +); + +const onSubmitSuccess = () => {}; + +const FormContainer = reduxForm({ + form: 'ProvinceSelection', + onSubmit, + onSubmitSuccess, +})(ProvinceSelection); + +export { FormContainer }; +export default connect(null, null)(FormContainer); diff --git a/ioneapps-maagapp-ee31119a522d/src/containers/ProvinceSelection/styles.js b/ioneapps-maagapp-ee31119a522d/src/containers/ProvinceSelection/styles.js new file mode 100644 index 0000000..483e590 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/src/containers/ProvinceSelection/styles.js @@ -0,0 +1,175 @@ +import { StyleSheet, Dimensions } from 'react-native'; +import { ifIphoneX, getBottomSpace } from 'react-native-iphone-x-helper'; +import { color } from 'nixplay-ui-kit'; + +export const styles = StyleSheet.create({ + container: { + flex: 1, + backgroundColor: color.white, + }, + bottomContainer: { + position: 'absolute', + left: 0, + right: 0, + bottom: 0, + }, + listContainer: { + paddingBottom: 54, + }, + listItem: { + marginLeft: 20, + marginRight: 20, + }, + friendsContainer: { + flex: 1, + }, + separator: { + height: 0.5, + backgroundColor: color.mistBlue03, + }, + scrollViewContainer: { + flexDirection: 'column', + ...ifIphoneX({ + paddingBottom: 80, + }, { + paddingBottom: 60, + }), + }, + createNewButton: { + height: 56, + flexDirection: 'row', + alignItems: 'center', + justifyContent: 'center', + position: 'absolute', + left: 0, + }, + createNewIcon: { + marginRight: 12, + }, + selectButton: { + height: 56, + flexDirection: 'row', + alignItems: 'center', + position: 'absolute', + right: 0, + }, + footerContainer: { + height: 46, + marginBottom: 68, + padding: 0, + }, + footerText: { + fontSize: 12, + color: '#02ADF0', + }, + headerViewStyle: { + backgroundColor: color.mistBlue03, + flexDirection: 'row', + paddingLeft: 16, + paddingRight: 16, + justifyContent: 'space-between', + alignItems: 'center', + }, + headerContainer: { + flexDirection: 'row', + justifyContent: 'center', + alignItems: 'center', + flex: 1, + }, + textInput: { + display: 'none', + }, + header: { + flexDirection: 'column', + }, + // container: { + // height: 38, + // paddingLeft: 12, + // paddingRight: 8, + // flexDirection: 'row', + // alignItems: 'center', + // borderWidth: 1, + // borderRadius: 4, + // borderColor: color.mistBlue03, + // backgroundColor: color.white, + // }, + input: { + flex: 1, + }, + modalFullscreen: { + flex: 1, + backgroundColor: color.white, + }, + flatListFullscreen: { + flexGrow: 1, + justifyContent: 'flex-start', + marginBottom: getBottomSpace(), + }, + shadow: { + // maxHeight: '66%', + shadowOffset: { width: 0, height: 16 }, + shadowColor: color.mistBlue03, + shadowOpacity: 0.8, + shadowRadius: 24, + borderRadius: 12, + elevation: 7, + }, + dialogue: { + width: 300, + backgroundColor: color.white, + borderRadius: 12, + shadowOffset: { width: 0, height: 4 }, + shadowColor: color.mistBlue05, + shadowOpacity: 0.1, + shadowRadius: 8, + }, + modalTitle: { + borderBottomWidth: 1, + borderColor: color.mistBlue03, + }, + modalTitleText: { + textAlign: 'center', + paddingTop: 16, + paddingBottom: 12, + paddingHorizontal: 16, + }, + option: { + flexDirection: 'row', + alignItems: 'center', + paddingVertical: 15, + marginHorizontal: 16, + borderBottomWidth: 1, + borderColor: color.mistBlue03, + }, + lastOption: { + borderBottomWidth: 0, + }, + optionLabel: { + flex: 1, + flexDirection: 'row', + alignItems: 'center', + }, + optionLabelCenter: { + marginLeft: 16, + marginRight: 28, + }, + optionIcon: { + marginLeft: 4, + }, + closeButton: { + height: 55, + justifyContent: 'center', + borderTopWidth: 1, + borderTopColor: color.mistBlue03, + }, + closeText: { + textAlign: 'center', + }, + locationPickerTextBox: { + backgroundColor: 'rgba(250, 250, 250, 0.96)', + }, + locationPickerList: { + width: Dimensions.get('window').width - 30, + margin: 15, + }, +}); diff --git a/ioneapps-maagapp-ee31119a522d/src/containers/RegionSelection/index.js b/ioneapps-maagapp-ee31119a522d/src/containers/RegionSelection/index.js new file mode 100644 index 0000000..0e870f8 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/src/containers/RegionSelection/index.js @@ -0,0 +1,225 @@ +import React, { Component } from 'react'; +import _ from 'lodash'; +import { + View, + FlatList, + TouchableOpacity, + BackHandler, + Platform, +} from 'react-native'; +import { reduxForm } from 'redux-form'; +import { connect } from 'react-redux'; +import { + Text, + NixplayIcon as Icon, +} from 'nixplay-ui-kit'; +import PropTypes from 'prop-types'; +import i18n from '~/locale/i18n'; +import { TextInput } from '~comp/reduxForm'; +import regions from '~/store/regions.json'; +import { color as basicColor } from '~/styles/variables'; +import { styles } from './styles'; + +const isAndroid = Platform.OS !== 'ios'; + +export class RegionSelection extends Component { + static navigationOptions = ({ navigation }) => { + const { getParam } = navigation; + return { + title: 'Select Province', + headerTransparent: false, + hideBackButton: true, + leftButtons: [{ + icon: 'close', + onPress: () => { getParam('onPressBack')(); }, + }], + }; + } + + static propTypes = { + navigation: PropTypes.object.isRequired, + reset: PropTypes.func.isRequired, + } + + constructor(props) { + super(props); + + // provinces + const { RECORDS: Regions } = regions; + + this.state = { + safeAreaInsets: { + top: 0, left: 0, bottom: 0, right: 0, + }, + options: _.sortBy(Regions, ['regDesc']), + region: this.props.navigation.getParam('selected', ''), + // txtInput: '', + onUpdateRegion: this.props.navigation.getParam('onUpdateRegion', () => {}), + // origin: this.props.navigation.getParam('origin', 0), + locationFilter: '', + fieldHasValue: false, + }; + + this.debounceOnPressBack = _.debounce(this.onPressBack, 3000, { + leading: true, + trailing: false, + }); + this.didFocusSubscription = props.navigation.addListener('didFocus', () => + BackHandler.addEventListener('hardwareBackPress', this.onBackButtonPressAndroid)); + this.willBlurSubscription = this.props.navigation.addListener('willBlur', () => + BackHandler.removeEventListener('hardwareBackPress', this.onBackButtonPressAndroid)); + this.props.navigation.setParams({ + onPressBack: this.debounceOnPressBack, + }); + } + + componentWillUnmount() { + if (!_.isEmpty(this.didFocusSubscription)) this.didFocusSubscription.remove(); + if (!_.isEmpty(this.willBlurSubscription)) this.willBlurSubscription.remove(); + } + + onBackButtonPressAndroid = () => { + this.debounceOnPressBack(); + return true; + }; + + onPressBack = (selected) => { + if (!_.isEmpty(selected)) { + this.state.onUpdateRegion(selected); + } + this.props.navigation.goBack(); + } + + getSafeMargin() { + return { + marginBottom: this.state.safeAreaInsets.bottom, + marginLeft: this.state.safeAreaInsets.left, + marginRight: this.state.safeAreaInsets.right, + }; + } + + selectItem = (item = {}) => { + if (!_.isEmpty(item)) { + this.debounceOnPressBack(item); + } + } + + checkCrossButton = (key) => { + if (!_.isEmpty(key)) { + this.setState({ fieldHasValue: true }); + } else { + this.setState({ fieldHasValue: false }); + } + } + + updateList = (key = '') => { + const { RECORDS: Regions } = regions; + + this.checkCrossButton(key); + const lcText = _.toLower(key); + const newData = _.filter(_.sortBy(Regions, ['regDesc']), ({ regDesc: name }) => { + const lcName = _.toLower(name); + return ( + lcName.indexOf(lcText) > -1 || + lcText.indexOf(lcName) > -1 + ); + }); + const noResult = i18n.t('common.noResult'); + const noItemsData = [{ + name: noResult, displayName: noResult, spellings: '', noCheck: true, + }]; + const nonEmptyData = newData.length === 0 ? noItemsData : newData; + this.setState({ options: nonEmptyData, locationFilter: key }); + } + + resetField = () => { + const { reset } = this.props; + const key = ''; + reset(); + this.updateCountryList(key); + this.checkCrossButton(); + } + + render() { + const { options, region } = this.state; + const valueKey = 'id'; + const labelKey = 'regDesc'; + return ( + + + this.resetField()} + onChange={(text) => this.updateList(text)} + /> + + { this.flatListRef = ref; }} + style={styles.listContainer} + data={options} + keyExtractor={(option) => `${option[valueKey]}`} + inverted={false} + renderItem={({ item, index }) => { + const l = item[labelKey]; + const v = item[valueKey]; + const isSelected = (_.isEqual(v, region.id)); + return ( + { this.selectItem(item); }} + disabled={_.isEqual(l, i18n.t('common.noResult'))} + > + {/* {isSelected && } */} + + {l} + + {!_.isEmpty(item.withIcon) && + } + + + ); + }} + /> + + ); + } +} + +const onSubmit = (values, dispatch, ownProps) => ( + new Promise(() => { + const { navigation } = ownProps; + navigation.goBack(null); + }) +); + +const onSubmitSuccess = () => {}; + +const FormContainer = reduxForm({ + form: 'RegionSelection', + onSubmit, + onSubmitSuccess, +})(RegionSelection); + +export { FormContainer }; +export default connect(null, null)(FormContainer); diff --git a/ioneapps-maagapp-ee31119a522d/src/containers/RegionSelection/styles.js b/ioneapps-maagapp-ee31119a522d/src/containers/RegionSelection/styles.js new file mode 100644 index 0000000..483e590 --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/src/containers/RegionSelection/styles.js @@ -0,0 +1,175 @@ +import { StyleSheet, Dimensions } from 'react-native'; +import { ifIphoneX, getBottomSpace } from 'react-native-iphone-x-helper'; +import { color } from 'nixplay-ui-kit'; + +export const styles = StyleSheet.create({ + container: { + flex: 1, + backgroundColor: color.white, + }, + bottomContainer: { + position: 'absolute', + left: 0, + right: 0, + bottom: 0, + }, + listContainer: { + paddingBottom: 54, + }, + listItem: { + marginLeft: 20, + marginRight: 20, + }, + friendsContainer: { + flex: 1, + }, + separator: { + height: 0.5, + backgroundColor: color.mistBlue03, + }, + scrollViewContainer: { + flexDirection: 'column', + ...ifIphoneX({ + paddingBottom: 80, + }, { + paddingBottom: 60, + }), + }, + createNewButton: { + height: 56, + flexDirection: 'row', + alignItems: 'center', + justifyContent: 'center', + position: 'absolute', + left: 0, + }, + createNewIcon: { + marginRight: 12, + }, + selectButton: { + height: 56, + flexDirection: 'row', + alignItems: 'center', + position: 'absolute', + right: 0, + }, + footerContainer: { + height: 46, + marginBottom: 68, + padding: 0, + }, + footerText: { + fontSize: 12, + color: '#02ADF0', + }, + headerViewStyle: { + backgroundColor: color.mistBlue03, + flexDirection: 'row', + paddingLeft: 16, + paddingRight: 16, + justifyContent: 'space-between', + alignItems: 'center', + }, + headerContainer: { + flexDirection: 'row', + justifyContent: 'center', + alignItems: 'center', + flex: 1, + }, + textInput: { + display: 'none', + }, + header: { + flexDirection: 'column', + }, + // container: { + // height: 38, + // paddingLeft: 12, + // paddingRight: 8, + // flexDirection: 'row', + // alignItems: 'center', + // borderWidth: 1, + // borderRadius: 4, + // borderColor: color.mistBlue03, + // backgroundColor: color.white, + // }, + input: { + flex: 1, + }, + modalFullscreen: { + flex: 1, + backgroundColor: color.white, + }, + flatListFullscreen: { + flexGrow: 1, + justifyContent: 'flex-start', + marginBottom: getBottomSpace(), + }, + shadow: { + // maxHeight: '66%', + shadowOffset: { width: 0, height: 16 }, + shadowColor: color.mistBlue03, + shadowOpacity: 0.8, + shadowRadius: 24, + borderRadius: 12, + elevation: 7, + }, + dialogue: { + width: 300, + backgroundColor: color.white, + borderRadius: 12, + shadowOffset: { width: 0, height: 4 }, + shadowColor: color.mistBlue05, + shadowOpacity: 0.1, + shadowRadius: 8, + }, + modalTitle: { + borderBottomWidth: 1, + borderColor: color.mistBlue03, + }, + modalTitleText: { + textAlign: 'center', + paddingTop: 16, + paddingBottom: 12, + paddingHorizontal: 16, + }, + option: { + flexDirection: 'row', + alignItems: 'center', + paddingVertical: 15, + marginHorizontal: 16, + borderBottomWidth: 1, + borderColor: color.mistBlue03, + }, + lastOption: { + borderBottomWidth: 0, + }, + optionLabel: { + flex: 1, + flexDirection: 'row', + alignItems: 'center', + }, + optionLabelCenter: { + marginLeft: 16, + marginRight: 28, + }, + optionIcon: { + marginLeft: 4, + }, + closeButton: { + height: 55, + justifyContent: 'center', + borderTopWidth: 1, + borderTopColor: color.mistBlue03, + }, + closeText: { + textAlign: 'center', + }, + locationPickerTextBox: { + backgroundColor: 'rgba(250, 250, 250, 0.96)', + }, + locationPickerList: { + width: Dimensions.get('window').width - 30, + margin: 15, + }, +}); diff --git a/ioneapps-maagapp-ee31119a522d/src/containers/RegisterBeneficiary/index.js b/ioneapps-maagapp-ee31119a522d/src/containers/RegisterBeneficiary/index.js new file mode 100644 index 0000000..3d5626e --- /dev/null +++ b/ioneapps-maagapp-ee31119a522d/src/containers/RegisterBeneficiary/index.js @@ -0,0 +1,1205 @@ +import '../../../shim.js'; +import crypto from 'crypto'; +import _ from 'lodash'; +import React, { Component } from 'react'; +import { + SafeAreaView, + View, + Keyboard, + ScrollView, + TouchableOpacity, + Image, + PixelRatio, + Platform, + ActivityIndicator, +} from 'react-native'; +import ImageResizer from 'react-native-image-resizer'; +import { checkInternetConnection } from 'react-native-offline'; +import PropTypes from 'prop-types'; +import { reduxForm } from 'redux-form'; +import { connect } from 'react-redux'; +import { Text, Avatar, NixplayIcon as Icon } from 'nixplay-ui-kit'; + +import i18n from '~/locale/i18n'; +import { validator } from '~/lib/validate'; +import { createConstrains } from '~/lib/validate/preset'; +import { TextInput } from '~comp/reduxForm'; +import { Button } from '~comp'; +import { PickerOptions } from '~/components/Photos/pickerOptions'; + + +import { color as basicColor } from '~/styles/variables'; +import { CustomPicker } from '~comp/AccountSettings/customPicker'; +import { SHOW_TOAST_ERROR, SHOW_TOAST, CHANGE_APP_ROOT, GET_ASSETS, REGISTER_BENEFICIARY } from '~/store/actionTypes'; +import { styles } from './styles'; + +const isAndroid = Platform.OS !== 'ios'; +let currentState = {}; + +export class RegisterBeneficiary extends Component { + static navigationOptions = () => { + const leftButtons = []; + const rightButtons = []; + return { + headerTransparent: false, + title: 'Basic Information', + subtitle: '', + hideBackButton: false, + leftButtons, + rightButtons, + }; + } + + static propTypes = { + navigation: PropTypes.object.isRequired, + handleSubmit: PropTypes.func.isRequired, + launchImagePicker: PropTypes.func.isRequired, + } + + constructor(props) { + super(props); + + const emailAddress = props.navigation.getParam('emailAddress', 'null'); + const mobileNumber = props.navigation.getParam('mobileNumber', 'null'); + const password = props.navigation.getParam('password', {}); + const code = props.navigation.getParam('code', ''); + const regType = props.navigation.getParam('regType', '1'); + const isVerified = props.navigation.getParam('isVerified', false); + currentState = { + ...currentState, emailAddress, mobileNumber, password, code, regType, isVerified, + }; + console.log('REGISTRATION>INIT: ', emailAddress, mobileNumber, password, code, regType, isVerified); + this.state = { + SACFormID: '', + region: '', + province: '', + municipality: '', + barangay: '', + cRegion: '', + cProvince: '', + cMunicipality: '', + cBarangay: '', + bottomOpacity: 1, + sector: '', + sex: '', + ethnicity: '', + dob: '', + occupation: '', + monthlyIncome: '', + education: '', + houseOwnership: '', + healthCondition: '', + program: '', + // programID: '', + nationalId: '', + idNumber: '', + remarks: '', + lastName: '', + firstName: '', + middleName: '', + suffix: '', + emailAddress, + mobileNumber, + avatarPhoto: null, + dobColor: basicColor.wrikeBg, + }; + this.debouncerHandleSubmit = _.debounce(this.props.handleSubmit, 3000, { + leading: true, + trailing: false, + }); + } + + async componentDidMount() { + if (Platform.OS === 'ios') { + this.keyboardWillShowSub = Keyboard.addListener('keyboardWillShow', this.keyboardWillShow); + this.keyboardWillHideSub = Keyboard.addListener('keyboardWillHide', this.keyboardWillHide); + } else { + this.keyboardWillShowSub = Keyboard.addListener('keyboardDidShow', this.keyboardDidShow); + this.keyboardWillHideSub = Keyboard.addListener('keyboardDidHide', this.keyboardDidHide); + } + } + + componentWillUnmount() { + this.keyboardWillShowSub.remove(); + this.keyboardWillHideSub.remove(); + } + + keyboardWillShow = () => { + this.setState({ bottomOpacity: 0 }); + }; + + keyboardWillHide = () => { + this.setState({ bottomOpacity: 1 }); + }; + + keyboardDidShow = () => { + this.setState({ bottomOpacity: 0 }); + }; + + keyboardDidHide = () => { + this.setState({ bottomOpacity: 1 }); + }; + + // Place of Birth + onUpdateRegion = (region) => { + console.log('region'); + this.setState({ + region, province: '', municipality: '', barangay: '', + }); + currentState = { + ...currentState, region, province: '', municipality: '', barangay: '', + }; + } + regionSelect = () => { + console.log('regionSelect'); + this.props.navigation.push( + 'RegionSelection', + { + selected: this.state.region, + onUpdateRegion: this.onUpdateRegion, + origin: 1, + }, + ); + } + + onUpdateProvice = (province) => { + this.setState({ province, municipality: '', barangay: '' }); + currentState = { + ...currentState, province, municipality: '', barangay: '', + }; + } + provinceSelect = () => { + this.props.navigation.push( + 'ProvinceSelection', + { + selected: this.state.province, + region: this.state.region.regCode, + onUpdateProvice: this.onUpdateProvice, + origin: 1, + }, + ); + } + + onUpdateMunicipality = (municipality) => { + this.setState({ municipality, barangay: '' }); + currentState = { + ...currentState, municipality, barangay: '', + }; + } + municipalitySelect = () => { + this.props.navigation.push( + 'MunicipalitySelection', + { + selected: this.state.municipality, + provCode: this.state.province.provCode, + onUpdateMunicipality: this.onUpdateMunicipality, + origin: 1, + }, + ); + } + + onUpdateBarangay = (barangay) => { + this.setState({ barangay }); + currentState = { ...currentState, barangay }; + } + barangaySelect = () => { + this.props.navigation.push( + 'BarangaySelection', + { + selected: this.state.barangay, + citymunCode: this.state.municipality.citymunCode, + onUpdateBarangay: this.onUpdateBarangay, + origin: 1, + }, + ); + } + // Current Address + onUpdateCRegion = (region) => { + this.setState({ + cRegion: region, cProvince: '', cMunicipality: '', cBarangay: '', + }); + currentState = { + ...currentState, cRegion: region, cProvince: '', cMunicipality: '', cBarangay: '', + }; + } + cRegionSelect = () => { + this.props.navigation.push( + 'RegionSelection', + { + selected: this.state.cRegion, + onUpdateRegion: this.onUpdateCRegion, + origin: 1, + }, + ); + } + onUpdateCProvice = (province) => { + this.setState({ cProvince: province, cMunicipality: '', cBarangay: '' }); + currentState = { + ...currentState, cProvince: province, cMunicipality: '', cBarangay: '', + }; + } + cProvinceSelect = () => { + this.props.navigation.push( + 'ProvinceSelection', + { + selected: this.state.cProvince, + region: this.state.cRegion.regCode, + onUpdateProvice: this.onUpdateCProvice, + origin: 1, + }, + ); + } + onUpdateCMunicipality = (municipality) => { + this.setState({ cMunicipality: municipality, cBarangay: '' }); + currentState = { + ...currentState, cMunicipality: municipality, cBarangay: '', + }; + } + cMunicipalitySelect = () => { + this.props.navigation.push( + 'MunicipalitySelection', + { + selected: this.state.cMunicipality, + provCode: this.state.cProvince.provCode, + onUpdateMunicipality: this.onUpdateCMunicipality, + origin: 1, + }, + ); + } + onUpdateCBarangay = (barangay) => { + this.setState({ cBarangay: barangay }); + currentState = {...currentState, cBarangay: barangay }; + } + cBarangaySelect = () => { + this.props.navigation.push( + 'BarangaySelection', + { + selected: this.state.cBarangay, + citymunCode: this.state.cMunicipality.citymunCode, + onUpdateBarangay: this.onUpdateCBarangay, + origin: 1, + }, + ); + } + + onUpdateEthnic = (ethnicity) => { + this.setState({ ethnicity }); + currentState = { ...currentState, ethnicity }; + } + ethnicSelect = () => { + this.props.navigation.push( + 'EthnicSelection', + { + selected: this.state.ethnicity, + onUpdate: this.onUpdateEthnic, + origin: 1, + }, + ); + } + // onUpdateOccupation = (occupation) => { + // this.setState({ occupation }); + // currentState = {...currentState, occupation }; + // } + // occupationSelect = () => { + // this.props.navigation.push( + // 'OccupationSelection', + // { + // selected: this.state.occupation, + // onUpdate: this.onUpdateOccupation, + // origin: 1, + // }, + // ); + // } + onUpdateEducation = (education) => { + this.setState({ education }); + currentState = { ...currentState, education }; + } + educationSelect = () => { + this.props.navigation.push( + 'EducationSelection', + { + selected: this.state.education, + onUpdate: this.onUpdateEducation, + origin: 1, + }, + ); + } + onUpdateSector = (sector) => { + this.setState({ sector }); + currentState = { ...currentState, sector }; + } + sectorSelect = () => { + this.props.navigation.push( + 'SectorSelection', + { + selected: this.state.sector, + onUpdate: this.onUpdateSector, + origin: 1, + }, + ); + } + onUpdateMonthIncome = (monthlyIncome) => { + this.setState({ monthlyIncome }); + currentState = { ...currentState, monthlyIncome }; + } + monthIncomeSelect = () => { + this.props.navigation.push( + 'MonthIncomeSelection', + { + selected: this.state.monthlyIncome, + onUpdate: this.onUpdateMonthIncome, + origin: 1, + }, + ); + } + onUpdateHouseOwnership = (houseOwnership) => { + this.setState({ houseOwnership }); + currentState = { ...currentState, houseOwnership }; + } + houseOwnershipSelect = () => { + this.props.navigation.push( + 'HouseholdSelection', + { + selected: this.state.houseOwnership, + onUpdateHousehold: this.onUpdateHouseOwnership, + origin: 1, + }, + ); + } + onUpdateHealth = (healthCondition) => { + this.setState({ healthCondition }); + currentState = { ...currentState, healthCondition }; + } + healthSelect = () => { + this.props.navigation.push( + 'HealthSelection', + { + selected: this.state.healthCondition, + onUpdate: this.onUpdateHealth, + origin: 1, + }, + ); + } + onUpdateNatID = (nationalId) => { + this.setState({ nationalId }); + currentState = { ...currentState, nationalId }; + } + natIDSelect = () => { + this.props.navigation.push( + 'NatIDSelection', + { + selected: this.state.nationalId, + onUpdate: this.onUpdateNatID, + origin: 1, + }, + ); + } + + // onUpdateReliefAssitance = (reliefAssistance) => { + // this.setState({ reliefAssistance }); + // currentState = { ...currentState, reliefAssistance }; + // } + // reliefSelect = () => { + // this.props.navigation.push( + // 'ReliefSelection', + // { + // selected: this.state.reliefAssistance, + // onUpdate: this.onUpdateReliefAssitance, + // origin: 1, + // }, + // ); + // } + + onUpdateSuffix = (suffix) => { + this.setState({ suffix }); + currentState = { ...currentState, suffix }; + } + suffixSelect = () => { + this.props.navigation.push( + 'SuffixSelection', + { + selected: this.state.suffix, + onUpdate: this.onUpdateSuffix, + origin: 1, + }, + ); + } + + onUpdateGender = (sex) => { + this.setState({ sex }); + currentState = { ...currentState, sex }; + } + genderSelect = () => { + this.props.navigation.push( + 'GenderSelection', + { + selected: this.state.sex, + onUpdate: this.onUpdateGender, + origin: 1, + }, + ); + } + onUpdateProgram = (program) => { + this.setState({ program }); + currentState = { ...currentState, program }; + } + programSelect = () => { + this.props.navigation.push( + 'ProgramSelection', + { + selected: this.state.program, + onUpdate: this.onUpdateProgram, + origin: 2, + }, + ); + } + + processSourceImage = (rawImage) => { + this.setState({ }, async () => { + try { + let sourceUri = rawImage; + Image.getSize(sourceUri, async (w, h) => { + const safeSize = PixelRatio.roundToNearestPixel(1000); // approximate preferred max dimension size + let width = w; + let height = h; + + if (width > safeSize && width > height) { + const percentageDiff = (safeSize / width); + width = safeSize; + height = PixelRatio.roundToNearestPixel(height * percentageDiff); + } else if (height > safeSize && height > width) { + const percentageDiff = (safeSize / height); + height = safeSize; + width = PixelRatio.roundToNearestPixel(width * percentageDiff); + } + const resizedImage = await ImageResizer.createResizedImage(sourceUri, width, height, 'JPEG', 100, 0, null); + sourceUri = resizedImage.uri; + this.setState({ avatarPhoto: sourceUri }); + currentState = { ...currentState, avatarPhoto: sourceUri }; + }, (e) => { + console.log('error2: ', e); + }); + } catch (e) { + console.log('error1: ', e); + } + }); + }; + + launchImagePicker = () => { + this.props.launchImagePicker({ + options: { + ...PickerOptions([]), + maximumImageCount: 1, + imageSelectionLimit: i18n.t('contents.imageSelectionLimit', { count: 1 }), + mediaType: 'image', + allowsMultipleSelection: '0', + }, + resolve: (imagesPicked) => { + if (imagesPicked && imagesPicked[0] && imagesPicked[0].uri) { + console.log('IMAGE: ', imagesPicked[0].uri); + this.processSourceImage(imagesPicked[0].uri); + } + }, + }); + } + + onChangeTextDob = (text) => { + const isDeleting = (text.length < this.state.dob.length); + let tempText = text.replace(/-/g, ''); + let dobColor = basicColor.wrikeBg; + // eslint-disable-next-line no-restricted-globals + if (!isNaN(tempText)) { + if (tempText.length >= 2) { + if ((parseInt(tempText.substr(0, 2), 0) >= 13) + || (parseInt(tempText.substr(2, 2), 0) >= 32) + || (parseInt(tempText.substr(4, 4), 0) > (new Date()).getFullYear())) { + dobColor = basicColor.red; + } + } + } else { + dobColor = basicColor.red; + } + if (!isDeleting && tempText.length === 2) { + tempText = [tempText.slice(0, 2), '-', tempText.slice(2)].join(''); + } else if (!isDeleting && !_.isEqual(dobColor, basicColor.red) && tempText.length === 4) { + tempText = [tempText.slice(0, 2), '-', tempText.slice(2)].join('').concat('-'); + } else { + tempText = text; + } + currentState = { ...currentState, dobError: (_.isEqual(dobColor, basicColor.red)) }; + this.setState({ dob: tempText, dobColor }); + } + + render() { + // console.log('render: ', this.state.avatarPhoto); + + const { + region, province, municipality, barangay, + cRegion, cProvince, cMunicipality, cBarangay, + lastName, firstName, middleName, suffix, + sex, ethnicity, dob, + occupation, sector, monthlyIncome, + education, houseOwnership, healthCondition, + program, nationalId, idNumber, + remarks, mobileNumber, emailAddress, SACFormID, + } = this.state; + // const hasError = (!_.isEmpty(currentState.gotError)); + return ( + + + + Basic Information + + + SAC Form ID + + this.setState({ SACFormID: text })} + /> + + Last Name + + this.setState({ lastName: text })} + /> + + First Name + + this.setState({ firstName: text })} + /> + + Middle Name + + this.setState({ middleName: text })} + /> + Suffix + + Sex + + + Date of Birth + + + + Mobile Number + + { if (_.isEmpty(mobileNumber)) { this.setState({ mobileNumber: '+63' }); } }} + onChange={text => { this.setState({ mobileNumber: text }); }} + /> + + Email Address + + this.setState({ emailAddress: text })} + /> + + Educational Attainment + + + + {/* Place of Birth */} + Place of Birth + + + Region + + + + Province + + + + Municipality + + + + Barangay + + + + + + + + {/* Current Address */} + Current Address + + + Region + + + + Province + + + + Municipality + + + + Barangay + + + {/* Educational Background */} + Other details + + + Type of Ethnicity + + + + Occupation + this.setState({ occupation: text })} + /> + + + Sector + + + + Monthly Income + + + + House Ownership + + + + Health Condition + + + + Government ID + + + { (!_.isEqual(nationalId, 'None')) && + + + Presented ID Number + + this.setState({ idNumber: text })} + /> + + } + + I want to apply Government Benefit Program + + + {/* { (_.isEqual(program, 'Pantawid')) && + + + DSWD Program ID + + this.setState({ programID: text })} + /> + + } */} + {/* + Relief Assitance Received from Government + + */} + + + Remarks + + this.setState({ remarks: text })} + /> + + {/* + + Add Profile Photo + + + + + + + + */} + + + {i18n.tWithComponent('users.paalala')} + + + + { (this.props.isLoading) && + + + + } + + +