diff --git a/README.md b/README.md index b8dcc00fa3..428eec1675 100644 --- a/README.md +++ b/README.md @@ -15,8 +15,6 @@ Want to say thanks? Click the ⭐ at the top of the page. If you are only interested in running the latest version and not contributing to the source code, you don't need to clone this repo. You can get the latest version through npm. -**Please Note:** While the Actual repository holds source code for the mobile applications that were supported when Actual was closed source, these are no longer supported on the Open Source version of Actual. - ### The easy way: using a server (recommended) The easiest way to get Actual running is to use the [actual-server](https://github.com/actualbudget/actual-server) project. That is the server for syncing changes across devices, and it comes with the latest version of Actual. The server will provide both the web project and a server for syncing. diff --git a/bin/package b/bin/package index c403ae9a98..248de470bb 100755 --- a/bin/package +++ b/bin/package @@ -82,8 +82,6 @@ fi yarn patch-package -yarn workspace mobile patch-package - yarn workspace loot-core build:node yarn workspace @actual-app/web build diff --git a/package.json b/package.json index 1dcd496822..f71dfadcda 100644 --- a/package.json +++ b/package.json @@ -30,7 +30,7 @@ "rebuild-electron": "./node_modules/.bin/electron-rebuild -f -m ./packages/loot-core", "rebuild-node": "yarn workspace loot-core rebuild", "lint": "yarn workspaces foreach --verbose run lint --max-warnings 0", - "postinstall": "rm -rf ./packages/loot-design/node_modules/react && rm -rf ./packages/mobile/node_modules/react && rm -rf ./node_modules/react-native && patch-package" + "postinstall": "rm -rf ./packages/loot-design/node_modules/react && rm -rf ./node_modules/react-native && patch-package" }, "devDependencies": { "cross-env": "^5.1.5", @@ -39,6 +39,7 @@ "patch-package": "^6.1.2", "prettier": "^1.18.1", "pretty-quick": "^1.11.1", + "react-refresh": "^0.14.0", "shelljs": "^0.8.2", "source-map-support": "^0.5.21" }, diff --git a/packages/desktop-client/config/paths.js b/packages/desktop-client/config/paths.js index 859cdbddfe..e08021faba 100644 --- a/packages/desktop-client/config/paths.js +++ b/packages/desktop-client/config/paths.js @@ -38,15 +38,11 @@ function getServedPath(appPackageJson) { return ensureSlash(servedUrl, true); } -const isReactNative = process.env.IS_REACT_NATIVE; -const isGenericBrowser = process.env.IS_GENERIC_BROWSER; - // JWL: Resolve to mobile suffixes before resolving to .js. This // makes it load real React Native components, but when needed // .web.js can be used to force a web version. -const moduleFileExtensions = (isGenericBrowser ? ['browser.js'] : []) +const moduleFileExtensions = ['browser.js'] .concat(['web.mjs', 'web.js']) - .concat(isReactNative ? ['ios.js', 'mobile.js'] : []) .concat(['mjs', 'js', 'json', 'web.jsx', 'jsx']); // Resolve file paths in the same order as webpack @@ -91,6 +87,4 @@ module.exports = { aliases: getAliases(resolveApp('package.json')) }; - - module.exports.moduleFileExtensions = moduleFileExtensions; diff --git a/packages/desktop-client/src/components/accounts/MobileAccount.js b/packages/desktop-client/src/components/accounts/MobileAccount.js index 60a4491e50..10e71f4fcc 100644 --- a/packages/desktop-client/src/components/accounts/MobileAccount.js +++ b/packages/desktop-client/src/components/accounts/MobileAccount.js @@ -24,7 +24,6 @@ import { withThemeColor } from 'loot-design/src/util/withThemeColor'; import SyncRefresh from '../SyncRefresh'; import { default as AccountDetails } from './MobileAccountDetails'; -// import FocusAwareStatusBar from 'loot-design/src/components/mobile/FocusAwareStatusBar'; const getSchedulesTransform = memoizeOne((id, hasSearch) => { let filter = queries.getAccountFilter(id, '_account'); @@ -236,7 +235,6 @@ function Account(props) { - {/* // TODO: how to do this on web? */} {prependTransactions => prependTransactions == null ? null : ( diff --git a/packages/import-ynab4/importer.ios.js b/packages/import-ynab4/importer.ios.js deleted file mode 100644 index 168bd2509b..0000000000 --- a/packages/import-ynab4/importer.ios.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - importBuffer: () => {} -}; diff --git a/packages/loot-core/bin/build-mobile b/packages/loot-core/bin/build-mobile deleted file mode 100755 index 6130cf342b..0000000000 --- a/packages/loot-core/bin/build-mobile +++ /dev/null @@ -1,71 +0,0 @@ -#!/bin/bash -e - -ROOT=`dirname $0` - -VERSION="" -DIST="" -RELEASE="" -NODE_ROOT="../../mobile/nodejs-assets/nodejs-project/" - -"$ROOT"/copy-migrations -cd "$ROOT" - -POSITIONAL=() -while [[ $# -gt 0 ]]; do - key="$1" - - case $key in - --version) - VERSION="$2" - shift - shift - ;; - --dist) - DIST="$2" - shift - shift - ;; - --beta) - RELEASE="beta" - shift - ;; - --release) - RELEASE="production" - shift - ;; - *) - POSITIONAL+=("$1") - shift - ;; - esac -done -set -- "${POSITIONAL[@]}" - -if ([ -z "$VERSION" ] || [ -z "$DIST" ]) && [ -n "$RELEASE" ]; then - echo "Version and dist are required if making a release" - exit 1 -fi - -../node_modules/.bin/webpack --config ../webpack/webpack.mobile.config.js --progress - -cp ../lib-dist/bundle.mobile.js "$NODE_ROOT/bundle.mobile.js" - -SENTRY="../../mobile/node_modules/.bin/sentry-cli" - -if [ -n "$RELEASE" ]; then - git push origin master - - # Upload sourcemaps for mobile - RELEASE_NAME="com.shiftreset.actual@$VERSION+$DIST" - $SENTRY releases -o shift-reset-llc -p actual-mobile set-commits "$RELEASE_NAME" --auto - - $SENTRY releases -o shift-reset-llc -p actual-mobile files "$RELEASE_NAME" \ - delete app:///bundle.mobile.js - - $SENTRY releases -o shift-reset-llc -p actual-mobile files "$RELEASE_NAME" \ - delete app:///bundle.mobile.js.map - - $SENTRY releases -o shift-reset-llc -p actual-mobile files "$RELEASE_NAME" \ - upload-sourcemaps --no-rewrite \ - --dist "$DIST" --url-prefix 'app:///' ../lib-dist/bundle.mobile* -fi diff --git a/packages/loot-core/bin/copy-migrations b/packages/loot-core/bin/copy-migrations index 7e3d3a3d21..ebd0d00998 100755 --- a/packages/loot-core/bin/copy-migrations +++ b/packages/loot-core/bin/copy-migrations @@ -12,9 +12,3 @@ $( cp ../../loot-core/default-db.sqlite ./data; cd data && find * -type f | sort > ../data-file-index.txt; ) - -# Copy them to the mobile app -rsync -av --delete ../migrations/ ../../mobile/nodejs-assets/nodejs-project/data/migrations - - - diff --git a/packages/loot-core/jest.config.js b/packages/loot-core/jest.config.js index d41b57599c..a00e1a2a6f 100644 --- a/packages/loot-core/jest.config.js +++ b/packages/loot-core/jest.config.js @@ -1,10 +1,11 @@ -const isReactNative = process.env.REACT_APP_IS_REACT_NATIVE; - module.exports = { preset: 'ts-jest/presets/js-with-ts-esm', - moduleFileExtensions: ['testing.js', 'electron.js'] - .concat(isReactNative ? ['ios.js', 'mobile.js'] : []) - .concat(['mjs', 'js', 'ts', 'json']), + moduleFileExtensions: ['testing.js', 'electron.js'].concat([ + 'mjs', + 'js', + 'ts', + 'json' + ]), setupFilesAfterEnv: ['/src/mocks/setup.js'], testEnvironment: 'node', testPathIgnorePatterns: ['/node_modules/', '/lib/', '.+/index.web.test.js'], diff --git a/packages/loot-core/src/client/platform.mobile.js b/packages/loot-core/src/client/platform.mobile.js deleted file mode 100644 index 731c378dfa..0000000000 --- a/packages/loot-core/src/client/platform.mobile.js +++ /dev/null @@ -1,7 +0,0 @@ -import { Platform } from 'react-native'; -export default { - // Simulate ios on the web - OS: Platform.OS === 'web' ? 'ios' : Platform.OS, - env: 'mobile', - isReactNativeWeb: Platform.OS === 'web' -}; diff --git a/packages/loot-core/src/platform/client/fetch/index.mobile.js b/packages/loot-core/src/platform/client/fetch/index.mobile.js deleted file mode 100644 index 133a09037a..0000000000 --- a/packages/loot-core/src/platform/client/fetch/index.mobile.js +++ /dev/null @@ -1,96 +0,0 @@ -const uuid = require('../../uuid'); - -let serverThread; -let isReady = false; -let messageQueue = []; -let replyHandlers = new Map(); -let listeners = new Map(); - -function init(thread) { - serverThread = thread; - - serverThread.onmessage = message => { - // Wait for the backend to initialize and become "ready" - if (!isReady) { - if (message.type === 'ready') { - isReady = true; - - // Send any messages that were queued while we weren't ready - if (messageQueue.length > 0) { - messageQueue.forEach(msg => serverThread.postMessage(msg)); - messageQueue = []; - } - } - return; - } - - const msg = message; - - if (msg.type === 'error') { - // An error happened while handling a message so cleanup the - // current reply handler. We don't care about the actual error - - // generic backend errors are handled separately and if you want - // more specific handling you should manually forward the error - // through a normal reply. - const { id } = msg; - replyHandlers.delete(id); - } else if (msg.type === 'reply') { - const { id, result } = msg; - - const handler = replyHandlers.get(id); - if (handler) { - replyHandlers.delete(id); - handler.resolve(result); - } - } else if (msg.type === 'push') { - const { name, args } = msg; - - const listens = listeners.get(name); - if (listens) { - listens.forEach(listener => { - listener(args); - }); - } - } else { - throw new Error('Unknown message type: ' + JSON.stringify(msg)); - } - }; -} - -function send(name, args, { catchErrors = false } = {}) { - return new Promise((resolve, reject) => { - const id = uuid.v4Sync(); - replyHandlers.set(id, { resolve, reject }); - - if (isReady) { - serverThread.postMessage(JSON.stringify({ id, name, args, catchErrors })); - } else { - messageQueue.push(JSON.stringify({ id, name, args, catchErrors })); - } - }); -} - -function sendCatch(name, args) { - return send(name, args, { catchErrors: true }); -} - -function listen(name, cb) { - if (!listeners.get(name)) { - listeners.set(name, []); - } - listeners.get(name).push(cb); - - return () => { - let arr = listeners.get(name); - listeners.set( - name, - arr.filter(cb_ => cb_ !== cb) - ); - }; -} - -function unlisten(name) { - listeners.set(name, []); -} - -module.exports = { init, send, sendCatch, listen, unlisten }; diff --git a/packages/loot-core/src/platform/exceptions/index.android.js b/packages/loot-core/src/platform/exceptions/index.android.js deleted file mode 100644 index 520238a89d..0000000000 --- a/packages/loot-core/src/platform/exceptions/index.android.js +++ /dev/null @@ -1,11 +0,0 @@ -import * as Sentry from 'mobile/node_modules/@sentry/react-native'; - -export function captureException(exc) { - console.log('[Exception]', exc); - Sentry.captureException(exc); -} - -export function captureBreadcrumb(breadcrumb) { - console.log('[Breadcrumb]', breadcrumb); - Sentry.addBreadcrumb(breadcrumb); -} diff --git a/packages/loot-core/src/platform/exceptions/index.ios.js b/packages/loot-core/src/platform/exceptions/index.ios.js deleted file mode 100644 index 520238a89d..0000000000 --- a/packages/loot-core/src/platform/exceptions/index.ios.js +++ /dev/null @@ -1,11 +0,0 @@ -import * as Sentry from 'mobile/node_modules/@sentry/react-native'; - -export function captureException(exc) { - console.log('[Exception]', exc); - Sentry.captureException(exc); -} - -export function captureBreadcrumb(breadcrumb) { - console.log('[Breadcrumb]', breadcrumb); - Sentry.addBreadcrumb(breadcrumb); -} diff --git a/packages/loot-core/src/platform/server/connection/index.mobile.js b/packages/loot-core/src/platform/server/connection/index.mobile.js deleted file mode 100644 index 02e1307456..0000000000 --- a/packages/loot-core/src/platform/server/connection/index.mobile.js +++ /dev/null @@ -1,84 +0,0 @@ -let rn_bridge = require('rn-bridge'); - -const { runHandler } = require('../../../server/mutators'); -let { captureException } = require('../../exceptions'); - -function coerceError(error) { - if (error.type && error.type === 'APIError') { - return error; - } - - return { type: 'InternalError', message: error.message }; -} - -function init(_, handlers) { - rn_bridge.channel.on('message', msg => { - msg = JSON.parse(msg); - - if (msg.type === 'init') { - rn_bridge.channel.send(JSON.stringify({ type: 'ready' })); - return; - } - - let { id, name, args, url, catchErrors } = msg; - - if (handlers[name]) { - runHandler(handlers[name], args, { url, name }).then( - result => { - if (catchErrors) { - result = { data: result, error: null }; - } - - rn_bridge.channel.send(JSON.stringify({ type: 'reply', id, result })); - }, - nativeError => { - let error = coerceError(nativeError); - - // See index.electron.js to explain this - if (name.startsWith('api/')) { - rn_bridge.channel.send( - JSON.stringify({ type: 'reply', id, error }) - ); - } else if (catchErrors) { - rn_bridge.channel.send( - JSON.stringify({ - type: 'reply', - id, - result: { data: null, error } - }) - ); - } else { - rn_bridge.channel.send(JSON.stringify({ type: 'error', id })); - } - - // Only report internal errors - if (error.type === 'InternalError') { - captureException(nativeError); - } - } - ); - } else { - console.warn('Unknown method: ' + name); - rn_bridge.channel.send( - JSON.stringify({ - type: 'reply', - id, - result: null, - error: { type: 'APIError', message: 'Unknown method: ' + name } - }) - ); - } - }); -} - -function getNumClients() { - return 1; -} - -function send(name, args) { - rn_bridge.channel.send(JSON.stringify({ type: 'push', name, args })); -} - -function tapIntoAPI() {} - -module.exports = { init, send, getNumClients, tapIntoAPI }; diff --git a/packages/loot-core/src/platform/server/fs/index.mobile.js b/packages/loot-core/src/platform/server/fs/index.mobile.js deleted file mode 100644 index 53ec5b2ed9..0000000000 --- a/packages/loot-core/src/platform/server/fs/index.mobile.js +++ /dev/null @@ -1,12 +0,0 @@ -let path = require('path'); - -let fs = require('./index.electron.js'); - -// On mobile, the backend runs from a single bundle mounted at the -// root where there is a `data` folder that contains these files -module.exports = { - ...fs, - bundledDatabasePath: path.join(__dirname, 'data/default-db.sqlite'), - migrationsPath: path.join(__dirname, 'data/migrations'), - demoBudgetPath: path.join(__dirname, 'data/demo-budget') -}; diff --git a/packages/loot-core/src/platform/server/log/index.mobile.js b/packages/loot-core/src/platform/server/log/index.mobile.js deleted file mode 100644 index 6adfe53620..0000000000 --- a/packages/loot-core/src/platform/server/log/index.mobile.js +++ /dev/null @@ -1,8 +0,0 @@ -export default { - info: (...args) => { - console.log(...args); - }, - warn: (...args) => { - console.warn(...args); - } -}; diff --git a/packages/loot-core/src/platform/uuid/index.mobile.js b/packages/loot-core/src/platform/uuid/index.mobile.js deleted file mode 100644 index edcc06b28c..0000000000 --- a/packages/loot-core/src/platform/uuid/index.mobile.js +++ /dev/null @@ -1,28 +0,0 @@ -module.exports = { - v4: function v4() { - throw new Error('v4 not implemented'); - }, - - v4Sync: () => { - // TODO: Properly hook in a real v4Sync implementation - function s4() { - return Math.floor((1 + Math.random()) * 0x10000) - .toString(16) - .substring(1); - } - return ( - s4() + - s4() + - '-' + - s4() + - '-' + - s4() + - '-' + - s4() + - '-' + - s4() + - s4() + - s4() - ); - } -}; diff --git a/packages/loot-core/src/server/accounts/importer.mobile.js b/packages/loot-core/src/server/accounts/importer.mobile.js deleted file mode 100644 index 8f28529199..0000000000 --- a/packages/loot-core/src/server/accounts/importer.mobile.js +++ /dev/null @@ -1,9 +0,0 @@ -export function importYNAB(filepath) {} - -export function findBudgetsInDir(dir) { - return []; -} - -export function findBudgets() { - return []; -} diff --git a/packages/loot-core/src/server/accounts/parse-file.mobile.js b/packages/loot-core/src/server/accounts/parse-file.mobile.js deleted file mode 100644 index 1cdb859d9f..0000000000 --- a/packages/loot-core/src/server/accounts/parse-file.mobile.js +++ /dev/null @@ -1,4 +0,0 @@ -export async function parseFile(accountId, filepath) { - // Unimplemented - return { errors: [], added: [] }; -} diff --git a/packages/loot-core/src/server/platform.mobile.js b/packages/loot-core/src/server/platform.mobile.js deleted file mode 100644 index f9f2c62468..0000000000 --- a/packages/loot-core/src/server/platform.mobile.js +++ /dev/null @@ -1,5 +0,0 @@ -export default { - isMobile: true, - isWeb: false, - isDesktop: false -}; diff --git a/packages/loot-core/src/server/polyfills.mobile.js b/packages/loot-core/src/server/polyfills.mobile.js deleted file mode 100644 index 895dd8c7cc..0000000000 --- a/packages/loot-core/src/server/polyfills.mobile.js +++ /dev/null @@ -1,2 +0,0 @@ -// Mobile needs this -import 'core-js/modules/es.object.from-entries'; diff --git a/packages/loot-core/src/server/undo.mobile.js b/packages/loot-core/src/server/undo.mobile.js deleted file mode 100644 index 883a1710ca..0000000000 --- a/packages/loot-core/src/server/undo.mobile.js +++ /dev/null @@ -1,12 +0,0 @@ -export function appendMessages(messages, oldData) {} -export function clearUndo() {} -export async function undo() {} -export async function redo() {} - -export function withUndo(func, meta) { - return func(); -} - -export function undoable(func) { - return func; -} diff --git a/packages/loot-core/webpack/webpack.mobile.config.js b/packages/loot-core/webpack/webpack.mobile.config.js deleted file mode 100644 index 9a2eaee552..0000000000 --- a/packages/loot-core/webpack/webpack.mobile.config.js +++ /dev/null @@ -1,42 +0,0 @@ -let path = require('path'); -let webpack = require('webpack'); - -module.exports = { - mode: process.env.NODE_ENV === 'development' ? 'development' : 'production', - target: 'node', - entry: path.join(__dirname, '../src/server/main.js'), - output: { - path: path.resolve(path.join(__dirname, '/../lib-dist')), - filename: 'bundle.mobile.js', - libraryTarget: 'commonjs2' - }, - resolve: { - extensions: ['.mobile.js', '.electron.js', '.js', '.json'], - alias: { - 'perf-deets': require.resolve('perf-deets/noop') - } - }, - externals: ['better-sqlite3', 'rn-bridge'], - module: { - rules: [ - { - test: /\.m?js$/, - use: { - loader: 'babel-loader', - options: { - presets: ['babel-preset-jwl-app'] - } - } - } - ] - }, - plugins: [ - new webpack.SourceMapDevToolPlugin({ - filename: 'bundle.mobile.js.map', - sourceRoot: 'app://' - }) - ], - node: { - __dirname: false - } -}; diff --git a/packages/loot-design/jest.rn.config.js b/packages/loot-design/jest.rn.config.js deleted file mode 100644 index bb03d8b787..0000000000 --- a/packages/loot-design/jest.rn.config.js +++ /dev/null @@ -1,29 +0,0 @@ -module.exports = { - moduleFileExtensions: [ - 'web.js', - 'ios.js', - 'mobile.js', - 'mjs', - 'js', - 'ts', - 'json' - ], - moduleDirectories: ['/node_modules', 'node_modules'], - testEnvironment: 'jsdom', - setupFilesAfterEnv: ['/src/setupTests.js'], - testMatch: ['/src/components/mobile/**/*.test.js'], - testPathIgnorePatterns: [ - '/node_modules/(?!loot-core).+\\.js$' - ], - moduleNameMapper: { - '^react-native$': 'react-native-web', - // Ignore react-art. react-native-web tries to pull it in but we - // never use or need it, and it throws errors in jsdom - '^react-art$': 'identity-obj-proxy', - '^react-native-gesture-handler$': '/src/guide/mocks/react-native-gesture-handler.js', - '^react-native-reanimated$': '/src/guide/mocks/react-native-reanimated.js' - }, - globals: { - IS_REACT_NATIVE: true - } -}; diff --git a/packages/loot-design/package.json b/packages/loot-design/package.json index 4d9a147a8e..7a6ad51d10 100644 --- a/packages/loot-design/package.json +++ b/packages/loot-design/package.json @@ -42,25 +42,22 @@ "react-dnd": "^10.0.2", "react-merge-refs": "^1.1.0", "react-modal": "3.4.4", + "react-native": "0.65.1", + "react-native-gesture-handler": "1.10.3", "react-spring": "^8.0.27", "react-virtualized-auto-sizer": "^1.0.2" }, "scripts": { "start": "react-scripts start", - "start:mobile": "IS_REACT_NATIVE=1 react-scripts start", "test": "npm-run-all -cp 'test:*'", "test:web": "jest -c jest.config.js", - "test:react-native": "jest -c jest.rn.config.js", "lint": "eslint src" }, "homepage": "./", "manifest": "manifest.json", "pathAliases": { - "react-native-gesture-handler": "./src/guide/mocks/react-native-gesture-handler.js", - "react-native-reanimated": "./src/guide/mocks/react-native-reanimated.js", "react-art": "../../node_modules/node-noop", - "react-native": "./node_modules/react-native-web", - "react-native-status-bar-height": "./src/guide/mocks/react-native-status-bar-height.js" + "react-native": "./node_modules/react-native-web" }, "browserslist": [ "electron 3.0" diff --git a/packages/loot-design/src/components/Text.mobile.js b/packages/loot-design/src/components/Text.mobile.js deleted file mode 100644 index 8fc21e54ae..0000000000 --- a/packages/loot-design/src/components/Text.mobile.js +++ /dev/null @@ -1,3 +0,0 @@ -import { Text } from 'react-native'; - -export default Text; diff --git a/packages/loot-design/src/components/View.mobile.js b/packages/loot-design/src/components/View.mobile.js deleted file mode 100644 index f20f2993ac..0000000000 --- a/packages/loot-design/src/components/View.mobile.js +++ /dev/null @@ -1,3 +0,0 @@ -import { View } from 'react-native'; - -export default View; diff --git a/packages/loot-design/src/components/mobile/AmountInput.js b/packages/loot-design/src/components/mobile/AmountInput.js deleted file mode 100644 index 89fa655b98..0000000000 --- a/packages/loot-design/src/components/mobile/AmountInput.js +++ /dev/null @@ -1,653 +0,0 @@ -import React from 'react'; -import { - View, - Text, - Animated, - ScrollView, - Keyboard, - StyleSheet -} from 'react-native'; -import { RectButton } from 'react-native-gesture-handler'; - -import mitt from 'mitt'; - -import Platform from 'loot-core/src/client/platform'; -import { - toRelaxedNumber, - amountToCurrency, - getNumberFormat -} from 'loot-core/src/shared/util'; - -import { colors } from '../../style'; -import MathIcon from '../../svg/Math'; -import Add from '../../svg/v1/Add'; -import Equals from '../../svg/v1/Equals'; -import Subtract from '../../svg/v1/Subtract'; -import { KeyboardButton } from './common'; -import TextInputWithAccessory from './TextInputWithAccessory'; - -function getValue(state) { - const { value, isNegative } = state; - return isNegative ? -value : value; -} - -// On Android, the keyboard accessory view may not have been mounted -// yet. Unfortunately, that means we need to track the "reset" event -// so when it mounts it can read it. -let _lastResetEvent = null; - -export class MathOperations extends React.Component { - constructor(props) { - super(props); - this.state = { - showMath: false, - currentOp: null, - isNegative: _lastResetEvent ? _lastResetEvent.isNegative : false - }; - } - - componentDidMount() { - Keyboard.addListener('keyboardDidHide', e => { - this.setState({ showMath: false, currentOp: null }); - }); - - const clearOperation = () => this.setState({ currentOp: null }); - const reset = ({ isNegative }) => { - this.setState({ isNegative, currentOp: null }); - }; - - this.props.emitter.on('clear-operation', clearOperation); - this.props.emitter.on('set-negative', this.setNegative); - this.props.emitter.on('reset', reset); - this.cleanup = () => { - this.props.emitter.off('clear-operation', clearOperation); - this.props.emitter.off('set-negative', this.setNegative); - this.props.emitter.off('reset', reset); - }; - } - - componentWillUnmount() { - this.cleanup(); - } - - setNegative = flag => { - this.setState({ isNegative: flag }); - this.props.emitter.emit('negative-changed', flag); - }; - - onShowMath = () => { - this.setState({ showMath: true }); - }; - - onStartMath = op => { - this.setState({ currentOp: op }); - this.props.emitter.emit('start-math', op); - }; - - onToggleNegative = () => { - this.setNegative(!this.state.isNegative); - }; - - render() { - const { showMath, currentOp, isNegative } = this.state; - - return ( - - {showMath ? ( - - this.setState({ showMath: false })} - style={{ marginRight: 5, flexGrow: 0, paddingHorizontal: 7 }} - > - - - this.onStartMath('+')} - highlighted={currentOp === '+'} - style={{ marginRight: 5, flex: 1, paddingHorizontal: 0 }} - data-testid="add" - > - - - this.onStartMath('-')} - highlighted={currentOp === '-'} - style={{ marginRight: 5, flex: 1, paddingHorizontal: 0 }} - data-testid="subtract" - > - - - this.onStartMath(null)} - style={{ flex: 1, paddingHorizontal: 0 }} - data-testid="equal" - > - - - - ) : ( - - this.onToggleNegative()} - data-testid="negative" - > - - - - - - - )} - - ); - } -} - -export const AmountAccessoryContext = React.createContext(mitt()); - -export function AmountAccessoryView() { - return ( - - {context => ( - - - - context.emit('done')} - data-testid="done" - > - Done - - - )} - - ); -} - -class AmountInput extends React.Component { - static getDerivedStateFromProps(props, state) { - return { editing: state.text !== '' || state.editing }; - } - - constructor(props) { - super(props); - this.backgroundValue = new Animated.Value(0); - - this.id = Math.random() - .toString() - .slice(0, 5); - this.state = { - editing: false, - text: '', - // These are actually set from the props when the field is - // focused - value: 0, - isNegative: false - }; - } - - componentDidMount() { - if (this.props.focused) { - this.focus(); - } - } - - componentWillUnmount() { - if (this.removeListeners) { - this.removeListeners(); - } - } - - componentDidUpdate(prevProps, prevState) { - if (!prevProps.focused && this.props.focused) { - this.focus(); - } else if (prevProps.focused && !this.props.focused) { - if (this.animating) { - this.animating = false; - this.animation.stop(); - this.backgroundValue.setValue(0); - } - } - - if (prevProps.value !== this.props.value) { - this.setState({ - editing: false, - text: '', - ...this.getInitialValue() - }); - } - } - - parseText() { - return toRelaxedNumber( - this.state.text.replace(/[,.]/, getNumberFormat().separator) - ); - } - - animate() { - this.animation = Animated.sequence([ - Animated.timing(this.backgroundValue, { - toValue: 1, - duration: 1200, - useNativeDriver: true - }), - Animated.timing(this.backgroundValue, { - toValue: 0, - duration: 1200, - useNativeDriver: true - }) - ]); - - this.animation.start(({ finished }) => { - if (finished) { - this.animate(); - } - }); - } - - onKeyPress = e => { - if (e.nativeEvent.key === 'Backspace' && this.state.text === '') { - this.setState({ editing: true }); - } - }; - - getInitialValue() { - // We set the initial value here because it could have changed - // from props or something - let isNegative; - if (this.props.zeroIsNegative) { - isNegative = this.props.value <= 0; - } else { - isNegative = this.props.value < 0; - } - - return { - value: Math.abs(this.props.value), - isNegative - }; - } - - focus() { - this.input.focus(); - - if (!this.animating) { - this.animating = true; - this.animate(); - } - - const initialState = this.getInitialValue(); - this.setState(initialState); - - this.addEventListeners(); - - if (Platform.OS === 'android') { - // On Android, the keyboard accessory view might not be mounted - // yet, so we keep track of the last reset event - _lastResetEvent = { isNegative: initialState.isNegative }; - this.props.context.emit('reset', _lastResetEvent); - } else { - this.props.context.emit('reset', { isNegative: initialState.isNegative }); - } - } - - addEventListeners() { - if (this.removeListeners) { - this.removeListeners(); - } - - this.props.context.on('start-math', this.onStartMath); - this.props.context.on('negative-changed', this.onSetNegative); - // This will be called in `onBlur` - this.removeListeners = () => { - this.props.context.off('start-math', this.onStartMath); - this.props.context.off('negative-changed', this.onSetNegative); - this.removeListeners = null; - }; - } - - onSetNegative = flag => { - this.setState({ isNegative: flag }); - }; - - onStartMath = op => { - this.applyText(); - this.setState({ currentMathOp: op }); - }; - - applyText = () => { - const { currentMathOp, editing, isNegative } = this.state; - let newValue; - - switch (currentMathOp) { - case '+': - newValue = getValue(this.state) + this.parseText(); - break; - case '-': - newValue = getValue(this.state) - this.parseText(); - break; - default: { - const parsed = this.parseText(); - newValue = editing - ? isNegative - ? -parsed - : parsed - : getValue(this.state); - } - } - - this.setState({ - value: Math.abs(newValue), - isNegative: newValue < 0, - editing: false, - text: '', - currentMathOp: null - }); - - return newValue; - }; - - onBlur = () => { - const value = this.applyText(); - this.props.onBlur && this.props.onBlur(value); - if (this.removeListeners) { - this.removeListeners(); - } - }; - - renderNegative = () => { - if (this.state.isNegative) { - return '-'; - } - return ''; - }; - - renderMathOp = () => { - switch (this.state.currentMathOp) { - case '+': - return '+'; - case '-': - return '-'; - default: - if (this.state.isNegative) { - return '-'; - } - } - - return ''; - }; - - onChangeText = text => { - let { currentMathOp, isNegative } = this.state; - let { onChange } = this.props; - - this.setState({ text }); - - // We only want to notify anyone listening if we currently aren't - // doing math. Otherwise they'd just the math value that is being - // entered. Also, we need to manually apply the negative. This is - // important if a user is saving this value instead of getting it - // on blur - if (currentMathOp == null && onChange) { - onChange(isNegative ? '-' + text : text); - } - }; - - render() { - const { style, textStyle, scrollIntoView, animationColor } = this.props; - const { editing, value, text } = this.state; - - let input = ( - (this.input = el)} - value={text} - accessoryId={this.props.inputAccessoryViewID || 'amount'} - keyboardType={Platform.isReactNativeWeb ? null : 'numeric'} - selectTextOnFocus={false} - autoCapitalize="none" - onChangeText={this.onChangeText} - onBlur={this.onBlur} - // Normally, focus is controlled outside of this component - // this is a "hidden" input and the user can't directly tap - // it. On blur, it removes event listeners. But let's make - // this work in case the input gets focused again by adding - // back the listeners (this is necessary for the web target) - onFocus={() => this.addEventListeners()} - onKeyPress={this.onKeyPress} - data-testid="amount-input" - style={{ flex: 1, textAlign: 'center' }} - /> - ); - - return ( - - {scrollIntoView ? ( - - {input} - - ) : ( - - {input} - - )} - - - - {editing - ? this.renderMathOp() + text - : this.renderNegative() + amountToCurrency(value)} - - - ); - } -} - -export default function AmountInputWithContext(props) { - return ( - - {context => } - - ); -} - -class FocusableAmountInput_ extends React.Component { - state = { focused: false }; - - componentDidMount() { - const onDone = () => { - this.setState({ focused: false }); - Keyboard.dismiss(); - }; - this.props.context.on('done', onDone); - this.cleanup = () => { - this.props.context.off('done', onDone); - }; - } - - componentWillUnmount() { - this.cleanup(); - } - - focus = () => { - this.setState({ focused: true }, () => { - const { sign, value } = this.props; - - // Only force a signage if the value is 0 (the default on new - // transactions) - let isNegative = - value !== 0 - ? undefined - : sign === 'positive' - ? false - : sign === 'negative' - ? true - : undefined; - - if (isNegative !== undefined) { - this.props.context.emit('set-negative', isNegative); - } - }); - }; - - onFocus = () => { - this.focus(); - }; - - onBlur = value => { - this.setState({ focused: false, reallyFocused: false }); - if (this.props.onBlur) { - this.props.onBlur(value); - } - }; - - render() { - const { textStyle, style, focusedStyle, buttonProps } = this.props; - const { focused } = this.state; - - return ( - - (this.amount = el)} - onBlur={this.onBlur} - focused={focused} - style={[ - { - width: 80, - transform: [{ translateX: 6 }], - justifyContent: 'center' - }, - style, - focusedStyle, - !focused && { - opacity: 0, - position: 'absolute', - top: 0 - } - ]} - textStyle={[{ fontSize: 15, textAlign: 'right' }, textStyle]} - /> - - - - - {amountToCurrency(this.props.value)} - - - - - ); - } -} - -export const FocusableAmountInput = React.forwardRef((props, ref) => { - return ( - - {context => ( - // eslint-disable-next-line - - )} - - ); -}); - -let styles = StyleSheet.create({ - inputContainer: { - position: 'absolute', - top: 0, - left: 0, - bottom: 0, - right: 0, - opacity: 0 - }, - inputContent: { - flexDirection: 'row', - alignItems: 'stretch' - } -}); diff --git a/packages/loot-design/src/components/mobile/AndroidKeyboardAvoidingView.android.js b/packages/loot-design/src/components/mobile/AndroidKeyboardAvoidingView.android.js deleted file mode 100644 index d522fa558d..0000000000 --- a/packages/loot-design/src/components/mobile/AndroidKeyboardAvoidingView.android.js +++ /dev/null @@ -1,71 +0,0 @@ -import React, { useState, useEffect } from 'react'; -import { KeyboardAvoidingView, NativeModules, Keyboard } from 'react-native'; - -import { AmountAccessoryView } from 'loot-design/src/components/mobile/AmountInput'; -import { BudgetAccessoryView } from 'loot-design/src/components/mobile/budget'; - -let { StatusBarHeight } = NativeModules; - -export let AccessoryIdContext = React.createContext(); - -function renderAccessoryView(id) { - switch (id) { - case 'budget': - return ; - case 'amount': - return ; - default: - } - throw new Error('Unknown accessory view: ' + id); -} - -export default function AndroidKeyboardAvoidingView({ - children, - behavior = 'height', - enabled = true, - keyboardVerticalOffset = 0, - includeStatusBar, - style -}) { - let [keyboard, setKeyboard] = useState(false); - let [accessoryId, setAccessoryId] = useState(null); - - useEffect(() => { - let cleanups = [ - Keyboard.addListener('keyboardDidShow', e => { - setKeyboard(true); - }), - Keyboard.addListener('keyboardDidHide', e => { - setKeyboard(false); - - // TODO: This is wrong. In Android, the user can hide the - // keyboard and bring it back up again all while never losing - // focus of the input. This means we'll render the accessory - // view the first time but never again. Need to figure out a - // better solution. - setAccessoryId(null); - }) - ]; - - return () => cleanups.forEach(handler => handler.remove()); - }, []); - - return ( - - - <> - {children} - {keyboard && accessoryId && renderAccessoryView(accessoryId)} - - - - ); -} diff --git a/packages/loot-design/src/components/mobile/AndroidKeyboardAvoidingView.js b/packages/loot-design/src/components/mobile/AndroidKeyboardAvoidingView.js deleted file mode 100644 index d82538c6bb..0000000000 --- a/packages/loot-design/src/components/mobile/AndroidKeyboardAvoidingView.js +++ /dev/null @@ -1,3 +0,0 @@ -export default function AndroidKeyboardAvoidingView({ children }) { - return children; -} diff --git a/packages/loot-design/src/components/mobile/ExitTransition.js b/packages/loot-design/src/components/mobile/ExitTransition.js deleted file mode 100644 index 60c34539a4..0000000000 --- a/packages/loot-design/src/components/mobile/ExitTransition.js +++ /dev/null @@ -1,29 +0,0 @@ -import React from 'react'; - -class ExitTransition extends React.Component { - state = { dead: true, savedProps: null }; - - static getDerivedStateFromProps(props, state) { - return { - exiting: !props.alive, - dead: !props.alive && state.dead, - savedProps: props.alive ? props.withProps : state.savedProps - }; - } - - onDone = () => { - this.setState({ dead: true }); - }; - - render() { - const { children } = this.props; - const { exiting, dead, savedProps } = this.state; - - if (dead) { - return null; - } - return children(exiting, this.onDone, savedProps); - } -} - -export default ExitTransition; diff --git a/packages/loot-design/src/components/mobile/FocusAwareStatusBar.js b/packages/loot-design/src/components/mobile/FocusAwareStatusBar.js deleted file mode 100644 index cad53fd68c..0000000000 --- a/packages/loot-design/src/components/mobile/FocusAwareStatusBar.js +++ /dev/null @@ -1,9 +0,0 @@ -import * as React from 'react'; -import { StatusBar } from 'react-native'; - -import { useIsFocused } from 'mobile/node_modules/@react-navigation/native'; - -export default function FocusAwareStatusBar(props) { - const isFocused = useIsFocused(); - return isFocused ? : null; -} diff --git a/packages/loot-design/src/components/mobile/InputAccessoryView.ios.js b/packages/loot-design/src/components/mobile/InputAccessoryView.ios.js deleted file mode 100644 index 90895f0728..0000000000 --- a/packages/loot-design/src/components/mobile/InputAccessoryView.ios.js +++ /dev/null @@ -1,3 +0,0 @@ -import { InputAccessoryView } from 'react-native'; - -export default InputAccessoryView; diff --git a/packages/loot-design/src/components/mobile/InputAccessoryView.js b/packages/loot-design/src/components/mobile/InputAccessoryView.js deleted file mode 100644 index df5b0029ea..0000000000 --- a/packages/loot-design/src/components/mobile/InputAccessoryView.js +++ /dev/null @@ -1,3 +0,0 @@ -export default function InputAccessoryView() { - return null; -} diff --git a/packages/loot-design/src/components/mobile/InputAccessoryView.web.js b/packages/loot-design/src/components/mobile/InputAccessoryView.web.js deleted file mode 100644 index 8a28a71e2e..0000000000 --- a/packages/loot-design/src/components/mobile/InputAccessoryView.web.js +++ /dev/null @@ -1,53 +0,0 @@ -import React from 'react'; - -class InputAccessoryView extends React.Component { - componentDidMount() { - // The purpose of this component is to never steal away focus from - // inputs by interacting with anything inside of here. The way we - // do that is by watching everything inside a design section and - // keeping track of which input is focused. - // - // Then we watch for anything getting focus inside of this - // accessory view and immediately re-focus the input if there was - // on focused. - - // Walk up the DOM and find the containing section node - let section = null; - let current = this.el; - while (current) { - if (current.dataset && current.dataset.section) { - section = current; - break; - } - - current = current.parentNode; - } - - // If we aren't in a section for some reason, do nothing - if (!section) { - return; - } - - // Watch for all focus events inside a section, and keep the last - // focused input - this.el.addEventListener( - 'focusin', - ev => { - if (ev.relatedTarget && ev.relatedTarget.tagName === 'INPUT') { - ev.relatedTarget.focus(); - } - }, - true - ); - } - - render() { - return ( -
(this.el = el)}> - {this.props.children} -
- ); - } -} - -export default InputAccessoryView; diff --git a/packages/loot-design/src/components/mobile/KeyboardAvoidingView.android.js b/packages/loot-design/src/components/mobile/KeyboardAvoidingView.android.js deleted file mode 100644 index 47db2b027b..0000000000 --- a/packages/loot-design/src/components/mobile/KeyboardAvoidingView.android.js +++ /dev/null @@ -1,3 +0,0 @@ -import AndroidKeyboardAvoidingView from './AndroidKeyboardAvoidingView'; - -export default AndroidKeyboardAvoidingView; diff --git a/packages/loot-design/src/components/mobile/KeyboardAvoidingView.js b/packages/loot-design/src/components/mobile/KeyboardAvoidingView.js deleted file mode 100644 index 6d1aadcd1c..0000000000 --- a/packages/loot-design/src/components/mobile/KeyboardAvoidingView.js +++ /dev/null @@ -1,25 +0,0 @@ -import React from 'react'; -import { KeyboardAvoidingView } from 'react-native'; -import { getStatusBarHeight } from 'react-native-status-bar-height'; - -export default function _KeyboardAvoidingView({ - children, - enabled = true, - behavior = 'padding', - keyboardVerticalOffset = 0, - includeStatusBar, - style -}) { - return ( - - {children} - - ); -} diff --git a/packages/loot-design/src/components/mobile/PullToRefresh.js b/packages/loot-design/src/components/mobile/PullToRefresh.js deleted file mode 100644 index 0d59d23582..0000000000 --- a/packages/loot-design/src/components/mobile/PullToRefresh.js +++ /dev/null @@ -1,18 +0,0 @@ -import React, { useState } from 'react'; -import { RefreshControl } from 'react-native'; - -export default function PullToRefresh({ children, onRefresh }) { - let [refreshing, setRefreshing] = useState(false); - - async function onRefresh_() { - setRefreshing(true); - await onRefresh(); - setRefreshing(false); - } - - return children({ - refreshControl: ( - - ) - }); -} diff --git a/packages/loot-design/src/components/mobile/ScalableImage.js b/packages/loot-design/src/components/mobile/ScalableImage.js deleted file mode 100644 index 531e1dd2d9..0000000000 --- a/packages/loot-design/src/components/mobile/ScalableImage.js +++ /dev/null @@ -1,78 +0,0 @@ -import React, { useState, useEffect, useRef } from 'react'; -import { View, Image } from 'react-native'; - -const resolveAssetSource = Image.resolveAssetSource; - -export default function ScalableImage(props) { - const [scalableWidth, setScalableWidth] = useState(null); - const [scalableHeight, setScalableHeight] = useState(null); - const mounted = useRef(false); - - useEffect(() => { - mounted.current = true; - - return () => { - mounted.current = false; - }; - }, []); - - function adjustSize(sourceWidth, sourceHeight, width, height) { - let ratio = 1; - - if (width && height) { - ratio = Math.min(width / sourceWidth, height / sourceHeight); - } else if (width) { - ratio = width / sourceWidth; - } else if (height) { - ratio = height / sourceHeight; - } - - if (mounted.current) { - const computedWidth = sourceWidth * ratio; - const computedHeight = sourceHeight * ratio; - - setScalableWidth(computedWidth); - setScalableHeight(computedHeight); - } - } - - useEffect(() => { - const { source } = props; - if (source.uri) { - const sourceToUse = source.uri ? source.uri : source; - - Image.getSize( - sourceToUse, - (width, height) => adjustSize(width, height, props.width, props.height), - console.err - ); - } else { - const sourceToUse = resolveAssetSource(source); - adjustSize( - sourceToUse.width, - sourceToUse.height, - props.width, - props.height - ); - } - }, [props.width, props.height, props.source]); - - return ( - - - - ); -} diff --git a/packages/loot-design/src/components/mobile/TextInputWithAccessory.android.js b/packages/loot-design/src/components/mobile/TextInputWithAccessory.android.js deleted file mode 100644 index 81e6c24167..0000000000 --- a/packages/loot-design/src/components/mobile/TextInputWithAccessory.android.js +++ /dev/null @@ -1,20 +0,0 @@ -import React, { useContext } from 'react'; -import { TextInput } from 'react-native'; - -import { AccessoryIdContext } from './AndroidKeyboardAvoidingView'; - -export default React.forwardRef(function TextInputWithAccessory( - { accessoryId, ...props }, - ref -) { - let setAccessoryId = useContext(AccessoryIdContext); - - function onFocus(...args) { - if (setAccessoryId) { - setAccessoryId(accessoryId); - } - props.onFocus && props.onFocus(...args); - } - - return ; -}); diff --git a/packages/loot-design/src/components/mobile/TextInputWithAccessory.js b/packages/loot-design/src/components/mobile/TextInputWithAccessory.js deleted file mode 100644 index 3f1de0f643..0000000000 --- a/packages/loot-design/src/components/mobile/TextInputWithAccessory.js +++ /dev/null @@ -1,9 +0,0 @@ -import React from 'react'; -import { TextInput } from 'react-native'; - -export default React.forwardRef(function TextInputWithAccessory( - { accessoryId, ...props }, - ref -) { - return ; -}); diff --git a/packages/loot-design/src/components/mobile/account.js b/packages/loot-design/src/components/mobile/account.js deleted file mode 100644 index a2b1e68649..0000000000 --- a/packages/loot-design/src/components/mobile/account.js +++ /dev/null @@ -1,106 +0,0 @@ -import React, { useMemo } from 'react'; -import { View, TextInput } from 'react-native'; - -import { colors } from '../../style'; -import Search from '../../svg/v1/Search'; -import CellValue from '../spreadsheet/CellValue'; -import { Label } from './common'; -import { TransactionList } from './transaction'; - -class TransactionSearchInput extends React.Component { - state = { text: '' }; - - performSearch = () => { - this.props.onSearch(this.state.text); - }; - - onChange = text => { - this.setState({ text }, this.performSearch); - }; - - render() { - const { accountName } = this.props; - const { text } = this.state; - - return ( - - - - - ); - } -} - -export function AccountDetails({ - account, - prependTransactions, - transactions, - accounts, - categories, - payees, - balance, - isNewTransaction, - onLoadMore, - onSearch, - onSelectTransaction, - refreshControl -}) { - let allTransactions = useMemo(() => { - return prependTransactions.concat(transactions); - }, [prependTransactions, transactions]); - - console.log('rendering'); - - return ( - - - - - - - - - ); -} diff --git a/packages/loot-design/src/components/mobile/account.usage.js b/packages/loot-design/src/components/mobile/account.usage.js deleted file mode 100644 index e8b5be3c2b..0000000000 --- a/packages/loot-design/src/components/mobile/account.usage.js +++ /dev/null @@ -1,27 +0,0 @@ -import React from 'react'; - -import makeSpreadsheet from 'loot-core/src/mocks/spreadsheet'; - -import { MobileSection, WithHeader } from '../../guide/components'; -import SpreadsheetContext from '../spreadsheet/SpreadsheetContext'; -import { AccountDetails } from './account'; -import { accounts, categories, transactions } from './accounts.usage'; - -export default () => ( - - - Account - - false} - onSearch={() => {}} - onSelectTransaction={() => {}} - /> - - - -); diff --git a/packages/loot-design/src/components/mobile/accounts.js b/packages/loot-design/src/components/mobile/accounts.js deleted file mode 100644 index 4b8aff0ec5..0000000000 --- a/packages/loot-design/src/components/mobile/accounts.js +++ /dev/null @@ -1,249 +0,0 @@ -import React from 'react'; -import { View, Text } from 'react-native'; -import { RectButton } from 'react-native-gesture-handler'; - -import { prettyAccountType } from 'loot-core/src/shared/accounts'; - -import { colors, styles } from '../../style'; -import Wallet from '../../svg/v1/Wallet'; -import CellValue from '../spreadsheet/CellValue'; -import { Button, TextOneLine } from './common'; -import { TransactionList } from './transaction'; - -export function AccountHeader({ name, amount }) { - return ( - - - - {name} - - - - - ); -} - -export function Account({ - account, - updated, - getBalanceQuery, - index, - onSelect -}) { - return ( - - onSelect(account.id)} - activeOpacity={0.1} - style={{ - flexDirection: 'row', - flex: 1, - alignItems: 'center', - borderRadius: 6, - paddingHorizontal: 16, - paddingVertical: 15 - }} - > - - - - {account.name} - - {account.bankId && ( - - )} - - - - {prettyAccountType(account.type)} - - - - - value < 0 && { color: colors.r4 }} - /> - - - ); -} - -function EmptyMessage({ onAdd }) { - return ( - - - For Actual to be useful, you need to add an account. You can link an - account to automatically download transactions, or manage it locally - yourself. - - - - - - In the future, you can add accounts using the add button in the header. - - - ); -} - -export class AccountList extends React.Component { - isNewTransaction = id => { - return this.props.newTransactions.includes(id); - }; - - render() { - const { - accounts, - updatedAccounts, - transactions, - categories, - getBalanceQuery, - getOnBudgetBalance, - getOffBudgetBalance, - onAddAccount, - onSelectAccount, - onSelectTransaction, - refreshControl - } = this.props; - const budgetedAccounts = accounts.filter( - account => account.offbudget === 0 - ); - const offbudgetAccounts = accounts.filter( - account => account.offbudget === 1 - ); - - // If there are no accounts, show a helpful message - if (accounts.length === 0) { - return ; - } - - const accountContent = ( - - - {budgetedAccounts.map((acct, idx) => ( - - ))} - - - {offbudgetAccounts.map((acct, idx) => ( - - ))} - - {/* - ); - - return ( - - - - ); - } -} diff --git a/packages/loot-design/src/components/mobile/accounts.usage.js b/packages/loot-design/src/components/mobile/accounts.usage.js deleted file mode 100644 index 9cde14f48b..0000000000 --- a/packages/loot-design/src/components/mobile/accounts.usage.js +++ /dev/null @@ -1,54 +0,0 @@ -import React from 'react'; - -import { - generateAccount, - generateCategory, - generateTransaction -} from 'loot-core/src/mocks'; -import makeSpreadsheet from 'loot-core/src/mocks/spreadsheet'; - -import { MobileSection } from '../../guide/components'; -import SpreadsheetContext from '../spreadsheet/SpreadsheetContext'; -import { AccountList } from './accounts'; - -export const accounts = [ - generateAccount('Bank of America', false, null, false), - generateAccount('Wells Fargo', false, null, true), - generateAccount('Ally', false, null, true) -]; - -export const categories = [ - generateCategory('Food'), - generateCategory('Bills'), - generateCategory('Big Projects'), - generateCategory('Other Stuff') -]; - -export let transactions = []; -for (let i = 0; i < 100; i++) { - transactions.push.apply( - transactions, - generateTransaction({ - acct: accounts[0].id, - category: categories[Math.round(Math.random() * 3)].id - }) - ); -} - -export default () => ( - - - Account List - ({ expr: 40000 })} - getOnBudgetBalance={() => 30000} - getOffBudgetBalance={() => 10000} - /> - - -); diff --git a/packages/loot-design/src/components/mobile/alerts.js b/packages/loot-design/src/components/mobile/alerts.js deleted file mode 100644 index 5c945a51a8..0000000000 --- a/packages/loot-design/src/components/mobile/alerts.js +++ /dev/null @@ -1,44 +0,0 @@ -import React from 'react'; -import { View, Text } from 'react-native'; - -import { styles, colors } from 'loot-design/src/style'; -import InformationSolid from 'loot-design/src/svg/v1/InformationOutline'; - -export function Information({ style, children }) { - return ( - - - - - - {children} - - - ); -} diff --git a/packages/loot-design/src/components/mobile/budget.js b/packages/loot-design/src/components/mobile/budget.js deleted file mode 100644 index 1f5c009040..0000000000 --- a/packages/loot-design/src/components/mobile/budget.js +++ /dev/null @@ -1,1158 +0,0 @@ -import React, { useMemo, useEffect, useContext } from 'react'; -import { - View, - Text, - ScrollView, - TouchableOpacity, - NativeModules, - findNodeHandle, - Keyboard -} from 'react-native'; -import { - RectButton, - PanGestureHandler, - NativeViewGestureHandler -} from 'react-native-gesture-handler'; -import Animated, { Easing } from 'react-native-reanimated'; - -import memoizeOne from 'memoize-one'; - -import Platform from 'loot-core/src/client/platform'; -import { rolloverBudget, reportBudget } from 'loot-core/src/client/queries'; -import * as monthUtils from 'loot-core/src/shared/months'; -import { amountToInteger, integerToAmount } from 'loot-core/src/shared/util'; - -import { colors, styles } from '../../style'; -import Add from '../../svg/v1/Add'; -import ArrowThinDown from '../../svg/v1/ArrowThinDown'; -import ArrowThinLeft from '../../svg/v1/ArrowThinLeft'; -import ArrowThinRight from '../../svg/v1/ArrowThinRight'; -import ArrowThinUp from '../../svg/v1/ArrowThinUp'; -import DotsHorizontalTriple from '../../svg/v1/DotsHorizontalTriple'; -import CellValue from '../spreadsheet/CellValue'; -import format from '../spreadsheet/format'; -import NamespaceContext from '../spreadsheet/NamespaceContext'; -import SheetValue from '../spreadsheet/SheetValue'; -import useSheetValue from '../spreadsheet/useSheetValue'; -import AmountInput, { - MathOperations, - AmountAccessoryContext -} from './AmountInput'; -import AndroidKeyboardAvoidingView from './AndroidKeyboardAvoidingView'; -import { Button, KeyboardButton, Card, Label } from './common'; -import { DragDrop, Draggable, Droppable, DragDropHighlight } from './dragdrop'; -import { ListItem, ROW_HEIGHT } from './table'; - -const ACTScrollViewManager = - NativeModules && NativeModules.ACTScrollViewManager; - -export function ToBudget({ toBudget, onPress }) { - return ( - - {({ value: amount }) => { - return ( - - ); - }} - - ); -} - -function Saved({ projected }) { - let budgetedSaved = useSheetValue(reportBudget.totalBudgetedSaved) || 0; - let totalSaved = useSheetValue(reportBudget.totalSaved) || 0; - let saved = projected ? budgetedSaved : totalSaved; - let isNegative = saved < 0; - - return ( - - {projected ? ( - - ); -} - -export class BudgetCell extends React.PureComponent { - render() { - const { - name, - binding, - editing, - style, - textStyle, - categoryId, - month, - onBudgetAction - } = this.props; - - return ( - - {node => { - return ( - - { - onBudgetAction(month, 'budget-amount', { - category: categoryId, - amount: amountToInteger(value) - }); - }} - /> - - - - {format(node.value || 0, 'financial')} - - - - ); - }} - - ); - } -} - -function BudgetGroupPreview({ group, pending, style }) { - let opacity = useMemo(() => new Animated.Value(0), []); - - useEffect(() => { - Animated.timing(opacity, { - toValue: 1, - duration: 100, - easing: Easing.inOut(Easing.ease) - }).start(); - }, []); - - return ( - - - - - {group.categories.map((cat, index) => ( - - ))} - - - ); -} - -function BudgetCategoryPreview({ name, pending, style }) { - return ( - - - {name} - - - ); -} - -export class BudgetCategory extends React.PureComponent { - constructor(props) { - super(props); - - let { editMode, blank } = props; - this.opacity = new Animated.Value(editMode || blank ? 0 : 1); - } - - componentDidUpdate(prevProps) { - if (prevProps.editing !== this.props.editing) { - if (this.props.editing && ACTScrollViewManager) { - ACTScrollViewManager.setFocused(findNodeHandle(this.container)); - } - } - - if (prevProps.editMode !== this.props.editMode) { - Animated.timing(this.opacity, { - toValue: this.props.editMode ? 0 : 1, - duration: 200, - easing: Easing.inOut(Easing.ease) - }).start(); - } - } - - render() { - let { - category, - editing, - index, - gestures, - editMode, - style, - month, - onEdit, - onBudgetAction - } = this.props; - - let budgeted = rolloverBudget.catBudgeted(category.id); - let balance = rolloverBudget.catBalance(category.id); - - let content = ( - (this.container = el)} - style={[ - { - backgroundColor: editing ? colors.p11 : 'transparent', - borderBottomWidth: 0, - borderTopWidth: index > 0 ? 1 : 0 - }, - style - ]} - data-testid="row" - > - - {category.name} - - - - value < 0 && { color: colors.r4 }} - type="financial" - /> - - - ); - - if (!editMode) { - return ( - onEdit(category.id)} - activeOpacity={0.7} - > - {content} - - ); - } - - return ( - ( - - )} - gestures={gestures} - > - { - let pos = (y - layout.y) / layout.height; - return pos < 0.5 ? 'top' : 'bottom'; - }} - onDrop={(id, type, droppable, status) => - this.props.onReorder(id.replace('category:', ''), { - aroundCategory: { - id: category.id, - position: status - } - }) - } - > - {() => content} - - - ); - } -} - -export class TotalsRow extends React.PureComponent { - constructor(props) { - super(props); - - let { editMode, blank } = props; - this.animation = new Animated.Value(editMode || blank ? 0 : 1); - } - - componentDidUpdate(prevProps) { - if (prevProps.editMode !== this.props.editMode) { - Animated.timing(this.animation, { - toValue: this.props.editMode ? 0 : 1, - duration: 200, - easing: Easing.inOut(Easing.ease) - }).start(); - } - } - - render() { - let { group, editMode, onAddCategory } = this.props; - - let content = ( - - - - {group.name} - - - - - - - - {editMode && ( - - onAddCategory(group.id)} - style={{ padding: 10 }} - > - - - - )} - - ); - - if (!editMode) { - return content; - } - - return ( - { - return 'bottom'; - }} - onDrop={(id, type, droppable, status) => - this.props.onReorderCategory(id, { inGroup: group.id }) - } - > - {() => content} - - ); - } -} - -export class IncomeCategory extends React.PureComponent { - render() { - const { - name, - budget, - balance, - style, - nameTextStyle, - amountTextStyle - } = this.props; - return ( - - - - {name} - - - {budget && ( - - )} - - - ); - } -} - -export function BudgetAccessoryView() { - let emitter = useContext(AmountAccessoryContext); - - return ( - - - - - emitter.emit('moveUp')} - style={{ marginRight: 5 }} - data-testid="up" - > - - - emitter.emit('moveDown')} - style={{ marginRight: 5 }} - data-testid="down" - > - - - emitter.emit('done')} data-testid="done"> - Done - - - - ); -} - -export class BudgetGroup extends React.PureComponent { - render() { - const { - group, - editingId, - editMode, - gestures, - month, - onEditCategory, - onReorderCategory, - onReorderGroup, - onAddCategory, - onBudgetAction - } = this.props; - - function editable(content) { - if (!editMode) { - return content; - } - - return ( - ( - - )} - gestures={gestures} - > - { - let pos = (y - layout.y) / layout.height; - return pos < 0.5 ? 'top' : 'bottom'; - }} - onDrop={(id, type, droppable, status) => { - onReorderGroup(id, group.id, status); - }} - > - {() => content} - - - ); - } - - return editable( - - - - {group.categories.map((category, index) => { - const editing = editingId === category.id; - return ( - - ); - })} - - ); - } -} - -export class IncomeBudgetGroup extends React.Component { - render() { - const { type, group } = this.props; - return ( - - - {type === 'report' && ( - - - - - - {group.categories.map((category, index) => { - return ( - - ); - })} - - - ); - } -} - -export class BudgetGroups extends React.Component { - getGroups = memoizeOne(groups => { - return { - incomeGroup: groups.find(group => group.is_income), - expenseGroups: groups.filter(group => !group.is_income) - }; - }); - - render() { - const { - type, - categoryGroups, - editingId, - editMode, - gestures, - month, - onEditCategory, - onAddCategory, - onReorderCategory, - onReorderGroup, - onBudgetAction - } = this.props; - const { incomeGroup, expenseGroups } = this.getGroups(categoryGroups); - - return ( - - {expenseGroups.map(group => { - return ( - - ); - })} - - {incomeGroup && } - - ); - } -} - -export class BudgetTable extends React.Component { - static contextType = AmountAccessoryContext; - state = { editingCategory: null }; - - constructor(props) { - super(props); - this.gestures = { - scroll: React.createRef(null), - pan: React.createRef(null), - rows: [] - }; - } - - componentDidMount() { - if (ACTScrollViewManager) { - ACTScrollViewManager.activate( - (this.list.getNode - ? this.list.getNode() - : this.list - ).getScrollableNode() - ); - } - - const removeFocus = this.props.navigation.addListener('focus', () => { - if (ACTScrollViewManager) { - ACTScrollViewManager.activate( - (this.list.getNode - ? this.list.getNode() - : this.list - ).getScrollableNode() - ); - } - }); - - const keyboardWillHide = e => { - if (ACTScrollViewManager) { - ACTScrollViewManager.setFocused(-1); - } - this.onEditCategory(null); - }; - - let keyListener = Keyboard.addListener( - Platform.OS === 'ios' ? 'keyboardWillHide' : 'keyboardDidHide', - keyboardWillHide - ); - - let emitter = this.context; - emitter.on('done', this.onKeyboardDone); - emitter.on('moveUp', this.onMoveUp); - emitter.on('moveDown', this.onMoveDown); - - this.cleanup = () => { - removeFocus(); - keyListener.remove(); - - emitter.off('done', this.onKeyboardDone); - emitter.off('moveUp', this.onMoveUp); - emitter.off('moveDown', this.onMoveDown); - }; - } - - componentWillUnmount() { - this.cleanup(); - } - - onEditCategory = id => { - this.setState({ editingCategory: id }); - }; - - onKeyboardDone = () => { - Keyboard.dismiss(); - - if (Platform.isReactNativeWeb) { - // TODO: If we are running tests, they can't rely on the - // keyboard events, so manually reset the state here. Hopefully - // we can find a better solution for this in the future. - this.onEditCategory(null); - } - }; - - onMoveUp = () => { - const { categories } = this.props; - const { editingCategory } = this.state; - const expenseCategories = categories.filter(cat => !cat.is_income); - - const idx = expenseCategories.findIndex(cat => editingCategory === cat.id); - if (idx - 1 >= 0) { - this.onEditCategory(expenseCategories[idx - 1].id); - } - }; - - onMoveDown = () => { - const { categories } = this.props; - const { editingCategory } = this.state; - const expenseCategories = categories.filter(cat => !cat.is_income); - - const idx = expenseCategories.findIndex(cat => editingCategory === cat.id); - if (idx + 1 < expenseCategories.length) { - this.onEditCategory(expenseCategories[idx + 1].id); - } - }; - - render() { - const { - type, - categoryGroups, - month, - monthBounds, - editMode, - refreshControl, - onPrevMonth, - onNextMonth, - onAddCategory, - onReorderCategory, - onReorderGroup, - onShowBudgetDetails, - onOpenActionSheet, - onBudgetAction - } = this.props; - let { editingCategory } = this.state; - let currentMonth = monthUtils.currentMonth(); - - return ( - - - this.props.onEditMode(false)} - onOpenActionSheet={onOpenActionSheet} - onPrevMonth={onPrevMonth} - onNextMonth={onNextMonth} - /> - - {type === 'report' ? ( - = currentMonth} /> - ) : ( - - )} - - - - - - - - - - {!editMode ? ( - (this.list = el)} - keyboardShouldPersistTaps="always" - refreshControl={refreshControl} - style={{ backgroundColor: colors.n10 }} - automaticallyAdjustContentInsets={false} - > - - - ) : ( - - {({ - dragging, - onGestureEvent, - onHandlerStateChange, - scrollRef, - onScroll - }) => ( - - { - scrollRef.current = el; - this.list = el; - }} - onScroll={onScroll} - keyboardShouldPersistTaps="always" - scrollEventThrottle={16} - scrollEnabled={!dragging} - style={{ backgroundColor: colors.n10 }} - > - - - - - - - - - - )} - - )} - - - - ); - } -} - -export function BudgetHeader({ - currentMonth, - monthBounds, - editMode, - onDone, - onOpenActionSheet, - onPrevMonth, - onNextMonth -}) { - let prevEnabled = currentMonth > monthBounds.start; - let nextEnabled = currentMonth < monthUtils.subMonths(monthBounds.end, 1); - - let buttonStyle = { - paddingHorizontal: 15, - backgroundColor: 'transparent' - }; - - return ( - - {!editMode && ( - - )} - - {monthUtils.format(currentMonth, "MMMM ''yy")} - - {editMode ? ( - - ) : ( - <> - - - - - )} - - ); -} diff --git a/packages/loot-design/src/components/mobile/budget.test.js b/packages/loot-design/src/components/mobile/budget.test.js deleted file mode 100644 index b4f7e37c7f..0000000000 --- a/packages/loot-design/src/components/mobile/budget.test.js +++ /dev/null @@ -1,258 +0,0 @@ -import React from 'react'; - -import { render, fireEvent } from '@testing-library/react'; - -import makeSpreadsheet from 'loot-core/src/mocks/spreadsheet'; -import * as monthUtils from 'loot-core/src/shared/months'; - -import { MobileScreen } from '../../guide/components'; -import SpreadsheetContext from '../spreadsheet/SpreadsheetContext'; -import { BudgetTable, BudgetAccessoryView } from './budget'; -import { categories, categoryGroups } from './budget.usage'; -import InputAccessoryView from './InputAccessoryView'; - -function makeLoadedSpreadsheet() { - let spreadsheet = makeSpreadsheet(); - let months = monthUtils.rangeInclusive( - monthUtils.subMonths('2017-01', 3), - '2017-10' - ); - - // Something random - let currentNumber = 2400; - - for (let month of months) { - // eslint-disable-next-line - function value(name, v) { - spreadsheet.set( - monthUtils.sheetForMonth(month), - name, - v || currentNumber++ - ); - } - - let values = [ - value('available-funds'), - value('last-month-overspent'), - value('buffered'), - value('total-budgeted', -400), - value('to-budget', 2000), - - value('from-last-month'), - value('total-income'), - value('total-spent', 25), - value('total-leftover', 150) - ]; - - for (let group of categoryGroups) { - if (group.is_income) { - values.push(value('total-income', 2000)); - - for (let cat of group.categories) { - values.push(value(`sum-amount-${cat.id}`, 200)); - } - } else { - values = values.concat([ - value(`group-budget-${group.id}`, -25), - value(`group-sum-amount-${group.id}`, 2500), - value(`group-leftover-${group.id}`, 2500) - ]); - - for (let cat of group.categories) { - values = values.concat([ - value(`budget-${cat.id}`, 2500), - value(`sum-amount-${cat.id}`, 0), - value(`leftover-${cat.id}`, 1000), - value(`carryover-${cat.id}`, false) - ]); - } - } - } - } - - return spreadsheet; -} - -class PrintError extends React.Component { - componentDidCatch(error, errorInfo) { - console.log('[React error]', errorInfo.componentStack); - throw error; - } - - render() { - return this.props.children; - } -} - -function renderBudget() { - let sheet = makeLoadedSpreadsheet(); - return render( - - - - () => {} }} - onBudgetAction={(month, type, args) => { - if (type === 'budget-amount') { - sheet.set( - monthUtils.sheetForMonth(month), - `budget-${args.category}`, - args.amount - ); - } - }} - /> - - - - - - - - ); -} - -function getRow(container, index) { - const field = container.querySelectorAll( - `[data-testid="budget-table"] [data-testid="row"]` - )[index]; - return field; -} - -function getField(container, index, name) { - return getRow(container, index).querySelector(`[data-testid="${name}"]`); -} - -function getInput(container, index) { - return getRow(container, index).querySelector('[data-testid="amount-input"]'); -} - -function getFakeInput(container, index) { - return getRow(container, index).querySelector( - '[data-testid="amount-fake-input"]' - ); -} - -function getButton(container, name) { - return container.querySelector('[data-testid="' + name + '"]'); -} - -function editRow(container, index) { - fireEvent.press(getRow(container, index)); - expectToBeEditingRow(container, index); -} - -function expectToNotBeEditing(container) { - expect(container.ownerDocument.activeElement.tagName).not.toBe('input'); -} - -function expectToBeEditingRow(container, index) { - const input = container.querySelectorAll('[data-testid="amount-input"]')[ - index - ]; - expect(container.ownerDocument.activeElement).toBe(input); -} - -// responsive version breaks this suite -// skipping rather than fixing due to planned deprecation -describe.skip('Budget', () => { - test('up and down buttons move around categories', () => { - const { container } = renderBudget(); - expectToNotBeEditing(container); - - editRow(container, 1); - expectToBeEditingRow(container, 1); - fireEvent.press(getButton(container, 'up')); - expectToBeEditingRow(container, 0); - - // It should never go past the first item - fireEvent.press(getButton(container, 'up')); - expectToBeEditingRow(container, 0); - - // Move around some - fireEvent.press(getButton(container, 'down')); - expectToBeEditingRow(container, 1); - fireEvent.press(getButton(container, 'down')); - expectToBeEditingRow(container, 2); - fireEvent.press(getButton(container, 'up')); - expectToBeEditingRow(container, 1); - - // It should never go past the last expense category - let lastCat = categories.findIndex(c => c.is_income) - 1; - editRow(container, lastCat); - expectToBeEditingRow(container, lastCat); - fireEvent.press(getButton(container, 'down')); - expectToBeEditingRow(container, lastCat); - }); - - test('budget cells can be edited', () => { - const { container } = renderBudget(); - - expect(getField(container, 1, 'budgeted').textContent).toBe('25.00'); - editRow(container, 1); - - let input = getInput(container, 1); - fireEvent.change(input, { target: { value: '49' } }); - expect(getFakeInput(container, 1).textContent).toBe('49'); - - fireEvent.press(getButton(container, 'done')); - expectToNotBeEditing(container); - - expect(getField(container, 1, 'budgeted').textContent).toBe('49.00'); - }); - - test('math operations work', async () => { - const { container } = renderBudget(); - editRow(container, 1); - - // Only the math button should be shown - expect(getButton(container, 'math')).toBeTruthy(); - expect(getButton(container, 'add')).not.toBeTruthy(); - expect(getButton(container, 'subtract')).not.toBeTruthy(); - expect(getButton(container, 'equal')).not.toBeTruthy(); - - fireEvent.press(getButton(container, 'math')); - - // The math button should be gone and other buttons should exist - expect(getButton(container, 'math')).not.toBeTruthy(); - expect(getButton(container, 'add')).toBeTruthy(); - expect(getButton(container, 'subtract')).toBeTruthy(); - expect(getButton(container, 'equal')).toBeTruthy(); - - expect(getFakeInput(container, 1).textContent).toBe('25.00'); - - // Adding should work - fireEvent.press(getButton(container, 'add')); - let input = getInput(container, 1); - fireEvent.change(input, { target: { value: '1' } }); - expect(getFakeInput(container, 1).textContent).toBe('+1'); - - // Pressing equal should update the value - fireEvent.press(getButton(container, 'equal')); - expect(getFakeInput(container, 1).textContent).toBe('26.00'); - expectToBeEditingRow(container, 1); - - // Subtracting should work - fireEvent.press(getButton(container, 'subtract')); - input = getInput(container, 1); - fireEvent.change(input, { target: { value: '5' } }); - expect(getFakeInput(container, 1).textContent).toBe('-5'); - fireEvent.press(getButton(container, 'equal')); - expect(getFakeInput(container, 1).textContent).toBe('21.00'); - - // Pressing done should also update the value - fireEvent.press(getButton(container, 'add')); - input = getInput(container, 1); - fireEvent.change(input, { target: { value: '1' } }); - fireEvent.press(getButton(container, 'done')); - expectToNotBeEditing(container); - - await new Promise(resolve => setTimeout(resolve, 100)); - expect(getField(container, 1, 'budgeted').textContent).toBe('22.00'); - }); -}); diff --git a/packages/loot-design/src/components/mobile/budget.usage.js b/packages/loot-design/src/components/mobile/budget.usage.js deleted file mode 100644 index 769dc0e4e3..0000000000 --- a/packages/loot-design/src/components/mobile/budget.usage.js +++ /dev/null @@ -1,106 +0,0 @@ -import React from 'react'; -import { View } from 'react-native'; - -import { generateCategoryGroups } from 'loot-core/src/mocks'; -import makeSpreadsheet from 'loot-core/src/mocks/spreadsheet'; - -import { MobileSection } from '../../guide/components'; -import SpreadsheetContext from '../spreadsheet/SpreadsheetContext'; -import { BudgetTable, BudgetAccessoryView } from './budget'; -import InputAccessoryView from './InputAccessoryView'; - -export const categoryGroups = generateCategoryGroups([ - { - name: 'Investments and Savings', - categories: [{ name: 'Savings' }] - }, - { - name: 'Usual Expenses', - categories: [ - { name: 'Food' }, - { name: 'General' }, - { name: 'Home' }, - { name: 'Bills' }, - { name: 'Other Bills' }, - { name: 'Games' }, - { name: 'Hobby' }, - { name: 'Project' }, - { name: 'Garden' }, - { name: 'Desk' }, - { name: 'Beer' }, - { name: 'Movies' } - ] - }, - { - name: 'Projects', - categories: [{ name: 'Big Projects' }, { name: 'Shed' }] - }, - { - name: 'Income', - is_income: true, - categories: [ - { name: 'Salary', is_income: true }, - { name: 'Misc', is_income: true } - ] - } -]); -export const categories = categoryGroups.reduce( - (acc, group) => acc.concat(group.categories), - [] -); - -const budgetData = { - toBudget: { value: 2000 }, - totalBudgeted: { value: -400 }, - totalSpent: { value: 25 }, - totalBalance: { value: 150 }, - - categoryGroups: categoryGroups.map(group => { - if (group.is_income) { - return { - ...group, - received: { value: 2000 }, - categories: group.categories.map(cat => ({ - ...cat, - received: { value: 200 } - })) - }; - } - - return { - ...group, - budgeted: { value: -25 }, - spent: { value: 2500 }, - balance: { value: 2500 }, - - categories: group.categories.map(cat => ({ - ...cat, - budgeted: { name: `budget-${cat.id}`, value: 2500 }, - spent: { value: 0 }, - balance: { value: 1000 } - })) - }; - }) -}; - -export default () => ( - - - Budget Table - - - - - - - - - -); diff --git a/packages/loot-design/src/components/mobile/common.js b/packages/loot-design/src/components/mobile/common.js deleted file mode 100644 index cb533ee86d..0000000000 --- a/packages/loot-design/src/components/mobile/common.js +++ /dev/null @@ -1,217 +0,0 @@ -import React from 'react'; -import { Text, View } from 'react-native'; -import { RectButton } from 'react-native-gesture-handler'; - -import { styles, colors } from '../../style'; -import Loading from '../../svg/v1/AnimatedLoading'; - -export class Button extends React.Component { - render() { - const { - children, - pressed, - primary, - hover, - bare, - style, - contentStyle, - textStyle, - disabled, - onPress, - hitSlop = { top: 5, left: 5, bottom: 5, right: 5 }, - ...nativeProps - } = this.props; - - // This sucks. Unfortunatey RNGH's RectButton does not properly - // implement all the style props. border and padding do not work - // on Android, which means we need to use an inner View for that. - // We apply the user style on the inner view, but we need to apply - // the margin on the outer view so we strip it off. It's annoying, - // and hopefully RectButton will be fixed in the future. - - return ( - - - {typeof children === 'string' ? ( - - {children} - - ) : ( - children - )} - - - ); - } -} - -export const ButtonWithLoading = React.forwardRef((allProps, ref) => { - let { loading, loadingColor, children, textStyle, ...props } = allProps; - return ( - - ); -}); - -export function KeyboardButton({ highlighted, children, ...props }) { - return ( - - ); -} - -export const Card = React.forwardRef(({ children, ...props }, ref) => { - return ( - - - {children} - - - ); -}); - -export function Label({ title, style }) { - return ( - - {title} - - ); -} - -export function TextOneLine({ children, centered, ...props }) { - return ( - - {children} - - ); -} diff --git a/packages/loot-design/src/components/mobile/dragdrop.js b/packages/loot-design/src/components/mobile/dragdrop.js deleted file mode 100644 index 12b787b19c..0000000000 --- a/packages/loot-design/src/components/mobile/dragdrop.js +++ /dev/null @@ -1,372 +0,0 @@ -import React, { - useMemo, - useEffect, - useState, - useRef, - useCallback, - useContext -} from 'react'; -import { View, findNodeHandle } from 'react-native'; -import { State, LongPressGestureHandler } from 'react-native-gesture-handler'; -import Animated from 'react-native-reanimated'; - -import { colors } from '../../style'; - -export const DragDropContext = React.createContext(null); -let A = Animated; - -function Preview({ draggable, x, y, pending }) { - if (draggable) { - let { bounds, preview } = draggable; - return preview({ - pending, - style: { - position: 'absolute', - left: bounds.x, - top: bounds.y, - width: bounds.width, - height: bounds.height, - zIndex: 1000, - transform: [{ translateY: y }] - } - }); - } - return null; -} - -export function Draggable({ id, type, preview, gestures, children }) { - let context = useContext(DragDropContext); - let container = useRef(null); - - let _onTapHandlerStateChange = e => { - if (e.nativeEvent.state === State.ACTIVE) { - context.onDragStart(id, type, container.current, preview); - } else if (e.nativeEvent.oldState === State.ACTIVE) { - context.onDragEnd(); - } - }; - - return ( - - - {children} - - - ); -} - -export function Droppable({ type, onDrop, getActiveStatus, children }) { - let context = useContext(DragDropContext); - let element = useRef(null); - let id = useState(Math.random().toString()); - - // TODO: This effect is missing deps, need to figure out how to - // optimize - useEffect(() => { - let unregister = context.registerDroppable(id, { - acceptedTypes: Array.isArray(type) ? type : [type], - onDrop: onDrop, - onMeasure: measure, - getActiveStatus - }); - - return unregister; - }, []); - - function measure() { - if (element.current) { - let el = element.current.getNode - ? element.current.getNode() - : element.current; - el.measureLayout( - findNodeHandle(context.container.current), - (x, y, width, height) => { - context.updateDroppable(id, { - layout: { x, y, width, height } - }); - } - ); - } - } - - let { currentDropping } = context; - - return ( - - {children({ - activeStatus: - currentDropping && - currentDropping.droppable.id === id && - currentDropping.status - })} - - ); -} - -export function DragDrop({ makeHighlight, children, style }) { - let x = useMemo(() => new Animated.Value(0), []); - let y = useMemo(() => new Animated.Value(0), []); - let ax = useMemo(() => new Animated.Value(0), []); - let ay = useMemo(() => new Animated.Value(0), []); - let scrollRef = useRef(null); - let container = useRef(null); - let containerBounds = useRef(null); - let [currentDropping, setCurrentDropping] = useState(null); - let [dragState, setDragState] = useState(null); - let draggable = useRef(null); - let scrollY = useRef(0); - - let lastDragArgs = useRef(null); - - let onDragMove = useCallback(([x, y]) => { - if (draggable.current) { - lastDragArgs.current = [x, y]; - - let { droppable, status } = getDroppableInArea( - [x, y], - draggable.current.type - ); - if ( - droppable && - (!currentDropping || - droppable.id !== currentDropping.droppable.id || - status !== currentDropping.status) - ) { - setCurrentDropping({ droppable, status }); - } - - let relY = y - containerBounds.current.y; - let { height } = containerBounds.current; - - if (relY < 100) { - requestAnimationFrame(() => { - scrollRef.current - .getNode() - .scrollTo({ y: scrollY.current - 4, animated: false }); - }); - } else if (relY > height - 100) { - requestAnimationFrame(() => { - scrollRef.current - .getNode() - .scrollTo({ y: scrollY.current + 4, animated: false }); - }); - } - } - }, []); - - let onGestureEvent = Animated.event([ - { - nativeEvent: ({ - absoluteX, - absoluteY, - translationX: tx, - translationY: ty, - state - }) => - A.block([ - A.cond(A.eq(state, State.ACTIVE), [ - A.set(x, tx), - A.set(y, ty), - A.set(ax, absoluteX), - A.set(ay, absoluteY), - - A.call([ax, ay], onDragMove) - ]) - ]) - } - ]); - - function onContainerLayout() { - container.current.measureInWindow((x, y, width, height) => { - containerBounds.current = { x, y, width, height }; - }); - } - - let onHandlerStateChange = useCallback(e => { - if (e.nativeEvent.state === State.ACTIVE) { - setDragState('dragging'); - } - }, []); - - // Managing drag state - let onDrag = useCallback((id, type, el, preview) => { - if (container && preview) { - el = el.getNode ? el.getNode() : el; - el.measureLayout( - findNodeHandle(container.current), - (x, y, width, height) => { - draggable.current = { - id, - type, - bounds: { x, y: y - scrollY.current, width, height }, - preview - }; - setDragState('pending'); - } - ); - - droppables.current.forEach(d => d.onMeasure()); - } - }, []); - let onDragStart = (id, type, container, preview) => { - onDrag(id, type, container, preview); - }; - let onDragEnd = () => { - if (draggable.current && currentDropping) { - let { droppable, status } = currentDropping; - droppable.onDrop( - draggable.current.id, - draggable.current.type, - droppable, - status - ); - } - - draggable.current = null; - setDragState(null); - setCurrentDropping(null); - x.setValue(0); - y.setValue(0); - }; - - // Handle scrolling - function onScroll(e) { - scrollY.current = e.nativeEvent.contentOffset.y; - - if (dragState === 'dragging' && lastDragArgs.current) { - onDragMove(lastDragArgs.current); - } - } - - // Droppables - let droppables = useRef([]); - - function getDroppableInArea([x, y], type) { - if (!containerBounds.current) { - return null; - } - - x -= containerBounds.current.x; - y -= containerBounds.current.y - scrollY.current; - - let droppable = droppables.current.find(({ acceptedTypes, layout }) => { - return ( - acceptedTypes.indexOf(type) !== -1 && - layout && - x >= layout.x && - y >= layout.y && - x <= layout.x + layout.width && - y <= layout.y + layout.height - ); - }); - - if (droppable) { - let { getActiveStatus } = droppable; - - if (getActiveStatus) { - let status = getActiveStatus(x, y, droppable, draggable.current || {}); - if (status) { - return { droppable, status, position: { x, y } }; - } - } else { - return { droppable, status: true, position: { x, y } }; - } - } - return {}; - } - - function registerDroppable(id, events) { - droppables.current = [ - ...droppables.current, - { - id, - ...events, - layout: { x: 0, y: 0, width: 0, height: 0 } - } - ]; - - return () => { - unregisterDroppable(id); - }; - } - - function unregisterDroppable(id) { - droppables.current = droppables.current.filter(d => d.id !== id); - } - - function updateDroppable(id, data) { - droppables.current = droppables.current.map(d => { - if (d.id === id) { - return { ...d, ...data }; - } - return d; - }); - } - - return ( - - - {children({ - dragState, - scrollRef, - onScroll, - onGestureEvent, - onHandlerStateChange - })} - - - - - ); -} - -export function DragDropHighlight() { - let context = useContext(DragDropContext); - if (!context.currentDropping) { - return null; - } - - let { droppable, status } = context.currentDropping; - let { layout } = droppable; - - return ( - - ); -} diff --git a/packages/loot-design/src/components/mobile/forms.js b/packages/loot-design/src/components/mobile/forms.js deleted file mode 100644 index 1fe68770eb..0000000000 --- a/packages/loot-design/src/components/mobile/forms.js +++ /dev/null @@ -1,109 +0,0 @@ -import React from 'react'; -import { View, Text, TextInput, Switch } from 'react-native'; -import { RectButton } from 'react-native-gesture-handler'; - -import { colors } from '../../style'; - -export const EDITING_PADDING = 12; -export const FIELD_HEIGHT = 40; - -export function FieldLabel({ title, flush, style }) { - return ( - - {title} - - ); -} - -const valueStyle = { - borderWidth: 1, - borderColor: colors.n9, - marginLeft: -1, - marginRight: -1, - height: FIELD_HEIGHT, - paddingHorizontal: EDITING_PADDING -}; - -export const InputField = React.forwardRef(function InputField( - { disabled, style, onUpdate, ...props }, - ref -) { - return ( - { - onUpdate && onUpdate(e.nativeEvent.text); - }} - style={[ - valueStyle, - style, - { backgroundColor: disabled ? colors.n11 : 'white' } - ]} - {...props} - /> - ); -}); - -export function TapField({ - value, - children, - disabled, - rightContent, - style, - textStyle, - onTap -}) { - return ( - - - {children ? ( - children - ) : ( - {value} - )} - {!disabled && rightContent} - - - ); -} - -export function BooleanField({ value, onUpdate, style }) { - return ( - - ); -} diff --git a/packages/loot-design/src/components/mobile/hooks.js b/packages/loot-design/src/components/mobile/hooks.js deleted file mode 100644 index 29e1122ba9..0000000000 --- a/packages/loot-design/src/components/mobile/hooks.js +++ /dev/null @@ -1,15 +0,0 @@ -import { useRef, useEffect } from 'react'; - -export function useScrollFlasher() { - let scrollRef = useRef(null); - - useEffect(() => { - setTimeout(() => { - if (scrollRef.current) { - scrollRef.current.flashScrollIndicators(); - } - }, 1000); - }, []); - - return scrollRef; -} diff --git a/packages/loot-design/src/components/mobile/table.js b/packages/loot-design/src/components/mobile/table.js deleted file mode 100644 index 82eebf85fe..0000000000 --- a/packages/loot-design/src/components/mobile/table.js +++ /dev/null @@ -1,38 +0,0 @@ -import React from 'react'; -import { View } from 'react-native'; - -import Platform from 'loot-core/src/client/platform'; - -import { colors } from '../../style'; - -export const ROW_HEIGHT = 50; - -export const ListItem = React.forwardRef( - ({ children, style, ...props }, ref) => { - return ( - - {children} - - ); - } -); diff --git a/packages/loot-design/src/components/mobile/transaction.js b/packages/loot-design/src/components/mobile/transaction.js deleted file mode 100644 index 47fc1a5aba..0000000000 --- a/packages/loot-design/src/components/mobile/transaction.js +++ /dev/null @@ -1,935 +0,0 @@ -import React from 'react'; -import { View, Text, SectionList, ScrollView, Animated } from 'react-native'; -import { Swipeable, RectButton } from 'react-native-gesture-handler'; - -import { - format as formatDate, - parse as parseDate, - parseISO, - isValid as isValidDate -} from 'date-fns'; -import memoizeOne from 'memoize-one'; - -import * as monthUtils from 'loot-core/src/shared/months'; -import { - splitTransaction, - updateTransaction, - addSplitTransaction, - deleteTransaction, - realizeTempTransactions -} from 'loot-core/src/shared/transactions'; -import { titleFirst } from 'loot-core/src/shared/util'; -import { - integerToCurrency, - integerToAmount, - amountToInteger, - groupById -} from 'loot-core/src/shared/util'; -import ArrowsSynchronize from 'loot-design/src/svg/v2/ArrowsSynchronize'; - -import { colors, styles } from '../../style'; -import Add from '../../svg/v1/Add'; -import Trash from '../../svg/v1/Trash'; -import CheckCircle1 from '../../svg/v2/CheckCircle1'; -import PencilWriteAlternate from '../../svg/v2/PencilWriteAlternate'; -import { FocusableAmountInput } from './AmountInput'; -import { Button, TextOneLine } from './common'; -import ExitTransition from './ExitTransition'; -import { - FieldLabel, - InputField, - TapField, - BooleanField, - EDITING_PADDING -} from './forms'; -import KeyboardAvoidingView from './KeyboardAvoidingView'; -import { ListItem } from './table'; - -let getPayeesById = memoizeOne(payees => groupById(payees)); -let getAccountsById = memoizeOne(accounts => groupById(accounts)); - -export function isPreviewId(id) { - return id.indexOf('preview/') !== -1; -} - -function getDescriptionPretty(transaction, payee, transferAcct) { - let { amount } = transaction; - - if (transferAcct) { - return `Transfer ${amount > 0 ? 'from' : 'to'} ${transferAcct.name}`; - } else if (payee) { - return payee.name; - } - - return ''; -} - -function serializeTransaction(transaction, dateFormat) { - let { date, amount } = transaction; - return { - ...transaction, - date: formatDate(parseISO(date), dateFormat), - amount: integerToAmount(amount || 0) - }; -} - -function deserializeTransaction(transaction, originalTransaction, dateFormat) { - let { amount, date, ...realTransaction } = transaction; - - let dayMonth = monthUtils.getDayMonthRegex(dateFormat); - if (dayMonth.test(date)) { - let test = parseDate( - date, - monthUtils.getDayMonthFormat(dateFormat), - new Date() - ); - if (isValidDate(test)) { - date = monthUtils.dayFromDate(test); - } else { - date = null; - } - } else { - let test = parseDate(date, dateFormat, new Date()); - // This is a quick sanity check to make sure something invalid - // like "year 201" was entered - if (test.getFullYear() > 2000 && isValidDate(test)) { - date = monthUtils.dayFromDate(test); - } else { - date = null; - } - } - - if (date == null) { - date = - (originalTransaction && originalTransaction.date) || - monthUtils.currentDay(); - } - - return { ...realTransaction, date, amount: amountToInteger(amount || 0) }; -} - -function lookupName(items, id) { - return items.find(item => item.id === id).name; -} - -export class TransactionEdit extends React.Component { - constructor(props) { - super(props); - this.state = { transactions: props.transactions, editingChild: null }; - } - - serializeTransactions = memoizeOne(transactions => { - return transactions.map(t => - serializeTransaction(t, this.props.dateFormat) - ); - }); - - componentDidMount() { - if (this.props.adding) { - this.amount.focus(); - } - } - - openChildEdit = child => { - this.setState({ editingChild: child.id }); - }; - - onAdd = () => { - this.onSave(); - }; - - onCancel = () => { - this.props.navigation.goBack(null); - }; - - onSave = async () => { - let { transactions } = this.state; - - if (transactions.find(t => t.account == null)) { - // Ignore transactions if any of them don't have an account - return; - } - - // Since we don't own the state, we have to handle the case where - // the user saves while editing an input. We won't have the - // updated value so we "apply" a queued change. Maybe there's a - // better way to do this (lift the state?) - if (this._queuedChange) { - let [transaction, name, value] = this._queuedChange; - transactions = await this.onEdit(transaction, name, value); - } - - if (this.props.adding) { - transactions = realizeTempTransactions(transactions); - } - - this.props.onSave(transactions); - this.props.navigation.goBack(null); - }; - - onSaveChild = childTransaction => { - this.setState({ editingChild: null }); - }; - - onEdit = async (transaction, name, value) => { - let { transactions } = this.state; - - let newTransaction = { ...transaction, [name]: value }; - if (this.props.onEdit) { - newTransaction = await this.props.onEdit(newTransaction); - } - - let { data: newTransactions } = updateTransaction( - transactions, - deserializeTransaction(newTransaction, null, this.props.dateFormat) - ); - - this._queuedChange = null; - this.setState({ transactions: newTransactions }); - return newTransactions; - }; - - onQueueChange = (transaction, name, value) => { - // This is an ugly hack to solve the problem that input's blur - // events are not fired when unmounting. If the user has focused - // an input and swipes back, it should still save, but because the - // blur event is not fired we need to manually track the latest - // change and apply it ourselves when unmounting - this._queuedChange = [transaction, name, value]; - }; - - onTap = (transactionId, name) => { - let { navigation, dateFormat } = this.props; - - if (navigation) { - switch (name) { - case 'category': - navigation.navigate('CategorySelect', { - onSelect: id => { - let { transactions } = this.state; - let transaction = transactions.find(t => t.id === transactionId); - // This is a deficiency of this API, need to fix. It - // assumes that it receives a serialized transaction, - // but we only have access to the raw transaction - this.onEdit( - serializeTransaction(transaction, dateFormat), - name, - id - ); - } - }); - break; - case 'account': - navigation.navigate('AccountSelect', { - title: 'Select an account', - onSelect: id => { - let { transactions } = this.state; - let transaction = transactions.find(t => t.id === transactionId); - // See above - this.onEdit( - serializeTransaction(transaction, dateFormat), - name, - id - ); - } - }); - break; - case 'payee': - navigation.navigate('PayeeSelect', { - onSelect: id => { - let { transactions } = this.state; - let transaction = transactions.find(t => t.id === transactionId); - // See above - this.onEdit( - serializeTransaction(transaction, dateFormat), - name, - id - ); - } - }); - break; - default: - } - } - }; - - onSplit = () => { - this.props.navigation.navigate('CategorySelect', { - title: 'Select the first category', - onSelect: categoryId => { - let transactions = this.state.transactions; - - // Split the transaction - let { data } = splitTransaction(transactions, transactions[0].id); - data[1].category = categoryId; - - this.setState({ transactions: data }, this.focusSplit); - } - }); - }; - - onAddSplit = () => { - this.props.navigation.navigate('CategorySelect', { - title: 'Select a category', - onSelect: categoryId => { - let transactions = this.state.transactions; - - // Split the transaction - let { data } = addSplitTransaction(transactions, transactions[0].id); - // Set the initial category - data[data.length - 1].category = categoryId; - - this.setState({ transactions: data }, this.focusSplit); - } - }); - }; - - focusSplit = () => { - if (this.lastChildAmount) { - this.lastChildAmount.focus(); - } - }; - - onDeleteSplit = transaction => { - let { transactions } = this.state; - let { data } = deleteTransaction(transactions, transaction.id); - this.setState({ transactions: data }); - }; - - renderActions = (progress, dragX) => { - const trans = dragX.interpolate({ - inputRange: [-101, -100, -50, 0], - outputRange: [-6, -5, -5, 20] - }); - return ( - - - Delete - - - ); - }; - - render() { - const { - adding, - categories, - accounts, - payees, - renderChildEdit, - navigation, - onDelete - } = this.props; - const { editingChild } = this.state; - const transactions = this.serializeTransactions( - this.state.transactions || [] - ); - const [transaction, ...childTransactions] = transactions; - const { payee: payeeId, category, account: accountId } = transaction; - - // Child transactions should always default to the signage - // of the parent transaction - let forcedSign = transaction.amount < 0 ? 'negative' : 'positive'; - - let account = getAccountsById(accounts)[accountId]; - let payee = payees && payeeId && getPayeesById(payees)[payeeId]; - let transferAcct = - payee && - payee.transfer_acct && - getAccountsById(accounts)[payee.transfer_acct]; - - let descriptionPretty = getDescriptionPretty( - transaction, - payee, - transferAcct - ); - - return ( - - - - - - {payeeId == null - ? adding - ? 'New Transaction' - : 'Transaction' - : descriptionPretty} - - - - (this.scrollView = el)} - automaticallyAdjustContentInsets={false} - keyboardShouldPersistTaps="always" - style={{ - backgroundColor: colors.n11, - flexGrow: 1, - overflow: 'hidden' - }} - contentContainerStyle={{ flexGrow: 1 }} - > - - - (this.amount = el)} - value={transaction.amount} - zeroIsNegative={true} - onBlur={value => - this.onEdit(transaction, 'amount', value.toString()) - } - onChange={value => - this.onQueueChange(transaction, 'amount', value) - } - style={{ height: 37, transform: [] }} - focusedStyle={{ - width: 'auto', - paddingVertical: 0, - paddingHorizontal: 10, - minWidth: 120, - transform: [{ translateY: -0.5 }] - }} - textStyle={{ fontSize: 30, textAlign: 'center' }} - /> - - - - this.onTap(transaction.id, 'payee')} - /> - - - - {!transaction.is_parent ? ( - - Split - - } - onTap={() => this.onTap(transaction.id, 'category')} - /> - ) : ( - - {childTransactions.map((child, idx) => { - const isLast = idx === childTransactions.length - 1; - return ( - this.onDeleteSplit(child)} - rightThreshold={100} - > - (this.lastChildAmount = el) - : null - } - value={child.amount} - sign={forcedSign} - scrollIntoView={true} - buttonProps={{ - paddingVertical: 5, - style: { - width: 80, - alignItems: 'flex-end' - } - }} - textStyle={{ fontSize: 14 }} - onBlur={value => - this.onEdit(child, 'amount', value.toString()) - } - /> - } - style={{ marginTop: idx === 0 ? 0 : -1 }} - onTap={() => this.openChildEdit(child)} - /> - - ); - })} - - - {transaction.error && ( - - Remaining:{' '} - {integerToCurrency(transaction.error.difference)} - - )} - - - - )} - - - - this.onTap(transaction.id, 'account')} - /> - - - - - this.onEdit(transaction, 'date', value)} - onChange={e => - this.onQueueChange( - transaction, - 'date', - e.nativeEvent.text - ) - } - /> - - - - - - this.onEdit(transaction, 'cleared', value) - } - style={{ marginTop: 4 }} - /> - - - - - this.onEdit(transaction, 'notes', value)} - onChange={e => - this.onQueueChange(transaction, 'notes', e.nativeEvent.text) - } - /> - - {!adding && ( - - - - )} - - - - {adding ? ( - - ) : ( - - )} - - - t.id === editingChild) - }} - > - {(exiting, onDone, { transaction }) => - renderChildEdit({ - transaction, - exiting, - amountSign: forcedSign, - getCategoryName: id => - id ? lookupName(categories, id) : null, - navigation: navigation, - onEdit: this.onEdit, - onStartClose: this.onSaveChild, - onClose: onDone - }) - } - - - - - ); - } -} - -export function DateHeader({ date }) { - return ( - - - {monthUtils.format(date, 'MMMM dd, yyyy')} - - - ); -} - -function Status({ status }) { - let color; - - switch (status) { - case 'missed': - color = colors.r3; - break; - case 'due': - color = colors.y3; - break; - case 'upcoming': - color = colors.n4; - break; - default: - } - - return ( - - {titleFirst(status)} - - ); -} - -export class Transaction extends React.PureComponent { - render() { - const { - transaction, - accounts, - categories, - payees, - showCategory, - added, - onSelect, - style - } = this.props; - let { - id, - payee: payeeId, - amount, - category, - cleared, - is_parent, - notes, - schedule - } = transaction; - let categoryName = category ? lookupName(categories, category) : null; - - let payee = payees && payeeId && getPayeesById(payees)[payeeId]; - let transferAcct = - payee && - payee.transfer_acct && - getAccountsById(accounts)[payee.transfer_acct]; - - let prettyDescription = getDescriptionPretty( - transaction, - payee, - transferAcct - ); - let prettyCategory = transferAcct - ? 'Transfer' - : is_parent - ? 'Split' - : categoryName; - - let isPreview = isPreviewId(id); - let textStyle = isPreview && { - fontStyle: 'italic', - color: colors.n5 - }; - - return ( - onSelect(transaction)} - style={{ backgroundColor: 'white' }} - activeOpacity={0.1} - > - - - - {schedule && ( - - )} - - {prettyDescription || 'Empty'} - - - {isPreview ? ( - - ) : ( - - - {showCategory && ( - - {prettyCategory || 'Uncategorized'} - - )} - - )} - - - {integerToCurrency(amount)} - - - - ); - } -} - -export class TransactionList extends React.Component { - makeData = memoizeOne(transactions => { - // Group by date. We can assume transactions is ordered - const sections = []; - transactions.forEach(transaction => { - if ( - sections.length === 0 || - transaction.date !== sections[sections.length - 1].date - ) { - // Mark the last transaction in the section so it can render - // with a different border - let lastSection = sections[sections.length - 1]; - if (lastSection && lastSection.data.length > 0) { - let lastData = lastSection.data; - lastData[lastData.length - 1].isLast = true; - } - - sections.push({ - id: transaction.date, - date: transaction.date, - data: [] - }); - } - - if (!transaction.is_child) { - sections[sections.length - 1].data.push(transaction); - } - }); - return sections; - }); - - renderSection({ section }) { - return ; - } - - renderItem = ({ item }) => { - return ( - this.props.onSelect(item)} - /> - ); - }; - - render() { - const { - transactions, - style, - scrollProps = {}, - onLoadMore, - refreshControl - } = this.props; - - return ( - {scrollProps.ListHeaderComponent} - } - renderItem={this.renderItem} - renderSectionHeader={this.renderSection} - sections={this.makeData(transactions)} - keyExtractor={item => item.id} - refreshControl={refreshControl} - onEndReachedThreshold={0.5} - onEndReached={onLoadMore} - /> - ); - } -} diff --git a/packages/loot-design/src/components/mobile/transaction.usage.js b/packages/loot-design/src/components/mobile/transaction.usage.js deleted file mode 100644 index 7fae136bcf..0000000000 --- a/packages/loot-design/src/components/mobile/transaction.usage.js +++ /dev/null @@ -1,64 +0,0 @@ -import React from 'react'; - -import { - generateAccount, - generateCategory, - generateTransaction -} from 'loot-core/src/mocks'; -import * as monthUtils from 'loot-core/src/shared/months'; - -import { Section, MobileSection } from '../../guide/components'; -import { colors } from '../../style'; -import { TransactionList, TransactionEdit } from './transaction'; - -export const accounts = [generateAccount('Checking')]; - -export const categories = [ - generateCategory('Food'), - generateCategory('Bills'), - generateCategory('Big Projects'), - generateCategory('Other Stuff') -]; - -export let transactions = []; -for (let i = 0; i < 100; i++) { - transactions.push.apply( - transactions, - generateTransaction({ - acct: accounts[0].id, - category: categories[Math.round(Math.random() * 3)].id, - date: monthUtils.subDays(monthUtils.currentDay(), Math.random() * 100) - }) - ); -} -transactions.sort((t1, t2) => { - return monthUtils.isBefore(t1.date, t2.date) - ? 1 - : monthUtils.isAfter(t1.date, t2.date) - ? -1 - : 0; -}); -transactions[1].description = - 'A really long one to test to see what happens when there iss too much'; - -export default () => ( -
- Transactions - - false} - /> - - Transaction Edit - - {}} - /> - -
-); diff --git a/packages/loot-design/src/guide/mocks/makeMockObject.js b/packages/loot-design/src/guide/mocks/makeMockObject.js deleted file mode 100644 index c94d918502..0000000000 --- a/packages/loot-design/src/guide/mocks/makeMockObject.js +++ /dev/null @@ -1,18 +0,0 @@ -export default function makeMockObject(obj) { - let mocked = (() => { - const fn = () => mocked; - fn.toString = fn.toLocaleString = fn[Symbol.toPrimitive] = () => ''; - fn.valueOf = () => false; - - return new Proxy(Object.freeze(fn), { - get: (o, key) => - o.hasOwnProperty(key) - ? o[key] - : obj.hasOwnProperty(key) - ? obj[key] - : mocked - }); - })(); - - return mocked; -} diff --git a/packages/loot-design/src/guide/mocks/react-native-gesture-handler.js b/packages/loot-design/src/guide/mocks/react-native-gesture-handler.js deleted file mode 100644 index 190af5344f..0000000000 --- a/packages/loot-design/src/guide/mocks/react-native-gesture-handler.js +++ /dev/null @@ -1,16 +0,0 @@ -import React from 'react'; -import { TouchableOpacity } from 'react-native'; - -let NoopComponent = React.forwardRef(({ children }, ref) => children); - -export const RectButton = React.forwardRef((props, ref) => { - return ; -}); - -export let Swipeable = NoopComponent; -export let PanGestureHandler = NoopComponent; -export let TapGestureHandler = NoopComponent; -export let LongPressGestureHandler = NoopComponent; -export let NativeViewGestureHandler = NoopComponent; - -export let State = {}; diff --git a/packages/loot-design/src/guide/mocks/react-native-reanimated.js b/packages/loot-design/src/guide/mocks/react-native-reanimated.js deleted file mode 100644 index 0840c4b299..0000000000 --- a/packages/loot-design/src/guide/mocks/react-native-reanimated.js +++ /dev/null @@ -1,15 +0,0 @@ -import React from 'react'; -import { ScrollView } from 'react-native'; - -import makeMockObject from './makeMockObject'; - -let NoopComponent = React.forwardRef(({ children }, ref) => children); - -let Animated = makeMockObject({ - View: NoopComponent, - ScrollView, - Value: class {} -}); - -export default Animated; -export let Easing = makeMockObject({}); diff --git a/packages/loot-design/src/guide/mocks/react-native-status-bar-height.js b/packages/loot-design/src/guide/mocks/react-native-status-bar-height.js deleted file mode 100644 index eece5c9b24..0000000000 --- a/packages/loot-design/src/guide/mocks/react-native-status-bar-height.js +++ /dev/null @@ -1,3 +0,0 @@ -export function getStatusBarHeight() { - return 0; -} diff --git a/packages/loot-design/src/setupTests.js b/packages/loot-design/src/setupTests.js index 1348a9c23e..396239dabe 100644 --- a/packages/loot-design/src/setupTests.js +++ b/packages/loot-design/src/setupTests.js @@ -35,18 +35,6 @@ global.__resetWorld = () => { resetStore(); }; -// This uses the `global` instead of `process.env` because it allows -// to be specified by the jest configuration for a specific project, -// allowing us to run all tests with the multi-project runner. -if (global.IS_REACT_NATIVE) { - fireEvent['press'] = (node, init) => { - act(() => { - fireEvent.mouseDown(node, init); - fireEvent.mouseUp(node, init); - }); - }; -} - process.on('unhandledRejection', reason => { console.log('REJECTION', reason); }); diff --git a/packages/loot-design/src/svg/Add.mobile.js b/packages/loot-design/src/svg/Add.mobile.js deleted file mode 100644 index 1e3c99a3e9..0000000000 --- a/packages/loot-design/src/svg/Add.mobile.js +++ /dev/null @@ -1,49 +0,0 @@ -/* eslint no-unused-vars: 0 */ -/* This file is auto-generated, do not touch! Please edit the SVG file instead. */ -import React from 'react'; - -import { - Svg, - Circle, - Ellipse, - G, - LinearGradient, - RadialGradient, - Line, - Path, - Polygon, - Polyline, - Rect, - Symbol, - Text, - Use, - Defs, - Stop -} from 'mobile/node_modules/react-native-svg'; - -function Add({ width, height, style, color = 'black', ...props }) { - return ( - - - - - ); -} - -export default Add; diff --git a/packages/loot-design/src/svg/Delete.mobile.js b/packages/loot-design/src/svg/Delete.mobile.js deleted file mode 100644 index 1def395521..0000000000 --- a/packages/loot-design/src/svg/Delete.mobile.js +++ /dev/null @@ -1,63 +0,0 @@ -/* eslint no-unused-vars: 0 */ -/* This file is auto-generated, do not touch! Please edit the SVG file instead. */ -import React from 'react'; - -import { - Svg, - Circle, - Ellipse, - G, - LinearGradient, - RadialGradient, - Line, - Path, - Polygon, - Polyline, - Rect, - Symbol, - Text, - Use, - Defs, - Stop -} from 'mobile/node_modules/react-native-svg'; - -function Delete({ width, height, style, color = 'black', ...props }) { - return ( - - - - - ); -} - -export default Delete; diff --git a/packages/loot-design/src/svg/ExpandArrow.mobile.js b/packages/loot-design/src/svg/ExpandArrow.mobile.js deleted file mode 100644 index 8df38aa0e8..0000000000 --- a/packages/loot-design/src/svg/ExpandArrow.mobile.js +++ /dev/null @@ -1,44 +0,0 @@ -/* eslint no-unused-vars: 0 */ -/* This file is auto-generated, do not touch! Please edit the SVG file instead. */ -import React from 'react'; - -import { - Svg, - Circle, - Ellipse, - G, - LinearGradient, - RadialGradient, - Line, - Path, - Polygon, - Polyline, - Rect, - Symbol, - Text, - Use, - Defs, - Stop -} from 'mobile/node_modules/react-native-svg'; - -function ExpandArrow({ width, height, style, color = 'black', ...props }) { - return ( - - - - ); -} - -export default ExpandArrow; diff --git a/packages/loot-design/src/svg/LeftArrow2.mobile.js b/packages/loot-design/src/svg/LeftArrow2.mobile.js deleted file mode 100644 index 12fadb040a..0000000000 --- a/packages/loot-design/src/svg/LeftArrow2.mobile.js +++ /dev/null @@ -1,44 +0,0 @@ -/* eslint no-unused-vars: 0 */ -/* This file is auto-generated, do not touch! Please edit the SVG file instead. */ -import React from 'react'; - -import { - Svg, - Circle, - Ellipse, - G, - LinearGradient, - RadialGradient, - Line, - Path, - Polygon, - Polyline, - Rect, - Symbol, - Text, - Use, - Defs, - Stop -} from 'mobile/node_modules/react-native-svg'; - -function LeftArrow2({ width, height, style, color = 'black', ...props }) { - return ( - - - - ); -} - -export default LeftArrow2; diff --git a/packages/loot-design/src/svg/Math.mobile.js b/packages/loot-design/src/svg/Math.mobile.js deleted file mode 100644 index 5968d320de..0000000000 --- a/packages/loot-design/src/svg/Math.mobile.js +++ /dev/null @@ -1,44 +0,0 @@ -/* eslint no-unused-vars: 0 */ -/* This file is auto-generated, do not touch! Please edit the SVG file instead. */ -import React from 'react'; - -import { - Svg, - Circle, - Ellipse, - G, - LinearGradient, - RadialGradient, - Line, - Path, - Polygon, - Polyline, - Rect, - Symbol, - Text, - Use, - Defs, - Stop -} from 'mobile/node_modules/react-native-svg'; - -function Math({ width, height, style, color = 'black', ...props }) { - return ( - - - - ); -} - -export default Math; diff --git a/packages/loot-design/src/svg/RightArrow2.mobile.js b/packages/loot-design/src/svg/RightArrow2.mobile.js deleted file mode 100644 index 796c67bc54..0000000000 --- a/packages/loot-design/src/svg/RightArrow2.mobile.js +++ /dev/null @@ -1,44 +0,0 @@ -/* eslint no-unused-vars: 0 */ -/* This file is auto-generated, do not touch! Please edit the SVG file instead. */ -import React from 'react'; - -import { - Svg, - Circle, - Ellipse, - G, - LinearGradient, - RadialGradient, - Line, - Path, - Polygon, - Polyline, - Rect, - Symbol, - Text, - Use, - Defs, - Stop -} from 'mobile/node_modules/react-native-svg'; - -function RightArrow2({ width, height, style, color = 'black', ...props }) { - return ( - - - - ); -} - -export default RightArrow2; diff --git a/packages/loot-design/src/svg/Subtract.mobile.js b/packages/loot-design/src/svg/Subtract.mobile.js deleted file mode 100644 index 307a86cf50..0000000000 --- a/packages/loot-design/src/svg/Subtract.mobile.js +++ /dev/null @@ -1,44 +0,0 @@ -/* eslint no-unused-vars: 0 */ -/* This file is auto-generated, do not touch! Please edit the SVG file instead. */ -import React from 'react'; - -import { - Svg, - Circle, - Ellipse, - G, - LinearGradient, - RadialGradient, - Line, - Path, - Polygon, - Polyline, - Rect, - Symbol, - Text, - Use, - Defs, - Stop -} from 'mobile/node_modules/react-native-svg'; - -function Add({ width, height, style, color = 'black', ...props }) { - return ( - - - - ); -} - -export default Add; diff --git a/packages/loot-design/src/svg/generate b/packages/loot-design/src/svg/generate index 985a497bf3..2c79230669 100755 --- a/packages/loot-design/src/svg/generate +++ b/packages/loot-design/src/svg/generate @@ -8,26 +8,7 @@ let traverse = require('@babel/traverse').default; let camelcase = require('camelcase'); let t = require('@babel/types'); -let reactNativeTags = [ - 'Svg', - 'Circle', - 'Ellipse', - 'G', - 'LinearGradient', - 'RadialGradient', - 'Line', - 'Path', - 'Polygon', - 'Polyline', - 'Rect', - 'Symbol', - 'Text', - 'Use', - 'Defs', - 'Stop' -]; - -function transformContents(name, contents, isReactNative) { +function transformContents(name, contents) { let halted = false; let output = prettier.format(contents, { @@ -63,22 +44,13 @@ function transformContents(name, contents, isReactNative) { ) ); - if (isReactNative) { - path.insertAfter( - t.jsxAttribute( - t.jsxIdentifier('style'), - t.jsxExpressionContainer(t.Identifier('style')) - ) - ); - } else { - path.insertAfter( - t.JSXSpreadAttribute( - t.callExpression(t.identifier('css'), [ - t.identifier('style') - ]) - ) - ); - } + path.insertAfter( + t.JSXSpreadAttribute( + t.callExpression(t.identifier('css'), [ + t.identifier('style') + ]) + ) + ); path.insertAfter( t.JSXSpreadAttribute(t.identifier('props')) @@ -132,25 +104,6 @@ function transformContents(name, contents, isReactNative) { path.scope, path ); - - if (isReactNative) { - const name = path.node.name.name; - path.node.name.name = name[0].toUpperCase() + name.slice(1); - } - }, - - JSXClosingElement(path) { - if (isReactNative) { - const name = path.node.name.name; - const rnName = name[0].toUpperCase() + name.slice(1); - - if (!reactNativeTags.includes(rnName)) { - halted = true; - path.stop(); - } else { - path.node.name.name = rnName; - } - } } }); @@ -162,16 +115,11 @@ function transformContents(name, contents, isReactNative) { return null; } - const reactNativeImport = ` - import {${reactNativeTags.join(', ')}} from 'mobile/node_modules/react-native-svg' - `; - output = ` /* eslint no-unused-vars: 0 */ /* This file is auto-generated, do not touch! Please edit the SVG file instead. */ import React from 'react'; -${!isReactNative ? `import { css } from 'glamor';` : ''} -${isReactNative ? reactNativeImport : ''} +import { css } from 'glamor'; function ${name}({ width, height, style, color = "black", ...props }) { return ${output} @@ -196,11 +144,8 @@ async function run() { let filepath = file.replace(/\.[^.]+$/, ''); let name = camelcase(basename(filepath)); - const webOutput = transformContents(title(name), contents, false); + const webOutput = transformContents(title(name), contents); fs.writeFileSync(`./${filepath}.web.js`, webOutput, 'utf8'); - - const rnOutput = transformContents(title(name), contents, true); - fs.writeFileSync(`./${filepath}.mobile.js`, rnOutput, 'utf8'); } } diff --git a/packages/loot-design/src/svg/generate-new b/packages/loot-design/src/svg/generate-new index 3112333083..920a0502d7 100755 --- a/packages/loot-design/src/svg/generate-new +++ b/packages/loot-design/src/svg/generate-new @@ -1,10 +1,5 @@ #!/bin/sh svgr --expand-props start --ext web.js -d v1 v1 -svgr --expand-props start --native --ext mobile.js -d v1 v1 - svgr --expand-props start --ext web.js -d logo logo -svgr --expand-props start --native --ext mobile.js -d logo logo - svgr --expand-props start --ext web.js -d v2 v2 -svgr --expand-props start --native --ext mobile.js -d v2 v2 diff --git a/packages/loot-design/src/svg/logo/Logo.ios.js b/packages/loot-design/src/svg/logo/Logo.ios.js deleted file mode 100644 index cd74b3a379..0000000000 --- a/packages/loot-design/src/svg/logo/Logo.ios.js +++ /dev/null @@ -1,26 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgLogo = props => ( - - - - -); - -export default SvgLogo; diff --git a/packages/loot-design/src/svg/logo/Logo.mobile.js b/packages/loot-design/src/svg/logo/Logo.mobile.js deleted file mode 100644 index cd74b3a379..0000000000 --- a/packages/loot-design/src/svg/logo/Logo.mobile.js +++ /dev/null @@ -1,26 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgLogo = props => ( - - - - -); - -export default SvgLogo; diff --git a/packages/loot-design/src/svg/merge.mobile.js b/packages/loot-design/src/svg/merge.mobile.js deleted file mode 100644 index 40a4551080..0000000000 --- a/packages/loot-design/src/svg/merge.mobile.js +++ /dev/null @@ -1,95 +0,0 @@ -/* eslint no-unused-vars: 0 */ -/* This file is auto-generated, do not touch! Please edit the SVG file instead. */ -import React from 'react'; - -import { - Svg, - Circle, - Ellipse, - G, - LinearGradient, - RadialGradient, - Line, - Path, - Polygon, - Polyline, - Rect, - Symbol, - Text, - Use, - Defs, - Stop -} from 'mobile/node_modules/react-native-svg'; - -function Merge({ width, height, style, color = 'black', ...props }) { - return ( - - - - - - - - - - ); -} - -export default Merge; diff --git a/packages/loot-design/src/svg/split.mobile.js b/packages/loot-design/src/svg/split.mobile.js deleted file mode 100644 index afcbe0adda..0000000000 --- a/packages/loot-design/src/svg/split.mobile.js +++ /dev/null @@ -1,111 +0,0 @@ -/* eslint no-unused-vars: 0 */ -/* This file is auto-generated, do not touch! Please edit the SVG file instead. */ -import React from 'react'; - -import { - Svg, - Circle, - Ellipse, - G, - LinearGradient, - RadialGradient, - Line, - Path, - Polygon, - Polyline, - Rect, - Symbol, - Text, - Use, - Defs, - Stop -} from 'mobile/node_modules/react-native-svg'; - -function Split({ width, height, style, color = 'black', ...props }) { - return ( - - - - - - - - - - - - ); -} - -export default Split; diff --git a/packages/loot-design/src/svg/v1/Add.mobile.js b/packages/loot-design/src/svg/v1/Add.mobile.js deleted file mode 100644 index 511029dd40..0000000000 --- a/packages/loot-design/src/svg/v1/Add.mobile.js +++ /dev/null @@ -1,26 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgAdd = props => ( - - - - -); - -export default SvgAdd; diff --git a/packages/loot-design/src/svg/v1/AddOutline.mobile.js b/packages/loot-design/src/svg/v1/AddOutline.mobile.js deleted file mode 100644 index 416e35ff1d..0000000000 --- a/packages/loot-design/src/svg/v1/AddOutline.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgAddOutline = props => ( - - - -); - -export default SvgAddOutline; diff --git a/packages/loot-design/src/svg/v1/AddSolid.mobile.js b/packages/loot-design/src/svg/v1/AddSolid.mobile.js deleted file mode 100644 index 0b751187c0..0000000000 --- a/packages/loot-design/src/svg/v1/AddSolid.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgAddSolid = props => ( - - - -); - -export default SvgAddSolid; diff --git a/packages/loot-design/src/svg/v1/Adjust.mobile.js b/packages/loot-design/src/svg/v1/Adjust.mobile.js deleted file mode 100644 index 2da863a2d5..0000000000 --- a/packages/loot-design/src/svg/v1/Adjust.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgAdjust = props => ( - - - -); - -export default SvgAdjust; diff --git a/packages/loot-design/src/svg/v1/Airplane.mobile.js b/packages/loot-design/src/svg/v1/Airplane.mobile.js deleted file mode 100644 index 86517543b8..0000000000 --- a/packages/loot-design/src/svg/v1/Airplane.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgAirplane = props => ( - - - -); - -export default SvgAirplane; diff --git a/packages/loot-design/src/svg/v1/Album.mobile.js b/packages/loot-design/src/svg/v1/Album.mobile.js deleted file mode 100644 index 1060fe754b..0000000000 --- a/packages/loot-design/src/svg/v1/Album.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgAlbum = props => ( - - - -); - -export default SvgAlbum; diff --git a/packages/loot-design/src/svg/v1/AlignCenter.mobile.js b/packages/loot-design/src/svg/v1/AlignCenter.mobile.js deleted file mode 100644 index f71a653f19..0000000000 --- a/packages/loot-design/src/svg/v1/AlignCenter.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgAlignCenter = props => ( - - - -); - -export default SvgAlignCenter; diff --git a/packages/loot-design/src/svg/v1/AlignJustified.mobile.js b/packages/loot-design/src/svg/v1/AlignJustified.mobile.js deleted file mode 100644 index 59a5df01dc..0000000000 --- a/packages/loot-design/src/svg/v1/AlignJustified.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgAlignJustified = props => ( - - - -); - -export default SvgAlignJustified; diff --git a/packages/loot-design/src/svg/v1/AlignLeft.mobile.js b/packages/loot-design/src/svg/v1/AlignLeft.mobile.js deleted file mode 100644 index 42f3088edf..0000000000 --- a/packages/loot-design/src/svg/v1/AlignLeft.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgAlignLeft = props => ( - - - -); - -export default SvgAlignLeft; diff --git a/packages/loot-design/src/svg/v1/AlignRight.mobile.js b/packages/loot-design/src/svg/v1/AlignRight.mobile.js deleted file mode 100644 index 38910d05cd..0000000000 --- a/packages/loot-design/src/svg/v1/AlignRight.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgAlignRight = props => ( - - - -); - -export default SvgAlignRight; diff --git a/packages/loot-design/src/svg/v1/Anchor.mobile.js b/packages/loot-design/src/svg/v1/Anchor.mobile.js deleted file mode 100644 index a2266ec36c..0000000000 --- a/packages/loot-design/src/svg/v1/Anchor.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgAnchor = props => ( - - - -); - -export default SvgAnchor; diff --git a/packages/loot-design/src/svg/v1/AnimatedLoading.mobile.js b/packages/loot-design/src/svg/v1/AnimatedLoading.mobile.js deleted file mode 100644 index 10492d2a78..0000000000 --- a/packages/loot-design/src/svg/v1/AnimatedLoading.mobile.js +++ /dev/null @@ -1,49 +0,0 @@ -import React from 'react'; -import { Animated, Easing } from 'react-native'; - -import Loading from './Loading'; - -class AnimatedLoading extends React.Component { - constructor() { - super(); - this.rotation = new Animated.Value(-0.25); - } - - componentDidMount() { - this.animate(); - } - - animate() { - this.rotation.setValue(-0.15); - Animated.timing(this.rotation, { - toValue: 1.85, - duration: 1600, - easing: Easing.bezier(0.17, 0.67, 0.83, 0.67), - useNativeDriver: true - }).start(() => this.animate()); - } - - render() { - const { color, width, height, style } = this.props; - - return ( - - - - ); - } -} - -export default AnimatedLoading; diff --git a/packages/loot-design/src/svg/v1/Announcement.mobile.js b/packages/loot-design/src/svg/v1/Announcement.mobile.js deleted file mode 100644 index 238479c7b5..0000000000 --- a/packages/loot-design/src/svg/v1/Announcement.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgAnnouncement = props => ( - - - -); - -export default SvgAnnouncement; diff --git a/packages/loot-design/src/svg/v1/Apparel.mobile.js b/packages/loot-design/src/svg/v1/Apparel.mobile.js deleted file mode 100644 index 3037129458..0000000000 --- a/packages/loot-design/src/svg/v1/Apparel.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgApparel = props => ( - - - -); - -export default SvgApparel; diff --git a/packages/loot-design/src/svg/v1/ArrowDown.mobile.js b/packages/loot-design/src/svg/v1/ArrowDown.mobile.js deleted file mode 100644 index 5cfa229e1f..0000000000 --- a/packages/loot-design/src/svg/v1/ArrowDown.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgArrowDown = props => ( - - - -); - -export default SvgArrowDown; diff --git a/packages/loot-design/src/svg/v1/ArrowLeft.mobile.js b/packages/loot-design/src/svg/v1/ArrowLeft.mobile.js deleted file mode 100644 index e570b034c5..0000000000 --- a/packages/loot-design/src/svg/v1/ArrowLeft.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgArrowLeft = props => ( - - - -); - -export default SvgArrowLeft; diff --git a/packages/loot-design/src/svg/v1/ArrowOutlineDown.mobile.js b/packages/loot-design/src/svg/v1/ArrowOutlineDown.mobile.js deleted file mode 100644 index e18312b83b..0000000000 --- a/packages/loot-design/src/svg/v1/ArrowOutlineDown.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgArrowOutlineDown = props => ( - - - -); - -export default SvgArrowOutlineDown; diff --git a/packages/loot-design/src/svg/v1/ArrowOutlineLeft.mobile.js b/packages/loot-design/src/svg/v1/ArrowOutlineLeft.mobile.js deleted file mode 100644 index d6be733f41..0000000000 --- a/packages/loot-design/src/svg/v1/ArrowOutlineLeft.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgArrowOutlineLeft = props => ( - - - -); - -export default SvgArrowOutlineLeft; diff --git a/packages/loot-design/src/svg/v1/ArrowOutlineRight.mobile.js b/packages/loot-design/src/svg/v1/ArrowOutlineRight.mobile.js deleted file mode 100644 index 4d7476ac24..0000000000 --- a/packages/loot-design/src/svg/v1/ArrowOutlineRight.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgArrowOutlineRight = props => ( - - - -); - -export default SvgArrowOutlineRight; diff --git a/packages/loot-design/src/svg/v1/ArrowOutlineUp.mobile.js b/packages/loot-design/src/svg/v1/ArrowOutlineUp.mobile.js deleted file mode 100644 index cff32d5ec6..0000000000 --- a/packages/loot-design/src/svg/v1/ArrowOutlineUp.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgArrowOutlineUp = props => ( - - - -); - -export default SvgArrowOutlineUp; diff --git a/packages/loot-design/src/svg/v1/ArrowRight.mobile.js b/packages/loot-design/src/svg/v1/ArrowRight.mobile.js deleted file mode 100644 index a6270dfa0c..0000000000 --- a/packages/loot-design/src/svg/v1/ArrowRight.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgArrowRight = props => ( - - - -); - -export default SvgArrowRight; diff --git a/packages/loot-design/src/svg/v1/ArrowThickDown.mobile.js b/packages/loot-design/src/svg/v1/ArrowThickDown.mobile.js deleted file mode 100644 index 2664c87141..0000000000 --- a/packages/loot-design/src/svg/v1/ArrowThickDown.mobile.js +++ /dev/null @@ -1,17 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgArrowThickDown = props => ( - - - -); - -export default SvgArrowThickDown; diff --git a/packages/loot-design/src/svg/v1/ArrowThickLeft.mobile.js b/packages/loot-design/src/svg/v1/ArrowThickLeft.mobile.js deleted file mode 100644 index ff66348ea6..0000000000 --- a/packages/loot-design/src/svg/v1/ArrowThickLeft.mobile.js +++ /dev/null @@ -1,17 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgArrowThickLeft = props => ( - - - -); - -export default SvgArrowThickLeft; diff --git a/packages/loot-design/src/svg/v1/ArrowThickRight.mobile.js b/packages/loot-design/src/svg/v1/ArrowThickRight.mobile.js deleted file mode 100644 index 75a0be64af..0000000000 --- a/packages/loot-design/src/svg/v1/ArrowThickRight.mobile.js +++ /dev/null @@ -1,17 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgArrowThickRight = props => ( - - - -); - -export default SvgArrowThickRight; diff --git a/packages/loot-design/src/svg/v1/ArrowThickUp.mobile.js b/packages/loot-design/src/svg/v1/ArrowThickUp.mobile.js deleted file mode 100644 index 10b41425a2..0000000000 --- a/packages/loot-design/src/svg/v1/ArrowThickUp.mobile.js +++ /dev/null @@ -1,17 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgArrowThickUp = props => ( - - - -); - -export default SvgArrowThickUp; diff --git a/packages/loot-design/src/svg/v1/ArrowThinDown.mobile.js b/packages/loot-design/src/svg/v1/ArrowThinDown.mobile.js deleted file mode 100644 index 50824cd90f..0000000000 --- a/packages/loot-design/src/svg/v1/ArrowThinDown.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgArrowThinDown = props => ( - - - -); - -export default SvgArrowThinDown; diff --git a/packages/loot-design/src/svg/v1/ArrowThinLeft.mobile.js b/packages/loot-design/src/svg/v1/ArrowThinLeft.mobile.js deleted file mode 100644 index 4873a755f0..0000000000 --- a/packages/loot-design/src/svg/v1/ArrowThinLeft.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgArrowThinLeft = props => ( - - - -); - -export default SvgArrowThinLeft; diff --git a/packages/loot-design/src/svg/v1/ArrowThinRight.mobile.js b/packages/loot-design/src/svg/v1/ArrowThinRight.mobile.js deleted file mode 100644 index 3e1cfe337f..0000000000 --- a/packages/loot-design/src/svg/v1/ArrowThinRight.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgArrowThinRight = props => ( - - - -); - -export default SvgArrowThinRight; diff --git a/packages/loot-design/src/svg/v1/ArrowThinUp.mobile.js b/packages/loot-design/src/svg/v1/ArrowThinUp.mobile.js deleted file mode 100644 index 4dad5d2507..0000000000 --- a/packages/loot-design/src/svg/v1/ArrowThinUp.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgArrowThinUp = props => ( - - - -); - -export default SvgArrowThinUp; diff --git a/packages/loot-design/src/svg/v1/ArrowUp.mobile.js b/packages/loot-design/src/svg/v1/ArrowUp.mobile.js deleted file mode 100644 index bbdaf254e2..0000000000 --- a/packages/loot-design/src/svg/v1/ArrowUp.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgArrowUp = props => ( - - - -); - -export default SvgArrowUp; diff --git a/packages/loot-design/src/svg/v1/Artist.mobile.js b/packages/loot-design/src/svg/v1/Artist.mobile.js deleted file mode 100644 index 7939cc410f..0000000000 --- a/packages/loot-design/src/svg/v1/Artist.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgArtist = props => ( - - - -); - -export default SvgArtist; diff --git a/packages/loot-design/src/svg/v1/AtSymbol.mobile.js b/packages/loot-design/src/svg/v1/AtSymbol.mobile.js deleted file mode 100644 index 5c329889b0..0000000000 --- a/packages/loot-design/src/svg/v1/AtSymbol.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgAtSymbol = props => ( - - - -); - -export default SvgAtSymbol; diff --git a/packages/loot-design/src/svg/v1/Attachment.mobile.js b/packages/loot-design/src/svg/v1/Attachment.mobile.js deleted file mode 100644 index 047de8f62a..0000000000 --- a/packages/loot-design/src/svg/v1/Attachment.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgAttachment = props => ( - - - -); - -export default SvgAttachment; diff --git a/packages/loot-design/src/svg/v1/Backspace.mobile.js b/packages/loot-design/src/svg/v1/Backspace.mobile.js deleted file mode 100644 index 34cfac74ac..0000000000 --- a/packages/loot-design/src/svg/v1/Backspace.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgBackspace = props => ( - - - -); - -export default SvgBackspace; diff --git a/packages/loot-design/src/svg/v1/Backward.mobile.js b/packages/loot-design/src/svg/v1/Backward.mobile.js deleted file mode 100644 index 9e2d135014..0000000000 --- a/packages/loot-design/src/svg/v1/Backward.mobile.js +++ /dev/null @@ -1,17 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgBackward = props => ( - - - -); - -export default SvgBackward; diff --git a/packages/loot-design/src/svg/v1/BackwardStep.mobile.js b/packages/loot-design/src/svg/v1/BackwardStep.mobile.js deleted file mode 100644 index 2fc5150a22..0000000000 --- a/packages/loot-design/src/svg/v1/BackwardStep.mobile.js +++ /dev/null @@ -1,17 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgBackwardStep = props => ( - - - -); - -export default SvgBackwardStep; diff --git a/packages/loot-design/src/svg/v1/Badge.mobile.js b/packages/loot-design/src/svg/v1/Badge.mobile.js deleted file mode 100644 index 0a3d39f150..0000000000 --- a/packages/loot-design/src/svg/v1/Badge.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgBadge = props => ( - - - -); - -export default SvgBadge; diff --git a/packages/loot-design/src/svg/v1/BatteryFull.mobile.js b/packages/loot-design/src/svg/v1/BatteryFull.mobile.js deleted file mode 100644 index cddb7fd784..0000000000 --- a/packages/loot-design/src/svg/v1/BatteryFull.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgBatteryFull = props => ( - - - -); - -export default SvgBatteryFull; diff --git a/packages/loot-design/src/svg/v1/BatteryHalf.mobile.js b/packages/loot-design/src/svg/v1/BatteryHalf.mobile.js deleted file mode 100644 index fd8870cdaf..0000000000 --- a/packages/loot-design/src/svg/v1/BatteryHalf.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgBatteryHalf = props => ( - - - -); - -export default SvgBatteryHalf; diff --git a/packages/loot-design/src/svg/v1/BatteryLow.mobile.js b/packages/loot-design/src/svg/v1/BatteryLow.mobile.js deleted file mode 100644 index 669b8c7230..0000000000 --- a/packages/loot-design/src/svg/v1/BatteryLow.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgBatteryLow = props => ( - - - -); - -export default SvgBatteryLow; diff --git a/packages/loot-design/src/svg/v1/Beverage.mobile.js b/packages/loot-design/src/svg/v1/Beverage.mobile.js deleted file mode 100644 index 3d14decbfc..0000000000 --- a/packages/loot-design/src/svg/v1/Beverage.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgBeverage = props => ( - - - -); - -export default SvgBeverage; diff --git a/packages/loot-design/src/svg/v1/Block.mobile.js b/packages/loot-design/src/svg/v1/Block.mobile.js deleted file mode 100644 index fe5230d49a..0000000000 --- a/packages/loot-design/src/svg/v1/Block.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgBlock = props => ( - - - -); - -export default SvgBlock; diff --git a/packages/loot-design/src/svg/v1/Bluetooth.mobile.js b/packages/loot-design/src/svg/v1/Bluetooth.mobile.js deleted file mode 100644 index ff96d91834..0000000000 --- a/packages/loot-design/src/svg/v1/Bluetooth.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgBluetooth = props => ( - - - -); - -export default SvgBluetooth; diff --git a/packages/loot-design/src/svg/v1/Bolt.mobile.js b/packages/loot-design/src/svg/v1/Bolt.mobile.js deleted file mode 100644 index b9f2ae067e..0000000000 --- a/packages/loot-design/src/svg/v1/Bolt.mobile.js +++ /dev/null @@ -1,17 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgBolt = props => ( - - - -); - -export default SvgBolt; diff --git a/packages/loot-design/src/svg/v1/BookReference.mobile.js b/packages/loot-design/src/svg/v1/BookReference.mobile.js deleted file mode 100644 index 098e98e040..0000000000 --- a/packages/loot-design/src/svg/v1/BookReference.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgBookReference = props => ( - - - -); - -export default SvgBookReference; diff --git a/packages/loot-design/src/svg/v1/Bookmark.mobile.js b/packages/loot-design/src/svg/v1/Bookmark.mobile.js deleted file mode 100644 index c47cc1bb66..0000000000 --- a/packages/loot-design/src/svg/v1/Bookmark.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgBookmark = props => ( - - - -); - -export default SvgBookmark; diff --git a/packages/loot-design/src/svg/v1/BookmarkCopy2.mobile.js b/packages/loot-design/src/svg/v1/BookmarkCopy2.mobile.js deleted file mode 100644 index 04c71a3ac9..0000000000 --- a/packages/loot-design/src/svg/v1/BookmarkCopy2.mobile.js +++ /dev/null @@ -1,17 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgBookmarkCopy2 = props => ( - - - -); - -export default SvgBookmarkCopy2; diff --git a/packages/loot-design/src/svg/v1/BookmarkCopy3.mobile.js b/packages/loot-design/src/svg/v1/BookmarkCopy3.mobile.js deleted file mode 100644 index c4a7f3850c..0000000000 --- a/packages/loot-design/src/svg/v1/BookmarkCopy3.mobile.js +++ /dev/null @@ -1,17 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgBookmarkCopy3 = props => ( - - - -); - -export default SvgBookmarkCopy3; diff --git a/packages/loot-design/src/svg/v1/BookmarkOutline.mobile.js b/packages/loot-design/src/svg/v1/BookmarkOutline.mobile.js deleted file mode 100644 index f222d343a9..0000000000 --- a/packages/loot-design/src/svg/v1/BookmarkOutline.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgBookmarkOutline = props => ( - - - -); - -export default SvgBookmarkOutline; diff --git a/packages/loot-design/src/svg/v1/BookmarkOutlineAdd.mobile.js b/packages/loot-design/src/svg/v1/BookmarkOutlineAdd.mobile.js deleted file mode 100644 index dd7835dc8b..0000000000 --- a/packages/loot-design/src/svg/v1/BookmarkOutlineAdd.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgBookmarkOutlineAdd = props => ( - - - -); - -export default SvgBookmarkOutlineAdd; diff --git a/packages/loot-design/src/svg/v1/BorderAll.mobile.js b/packages/loot-design/src/svg/v1/BorderAll.mobile.js deleted file mode 100644 index 8561d12fe3..0000000000 --- a/packages/loot-design/src/svg/v1/BorderAll.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgBorderAll = props => ( - - - -); - -export default SvgBorderAll; diff --git a/packages/loot-design/src/svg/v1/BorderBottom.mobile.js b/packages/loot-design/src/svg/v1/BorderBottom.mobile.js deleted file mode 100644 index ae751cb22f..0000000000 --- a/packages/loot-design/src/svg/v1/BorderBottom.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgBorderBottom = props => ( - - - -); - -export default SvgBorderBottom; diff --git a/packages/loot-design/src/svg/v1/BorderHorizontal.mobile.js b/packages/loot-design/src/svg/v1/BorderHorizontal.mobile.js deleted file mode 100644 index 62ee465177..0000000000 --- a/packages/loot-design/src/svg/v1/BorderHorizontal.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgBorderHorizontal = props => ( - - - -); - -export default SvgBorderHorizontal; diff --git a/packages/loot-design/src/svg/v1/BorderInner.mobile.js b/packages/loot-design/src/svg/v1/BorderInner.mobile.js deleted file mode 100644 index a2cbccf1f9..0000000000 --- a/packages/loot-design/src/svg/v1/BorderInner.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgBorderInner = props => ( - - - -); - -export default SvgBorderInner; diff --git a/packages/loot-design/src/svg/v1/BorderLeft.mobile.js b/packages/loot-design/src/svg/v1/BorderLeft.mobile.js deleted file mode 100644 index 0ee1e327dd..0000000000 --- a/packages/loot-design/src/svg/v1/BorderLeft.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgBorderLeft = props => ( - - - -); - -export default SvgBorderLeft; diff --git a/packages/loot-design/src/svg/v1/BorderNone.mobile.js b/packages/loot-design/src/svg/v1/BorderNone.mobile.js deleted file mode 100644 index 04a6243595..0000000000 --- a/packages/loot-design/src/svg/v1/BorderNone.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgBorderNone = props => ( - - - -); - -export default SvgBorderNone; diff --git a/packages/loot-design/src/svg/v1/BorderOuter.mobile.js b/packages/loot-design/src/svg/v1/BorderOuter.mobile.js deleted file mode 100644 index 50323e7e6c..0000000000 --- a/packages/loot-design/src/svg/v1/BorderOuter.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgBorderOuter = props => ( - - - -); - -export default SvgBorderOuter; diff --git a/packages/loot-design/src/svg/v1/BorderRight.mobile.js b/packages/loot-design/src/svg/v1/BorderRight.mobile.js deleted file mode 100644 index b273dc436d..0000000000 --- a/packages/loot-design/src/svg/v1/BorderRight.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgBorderRight = props => ( - - - -); - -export default SvgBorderRight; diff --git a/packages/loot-design/src/svg/v1/BorderTop.mobile.js b/packages/loot-design/src/svg/v1/BorderTop.mobile.js deleted file mode 100644 index 2b4a756e76..0000000000 --- a/packages/loot-design/src/svg/v1/BorderTop.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgBorderTop = props => ( - - - -); - -export default SvgBorderTop; diff --git a/packages/loot-design/src/svg/v1/BorderVertical.mobile.js b/packages/loot-design/src/svg/v1/BorderVertical.mobile.js deleted file mode 100644 index b7a9d15839..0000000000 --- a/packages/loot-design/src/svg/v1/BorderVertical.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgBorderVertical = props => ( - - - -); - -export default SvgBorderVertical; diff --git a/packages/loot-design/src/svg/v1/Box.mobile.js b/packages/loot-design/src/svg/v1/Box.mobile.js deleted file mode 100644 index 32dadc3b9d..0000000000 --- a/packages/loot-design/src/svg/v1/Box.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgBox = props => ( - - - -); - -export default SvgBox; diff --git a/packages/loot-design/src/svg/v1/BrightnessDown.mobile.js b/packages/loot-design/src/svg/v1/BrightnessDown.mobile.js deleted file mode 100644 index 8e904c3309..0000000000 --- a/packages/loot-design/src/svg/v1/BrightnessDown.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgBrightnessDown = props => ( - - - -); - -export default SvgBrightnessDown; diff --git a/packages/loot-design/src/svg/v1/BrightnessUp.mobile.js b/packages/loot-design/src/svg/v1/BrightnessUp.mobile.js deleted file mode 100644 index 802eaae424..0000000000 --- a/packages/loot-design/src/svg/v1/BrightnessUp.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgBrightnessUp = props => ( - - - -); - -export default SvgBrightnessUp; diff --git a/packages/loot-design/src/svg/v1/BrowserWindow.mobile.js b/packages/loot-design/src/svg/v1/BrowserWindow.mobile.js deleted file mode 100644 index 456a8ad769..0000000000 --- a/packages/loot-design/src/svg/v1/BrowserWindow.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgBrowserWindow = props => ( - - - -); - -export default SvgBrowserWindow; diff --git a/packages/loot-design/src/svg/v1/BrowserWindowNew.mobile.js b/packages/loot-design/src/svg/v1/BrowserWindowNew.mobile.js deleted file mode 100644 index f92ed907bc..0000000000 --- a/packages/loot-design/src/svg/v1/BrowserWindowNew.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgBrowserWindowNew = props => ( - - - -); - -export default SvgBrowserWindowNew; diff --git a/packages/loot-design/src/svg/v1/BrowserWindowOpen.mobile.js b/packages/loot-design/src/svg/v1/BrowserWindowOpen.mobile.js deleted file mode 100644 index ec84151ba9..0000000000 --- a/packages/loot-design/src/svg/v1/BrowserWindowOpen.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgBrowserWindowOpen = props => ( - - - -); - -export default SvgBrowserWindowOpen; diff --git a/packages/loot-design/src/svg/v1/Bug.mobile.js b/packages/loot-design/src/svg/v1/Bug.mobile.js deleted file mode 100644 index 6d5cd193ee..0000000000 --- a/packages/loot-design/src/svg/v1/Bug.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgBug = props => ( - - - -); - -export default SvgBug; diff --git a/packages/loot-design/src/svg/v1/Buoy.mobile.js b/packages/loot-design/src/svg/v1/Buoy.mobile.js deleted file mode 100644 index 77e542974c..0000000000 --- a/packages/loot-design/src/svg/v1/Buoy.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgBuoy = props => ( - - - -); - -export default SvgBuoy; diff --git a/packages/loot-design/src/svg/v1/Calculator.mobile.js b/packages/loot-design/src/svg/v1/Calculator.mobile.js deleted file mode 100644 index 2c92a02911..0000000000 --- a/packages/loot-design/src/svg/v1/Calculator.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgCalculator = props => ( - - - -); - -export default SvgCalculator; diff --git a/packages/loot-design/src/svg/v1/Calendar.mobile.js b/packages/loot-design/src/svg/v1/Calendar.mobile.js deleted file mode 100644 index 1853a26116..0000000000 --- a/packages/loot-design/src/svg/v1/Calendar.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgCalendar = props => ( - - - -); - -export default SvgCalendar; diff --git a/packages/loot-design/src/svg/v1/Camera.mobile.js b/packages/loot-design/src/svg/v1/Camera.mobile.js deleted file mode 100644 index 4fb8699bd2..0000000000 --- a/packages/loot-design/src/svg/v1/Camera.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgCamera = props => ( - - - -); - -export default SvgCamera; diff --git a/packages/loot-design/src/svg/v1/Chart.mobile.js b/packages/loot-design/src/svg/v1/Chart.mobile.js deleted file mode 100644 index 2e8eb68be9..0000000000 --- a/packages/loot-design/src/svg/v1/Chart.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgChart = props => ( - - - -); - -export default SvgChart; diff --git a/packages/loot-design/src/svg/v1/ChartBar.mobile.js b/packages/loot-design/src/svg/v1/ChartBar.mobile.js deleted file mode 100644 index 825ee420b2..0000000000 --- a/packages/loot-design/src/svg/v1/ChartBar.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgChartBar = props => ( - - - -); - -export default SvgChartBar; diff --git a/packages/loot-design/src/svg/v1/ChartPie.mobile.js b/packages/loot-design/src/svg/v1/ChartPie.mobile.js deleted file mode 100644 index cddd1ae474..0000000000 --- a/packages/loot-design/src/svg/v1/ChartPie.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgChartPie = props => ( - - - -); - -export default SvgChartPie; diff --git a/packages/loot-design/src/svg/v1/ChatBubbleDots.mobile.js b/packages/loot-design/src/svg/v1/ChatBubbleDots.mobile.js deleted file mode 100644 index 485fc05d01..0000000000 --- a/packages/loot-design/src/svg/v1/ChatBubbleDots.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgChatBubbleDots = props => ( - - - -); - -export default SvgChatBubbleDots; diff --git a/packages/loot-design/src/svg/v1/CheckAlternative.mobile.js b/packages/loot-design/src/svg/v1/CheckAlternative.mobile.js deleted file mode 100644 index 9646b60275..0000000000 --- a/packages/loot-design/src/svg/v1/CheckAlternative.mobile.js +++ /dev/null @@ -1,24 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgCheckAlternative = props => ( - - - - -); - -export default SvgCheckAlternative; diff --git a/packages/loot-design/src/svg/v1/Checkmark.mobile.js b/packages/loot-design/src/svg/v1/Checkmark.mobile.js deleted file mode 100644 index d2b36ec6a1..0000000000 --- a/packages/loot-design/src/svg/v1/Checkmark.mobile.js +++ /dev/null @@ -1,17 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgCheckmark = props => ( - - - -); - -export default SvgCheckmark; diff --git a/packages/loot-design/src/svg/v1/CheckmarkOutline.mobile.js b/packages/loot-design/src/svg/v1/CheckmarkOutline.mobile.js deleted file mode 100644 index 288547841b..0000000000 --- a/packages/loot-design/src/svg/v1/CheckmarkOutline.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgCheckmarkOutline = props => ( - - - -); - -export default SvgCheckmarkOutline; diff --git a/packages/loot-design/src/svg/v1/CheveronDown.mobile.js b/packages/loot-design/src/svg/v1/CheveronDown.mobile.js deleted file mode 100644 index 2eecdc239d..0000000000 --- a/packages/loot-design/src/svg/v1/CheveronDown.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgCheveronDown = props => ( - - - -); - -export default SvgCheveronDown; diff --git a/packages/loot-design/src/svg/v1/CheveronLeft.mobile.js b/packages/loot-design/src/svg/v1/CheveronLeft.mobile.js deleted file mode 100644 index 5e6ca7f122..0000000000 --- a/packages/loot-design/src/svg/v1/CheveronLeft.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgCheveronLeft = props => ( - - - -); - -export default SvgCheveronLeft; diff --git a/packages/loot-design/src/svg/v1/CheveronOutlineDown.mobile.js b/packages/loot-design/src/svg/v1/CheveronOutlineDown.mobile.js deleted file mode 100644 index 9796f7295d..0000000000 --- a/packages/loot-design/src/svg/v1/CheveronOutlineDown.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgCheveronOutlineDown = props => ( - - - -); - -export default SvgCheveronOutlineDown; diff --git a/packages/loot-design/src/svg/v1/CheveronOutlineLeft.mobile.js b/packages/loot-design/src/svg/v1/CheveronOutlineLeft.mobile.js deleted file mode 100644 index b6ad31dcf2..0000000000 --- a/packages/loot-design/src/svg/v1/CheveronOutlineLeft.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgCheveronOutlineLeft = props => ( - - - -); - -export default SvgCheveronOutlineLeft; diff --git a/packages/loot-design/src/svg/v1/CheveronOutlineRight.mobile.js b/packages/loot-design/src/svg/v1/CheveronOutlineRight.mobile.js deleted file mode 100644 index 55a33d426c..0000000000 --- a/packages/loot-design/src/svg/v1/CheveronOutlineRight.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgCheveronOutlineRight = props => ( - - - -); - -export default SvgCheveronOutlineRight; diff --git a/packages/loot-design/src/svg/v1/CheveronOutlineUp.mobile.js b/packages/loot-design/src/svg/v1/CheveronOutlineUp.mobile.js deleted file mode 100644 index da99adc7c7..0000000000 --- a/packages/loot-design/src/svg/v1/CheveronOutlineUp.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgCheveronOutlineUp = props => ( - - - -); - -export default SvgCheveronOutlineUp; diff --git a/packages/loot-design/src/svg/v1/CheveronRight.mobile.js b/packages/loot-design/src/svg/v1/CheveronRight.mobile.js deleted file mode 100644 index 27b57b951d..0000000000 --- a/packages/loot-design/src/svg/v1/CheveronRight.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgCheveronRight = props => ( - - - -); - -export default SvgCheveronRight; diff --git a/packages/loot-design/src/svg/v1/CheveronUp.mobile.js b/packages/loot-design/src/svg/v1/CheveronUp.mobile.js deleted file mode 100644 index 009034e83e..0000000000 --- a/packages/loot-design/src/svg/v1/CheveronUp.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgCheveronUp = props => ( - - - -); - -export default SvgCheveronUp; diff --git a/packages/loot-design/src/svg/v1/Clipboard.mobile.js b/packages/loot-design/src/svg/v1/Clipboard.mobile.js deleted file mode 100644 index b9af386782..0000000000 --- a/packages/loot-design/src/svg/v1/Clipboard.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgClipboard = props => ( - - - -); - -export default SvgClipboard; diff --git a/packages/loot-design/src/svg/v1/Close.mobile.js b/packages/loot-design/src/svg/v1/Close.mobile.js deleted file mode 100644 index b562203b2d..0000000000 --- a/packages/loot-design/src/svg/v1/Close.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgClose = props => ( - - - -); - -export default SvgClose; diff --git a/packages/loot-design/src/svg/v1/CloseOutline.mobile.js b/packages/loot-design/src/svg/v1/CloseOutline.mobile.js deleted file mode 100644 index e0fb6a443e..0000000000 --- a/packages/loot-design/src/svg/v1/CloseOutline.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgCloseOutline = props => ( - - - -); - -export default SvgCloseOutline; diff --git a/packages/loot-design/src/svg/v1/CloseSolid.mobile.js b/packages/loot-design/src/svg/v1/CloseSolid.mobile.js deleted file mode 100644 index c1386acfb1..0000000000 --- a/packages/loot-design/src/svg/v1/CloseSolid.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgCloseSolid = props => ( - - - -); - -export default SvgCloseSolid; diff --git a/packages/loot-design/src/svg/v1/Cloud.mobile.js b/packages/loot-design/src/svg/v1/Cloud.mobile.js deleted file mode 100644 index 44a94e646f..0000000000 --- a/packages/loot-design/src/svg/v1/Cloud.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgCloud = props => ( - - - -); - -export default SvgCloud; diff --git a/packages/loot-design/src/svg/v1/CloudCheck.mobile.js b/packages/loot-design/src/svg/v1/CloudCheck.mobile.js deleted file mode 100644 index 88f665c693..0000000000 --- a/packages/loot-design/src/svg/v1/CloudCheck.mobile.js +++ /dev/null @@ -1,24 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgCloudCheck = props => ( - - - - -); - -export default SvgCloudCheck; diff --git a/packages/loot-design/src/svg/v1/CloudDownload.mobile.js b/packages/loot-design/src/svg/v1/CloudDownload.mobile.js deleted file mode 100644 index 9cfeefeea4..0000000000 --- a/packages/loot-design/src/svg/v1/CloudDownload.mobile.js +++ /dev/null @@ -1,24 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgCloudDownload = props => ( - - - - -); - -export default SvgCloudDownload; diff --git a/packages/loot-design/src/svg/v1/CloudUpload.mobile.js b/packages/loot-design/src/svg/v1/CloudUpload.mobile.js deleted file mode 100644 index 4ffee5331a..0000000000 --- a/packages/loot-design/src/svg/v1/CloudUpload.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgCloudUpload = props => ( - - - -); - -export default SvgCloudUpload; diff --git a/packages/loot-design/src/svg/v1/CloudWarning.mobile.js b/packages/loot-design/src/svg/v1/CloudWarning.mobile.js deleted file mode 100644 index 5e6494d580..0000000000 --- a/packages/loot-design/src/svg/v1/CloudWarning.mobile.js +++ /dev/null @@ -1,24 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgCloudWarning = props => ( - - - - -); - -export default SvgCloudWarning; diff --git a/packages/loot-design/src/svg/v1/Code.mobile.js b/packages/loot-design/src/svg/v1/Code.mobile.js deleted file mode 100644 index 866c2a85dd..0000000000 --- a/packages/loot-design/src/svg/v1/Code.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgCode = props => ( - - - -); - -export default SvgCode; diff --git a/packages/loot-design/src/svg/v1/Coffee.mobile.js b/packages/loot-design/src/svg/v1/Coffee.mobile.js deleted file mode 100644 index 4b8b2f9527..0000000000 --- a/packages/loot-design/src/svg/v1/Coffee.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgCoffee = props => ( - - - -); - -export default SvgCoffee; diff --git a/packages/loot-design/src/svg/v1/Cog.mobile.js b/packages/loot-design/src/svg/v1/Cog.mobile.js deleted file mode 100644 index 5eb5af1014..0000000000 --- a/packages/loot-design/src/svg/v1/Cog.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgCog = props => ( - - - -); - -export default SvgCog; diff --git a/packages/loot-design/src/svg/v1/ColorPalette.mobile.js b/packages/loot-design/src/svg/v1/ColorPalette.mobile.js deleted file mode 100644 index bb06f993df..0000000000 --- a/packages/loot-design/src/svg/v1/ColorPalette.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgColorPalette = props => ( - - - -); - -export default SvgColorPalette; diff --git a/packages/loot-design/src/svg/v1/Compose.mobile.js b/packages/loot-design/src/svg/v1/Compose.mobile.js deleted file mode 100644 index 89d536e610..0000000000 --- a/packages/loot-design/src/svg/v1/Compose.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgCompose = props => ( - - - -); - -export default SvgCompose; diff --git a/packages/loot-design/src/svg/v1/ComputerDesktop.mobile.js b/packages/loot-design/src/svg/v1/ComputerDesktop.mobile.js deleted file mode 100644 index 16a9d92a71..0000000000 --- a/packages/loot-design/src/svg/v1/ComputerDesktop.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgComputerDesktop = props => ( - - - -); - -export default SvgComputerDesktop; diff --git a/packages/loot-design/src/svg/v1/ComputerLaptop.mobile.js b/packages/loot-design/src/svg/v1/ComputerLaptop.mobile.js deleted file mode 100644 index f344196225..0000000000 --- a/packages/loot-design/src/svg/v1/ComputerLaptop.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgComputerLaptop = props => ( - - - -); - -export default SvgComputerLaptop; diff --git a/packages/loot-design/src/svg/v1/Conversation.mobile.js b/packages/loot-design/src/svg/v1/Conversation.mobile.js deleted file mode 100644 index 91a17618d2..0000000000 --- a/packages/loot-design/src/svg/v1/Conversation.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgConversation = props => ( - - - -); - -export default SvgConversation; diff --git a/packages/loot-design/src/svg/v1/Copy.mobile.js b/packages/loot-design/src/svg/v1/Copy.mobile.js deleted file mode 100644 index a2d4dcec35..0000000000 --- a/packages/loot-design/src/svg/v1/Copy.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgCopy = props => ( - - - -); - -export default SvgCopy; diff --git a/packages/loot-design/src/svg/v1/CreditCard.mobile.js b/packages/loot-design/src/svg/v1/CreditCard.mobile.js deleted file mode 100644 index ba3d2884b3..0000000000 --- a/packages/loot-design/src/svg/v1/CreditCard.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgCreditCard = props => ( - - - -); - -export default SvgCreditCard; diff --git a/packages/loot-design/src/svg/v1/CurrencyDollar.mobile.js b/packages/loot-design/src/svg/v1/CurrencyDollar.mobile.js deleted file mode 100644 index 2de0abe8e5..0000000000 --- a/packages/loot-design/src/svg/v1/CurrencyDollar.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgCurrencyDollar = props => ( - - - -); - -export default SvgCurrencyDollar; diff --git a/packages/loot-design/src/svg/v1/Dashboard.mobile.js b/packages/loot-design/src/svg/v1/Dashboard.mobile.js deleted file mode 100644 index 2af2fb5e1c..0000000000 --- a/packages/loot-design/src/svg/v1/Dashboard.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgDashboard = props => ( - - - -); - -export default SvgDashboard; diff --git a/packages/loot-design/src/svg/v1/DateAdd.mobile.js b/packages/loot-design/src/svg/v1/DateAdd.mobile.js deleted file mode 100644 index 670714999f..0000000000 --- a/packages/loot-design/src/svg/v1/DateAdd.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgDateAdd = props => ( - - - -); - -export default SvgDateAdd; diff --git a/packages/loot-design/src/svg/v1/DialPad.mobile.js b/packages/loot-design/src/svg/v1/DialPad.mobile.js deleted file mode 100644 index b7a9f97cea..0000000000 --- a/packages/loot-design/src/svg/v1/DialPad.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgDialPad = props => ( - - - -); - -export default SvgDialPad; diff --git a/packages/loot-design/src/svg/v1/Directions.mobile.js b/packages/loot-design/src/svg/v1/Directions.mobile.js deleted file mode 100644 index 2540240c1a..0000000000 --- a/packages/loot-design/src/svg/v1/Directions.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgDirections = props => ( - - - -); - -export default SvgDirections; diff --git a/packages/loot-design/src/svg/v1/Document.mobile.js b/packages/loot-design/src/svg/v1/Document.mobile.js deleted file mode 100644 index d72a704cf8..0000000000 --- a/packages/loot-design/src/svg/v1/Document.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgDocument = props => ( - - - -); - -export default SvgDocument; diff --git a/packages/loot-design/src/svg/v1/DocumentAdd.mobile.js b/packages/loot-design/src/svg/v1/DocumentAdd.mobile.js deleted file mode 100644 index 7701c51d14..0000000000 --- a/packages/loot-design/src/svg/v1/DocumentAdd.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgDocumentAdd = props => ( - - - -); - -export default SvgDocumentAdd; diff --git a/packages/loot-design/src/svg/v1/DotsHorizontalDouble.mobile.js b/packages/loot-design/src/svg/v1/DotsHorizontalDouble.mobile.js deleted file mode 100644 index b3a4bc1e0a..0000000000 --- a/packages/loot-design/src/svg/v1/DotsHorizontalDouble.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgDotsHorizontalDouble = props => ( - - - -); - -export default SvgDotsHorizontalDouble; diff --git a/packages/loot-design/src/svg/v1/DotsHorizontalTriple.mobile.js b/packages/loot-design/src/svg/v1/DotsHorizontalTriple.mobile.js deleted file mode 100644 index 49c40e522b..0000000000 --- a/packages/loot-design/src/svg/v1/DotsHorizontalTriple.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgDotsHorizontalTriple = props => ( - - - -); - -export default SvgDotsHorizontalTriple; diff --git a/packages/loot-design/src/svg/v1/Download.mobile.js b/packages/loot-design/src/svg/v1/Download.mobile.js deleted file mode 100644 index 53870af40d..0000000000 --- a/packages/loot-design/src/svg/v1/Download.mobile.js +++ /dev/null @@ -1,17 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgDownload = props => ( - - - -); - -export default SvgDownload; diff --git a/packages/loot-design/src/svg/v1/Duplicate.mobile.js b/packages/loot-design/src/svg/v1/Duplicate.mobile.js deleted file mode 100644 index 8214df9096..0000000000 --- a/packages/loot-design/src/svg/v1/Duplicate.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgDuplicate = props => ( - - - -); - -export default SvgDuplicate; diff --git a/packages/loot-design/src/svg/v1/EditCopy.mobile.js b/packages/loot-design/src/svg/v1/EditCopy.mobile.js deleted file mode 100644 index 57de550ab1..0000000000 --- a/packages/loot-design/src/svg/v1/EditCopy.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgEditCopy = props => ( - - - -); - -export default SvgEditCopy; diff --git a/packages/loot-design/src/svg/v1/EditCrop.mobile.js b/packages/loot-design/src/svg/v1/EditCrop.mobile.js deleted file mode 100644 index d9ada0ed1a..0000000000 --- a/packages/loot-design/src/svg/v1/EditCrop.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgEditCrop = props => ( - - - -); - -export default SvgEditCrop; diff --git a/packages/loot-design/src/svg/v1/EditCut.mobile.js b/packages/loot-design/src/svg/v1/EditCut.mobile.js deleted file mode 100644 index a9eb7e80c8..0000000000 --- a/packages/loot-design/src/svg/v1/EditCut.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgEditCut = props => ( - - - -); - -export default SvgEditCut; diff --git a/packages/loot-design/src/svg/v1/EditPencil.mobile.js b/packages/loot-design/src/svg/v1/EditPencil.mobile.js deleted file mode 100644 index 1d320b3e9d..0000000000 --- a/packages/loot-design/src/svg/v1/EditPencil.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgEditPencil = props => ( - - - -); - -export default SvgEditPencil; diff --git a/packages/loot-design/src/svg/v1/Education.mobile.js b/packages/loot-design/src/svg/v1/Education.mobile.js deleted file mode 100644 index db2ab90870..0000000000 --- a/packages/loot-design/src/svg/v1/Education.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgEducation = props => ( - - - -); - -export default SvgEducation; diff --git a/packages/loot-design/src/svg/v1/Envelope.mobile.js b/packages/loot-design/src/svg/v1/Envelope.mobile.js deleted file mode 100644 index af9f9416ce..0000000000 --- a/packages/loot-design/src/svg/v1/Envelope.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgEnvelope = props => ( - - - -); - -export default SvgEnvelope; diff --git a/packages/loot-design/src/svg/v1/Equals.mobile.js b/packages/loot-design/src/svg/v1/Equals.mobile.js deleted file mode 100644 index 778f24e222..0000000000 --- a/packages/loot-design/src/svg/v1/Equals.mobile.js +++ /dev/null @@ -1,21 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgEquals = props => ( - - - -); - -export default SvgEquals; diff --git a/packages/loot-design/src/svg/v1/ExclamationOutline.mobile.js b/packages/loot-design/src/svg/v1/ExclamationOutline.mobile.js deleted file mode 100644 index 0e7d7a76c6..0000000000 --- a/packages/loot-design/src/svg/v1/ExclamationOutline.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgExclamationOutline = props => ( - - - -); - -export default SvgExclamationOutline; diff --git a/packages/loot-design/src/svg/v1/ExclamationSolid.mobile.js b/packages/loot-design/src/svg/v1/ExclamationSolid.mobile.js deleted file mode 100644 index 7fde795fad..0000000000 --- a/packages/loot-design/src/svg/v1/ExclamationSolid.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgExclamationSolid = props => ( - - - -); - -export default SvgExclamationSolid; diff --git a/packages/loot-design/src/svg/v1/Explore.mobile.js b/packages/loot-design/src/svg/v1/Explore.mobile.js deleted file mode 100644 index 782b63372b..0000000000 --- a/packages/loot-design/src/svg/v1/Explore.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgExplore = props => ( - - - -); - -export default SvgExplore; diff --git a/packages/loot-design/src/svg/v1/Factory.mobile.js b/packages/loot-design/src/svg/v1/Factory.mobile.js deleted file mode 100644 index 7692173268..0000000000 --- a/packages/loot-design/src/svg/v1/Factory.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgFactory = props => ( - - - -); - -export default SvgFactory; diff --git a/packages/loot-design/src/svg/v1/FastForward.mobile.js b/packages/loot-design/src/svg/v1/FastForward.mobile.js deleted file mode 100644 index 5092a6e393..0000000000 --- a/packages/loot-design/src/svg/v1/FastForward.mobile.js +++ /dev/null @@ -1,17 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgFastForward = props => ( - - - -); - -export default SvgFastForward; diff --git a/packages/loot-design/src/svg/v1/FastRewind.mobile.js b/packages/loot-design/src/svg/v1/FastRewind.mobile.js deleted file mode 100644 index e97a9bae2d..0000000000 --- a/packages/loot-design/src/svg/v1/FastRewind.mobile.js +++ /dev/null @@ -1,17 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgFastRewind = props => ( - - - -); - -export default SvgFastRewind; diff --git a/packages/loot-design/src/svg/v1/FileDouble.mobile.js b/packages/loot-design/src/svg/v1/FileDouble.mobile.js deleted file mode 100644 index ec35d778c0..0000000000 --- a/packages/loot-design/src/svg/v1/FileDouble.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgFileDouble = props => ( - - - -); - -export default SvgFileDouble; diff --git a/packages/loot-design/src/svg/v1/Film.mobile.js b/packages/loot-design/src/svg/v1/Film.mobile.js deleted file mode 100644 index 2eca738edd..0000000000 --- a/packages/loot-design/src/svg/v1/Film.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgFilm = props => ( - - - -); - -export default SvgFilm; diff --git a/packages/loot-design/src/svg/v1/Filter.mobile.js b/packages/loot-design/src/svg/v1/Filter.mobile.js deleted file mode 100644 index 3b02b3af20..0000000000 --- a/packages/loot-design/src/svg/v1/Filter.mobile.js +++ /dev/null @@ -1,17 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgFilter = props => ( - - - -); - -export default SvgFilter; diff --git a/packages/loot-design/src/svg/v1/Flag.mobile.js b/packages/loot-design/src/svg/v1/Flag.mobile.js deleted file mode 100644 index 6d7ae6bc55..0000000000 --- a/packages/loot-design/src/svg/v1/Flag.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgFlag = props => ( - - - -); - -export default SvgFlag; diff --git a/packages/loot-design/src/svg/v1/Flashlight.mobile.js b/packages/loot-design/src/svg/v1/Flashlight.mobile.js deleted file mode 100644 index 1226116684..0000000000 --- a/packages/loot-design/src/svg/v1/Flashlight.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgFlashlight = props => ( - - - -); - -export default SvgFlashlight; diff --git a/packages/loot-design/src/svg/v1/Folder.mobile.js b/packages/loot-design/src/svg/v1/Folder.mobile.js deleted file mode 100644 index 08cf590dea..0000000000 --- a/packages/loot-design/src/svg/v1/Folder.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgFolder = props => ( - - - -); - -export default SvgFolder; diff --git a/packages/loot-design/src/svg/v1/FolderOutline.mobile.js b/packages/loot-design/src/svg/v1/FolderOutline.mobile.js deleted file mode 100644 index bc569395c6..0000000000 --- a/packages/loot-design/src/svg/v1/FolderOutline.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgFolderOutline = props => ( - - - -); - -export default SvgFolderOutline; diff --git a/packages/loot-design/src/svg/v1/FolderOutlineAdd.mobile.js b/packages/loot-design/src/svg/v1/FolderOutlineAdd.mobile.js deleted file mode 100644 index e381059208..0000000000 --- a/packages/loot-design/src/svg/v1/FolderOutlineAdd.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgFolderOutlineAdd = props => ( - - - -); - -export default SvgFolderOutlineAdd; diff --git a/packages/loot-design/src/svg/v1/FormatBold.mobile.js b/packages/loot-design/src/svg/v1/FormatBold.mobile.js deleted file mode 100644 index 2de43cd852..0000000000 --- a/packages/loot-design/src/svg/v1/FormatBold.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgFormatBold = props => ( - - - -); - -export default SvgFormatBold; diff --git a/packages/loot-design/src/svg/v1/FormatFontSize.mobile.js b/packages/loot-design/src/svg/v1/FormatFontSize.mobile.js deleted file mode 100644 index 423db5b2e6..0000000000 --- a/packages/loot-design/src/svg/v1/FormatFontSize.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgFormatFontSize = props => ( - - - -); - -export default SvgFormatFontSize; diff --git a/packages/loot-design/src/svg/v1/FormatItalic.mobile.js b/packages/loot-design/src/svg/v1/FormatItalic.mobile.js deleted file mode 100644 index baee842bf1..0000000000 --- a/packages/loot-design/src/svg/v1/FormatItalic.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgFormatItalic = props => ( - - - -); - -export default SvgFormatItalic; diff --git a/packages/loot-design/src/svg/v1/FormatTextSize.mobile.js b/packages/loot-design/src/svg/v1/FormatTextSize.mobile.js deleted file mode 100644 index ad6b3c7f53..0000000000 --- a/packages/loot-design/src/svg/v1/FormatTextSize.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgFormatTextSize = props => ( - - - -); - -export default SvgFormatTextSize; diff --git a/packages/loot-design/src/svg/v1/FormatUnderline.mobile.js b/packages/loot-design/src/svg/v1/FormatUnderline.mobile.js deleted file mode 100644 index 989e238882..0000000000 --- a/packages/loot-design/src/svg/v1/FormatUnderline.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgFormatUnderline = props => ( - - - -); - -export default SvgFormatUnderline; diff --git a/packages/loot-design/src/svg/v1/Forward.mobile.js b/packages/loot-design/src/svg/v1/Forward.mobile.js deleted file mode 100644 index 4ad718a871..0000000000 --- a/packages/loot-design/src/svg/v1/Forward.mobile.js +++ /dev/null @@ -1,17 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgForward = props => ( - - - -); - -export default SvgForward; diff --git a/packages/loot-design/src/svg/v1/ForwardStep.mobile.js b/packages/loot-design/src/svg/v1/ForwardStep.mobile.js deleted file mode 100644 index 5afdee2b93..0000000000 --- a/packages/loot-design/src/svg/v1/ForwardStep.mobile.js +++ /dev/null @@ -1,17 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgForwardStep = props => ( - - - -); - -export default SvgForwardStep; diff --git a/packages/loot-design/src/svg/v1/Gift.mobile.js b/packages/loot-design/src/svg/v1/Gift.mobile.js deleted file mode 100644 index b0ee8cc4cd..0000000000 --- a/packages/loot-design/src/svg/v1/Gift.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgGift = props => ( - - - -); - -export default SvgGift; diff --git a/packages/loot-design/src/svg/v1/Globe.mobile.js b/packages/loot-design/src/svg/v1/Globe.mobile.js deleted file mode 100644 index 0a647f1193..0000000000 --- a/packages/loot-design/src/svg/v1/Globe.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgGlobe = props => ( - - - -); - -export default SvgGlobe; diff --git a/packages/loot-design/src/svg/v1/HandStop.mobile.js b/packages/loot-design/src/svg/v1/HandStop.mobile.js deleted file mode 100644 index 0e792fc622..0000000000 --- a/packages/loot-design/src/svg/v1/HandStop.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgHandStop = props => ( - - - -); - -export default SvgHandStop; diff --git a/packages/loot-design/src/svg/v1/HardDrive.mobile.js b/packages/loot-design/src/svg/v1/HardDrive.mobile.js deleted file mode 100644 index 0d0e592691..0000000000 --- a/packages/loot-design/src/svg/v1/HardDrive.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgHardDrive = props => ( - - - -); - -export default SvgHardDrive; diff --git a/packages/loot-design/src/svg/v1/Headphones.mobile.js b/packages/loot-design/src/svg/v1/Headphones.mobile.js deleted file mode 100644 index 0705fd4069..0000000000 --- a/packages/loot-design/src/svg/v1/Headphones.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgHeadphones = props => ( - - - -); - -export default SvgHeadphones; diff --git a/packages/loot-design/src/svg/v1/Heart.mobile.js b/packages/loot-design/src/svg/v1/Heart.mobile.js deleted file mode 100644 index 792846184b..0000000000 --- a/packages/loot-design/src/svg/v1/Heart.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgHeart = props => ( - - - -); - -export default SvgHeart; diff --git a/packages/loot-design/src/svg/v1/Home.mobile.js b/packages/loot-design/src/svg/v1/Home.mobile.js deleted file mode 100644 index 5cadfed649..0000000000 --- a/packages/loot-design/src/svg/v1/Home.mobile.js +++ /dev/null @@ -1,17 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgHome = props => ( - - - -); - -export default SvgHome; diff --git a/packages/loot-design/src/svg/v1/Hot.mobile.js b/packages/loot-design/src/svg/v1/Hot.mobile.js deleted file mode 100644 index 58259febe2..0000000000 --- a/packages/loot-design/src/svg/v1/Hot.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgHot = props => ( - - - -); - -export default SvgHot; diff --git a/packages/loot-design/src/svg/v1/HourGlass.mobile.js b/packages/loot-design/src/svg/v1/HourGlass.mobile.js deleted file mode 100644 index 6c59325c5f..0000000000 --- a/packages/loot-design/src/svg/v1/HourGlass.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgHourGlass = props => ( - - - -); - -export default SvgHourGlass; diff --git a/packages/loot-design/src/svg/v1/Inbox.mobile.js b/packages/loot-design/src/svg/v1/Inbox.mobile.js deleted file mode 100644 index 8a4ed35a50..0000000000 --- a/packages/loot-design/src/svg/v1/Inbox.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgInbox = props => ( - - - -); - -export default SvgInbox; diff --git a/packages/loot-design/src/svg/v1/InboxCheck.mobile.js b/packages/loot-design/src/svg/v1/InboxCheck.mobile.js deleted file mode 100644 index 607df50903..0000000000 --- a/packages/loot-design/src/svg/v1/InboxCheck.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgInboxCheck = props => ( - - - -); - -export default SvgInboxCheck; diff --git a/packages/loot-design/src/svg/v1/InboxDownload.mobile.js b/packages/loot-design/src/svg/v1/InboxDownload.mobile.js deleted file mode 100644 index 681d676352..0000000000 --- a/packages/loot-design/src/svg/v1/InboxDownload.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgInboxDownload = props => ( - - - -); - -export default SvgInboxDownload; diff --git a/packages/loot-design/src/svg/v1/InboxFull.mobile.js b/packages/loot-design/src/svg/v1/InboxFull.mobile.js deleted file mode 100644 index 6116260df9..0000000000 --- a/packages/loot-design/src/svg/v1/InboxFull.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgInboxFull = props => ( - - - -); - -export default SvgInboxFull; diff --git a/packages/loot-design/src/svg/v1/IndentDecrease.mobile.js b/packages/loot-design/src/svg/v1/IndentDecrease.mobile.js deleted file mode 100644 index 31668600a2..0000000000 --- a/packages/loot-design/src/svg/v1/IndentDecrease.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgIndentDecrease = props => ( - - - -); - -export default SvgIndentDecrease; diff --git a/packages/loot-design/src/svg/v1/IndentIncrease.mobile.js b/packages/loot-design/src/svg/v1/IndentIncrease.mobile.js deleted file mode 100644 index 709b4a1550..0000000000 --- a/packages/loot-design/src/svg/v1/IndentIncrease.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgIndentIncrease = props => ( - - - -); - -export default SvgIndentIncrease; diff --git a/packages/loot-design/src/svg/v1/InformationOutline.mobile.js b/packages/loot-design/src/svg/v1/InformationOutline.mobile.js deleted file mode 100644 index 7e1df45b6f..0000000000 --- a/packages/loot-design/src/svg/v1/InformationOutline.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgInformationOutline = props => ( - - - -); - -export default SvgInformationOutline; diff --git a/packages/loot-design/src/svg/v1/InformationSolid.mobile.js b/packages/loot-design/src/svg/v1/InformationSolid.mobile.js deleted file mode 100644 index 7d9caa9f96..0000000000 --- a/packages/loot-design/src/svg/v1/InformationSolid.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgInformationSolid = props => ( - - - -); - -export default SvgInformationSolid; diff --git a/packages/loot-design/src/svg/v1/Key.mobile.js b/packages/loot-design/src/svg/v1/Key.mobile.js deleted file mode 100644 index 83655d758c..0000000000 --- a/packages/loot-design/src/svg/v1/Key.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgKey = props => ( - - - -); - -export default SvgKey; diff --git a/packages/loot-design/src/svg/v1/Keyboard.mobile.js b/packages/loot-design/src/svg/v1/Keyboard.mobile.js deleted file mode 100644 index c51ad64017..0000000000 --- a/packages/loot-design/src/svg/v1/Keyboard.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgKeyboard = props => ( - - - -); - -export default SvgKeyboard; diff --git a/packages/loot-design/src/svg/v1/Layers.mobile.js b/packages/loot-design/src/svg/v1/Layers.mobile.js deleted file mode 100644 index bb30bcd82a..0000000000 --- a/packages/loot-design/src/svg/v1/Layers.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgLayers = props => ( - - - -); - -export default SvgLayers; diff --git a/packages/loot-design/src/svg/v1/Library.mobile.js b/packages/loot-design/src/svg/v1/Library.mobile.js deleted file mode 100644 index 28e913e517..0000000000 --- a/packages/loot-design/src/svg/v1/Library.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgLibrary = props => ( - - - -); - -export default SvgLibrary; diff --git a/packages/loot-design/src/svg/v1/LightBulb.mobile.js b/packages/loot-design/src/svg/v1/LightBulb.mobile.js deleted file mode 100644 index e1dbe2861c..0000000000 --- a/packages/loot-design/src/svg/v1/LightBulb.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgLightBulb = props => ( - - - -); - -export default SvgLightBulb; diff --git a/packages/loot-design/src/svg/v1/Link.mobile.js b/packages/loot-design/src/svg/v1/Link.mobile.js deleted file mode 100644 index 4ae5a68c3e..0000000000 --- a/packages/loot-design/src/svg/v1/Link.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgLink = props => ( - - - -); - -export default SvgLink; diff --git a/packages/loot-design/src/svg/v1/List.mobile.js b/packages/loot-design/src/svg/v1/List.mobile.js deleted file mode 100644 index eef9df3fc9..0000000000 --- a/packages/loot-design/src/svg/v1/List.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgList = props => ( - - - -); - -export default SvgList; diff --git a/packages/loot-design/src/svg/v1/ListAdd.mobile.js b/packages/loot-design/src/svg/v1/ListAdd.mobile.js deleted file mode 100644 index b75fae4446..0000000000 --- a/packages/loot-design/src/svg/v1/ListAdd.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgListAdd = props => ( - - - -); - -export default SvgListAdd; diff --git a/packages/loot-design/src/svg/v1/ListBullet.mobile.js b/packages/loot-design/src/svg/v1/ListBullet.mobile.js deleted file mode 100644 index b37d81200f..0000000000 --- a/packages/loot-design/src/svg/v1/ListBullet.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgListBullet = props => ( - - - -); - -export default SvgListBullet; diff --git a/packages/loot-design/src/svg/v1/LoadBalancer.mobile.js b/packages/loot-design/src/svg/v1/LoadBalancer.mobile.js deleted file mode 100644 index 9b913fdf3d..0000000000 --- a/packages/loot-design/src/svg/v1/LoadBalancer.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgLoadBalancer = props => ( - - - -); - -export default SvgLoadBalancer; diff --git a/packages/loot-design/src/svg/v1/Loading.mobile.js b/packages/loot-design/src/svg/v1/Loading.mobile.js deleted file mode 100644 index bec7757577..0000000000 --- a/packages/loot-design/src/svg/v1/Loading.mobile.js +++ /dev/null @@ -1,41 +0,0 @@ -import React from 'react'; -import Svg, { - Defs, - LinearGradient, - Stop, - G, - Path, - Circle -} from 'react-native-svg'; - -const SvgLoading = props => { - let { color = '#fff' } = props; - return ( - - - - - - - - - - - - - - ); -}; - -export default SvgLoading; diff --git a/packages/loot-design/src/svg/v1/Location.mobile.js b/packages/loot-design/src/svg/v1/Location.mobile.js deleted file mode 100644 index 0bb830647b..0000000000 --- a/packages/loot-design/src/svg/v1/Location.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgLocation = props => ( - - - -); - -export default SvgLocation; diff --git a/packages/loot-design/src/svg/v1/LocationCurrent.mobile.js b/packages/loot-design/src/svg/v1/LocationCurrent.mobile.js deleted file mode 100644 index 5a801b4ae4..0000000000 --- a/packages/loot-design/src/svg/v1/LocationCurrent.mobile.js +++ /dev/null @@ -1,17 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgLocationCurrent = props => ( - - - -); - -export default SvgLocationCurrent; diff --git a/packages/loot-design/src/svg/v1/LocationFood.mobile.js b/packages/loot-design/src/svg/v1/LocationFood.mobile.js deleted file mode 100644 index ecba39f2eb..0000000000 --- a/packages/loot-design/src/svg/v1/LocationFood.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgLocationFood = props => ( - - - -); - -export default SvgLocationFood; diff --git a/packages/loot-design/src/svg/v1/LocationGasStation.mobile.js b/packages/loot-design/src/svg/v1/LocationGasStation.mobile.js deleted file mode 100644 index bedba658b2..0000000000 --- a/packages/loot-design/src/svg/v1/LocationGasStation.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgLocationGasStation = props => ( - - - -); - -export default SvgLocationGasStation; diff --git a/packages/loot-design/src/svg/v1/LocationHotel.mobile.js b/packages/loot-design/src/svg/v1/LocationHotel.mobile.js deleted file mode 100644 index 0e06dfe97f..0000000000 --- a/packages/loot-design/src/svg/v1/LocationHotel.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgLocationHotel = props => ( - - - -); - -export default SvgLocationHotel; diff --git a/packages/loot-design/src/svg/v1/LocationMarina.mobile.js b/packages/loot-design/src/svg/v1/LocationMarina.mobile.js deleted file mode 100644 index d02ff47285..0000000000 --- a/packages/loot-design/src/svg/v1/LocationMarina.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgLocationMarina = props => ( - - - -); - -export default SvgLocationMarina; diff --git a/packages/loot-design/src/svg/v1/LocationPark.mobile.js b/packages/loot-design/src/svg/v1/LocationPark.mobile.js deleted file mode 100644 index 93674bf467..0000000000 --- a/packages/loot-design/src/svg/v1/LocationPark.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgLocationPark = props => ( - - - -); - -export default SvgLocationPark; diff --git a/packages/loot-design/src/svg/v1/LocationRestroom.mobile.js b/packages/loot-design/src/svg/v1/LocationRestroom.mobile.js deleted file mode 100644 index 397861bdc0..0000000000 --- a/packages/loot-design/src/svg/v1/LocationRestroom.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgLocationRestroom = props => ( - - - -); - -export default SvgLocationRestroom; diff --git a/packages/loot-design/src/svg/v1/LocationShopping.mobile.js b/packages/loot-design/src/svg/v1/LocationShopping.mobile.js deleted file mode 100644 index 8bc7835b31..0000000000 --- a/packages/loot-design/src/svg/v1/LocationShopping.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgLocationShopping = props => ( - - - -); - -export default SvgLocationShopping; diff --git a/packages/loot-design/src/svg/v1/LockClosed.mobile.js b/packages/loot-design/src/svg/v1/LockClosed.mobile.js deleted file mode 100644 index 82af2267ee..0000000000 --- a/packages/loot-design/src/svg/v1/LockClosed.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgLockClosed = props => ( - - - -); - -export default SvgLockClosed; diff --git a/packages/loot-design/src/svg/v1/LockOpen.mobile.js b/packages/loot-design/src/svg/v1/LockOpen.mobile.js deleted file mode 100644 index 5213f24b8e..0000000000 --- a/packages/loot-design/src/svg/v1/LockOpen.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgLockOpen = props => ( - - - -); - -export default SvgLockOpen; diff --git a/packages/loot-design/src/svg/v1/Map.mobile.js b/packages/loot-design/src/svg/v1/Map.mobile.js deleted file mode 100644 index 8c8539797a..0000000000 --- a/packages/loot-design/src/svg/v1/Map.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgMap = props => ( - - - -); - -export default SvgMap; diff --git a/packages/loot-design/src/svg/v1/Menu.mobile.js b/packages/loot-design/src/svg/v1/Menu.mobile.js deleted file mode 100644 index 21dfd8527a..0000000000 --- a/packages/loot-design/src/svg/v1/Menu.mobile.js +++ /dev/null @@ -1,17 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgMenu = props => ( - - - -); - -export default SvgMenu; diff --git a/packages/loot-design/src/svg/v1/Mic.mobile.js b/packages/loot-design/src/svg/v1/Mic.mobile.js deleted file mode 100644 index f995637682..0000000000 --- a/packages/loot-design/src/svg/v1/Mic.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgMic = props => ( - - - -); - -export default SvgMic; diff --git a/packages/loot-design/src/svg/v1/MinusOutline.mobile.js b/packages/loot-design/src/svg/v1/MinusOutline.mobile.js deleted file mode 100644 index daf21d407f..0000000000 --- a/packages/loot-design/src/svg/v1/MinusOutline.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgMinusOutline = props => ( - - - -); - -export default SvgMinusOutline; diff --git a/packages/loot-design/src/svg/v1/MinusSolid.mobile.js b/packages/loot-design/src/svg/v1/MinusSolid.mobile.js deleted file mode 100644 index 01b3577621..0000000000 --- a/packages/loot-design/src/svg/v1/MinusSolid.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgMinusSolid = props => ( - - - -); - -export default SvgMinusSolid; diff --git a/packages/loot-design/src/svg/v1/MobileDevices.mobile.js b/packages/loot-design/src/svg/v1/MobileDevices.mobile.js deleted file mode 100644 index af695330e7..0000000000 --- a/packages/loot-design/src/svg/v1/MobileDevices.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgMobileDevices = props => ( - - - -); - -export default SvgMobileDevices; diff --git a/packages/loot-design/src/svg/v1/MoneyBag.mobile.js b/packages/loot-design/src/svg/v1/MoneyBag.mobile.js deleted file mode 100644 index 04a9b9426a..0000000000 --- a/packages/loot-design/src/svg/v1/MoneyBag.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgMoneyBag = props => ( - - - -); - -export default SvgMoneyBag; diff --git a/packages/loot-design/src/svg/v1/MoodHappyOutline.mobile.js b/packages/loot-design/src/svg/v1/MoodHappyOutline.mobile.js deleted file mode 100644 index 8e2ea9c403..0000000000 --- a/packages/loot-design/src/svg/v1/MoodHappyOutline.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgMoodHappyOutline = props => ( - - - -); - -export default SvgMoodHappyOutline; diff --git a/packages/loot-design/src/svg/v1/MoodHappySolid.mobile.js b/packages/loot-design/src/svg/v1/MoodHappySolid.mobile.js deleted file mode 100644 index 558a11bc5f..0000000000 --- a/packages/loot-design/src/svg/v1/MoodHappySolid.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgMoodHappySolid = props => ( - - - -); - -export default SvgMoodHappySolid; diff --git a/packages/loot-design/src/svg/v1/MoodNeutralOutline.mobile.js b/packages/loot-design/src/svg/v1/MoodNeutralOutline.mobile.js deleted file mode 100644 index 29ef7e07cc..0000000000 --- a/packages/loot-design/src/svg/v1/MoodNeutralOutline.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgMoodNeutralOutline = props => ( - - - -); - -export default SvgMoodNeutralOutline; diff --git a/packages/loot-design/src/svg/v1/MoodNeutralSolid.mobile.js b/packages/loot-design/src/svg/v1/MoodNeutralSolid.mobile.js deleted file mode 100644 index 3e5f3ba219..0000000000 --- a/packages/loot-design/src/svg/v1/MoodNeutralSolid.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgMoodNeutralSolid = props => ( - - - -); - -export default SvgMoodNeutralSolid; diff --git a/packages/loot-design/src/svg/v1/MoodSadOutline.mobile.js b/packages/loot-design/src/svg/v1/MoodSadOutline.mobile.js deleted file mode 100644 index cff1601da9..0000000000 --- a/packages/loot-design/src/svg/v1/MoodSadOutline.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgMoodSadOutline = props => ( - - - -); - -export default SvgMoodSadOutline; diff --git a/packages/loot-design/src/svg/v1/MoodSadSolid.mobile.js b/packages/loot-design/src/svg/v1/MoodSadSolid.mobile.js deleted file mode 100644 index 0aadab57f2..0000000000 --- a/packages/loot-design/src/svg/v1/MoodSadSolid.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgMoodSadSolid = props => ( - - - -); - -export default SvgMoodSadSolid; diff --git a/packages/loot-design/src/svg/v1/Mouse.mobile.js b/packages/loot-design/src/svg/v1/Mouse.mobile.js deleted file mode 100644 index 7b9170bec1..0000000000 --- a/packages/loot-design/src/svg/v1/Mouse.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgMouse = props => ( - - - -); - -export default SvgMouse; diff --git a/packages/loot-design/src/svg/v1/MoveBack.mobile.js b/packages/loot-design/src/svg/v1/MoveBack.mobile.js deleted file mode 100644 index 6019ac7d99..0000000000 --- a/packages/loot-design/src/svg/v1/MoveBack.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgMoveBack = props => ( - - - -); - -export default SvgMoveBack; diff --git a/packages/loot-design/src/svg/v1/MusicAlbum.mobile.js b/packages/loot-design/src/svg/v1/MusicAlbum.mobile.js deleted file mode 100644 index 37f920e197..0000000000 --- a/packages/loot-design/src/svg/v1/MusicAlbum.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgMusicAlbum = props => ( - - - -); - -export default SvgMusicAlbum; diff --git a/packages/loot-design/src/svg/v1/MusicArtist.mobile.js b/packages/loot-design/src/svg/v1/MusicArtist.mobile.js deleted file mode 100644 index 0eb5355bd2..0000000000 --- a/packages/loot-design/src/svg/v1/MusicArtist.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgMusicArtist = props => ( - - - -); - -export default SvgMusicArtist; diff --git a/packages/loot-design/src/svg/v1/MusicNotes.mobile.js b/packages/loot-design/src/svg/v1/MusicNotes.mobile.js deleted file mode 100644 index 77ad2fddb0..0000000000 --- a/packages/loot-design/src/svg/v1/MusicNotes.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgMusicNotes = props => ( - - - -); - -export default SvgMusicNotes; diff --git a/packages/loot-design/src/svg/v1/MusicPlaylist.mobile.js b/packages/loot-design/src/svg/v1/MusicPlaylist.mobile.js deleted file mode 100644 index 6f85ccfafb..0000000000 --- a/packages/loot-design/src/svg/v1/MusicPlaylist.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgMusicPlaylist = props => ( - - - -); - -export default SvgMusicPlaylist; diff --git a/packages/loot-design/src/svg/v1/NavigationMore.mobile.js b/packages/loot-design/src/svg/v1/NavigationMore.mobile.js deleted file mode 100644 index ed82f103e0..0000000000 --- a/packages/loot-design/src/svg/v1/NavigationMore.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgNavigationMore = props => ( - - - -); - -export default SvgNavigationMore; diff --git a/packages/loot-design/src/svg/v1/Network.mobile.js b/packages/loot-design/src/svg/v1/Network.mobile.js deleted file mode 100644 index a5a3dbeb9a..0000000000 --- a/packages/loot-design/src/svg/v1/Network.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgNetwork = props => ( - - - -); - -export default SvgNetwork; diff --git a/packages/loot-design/src/svg/v1/NewsPaper.mobile.js b/packages/loot-design/src/svg/v1/NewsPaper.mobile.js deleted file mode 100644 index d5860bfda8..0000000000 --- a/packages/loot-design/src/svg/v1/NewsPaper.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgNewsPaper = props => ( - - - -); - -export default SvgNewsPaper; diff --git a/packages/loot-design/src/svg/v1/Notification.mobile.js b/packages/loot-design/src/svg/v1/Notification.mobile.js deleted file mode 100644 index 66dce58a94..0000000000 --- a/packages/loot-design/src/svg/v1/Notification.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgNotification = props => ( - - - -); - -export default SvgNotification; diff --git a/packages/loot-design/src/svg/v1/Notifications.mobile.js b/packages/loot-design/src/svg/v1/Notifications.mobile.js deleted file mode 100644 index 6bce15ca26..0000000000 --- a/packages/loot-design/src/svg/v1/Notifications.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgNotifications = props => ( - - - -); - -export default SvgNotifications; diff --git a/packages/loot-design/src/svg/v1/NotificationsOutline.mobile.js b/packages/loot-design/src/svg/v1/NotificationsOutline.mobile.js deleted file mode 100644 index 59b15b8d8c..0000000000 --- a/packages/loot-design/src/svg/v1/NotificationsOutline.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgNotificationsOutline = props => ( - - - -); - -export default SvgNotificationsOutline; diff --git a/packages/loot-design/src/svg/v1/Paste.mobile.js b/packages/loot-design/src/svg/v1/Paste.mobile.js deleted file mode 100644 index 7a5ca92a67..0000000000 --- a/packages/loot-design/src/svg/v1/Paste.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgPaste = props => ( - - - -); - -export default SvgPaste; diff --git a/packages/loot-design/src/svg/v1/Pause.mobile.js b/packages/loot-design/src/svg/v1/Pause.mobile.js deleted file mode 100644 index fae735012d..0000000000 --- a/packages/loot-design/src/svg/v1/Pause.mobile.js +++ /dev/null @@ -1,17 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgPause = props => ( - - - -); - -export default SvgPause; diff --git a/packages/loot-design/src/svg/v1/PauseOutline.mobile.js b/packages/loot-design/src/svg/v1/PauseOutline.mobile.js deleted file mode 100644 index 5fc8ead356..0000000000 --- a/packages/loot-design/src/svg/v1/PauseOutline.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgPauseOutline = props => ( - - - -); - -export default SvgPauseOutline; diff --git a/packages/loot-design/src/svg/v1/PauseSolid.mobile.js b/packages/loot-design/src/svg/v1/PauseSolid.mobile.js deleted file mode 100644 index 50636bcaa4..0000000000 --- a/packages/loot-design/src/svg/v1/PauseSolid.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgPauseSolid = props => ( - - - -); - -export default SvgPauseSolid; diff --git a/packages/loot-design/src/svg/v1/PenTool.mobile.js b/packages/loot-design/src/svg/v1/PenTool.mobile.js deleted file mode 100644 index 21d2b193a8..0000000000 --- a/packages/loot-design/src/svg/v1/PenTool.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgPenTool = props => ( - - - -); - -export default SvgPenTool; diff --git a/packages/loot-design/src/svg/v1/PencilWrite.mobile.js b/packages/loot-design/src/svg/v1/PencilWrite.mobile.js deleted file mode 100644 index 37f2212821..0000000000 --- a/packages/loot-design/src/svg/v1/PencilWrite.mobile.js +++ /dev/null @@ -1,24 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgPencilWrite = props => ( - - - - -); - -export default SvgPencilWrite; diff --git a/packages/loot-design/src/svg/v1/Phone.mobile.js b/packages/loot-design/src/svg/v1/Phone.mobile.js deleted file mode 100644 index c041da2538..0000000000 --- a/packages/loot-design/src/svg/v1/Phone.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgPhone = props => ( - - - -); - -export default SvgPhone; diff --git a/packages/loot-design/src/svg/v1/Photo.mobile.js b/packages/loot-design/src/svg/v1/Photo.mobile.js deleted file mode 100644 index a000f92149..0000000000 --- a/packages/loot-design/src/svg/v1/Photo.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgPhoto = props => ( - - - -); - -export default SvgPhoto; diff --git a/packages/loot-design/src/svg/v1/PhpElephant.mobile.js b/packages/loot-design/src/svg/v1/PhpElephant.mobile.js deleted file mode 100644 index 6fb17965e3..0000000000 --- a/packages/loot-design/src/svg/v1/PhpElephant.mobile.js +++ /dev/null @@ -1,21 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgPhpElephant = props => ( - - - -); - -export default SvgPhpElephant; diff --git a/packages/loot-design/src/svg/v1/PiggyBank.mobile.js b/packages/loot-design/src/svg/v1/PiggyBank.mobile.js deleted file mode 100644 index c1fed2cf36..0000000000 --- a/packages/loot-design/src/svg/v1/PiggyBank.mobile.js +++ /dev/null @@ -1,27 +0,0 @@ -import React from 'react'; -import Svg, { G, Path, Defs, ClipPath } from 'react-native-svg'; - -const SvgPiggyBank = props => ( - - - - - - - - - - -); - -export default SvgPiggyBank; diff --git a/packages/loot-design/src/svg/v1/Pin.mobile.js b/packages/loot-design/src/svg/v1/Pin.mobile.js deleted file mode 100644 index b360cd2845..0000000000 --- a/packages/loot-design/src/svg/v1/Pin.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgPin = props => ( - - - -); - -export default SvgPin; diff --git a/packages/loot-design/src/svg/v1/Play.mobile.js b/packages/loot-design/src/svg/v1/Play.mobile.js deleted file mode 100644 index 2fd4f7e6f6..0000000000 --- a/packages/loot-design/src/svg/v1/Play.mobile.js +++ /dev/null @@ -1,17 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgPlay = props => ( - - - -); - -export default SvgPlay; diff --git a/packages/loot-design/src/svg/v1/PlayOutline.mobile.js b/packages/loot-design/src/svg/v1/PlayOutline.mobile.js deleted file mode 100644 index 24af801cce..0000000000 --- a/packages/loot-design/src/svg/v1/PlayOutline.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgPlayOutline = props => ( - - - -); - -export default SvgPlayOutline; diff --git a/packages/loot-design/src/svg/v1/Playlist.mobile.js b/packages/loot-design/src/svg/v1/Playlist.mobile.js deleted file mode 100644 index 41fb94efb8..0000000000 --- a/packages/loot-design/src/svg/v1/Playlist.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgPlaylist = props => ( - - - -); - -export default SvgPlaylist; diff --git a/packages/loot-design/src/svg/v1/Plugin.mobile.js b/packages/loot-design/src/svg/v1/Plugin.mobile.js deleted file mode 100644 index 3d5ae374d4..0000000000 --- a/packages/loot-design/src/svg/v1/Plugin.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgPlugin = props => ( - - - -); - -export default SvgPlugin; diff --git a/packages/loot-design/src/svg/v1/Portfolio.mobile.js b/packages/loot-design/src/svg/v1/Portfolio.mobile.js deleted file mode 100644 index d7a21c49e6..0000000000 --- a/packages/loot-design/src/svg/v1/Portfolio.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgPortfolio = props => ( - - - -); - -export default SvgPortfolio; diff --git a/packages/loot-design/src/svg/v1/Printer.mobile.js b/packages/loot-design/src/svg/v1/Printer.mobile.js deleted file mode 100644 index 2e671aebbc..0000000000 --- a/packages/loot-design/src/svg/v1/Printer.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgPrinter = props => ( - - - -); - -export default SvgPrinter; diff --git a/packages/loot-design/src/svg/v1/Pylon.mobile.js b/packages/loot-design/src/svg/v1/Pylon.mobile.js deleted file mode 100644 index abf232b1af..0000000000 --- a/packages/loot-design/src/svg/v1/Pylon.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgPylon = props => ( - - - -); - -export default SvgPylon; diff --git a/packages/loot-design/src/svg/v1/Question.mobile.js b/packages/loot-design/src/svg/v1/Question.mobile.js deleted file mode 100644 index 3c0125ed7d..0000000000 --- a/packages/loot-design/src/svg/v1/Question.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgQuestion = props => ( - - - -); - -export default SvgQuestion; diff --git a/packages/loot-design/src/svg/v1/Queue.mobile.js b/packages/loot-design/src/svg/v1/Queue.mobile.js deleted file mode 100644 index fd959d2db9..0000000000 --- a/packages/loot-design/src/svg/v1/Queue.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgQueue = props => ( - - - -); - -export default SvgQueue; diff --git a/packages/loot-design/src/svg/v1/Radar.mobile.js b/packages/loot-design/src/svg/v1/Radar.mobile.js deleted file mode 100644 index 57e0476a5f..0000000000 --- a/packages/loot-design/src/svg/v1/Radar.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgRadar = props => ( - - - -); - -export default SvgRadar; diff --git a/packages/loot-design/src/svg/v1/RadarCopy2.mobile.js b/packages/loot-design/src/svg/v1/RadarCopy2.mobile.js deleted file mode 100644 index 65b89e7303..0000000000 --- a/packages/loot-design/src/svg/v1/RadarCopy2.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgRadarCopy2 = props => ( - - - -); - -export default SvgRadarCopy2; diff --git a/packages/loot-design/src/svg/v1/Radio.mobile.js b/packages/loot-design/src/svg/v1/Radio.mobile.js deleted file mode 100644 index a847e95f8c..0000000000 --- a/packages/loot-design/src/svg/v1/Radio.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgRadio = props => ( - - - -); - -export default SvgRadio; diff --git a/packages/loot-design/src/svg/v1/Refresh.mobile.js b/packages/loot-design/src/svg/v1/Refresh.mobile.js deleted file mode 100644 index e75b3b9491..0000000000 --- a/packages/loot-design/src/svg/v1/Refresh.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgRefresh = props => ( - - - -); - -export default SvgRefresh; diff --git a/packages/loot-design/src/svg/v1/Reload.mobile.js b/packages/loot-design/src/svg/v1/Reload.mobile.js deleted file mode 100644 index 1295b276d5..0000000000 --- a/packages/loot-design/src/svg/v1/Reload.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgReload = props => ( - - - -); - -export default SvgReload; diff --git a/packages/loot-design/src/svg/v1/Reply.mobile.js b/packages/loot-design/src/svg/v1/Reply.mobile.js deleted file mode 100644 index 4ce1a89aea..0000000000 --- a/packages/loot-design/src/svg/v1/Reply.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgReply = props => ( - - - -); - -export default SvgReply; diff --git a/packages/loot-design/src/svg/v1/ReplyAll.mobile.js b/packages/loot-design/src/svg/v1/ReplyAll.mobile.js deleted file mode 100644 index 4b3c755c76..0000000000 --- a/packages/loot-design/src/svg/v1/ReplyAll.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgReplyAll = props => ( - - - -); - -export default SvgReplyAll; diff --git a/packages/loot-design/src/svg/v1/Reports.mobile.js b/packages/loot-design/src/svg/v1/Reports.mobile.js deleted file mode 100644 index cbe140d1ce..0000000000 --- a/packages/loot-design/src/svg/v1/Reports.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgReports = props => ( - - - -); - -export default SvgReports; diff --git a/packages/loot-design/src/svg/v1/Repost.mobile.js b/packages/loot-design/src/svg/v1/Repost.mobile.js deleted file mode 100644 index f2c9dde5d6..0000000000 --- a/packages/loot-design/src/svg/v1/Repost.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgRepost = props => ( - - - -); - -export default SvgRepost; diff --git a/packages/loot-design/src/svg/v1/SaveDisk.mobile.js b/packages/loot-design/src/svg/v1/SaveDisk.mobile.js deleted file mode 100644 index 65eba9dcec..0000000000 --- a/packages/loot-design/src/svg/v1/SaveDisk.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgSaveDisk = props => ( - - - -); - -export default SvgSaveDisk; diff --git a/packages/loot-design/src/svg/v1/ScreenFull.mobile.js b/packages/loot-design/src/svg/v1/ScreenFull.mobile.js deleted file mode 100644 index 5a2715ba72..0000000000 --- a/packages/loot-design/src/svg/v1/ScreenFull.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgScreenFull = props => ( - - - -); - -export default SvgScreenFull; diff --git a/packages/loot-design/src/svg/v1/Search.mobile.js b/packages/loot-design/src/svg/v1/Search.mobile.js deleted file mode 100644 index 53a61a7e08..0000000000 --- a/packages/loot-design/src/svg/v1/Search.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgSearch = props => ( - - - -); - -export default SvgSearch; diff --git a/packages/loot-design/src/svg/v1/Send.mobile.js b/packages/loot-design/src/svg/v1/Send.mobile.js deleted file mode 100644 index cda4472fcf..0000000000 --- a/packages/loot-design/src/svg/v1/Send.mobile.js +++ /dev/null @@ -1,17 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgSend = props => ( - - - -); - -export default SvgSend; diff --git a/packages/loot-design/src/svg/v1/Servers.mobile.js b/packages/loot-design/src/svg/v1/Servers.mobile.js deleted file mode 100644 index edca774c49..0000000000 --- a/packages/loot-design/src/svg/v1/Servers.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgServers = props => ( - - - -); - -export default SvgServers; diff --git a/packages/loot-design/src/svg/v1/Share.mobile.js b/packages/loot-design/src/svg/v1/Share.mobile.js deleted file mode 100644 index f8894378c7..0000000000 --- a/packages/loot-design/src/svg/v1/Share.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgShare = props => ( - - - -); - -export default SvgShare; diff --git a/packages/loot-design/src/svg/v1/Share01.mobile.js b/packages/loot-design/src/svg/v1/Share01.mobile.js deleted file mode 100644 index 9d828aaae0..0000000000 --- a/packages/loot-design/src/svg/v1/Share01.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgShare01 = props => ( - - - -); - -export default SvgShare01; diff --git a/packages/loot-design/src/svg/v1/ShareAlt.mobile.js b/packages/loot-design/src/svg/v1/ShareAlt.mobile.js deleted file mode 100644 index 6447e0884a..0000000000 --- a/packages/loot-design/src/svg/v1/ShareAlt.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgShareAlt = props => ( - - - -); - -export default SvgShareAlt; diff --git a/packages/loot-design/src/svg/v1/Shield.mobile.js b/packages/loot-design/src/svg/v1/Shield.mobile.js deleted file mode 100644 index b9e7565ff6..0000000000 --- a/packages/loot-design/src/svg/v1/Shield.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgShield = props => ( - - - -); - -export default SvgShield; diff --git a/packages/loot-design/src/svg/v1/ShoppingCart.mobile.js b/packages/loot-design/src/svg/v1/ShoppingCart.mobile.js deleted file mode 100644 index d41f99585e..0000000000 --- a/packages/loot-design/src/svg/v1/ShoppingCart.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgShoppingCart = props => ( - - - -); - -export default SvgShoppingCart; diff --git a/packages/loot-design/src/svg/v1/ShowSidebar.mobile.js b/packages/loot-design/src/svg/v1/ShowSidebar.mobile.js deleted file mode 100644 index cceace98d8..0000000000 --- a/packages/loot-design/src/svg/v1/ShowSidebar.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgShowSidebar = props => ( - - - -); - -export default SvgShowSidebar; diff --git a/packages/loot-design/src/svg/v1/Shuffle.mobile.js b/packages/loot-design/src/svg/v1/Shuffle.mobile.js deleted file mode 100644 index f82a9aedfc..0000000000 --- a/packages/loot-design/src/svg/v1/Shuffle.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgShuffle = props => ( - - - -); - -export default SvgShuffle; diff --git a/packages/loot-design/src/svg/v1/StandBy.mobile.js b/packages/loot-design/src/svg/v1/StandBy.mobile.js deleted file mode 100644 index 8998830b82..0000000000 --- a/packages/loot-design/src/svg/v1/StandBy.mobile.js +++ /dev/null @@ -1,21 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgStandBy = props => ( - - - -); - -export default SvgStandBy; diff --git a/packages/loot-design/src/svg/v1/StarFull.mobile.js b/packages/loot-design/src/svg/v1/StarFull.mobile.js deleted file mode 100644 index da7ab50542..0000000000 --- a/packages/loot-design/src/svg/v1/StarFull.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgStarFull = props => ( - - - -); - -export default SvgStarFull; diff --git a/packages/loot-design/src/svg/v1/Station.mobile.js b/packages/loot-design/src/svg/v1/Station.mobile.js deleted file mode 100644 index b35be5a1a4..0000000000 --- a/packages/loot-design/src/svg/v1/Station.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgStation = props => ( - - - -); - -export default SvgStation; diff --git a/packages/loot-design/src/svg/v1/StepBackward.mobile.js b/packages/loot-design/src/svg/v1/StepBackward.mobile.js deleted file mode 100644 index 56def1a99c..0000000000 --- a/packages/loot-design/src/svg/v1/StepBackward.mobile.js +++ /dev/null @@ -1,17 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgStepBackward = props => ( - - - -); - -export default SvgStepBackward; diff --git a/packages/loot-design/src/svg/v1/StepForward.mobile.js b/packages/loot-design/src/svg/v1/StepForward.mobile.js deleted file mode 100644 index d301e6ec9e..0000000000 --- a/packages/loot-design/src/svg/v1/StepForward.mobile.js +++ /dev/null @@ -1,17 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgStepForward = props => ( - - - -); - -export default SvgStepForward; diff --git a/packages/loot-design/src/svg/v1/Stethoscope.mobile.js b/packages/loot-design/src/svg/v1/Stethoscope.mobile.js deleted file mode 100644 index cacfdd4c67..0000000000 --- a/packages/loot-design/src/svg/v1/Stethoscope.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgStethoscope = props => ( - - - -); - -export default SvgStethoscope; diff --git a/packages/loot-design/src/svg/v1/StoreFront.mobile.js b/packages/loot-design/src/svg/v1/StoreFront.mobile.js deleted file mode 100644 index 9ece0c8133..0000000000 --- a/packages/loot-design/src/svg/v1/StoreFront.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgStoreFront = props => ( - - - -); - -export default SvgStoreFront; diff --git a/packages/loot-design/src/svg/v1/StrokeWidth.mobile.js b/packages/loot-design/src/svg/v1/StrokeWidth.mobile.js deleted file mode 100644 index 71209c5aba..0000000000 --- a/packages/loot-design/src/svg/v1/StrokeWidth.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgStrokeWidth = props => ( - - - -); - -export default SvgStrokeWidth; diff --git a/packages/loot-design/src/svg/v1/SubdirectoryLeft.mobile.js b/packages/loot-design/src/svg/v1/SubdirectoryLeft.mobile.js deleted file mode 100644 index 32cdb4e4a8..0000000000 --- a/packages/loot-design/src/svg/v1/SubdirectoryLeft.mobile.js +++ /dev/null @@ -1,17 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgSubdirectoryLeft = props => ( - - - -); - -export default SvgSubdirectoryLeft; diff --git a/packages/loot-design/src/svg/v1/SubdirectoryRight.mobile.js b/packages/loot-design/src/svg/v1/SubdirectoryRight.mobile.js deleted file mode 100644 index a1b739c7ea..0000000000 --- a/packages/loot-design/src/svg/v1/SubdirectoryRight.mobile.js +++ /dev/null @@ -1,17 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgSubdirectoryRight = props => ( - - - -); - -export default SvgSubdirectoryRight; diff --git a/packages/loot-design/src/svg/v1/Subtract.mobile.js b/packages/loot-design/src/svg/v1/Subtract.mobile.js deleted file mode 100644 index 3f843ce8d1..0000000000 --- a/packages/loot-design/src/svg/v1/Subtract.mobile.js +++ /dev/null @@ -1,21 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgSubtract = props => ( - - - -); - -export default SvgSubtract; diff --git a/packages/loot-design/src/svg/v1/Swap.mobile.js b/packages/loot-design/src/svg/v1/Swap.mobile.js deleted file mode 100644 index 38f14e9909..0000000000 --- a/packages/loot-design/src/svg/v1/Swap.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgSwap = props => ( - - - -); - -export default SvgSwap; diff --git a/packages/loot-design/src/svg/v1/Tablet.mobile.js b/packages/loot-design/src/svg/v1/Tablet.mobile.js deleted file mode 100644 index 0b871771a2..0000000000 --- a/packages/loot-design/src/svg/v1/Tablet.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgTablet = props => ( - - - -); - -export default SvgTablet; diff --git a/packages/loot-design/src/svg/v1/Tag.mobile.js b/packages/loot-design/src/svg/v1/Tag.mobile.js deleted file mode 100644 index f7c0bc8de8..0000000000 --- a/packages/loot-design/src/svg/v1/Tag.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgTag = props => ( - - - -); - -export default SvgTag; diff --git a/packages/loot-design/src/svg/v1/Target.mobile.js b/packages/loot-design/src/svg/v1/Target.mobile.js deleted file mode 100644 index 1647c9e08e..0000000000 --- a/packages/loot-design/src/svg/v1/Target.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgTarget = props => ( - - - -); - -export default SvgTarget; diff --git a/packages/loot-design/src/svg/v1/TextBox.mobile.js b/packages/loot-design/src/svg/v1/TextBox.mobile.js deleted file mode 100644 index 9b4ef6142c..0000000000 --- a/packages/loot-design/src/svg/v1/TextBox.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgTextBox = props => ( - - - -); - -export default SvgTextBox; diff --git a/packages/loot-design/src/svg/v1/TextDecoration.mobile.js b/packages/loot-design/src/svg/v1/TextDecoration.mobile.js deleted file mode 100644 index 3f8402c783..0000000000 --- a/packages/loot-design/src/svg/v1/TextDecoration.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgTextDecoration = props => ( - - - -); - -export default SvgTextDecoration; diff --git a/packages/loot-design/src/svg/v1/Thermometer.mobile.js b/packages/loot-design/src/svg/v1/Thermometer.mobile.js deleted file mode 100644 index d469fe6081..0000000000 --- a/packages/loot-design/src/svg/v1/Thermometer.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgThermometer = props => ( - - - -); - -export default SvgThermometer; diff --git a/packages/loot-design/src/svg/v1/ThumbsDown.mobile.js b/packages/loot-design/src/svg/v1/ThumbsDown.mobile.js deleted file mode 100644 index b98be4a2f4..0000000000 --- a/packages/loot-design/src/svg/v1/ThumbsDown.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgThumbsDown = props => ( - - - -); - -export default SvgThumbsDown; diff --git a/packages/loot-design/src/svg/v1/ThumbsUp.mobile.js b/packages/loot-design/src/svg/v1/ThumbsUp.mobile.js deleted file mode 100644 index ebd9c915aa..0000000000 --- a/packages/loot-design/src/svg/v1/ThumbsUp.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgThumbsUp = props => ( - - - -); - -export default SvgThumbsUp; diff --git a/packages/loot-design/src/svg/v1/Ticket.mobile.js b/packages/loot-design/src/svg/v1/Ticket.mobile.js deleted file mode 100644 index 9f8e70a91d..0000000000 --- a/packages/loot-design/src/svg/v1/Ticket.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgTicket = props => ( - - - -); - -export default SvgTicket; diff --git a/packages/loot-design/src/svg/v1/Time.mobile.js b/packages/loot-design/src/svg/v1/Time.mobile.js deleted file mode 100644 index ce730b8624..0000000000 --- a/packages/loot-design/src/svg/v1/Time.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgTime = props => ( - - - -); - -export default SvgTime; diff --git a/packages/loot-design/src/svg/v1/Timer.mobile.js b/packages/loot-design/src/svg/v1/Timer.mobile.js deleted file mode 100644 index 4eacca1d4c..0000000000 --- a/packages/loot-design/src/svg/v1/Timer.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgTimer = props => ( - - - -); - -export default SvgTimer; diff --git a/packages/loot-design/src/svg/v1/ToolsCopy.mobile.js b/packages/loot-design/src/svg/v1/ToolsCopy.mobile.js deleted file mode 100644 index 31f0dd8afb..0000000000 --- a/packages/loot-design/src/svg/v1/ToolsCopy.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgToolsCopy = props => ( - - - -); - -export default SvgToolsCopy; diff --git a/packages/loot-design/src/svg/v1/Translate.mobile.js b/packages/loot-design/src/svg/v1/Translate.mobile.js deleted file mode 100644 index 15a168d31f..0000000000 --- a/packages/loot-design/src/svg/v1/Translate.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgTranslate = props => ( - - - -); - -export default SvgTranslate; diff --git a/packages/loot-design/src/svg/v1/Trash.mobile.js b/packages/loot-design/src/svg/v1/Trash.mobile.js deleted file mode 100644 index 101ea11753..0000000000 --- a/packages/loot-design/src/svg/v1/Trash.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgTrash = props => ( - - - -); - -export default SvgTrash; diff --git a/packages/loot-design/src/svg/v1/Travel.mobile.js b/packages/loot-design/src/svg/v1/Travel.mobile.js deleted file mode 100644 index 2ec4c9f680..0000000000 --- a/packages/loot-design/src/svg/v1/Travel.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgTravel = props => ( - - - -); - -export default SvgTravel; diff --git a/packages/loot-design/src/svg/v1/TravelBus.mobile.js b/packages/loot-design/src/svg/v1/TravelBus.mobile.js deleted file mode 100644 index 608be4caff..0000000000 --- a/packages/loot-design/src/svg/v1/TravelBus.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgTravelBus = props => ( - - - -); - -export default SvgTravelBus; diff --git a/packages/loot-design/src/svg/v1/TravelCar.mobile.js b/packages/loot-design/src/svg/v1/TravelCar.mobile.js deleted file mode 100644 index ceaa18d95a..0000000000 --- a/packages/loot-design/src/svg/v1/TravelCar.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgTravelCar = props => ( - - - -); - -export default SvgTravelCar; diff --git a/packages/loot-design/src/svg/v1/TravelCase.mobile.js b/packages/loot-design/src/svg/v1/TravelCase.mobile.js deleted file mode 100644 index 42873ec221..0000000000 --- a/packages/loot-design/src/svg/v1/TravelCase.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgTravelCase = props => ( - - - -); - -export default SvgTravelCase; diff --git a/packages/loot-design/src/svg/v1/TravelTaxiCab.mobile.js b/packages/loot-design/src/svg/v1/TravelTaxiCab.mobile.js deleted file mode 100644 index c3bfeb83a0..0000000000 --- a/packages/loot-design/src/svg/v1/TravelTaxiCab.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgTravelTaxiCab = props => ( - - - -); - -export default SvgTravelTaxiCab; diff --git a/packages/loot-design/src/svg/v1/TravelTrain.mobile.js b/packages/loot-design/src/svg/v1/TravelTrain.mobile.js deleted file mode 100644 index 328eef9485..0000000000 --- a/packages/loot-design/src/svg/v1/TravelTrain.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgTravelTrain = props => ( - - - -); - -export default SvgTravelTrain; diff --git a/packages/loot-design/src/svg/v1/TravelWalk.mobile.js b/packages/loot-design/src/svg/v1/TravelWalk.mobile.js deleted file mode 100644 index 54edf264bc..0000000000 --- a/packages/loot-design/src/svg/v1/TravelWalk.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgTravelWalk = props => ( - - - -); - -export default SvgTravelWalk; diff --git a/packages/loot-design/src/svg/v1/Trophy.mobile.js b/packages/loot-design/src/svg/v1/Trophy.mobile.js deleted file mode 100644 index 4929b1ad00..0000000000 --- a/packages/loot-design/src/svg/v1/Trophy.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgTrophy = props => ( - - - -); - -export default SvgTrophy; diff --git a/packages/loot-design/src/svg/v1/Tuning.mobile.js b/packages/loot-design/src/svg/v1/Tuning.mobile.js deleted file mode 100644 index 63903f485f..0000000000 --- a/packages/loot-design/src/svg/v1/Tuning.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgTuning = props => ( - - - -); - -export default SvgTuning; diff --git a/packages/loot-design/src/svg/v1/Upload.mobile.js b/packages/loot-design/src/svg/v1/Upload.mobile.js deleted file mode 100644 index 2690707680..0000000000 --- a/packages/loot-design/src/svg/v1/Upload.mobile.js +++ /dev/null @@ -1,17 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgUpload = props => ( - - - -); - -export default SvgUpload; diff --git a/packages/loot-design/src/svg/v1/Usb.mobile.js b/packages/loot-design/src/svg/v1/Usb.mobile.js deleted file mode 100644 index ea2d79bb0e..0000000000 --- a/packages/loot-design/src/svg/v1/Usb.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgUsb = props => ( - - - -); - -export default SvgUsb; diff --git a/packages/loot-design/src/svg/v1/User.mobile.js b/packages/loot-design/src/svg/v1/User.mobile.js deleted file mode 100644 index a6ef0afd1f..0000000000 --- a/packages/loot-design/src/svg/v1/User.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgUser = props => ( - - - -); - -export default SvgUser; diff --git a/packages/loot-design/src/svg/v1/UserAdd.mobile.js b/packages/loot-design/src/svg/v1/UserAdd.mobile.js deleted file mode 100644 index 85a5c9fdd6..0000000000 --- a/packages/loot-design/src/svg/v1/UserAdd.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgUserAdd = props => ( - - - -); - -export default SvgUserAdd; diff --git a/packages/loot-design/src/svg/v1/UserGroup.mobile.js b/packages/loot-design/src/svg/v1/UserGroup.mobile.js deleted file mode 100644 index 74596f7834..0000000000 --- a/packages/loot-design/src/svg/v1/UserGroup.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgUserGroup = props => ( - - - -); - -export default SvgUserGroup; diff --git a/packages/loot-design/src/svg/v1/UserSolidCircle.mobile.js b/packages/loot-design/src/svg/v1/UserSolidCircle.mobile.js deleted file mode 100644 index a660ac41b5..0000000000 --- a/packages/loot-design/src/svg/v1/UserSolidCircle.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgUserSolidCircle = props => ( - - - -); - -export default SvgUserSolidCircle; diff --git a/packages/loot-design/src/svg/v1/UserSolidSquare.mobile.js b/packages/loot-design/src/svg/v1/UserSolidSquare.mobile.js deleted file mode 100644 index e00ad33e7a..0000000000 --- a/packages/loot-design/src/svg/v1/UserSolidSquare.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgUserSolidSquare = props => ( - - - -); - -export default SvgUserSolidSquare; diff --git a/packages/loot-design/src/svg/v1/Vector.mobile.js b/packages/loot-design/src/svg/v1/Vector.mobile.js deleted file mode 100644 index f389c73490..0000000000 --- a/packages/loot-design/src/svg/v1/Vector.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgVector = props => ( - - - -); - -export default SvgVector; diff --git a/packages/loot-design/src/svg/v1/VideoCamera.mobile.js b/packages/loot-design/src/svg/v1/VideoCamera.mobile.js deleted file mode 100644 index 664e620707..0000000000 --- a/packages/loot-design/src/svg/v1/VideoCamera.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgVideoCamera = props => ( - - - -); - -export default SvgVideoCamera; diff --git a/packages/loot-design/src/svg/v1/ViewCarousel.mobile.js b/packages/loot-design/src/svg/v1/ViewCarousel.mobile.js deleted file mode 100644 index ca1628a4f3..0000000000 --- a/packages/loot-design/src/svg/v1/ViewCarousel.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgViewCarousel = props => ( - - - -); - -export default SvgViewCarousel; diff --git a/packages/loot-design/src/svg/v1/ViewColumn.mobile.js b/packages/loot-design/src/svg/v1/ViewColumn.mobile.js deleted file mode 100644 index acea4cbc8b..0000000000 --- a/packages/loot-design/src/svg/v1/ViewColumn.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgViewColumn = props => ( - - - -); - -export default SvgViewColumn; diff --git a/packages/loot-design/src/svg/v1/ViewHide.mobile.js b/packages/loot-design/src/svg/v1/ViewHide.mobile.js deleted file mode 100644 index 3106c4634a..0000000000 --- a/packages/loot-design/src/svg/v1/ViewHide.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgViewHide = props => ( - - - -); - -export default SvgViewHide; diff --git a/packages/loot-design/src/svg/v1/ViewList.mobile.js b/packages/loot-design/src/svg/v1/ViewList.mobile.js deleted file mode 100644 index fecf6cc73a..0000000000 --- a/packages/loot-design/src/svg/v1/ViewList.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgViewList = props => ( - - - -); - -export default SvgViewList; diff --git a/packages/loot-design/src/svg/v1/ViewShow.mobile.js b/packages/loot-design/src/svg/v1/ViewShow.mobile.js deleted file mode 100644 index d33dc5aa63..0000000000 --- a/packages/loot-design/src/svg/v1/ViewShow.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgViewShow = props => ( - - - -); - -export default SvgViewShow; diff --git a/packages/loot-design/src/svg/v1/ViewTile.mobile.js b/packages/loot-design/src/svg/v1/ViewTile.mobile.js deleted file mode 100644 index 1dfcd61f68..0000000000 --- a/packages/loot-design/src/svg/v1/ViewTile.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgViewTile = props => ( - - - -); - -export default SvgViewTile; diff --git a/packages/loot-design/src/svg/v1/VolumeDown.mobile.js b/packages/loot-design/src/svg/v1/VolumeDown.mobile.js deleted file mode 100644 index 640cd3468f..0000000000 --- a/packages/loot-design/src/svg/v1/VolumeDown.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgVolumeDown = props => ( - - - -); - -export default SvgVolumeDown; diff --git a/packages/loot-design/src/svg/v1/VolumeMute.mobile.js b/packages/loot-design/src/svg/v1/VolumeMute.mobile.js deleted file mode 100644 index 71be9967d7..0000000000 --- a/packages/loot-design/src/svg/v1/VolumeMute.mobile.js +++ /dev/null @@ -1,17 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgVolumeMute = props => ( - - - -); - -export default SvgVolumeMute; diff --git a/packages/loot-design/src/svg/v1/VolumeOff.mobile.js b/packages/loot-design/src/svg/v1/VolumeOff.mobile.js deleted file mode 100644 index b524d8f8be..0000000000 --- a/packages/loot-design/src/svg/v1/VolumeOff.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgVolumeOff = props => ( - - - -); - -export default SvgVolumeOff; diff --git a/packages/loot-design/src/svg/v1/VolumeUp.mobile.js b/packages/loot-design/src/svg/v1/VolumeUp.mobile.js deleted file mode 100644 index d9b4f72eab..0000000000 --- a/packages/loot-design/src/svg/v1/VolumeUp.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgVolumeUp = props => ( - - - -); - -export default SvgVolumeUp; diff --git a/packages/loot-design/src/svg/v1/Wallet.mobile.js b/packages/loot-design/src/svg/v1/Wallet.mobile.js deleted file mode 100644 index b4f1f9ff62..0000000000 --- a/packages/loot-design/src/svg/v1/Wallet.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgWallet = props => ( - - - -); - -export default SvgWallet; diff --git a/packages/loot-design/src/svg/v1/Watch.mobile.js b/packages/loot-design/src/svg/v1/Watch.mobile.js deleted file mode 100644 index c864f38a34..0000000000 --- a/packages/loot-design/src/svg/v1/Watch.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgWatch = props => ( - - - -); - -export default SvgWatch; diff --git a/packages/loot-design/src/svg/v1/Window.mobile.js b/packages/loot-design/src/svg/v1/Window.mobile.js deleted file mode 100644 index 833be10897..0000000000 --- a/packages/loot-design/src/svg/v1/Window.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgWindow = props => ( - - - -); - -export default SvgWindow; diff --git a/packages/loot-design/src/svg/v1/WindowNew.mobile.js b/packages/loot-design/src/svg/v1/WindowNew.mobile.js deleted file mode 100644 index 55c56f74e6..0000000000 --- a/packages/loot-design/src/svg/v1/WindowNew.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgWindowNew = props => ( - - - -); - -export default SvgWindowNew; diff --git a/packages/loot-design/src/svg/v1/WindowOpen.mobile.js b/packages/loot-design/src/svg/v1/WindowOpen.mobile.js deleted file mode 100644 index cc04c0a290..0000000000 --- a/packages/loot-design/src/svg/v1/WindowOpen.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgWindowOpen = props => ( - - - -); - -export default SvgWindowOpen; diff --git a/packages/loot-design/src/svg/v1/Wrench.mobile.js b/packages/loot-design/src/svg/v1/Wrench.mobile.js deleted file mode 100644 index a544d93e71..0000000000 --- a/packages/loot-design/src/svg/v1/Wrench.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgWrench = props => ( - - - -); - -export default SvgWrench; diff --git a/packages/loot-design/src/svg/v1/YinYang.mobile.js b/packages/loot-design/src/svg/v1/YinYang.mobile.js deleted file mode 100644 index 1e5cb79f0c..0000000000 --- a/packages/loot-design/src/svg/v1/YinYang.mobile.js +++ /dev/null @@ -1,21 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgYinYang = props => ( - - - -); - -export default SvgYinYang; diff --git a/packages/loot-design/src/svg/v1/ZoomIn.mobile.js b/packages/loot-design/src/svg/v1/ZoomIn.mobile.js deleted file mode 100644 index 1d9f0a385e..0000000000 --- a/packages/loot-design/src/svg/v1/ZoomIn.mobile.js +++ /dev/null @@ -1,21 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgZoomIn = props => ( - - - -); - -export default SvgZoomIn; diff --git a/packages/loot-design/src/svg/v1/ZoomOut.mobile.js b/packages/loot-design/src/svg/v1/ZoomOut.mobile.js deleted file mode 100644 index 55c634d40b..0000000000 --- a/packages/loot-design/src/svg/v1/ZoomOut.mobile.js +++ /dev/null @@ -1,21 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgZoomOut = props => ( - - - -); - -export default SvgZoomOut; diff --git a/packages/loot-design/src/svg/v2/AlertTriangle.mobile.js b/packages/loot-design/src/svg/v2/AlertTriangle.mobile.js deleted file mode 100644 index 0618742527..0000000000 --- a/packages/loot-design/src/svg/v2/AlertTriangle.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgAlertTriangle = props => ( - - - -); - -export default SvgAlertTriangle; diff --git a/packages/loot-design/src/svg/v2/ArrowButtonDown1.mobile.js b/packages/loot-design/src/svg/v2/ArrowButtonDown1.mobile.js deleted file mode 100644 index 5799372efa..0000000000 --- a/packages/loot-design/src/svg/v2/ArrowButtonDown1.mobile.js +++ /dev/null @@ -1,24 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgArrowButtonDown1 = props => ( - - - - -); - -export default SvgArrowButtonDown1; diff --git a/packages/loot-design/src/svg/v2/ArrowButtonLeft1.mobile.js b/packages/loot-design/src/svg/v2/ArrowButtonLeft1.mobile.js deleted file mode 100644 index c00b9345e4..0000000000 --- a/packages/loot-design/src/svg/v2/ArrowButtonLeft1.mobile.js +++ /dev/null @@ -1,24 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgArrowButtonLeft1 = props => ( - - - - -); - -export default SvgArrowButtonLeft1; diff --git a/packages/loot-design/src/svg/v2/ArrowButtonRight1.mobile.js b/packages/loot-design/src/svg/v2/ArrowButtonRight1.mobile.js deleted file mode 100644 index 5b53fe43be..0000000000 --- a/packages/loot-design/src/svg/v2/ArrowButtonRight1.mobile.js +++ /dev/null @@ -1,24 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgArrowButtonRight1 = props => ( - - - - -); - -export default SvgArrowButtonRight1; diff --git a/packages/loot-design/src/svg/v2/ArrowButtonUp1.mobile.js b/packages/loot-design/src/svg/v2/ArrowButtonUp1.mobile.js deleted file mode 100644 index 5ac5a9c59f..0000000000 --- a/packages/loot-design/src/svg/v2/ArrowButtonUp1.mobile.js +++ /dev/null @@ -1,24 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgArrowButtonUp1 = props => ( - - - - -); - -export default SvgArrowButtonUp1; diff --git a/packages/loot-design/src/svg/v2/ArrowsExpand3.mobile.js b/packages/loot-design/src/svg/v2/ArrowsExpand3.mobile.js deleted file mode 100644 index ba010bfaae..0000000000 --- a/packages/loot-design/src/svg/v2/ArrowsExpand3.mobile.js +++ /dev/null @@ -1,21 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgArrowsExpand3 = props => ( - - - -); - -export default SvgArrowsExpand3; diff --git a/packages/loot-design/src/svg/v2/ArrowsShrink3.mobile.js b/packages/loot-design/src/svg/v2/ArrowsShrink3.mobile.js deleted file mode 100644 index f5da68daf8..0000000000 --- a/packages/loot-design/src/svg/v2/ArrowsShrink3.mobile.js +++ /dev/null @@ -1,21 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgArrowsShrink3 = props => ( - - - -); - -export default SvgArrowsShrink3; diff --git a/packages/loot-design/src/svg/v2/ArrowsSynchronize.mobile.js b/packages/loot-design/src/svg/v2/ArrowsSynchronize.mobile.js deleted file mode 100644 index 17df3882c0..0000000000 --- a/packages/loot-design/src/svg/v2/ArrowsSynchronize.mobile.js +++ /dev/null @@ -1,22 +0,0 @@ -import React from 'react'; -import Svg, { G, Path } from 'react-native-svg'; - -const SvgArrowsSynchronize = props => ( - - - - - -); - -export default SvgArrowsSynchronize; diff --git a/packages/loot-design/src/svg/v2/Calendar.mobile.js b/packages/loot-design/src/svg/v2/Calendar.mobile.js deleted file mode 100644 index e8d98f2820..0000000000 --- a/packages/loot-design/src/svg/v2/Calendar.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgCalendar = props => ( - - - -); - -export default SvgCalendar; diff --git a/packages/loot-design/src/svg/v2/Calendar3.mobile.js b/packages/loot-design/src/svg/v2/Calendar3.mobile.js deleted file mode 100644 index cf8b9cdd65..0000000000 --- a/packages/loot-design/src/svg/v2/Calendar3.mobile.js +++ /dev/null @@ -1,24 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgCalendar3 = props => ( - - - - -); - -export default SvgCalendar3; diff --git a/packages/loot-design/src/svg/v2/Check.mobile.js b/packages/loot-design/src/svg/v2/Check.mobile.js deleted file mode 100644 index a2cb2a40ca..0000000000 --- a/packages/loot-design/src/svg/v2/Check.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgCheck = props => ( - - - -); - -export default SvgCheck; diff --git a/packages/loot-design/src/svg/v2/CheckCircle1.mobile.js b/packages/loot-design/src/svg/v2/CheckCircle1.mobile.js deleted file mode 100644 index fbd228fd0b..0000000000 --- a/packages/loot-design/src/svg/v2/CheckCircle1.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgCheckCircle1 = props => ( - - - -); - -export default SvgCheckCircle1; diff --git a/packages/loot-design/src/svg/v2/CloudUnknown.mobile.js b/packages/loot-design/src/svg/v2/CloudUnknown.mobile.js deleted file mode 100644 index d71454bde9..0000000000 --- a/packages/loot-design/src/svg/v2/CloudUnknown.mobile.js +++ /dev/null @@ -1,24 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgCloudUnknown = props => ( - - - - -); - -export default SvgCloudUnknown; diff --git a/packages/loot-design/src/svg/v2/CloudUpload.mobile.js b/packages/loot-design/src/svg/v2/CloudUpload.mobile.js deleted file mode 100644 index 887c76f0ae..0000000000 --- a/packages/loot-design/src/svg/v2/CloudUpload.mobile.js +++ /dev/null @@ -1,24 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgCloudUpload = props => ( - - - - -); - -export default SvgCloudUpload; diff --git a/packages/loot-design/src/svg/v2/CustomNotesPaper.mobile.js b/packages/loot-design/src/svg/v2/CustomNotesPaper.mobile.js deleted file mode 100644 index 21deeab1de..0000000000 --- a/packages/loot-design/src/svg/v2/CustomNotesPaper.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgCustomNotesPaper = props => ( - - - -); - -export default SvgCustomNotesPaper; diff --git a/packages/loot-design/src/svg/v2/DownloadThickBottom.mobile.js b/packages/loot-design/src/svg/v2/DownloadThickBottom.mobile.js deleted file mode 100644 index 36e0abcced..0000000000 --- a/packages/loot-design/src/svg/v2/DownloadThickBottom.mobile.js +++ /dev/null @@ -1,24 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgDownloadThickBottom = props => ( - - - - -); - -export default SvgDownloadThickBottom; diff --git a/packages/loot-design/src/svg/v2/EditSkull1.mobile.js b/packages/loot-design/src/svg/v2/EditSkull1.mobile.js deleted file mode 100644 index 9aea585de3..0000000000 --- a/packages/loot-design/src/svg/v2/EditSkull1.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgEditSkull1 = props => ( - - - -); - -export default SvgEditSkull1; diff --git a/packages/loot-design/src/svg/v2/FavoriteStar.mobile.js b/packages/loot-design/src/svg/v2/FavoriteStar.mobile.js deleted file mode 100644 index 796e3fa4f6..0000000000 --- a/packages/loot-design/src/svg/v2/FavoriteStar.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgFavoriteStar = props => ( - - - -); - -export default SvgFavoriteStar; diff --git a/packages/loot-design/src/svg/v2/Filter2.mobile.js b/packages/loot-design/src/svg/v2/Filter2.mobile.js deleted file mode 100644 index c48b7010f9..0000000000 --- a/packages/loot-design/src/svg/v2/Filter2.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgFilter2 = props => ( - - - -); - -export default SvgFilter2; diff --git a/packages/loot-design/src/svg/v2/Hyperlink2.mobile.js b/packages/loot-design/src/svg/v2/Hyperlink2.mobile.js deleted file mode 100644 index 6025ef96c3..0000000000 --- a/packages/loot-design/src/svg/v2/Hyperlink2.mobile.js +++ /dev/null @@ -1,28 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgHyperlink2 = props => ( - - - - - -); - -export default SvgHyperlink2; diff --git a/packages/loot-design/src/svg/v2/Hyperlink3.mobile.js b/packages/loot-design/src/svg/v2/Hyperlink3.mobile.js deleted file mode 100644 index 17c9ee4716..0000000000 --- a/packages/loot-design/src/svg/v2/Hyperlink3.mobile.js +++ /dev/null @@ -1,24 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgHyperlink3 = props => ( - - - - -); - -export default SvgHyperlink3; diff --git a/packages/loot-design/src/svg/v2/InformationCircle.mobile.js b/packages/loot-design/src/svg/v2/InformationCircle.mobile.js deleted file mode 100644 index 90a94b51d0..0000000000 --- a/packages/loot-design/src/svg/v2/InformationCircle.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgInformationCircle = props => ( - - - -); - -export default SvgInformationCircle; diff --git a/packages/loot-design/src/svg/v2/Key.mobile.js b/packages/loot-design/src/svg/v2/Key.mobile.js deleted file mode 100644 index 43ffe21468..0000000000 --- a/packages/loot-design/src/svg/v2/Key.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgKey = props => ( - - - -); - -export default SvgKey; diff --git a/packages/loot-design/src/svg/v2/NavigationMenu.mobile.js b/packages/loot-design/src/svg/v2/NavigationMenu.mobile.js deleted file mode 100644 index fd08a8daa0..0000000000 --- a/packages/loot-design/src/svg/v2/NavigationMenu.mobile.js +++ /dev/null @@ -1,43 +0,0 @@ -import React from 'react'; -import Svg, { Rect } from 'react-native-svg'; - -const SvgNavigationMenu = props => ( - - - - - -); - -export default SvgNavigationMenu; diff --git a/packages/loot-design/src/svg/v2/NotesPaper.mobile.js b/packages/loot-design/src/svg/v2/NotesPaper.mobile.js deleted file mode 100644 index 3329d7479f..0000000000 --- a/packages/loot-design/src/svg/v2/NotesPaper.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgNotesPaper = props => ( - - - -); - -export default SvgNotesPaper; diff --git a/packages/loot-design/src/svg/v2/NotesPaperText.mobile.js b/packages/loot-design/src/svg/v2/NotesPaperText.mobile.js deleted file mode 100644 index 304f9b3028..0000000000 --- a/packages/loot-design/src/svg/v2/NotesPaperText.mobile.js +++ /dev/null @@ -1,24 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgNotesPaperText = props => ( - - - - -); - -export default SvgNotesPaperText; diff --git a/packages/loot-design/src/svg/v2/Pencil1.mobile.js b/packages/loot-design/src/svg/v2/Pencil1.mobile.js deleted file mode 100644 index 887dc42b05..0000000000 --- a/packages/loot-design/src/svg/v2/Pencil1.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgPencil1 = props => ( - - - -); - -export default SvgPencil1; diff --git a/packages/loot-design/src/svg/v2/PencilWriteAlternate.mobile.js b/packages/loot-design/src/svg/v2/PencilWriteAlternate.mobile.js deleted file mode 100644 index abe32a2622..0000000000 --- a/packages/loot-design/src/svg/v2/PencilWriteAlternate.mobile.js +++ /dev/null @@ -1,24 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgPencilWriteAlternate = props => ( - - - - -); - -export default SvgPencilWriteAlternate; diff --git a/packages/loot-design/src/svg/v2/RefreshArrow.mobile.js b/packages/loot-design/src/svg/v2/RefreshArrow.mobile.js deleted file mode 100644 index 18a7456ec7..0000000000 --- a/packages/loot-design/src/svg/v2/RefreshArrow.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgRefreshArrow = props => ( - - - -); - -export default SvgRefreshArrow; diff --git a/packages/loot-design/src/svg/v2/Remove.mobile.js b/packages/loot-design/src/svg/v2/Remove.mobile.js deleted file mode 100644 index afd47b367a..0000000000 --- a/packages/loot-design/src/svg/v2/Remove.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgRemove = props => ( - - - -); - -export default SvgRemove; diff --git a/packages/loot-design/src/svg/v2/RemoveAlternate.mobile.js b/packages/loot-design/src/svg/v2/RemoveAlternate.mobile.js deleted file mode 100644 index 79fbcd3e48..0000000000 --- a/packages/loot-design/src/svg/v2/RemoveAlternate.mobile.js +++ /dev/null @@ -1,24 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgRemoveAlternate = props => ( - - - - -); - -export default SvgRemoveAlternate; diff --git a/packages/loot-design/src/svg/v2/Search1.mobile.js b/packages/loot-design/src/svg/v2/Search1.mobile.js deleted file mode 100644 index 201bc13495..0000000000 --- a/packages/loot-design/src/svg/v2/Search1.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgSearch1 = props => ( - - - -); - -export default SvgSearch1; diff --git a/packages/loot-design/src/svg/v2/SearchAlternate.mobile.js b/packages/loot-design/src/svg/v2/SearchAlternate.mobile.js deleted file mode 100644 index 01deb76c50..0000000000 --- a/packages/loot-design/src/svg/v2/SearchAlternate.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgSearchAlternate = props => ( - - - -); - -export default SvgSearchAlternate; diff --git a/packages/loot-design/src/svg/v2/SettingsSliderAlternate.mobile.js b/packages/loot-design/src/svg/v2/SettingsSliderAlternate.mobile.js deleted file mode 100644 index a8515e5116..0000000000 --- a/packages/loot-design/src/svg/v2/SettingsSliderAlternate.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgSettingsSliderAlternate = props => ( - - - -); - -export default SvgSettingsSliderAlternate; diff --git a/packages/loot-design/src/svg/v2/Subtract.mobile.js b/packages/loot-design/src/svg/v2/Subtract.mobile.js deleted file mode 100644 index ed88df7f56..0000000000 --- a/packages/loot-design/src/svg/v2/Subtract.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgSubtract = props => ( - - - -); - -export default SvgSubtract; diff --git a/packages/loot-design/src/svg/v2/UploadThickBottom.mobile.js b/packages/loot-design/src/svg/v2/UploadThickBottom.mobile.js deleted file mode 100644 index 766ee1735c..0000000000 --- a/packages/loot-design/src/svg/v2/UploadThickBottom.mobile.js +++ /dev/null @@ -1,24 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgUploadThickBottom = props => ( - - - - -); - -export default SvgUploadThickBottom; diff --git a/packages/loot-design/src/svg/v2/ValidationCheck.mobile.js b/packages/loot-design/src/svg/v2/ValidationCheck.mobile.js deleted file mode 100644 index 1f4a791902..0000000000 --- a/packages/loot-design/src/svg/v2/ValidationCheck.mobile.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Svg, { Path } from 'react-native-svg'; - -const SvgValidationCheck = props => ( - - - -); - -export default SvgValidationCheck; diff --git a/packages/mobile/.babelrc b/packages/mobile/.babelrc deleted file mode 100644 index ec1b6c03b0..0000000000 --- a/packages/mobile/.babelrc +++ /dev/null @@ -1,6 +0,0 @@ -{ - "presets": ["module:metro-react-native-babel-preset"], - "plugins": [ - "babel-preset-jwl-app/style-hoist.js" - ] -} diff --git a/packages/mobile/.flowconfig b/packages/mobile/.flowconfig deleted file mode 100644 index 5b1b233184..0000000000 --- a/packages/mobile/.flowconfig +++ /dev/null @@ -1,75 +0,0 @@ -[ignore] -; We fork some components by platform -.*/*[.]android.js - -; Ignore templates for 'react-native init' -/node_modules/react-native/local-cli/templates/.* - -; Ignore RN jest -/node_modules/react-native/jest/.* - -; Ignore RNTester -/node_modules/react-native/RNTester/.* - -; Ignore the website subdir -/node_modules/react-native/website/.* - -; Ignore the Dangerfile -/node_modules/react-native/danger/dangerfile.js - -; Ignore Fbemitter -/node_modules/fbemitter/.* - -; Ignore "BUCK" generated dirs -/node_modules/react-native/\.buckd/ - -; Ignore unexpected extra "@providesModule" -.*/node_modules/.*/node_modules/fbjs/.* - -; Ignore polyfills -/node_modules/react-native/Libraries/polyfills/.* - -; Ignore various node_modules -/node_modules/react-native-gesture-handler/.* -/node_modules/expo/.* -/node_modules/react-navigation/.* -/node_modules/xdl/.* -/node_modules/reqwest/.* -/node_modules/metro-bundler/.* - -[include] - -[libs] -node_modules/react-native/Libraries/react-native/react-native-interface.js -node_modules/react-native/flow/ -node_modules/expo/flow/ - -[options] -emoji=true - -module.system=haste - -module.file_ext=.js -module.file_ext=.jsx -module.file_ext=.json -module.file_ext=.ios.js - -munge_underscores=true - -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\)$' -> 'RelativeImageStub' - -suppress_type=$FlowIssue -suppress_type=$FlowFixMe -suppress_type=$FlowFixMeProps -suppress_type=$FlowFixMeState -suppress_type=$FixMe - -suppress_comment=\\(.\\|\n\\)*\\$FlowFixMe\\($\\|[^(]\\|(\\(>=0\\.\\(5[0-6]\\|[1-4][0-9]\\|[0-9]\\).[0-9]\\)? *\\(site=[a-z,_]*react_native_oss[a-z,_]*\\)?)\\) -suppress_comment=\\(.\\|\n\\)*\\$FlowIssue\\((\\(>=0\\.\\(5[0-6]\\|[1-4][0-9]\\|[0-9]\\).[0-9]\\)? *\\(site=[a-z,_]*react_native_oss[a-z,_]*\\)?)\\)?:? #[0-9]+ -suppress_comment=\\(.\\|\n\\)*\\$FlowFixedInNextDeploy -suppress_comment=\\(.\\|\n\\)*\\$FlowExpectedError - -unsafe.enable_getters_and_setters=true - -[version] -^0.56.0 diff --git a/packages/mobile/.gitignore b/packages/mobile/.gitignore deleted file mode 100644 index 2896e76bc6..0000000000 --- a/packages/mobile/.gitignore +++ /dev/null @@ -1,31 +0,0 @@ -# dependencies -/node_modules - -# misc -.env.local -.env.development.local -.env.test.local -.env.production.local - -npm-debug.log* -yarn-debug.log* -yarn-error.log* - -migrations - -ios/main.jsbundle -ios/build -ip.txt - -android/app/build -.idea -.gradle -local.properties -*.iml -*.hprof - -ios/Pods -android/build -android/app/actual.keystore - -nodejs-assets/build-native-modules-MacOS-helper-script-* \ No newline at end of file diff --git a/packages/mobile/.watchmanconfig b/packages/mobile/.watchmanconfig deleted file mode 100644 index 0967ef424b..0000000000 --- a/packages/mobile/.watchmanconfig +++ /dev/null @@ -1 +0,0 @@ -{} diff --git a/packages/mobile/.yarnrc.yml b/packages/mobile/.yarnrc.yml deleted file mode 100644 index 72cf3b413b..0000000000 --- a/packages/mobile/.yarnrc.yml +++ /dev/null @@ -1 +0,0 @@ -nmHoistingLimits: workspaces diff --git a/packages/mobile/README.md b/packages/mobile/README.md deleted file mode 100644 index 578137d0a2..0000000000 --- a/packages/mobile/README.md +++ /dev/null @@ -1,220 +0,0 @@ -This project was bootstrapped with [Create React Native App](https://github.com/react-community/create-react-native-app). - -Below you'll find information about performing common tasks. The most recent version of this guide is available [here](https://github.com/react-community/create-react-native-app/blob/master/react-native-scripts/template/README.md). - -## Table of Contents - -* [Updating to New Releases](#updating-to-new-releases) -* [Available Scripts](#available-scripts) - * [npm start](#npm-start) - * [npm test](#npm-test) - * [npm run ios](#npm-run-ios) - * [npm run android](#npm-run-android) - * [npm run eject](#npm-run-eject) -* [Writing and Running Tests](#writing-and-running-tests) -* [Environment Variables](#environment-variables) - * [Configuring Packager IP Address](#configuring-packager-ip-address) -* [Adding Flow](#adding-flow) -* [Customizing App Display Name and Icon](#customizing-app-display-name-and-icon) -* [Sharing and Deployment](#sharing-and-deployment) - * [Publishing to Expo's React Native Community](#publishing-to-expos-react-native-community) - * [Building an Expo "standalone" app](#building-an-expo-standalone-app) - * [Ejecting from Create React Native App](#ejecting-from-create-react-native-app) - * [Build Dependencies (Xcode & Android Studio)](#build-dependencies-xcode-android-studio) - * [Should I Use ExpoKit?](#should-i-use-expokit) -* [Troubleshooting](#troubleshooting) - * [Networking](#networking) - * [iOS Simulator won't open](#ios-simulator-wont-open) - * [QR Code does not scan](#qr-code-does-not-scan) - -## Updating to New Releases - -You should only need to update the global installation of `create-react-native-app` very rarely, ideally never. - -Updating the `react-native-scripts` dependency of your app should be as simple as bumping the version number in `package.json` and reinstalling your project's dependencies. - -Upgrading to a new version of React Native requires updating the `react-native`, `react`, and `expo` package versions, and setting the correct `sdkVersion` in `app.json`. See the [versioning guide](https://github.com/react-community/create-react-native-app/blob/master/VERSIONS.md) for up-to-date information about package version compatibility. - -## Available Scripts - -If Yarn was installed when the project was initialized, then dependencies will have been installed via Yarn, and you should probably use it to run these commands as well. Unlike dependency installation, command running syntax is identical for Yarn and NPM at the time of this writing. - -### `npm start` - -Runs your app in development mode. - -Open it in the [Expo app](https://expo.io) on your phone to view it. It will reload if you save edits to your files, and you will see build errors and logs in the terminal. - -Sometimes you may need to reset or clear the React Native packager's cache. To do so, you can pass the `--reset-cache` flag to the start script: - -``` -npm start --reset-cache -# or -yarn start --reset-cache -``` - -#### `npm test` - -Runs the [jest](https://github.com/facebook/jest) test runner on your tests. - -#### `npm run ios` - -Like `npm start`, but also attempts to open your app in the iOS Simulator if you're on a Mac and have it installed. - -#### `npm run android` - -Like `npm start`, but also attempts to open your app on a connected Android device or emulator. Requires an installation of Android build tools (see [React Native docs](https://facebook.github.io/react-native/docs/getting-started.html) for detailed setup). We also recommend installing Genymotion as your Android emulator. Once you've finished setting up the native build environment, there are two options for making the right copy of `adb` available to Create React Native App: - -##### Using Android Studio's `adb` - -1. Make sure that you can run adb from your terminal. -2. Open Genymotion and navigate to `Settings -> ADB`. Select “Use custom Android SDK tools” and update with your [Android SDK directory](https://stackoverflow.com/questions/25176594/android-sdk-location). - -##### Using Genymotion's `adb` - -1. Find Genymotion’s copy of adb. On macOS for example, this is normally `/Applications/Genymotion.app/Contents/MacOS/tools/`. -2. Add the Genymotion tools directory to your path (instructions for [Mac](http://osxdaily.com/2014/08/14/add-new-path-to-path-command-line/), [Linux](http://www.computerhope.com/issues/ch001647.htm), and [Windows](https://www.howtogeek.com/118594/how-to-edit-your-system-path-for-easy-command-line-access/)). -3. Make sure that you can run adb from your terminal. - -#### `npm run eject` - -This will start the process of "ejecting" from Create React Native App's build scripts. You'll be asked a couple of questions about how you'd like to build your project. - -**Warning:** Running eject is a permanent action (aside from whatever version control system you use). An ejected app will require you to have an [Xcode and/or Android Studio environment](https://facebook.github.io/react-native/docs/getting-started.html) set up. - -## Customizing App Display Name and Icon - -You can edit `app.json` to include [configuration keys](https://docs.expo.io/versions/latest/guides/configuration.html) under the `expo` key. - -To change your app's display name, set the `expo.name` key in `app.json` to an appropriate string. - -To set an app icon, set the `expo.icon` key in `app.json` to be either a local path or a URL. It's recommended that you use a 512x512 png file with transparency. - -## Writing and Running Tests - -This project is set up to use [jest](https://facebook.github.io/jest/) for tests. You can configure whatever testing strategy you like, but jest works out of the box. Create test files in directories called `__tests__` or with the `.test` extension to have the files loaded by jest. See the [the template project](https://github.com/react-community/create-react-native-app/blob/master/react-native-scripts/template/App.test.js) for an example test. The [jest documentation](https://facebook.github.io/jest/docs/en/getting-started.html) is also a wonderful resource, as is the [React Native testing tutorial](https://facebook.github.io/jest/docs/en/tutorial-react-native.html). - -## Environment Variables - -You can configure some of Create React Native App's behavior using environment variables. - -### Configuring Packager IP Address - -When starting your project, you'll see something like this for your project URL: - -``` -exp://192.168.0.2:19000 -``` - -The "manifest" at that URL tells the Expo app how to retrieve and load your app's JavaScript bundle, so even if you load it in the app via a URL like `exp://localhost:19000`, the Expo client app will still try to retrieve your app at the IP address that the start script provides. - -In some cases, this is less than ideal. This might be the case if you need to run your project inside of a virtual machine and you have to access the packager via a different IP address than the one which prints by default. In order to override the IP address or hostname that is detected by Create React Native App, you can specify your own hostname via the `REACT_NATIVE_PACKAGER_HOSTNAME` environment variable: - -Mac and Linux: - -``` -REACT_NATIVE_PACKAGER_HOSTNAME='my-custom-ip-address-or-hostname' npm start -``` - -Windows: -``` -set REACT_NATIVE_PACKAGER_HOSTNAME='my-custom-ip-address-or-hostname' -npm start -``` - -The above example would cause the development server to listen on `exp://my-custom-ip-address-or-hostname:19000`. - -## Adding Flow - -Flow is a static type checker that helps you write code with fewer bugs. Check out this [introduction to using static types in JavaScript](https://medium.com/@preethikasireddy/why-use-static-types-in-javascript-part-1-8382da1e0adb) if you are new to this concept. - -React Native works with [Flow](http://flowtype.org/) out of the box, as long as your Flow version matches the one used in the version of React Native. - -To add a local dependency to the correct Flow version to a Create React Native App project, follow these steps: - -1. Find the Flow `[version]` at the bottom of the included [.flowconfig](.flowconfig) -2. Run `npm install --save-dev flow-bin@x.y.z` (or `yarn add --dev flow-bin@x.y.z`), where `x.y.z` is the .flowconfig version number. -3. Add `"flow": "flow"` to the `scripts` section of your `package.json`. -4. Add `// @flow` to any files you want to type check (for example, to `App.js`). - -Now you can run `npm run flow` (or `yarn flow`) to check the files for type errors. -You can optionally use a [plugin for your IDE or editor](https://flow.org/en/docs/editors/) for a better integrated experience. - -To learn more about Flow, check out [its documentation](https://flow.org/). - -## Sharing and Deployment - -Create React Native App does a lot of work to make app setup and development simple and straightforward, but it's very difficult to do the same for deploying to Apple's App Store or Google's Play Store without relying on a hosted service. - -### Publishing to Expo's React Native Community - -Expo provides free hosting for the JS-only apps created by CRNA, allowing you to share your app through the Expo client app. This requires registration for an Expo account. - -Install the `exp` command-line tool, and run the publish command: - -``` -$ npm i -g exp -$ exp publish -``` - -### Building an Expo "standalone" app - -You can also use a service like [Expo's standalone builds](https://docs.expo.io/versions/latest/guides/building-standalone-apps.html) if you want to get an IPA/APK for distribution without having to build the native code yourself. - -### Ejecting from Create React Native App - -If you want to build and deploy your app yourself, you'll need to eject from CRNA and use Xcode and Android Studio. - -This is usually as simple as running `npm run eject` in your project, which will walk you through the process. Make sure to install `react-native-cli` and follow the [native code getting started guide for React Native](https://facebook.github.io/react-native/docs/getting-started.html). - -#### Should I Use ExpoKit? - -If you have made use of Expo APIs while working on your project, then those API calls will stop working if you eject to a regular React Native project. If you want to continue using those APIs, you can eject to "React Native + ExpoKit" which will still allow you to build your own native code and continue using the Expo APIs. See the [ejecting guide](https://github.com/react-community/create-react-native-app/blob/master/EJECTING.md) for more details about this option. - -## Troubleshooting - -### Networking - -If you're unable to load your app on your phone due to a network timeout or a refused connection, a good first step is to verify that your phone and computer are on the same network and that they can reach each other. Create React Native App needs access to ports 19000 and 19001 so ensure that your network and firewall settings allow access from your device to your computer on both of these ports. - -Try opening a web browser on your phone and opening the URL that the packager script prints, replacing `exp://` with `http://`. So, for example, if underneath the QR code in your terminal you see: - -``` -exp://192.168.0.1:19000 -``` - -Try opening Safari or Chrome on your phone and loading - -``` -http://192.168.0.1:19000 -``` - -and - -``` -http://192.168.0.1:19001 -``` - -If this works, but you're still unable to load your app by scanning the QR code, please open an issue on the [Create React Native App repository](https://github.com/react-community/create-react-native-app) with details about these steps and any other error messages you may have received. - -If you're not able to load the `http` URL in your phone's web browser, try using the tethering/mobile hotspot feature on your phone (beware of data usage, though), connecting your computer to that WiFi network, and restarting the packager. If you are using a VPN you may need to disable it. - -### iOS Simulator won't open - -If you're on a Mac, there are a few errors that users sometimes see when attempting to `npm run ios`: - -* "non-zero exit code: 107" -* "You may need to install Xcode" but it is already installed -* and others - -There are a few steps you may want to take to troubleshoot these kinds of errors: - -1. Make sure Xcode is installed and open it to accept the license agreement if it prompts you. You can install it from the Mac App Store. -2. Open Xcode's Preferences, the Locations tab, and make sure that the `Command Line Tools` menu option is set to something. Sometimes when the CLI tools are first installed by Homebrew this option is left blank, which can prevent Apple utilities from finding the simulator. Make sure to re-run `npm/yarn run ios` after doing so. -3. If that doesn't work, open the Simulator, and under the app menu select `Reset Contents and Settings...`. After that has finished, quit the Simulator, and re-run `npm/yarn run ios`. - -### QR Code does not scan - -If you're not able to scan the QR code, make sure your phone's camera is focusing correctly, and also make sure that the contrast on the two colors in your terminal is high enough. For example, WebStorm's default themes may [not have enough contrast](https://github.com/react-community/create-react-native-app/issues/49) for terminal QR codes to be scannable with the system barcode scanners that the Expo app uses. - -If this causes problems for you, you may want to try changing your terminal's color theme to have more contrast, or running Create React Native App from a different terminal. You can also manually enter the URL printed by the packager script in the Expo app's search bar to load it manually. diff --git a/packages/mobile/android/app/BUCK b/packages/mobile/android/app/BUCK deleted file mode 100644 index 4f1283eb9c..0000000000 --- a/packages/mobile/android/app/BUCK +++ /dev/null @@ -1,65 +0,0 @@ -# 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 -# - -lib_deps = [] - -for jarfile in glob(['libs/*.jar']): - name = 'jars__' + jarfile[jarfile.rindex('/') + 1: jarfile.rindex('.jar')] - lib_deps.append(':' + name) - prebuilt_jar( - name = name, - binary_jar = jarfile, - ) - -for aarfile in glob(['libs/*.aar']): - name = 'aars__' + aarfile[aarfile.rindex('/') + 1: aarfile.rindex('.aar')] - lib_deps.append(':' + name) - android_prebuilt_aar( - name = name, - aar = aarfile, - ) - -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.actual", -) - -android_resource( - name = "res", - package = "com.actual", - 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/packages/mobile/android/app/build.gradle b/packages/mobile/android/app/build.gradle deleted file mode 100644 index 3cf5defd8a..0000000000 --- a/packages/mobile/android/app/build.gradle +++ /dev/null @@ -1,186 +0,0 @@ -apply plugin: "com.android.application" - -import com.android.build.OutputFile - -/** - * 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 -] - -apply from: "../../node_modules/react-native/react.gradle" -apply from: "../../node_modules/@sentry/react-native/sentry.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 jscFlavor = 'org.webkit:android-jsc:+' -def enableHermes = project.ext.react.get("enableHermes", false); - -android { - ndkVersion "20.1.5948944" - compileSdkVersion rootProject.ext.compileSdkVersion - - defaultConfig { - applicationId "com.shiftreset.actual" - minSdkVersion rootProject.ext.minSdkVersion - targetSdkVersion rootProject.ext.targetSdkVersion - versionCode 38 - versionName "0.0.144" - ndk { - abiFilters "armeabi-v7a", "x86", "arm64-v8a", "x86_64" - } - } - - signingConfigs { - release { - if (project.hasProperty('ACTUAL_UPLOAD_STORE_FILE')) { - storeFile file(ACTUAL_UPLOAD_STORE_FILE) - storePassword ACTUAL_UPLOAD_STORE_PASSWORD - keyAlias ACTUAL_UPLOAD_KEY_ALIAS - keyPassword ACTUAL_UPLOAD_KEY_PASSWORD - } - } - } - - splits { - abi { - reset() - enable enableSeparateBuildPerCPUArchitecture - universalApk false // If true, also generate a universal APK - include "armeabi-v7a", "x86", "arm64-v8a", "x86_64" - } - } - - buildTypes { - debug { - manifestPlaceholders = [usesCleartextTraffic:"true"] - } - release { - manifestPlaceholders = [usesCleartextTraffic:"false"] - minifyEnabled enableProguardInReleaseBuilds - proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro" - signingConfig signingConfigs.release - } - } - - // 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) * 1000 + defaultConfig.versionCode - } - } - } -} - -dependencies { - implementation fileTree(dir: "libs", include: ["*.jar"]) - implementation "com.facebook.react:react-native:+" // From node_modules - //implementation project(':react-native-plaid-link-sdk') - //implementation 'com.plaid.link:sdk-core:0.3.2' - - 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.implementation - into 'libs' -} - -apply from: file("../../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesAppBuildGradle(project) diff --git a/packages/mobile/android/app/build_defs.bzl b/packages/mobile/android/app/build_defs.bzl deleted file mode 100644 index fff270f8d1..0000000000 --- a/packages/mobile/android/app/build_defs.bzl +++ /dev/null @@ -1,19 +0,0 @@ -"""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, - ) diff --git a/packages/mobile/android/app/proguard-rules.pro b/packages/mobile/android/app/proguard-rules.pro deleted file mode 100644 index 6e8516c8d6..0000000000 --- a/packages/mobile/android/app/proguard-rules.pro +++ /dev/null @@ -1,70 +0,0 @@ -# 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.** diff --git a/packages/mobile/android/app/src/main/AndroidManifest.xml b/packages/mobile/android/app/src/main/AndroidManifest.xml deleted file mode 100644 index a000aa092b..0000000000 --- a/packages/mobile/android/app/src/main/AndroidManifest.xml +++ /dev/null @@ -1,49 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/packages/mobile/android/app/src/main/java/com/actual/MainActivity.java b/packages/mobile/android/app/src/main/java/com/actual/MainActivity.java deleted file mode 100644 index fd7341e619..0000000000 --- a/packages/mobile/android/app/src/main/java/com/actual/MainActivity.java +++ /dev/null @@ -1,57 +0,0 @@ -package com.actual; - -import android.app.Activity; -import android.os.Bundle; -import android.os.Build; -import android.view.WindowManager; -import android.view.View; -import android.view.Window; -import android.graphics.Color; - -import com.facebook.react.ReactActivity; -import com.facebook.react.ReactActivityDelegate; -import com.facebook.react.ReactRootView; -import com.swmansion.gesturehandler.react.RNGestureHandlerEnabledRootView; - -public class MainActivity extends ReactActivity { - /** - * Returns the name of the main component registered from JavaScript. - * This is used to schedule rendering of the component. - */ - @Override - protected String getMainComponentName() { - return "actual"; - } - - @Override - protected void onCreate(Bundle savedInstanceState) { - // Make sure this is before calling super.onCreate - setTheme(R.style.AppTheme); - super.onCreate(null); - hideSystemUI(); - } - - @Override - public void onWindowFocusChanged(boolean hasFocus) { - super.onWindowFocusChanged(hasFocus); - if (hasFocus) { - hideSystemUI(); - } - } - - private void hideSystemUI() { - View decorView = getWindow().getDecorView(); - decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN); - getWindow().setStatusBarColor(Color.TRANSPARENT); - } - - @Override - protected ReactActivityDelegate createReactActivityDelegate() { - return new ReactActivityDelegate(this, getMainComponentName()) { - @Override - protected ReactRootView createRootView() { - return new RNGestureHandlerEnabledRootView(MainActivity.this); - } - }; - } -} diff --git a/packages/mobile/android/app/src/main/java/com/actual/MainApplication.java b/packages/mobile/android/app/src/main/java/com/actual/MainApplication.java deleted file mode 100644 index a16a3b1c03..0000000000 --- a/packages/mobile/android/app/src/main/java/com/actual/MainApplication.java +++ /dev/null @@ -1,72 +0,0 @@ -package com.actual; - -import android.app.Application; - -import com.facebook.react.PackageList; -import com.facebook.react.ReactApplication; -import com.facebook.react.ReactNativeHost; -import com.facebook.react.ReactPackage; -// import com.facebook.react.shell.MainReactPackage; -import com.facebook.soloader.SoLoader; - -import com.actual.StatusBarHeightPackage; -// import io.sentry.react.RNSentryPackage; -// import com.horcrux.svg.SvgPackage; -// import com.RNFetchBlob.RNFetchBlobPackage; -// import com.swmansion.reanimated.ReanimatedPackage; -// import com.swmansion.gesturehandler.react.RNGestureHandlerPackage; -// import com.janeasystems.rn_nodejs_mobile.RNNodeJsMobilePackage; -// import com.swmansion.rnscreens.RNScreensPackage; - -import java.util.Arrays; -import java.util.List; - -public class MainApplication extends Application implements ReactApplication { - - private final ReactNativeHost mReactNativeHost = new ReactNativeHost(this) { - @Override/**/ - public boolean getUseDeveloperSupport() { - return BuildConfig.DEBUG; - } - - @Override - protected List getPackages() { - @SuppressWarnings("UnnecessaryLocalVariable") - List packages = new PackageList(this).getPackages(); - packages.add(new StatusBarHeightPackage()); - return packages; - } - - // @Override/**/ - // protected List getPackages() { - // return Arrays.asList( - // new MainReactPackage(), - // new RNSentryPackage(), - // new RNFetchBlobPackage(), - // new ReanimatedPackage(), - // new RNGestureHandlerPackage(), - // new RNNodeJsMobilePackage(), - // new RNScreensPackage(), - // new SvgPackage(), - // ); - // } - - @Override - protected String getJSMainModuleName() { - return "index"; - } - }; - - @Override - public ReactNativeHost getReactNativeHost() { - return mReactNativeHost; - } - - @Override - public void onCreate() { - super.onCreate(); - SoLoader.init(this, /* native exopackage */ false); - //Plaid.create(this); - } -} - diff --git a/packages/mobile/android/app/src/main/java/com/actual/StatusBarHeight.java b/packages/mobile/android/app/src/main/java/com/actual/StatusBarHeight.java deleted file mode 100644 index d7232fb2b6..0000000000 --- a/packages/mobile/android/app/src/main/java/com/actual/StatusBarHeight.java +++ /dev/null @@ -1,51 +0,0 @@ -package com.actual; - -import android.content.res.Resources; -import android.util.DisplayMetrics; - -import com.facebook.react.bridge.NativeModule; -import com.facebook.react.bridge.ReactApplicationContext; -import com.facebook.react.bridge.ReactContext; -import com.facebook.react.bridge.ReactContextBaseJavaModule; -import com.facebook.react.bridge.ReactMethod; - -import java.util.Map; -import java.util.HashMap; - -public class StatusBarHeight extends ReactContextBaseJavaModule { - private static ReactApplicationContext reactContext; - - StatusBarHeight(ReactApplicationContext context) { - super(context); - reactContext = context; - } - - @Override - public String getName() { - return "StatusBarHeight"; - } - - @Override - public Map getConstants() { - DisplayMetrics metrics = reactContext.getResources().getDisplayMetrics(); - - int statusBarHeight = 0; - int resourceId = reactContext.getResources().getIdentifier("status_bar_height", "dimen", "android"); - if (resourceId > 0) { - int statusBarHeightPixels = reactContext.getResources().getDimensionPixelSize(resourceId); - statusBarHeight = (int) ((statusBarHeightPixels) / (metrics.densityDpi / 160f)); - } - - int navBarHeight = 0; - resourceId = reactContext.getResources().getIdentifier("navigation_bar_height", "dimen", "android"); - if (resourceId > 0) { - int navBarHeightPixels = reactContext.getResources().getDimensionPixelSize(resourceId); - navBarHeight = (int) ((navBarHeightPixels) / (metrics.densityDpi / 160f)); - } - - final Map constants = new HashMap<>(); - constants.put("statusBarHeight", statusBarHeight); - constants.put("navBarHeight", navBarHeight); - return constants; - } -} diff --git a/packages/mobile/android/app/src/main/java/com/actual/StatusBarHeightPackage.java b/packages/mobile/android/app/src/main/java/com/actual/StatusBarHeightPackage.java deleted file mode 100644 index 37d508087c..0000000000 --- a/packages/mobile/android/app/src/main/java/com/actual/StatusBarHeightPackage.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.actual; - -import com.facebook.react.ReactPackage; -import com.facebook.react.bridge.NativeModule; -import com.facebook.react.bridge.ReactApplicationContext; -import com.facebook.react.uimanager.ViewManager; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - -public class StatusBarHeightPackage implements ReactPackage { - @Override - public List createViewManagers(ReactApplicationContext reactContext) { - return Collections.emptyList(); - } - - @Override - public List createNativeModules( - ReactApplicationContext reactContext) { - List modules = new ArrayList<>(); - - modules.add(new StatusBarHeight(reactContext)); - - return modules; - } - -} diff --git a/packages/mobile/android/app/src/main/res/drawable/logo.png b/packages/mobile/android/app/src/main/res/drawable/logo.png deleted file mode 100644 index f48e5432d3..0000000000 Binary files a/packages/mobile/android/app/src/main/res/drawable/logo.png and /dev/null differ diff --git a/packages/mobile/android/app/src/main/res/drawable/splash.xml b/packages/mobile/android/app/src/main/res/drawable/splash.xml deleted file mode 100644 index ed58caca2b..0000000000 --- a/packages/mobile/android/app/src/main/res/drawable/splash.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - diff --git a/packages/mobile/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/packages/mobile/android/app/src/main/res/mipmap-hdpi/ic_launcher.png deleted file mode 100644 index f73f17577b..0000000000 Binary files a/packages/mobile/android/app/src/main/res/mipmap-hdpi/ic_launcher.png and /dev/null differ diff --git a/packages/mobile/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/packages/mobile/android/app/src/main/res/mipmap-mdpi/ic_launcher.png deleted file mode 100644 index a35f353657..0000000000 Binary files a/packages/mobile/android/app/src/main/res/mipmap-mdpi/ic_launcher.png and /dev/null differ diff --git a/packages/mobile/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/packages/mobile/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png deleted file mode 100644 index 3e746483f2..0000000000 Binary files a/packages/mobile/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png and /dev/null differ diff --git a/packages/mobile/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/packages/mobile/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png deleted file mode 100644 index 5f8e66730a..0000000000 Binary files a/packages/mobile/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png and /dev/null differ diff --git a/packages/mobile/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/packages/mobile/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png deleted file mode 100644 index 9abba585d7..0000000000 Binary files a/packages/mobile/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png and /dev/null differ diff --git a/packages/mobile/android/app/src/main/res/values/colors.xml b/packages/mobile/android/app/src/main/res/values/colors.xml deleted file mode 100644 index 0c7598e194..0000000000 --- a/packages/mobile/android/app/src/main/res/values/colors.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - #102A43 - diff --git a/packages/mobile/android/app/src/main/res/values/strings.xml b/packages/mobile/android/app/src/main/res/values/strings.xml deleted file mode 100644 index 4f696192ca..0000000000 --- a/packages/mobile/android/app/src/main/res/values/strings.xml +++ /dev/null @@ -1,3 +0,0 @@ - - Actual - diff --git a/packages/mobile/android/app/src/main/res/values/styles.xml b/packages/mobile/android/app/src/main/res/values/styles.xml deleted file mode 100644 index 0ca4e76d7c..0000000000 --- a/packages/mobile/android/app/src/main/res/values/styles.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - diff --git a/packages/mobile/android/build-release b/packages/mobile/android/build-release deleted file mode 100755 index 304c77fa16..0000000000 --- a/packages/mobile/android/build-release +++ /dev/null @@ -1,18 +0,0 @@ -#!/bin/sh -e - -( - export NODE_ENV="production"; - cd ../../loot-core/bin; - ./build-mobile --release "$@"; -) - -( - cd ..; - ../../node_modules/.bin/patch-package -) - -./gradlew clean; -# ./gradlew assembleRelease; -./gradlew bundleRelease; - -echo `pwd`/app/build/outputs/bundle/release/app-release.aab; diff --git a/packages/mobile/android/build.gradle b/packages/mobile/android/build.gradle deleted file mode 100644 index 452358352a..0000000000 --- a/packages/mobile/android/build.gradle +++ /dev/null @@ -1,39 +0,0 @@ -ext { - var = 1.8 -}// Top-level build file where you can add configuration options common to all sub-projects/modules. - -buildscript { - ext { - minSdkVersion = 21 - compileSdkVersion = 30 - targetSdkVersion = 30 - ndkVersion = "20.1.5948944" - } - repositories { - google() - mavenCentral() - } - dependencies { - classpath('com.android.tools.build:gradle:4.2.1') - - // NOTE: Do not place your application dependencies here; they belong - // in the individual module build.gradle files - } -} - -allprojects { - repositories { - mavenCentral() - mavenLocal() - maven { - // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm - url "$rootDir/../node_modules/react-native/android" - } - maven { - // Android JSC is installed from npm - url("$rootDir/../node_modules/jsc-android/dist") - } - google() - maven { url 'https://www.jitpack.io' } - } -} diff --git a/packages/mobile/android/gradle.properties b/packages/mobile/android/gradle.properties deleted file mode 100644 index 23ceb68699..0000000000 --- a/packages/mobile/android/gradle.properties +++ /dev/null @@ -1,25 +0,0 @@ -# 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.useAndroidX=true -android.enableJetifier=true - -org.gradle.jvmargs=-XX\:MaxHeapSize\=5120m -Xmx5120m - -FLIPPER_VERSION=0.93.0 \ No newline at end of file diff --git a/packages/mobile/android/gradle/wrapper/gradle-wrapper.jar b/packages/mobile/android/gradle/wrapper/gradle-wrapper.jar deleted file mode 100644 index b5166dad4d..0000000000 Binary files a/packages/mobile/android/gradle/wrapper/gradle-wrapper.jar and /dev/null differ diff --git a/packages/mobile/android/gradle/wrapper/gradle-wrapper.properties b/packages/mobile/android/gradle/wrapper/gradle-wrapper.properties deleted file mode 100644 index e695fcdb75..0000000000 --- a/packages/mobile/android/gradle/wrapper/gradle-wrapper.properties +++ /dev/null @@ -1,6 +0,0 @@ -#Tue Aug 27 16:39:33 EDT 2019 -distributionBase=GRADLE_USER_HOME -distributionPath=wrapper/dists -zipStoreBase=GRADLE_USER_HOME -zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.9-all.zip diff --git a/packages/mobile/android/gradlew b/packages/mobile/android/gradlew deleted file mode 100755 index 4f906e0c81..0000000000 --- a/packages/mobile/android/gradlew +++ /dev/null @@ -1,185 +0,0 @@ -#!/usr/bin/env sh - -# -# Copyright 2015 the original author or authors. -# -# 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 -# -# https://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. -# - -############################################################################## -## -## Gradle start up script for UN*X -## -############################################################################## - -# 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\"`/" >/dev/null -APP_HOME="`pwd -P`" -cd "$SAVED" >/dev/null - -APP_NAME="Gradle" -APP_BASE_NAME=`basename "$0"` - -# 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"' - -# 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 -nonstop=false -case "`uname`" in - CYGWIN* ) - cygwin=true - ;; - Darwin* ) - darwin=true - ;; - MINGW* ) - msys=true - ;; - NONSTOP* ) - nonstop=true - ;; -esac - -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" -a "$nonstop" = "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 or MSYS, switch paths to Windows format before running java -if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then - APP_HOME=`cygpath --path --mixed "$APP_HOME"` - CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` - - JAVACMD=`cygpath --unix "$JAVACMD"` - - # 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=`expr $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 - -# Escape application args -save () { - for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done - echo " " -} -APP_ARGS=`save "$@"` - -# Collect all arguments for the java command, following the shell quoting and substitution rules -eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" - -exec "$JAVACMD" "$@" diff --git a/packages/mobile/android/gradlew.bat b/packages/mobile/android/gradlew.bat deleted file mode 100644 index ac1b06f938..0000000000 --- a/packages/mobile/android/gradlew.bat +++ /dev/null @@ -1,89 +0,0 @@ -@rem -@rem Copyright 2015 the original author or authors. -@rem -@rem Licensed under the Apache License, Version 2.0 (the "License"); -@rem you may not use this file except in compliance with the License. -@rem You may obtain a copy of the License at -@rem -@rem https://www.apache.org/licenses/LICENSE-2.0 -@rem -@rem Unless required by applicable law or agreed to in writing, software -@rem distributed under the License is distributed on an "AS IS" BASIS, -@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -@rem See the License for the specific language governing permissions and -@rem limitations under the License. -@rem - -@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 - -set DIRNAME=%~dp0 -if "%DIRNAME%" == "" set DIRNAME=. -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Resolve any "." and ".." in APP_HOME to make it shorter. -for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi - -@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" - -@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 execute - -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 execute - -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 - -: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 %* - -: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/packages/mobile/android/sentry.properties b/packages/mobile/android/sentry.properties deleted file mode 100644 index f65a697dde..0000000000 --- a/packages/mobile/android/sentry.properties +++ /dev/null @@ -1,5 +0,0 @@ -defaults.url=https://sentry.io/ -defaults.org=shift-reset-llc -defaults.project=actual-mobile -auth.token=89045e379253474982ed91b6a55d285029f35b2055ea44f784e6ced473e8d639 -cli.executable=node_modules/@sentry/cli/bin/sentry-cli diff --git a/packages/mobile/android/settings.gradle b/packages/mobile/android/settings.gradle deleted file mode 100644 index 125913b423..0000000000 --- a/packages/mobile/android/settings.gradle +++ /dev/null @@ -1,12 +0,0 @@ -rootProject.name = 'actual' -include ':react-native-purchases' -project(':react-native-purchases').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-purchases/android') - -include ':@sentry_react-native' -project(':@sentry_react-native').projectDir = new File(rootProject.projectDir, '../node_modules/@sentry/react-native/android') - -apply from: file("../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); -applyNativeModulesSettingsGradle(settings); - - -include ':app'; \ No newline at end of file diff --git a/packages/mobile/assets/GraphBackground@2x.png b/packages/mobile/assets/GraphBackground@2x.png deleted file mode 100644 index 531e48ce31..0000000000 Binary files a/packages/mobile/assets/GraphBackground@2x.png and /dev/null differ diff --git a/packages/mobile/assets/feature-account@2x.png b/packages/mobile/assets/feature-account@2x.png deleted file mode 100644 index 656646f789..0000000000 Binary files a/packages/mobile/assets/feature-account@2x.png and /dev/null differ diff --git a/packages/mobile/assets/feature-budget@2x.png b/packages/mobile/assets/feature-budget@2x.png deleted file mode 100644 index 344b52437e..0000000000 Binary files a/packages/mobile/assets/feature-budget@2x.png and /dev/null differ diff --git a/packages/mobile/assets/feature-transaction@2x.png b/packages/mobile/assets/feature-transaction@2x.png deleted file mode 100644 index d7b8da8d0f..0000000000 Binary files a/packages/mobile/assets/feature-transaction@2x.png and /dev/null differ diff --git a/packages/mobile/assets/gradient-bg.png b/packages/mobile/assets/gradient-bg.png deleted file mode 100644 index 0cdf57c340..0000000000 Binary files a/packages/mobile/assets/gradient-bg.png and /dev/null differ diff --git a/packages/mobile/assets/gradient-bg@2x.png b/packages/mobile/assets/gradient-bg@2x.png deleted file mode 100644 index 0cdf57c340..0000000000 Binary files a/packages/mobile/assets/gradient-bg@2x.png and /dev/null differ diff --git a/packages/mobile/assets/header.png b/packages/mobile/assets/header.png deleted file mode 100644 index 9d86a5930f..0000000000 Binary files a/packages/mobile/assets/header.png and /dev/null differ diff --git a/packages/mobile/assets/icon@2x.png b/packages/mobile/assets/icon@2x.png deleted file mode 100644 index 2cb3837757..0000000000 Binary files a/packages/mobile/assets/icon@2x.png and /dev/null differ diff --git a/packages/mobile/assets/intro-illustration.png b/packages/mobile/assets/intro-illustration.png deleted file mode 100644 index 5d28e57b65..0000000000 Binary files a/packages/mobile/assets/intro-illustration.png and /dev/null differ diff --git a/packages/mobile/assets/logo@2x.png b/packages/mobile/assets/logo@2x.png deleted file mode 100644 index f48e5432d3..0000000000 Binary files a/packages/mobile/assets/logo@2x.png and /dev/null differ diff --git a/packages/mobile/client-global-events.js b/packages/mobile/client-global-events.js deleted file mode 100644 index ee674409cb..0000000000 --- a/packages/mobile/client-global-events.js +++ /dev/null @@ -1,64 +0,0 @@ -import { listen } from 'loot-core/src/platform/client/fetch'; -import * as sharedListeners from 'loot-core/src/client/shared-listeners'; -import { invalidatePurchaserInfoCache } from './src/util/iap'; - -export function handleGlobalEvents(actions, store) { - // listen('server-error', info => { - // actions.addGenericErrorNotification(); - // }); - - listen('update-loading-status', status => { - switch (status) { - case 'updating': - actions.updateStatusText('Updating...'); - break; - default: - } - }); - - listen('sync-event', async ({ type }) => { - if (type === 'unauthorized') { - // This means their account expired, so invalidate the purchaser - // cache to make sure it gets the changes - await invalidatePurchaserInfoCache(); - - let userData = await actions.getUserData(); - - let msg; - if (userData) { - if (userData.status === 'trial_ended') { - msg = - 'Your trial has ended. Any changes will not be saved until you subscribe.'; - } else if (userData.status === 'cancelled') { - msg = - 'Your subscription has been cancelled. Any changes will not be saved until you subscribe again.'; - } else { - msg = - 'We had problems billing your account. Any changes will not be saved ' + - 'until this is fixed.'; - } - } else { - msg = - 'You are not logged in. Any changes will not be saved. Close the budget in settings and log in.'; - } - - actions.addNotification({ - type: 'warning', - message: msg, - sticky: true, - id: 'trial-ended', - button: userData && { - title: 'Go to Settings', - // There is no spoon. Settings modal doesn't exist, this is - // a hack because right now the only way we can navigate - // outside of react is to use the modal listener (see ModalListener.js) - action: async () => { - actions.pushModal('settings'); - } - } - }); - } - }); - - sharedListeners.listenForSyncEvent(actions, store); -} diff --git a/packages/mobile/client.js b/packages/mobile/client.js deleted file mode 100644 index c1e73e6326..0000000000 --- a/packages/mobile/client.js +++ /dev/null @@ -1,60 +0,0 @@ -import React from 'react'; -import { Provider } from 'react-redux'; -import { - createStore, - combineReducers, - applyMiddleware, - bindActionCreators -} from 'redux'; -import thunk from 'redux-thunk'; -import reducers from 'loot-core/src/client/reducers'; -import constants from 'loot-core/src/client/constants'; -import * as actions from 'loot-core/src/client/actions'; -import { initialState as initialAppState } from 'loot-core/src/client/reducers/app'; -import { handleGlobalEvents } from './client-global-events'; -import App from './src/components/App'; - -function log() { - return next => action => { - console.log(action); - return next(action); - }; -} - -const appReducer = combineReducers(reducers); -function rootReducer(state, action) { - if (action.type === constants.CLOSE_BUDGET) { - // Reset the state and only keep around things intentionally. This - // blows away everything else - state = { - budgets: state.budgets, - user: state.user, - prefs: { local: null, global: state.prefs.global }, - app: { - ...initialAppState, - managerHasInitialized: state.app.managerHasInitialized, - loadingText: state.app.loadingText - } - }; - } - - return appReducer(state, action); -} - -const store = createStore( - rootReducer, - undefined, - applyMiddleware(thunk /* log */) -); -const boundActions = bindActionCreators(actions, store.dispatch); - -// Listen for global events from the server or main process -handleGlobalEvents(boundActions, store); - -export default function AppRoot() { - return ( - - - - ); -} \ No newline at end of file diff --git a/packages/mobile/diff.patch b/packages/mobile/diff.patch deleted file mode 100644 index 5da746f431..0000000000 --- a/packages/mobile/diff.patch +++ /dev/null @@ -1,22 +0,0 @@ ---- RCTInputAccessoryViewContent.m 2018-08-14 13:49:55.000000000 -0400 -+++ node_modules/react-native/Libraries/Text/TextInput/RCTInputAccessoryViewContent.m 2018-08-14 13:49:56.000000000 -0400 -@@ -25,19 +25,6 @@ - - - (void)didMoveToSuperview - { -- --#if defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 110000 /* __IPHONE_11_0 */ -- // Avoid the home pill (in portrait mode) -- // TODO: Support rotation, anchor to left and right without breaking frame x coordinate (T27974328). -- if (@available(iOS 11.0, *)) { -- if (self.window) { -- [_safeAreaContainer.bottomAnchor -- constraintLessThanOrEqualToSystemSpacingBelowAnchor:self.window.safeAreaLayoutGuide.bottomAnchor -- multiplier:1.0f].active = YES; -- } -- } --#endif -- - } - - - (void)setFrame:(CGRect)frame diff --git a/packages/mobile/index.js b/packages/mobile/index.js deleted file mode 100644 index 3568794905..0000000000 --- a/packages/mobile/index.js +++ /dev/null @@ -1,81 +0,0 @@ -// This fixes a problem with a deprectecated `cancelTouches` property. -// Should be able to remove this at some point. -import 'react-native-gesture-handler'; - -import './sentry'; -import { AppRegistry } from 'react-native'; -import AppRoot from './client'; -import VersionNumber from 'react-native-version-number'; -import * as clientFetch from 'loot-core/src/platform/client/fetch'; -import nodejs from 'nodejs-mobile-react-native'; -import RNFetchBlob from 'rn-fetch-blob'; - -console.disableYellowBox = true; - -let serverProxy = { - onmessage: null, - postMessage: msg => { - nodejs.channel.send(msg); - } -}; - -clientFetch.init(serverProxy); - -nodejs.start('main.js'); -nodejs.channel.addListener( - 'message', - msg => { - msg = JSON.parse(msg); - - if (msg.type === 'internal') { - switch (msg.subtype) { - case 'captureEvent': - let event = msg.event; - global.SentryClient.captureEvent(event); - break; - case 'captureBreadcrumb': - global.SentryClient.addBreadcrumb(msg.breadcrumb); - break; - default: - } - - return; - } else { - serverProxy.onmessage(msg); - } - }, - this -); - -nodejs.channel.send( - JSON.stringify({ - type: 'init', - dataDir: RNFetchBlob.fs.dirs.DocumentDir, - documentDir: RNFetchBlob.fs.dirs.DocumentDir, - // eslint-disable-next-line - dev: __DEV__, - version: VersionNumber.appVersion - }) -); - -// See promise error stack traces by re-throwing as normal errors -const tracking = require('promise/setimmediate/rejection-tracking'); // eslint-disable-line import/no-extraneous-dependencies - -tracking.enable({ - allRejections: true, - onUnhandled: (id, err) => { - throw err; - }, - onHandled: () => {} -}); - -const defaultErrorHandler = global.ErrorUtils.getGlobalHandler(); -const myErrorHandler = (e, isFatal) => { - // Suppress crashing the app - // TODO: This shouldn't be silent, instead should show a fatal error UI - // Should add this handler in App.js and set React state - defaultErrorHandler(e, false); -}; -global.ErrorUtils.setGlobalHandler(myErrorHandler); - -AppRegistry.registerComponent('actual', () => AppRoot); diff --git a/packages/mobile/ios/AppIcon.appiconset/App Store-1024.png b/packages/mobile/ios/AppIcon.appiconset/App Store-1024.png deleted file mode 100644 index d26b7b0a70..0000000000 Binary files a/packages/mobile/ios/AppIcon.appiconset/App Store-1024.png and /dev/null differ diff --git a/packages/mobile/ios/AppIcon.appiconset/App Store-20.png b/packages/mobile/ios/AppIcon.appiconset/App Store-20.png deleted file mode 100644 index f313f02171..0000000000 Binary files a/packages/mobile/ios/AppIcon.appiconset/App Store-20.png and /dev/null differ diff --git a/packages/mobile/ios/AppIcon.appiconset/App Store-20@2x.png b/packages/mobile/ios/AppIcon.appiconset/App Store-20@2x.png deleted file mode 100644 index bdf66a7770..0000000000 Binary files a/packages/mobile/ios/AppIcon.appiconset/App Store-20@2x.png and /dev/null differ diff --git a/packages/mobile/ios/AppIcon.appiconset/App Store-20@3x.png b/packages/mobile/ios/AppIcon.appiconset/App Store-20@3x.png deleted file mode 100644 index ca414e6814..0000000000 Binary files a/packages/mobile/ios/AppIcon.appiconset/App Store-20@3x.png and /dev/null differ diff --git a/packages/mobile/ios/AppIcon.appiconset/App Store-29.png b/packages/mobile/ios/AppIcon.appiconset/App Store-29.png deleted file mode 100644 index cfb703bd04..0000000000 Binary files a/packages/mobile/ios/AppIcon.appiconset/App Store-29.png and /dev/null differ diff --git a/packages/mobile/ios/AppIcon.appiconset/App Store-29@2x.png b/packages/mobile/ios/AppIcon.appiconset/App Store-29@2x.png deleted file mode 100644 index 49ab2c419f..0000000000 Binary files a/packages/mobile/ios/AppIcon.appiconset/App Store-29@2x.png and /dev/null differ diff --git a/packages/mobile/ios/AppIcon.appiconset/App Store-29@3x.png b/packages/mobile/ios/AppIcon.appiconset/App Store-29@3x.png deleted file mode 100644 index 6b5d2d2198..0000000000 Binary files a/packages/mobile/ios/AppIcon.appiconset/App Store-29@3x.png and /dev/null differ diff --git a/packages/mobile/ios/AppIcon.appiconset/App Store-40.png b/packages/mobile/ios/AppIcon.appiconset/App Store-40.png deleted file mode 100644 index bdf66a7770..0000000000 Binary files a/packages/mobile/ios/AppIcon.appiconset/App Store-40.png and /dev/null differ diff --git a/packages/mobile/ios/AppIcon.appiconset/App Store-40@2x.png b/packages/mobile/ios/AppIcon.appiconset/App Store-40@2x.png deleted file mode 100644 index 87330dadda..0000000000 Binary files a/packages/mobile/ios/AppIcon.appiconset/App Store-40@2x.png and /dev/null differ diff --git a/packages/mobile/ios/AppIcon.appiconset/App Store-40@3x.png b/packages/mobile/ios/AppIcon.appiconset/App Store-40@3x.png deleted file mode 100644 index 1b2f6a16d9..0000000000 Binary files a/packages/mobile/ios/AppIcon.appiconset/App Store-40@3x.png and /dev/null differ diff --git a/packages/mobile/ios/AppIcon.appiconset/App Store-60@2x.png b/packages/mobile/ios/AppIcon.appiconset/App Store-60@2x.png deleted file mode 100644 index 1b2f6a16d9..0000000000 Binary files a/packages/mobile/ios/AppIcon.appiconset/App Store-60@2x.png and /dev/null differ diff --git a/packages/mobile/ios/AppIcon.appiconset/App Store-60@3x.png b/packages/mobile/ios/AppIcon.appiconset/App Store-60@3x.png deleted file mode 100644 index 36a22ea008..0000000000 Binary files a/packages/mobile/ios/AppIcon.appiconset/App Store-60@3x.png and /dev/null differ diff --git a/packages/mobile/ios/AppIcon.appiconset/App Store-76.png b/packages/mobile/ios/AppIcon.appiconset/App Store-76.png deleted file mode 100644 index ec2495a574..0000000000 Binary files a/packages/mobile/ios/AppIcon.appiconset/App Store-76.png and /dev/null differ diff --git a/packages/mobile/ios/AppIcon.appiconset/App Store-76@2x.png b/packages/mobile/ios/AppIcon.appiconset/App Store-76@2x.png deleted file mode 100644 index 82524fb199..0000000000 Binary files a/packages/mobile/ios/AppIcon.appiconset/App Store-76@2x.png and /dev/null differ diff --git a/packages/mobile/ios/AppIcon.appiconset/App Store-83.5@2x.png b/packages/mobile/ios/AppIcon.appiconset/App Store-83.5@2x.png deleted file mode 100644 index 69ac337945..0000000000 Binary files a/packages/mobile/ios/AppIcon.appiconset/App Store-83.5@2x.png and /dev/null differ diff --git a/packages/mobile/ios/AppIcon.appiconset/Contents.json b/packages/mobile/ios/AppIcon.appiconset/Contents.json deleted file mode 100644 index 0c62c4455c..0000000000 --- a/packages/mobile/ios/AppIcon.appiconset/Contents.json +++ /dev/null @@ -1,116 +0,0 @@ -{ - "images" : [ - { - "size" : "20x20", - "idiom": "iphone", - "filename" : "App Store-20@2x.png", - "scale": "2x" - }, - { - "size" : "20x20", - "idiom": "iphone", - "filename" : "App Store-20@3x.png", - "scale": "3x" - }, - { - "size" : "20x20", - "idiom": "ipad", - "filename" : "App Store-20.png", - "scale": "1x" - }, - { - "size" : "20x20", - "idiom": "ipad", - "filename" : "App Store-20@2x.png", - "scale": "2x" - }, - { - "size" : "29x29", - "idiom" : "iphone", - "filename" : "App Store-29@2x.png", - "scale" : "2x" - }, - { - "size" : "29x29", - "idiom" : "iphone", - "filename" : "App Store-29@3x.png", - "scale" : "3x" - }, - { - "size" : "40x40", - "idiom" : "iphone", - "filename" : "App Store-40@2x.png", - "scale" : "2x" - }, - { - "size" : "40x40", - "idiom" : "iphone", - "filename" : "App Store-40@3x.png", - "scale" : "3x" - }, - { - "size" : "60x60", - "idiom" : "iphone", - "filename" : "App Store-60@2x.png", - "scale" : "2x" - }, - { - "size" : "60x60", - "idiom" : "iphone", - "filename" : "App Store-60@3x.png", - "scale" : "3x" - }, - { - "size" : "29x29", - "idiom" : "ipad", - "filename" : "App Store-29.png", - "scale" : "1x" - }, - { - "size" : "29x29", - "idiom" : "ipad", - "filename" : "App Store-29@2x.png", - "scale" : "2x" - }, - { - "size" : "40x40", - "idiom" : "ipad", - "filename" : "App Store-40.png", - "scale" : "1x" - }, - { - "size" : "40x40", - "idiom" : "ipad", - "filename" : "App Store-40@2x.png", - "scale" : "2x" - }, - { - "size" : "76x76", - "idiom" : "ipad", - "filename" : "App Store-76.png", - "scale" : "1x" - }, - { - "size" : "76x76", - "idiom" : "ipad", - "filename" : "App Store-76@2x.png", - "scale" : "2x" - }, - { - "size" : "83.5x83.5", - "idiom" : "ipad", - "filename" : "App Store-83.5@2x.png", - "scale" : "2x" - }, - { - "size" : "1024x1024", - "idiom" : "ios-marketing", - "filename" : "App Store-1024.png", - "scale" : "1x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} diff --git a/packages/mobile/ios/Podfile b/packages/mobile/ios/Podfile deleted file mode 100644 index 7a71ba7836..0000000000 --- a/packages/mobile/ios/Podfile +++ /dev/null @@ -1,7 +0,0 @@ -require_relative '../node_modules/react-native/scripts/react_native_pods' -require_relative '../node_modules/@react-native-community/cli-platform-ios/native_modules' -platform :ios, '11.0' -target 'actual' do - config = use_native_modules! - use_react_native!(:path => config["reactNativePath"]) -end diff --git a/packages/mobile/ios/Podfile.lock b/packages/mobile/ios/Podfile.lock deleted file mode 100644 index 3eb47d5860..0000000000 --- a/packages/mobile/ios/Podfile.lock +++ /dev/null @@ -1,516 +0,0 @@ -PODS: - - boost-for-react-native (1.63.0) - - DoubleConversion (1.1.6) - - FBLazyVector (0.65.1) - - FBReactNativeSpec (0.65.1): - - RCT-Folly (= 2021.04.26.00) - - RCTRequired (= 0.65.1) - - RCTTypeSafety (= 0.65.1) - - React-Core (= 0.65.1) - - React-jsi (= 0.65.1) - - ReactCommon/turbomodule/core (= 0.65.1) - - fmt (6.2.1) - - glog (0.3.5) - - nodejs-mobile-react-native (0.6.2): - - React - - Purchases (3.12.3): - - PurchasesCoreSwift (= 3.12.3) - - PurchasesCoreSwift (3.12.3) - - PurchasesHybridCommon (1.9.1): - - Purchases (= 3.12.3) - - RCT-Folly (2021.04.26.00): - - boost-for-react-native - - DoubleConversion - - fmt (~> 6.2.1) - - glog - - RCT-Folly/Default (= 2021.04.26.00) - - RCT-Folly/Default (2021.04.26.00): - - boost-for-react-native - - DoubleConversion - - fmt (~> 6.2.1) - - glog - - RCTRequired (0.65.1) - - RCTTypeSafety (0.65.1): - - FBLazyVector (= 0.65.1) - - RCT-Folly (= 2021.04.26.00) - - RCTRequired (= 0.65.1) - - React-Core (= 0.65.1) - - React (0.65.1): - - React-Core (= 0.65.1) - - React-Core/DevSupport (= 0.65.1) - - React-Core/RCTWebSocket (= 0.65.1) - - React-RCTActionSheet (= 0.65.1) - - React-RCTAnimation (= 0.65.1) - - React-RCTBlob (= 0.65.1) - - React-RCTImage (= 0.65.1) - - React-RCTLinking (= 0.65.1) - - React-RCTNetwork (= 0.65.1) - - React-RCTSettings (= 0.65.1) - - React-RCTText (= 0.65.1) - - React-RCTVibration (= 0.65.1) - - React-callinvoker (0.65.1) - - React-Core (0.65.1): - - glog - - RCT-Folly (= 2021.04.26.00) - - React-Core/Default (= 0.65.1) - - React-cxxreact (= 0.65.1) - - React-jsi (= 0.65.1) - - React-jsiexecutor (= 0.65.1) - - React-perflogger (= 0.65.1) - - Yoga - - React-Core/CoreModulesHeaders (0.65.1): - - glog - - RCT-Folly (= 2021.04.26.00) - - React-Core/Default - - React-cxxreact (= 0.65.1) - - React-jsi (= 0.65.1) - - React-jsiexecutor (= 0.65.1) - - React-perflogger (= 0.65.1) - - Yoga - - React-Core/Default (0.65.1): - - glog - - RCT-Folly (= 2021.04.26.00) - - React-cxxreact (= 0.65.1) - - React-jsi (= 0.65.1) - - React-jsiexecutor (= 0.65.1) - - React-perflogger (= 0.65.1) - - Yoga - - React-Core/DevSupport (0.65.1): - - glog - - RCT-Folly (= 2021.04.26.00) - - React-Core/Default (= 0.65.1) - - React-Core/RCTWebSocket (= 0.65.1) - - React-cxxreact (= 0.65.1) - - React-jsi (= 0.65.1) - - React-jsiexecutor (= 0.65.1) - - React-jsinspector (= 0.65.1) - - React-perflogger (= 0.65.1) - - Yoga - - React-Core/RCTActionSheetHeaders (0.65.1): - - glog - - RCT-Folly (= 2021.04.26.00) - - React-Core/Default - - React-cxxreact (= 0.65.1) - - React-jsi (= 0.65.1) - - React-jsiexecutor (= 0.65.1) - - React-perflogger (= 0.65.1) - - Yoga - - React-Core/RCTAnimationHeaders (0.65.1): - - glog - - RCT-Folly (= 2021.04.26.00) - - React-Core/Default - - React-cxxreact (= 0.65.1) - - React-jsi (= 0.65.1) - - React-jsiexecutor (= 0.65.1) - - React-perflogger (= 0.65.1) - - Yoga - - React-Core/RCTBlobHeaders (0.65.1): - - glog - - RCT-Folly (= 2021.04.26.00) - - React-Core/Default - - React-cxxreact (= 0.65.1) - - React-jsi (= 0.65.1) - - React-jsiexecutor (= 0.65.1) - - React-perflogger (= 0.65.1) - - Yoga - - React-Core/RCTImageHeaders (0.65.1): - - glog - - RCT-Folly (= 2021.04.26.00) - - React-Core/Default - - React-cxxreact (= 0.65.1) - - React-jsi (= 0.65.1) - - React-jsiexecutor (= 0.65.1) - - React-perflogger (= 0.65.1) - - Yoga - - React-Core/RCTLinkingHeaders (0.65.1): - - glog - - RCT-Folly (= 2021.04.26.00) - - React-Core/Default - - React-cxxreact (= 0.65.1) - - React-jsi (= 0.65.1) - - React-jsiexecutor (= 0.65.1) - - React-perflogger (= 0.65.1) - - Yoga - - React-Core/RCTNetworkHeaders (0.65.1): - - glog - - RCT-Folly (= 2021.04.26.00) - - React-Core/Default - - React-cxxreact (= 0.65.1) - - React-jsi (= 0.65.1) - - React-jsiexecutor (= 0.65.1) - - React-perflogger (= 0.65.1) - - Yoga - - React-Core/RCTSettingsHeaders (0.65.1): - - glog - - RCT-Folly (= 2021.04.26.00) - - React-Core/Default - - React-cxxreact (= 0.65.1) - - React-jsi (= 0.65.1) - - React-jsiexecutor (= 0.65.1) - - React-perflogger (= 0.65.1) - - Yoga - - React-Core/RCTTextHeaders (0.65.1): - - glog - - RCT-Folly (= 2021.04.26.00) - - React-Core/Default - - React-cxxreact (= 0.65.1) - - React-jsi (= 0.65.1) - - React-jsiexecutor (= 0.65.1) - - React-perflogger (= 0.65.1) - - Yoga - - React-Core/RCTVibrationHeaders (0.65.1): - - glog - - RCT-Folly (= 2021.04.26.00) - - React-Core/Default - - React-cxxreact (= 0.65.1) - - React-jsi (= 0.65.1) - - React-jsiexecutor (= 0.65.1) - - React-perflogger (= 0.65.1) - - Yoga - - React-Core/RCTWebSocket (0.65.1): - - glog - - RCT-Folly (= 2021.04.26.00) - - React-Core/Default (= 0.65.1) - - React-cxxreact (= 0.65.1) - - React-jsi (= 0.65.1) - - React-jsiexecutor (= 0.65.1) - - React-perflogger (= 0.65.1) - - Yoga - - React-CoreModules (0.65.1): - - FBReactNativeSpec (= 0.65.1) - - RCT-Folly (= 2021.04.26.00) - - RCTTypeSafety (= 0.65.1) - - React-Core/CoreModulesHeaders (= 0.65.1) - - React-jsi (= 0.65.1) - - React-RCTImage (= 0.65.1) - - ReactCommon/turbomodule/core (= 0.65.1) - - React-cxxreact (0.65.1): - - boost-for-react-native (= 1.63.0) - - DoubleConversion - - glog - - RCT-Folly (= 2021.04.26.00) - - React-callinvoker (= 0.65.1) - - React-jsi (= 0.65.1) - - React-jsinspector (= 0.65.1) - - React-perflogger (= 0.65.1) - - React-runtimeexecutor (= 0.65.1) - - React-jsi (0.65.1): - - boost-for-react-native (= 1.63.0) - - DoubleConversion - - glog - - RCT-Folly (= 2021.04.26.00) - - React-jsi/Default (= 0.65.1) - - React-jsi/Default (0.65.1): - - boost-for-react-native (= 1.63.0) - - DoubleConversion - - glog - - RCT-Folly (= 2021.04.26.00) - - React-jsiexecutor (0.65.1): - - DoubleConversion - - glog - - RCT-Folly (= 2021.04.26.00) - - React-cxxreact (= 0.65.1) - - React-jsi (= 0.65.1) - - React-perflogger (= 0.65.1) - - React-jsinspector (0.65.1) - - react-native-safe-area-context (3.3.2): - - React-Core - - react-native-version-number (0.3.6): - - React - - React-perflogger (0.65.1) - - React-RCTActionSheet (0.65.1): - - React-Core/RCTActionSheetHeaders (= 0.65.1) - - React-RCTAnimation (0.65.1): - - FBReactNativeSpec (= 0.65.1) - - RCT-Folly (= 2021.04.26.00) - - RCTTypeSafety (= 0.65.1) - - React-Core/RCTAnimationHeaders (= 0.65.1) - - React-jsi (= 0.65.1) - - ReactCommon/turbomodule/core (= 0.65.1) - - React-RCTBlob (0.65.1): - - FBReactNativeSpec (= 0.65.1) - - RCT-Folly (= 2021.04.26.00) - - React-Core/RCTBlobHeaders (= 0.65.1) - - React-Core/RCTWebSocket (= 0.65.1) - - React-jsi (= 0.65.1) - - React-RCTNetwork (= 0.65.1) - - ReactCommon/turbomodule/core (= 0.65.1) - - React-RCTImage (0.65.1): - - FBReactNativeSpec (= 0.65.1) - - RCT-Folly (= 2021.04.26.00) - - RCTTypeSafety (= 0.65.1) - - React-Core/RCTImageHeaders (= 0.65.1) - - React-jsi (= 0.65.1) - - React-RCTNetwork (= 0.65.1) - - ReactCommon/turbomodule/core (= 0.65.1) - - React-RCTLinking (0.65.1): - - FBReactNativeSpec (= 0.65.1) - - React-Core/RCTLinkingHeaders (= 0.65.1) - - React-jsi (= 0.65.1) - - ReactCommon/turbomodule/core (= 0.65.1) - - React-RCTNetwork (0.65.1): - - FBReactNativeSpec (= 0.65.1) - - RCT-Folly (= 2021.04.26.00) - - RCTTypeSafety (= 0.65.1) - - React-Core/RCTNetworkHeaders (= 0.65.1) - - React-jsi (= 0.65.1) - - ReactCommon/turbomodule/core (= 0.65.1) - - React-RCTSettings (0.65.1): - - FBReactNativeSpec (= 0.65.1) - - RCT-Folly (= 2021.04.26.00) - - RCTTypeSafety (= 0.65.1) - - React-Core/RCTSettingsHeaders (= 0.65.1) - - React-jsi (= 0.65.1) - - ReactCommon/turbomodule/core (= 0.65.1) - - React-RCTText (0.65.1): - - React-Core/RCTTextHeaders (= 0.65.1) - - React-RCTVibration (0.65.1): - - FBReactNativeSpec (= 0.65.1) - - RCT-Folly (= 2021.04.26.00) - - React-Core/RCTVibrationHeaders (= 0.65.1) - - React-jsi (= 0.65.1) - - ReactCommon/turbomodule/core (= 0.65.1) - - React-runtimeexecutor (0.65.1): - - React-jsi (= 0.65.1) - - ReactCommon/turbomodule/core (0.65.1): - - DoubleConversion - - glog - - RCT-Folly (= 2021.04.26.00) - - React-callinvoker (= 0.65.1) - - React-Core (= 0.65.1) - - React-cxxreact (= 0.65.1) - - React-jsi (= 0.65.1) - - React-perflogger (= 0.65.1) - - rn-fetch-blob (0.11.2): - - React-Core - - RNCMaskedView (0.1.0): - - React - - RNGestureHandler (1.10.3): - - React-Core - - RNPurchases (4.3.1): - - PurchasesHybridCommon (= 1.9.1) - - React-Core - - RNReanimated (2.2.2): - - DoubleConversion - - FBLazyVector - - FBReactNativeSpec - - glog - - RCT-Folly - - RCTRequired - - RCTTypeSafety - - React - - React-callinvoker - - React-Core - - React-Core/DevSupport - - React-Core/RCTWebSocket - - React-CoreModules - - React-cxxreact - - React-jsi - - React-jsiexecutor - - React-jsinspector - - React-RCTActionSheet - - React-RCTAnimation - - React-RCTBlob - - React-RCTImage - - React-RCTLinking - - React-RCTNetwork - - React-RCTSettings - - React-RCTText - - React-RCTVibration - - ReactCommon/turbomodule/core - - Yoga - - RNScreens (3.7.2): - - React-Core - - React-RCTImage - - RNSentry (3.0.2): - - React-Core - - Sentry (= 7.2.6) - - RNSVG (10.1.0): - - React - - Sentry (7.2.6): - - Sentry/Core (= 7.2.6) - - Sentry/Core (7.2.6) - - Yoga (1.14.0) - -DEPENDENCIES: - - DoubleConversion (from `../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec`) - - FBLazyVector (from `../node_modules/react-native/Libraries/FBLazyVector`) - - FBReactNativeSpec (from `../node_modules/react-native/React/FBReactNativeSpec`) - - glog (from `../node_modules/react-native/third-party-podspecs/glog.podspec`) - - nodejs-mobile-react-native (from `../node_modules/nodejs-mobile-react-native`) - - RCT-Folly (from `../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec`) - - RCTRequired (from `../node_modules/react-native/Libraries/RCTRequired`) - - RCTTypeSafety (from `../node_modules/react-native/Libraries/TypeSafety`) - - React (from `../node_modules/react-native/`) - - React-callinvoker (from `../node_modules/react-native/ReactCommon/callinvoker`) - - 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-safe-area-context (from `../node_modules/react-native-safe-area-context`) - - react-native-version-number (from `../node_modules/react-native-version-number`) - - React-perflogger (from `../node_modules/react-native/ReactCommon/reactperflogger`) - - 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`) - - React-runtimeexecutor (from `../node_modules/react-native/ReactCommon/runtimeexecutor`) - - ReactCommon/turbomodule/core (from `../node_modules/react-native/ReactCommon`) - - rn-fetch-blob (from `../node_modules/rn-fetch-blob`) - - "RNCMaskedView (from `../node_modules/@react-native-community/masked-view`)" - - RNGestureHandler (from `../node_modules/react-native-gesture-handler`) - - RNPurchases (from `../node_modules/react-native-purchases`) - - RNReanimated (from `../node_modules/react-native-reanimated`) - - RNScreens (from `../node_modules/react-native-screens`) - - "RNSentry (from `../node_modules/@sentry/react-native`)" - - RNSVG (from `../node_modules/react-native-svg`) - - Yoga (from `../node_modules/react-native/ReactCommon/yoga`) - -SPEC REPOS: - trunk: - - boost-for-react-native - - fmt - - Purchases - - PurchasesCoreSwift - - PurchasesHybridCommon - - Sentry - -EXTERNAL SOURCES: - 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/React/FBReactNativeSpec" - glog: - :podspec: "../node_modules/react-native/third-party-podspecs/glog.podspec" - nodejs-mobile-react-native: - :path: "../node_modules/nodejs-mobile-react-native" - RCT-Folly: - :podspec: "../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec" - RCTRequired: - :path: "../node_modules/react-native/Libraries/RCTRequired" - RCTTypeSafety: - :path: "../node_modules/react-native/Libraries/TypeSafety" - React: - :path: "../node_modules/react-native/" - React-callinvoker: - :path: "../node_modules/react-native/ReactCommon/callinvoker" - 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-safe-area-context: - :path: "../node_modules/react-native-safe-area-context" - react-native-version-number: - :path: "../node_modules/react-native-version-number" - React-perflogger: - :path: "../node_modules/react-native/ReactCommon/reactperflogger" - 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" - React-runtimeexecutor: - :path: "../node_modules/react-native/ReactCommon/runtimeexecutor" - ReactCommon: - :path: "../node_modules/react-native/ReactCommon" - rn-fetch-blob: - :path: "../node_modules/rn-fetch-blob" - RNCMaskedView: - :path: "../node_modules/@react-native-community/masked-view" - RNGestureHandler: - :path: "../node_modules/react-native-gesture-handler" - RNPurchases: - :path: "../node_modules/react-native-purchases" - RNReanimated: - :path: "../node_modules/react-native-reanimated" - RNScreens: - :path: "../node_modules/react-native-screens" - RNSentry: - :path: "../node_modules/@sentry/react-native" - RNSVG: - :path: "../node_modules/react-native-svg" - Yoga: - :path: "../node_modules/react-native/ReactCommon/yoga" - -SPEC CHECKSUMS: - boost-for-react-native: 39c7adb57c4e60d6c5479dd8623128eb5b3f0f2c - DoubleConversion: 831926d9b8bf8166fd87886c4abab286c2422662 - FBLazyVector: 33c82491102f20ecddb6c6a2c273696ace3191e0 - FBReactNativeSpec: df8f81d2a7541ee6755a047b398a5cb5a72acd0e - fmt: ff9d55029c625d3757ed641535fd4a75fedc7ce9 - glog: 5337263514dd6f09803962437687240c5dc39aa4 - nodejs-mobile-react-native: 27a5dd06d934c919777aa5f66144f75bdf15f260 - Purchases: e9839517aea4335136f3946ae228eecf5131cc25 - PurchasesCoreSwift: dd3fd55a9895abd7906a3842bd36c7f7539a99d1 - PurchasesHybridCommon: 1d98dd58935a4fa1009c6e17f8b740973147b899 - RCT-Folly: 0dd9e1eb86348ecab5ba76f910b56f4b5fef3c46 - RCTRequired: 6cf071ab2adfd769014b3d94373744ee6e789530 - RCTTypeSafety: b829c59453478bb5b02487b8de3336386ab93ab1 - React: 29d8a785041b96a2754c25cc16ddea57b7a618ce - React-callinvoker: 2857b61132bd7878b736e282581f4b42fd93002b - React-Core: 001e21bad5ca41e59e9d90df5c0b53da04c3ce8e - React-CoreModules: 0a0410ab296a62ab38e2f8d321e822d1fcc2fe49 - React-cxxreact: 8d904967134ae8ff0119c5357c42eaae976806f8 - React-jsi: 12913c841713a15f64eabf5c9ad98592c0ec5940 - React-jsiexecutor: 43f2542aed3c26e42175b339f8d37fe3dd683765 - React-jsinspector: 41e58e5b8e3e0bf061fdf725b03f2144014a8fb0 - react-native-safe-area-context: 584dc04881deb49474363f3be89e4ca0e854c057 - react-native-version-number: b415bbec6a13f2df62bf978e85bc0d699462f37f - React-perflogger: fd28ee1f2b5b150b00043f0301d96bd417fdc339 - React-RCTActionSheet: 7f3fa0855c346aa5d7c60f9ced16e067db6d29fa - React-RCTAnimation: 2119a18ee26159004b001bc56404ca5dbaae6077 - React-RCTBlob: a493cc306deeaba0c0efa8ecec2da154afd3a798 - React-RCTImage: 54999ddc896b7db6650af5760607aaebdf30425c - React-RCTLinking: 7fb3fa6397d3700c69c3d361870a299f04f1a2e6 - React-RCTNetwork: 329ee4f75bd2deb8cf6c4b14231b5bb272cbd9af - React-RCTSettings: 1a659d58e45719bc77c280dbebce6a5a5a2733f5 - React-RCTText: e12d7aae2a038be9ae72815436677a7c6549dd26 - React-RCTVibration: 92d41c2442e5328cc4d342cd7f78e5876b68bae5 - React-runtimeexecutor: 85187f19dd9c47a7c102f9994f9d14e4dc2110de - ReactCommon: eafed38eec7b591c31751bfa7494801618460459 - rn-fetch-blob: f525a73a78df9ed5d35e67ea65e79d53c15255bc - RNCMaskedView: 303773894e9b1048029b4ec4ab017071b7c56211 - RNGestureHandler: a479ebd5ed4221a810967000735517df0d2db211 - RNPurchases: ef07f897760dd7639c36281a05e1ddbf30abc9f5 - RNReanimated: ad24db8af24e3fe1b5c462785bc3db8d5baae2ee - RNScreens: 0591543e343c7444ea1756b6265d81a4295922c9 - RNSentry: de1478217e0f56053740b066391ee5e202d6a84d - RNSVG: 069864be08c9fe065a2cf7e63656a34c78653c99 - Sentry: be2f8f7a63e5274cc83d0813e40c1680119c0153 - Yoga: aa0cb45287ebe1004c02a13f279c55a95f1572f4 - -PODFILE CHECKSUM: e2f5c8dcf3cb2d85cd623d4334cc1574223a58f3 - -COCOAPODS: 1.11.0 diff --git a/packages/mobile/ios/actual.xcodeproj/project.pbxproj b/packages/mobile/ios/actual.xcodeproj/project.pbxproj deleted file mode 100644 index 2d3e077851..0000000000 --- a/packages/mobile/ios/actual.xcodeproj/project.pbxproj +++ /dev/null @@ -1,638 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 46; - objects = { - -/* Begin PBXBuildFile section */ - 0943EB97FE684CB19D7FFD33 /* libsqlite3.0.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = D8D9E65052E849F990398081 /* libsqlite3.0.tbd */; }; - 13B07FBC1A68108700A75B9A /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.m */; }; - 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; }; - 13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; }; - 1A0F14D321ADB98C0045485A /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB11A68108700A75B9A /* LaunchScreen.xib */; }; - 1A1FBE4922023BE7004E32F9 /* MBFingerTipWindow.m in Sources */ = {isa = PBXBuildFile; fileRef = 1A1FBE4822023BE7004E32F9 /* MBFingerTipWindow.m */; }; - 1A41989321FB97C500D8F08C /* ACTInAppPurchase.m in Sources */ = {isa = PBXBuildFile; fileRef = 1A41989121FB97C500D8F08C /* ACTInAppPurchase.m */; }; - 1A41989421FB97C500D8F08C /* ACTInAppPurchase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1A41989221FB97C500D8F08C /* ACTInAppPurchase.swift */; }; - 1A4E11C021FC1297008C1AD6 /* StoreKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1A4E11BF21FC1297008C1AD6 /* StoreKit.framework */; }; - 1A575D2A226BB054009B26C7 /* JavaScriptCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1A575D1D226BB054009B26C7 /* JavaScriptCore.framework */; }; - 1A66C51C21169BC8008DBB08 /* ACTScrollViewManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1A66C51B21169BC8008DBB08 /* ACTScrollViewManager.swift */; }; - 1A66C51E21169FFE008DBB08 /* ACTScrollViewManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 1A66C51D21169FFE008DBB08 /* ACTScrollViewManager.m */; }; - 1AADB940218CC1BB0037D24C /* ip.txt in Resources */ = {isa = PBXBuildFile; fileRef = 1AADB911218CC1BB0037D24C /* ip.txt */; }; - 1ADB9F0821651B7200097127 /* ACTKeyboardAvoiding.m in Sources */ = {isa = PBXBuildFile; fileRef = 1ADB9ED921651B7200097127 /* ACTKeyboardAvoiding.m */; }; - 1ADB9F0921651B7200097127 /* ACTKeyboardAvoiding.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1ADB9F0721651B7200097127 /* ACTKeyboardAvoiding.swift */; }; - 4AE623E78883E2C0AB3950B3 /* libPods-actual.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 13FD6D8DED6A2D38D5930BF6 /* libPods-actual.a */; }; - DBA3B50911894384A16CCDEC /* libz.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 21B6CC36E6424AE0947CBE6E /* libz.tbd */; }; -/* End PBXBuildFile section */ - -/* Begin PBXFileReference section */ - 00E356F11AD99517003FC87E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 00E356F21AD99517003FC87E /* actualTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = actualTests.m; sourceTree = ""; }; - 13B07F961A680F5B00A75B9A /* actual.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = actual.app; sourceTree = BUILT_PRODUCTS_DIR; }; - 13B07FAF1A68108700A75B9A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = actual/AppDelegate.h; sourceTree = ""; }; - 13B07FB01A68108700A75B9A /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AppDelegate.m; path = actual/AppDelegate.m; sourceTree = ""; }; - 13B07FB21A68108700A75B9A /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/LaunchScreen.xib; sourceTree = ""; }; - 13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = actual/Images.xcassets; sourceTree = ""; }; - 13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = actual/Info.plist; sourceTree = ""; }; - 13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = actual/main.m; sourceTree = ""; }; - 13FD6D8DED6A2D38D5930BF6 /* libPods-actual.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-actual.a"; sourceTree = BUILT_PRODUCTS_DIR; }; - 1A0F14D421AE3A5B0045485A /* actual.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; name = actual.entitlements; path = actual/actual.entitlements; sourceTree = ""; }; - 1A1FBE1622023BE7004E32F9 /* MBFingerTipWindow.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MBFingerTipWindow.h; path = actual/MBFingerTipWindow.h; sourceTree = ""; }; - 1A1FBE4822023BE7004E32F9 /* MBFingerTipWindow.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MBFingerTipWindow.m; path = actual/MBFingerTipWindow.m; sourceTree = ""; }; - 1A41989121FB97C500D8F08C /* ACTInAppPurchase.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ACTInAppPurchase.m; path = actual/ACTInAppPurchase.m; sourceTree = ""; }; - 1A41989221FB97C500D8F08C /* ACTInAppPurchase.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = ACTInAppPurchase.swift; path = actual/ACTInAppPurchase.swift; sourceTree = ""; }; - 1A4E11BF21FC1297008C1AD6 /* StoreKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = StoreKit.framework; path = System/Library/Frameworks/StoreKit.framework; sourceTree = SDKROOT; }; - 1A575D1D226BB054009B26C7 /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; }; - 1A66C4C721169B63008DBB08 /* actual-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "actual-Bridging-Header.h"; sourceTree = ""; }; - 1A66C51B21169BC8008DBB08 /* ACTScrollViewManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = ACTScrollViewManager.swift; path = actual/ACTScrollViewManager.swift; sourceTree = ""; }; - 1A66C51D21169FFE008DBB08 /* ACTScrollViewManager.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = ACTScrollViewManager.m; path = actual/ACTScrollViewManager.m; sourceTree = ""; }; - 1AADB911218CC1BB0037D24C /* ip.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = ip.txt; path = ../ip.txt; sourceTree = ""; }; - 1ADB9ED921651B7200097127 /* ACTKeyboardAvoiding.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ACTKeyboardAvoiding.m; path = actual/ACTKeyboardAvoiding.m; sourceTree = ""; }; - 1ADB9F0721651B7200097127 /* ACTKeyboardAvoiding.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = ACTKeyboardAvoiding.swift; path = actual/ACTKeyboardAvoiding.swift; sourceTree = ""; tabWidth = 2; usesTabs = 0; }; - 21B6CC36E6424AE0947CBE6E /* libz.tbd */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libz.tbd; path = usr/lib/libz.tbd; sourceTree = SDKROOT; }; - 22F91DD53D6A4B43BAE90E40 /* libReactNativePermissions.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libReactNativePermissions.a; sourceTree = ""; }; - 2D16E6891FA4F8E400B85C8A /* libReact.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libReact.a; sourceTree = BUILT_PRODUCTS_DIR; }; - 348B90EAF45D4543A5C58B31 /* libRNCamera.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRNCamera.a; sourceTree = ""; }; - 695F891E5B2F470CA8AD6061 /* libRNDnsLookup.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRNDnsLookup.a; sourceTree = ""; }; - 741D7AFB2CA865AADD0D9E3B /* Pods-actual.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-actual.release.xcconfig"; path = "Target Support Files/Pods-actual/Pods-actual.release.xcconfig"; sourceTree = ""; }; - D8D9E65052E849F990398081 /* libsqlite3.0.tbd */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libsqlite3.0.tbd; path = usr/lib/libsqlite3.0.tbd; sourceTree = SDKROOT; }; - DEC44B77FC83161C2F2AA047 /* Pods-actual.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-actual.debug.xcconfig"; path = "Target Support Files/Pods-actual/Pods-actual.debug.xcconfig"; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - 13B07F8C1A680F5B00A75B9A /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 1A575D2A226BB054009B26C7 /* JavaScriptCore.framework in Frameworks */, - 0943EB97FE684CB19D7FFD33 /* libsqlite3.0.tbd in Frameworks */, - 1A4E11C021FC1297008C1AD6 /* StoreKit.framework in Frameworks */, - DBA3B50911894384A16CCDEC /* libz.tbd in Frameworks */, - 4AE623E78883E2C0AB3950B3 /* libPods-actual.a in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 00E356EF1AD99517003FC87E /* actualTests */ = { - isa = PBXGroup; - children = ( - 00E356F21AD99517003FC87E /* actualTests.m */, - 00E356F01AD99517003FC87E /* Supporting Files */, - ); - path = actualTests; - sourceTree = ""; - }; - 00E356F01AD99517003FC87E /* Supporting Files */ = { - isa = PBXGroup; - children = ( - 00E356F11AD99517003FC87E /* Info.plist */, - ); - name = "Supporting Files"; - sourceTree = ""; - }; - 13B07FAE1A68108700A75B9A /* actual */ = { - isa = PBXGroup; - children = ( - 1A1FBE1622023BE7004E32F9 /* MBFingerTipWindow.h */, - 1A1FBE4822023BE7004E32F9 /* MBFingerTipWindow.m */, - 1A41989121FB97C500D8F08C /* ACTInAppPurchase.m */, - 1A41989221FB97C500D8F08C /* ACTInAppPurchase.swift */, - 1A0F14D421AE3A5B0045485A /* actual.entitlements */, - 1AADB911218CC1BB0037D24C /* ip.txt */, - 1ADB9ED921651B7200097127 /* ACTKeyboardAvoiding.m */, - 1ADB9F0721651B7200097127 /* ACTKeyboardAvoiding.swift */, - 13B07FAF1A68108700A75B9A /* AppDelegate.h */, - 13B07FB01A68108700A75B9A /* AppDelegate.m */, - 13B07FB51A68108700A75B9A /* Images.xcassets */, - 13B07FB61A68108700A75B9A /* Info.plist */, - 13B07FB11A68108700A75B9A /* LaunchScreen.xib */, - 13B07FB71A68108700A75B9A /* main.m */, - 1A66C51B21169BC8008DBB08 /* ACTScrollViewManager.swift */, - 1A66C51D21169FFE008DBB08 /* ACTScrollViewManager.m */, - 1A66C4C721169B63008DBB08 /* actual-Bridging-Header.h */, - ); - name = actual; - sourceTree = ""; - }; - 1A026E30208C2B8D00778856 /* Recovered References */ = { - isa = PBXGroup; - children = ( - 348B90EAF45D4543A5C58B31 /* libRNCamera.a */, - 22F91DD53D6A4B43BAE90E40 /* libReactNativePermissions.a */, - 695F891E5B2F470CA8AD6061 /* libRNDnsLookup.a */, - ); - name = "Recovered References"; - sourceTree = ""; - }; - 2D16E6871FA4F8E400B85C8A /* Frameworks */ = { - isa = PBXGroup; - children = ( - 1A575D1D226BB054009B26C7 /* JavaScriptCore.framework */, - 1A4E11BF21FC1297008C1AD6 /* StoreKit.framework */, - 2D16E6891FA4F8E400B85C8A /* libReact.a */, - D8D9E65052E849F990398081 /* libsqlite3.0.tbd */, - 21B6CC36E6424AE0947CBE6E /* libz.tbd */, - 13FD6D8DED6A2D38D5930BF6 /* libPods-actual.a */, - ); - name = Frameworks; - sourceTree = ""; - }; - 6B73317A6BD2F12F3696B52B /* Pods */ = { - isa = PBXGroup; - children = ( - DEC44B77FC83161C2F2AA047 /* Pods-actual.debug.xcconfig */, - 741D7AFB2CA865AADD0D9E3B /* Pods-actual.release.xcconfig */, - ); - path = Pods; - sourceTree = ""; - }; - 832341AE1AAA6A7D00B99B32 /* Libraries */ = { - isa = PBXGroup; - children = ( - ); - name = Libraries; - sourceTree = ""; - }; - 83CBB9F61A601CBA00E9B192 = { - isa = PBXGroup; - children = ( - 13B07FAE1A68108700A75B9A /* actual */, - 832341AE1AAA6A7D00B99B32 /* Libraries */, - 00E356EF1AD99517003FC87E /* actualTests */, - 83CBBA001A601CBA00E9B192 /* Products */, - 2D16E6871FA4F8E400B85C8A /* Frameworks */, - 1A026E30208C2B8D00778856 /* Recovered References */, - 6B73317A6BD2F12F3696B52B /* Pods */, - ); - indentWidth = 2; - sourceTree = ""; - tabWidth = 2; - usesTabs = 0; - }; - 83CBBA001A601CBA00E9B192 /* Products */ = { - isa = PBXGroup; - children = ( - 13B07F961A680F5B00A75B9A /* actual.app */, - ); - name = Products; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - 13B07F861A680F5B00A75B9A /* actual */ = { - isa = PBXNativeTarget; - buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "actual" */; - buildPhases = ( - AA16FDFD29699DAA2114A3E9 /* [CP] Check Pods Manifest.lock */, - 13B07F871A680F5B00A75B9A /* Sources */, - 13B07F8C1A680F5B00A75B9A /* Frameworks */, - 13B07F8E1A680F5B00A75B9A /* Resources */, - 1AAEDBB2245748ED00967AA8 /* Apply patches */, - 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */, - 768FCC2DAE784A72A012D9E1 /* Upload Debug Symbols to Sentry */, - 1A00931D23A94EBA00FE6B5A /* Compile backend for nodejs-mobile */, - 0227CCCFB6675D205CC277F7 /* [CP] Embed Pods Frameworks */, - D9E7C2E21B8A99478BF8D089 /* [CP-User] [NODEJS MOBILE] Copy Node.js Project files */, - 55661CB278C902A9468DFBD5 /* [CP-User] [NODEJS MOBILE] Build Native Modules */, - DF54B37A45176AA1F1E027A8 /* [CP-User] [NODEJS MOBILE] Sign Native Modules */, - D6598A9BF737905D7E753166 /* [CP-User] [NODEJS MOBILE] Remove Simulator Strip */, - D3D11ECDEE72EE1F374A8692 /* [CP] Copy Pods Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = actual; - productName = "Hello World"; - productReference = 13B07F961A680F5B00A75B9A /* actual.app */; - productType = "com.apple.product-type.application"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - 83CBB9F71A601CBA00E9B192 /* Project object */ = { - isa = PBXProject; - attributes = { - LastUpgradeCheck = 610; - ORGANIZATIONNAME = Facebook; - TargetAttributes = { - 13B07F861A680F5B00A75B9A = { - DevelopmentTeam = 67T3B79U9M; - LastSwiftMigration = 940; - ProvisioningStyle = Automatic; - SystemCapabilities = { - com.apple.InAppPurchase = { - enabled = 1; - }; - com.apple.Push = { - enabled = 0; - }; - }; - }; - }; - }; - buildConfigurationList = 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "actual" */; - compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; - hasScannedForEncodings = 0; - knownRegions = ( - English, - en, - Base, - ); - mainGroup = 83CBB9F61A601CBA00E9B192; - productRefGroup = 83CBBA001A601CBA00E9B192 /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - 13B07F861A680F5B00A75B9A /* actual */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - 13B07F8E1A680F5B00A75B9A /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 1A0F14D321ADB98C0045485A /* LaunchScreen.xib in Resources */, - 1AADB940218CC1BB0037D24C /* ip.txt in Resources */, - 13B07FBF1A68108700A75B9A /* 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 = "echo \"RUNNING\"\nexport SENTRY_PROPERTIES=sentry.properties\nexport NODE_BINARY=node\nexport EXTRA_PACKAGER_ARGS=\"--sourcemap-output $DERIVED_FILE_DIR/main.jsbundle.map\"\nif [ \"${CONFIGURATION}\" == \"Debug\" ]; then\n export SKIP_BUNDLING=true\nfi\necho \"BUNDLING\"\n# For whatever reason, --force-foreground is required for it to upload sourcemaps\n# to Sentry\n../node_modules/@sentry/cli/bin/sentry-cli react-native xcode --force-foreground ../node_modules/react-native/scripts/react-native-xcode.sh\n"; - }; - 0227CCCFB6675D205CC277F7 /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-actual/Pods-actual-frameworks.sh", - "${PODS_ROOT}/../../node_modules/nodejs-mobile-react-native/ios/NodeMobile.framework", - ); - name = "[CP] Embed Pods Frameworks"; - outputPaths = ( - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/NodeMobile.framework", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-actual/Pods-actual-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; - 1A00931D23A94EBA00FE6B5A /* Compile backend for nodejs-mobile */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - ); - name = "Compile backend for nodejs-mobile"; - outputFileListPaths = ( - ); - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "echo $(pwd)\ncd ../../loot-core/bin\n\nif [ \"${CONFIGURATION}\" == \"Debug\" ]; then\n export NODE_ENV=\"development\"\n ./build-mobile\nelse \n export NODE_ENV=\"production\"\n VERSION=$(/usr/libexec/PlistBuddy -c \"Print :CFBundleShortVersionString\" \"${TARGET_BUILD_DIR}/${INFOPLIST_PATH}\")\n DIST=$(/usr/libexec/PlistBuddy -c \"Print :CFBundleVersion\" \"${TARGET_BUILD_DIR}/${INFOPLIST_PATH}\")\n \n ./build-mobile --release --version \"${VERSION}\" --dist \"${DIST}\"\nfi\n"; - }; - 1AAEDBB2245748ED00967AA8 /* Apply patches */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - ); - name = "Apply patches"; - outputFileListPaths = ( - ); - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "cd ..;\n../../node_modules/.bin/patch-package\n\n"; - showEnvVarsInLog = 0; - }; - 55661CB278C902A9468DFBD5 /* [CP-User] [NODEJS MOBILE] Build Native Modules */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - name = "[CP-User] [NODEJS MOBILE] Build Native Modules"; - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "#!/bin/sh\nset -e\nif [ -z \"$NODEJS_MOBILE_BUILD_NATIVE_MODULES\" ]; then\n# If build native modules preference is not set, look for it in the project's\n#nodejs-assets/BUILD_NATIVE_MODULES.txt file.\nNODEJS_ASSETS_DIR=\"$( cd \"$PROJECT_DIR\" && cd ../nodejs-assets/ && pwd )\"\nPREFERENCE_FILE_PATH=\"$NODEJS_ASSETS_DIR/BUILD_NATIVE_MODULES.txt\"\n if [ -f \"$PREFERENCE_FILE_PATH\" ]; then\n NODEJS_MOBILE_BUILD_NATIVE_MODULES=\"$(cat $PREFERENCE_FILE_PATH | xargs)\"\n fi\nfi\nif [ -z \"$NODEJS_MOBILE_BUILD_NATIVE_MODULES\" ]; then\n# If build native modules preference is not set, try to find .gyp files\n#to turn it on.\n gypfiles=($(find \"$CODESIGNING_FOLDER_PATH/nodejs-project/\" -type f -name \"*.gyp\"))\n if [ ${#gypfiles[@]} -gt 0 ]; then\n NODEJS_MOBILE_BUILD_NATIVE_MODULES=1\n else\n NODEJS_MOBILE_BUILD_NATIVE_MODULES=0\n fi\nfi\nif [ \"1\" != \"$NODEJS_MOBILE_BUILD_NATIVE_MODULES\" ]; then exit 0; fi\n# Delete object files that may already come from within the npm package.\nfind \"$CODESIGNING_FOLDER_PATH/nodejs-project/\" -name \"*.o\" -type f -delete\nfind \"$CODESIGNING_FOLDER_PATH/nodejs-project/\" -name \"*.a\" -type f -delete\nfind \"$CODESIGNING_FOLDER_PATH/nodejs-project/\" -name \"*.node\" -type f -delete\n# Delete bundle contents that may be there from previous builds.\nfind \"$CODESIGNING_FOLDER_PATH/nodejs-project/\" -path \"*/*.node/*\" -delete\nfind \"$CODESIGNING_FOLDER_PATH/nodejs-project/\" -name \"*.node\" -type d -delete\nfind \"$CODESIGNING_FOLDER_PATH/nodejs-project/\" -path \"*/*.framework/*\" -delete\nfind \"$CODESIGNING_FOLDER_PATH/nodejs-project/\" -name \"*.framework\" -type d -delete\n# Apply patches to the modules package.json\nif [ -d \"$CODESIGNING_FOLDER_PATH\"/nodejs-project/node_modules/ ]; then\n PATCH_SCRIPT_DIR=\"$( cd \"$PROJECT_DIR\" && cd ../node_modules/nodejs-mobile-react-native/scripts/ && pwd )\"\n NODEJS_PROJECT_MODULES_DIR=\"$( cd \"$CODESIGNING_FOLDER_PATH\" && cd nodejs-project/node_modules/ && pwd )\"\n node \"$PATCH_SCRIPT_DIR\"/patch-package.js $NODEJS_PROJECT_MODULES_DIR\nfi\n# Get the nodejs-mobile-gyp location\nif [ -d \"$PROJECT_DIR/../node_modules/nodejs-mobile-gyp/\" ]; then\n NODEJS_MOBILE_GYP_DIR=\"$( cd \"$PROJECT_DIR\" && cd ../node_modules/nodejs-mobile-gyp/ && pwd )\"\nelse\n NODEJS_MOBILE_GYP_DIR=\"$( cd \"$PROJECT_DIR\" && cd ../node_modules/nodejs-mobile-react-native/node_modules/nodejs-mobile-gyp/ && pwd )\"\nfi\nNODEJS_MOBILE_GYP_BIN_FILE=\"$NODEJS_MOBILE_GYP_DIR\"/bin/node-gyp.js\n# Support building neon-bindings (Rust) native modules\nif [ -f ~/.cargo/env ]; then\n source ~/.cargo/env;\nfi\n# Rebuild modules with right environment\nNODEJS_HEADERS_DIR=\"$( cd \"$PROJECT_DIR\" && cd ../node_modules/nodejs-mobile-react-native/ios/libnode/ && pwd )\"\npushd $CODESIGNING_FOLDER_PATH/nodejs-project/\nif [ \"$PLATFORM_NAME\" == \"iphoneos\" ]\nthen\n GYP_DEFINES=\"OS=ios\" CARGO_BUILD_TARGET=\"aarch64-apple-ios\" npm_config_nodedir=\"$NODEJS_HEADERS_DIR\" npm_config_node_gyp=\"$NODEJS_MOBILE_GYP_BIN_FILE\" npm_config_platform=\"ios\" npm_config_format=\"make-ios\" npm_config_node_engine=\"chakracore\" npm_config_arch=\"arm64\" npm --verbose rebuild --build-from-source\nelse\n GYP_DEFINES=\"OS=ios\" CARGO_BUILD_TARGET=\"x86_64-apple-ios\" npm_config_nodedir=\"$NODEJS_HEADERS_DIR\" npm_config_node_gyp=\"$NODEJS_MOBILE_GYP_BIN_FILE\" npm_config_platform=\"ios\" npm_config_format=\"make-ios\" npm_config_node_engine=\"chakracore\" npm_config_arch=\"x64\" npm --verbose rebuild --build-from-source\nfi\npopd\n"; - }; - 768FCC2DAE784A72A012D9E1 /* Upload Debug Symbols to Sentry */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "Upload Debug Symbols to Sentry"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "if [ \"${CONFIGURATION}\" != \"Debug\" ]; then\n export SENTRY_PROPERTIES=sentry.properties\n ../node_modules/@sentry/cli/bin/sentry-cli upload-dsym\nfi\n"; - }; - AA16FDFD29699DAA2114A3E9 /* [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-actual-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; - }; - D3D11ECDEE72EE1F374A8692 /* [CP] Copy Pods Resources */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-actual/Pods-actual-resources.sh", - "${PODS_CONFIGURATION_BUILD_DIR}/React-Core/AccessibilityResources.bundle", - ); - name = "[CP] Copy Pods Resources"; - outputPaths = ( - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/AccessibilityResources.bundle", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-actual/Pods-actual-resources.sh\"\n"; - showEnvVarsInLog = 0; - }; - D6598A9BF737905D7E753166 /* [CP-User] [NODEJS MOBILE] Remove Simulator Strip */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - name = "[CP-User] [NODEJS MOBILE] Remove Simulator Strip"; - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "#!/bin/sh\nset -e\nFRAMEWORK_BINARY_PATH=\"$TARGET_BUILD_DIR/$FRAMEWORKS_FOLDER_PATH/NodeMobile.framework/NodeMobile\"\nFRAMEWORK_STRIPPED_PATH=\"$FRAMEWORK_BINARY_PATH-strip\"\nif [ \"$PLATFORM_NAME\" != \"iphonesimulator\" ]; then\n if $(lipo \"$FRAMEWORK_BINARY_PATH\" -verify_arch \"x86_64\") ; then\n lipo -output \"$FRAMEWORK_STRIPPED_PATH\" -remove \"x86_64\" \"$FRAMEWORK_BINARY_PATH\"\n rm \"$FRAMEWORK_BINARY_PATH\"\n mv \"$FRAMEWORK_STRIPPED_PATH\" \"$FRAMEWORK_BINARY_PATH\"\n echo \"Removed simulator strip from NodeMobile.framework\"\n fi\nfi\n"; - }; - D9E7C2E21B8A99478BF8D089 /* [CP-User] [NODEJS MOBILE] Copy Node.js Project files */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - name = "[CP-User] [NODEJS MOBILE] Copy Node.js Project files"; - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "#!/bin/sh\nset -e\nNODEJS_ASSETS_DIR=\"$( cd \"$PROJECT_DIR\" && cd ../nodejs-assets/ && pwd )\"\nNODEJS_BUILT_IN_MODULES_DIR=\"$( cd \"$PROJECT_DIR\" && cd ../node_modules/nodejs-mobile-react-native/install/resources/nodejs-modules/ && pwd )\"\nif [ -d \"$CODESIGNING_FOLDER_PATH/nodejs-project/\" ]\nthen\nrm -rf \"$CODESIGNING_FOLDER_PATH/nodejs-project/\"\nfi\nif [ -d \"$CODESIGNING_FOLDER_PATH/builtin_modules/\" ]\nthen\nrm -rf \"$CODESIGNING_FOLDER_PATH/builtin_modules/\"\nfi\nrsync -av --delete \"$NODEJS_ASSETS_DIR/nodejs-project\" \"$CODESIGNING_FOLDER_PATH\"\nrsync -av --delete \"$NODEJS_BUILT_IN_MODULES_DIR/builtin_modules\" \"$CODESIGNING_FOLDER_PATH\"\n"; - }; - DF54B37A45176AA1F1E027A8 /* [CP-User] [NODEJS MOBILE] Sign Native Modules */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - name = "[CP-User] [NODEJS MOBILE] Sign Native Modules"; - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "#!/bin/sh\nset -e\nif [ -z \"$NODEJS_MOBILE_BUILD_NATIVE_MODULES\" ]; then\n# If build native modules preference is not set, look for it in the project's\n#nodejs-assets/BUILD_NATIVE_MODULES.txt file.\nNODEJS_ASSETS_DIR=\"$( cd \"$PROJECT_DIR\" && cd ../nodejs-assets/ && pwd )\"\nPREFERENCE_FILE_PATH=\"$NODEJS_ASSETS_DIR/BUILD_NATIVE_MODULES.txt\"\n if [ -f \"$PREFERENCE_FILE_PATH\" ]; then\n NODEJS_MOBILE_BUILD_NATIVE_MODULES=\"$(cat $PREFERENCE_FILE_PATH | xargs)\"\n fi\nfi\nif [ -z \"$NODEJS_MOBILE_BUILD_NATIVE_MODULES\" ]; then\n# If build native modules preference is not set, try to find .gyp files\n#to turn it on.\n gypfiles=($(find \"$CODESIGNING_FOLDER_PATH/nodejs-project/\" -type f -name \"*.gyp\"))\n if [ ${#gypfiles[@]} -gt 0 ]; then\n NODEJS_MOBILE_BUILD_NATIVE_MODULES=1\n else\n NODEJS_MOBILE_BUILD_NATIVE_MODULES=0\n fi\nfi\nif [ \"1\" != \"$NODEJS_MOBILE_BUILD_NATIVE_MODULES\" ]; then exit 0; fi\n# Delete object files\nfind \"$CODESIGNING_FOLDER_PATH/nodejs-project/\" -name \"*.o\" -type f -delete\nfind \"$CODESIGNING_FOLDER_PATH/nodejs-project/\" -name \"*.a\" -type f -delete\n# Create Info.plist for each framework built and loader override.\nPATCH_SCRIPT_DIR=\"$( cd \"$PROJECT_DIR\" && cd ../node_modules/nodejs-mobile-react-native/scripts/ && pwd )\"\nNODEJS_PROJECT_DIR=\"$( cd \"$CODESIGNING_FOLDER_PATH\" && cd nodejs-project/ && pwd )\"\nnode \"$PATCH_SCRIPT_DIR\"/ios-create-plists-and-dlopen-override.js $NODEJS_PROJECT_DIR\n# Embed every resulting .framework in the application and delete them afterwards.\nembed_framework()\n{\n FRAMEWORK_NAME=\"$(basename \"$1\")\"\n cp -r \"$1\" \"$TARGET_BUILD_DIR/$FRAMEWORKS_FOLDER_PATH/\"\n /usr/bin/codesign --force --sign $EXPANDED_CODE_SIGN_IDENTITY --preserve-metadata=identifier,entitlements,flags --timestamp=none \"$TARGET_BUILD_DIR/$FRAMEWORKS_FOLDER_PATH/$FRAMEWORK_NAME\"\n}\nfind \"$CODESIGNING_FOLDER_PATH/nodejs-project/\" -name \"*.framework\" -type d | while read frmwrk_path; do embed_framework \"$frmwrk_path\"; done\n\n#Delete gyp temporary .deps dependency folders from the project structure.\nfind \"$CODESIGNING_FOLDER_PATH/nodejs-project/\" -path \"*/.deps/*\" -delete\nfind \"$CODESIGNING_FOLDER_PATH/nodejs-project/\" -name \".deps\" -type d -delete\n\n#Delete frameworks from their build paths\nfind \"$CODESIGNING_FOLDER_PATH/nodejs-project/\" -path \"*/*.framework/*\" -delete\nfind \"$CODESIGNING_FOLDER_PATH/nodejs-project/\" -name \"*.framework\" -type d -delete\n"; - }; -/* End PBXShellScriptBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 13B07F871A680F5B00A75B9A /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 1A41989421FB97C500D8F08C /* ACTInAppPurchase.swift in Sources */, - 13B07FBC1A68108700A75B9A /* AppDelegate.m in Sources */, - 1ADB9F0821651B7200097127 /* ACTKeyboardAvoiding.m in Sources */, - 1A1FBE4922023BE7004E32F9 /* MBFingerTipWindow.m in Sources */, - 1A66C51C21169BC8008DBB08 /* ACTScrollViewManager.swift in Sources */, - 1A66C51E21169FFE008DBB08 /* ACTScrollViewManager.m in Sources */, - 1ADB9F0921651B7200097127 /* ACTKeyboardAvoiding.swift in Sources */, - 13B07FC11A68108700A75B9A /* main.m in Sources */, - 1A41989321FB97C500D8F08C /* ACTInAppPurchase.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXVariantGroup section */ - 13B07FB11A68108700A75B9A /* LaunchScreen.xib */ = { - isa = PBXVariantGroup; - children = ( - 13B07FB21A68108700A75B9A /* Base */, - ); - name = LaunchScreen.xib; - path = actual; - sourceTree = ""; - }; -/* End PBXVariantGroup section */ - -/* Begin XCBuildConfiguration section */ - 13B07F941A680F5B00A75B9A /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = DEC44B77FC83161C2F2AA047 /* Pods-actual.debug.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_ENABLE_MODULES = YES; - CODE_SIGN_IDENTITY = "iPhone Developer"; - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; - DEAD_CODE_STRIPPING = NO; - DEVELOPMENT_TEAM = 67T3B79U9M; - ENABLE_BITCODE = NO; - HEADER_SEARCH_PATHS = ( - "$(inherited)", - "$(SRCROOT)/../node_modules/react-native-camera/ios/**", - "$(SRCROOT)/../node_modules/react-native-permissions/ios/**", - "$(SRCROOT)/../node_modules/react-native-dns-lookup/ios", - ); - INFOPLIST_FILE = actual/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - LIBRARY_SEARCH_PATHS = "$(inherited)"; - OTHER_LDFLAGS = ( - "$(inherited)", - "-ObjC", - "-lc++", - ); - PRODUCT_NAME = actual; - PROVISIONING_PROFILE_SPECIFIER = ""; - SWIFT_OBJC_BRIDGING_HEADER = "actual-Bridging-Header.h"; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 5.0; - VERSIONING_SYSTEM = "apple-generic"; - }; - name = Debug; - }; - 13B07F951A680F5B00A75B9A /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 741D7AFB2CA865AADD0D9E3B /* Pods-actual.release.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_ENABLE_MODULES = YES; - CODE_SIGN_IDENTITY = "iPhone Developer"; - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_TEAM = 67T3B79U9M; - ENABLE_BITCODE = NO; - HEADER_SEARCH_PATHS = ( - "$(inherited)", - "$(SRCROOT)/../node_modules/react-native-camera/ios/**", - "$(SRCROOT)/../node_modules/react-native-permissions/ios/**", - "$(SRCROOT)/../node_modules/react-native-dns-lookup/ios", - ); - INFOPLIST_FILE = actual/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - LIBRARY_SEARCH_PATHS = "$(inherited)"; - OTHER_LDFLAGS = ( - "$(inherited)", - "-ObjC", - "-lc++", - ); - PRODUCT_NAME = actual; - PROVISIONING_PROFILE_SPECIFIER = ""; - SWIFT_OBJC_BRIDGING_HEADER = "actual-Bridging-Header.h"; - SWIFT_VERSION = 5.0; - VERSIONING_SYSTEM = "apple-generic"; - }; - 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 = 11.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 = 11.0; - MTL_ENABLE_DEBUG_INFO = NO; - SDKROOT = iphoneos; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "actual" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 13B07F941A680F5B00A75B9A /* Debug */, - 13B07F951A680F5B00A75B9A /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "actual" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 83CBBA201A601CBA00E9B192 /* Debug */, - 83CBBA211A601CBA00E9B192 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = 83CBB9F71A601CBA00E9B192 /* Project object */; -} diff --git a/packages/mobile/ios/actual.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/packages/mobile/ios/actual.xcodeproj/project.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 919434a625..0000000000 --- a/packages/mobile/ios/actual.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/packages/mobile/ios/actual.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/packages/mobile/ios/actual.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist deleted file mode 100644 index 18d981003d..0000000000 --- a/packages/mobile/ios/actual.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +++ /dev/null @@ -1,8 +0,0 @@ - - - - - IDEDidComputeMac32BitWarning - - - diff --git a/packages/mobile/ios/actual.xcodeproj/xcshareddata/xcschemes/actual.xcscheme b/packages/mobile/ios/actual.xcodeproj/xcshareddata/xcschemes/actual.xcscheme deleted file mode 100644 index 3e0d2bf3a6..0000000000 --- a/packages/mobile/ios/actual.xcodeproj/xcshareddata/xcschemes/actual.xcscheme +++ /dev/null @@ -1,132 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/packages/mobile/ios/actual.xcworkspace/contents.xcworkspacedata b/packages/mobile/ios/actual.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 8d858befd1..0000000000 --- a/packages/mobile/ios/actual.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - diff --git a/packages/mobile/ios/actual.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/packages/mobile/ios/actual.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist deleted file mode 100644 index 18d981003d..0000000000 --- a/packages/mobile/ios/actual.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +++ /dev/null @@ -1,8 +0,0 @@ - - - - - IDEDidComputeMac32BitWarning - - - diff --git a/packages/mobile/ios/actual/ACTInAppPurchase.m b/packages/mobile/ios/actual/ACTInAppPurchase.m deleted file mode 100644 index 3a2957061b..0000000000 --- a/packages/mobile/ios/actual/ACTInAppPurchase.m +++ /dev/null @@ -1,11 +0,0 @@ -#import -#import - -@interface RCT_EXTERN_MODULE(ACTInAppPurchase, RCTViewManager) - -RCT_EXTERN_METHOD(listen) -RCT_EXTERN_METHOD(getReceiptString:(RCTResponseSenderBlock)callback) -RCT_EXTERN_METHOD(getProducts:(NSArray*)plan) -RCT_EXTERN_METHOD(buyProduct:(NSString*)plan) - -@end diff --git a/packages/mobile/ios/actual/ACTInAppPurchase.swift b/packages/mobile/ios/actual/ACTInAppPurchase.swift deleted file mode 100644 index 49596912bc..0000000000 --- a/packages/mobile/ios/actual/ACTInAppPurchase.swift +++ /dev/null @@ -1,148 +0,0 @@ -import StoreKit - -@objc(ACTInAppPurchase) -class ACTInAppPurchase : RCTEventEmitter { - public var productsReq: SKProductsRequest? - public var products: [SKProduct] = [] - - deinit { - SKPaymentQueue.default().remove(self) - } - - @objc override func supportedEvents() -> [String] { - return ["ProductsAvailable", "PaymentComplete", "PaymentFailed", "ReceiptRefreshed"] - } - - @objc func listen() { - // The reason we don't do this in init is because the backend - // thread also loads modules and we don't want it listening - // here. This is called when the app loads in - // `didFinishLaunchingWithOptions` - SKPaymentQueue.default().add(self) - } - - @objc func getProducts(_ productIds: [String]) { - products = [] - productsReq?.cancel() - - productsReq = SKProductsRequest(productIdentifiers: Set(productIds)) - productsReq!.delegate = self - productsReq!.start() - } - - @objc func buyProduct(_ productId: String) { - if let product = products.first(where: { $0.productIdentifier == productId }) { - let payment = SKPayment(product: product) - SKPaymentQueue.default().add(payment) - } - } - - @objc func getReceiptString(_ callback: RCTResponseSenderBlock) { - callback([NSNull(), self._getReceiptString() as Any]) - } - - - func _getReceiptString() -> String? { - guard let receiptPath = Bundle.main.appStoreReceiptURL else { - return nil - } - - var receiptData : Data; - do { - receiptData = try Data(contentsOf: receiptPath, options: .alwaysMapped) - } - catch { - return nil - } - - return receiptData.base64EncodedString(options: []) - } -} - -extension ACTInAppPurchase: SKProductsRequestDelegate { - public func productsRequest(_ request: SKProductsRequest, didReceive response: SKProductsResponse) { - let products = response.products - productsReq = nil - - self.products = products - - let ret : [String:AnyObject] = [ - "productIds": products.map({ $0.productIdentifier }) as AnyObject - ] - self.sendEvent(withName: "ProductsAvailable", body: ret) - } - - public func request(_ request: SKRequest, didFailWithError error: Error) { - print("Failed to load list of products.") - print("Error: \(error.localizedDescription)") - - productsReq = nil - } -} - -extension ACTInAppPurchase: SKPaymentTransactionObserver { - public func paymentQueue(_ queue: SKPaymentQueue, - updatedTransactions transactions: [SKPaymentTransaction]) { - for transaction in transactions { - switch transaction.transactionState { - case .purchased: - print("Updated transaction \(transaction) purchased") - complete(transaction: transaction) - break - case .failed: - print("Updated transaction \(transaction) failed") - fail(transaction: transaction) - break - case .restored: - print("Updated transaction \(transaction) restored") - restore(transaction: transaction) - break - case .deferred: - print("Updated transaction \(transaction) deferred") - break - case .purchasing: - print("Updated transaction \(transaction) purchasing") - break - } - } - } - - private func complete(transaction: SKPaymentTransaction) { - guard let receiptString = _getReceiptString() else { - return - } - - let ret : [String:AnyObject] = [ - "productIdentifier": transaction.payment.productIdentifier as AnyObject, - "receipt": receiptString as AnyObject - ] - - self.sendEvent(withName: "PaymentComplete", body: ret) - - SKPaymentQueue.default().finishTransaction(transaction) - } - - private func restore(transaction: SKPaymentTransaction) { - guard let productIdentifier = transaction.original?.payment.productIdentifier else { return } - - let ret : [String:AnyObject] = [ - "productIdentifier": productIdentifier as AnyObject - ] - self.sendEvent(withName: "PaymentRestore", body: ret) - - SKPaymentQueue.default().finishTransaction(transaction) - } - - private func fail(transaction: SKPaymentTransaction) { - if let transactionError = transaction.error as NSError?, - let localizedDescription = transaction.error?.localizedDescription, - transactionError.code != SKError.paymentCancelled.rawValue { - print("Transaction Error: \(localizedDescription)") - } - - let ret : [String:AnyObject] = [:] - self.sendEvent(withName: "PaymentFailed", body: ret) - - SKPaymentQueue.default().finishTransaction(transaction) - } -} diff --git a/packages/mobile/ios/actual/ACTKeyboardAvoiding.m b/packages/mobile/ios/actual/ACTKeyboardAvoiding.m deleted file mode 100644 index 971a0b07e2..0000000000 --- a/packages/mobile/ios/actual/ACTKeyboardAvoiding.m +++ /dev/null @@ -1,11 +0,0 @@ -#import -#import - -@interface RCT_EXTERN_MODULE(ACTKeyboardAvoiding, RCTViewManager) - -RCT_EXTERN_METHOD(activate:(int)scrollViewHandle) -RCT_EXTERN_METHOD(deactivate:(int)scrollViewHandle) -RCT_EXTERN_METHOD(enable) -RCT_EXTERN_METHOD(disable) - -@end diff --git a/packages/mobile/ios/actual/ACTKeyboardAvoiding.swift b/packages/mobile/ios/actual/ACTKeyboardAvoiding.swift deleted file mode 100644 index faaa2fd78e..0000000000 --- a/packages/mobile/ios/actual/ACTKeyboardAvoiding.swift +++ /dev/null @@ -1,174 +0,0 @@ - -@objc(ACTKeyboardAvoiding) -class ACTKeyboardAvoiding : RCTEventEmitter { - private var scrollViewHandles: [Int] = [] - private var activeField: UIView? - private var debugView: UIView - private var disabled = false - - @objc override func supportedEvents() -> [String] { - return [] - } - - override init() { - debugView = UIView() - super.init() - - // Listen for active inputs - NotificationCenter.default.addObserver( - self, - selector: #selector(self.handleTextDidBeginEditing), - name: UITextField.textDidBeginEditingNotification, - object: nil - ); - NotificationCenter.default.addObserver( - self, - selector: #selector(self.handleTextDidEndEditing), - name: UITextField.textDidEndEditingNotification, - object: nil - ); - - // Listen for the keyboard opening/closing - NotificationCenter.default.addObserver( - self, - selector: #selector(self.handleKeyboardNotification), - name: UIResponder.keyboardWillShowNotification, - object: nil - ); - NotificationCenter.default.addObserver( - self, - selector: #selector(self.handleKeyboardNotification), - name: UIResponder.keyboardWillHideNotification, - object: nil - ); - } - - func getCurrentScrollView() -> RCTScrollView? { - if let handle = scrollViewHandles.last { - return self.bridge.uiManager.view(forReactTag: handle as NSNumber) as? RCTScrollView - } - return nil - } - - @objc func activate(_ scrollViewHandle: Int) { - self.scrollViewHandles.append(scrollViewHandle) - } - - @objc func deactivate(_ scrollViewHandle: Int) { - if let handle = scrollViewHandles.last { - if handle != scrollViewHandle { - fatalError("Deactivated scroll view passed invalid handle") - } - - scrollViewHandles.removeLast() - } - else { - fatalError("Deactivated scroll view when none exist") - } - } - - @objc func enable() { - disabled = false - } - - @objc func disable() { - disabled = true - } - - @objc func handleTextDidBeginEditing(_ notification: NSNotification) { - if let field = notification.object as? UITextField { - activeField = field - - // A bit of a hack, but walk up 15 elements and try to - // find a parent view that we should use as the frame with - // which to calculcate scrolling positions. This allows - // the user to construct arbitrary scrolling positions - // without worrying about the size of the input itself - var currentView: UIView = field - for i in 1...45 { - if let superview = currentView.superview { - currentView = superview - if currentView.accessibilityIdentifier == "scroll-to-boundary" { - activeField = currentView - } - } - } - } - else { - activeField = nil - } - } - - @objc func handleTextDidEndEditing(_ notification: NSNotification) { - activeField = nil - } - - @objc func handleKeyboardNotification(_ notification: NSNotification) { - // The keyboard has either opened or closed. We need to update - // the content inset so the user can still scroll all the way - // to bottom and not hide anything behind the keyboard - - if(disabled) { - return; - } - - let begin = (notification.userInfo?[UIResponder.keyboardFrameBeginUserInfoKey] as! NSValue).cgRectValue - let end = (notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as! NSValue).cgRectValue - let curve = (notification.userInfo?[UIResponder.keyboardAnimationCurveUserInfoKey] as? NSNumber)?.uintValue - let duration = (notification.userInfo?[UIResponder.keyboardAnimationDurationUserInfoKey] as? NSNumber)?.doubleValue - - let keyboardHeight = UIScreen.main.bounds.height - end.origin.y - - if let scrollView = self.getCurrentScrollView() { - let bottomPoint = scrollView.convert(CGPoint(x: 0, y: scrollView.bounds.height), to: nil) - let margin = UIScreen.main.bounds.height - bottomPoint.y; - - // The scroll view probably isn't flush to the bottom of - // the screen, so ignore a "margin" which is given to us - // from the JS side - let inset = max(0, keyboardHeight - margin + 10) - scrollView.contentInset = UIEdgeInsets.init( - top: scrollView.contentInset.top, - left: scrollView.contentInset.left, - bottom: inset, - right: scrollView.contentInset.right - ) - - if(notification.name == UIResponder.keyboardWillHideNotification) { - // If the keyboard is closing, make sure the scoll content is - // flush with the new bottom - self.flushifyBottom() - } - - if let activeField = self.activeField, let superview = activeField.superview { - let rect = superview.convert(activeField.frame, to: scrollView.scrollView) - - // debugView.frame = rect - // debugView.backgroundColor = UIColor.red - // debugView.removeFromSuperview() - // scrollView.scrollView.addSubview(debugView) - - scrollView.scrollView.scrollRectToVisible(rect, animated: true) - } - } - } - - func flushifyBottom() { - // If something below the scroll view has closed and - // exposed a "bare" area of the scroll view (blank space - // past the items), make sure to update the content offset - // to scroll it down. Simple shrinking the bottom content - // inset does not automatically "pull" the content down - - if let scrollView = self.getCurrentScrollView() { - let viewableScrollArea = scrollView.bounds.height - scrollView.contentInset.bottom - let contentHeight = scrollView.contentSize.height - let contentOffset = scrollView.scrollView.contentOffset.y - - if(viewableScrollArea > contentHeight - contentOffset) { - let scrollTo = max(scrollView.contentSize.height - scrollView.bounds.height, 0) - scrollView.scrollView.setContentOffset(CGPoint(x: 0, y: scrollTo), animated: true) - } - } - } -} diff --git a/packages/mobile/ios/actual/ACTScrollViewManager.m b/packages/mobile/ios/actual/ACTScrollViewManager.m deleted file mode 100644 index a7f61fa8f3..0000000000 --- a/packages/mobile/ios/actual/ACTScrollViewManager.m +++ /dev/null @@ -1,13 +0,0 @@ -#import -#import - -@interface RCT_EXTERN_MODULE(ACTScrollViewManager, RCTViewManager) - -RCT_EXTERN_METHOD(activate:(int)scrollViewHandle) -RCT_EXTERN_METHOD(deactivate) -RCT_EXTERN_METHOD(setFocused:(int)viewHandle) -RCT_EXTERN_METHOD(setMarginHeight:(float)marginHeight) -RCT_EXTERN_METHOD(setInsetBottom:(float)bottom) -RCT_EXTERN_METHOD(flushifyBottom) - -@end diff --git a/packages/mobile/ios/actual/ACTScrollViewManager.swift b/packages/mobile/ios/actual/ACTScrollViewManager.swift deleted file mode 100644 index eececa3761..0000000000 --- a/packages/mobile/ios/actual/ACTScrollViewManager.swift +++ /dev/null @@ -1,124 +0,0 @@ - -@objc(ACTScrollViewManager) -class ACTScrollViewManager : RCTEventEmitter, UIScrollViewDelegate { - private var scrollView: RCTScrollView? - private var hasListened: Bool = false - private var focusedView: RCTView? - - @objc override func supportedEvents() -> [String] { - return [] - } - - @objc func activate(_ scrollViewHandle: Int) { - DispatchQueue.main.async { - self.scrollView = self.bridge.uiManager.view(forReactTag: scrollViewHandle as NSNumber) as? RCTScrollView - - if(!self.hasListened) { - // Listen for the keyboard opening/closing - NotificationCenter.default.addObserver( - self, - selector: #selector(self.handleKeyboardNotification), - name: UIResponder.keyboardWillShowNotification, - object: nil - ); - NotificationCenter.default.addObserver( - self, - selector: #selector(self.handleKeyboardNotification), - name: UIResponder.keyboardWillHideNotification, - object: nil - ); - - self.hasListened = true - } - } - } - - @objc func deactivate() { - self.scrollView = nil - } - - @objc func setFocused(_ viewHandle: Int) { - DispatchQueue.main.async { - if viewHandle == -1 { - self.focusedView = nil - } - else { - self.focusedView = self.bridge.uiManager.view(forReactTag: viewHandle as NSNumber) as? RCTView - self.makeFocusedViewVisible() - } - } - } - - @objc func setInsetBottom(_ bottom: Float) { - if let scrollView = scrollView { - scrollView.contentInset = UIEdgeInsets.init( - top: scrollView.contentInset.top, - left: scrollView.contentInset.left, - bottom: CGFloat(bottom), - right: scrollView.contentInset.right - ) - } - } - - @objc func handleKeyboardNotification(_ notification: NSNotification) { - // The keyboard has either opened or closed. We need to update - // the content inset so the user can still scroll all the way - // to bottom and not hide anything behind the keyboard - - let begin = (notification.userInfo?[UIResponder.keyboardFrameBeginUserInfoKey] as! NSValue).cgRectValue - let end = (notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as! NSValue).cgRectValue - let curve = (notification.userInfo?[UIResponder.keyboardAnimationCurveUserInfoKey] as? NSNumber)?.uintValue - let duration = (notification.userInfo?[UIResponder.keyboardAnimationDurationUserInfoKey] as? NSNumber)?.doubleValue - - let keyboardHeight = UIScreen.main.bounds.height - end.origin.y - - if let scrollView = self.scrollView { - // The scroll view may not be hitting the bottom of the - // screen. Need to calculate the area which the keyboard - // is covering - let bottom = scrollView.convert(CGPoint(x: 0, y: scrollView.bounds.height), to:nil) - let margin = UIScreen.main.bounds.size.height - bottom.y; - - let inset = max(0, keyboardHeight - margin) - self.setInsetBottom(Float(inset)) - - if(notification.name == UIResponder.keyboardWillHideNotification) { - // If the keyboard is closing, make sure the scoll content is - // flush with the new bottom - // self.flushifyBottom() - } - - self.makeFocusedViewVisible() - } - } - - func makeFocusedViewVisible() { - if let view = focusedView, let scrollView = self.scrollView { - let rect = scrollView.scrollView.convert(view.frame, from: view) - scrollView.scrollView.scrollRectToVisible(rect, animated: true) - } - } - - func flushifyBottom() { - // If something below the scroll view has closed and - // exposed a "bare" area of the scroll view (blank space - // past the items), make sure to update the content offset - // to scroll it down. Simple shrinking the bottom content - // inset does not automatically "pull" the content down - - if let scrollView = self.scrollView { - let viewableScrollArea = scrollView.bounds.height - scrollView.contentInset.bottom - let contentHeight = scrollView.contentSize.height - let contentOffset = scrollView.scrollView.contentOffset.y - - if(viewableScrollArea > contentHeight - contentOffset) { - let scrollTo = max(scrollView.contentSize.height - scrollView.bounds.height, 0) - scrollView.scrollView.setContentOffset(CGPoint(x: 0, y: scrollTo), animated: true) - } - } - } - - deinit { - // TODO: Remove observer - } -} diff --git a/packages/mobile/ios/actual/AppDelegate.h b/packages/mobile/ios/actual/AppDelegate.h deleted file mode 100644 index a9654d5e01..0000000000 --- a/packages/mobile/ios/actual/AppDelegate.h +++ /dev/null @@ -1,16 +0,0 @@ -/** - * Copyright (c) 2015-present, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - */ - -#import - -@interface AppDelegate : UIResponder - -@property (nonatomic, strong) UIWindow *window; - -@end diff --git a/packages/mobile/ios/actual/AppDelegate.m b/packages/mobile/ios/actual/AppDelegate.m deleted file mode 100644 index c243311639..0000000000 --- a/packages/mobile/ios/actual/AppDelegate.m +++ /dev/null @@ -1,88 +0,0 @@ -/** - * Copyright (c) 2015-present, James Long - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - */ - -#import "AppDelegate.h" - -#import -#import -#import -#import -#import -#import "Actual-Swift.h" - -// #import "MBFingerTipWindow.h" - -@implementation AppDelegate - -- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions -{ - NSURL *jsCodeLocation; - -#ifdef DEBUG - jsCodeLocation = [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index" fallbackResource:nil]; -#else - jsCodeLocation = [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"]; -#endif - - // Always show logs, even if release - RCTSetLogThreshold(RCTLogLevelInfo - 1); - - RCTRootView *rootView = [[RCTRootView alloc] initWithBundleURL:jsCodeLocation - moduleName:@"actual" - initialProperties:nil - launchOptions:launchOptions]; - - // [RNSentry installWithRootView:rootView]; - - // Subscribe to in-app purchase notifications - // - // TODO: - // * Unsubscribe when app terminates - // * Handle payment completions after app loads - // * Send basic emails on signup and such - // * Rework the flow so that the user immediately pays first and - // that creates a user in the backend without an email. Then the - // first thing the user has to do is connect it to an email, with - // the option of re-validating the purchase if something went - // wrong. This makes it so that we know we have a successful - // subscription always in the backend account - // - // ACTInAppPurchase *iap = [rootView.bridge moduleForName:@"ACTInAppPurchase"]; - // [iap listen]; - - rootView.backgroundColor = [[UIColor alloc] initWithRed:1.0f green:1.0f blue:1.0f alpha:1]; - - // #ifdef DEBUG -// MBFingerTipWindow *window = [[MBFingerTipWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; -// window.alwaysShowTouches = YES; -// self.window = window; -// #else - self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; -// #endif - - UIViewController *rootViewController = [UIViewController new]; - rootViewController.view = rootView; - self.window.rootViewController = rootViewController; - [self.window makeKeyAndVisible]; - - - UIView *launchScreenView = [[NSBundle mainBundle] loadNibNamed:@"LaunchScreen" owner:self options: nil][0]; - launchScreenView.frame = self.window.bounds; - rootView.loadingView = launchScreenView; - - return YES; -} - -// - (BOOL)application:(UIApplication *)application willTerminate:(UIApplication *)application { -// // TODO: -// // ACTInAppPurchase *iap = [rootView.bridge moduleForName:@"ACTInAppPurchase"]; -// // [iap unlisten]; -// } - -@end diff --git a/packages/mobile/ios/actual/Base.lproj/LaunchScreen.xib b/packages/mobile/ios/actual/Base.lproj/LaunchScreen.xib deleted file mode 100644 index 4bbef41a6d..0000000000 --- a/packages/mobile/ios/actual/Base.lproj/LaunchScreen.xib +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/packages/mobile/ios/actual/Images.xcassets/AppIcon.appiconset/App Store-1024.png b/packages/mobile/ios/actual/Images.xcassets/AppIcon.appiconset/App Store-1024.png deleted file mode 100644 index d26b7b0a70..0000000000 Binary files a/packages/mobile/ios/actual/Images.xcassets/AppIcon.appiconset/App Store-1024.png and /dev/null differ diff --git a/packages/mobile/ios/actual/Images.xcassets/AppIcon.appiconset/App Store-20@2x.png b/packages/mobile/ios/actual/Images.xcassets/AppIcon.appiconset/App Store-20@2x.png deleted file mode 100644 index bdf66a7770..0000000000 Binary files a/packages/mobile/ios/actual/Images.xcassets/AppIcon.appiconset/App Store-20@2x.png and /dev/null differ diff --git a/packages/mobile/ios/actual/Images.xcassets/AppIcon.appiconset/App Store-20@3x.png b/packages/mobile/ios/actual/Images.xcassets/AppIcon.appiconset/App Store-20@3x.png deleted file mode 100644 index ca414e6814..0000000000 Binary files a/packages/mobile/ios/actual/Images.xcassets/AppIcon.appiconset/App Store-20@3x.png and /dev/null differ diff --git a/packages/mobile/ios/actual/Images.xcassets/AppIcon.appiconset/App Store-29@2x.png b/packages/mobile/ios/actual/Images.xcassets/AppIcon.appiconset/App Store-29@2x.png deleted file mode 100644 index 49ab2c419f..0000000000 Binary files a/packages/mobile/ios/actual/Images.xcassets/AppIcon.appiconset/App Store-29@2x.png and /dev/null differ diff --git a/packages/mobile/ios/actual/Images.xcassets/AppIcon.appiconset/App Store-29@3x.png b/packages/mobile/ios/actual/Images.xcassets/AppIcon.appiconset/App Store-29@3x.png deleted file mode 100644 index 6b5d2d2198..0000000000 Binary files a/packages/mobile/ios/actual/Images.xcassets/AppIcon.appiconset/App Store-29@3x.png and /dev/null differ diff --git a/packages/mobile/ios/actual/Images.xcassets/AppIcon.appiconset/App Store-40@2x.png b/packages/mobile/ios/actual/Images.xcassets/AppIcon.appiconset/App Store-40@2x.png deleted file mode 100644 index 87330dadda..0000000000 Binary files a/packages/mobile/ios/actual/Images.xcassets/AppIcon.appiconset/App Store-40@2x.png and /dev/null differ diff --git a/packages/mobile/ios/actual/Images.xcassets/AppIcon.appiconset/App Store-40@3x.png b/packages/mobile/ios/actual/Images.xcassets/AppIcon.appiconset/App Store-40@3x.png deleted file mode 100644 index 1b2f6a16d9..0000000000 Binary files a/packages/mobile/ios/actual/Images.xcassets/AppIcon.appiconset/App Store-40@3x.png and /dev/null differ diff --git a/packages/mobile/ios/actual/Images.xcassets/AppIcon.appiconset/App Store-60@2x.png b/packages/mobile/ios/actual/Images.xcassets/AppIcon.appiconset/App Store-60@2x.png deleted file mode 100644 index 1b2f6a16d9..0000000000 Binary files a/packages/mobile/ios/actual/Images.xcassets/AppIcon.appiconset/App Store-60@2x.png and /dev/null differ diff --git a/packages/mobile/ios/actual/Images.xcassets/AppIcon.appiconset/App Store-60@3x.png b/packages/mobile/ios/actual/Images.xcassets/AppIcon.appiconset/App Store-60@3x.png deleted file mode 100644 index 36a22ea008..0000000000 Binary files a/packages/mobile/ios/actual/Images.xcassets/AppIcon.appiconset/App Store-60@3x.png and /dev/null differ diff --git a/packages/mobile/ios/actual/Images.xcassets/AppIcon.appiconset/Contents.json b/packages/mobile/ios/actual/Images.xcassets/AppIcon.appiconset/Contents.json deleted file mode 100644 index 002aafebb1..0000000000 --- a/packages/mobile/ios/actual/Images.xcassets/AppIcon.appiconset/Contents.json +++ /dev/null @@ -1,62 +0,0 @@ -{ - "images" : [ - { - "size" : "20x20", - "idiom" : "iphone", - "filename" : "App Store-20@2x.png", - "scale" : "2x" - }, - { - "size" : "20x20", - "idiom" : "iphone", - "filename" : "App Store-20@3x.png", - "scale" : "3x" - }, - { - "size" : "29x29", - "idiom" : "iphone", - "filename" : "App Store-29@2x.png", - "scale" : "2x" - }, - { - "size" : "29x29", - "idiom" : "iphone", - "filename" : "App Store-29@3x.png", - "scale" : "3x" - }, - { - "size" : "40x40", - "idiom" : "iphone", - "filename" : "App Store-40@2x.png", - "scale" : "2x" - }, - { - "size" : "40x40", - "idiom" : "iphone", - "filename" : "App Store-40@3x.png", - "scale" : "3x" - }, - { - "size" : "60x60", - "idiom" : "iphone", - "filename" : "App Store-60@2x.png", - "scale" : "2x" - }, - { - "size" : "60x60", - "idiom" : "iphone", - "filename" : "App Store-60@3x.png", - "scale" : "3x" - }, - { - "size" : "1024x1024", - "idiom" : "ios-marketing", - "filename" : "App Store-1024.png", - "scale" : "1x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/packages/mobile/ios/actual/Images.xcassets/Contents.json b/packages/mobile/ios/actual/Images.xcassets/Contents.json deleted file mode 100644 index da4a164c91..0000000000 --- a/packages/mobile/ios/actual/Images.xcassets/Contents.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/packages/mobile/ios/actual/Images.xcassets/Logo.imageset/Coloured.png b/packages/mobile/ios/actual/Images.xcassets/Logo.imageset/Coloured.png deleted file mode 100644 index 5395236b53..0000000000 Binary files a/packages/mobile/ios/actual/Images.xcassets/Logo.imageset/Coloured.png and /dev/null differ diff --git a/packages/mobile/ios/actual/Images.xcassets/Logo.imageset/Coloured2x.png b/packages/mobile/ios/actual/Images.xcassets/Logo.imageset/Coloured2x.png deleted file mode 100644 index f48e5432d3..0000000000 Binary files a/packages/mobile/ios/actual/Images.xcassets/Logo.imageset/Coloured2x.png and /dev/null differ diff --git a/packages/mobile/ios/actual/Images.xcassets/Logo.imageset/Coloured3x.png b/packages/mobile/ios/actual/Images.xcassets/Logo.imageset/Coloured3x.png deleted file mode 100644 index 0ea7738bb0..0000000000 Binary files a/packages/mobile/ios/actual/Images.xcassets/Logo.imageset/Coloured3x.png and /dev/null differ diff --git a/packages/mobile/ios/actual/Images.xcassets/Logo.imageset/Contents.json b/packages/mobile/ios/actual/Images.xcassets/Logo.imageset/Contents.json deleted file mode 100644 index fd1ac4c508..0000000000 --- a/packages/mobile/ios/actual/Images.xcassets/Logo.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "Coloured.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "Coloured2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "Coloured3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/packages/mobile/ios/actual/Info.plist b/packages/mobile/ios/actual/Info.plist deleted file mode 100644 index ac0d4063c4..0000000000 --- a/packages/mobile/ios/actual/Info.plist +++ /dev/null @@ -1,75 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleDisplayName - Actual - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - com.shiftreset.actual - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - APPL - CFBundleShortVersionString - 0.0.144 - CFBundleSignature - ???? - CFBundleVersion - 0.0.144.1 - ITSAppUsesNonExemptEncryption - - LSApplicationCategoryType - - LSRequiresIPhoneOS - - NSAppTransportSecurity - - NSExceptionDomains - - localhost - - NSExceptionAllowsInsecureHTTPLoads - - - - - NSAppleMusicUsageDescription - We don't actually use this - NSBluetoothPeripheralUsageDescription - We don't actually use this - NSCalendarsUsageDescription - We don't actually use this - NSLocationAlwaysAndWhenInUseUsageDescription - We don't actually use this - NSLocationAlwaysUsageDescription - We don't actually use this - NSLocationWhenInUseUsageDescription - We don't actually use this - NSLocationWhenInUseUsageDescription - We don't actually use this - NSMotionUsageDescription - We don't actually use this - NSSpeechRecognitionUsageDescription - We don't actually use this - UILaunchStoryboardName - LaunchScreen - UIRequiredDeviceCapabilities - - armv7 - - UISupportedInterfaceOrientations - - UIInterfaceOrientationPortrait - - UIViewControllerBasedStatusBarAppearance - - UIUserInterfaceStyle - Light - - diff --git a/packages/mobile/ios/actual/MBFingerTipWindow.h b/packages/mobile/ios/actual/MBFingerTipWindow.h deleted file mode 100644 index d028f6d9b0..0000000000 --- a/packages/mobile/ios/actual/MBFingerTipWindow.h +++ /dev/null @@ -1,32 +0,0 @@ -// -// MBFingerTipWindow.h -// -// Copyright 2011-2017 Mapbox, Inc. All rights reserved. -// - -#import - -/** A MBFingerTipWindow gives you automatic presentation mode in your iOS app. Note that currently, this is only designed for the iPad 2 and iPhone 4S (or later), which feature hardware video mirroring support. This library does not do the mirroring for you! -* -* Use MBFingerTipWindow in place of UIWindow and your app will automatically determine when an external screen is available. It will show every touch on-screen with a nice partially-transparent graphic that automatically fades out when the touch ends. */ -@interface MBFingerTipWindow : UIWindow - -/** A custom image to use to show touches on screen. If unset, defaults to a partially-transparent stroked circle. */ -@property (nonatomic, strong) UIImage *touchImage; - -/** The alpha transparency value to use for the touch image. Defaults to 0.5. */ -@property (nonatomic, assign) CGFloat touchAlpha; - -/** The time over which to fade out touch images. Defaults to 0.3. */ -@property (nonatomic, assign) NSTimeInterval fadeDuration; - -/** If using the default touchImage, the color with which to stroke the shape. Defaults to black. */ -@property (nonatomic, strong) UIColor *strokeColor; - -/** If using the default touchImage, the color with which to fill the shape. Defaults to white. */ -@property (nonatomic, strong) UIColor *fillColor; - -/** Sets whether touches should always show regardless of whether the display is mirroring. Defaults to NO. */ -@property (nonatomic, assign) BOOL alwaysShowTouches; - -@end diff --git a/packages/mobile/ios/actual/MBFingerTipWindow.m b/packages/mobile/ios/actual/MBFingerTipWindow.m deleted file mode 100644 index 130a265c1a..0000000000 --- a/packages/mobile/ios/actual/MBFingerTipWindow.m +++ /dev/null @@ -1,401 +0,0 @@ -// -// MBFingerTipWindow.m -// -// Copyright 2011-2017 Mapbox, Inc. All rights reserved. -// - -#import "MBFingerTipWindow.h" - -// This file must be built with ARC. -// -#if !__has_feature(objc_arc) - #error "ARC must be enabled for MBFingerTipWindow.m" -#endif - -@interface MBFingerTipView : UIImageView - -@property (nonatomic, assign) NSTimeInterval timestamp; -@property (nonatomic, assign) BOOL shouldAutomaticallyRemoveAfterTimeout; -@property (nonatomic, assign, getter=isFadingOut) BOOL fadingOut; - -@end - -#pragma mark - - -@interface MBFingerTipOverlayWindow : UIWindow -@end - -#pragma mark - - -@interface MBFingerTipWindow () - -@property (nonatomic, strong) UIWindow *overlayWindow; -@property (nonatomic, assign) BOOL active; -@property (nonatomic, assign) BOOL fingerTipRemovalScheduled; - -- (void)MBFingerTipWindow_commonInit; -- (BOOL)anyScreenIsMirrored; -- (void)updateFingertipsAreActive; -- (void)scheduleFingerTipRemoval; -- (void)cancelScheduledFingerTipRemoval; -- (void)removeInactiveFingerTips; -- (void)removeFingerTipWithHash:(NSUInteger)hash animated:(BOOL)animated; -- (BOOL)shouldAutomaticallyRemoveFingerTipForTouch:(UITouch *)touch; - -@end - -#pragma mark - - -@implementation MBFingerTipWindow - -@synthesize touchImage=_touchImage; - -- (id)initWithCoder:(NSCoder *)decoder -{ - // This covers NIB-loaded windows. - // - self = [super initWithCoder:decoder]; - - if (self != nil) - [self MBFingerTipWindow_commonInit]; - - return self; -} - -- (id)initWithFrame:(CGRect)rect -{ - // This covers programmatically-created windows. - // - self = [super initWithFrame:rect]; - - if (self != nil) - [self MBFingerTipWindow_commonInit]; - - return self; -} - -- (void)MBFingerTipWindow_commonInit -{ - self.strokeColor = [UIColor blackColor]; - self.fillColor = [UIColor whiteColor]; - - self.touchAlpha = 0.5; - self.fadeDuration = 0.3; - - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(screenConnect:) - name:UIScreenDidConnectNotification - object:nil]; - - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(screenDisconnect:) - name:UIScreenDidDisconnectNotification - object:nil]; - - // Set up active now, in case the screen was present before the window was created (or application launched). - // - [self updateFingertipsAreActive]; -} - -- (void)dealloc -{ - [[NSNotificationCenter defaultCenter] removeObserver:self name:UIScreenDidConnectNotification object:nil]; - [[NSNotificationCenter defaultCenter] removeObserver:self name:UIScreenDidDisconnectNotification object:nil]; -} - -#pragma mark - - -- (UIWindow *)overlayWindow -{ - if ( ! _overlayWindow) - { - _overlayWindow = [[MBFingerTipOverlayWindow alloc] initWithFrame:self.frame]; - - _overlayWindow.userInteractionEnabled = NO; - _overlayWindow.windowLevel = UIWindowLevelStatusBar; - _overlayWindow.backgroundColor = [UIColor clearColor]; - _overlayWindow.hidden = NO; - } - - return _overlayWindow; -} - -- (UIImage *)touchImage -{ - if ( ! _touchImage) - { - UIBezierPath *clipPath = [UIBezierPath bezierPathWithRect:CGRectMake(0, 0, 50.0, 50.0)]; - - UIGraphicsBeginImageContextWithOptions(clipPath.bounds.size, NO, 0); - - UIBezierPath *drawPath = [UIBezierPath bezierPathWithArcCenter:CGPointMake(25.0, 25.0) - radius:22.0 - startAngle:0 - endAngle:2 * M_PI - clockwise:YES]; - - drawPath.lineWidth = 2.0; - - [self.strokeColor setStroke]; - [self.fillColor setFill]; - - [drawPath stroke]; - [drawPath fill]; - - [clipPath addClip]; - - _touchImage = UIGraphicsGetImageFromCurrentImageContext(); - - UIGraphicsEndImageContext(); - } - - return _touchImage; -} - -#pragma mark - Setter - -- (void)setAlwaysShowTouches:(BOOL)flag -{ - if (_alwaysShowTouches != flag) - { - _alwaysShowTouches = flag; - - [self updateFingertipsAreActive]; - } -} - -#pragma mark - -#pragma mark Screen notifications - -- (void)screenConnect:(NSNotification *)notification -{ - [self updateFingertipsAreActive]; -} - -- (void)screenDisconnect:(NSNotification *)notification -{ - [self updateFingertipsAreActive]; -} - -- (BOOL)anyScreenIsMirrored -{ - if ( ! [UIScreen instancesRespondToSelector:@selector(mirroredScreen)]) - return NO; - - for (UIScreen *screen in [UIScreen screens]) - { - if ([screen mirroredScreen] != nil) - return YES; - } - - return NO; -} - -- (void)updateFingertipsAreActive; -{ - if (self.alwaysShowTouches || ([[[[NSProcessInfo processInfo] environment] objectForKey:@"DEBUG_FINGERTIP_WINDOW"] boolValue])) - { - self.active = YES; - } - else - { - self.active = [self anyScreenIsMirrored]; - } -} - -#pragma mark - -#pragma mark UIWindow overrides - -- (void)sendEvent:(UIEvent *)event -{ - if (self.active) - { - NSSet *allTouches = [event allTouches]; - - for (UITouch *touch in [allTouches allObjects]) - { - switch (touch.phase) - { - case UITouchPhaseBegan: - case UITouchPhaseMoved: - case UITouchPhaseStationary: - { - MBFingerTipView *touchView = (MBFingerTipView *)[self.overlayWindow viewWithTag:touch.hash]; - - if (touch.phase != UITouchPhaseStationary && touchView != nil && [touchView isFadingOut]) - { - [touchView removeFromSuperview]; - touchView = nil; - } - - if (touchView == nil && touch.phase != UITouchPhaseStationary) - { - touchView = [[MBFingerTipView alloc] initWithImage:self.touchImage]; - [self.overlayWindow addSubview:touchView]; - } - - if ( ! [touchView isFadingOut]) - { - touchView.alpha = self.touchAlpha; - touchView.center = [touch locationInView:self.overlayWindow]; - touchView.tag = touch.hash; - touchView.timestamp = touch.timestamp; - touchView.shouldAutomaticallyRemoveAfterTimeout = [self shouldAutomaticallyRemoveFingerTipForTouch:touch]; - } - break; - } - - case UITouchPhaseEnded: - case UITouchPhaseCancelled: - { - [self removeFingerTipWithHash:touch.hash animated:YES]; - break; - } - } - } - } - - [super sendEvent:event]; - - [self scheduleFingerTipRemoval]; // We may not see all UITouchPhaseEnded/UITouchPhaseCancelled events. -} - -#pragma mark - -#pragma mark Private - -- (void)scheduleFingerTipRemoval -{ - if (self.fingerTipRemovalScheduled) - return; - - self.fingerTipRemovalScheduled = YES; - [self performSelector:@selector(removeInactiveFingerTips) withObject:nil afterDelay:0.1]; -} - -- (void)cancelScheduledFingerTipRemoval -{ - self.fingerTipRemovalScheduled = YES; - [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(removeInactiveFingerTips) object:nil]; -} - -- (void)removeInactiveFingerTips -{ - self.fingerTipRemovalScheduled = NO; - - NSTimeInterval now = [[NSProcessInfo processInfo] systemUptime]; - const CGFloat REMOVAL_DELAY = 0.2; - - for (MBFingerTipView *touchView in [self.overlayWindow subviews]) - { - if ( ! [touchView isKindOfClass:[MBFingerTipView class]]) - continue; - - if (touchView.shouldAutomaticallyRemoveAfterTimeout && now > touchView.timestamp + REMOVAL_DELAY) - [self removeFingerTipWithHash:touchView.tag animated:YES]; - } - - if ([[self.overlayWindow subviews] count] > 0) - [self scheduleFingerTipRemoval]; -} - -- (void)removeFingerTipWithHash:(NSUInteger)hash animated:(BOOL)animated; -{ - MBFingerTipView *touchView = (MBFingerTipView *)[self.overlayWindow viewWithTag:hash]; - if ( ! [touchView isKindOfClass:[MBFingerTipView class]]) - return; - - if ([touchView isFadingOut]) - return; - - BOOL animationsWereEnabled = [UIView areAnimationsEnabled]; - - if (animated) - { - [UIView setAnimationsEnabled:YES]; - [UIView beginAnimations:nil context:nil]; - [UIView setAnimationDuration:self.fadeDuration]; - } - - touchView.frame = CGRectMake(touchView.center.x - touchView.frame.size.width, - touchView.center.y - touchView.frame.size.height, - touchView.frame.size.width * 2, - touchView.frame.size.height * 2); - - touchView.alpha = 0.0; - - if (animated) - { - [UIView commitAnimations]; - [UIView setAnimationsEnabled:animationsWereEnabled]; - } - - touchView.fadingOut = YES; - [touchView performSelector:@selector(removeFromSuperview) withObject:nil afterDelay:self.fadeDuration]; -} - -- (BOOL)shouldAutomaticallyRemoveFingerTipForTouch:(UITouch *)touch; -{ - // We don't reliably get UITouchPhaseEnded or UITouchPhaseCancelled - // events via -sendEvent: for certain touch events. Known cases - // include swipe-to-delete on a table view row, and tap-to-cancel - // swipe to delete. We automatically remove their associated - // fingertips after a suitable timeout. - // - // It would be much nicer if we could remove all touch events after - // a suitable time out, but then we'll prematurely remove touch and - // hold events that are picked up by gesture recognizers (since we - // don't use UITouchPhaseStationary touches for those. *sigh*). So we - // end up with this more complicated setup. - - UIView *view = [touch view]; - view = [view hitTest:[touch locationInView:view] withEvent:nil]; - - while (view != nil) - { - if ([view isKindOfClass:[UITableViewCell class]]) - { - for (UIGestureRecognizer *recognizer in [touch gestureRecognizers]) - { - if ([recognizer isKindOfClass:[UISwipeGestureRecognizer class]]) - return YES; - } - } - - if ([view isKindOfClass:[UITableView class]]) - { - if ([[touch gestureRecognizers] count] == 0) - return YES; - } - - view = view.superview; - } - - return NO; -} - -@end - -#pragma mark - - -@implementation MBFingerTipView - -@end - -#pragma mark - - -@implementation MBFingerTipOverlayWindow - -// UIKit tries to get the rootViewController from the overlay window. Use the Fingertips window instead. This fixes -// issues with status bar behavior, as otherwise the overlay window would control the status bar. - -- (UIViewController *)rootViewController -{ - NSPredicate *predicate = [NSPredicate predicateWithBlock:^BOOL(id evaluatedObject, NSDictionary *bindings) - { - return [evaluatedObject isKindOfClass:[MBFingerTipWindow class]]; - }]; - UIWindow *mainWindow = [[[[UIApplication sharedApplication] windows] filteredArrayUsingPredicate:predicate] firstObject]; - return mainWindow.rootViewController ?: [super rootViewController]; -} - -@end diff --git a/packages/mobile/ios/actual/actual.entitlements b/packages/mobile/ios/actual/actual.entitlements deleted file mode 100644 index 0c67376eba..0000000000 --- a/packages/mobile/ios/actual/actual.entitlements +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/packages/mobile/ios/actual/in-app-message.txt b/packages/mobile/ios/actual/in-app-message.txt deleted file mode 100644 index ca9e4e942b..0000000000 --- a/packages/mobile/ios/actual/in-app-message.txt +++ /dev/null @@ -1,6 +0,0 @@ -Cancel subscription any time. Subscription automatically renews unless -auto-renew is turned off at least 24-hours before the end of the -current period by going to your iOS Account Settings after purchase. -Payment will be charged to iTunes Account. Any unused portion of free -trial period, if offered, will be forfeited when you purchase a -subscription. diff --git a/packages/mobile/ios/actual/main.jsbundle.meta b/packages/mobile/ios/actual/main.jsbundle.meta deleted file mode 100644 index 471644ef2b..0000000000 --- a/packages/mobile/ios/actual/main.jsbundle.meta +++ /dev/null @@ -1 +0,0 @@ -dI8jp>~ \ No newline at end of file diff --git a/packages/mobile/ios/actual/main.m b/packages/mobile/ios/actual/main.m deleted file mode 100644 index 40b00dd996..0000000000 --- a/packages/mobile/ios/actual/main.m +++ /dev/null @@ -1,20 +0,0 @@ - -/** - * Copyright (c) 2015-present, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - */ - -#import - -#import "AppDelegate.h" - -int main(int argc, char * argv[]) { - @autoreleasepool { - return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); - } -} - diff --git a/packages/mobile/ios/actualTests/Info.plist b/packages/mobile/ios/actualTests/Info.plist deleted file mode 100644 index 886825ccc9..0000000000 --- a/packages/mobile/ios/actualTests/Info.plist +++ /dev/null @@ -1,24 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - BNDL - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - 1 - - diff --git a/packages/mobile/ios/actualTests/actualTests.m b/packages/mobile/ios/actualTests/actualTests.m deleted file mode 100644 index 87fc902382..0000000000 --- a/packages/mobile/ios/actualTests/actualTests.m +++ /dev/null @@ -1,70 +0,0 @@ -/** - * Copyright (c) 2015-present, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - */ - -#import -#import - -#import -#import - -#define TIMEOUT_SECONDS 600 -#define TEXT_TO_LOOK_FOR @"Welcome to React Native!" - -@interface actualTests : XCTestCase - -@end - -@implementation actualTests - -- (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/packages/mobile/ios/main.jsbundle.meta b/packages/mobile/ios/main.jsbundle.meta deleted file mode 100644 index 8cdf2fe93b..0000000000 --- a/packages/mobile/ios/main.jsbundle.meta +++ /dev/null @@ -1 +0,0 @@ -^W1AzAz~! \ No newline at end of file diff --git a/packages/mobile/ios/sentry.properties b/packages/mobile/ios/sentry.properties deleted file mode 100644 index f65a697dde..0000000000 --- a/packages/mobile/ios/sentry.properties +++ /dev/null @@ -1,5 +0,0 @@ -defaults.url=https://sentry.io/ -defaults.org=shift-reset-llc -defaults.project=actual-mobile -auth.token=89045e379253474982ed91b6a55d285029f35b2055ea44f784e6ced473e8d639 -cli.executable=node_modules/@sentry/cli/bin/sentry-cli diff --git a/packages/mobile/jest.config.js b/packages/mobile/jest.config.js deleted file mode 100644 index 7c173fdf92..0000000000 --- a/packages/mobile/jest.config.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - preset: "react-native" -}; diff --git a/packages/mobile/metro.config.js b/packages/mobile/metro.config.js deleted file mode 100644 index b14fb5ac88..0000000000 --- a/packages/mobile/metro.config.js +++ /dev/null @@ -1,43 +0,0 @@ -const { getDefaultConfig } = require('metro-config'); -const exclusionList = require('metro-config/src/defaults/exclusionList'); -const path = require('path'); - -module.exports = (async () => { - const defaultConfig = await getDefaultConfig(); - - return { - transformer: {}, - resolver: { - sourceExts: ['mobile.js', 'js', 'ts', 'tsx', 'json'], - blacklistRE: exclusionList([ - /nodejs-assets\/.*/, - /android\/.*/, - /ios\/.*/ - ]), - extraNodeModules: { - 'react-native-svg': path.resolve( - __dirname, - 'node_modules/react-native-svg' - ), - 'react-native-gesture-handler': path.resolve( - __dirname, - 'node_modules/react-native-gesture-handler' - ), - 'react-native-reanimated': path.resolve( - __dirname, - 'node_modules/react-native-reanimated' - ), - 'react-native-sentry': path.resolve( - __dirname, - 'node_modules/react-native-sentry' - ), - 'react-native-status-bar-height': path.resolve( - __dirname, - 'node_modules/react-native-status-bar-height' - ), - 'react-native': path.resolve(__dirname, 'node_modules/react-native') - } - }, - watchFolders: [path.join(__dirname, '../../')] - }; -})(); diff --git a/packages/mobile/nodejs-assets/BUILD_NATIVE_MODULES.txt b/packages/mobile/nodejs-assets/BUILD_NATIVE_MODULES.txt deleted file mode 100644 index d00491fd7e..0000000000 --- a/packages/mobile/nodejs-assets/BUILD_NATIVE_MODULES.txt +++ /dev/null @@ -1 +0,0 @@ -1 diff --git a/packages/mobile/nodejs-assets/nodejs-project/data/default-db.sqlite b/packages/mobile/nodejs-assets/nodejs-project/data/default-db.sqlite deleted file mode 100644 index 5d55b36114..0000000000 Binary files a/packages/mobile/nodejs-assets/nodejs-project/data/default-db.sqlite and /dev/null differ diff --git a/packages/mobile/nodejs-assets/nodejs-project/data/sdsf b/packages/mobile/nodejs-assets/nodejs-project/data/sdsf deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/mobile/nodejs-assets/nodejs-project/main.js b/packages/mobile/nodejs-assets/nodejs-project/main.js deleted file mode 100644 index acd0a5bb67..0000000000 --- a/packages/mobile/nodejs-assets/nodejs-project/main.js +++ /dev/null @@ -1,34 +0,0 @@ -// Rename this sample file to main.js to use on your project. -// The main.js file will be overwritten in updates/reinstalls. - -let rn_bridge = require('rn-bridge'); - -global.fetch = require('node-fetch'); - -let hasInitialized = false; - -rn_bridge.channel.on('message', msg => { - if (!hasInitialized) { - msg = JSON.parse(msg); - - if (msg.type === 'init') { - hasInitialized = true; - let isDev = !!msg.dev; - let version = msg.version; - - if (!isDev) { - const sentry = require('./server-sentry'); - sentry.install(); - } - - process.env.ACTUAL_DATA_DIR = msg.dataDir; - process.env.ACTUAL_DOCUMENT_DIR = msg.documentDir; - - let backend = require('./bundle.mobile.js'); - - backend.init(version, isDev).then(() => { - rn_bridge.channel.send(JSON.stringify({ type: 'ready' })); - }); - } - } -}); diff --git a/packages/mobile/nodejs-assets/nodejs-project/package.json b/packages/mobile/nodejs-assets/nodejs-project/package.json deleted file mode 100644 index 27b440dd63..0000000000 --- a/packages/mobile/nodejs-assets/nodejs-project/package.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "name": "actual-mobile", - "version": "0.0.107", - "description": "actual finance system", - "main": "main.js", - "author": "jlongster", - "license": "", - "dependencies": { - "@sentry/node": "^6.12.0", - "better-sqlite3": "7.4.1", - "node-fetch": "^1.6.3" - } -} diff --git a/packages/mobile/nodejs-assets/nodejs-project/sample-main.js b/packages/mobile/nodejs-assets/nodejs-project/sample-main.js deleted file mode 100644 index ba11bd5b8b..0000000000 --- a/packages/mobile/nodejs-assets/nodejs-project/sample-main.js +++ /dev/null @@ -1,12 +0,0 @@ -// Rename this sample file to main.js to use on your project. -// The main.js file will be overwritten in updates/reinstalls. - -var rn_bridge = require('rn-bridge'); - -// Echo every message received from react-native. -rn_bridge.channel.on('message', (msg) => { - rn_bridge.channel.send(msg); -} ); - -// Inform react-native node is initialized. -rn_bridge.channel.send("Node was initialized."); \ No newline at end of file diff --git a/packages/mobile/nodejs-assets/nodejs-project/sample-package.json b/packages/mobile/nodejs-assets/nodejs-project/sample-package.json deleted file mode 100644 index ae29aef4e5..0000000000 --- a/packages/mobile/nodejs-assets/nodejs-project/sample-package.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "//": - ["Rename this sample file to package.json to use on your project." - , "The sample-package.json file will be overwritten in updates/reinstalls." - ], - "name": "sample-node-project", - "version": "0.0.1", - "description": "node part of the project", - "main": "main.js", - "author": "janeasystems", - "license": "" -} \ No newline at end of file diff --git a/packages/mobile/nodejs-assets/nodejs-project/server-sentry.js b/packages/mobile/nodejs-assets/nodejs-project/server-sentry.js deleted file mode 100644 index f44952da4b..0000000000 --- a/packages/mobile/nodejs-assets/nodejs-project/server-sentry.js +++ /dev/null @@ -1,45 +0,0 @@ -let path = require('path'); -let rn_bridge = require('rn-bridge'); -let Sentry = require('@sentry/node'); -// const connection = require('loot-core/lib-node/platform/server/connection'); - -let __rootdir__ = __dirname || process.cwd(); - -function install() { - Sentry.init({ - dsn: 'https://45f67076016a4fe7bd2af69c4d37afba@sentry.io/1364085', - beforeSend: event => { - var stacktrace = event.exception && event.exception.values[0].stacktrace; - - if (stacktrace && stacktrace.frames) { - stacktrace.frames.forEach(function(frame) { - if (frame.filename.startsWith('/')) { - frame.filename = - 'app:///' + path.relative(__rootdir__, frame.filename); - } - }); - } - - rn_bridge.channel.send( - JSON.stringify({ type: 'internal', subtype: 'captureEvent', event }) - ); - - return null; - }, - beforeBreadcrumb: breadcrumb => { - // Forward it - rn_bridge.channel.send( - JSON.stringify({ - type: 'internal', - subtype: 'captureBreadcrumb', - breadcrumb - }) - ); - return null; - } - }); - - global.SentryClient = Sentry; -} - -module.exports = { install }; diff --git a/packages/mobile/nodejs-assets/nodejs-project/yarn.lock b/packages/mobile/nodejs-assets/nodejs-project/yarn.lock deleted file mode 100644 index 08ad51b4c6..0000000000 --- a/packages/mobile/nodejs-assets/nodejs-project/yarn.lock +++ /dev/null @@ -1,633 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@sentry/core@6.12.0": - version "6.12.0" - resolved "https://registry.yarnpkg.com/@sentry/core/-/core-6.12.0.tgz#bc7c5f0785b6a392d9ad47bd9b1fae3f5389996c" - integrity sha512-mU/zdjlzFHzdXDZCPZm8OeCw7c9xsbL49Mq0TrY0KJjLt4CJBkiq5SDTGfRsenBLgTedYhe5Z/J8Z+xVVq+MfQ== - dependencies: - "@sentry/hub" "6.12.0" - "@sentry/minimal" "6.12.0" - "@sentry/types" "6.12.0" - "@sentry/utils" "6.12.0" - tslib "^1.9.3" - -"@sentry/hub@6.12.0": - version "6.12.0" - resolved "https://registry.yarnpkg.com/@sentry/hub/-/hub-6.12.0.tgz#29e323ab6a95e178fb14fffb684aa0e09707197f" - integrity sha512-yR/UQVU+ukr42bSYpeqvb989SowIXlKBanU0cqLFDmv5LPCnaQB8PGeXwJAwWhQgx44PARhmB82S6Xor8gYNxg== - dependencies: - "@sentry/types" "6.12.0" - "@sentry/utils" "6.12.0" - tslib "^1.9.3" - -"@sentry/minimal@6.12.0": - version "6.12.0" - resolved "https://registry.yarnpkg.com/@sentry/minimal/-/minimal-6.12.0.tgz#cbe20e95056cedb9709d7d5b2119ef95206a9f8c" - integrity sha512-r3C54Q1KN+xIqUvcgX9DlcoWE7ezWvFk2pSu1Ojx9De81hVqR9u5T3sdSAP2Xma+um0zr6coOtDJG4WtYlOtsw== - dependencies: - "@sentry/hub" "6.12.0" - "@sentry/types" "6.12.0" - tslib "^1.9.3" - -"@sentry/node@^6.12.0": - version "6.12.0" - resolved "https://registry.yarnpkg.com/@sentry/node/-/node-6.12.0.tgz#6adf9f8d92d70f38dd4208ef89fe7c8534fe4016" - integrity sha512-hfAU3cX5sNWgqyDQBCOIQOZj21l0w1z2dG4MjmrMMHKrQ18pfMaaOtEwRXMCdjTUlwsK+L3TOoUB23lbezmu1A== - dependencies: - "@sentry/core" "6.12.0" - "@sentry/hub" "6.12.0" - "@sentry/tracing" "6.12.0" - "@sentry/types" "6.12.0" - "@sentry/utils" "6.12.0" - cookie "^0.4.1" - https-proxy-agent "^5.0.0" - lru_map "^0.3.3" - tslib "^1.9.3" - -"@sentry/tracing@6.12.0": - version "6.12.0" - resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-6.12.0.tgz#a05c8985ee7fed7310b029b147d8f9f14f2a2e67" - integrity sha512-u10QHNknPBzbWSUUNMkvuH53sQd5NaBo6YdNPj4p5b7sE7445Sh0PwBpRbY3ZiUUiwyxV59fx9UQ4yVnPGxZQA== - dependencies: - "@sentry/hub" "6.12.0" - "@sentry/minimal" "6.12.0" - "@sentry/types" "6.12.0" - "@sentry/utils" "6.12.0" - tslib "^1.9.3" - -"@sentry/types@6.12.0": - version "6.12.0" - resolved "https://registry.yarnpkg.com/@sentry/types/-/types-6.12.0.tgz#b7395688a79403c6df8d8bb8d81deb8222519853" - integrity sha512-urtgLzE4EDMAYQHYdkgC0Ei9QvLajodK1ntg71bGn0Pm84QUpaqpPDfHRU+i6jLeteyC7kWwa5O5W1m/jrjGXA== - -"@sentry/utils@6.12.0": - version "6.12.0" - resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-6.12.0.tgz#3de261e8d11bdfdc7add64a3065d43517802e975" - integrity sha512-oRHQ7TH5TSsJqoP9Gqq25Jvn9LKexXfAh/OoKwjMhYCGKGhqpDNUIZVgl9DWsGw5A5N5xnQyLOxDfyRV5RshdA== - dependencies: - "@sentry/types" "6.12.0" - tslib "^1.9.3" - -agent-base@6: - version "6.0.2" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" - integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== - dependencies: - debug "4" - -ansi-regex@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" - integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= - -ansi-regex@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" - integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== - -aproba@^1.0.3: - version "1.2.0" - resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" - integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== - -are-we-there-yet@~1.1.2: - version "1.1.7" - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz#b15474a932adab4ff8a50d9adfa7e4e926f21146" - integrity sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g== - dependencies: - delegates "^1.0.0" - readable-stream "^2.0.6" - -base64-js@^1.3.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" - integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== - -better-sqlite3@7.4.1: - version "7.4.1" - resolved "https://registry.yarnpkg.com/better-sqlite3/-/better-sqlite3-7.4.1.tgz#9daab6fb5be44460772992478ccda2db53605b7d" - integrity sha512-sk1kW3PsWE7W7G9qbi5TQxCROlQVR8YWlp4srbyrwN5DrLeamKfrm3JExwOiNSAYyJv8cw5/2HOfvF/ipZj4qg== - dependencies: - bindings "^1.5.0" - prebuild-install "^6.0.1" - tar "^6.1.0" - -bindings@^1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" - integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== - dependencies: - file-uri-to-path "1.0.0" - -bl@^4.0.3: - version "4.1.0" - resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" - integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== - dependencies: - buffer "^5.5.0" - inherits "^2.0.4" - readable-stream "^3.4.0" - -buffer@^5.5.0: - version "5.7.1" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" - integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== - dependencies: - base64-js "^1.3.1" - ieee754 "^1.1.13" - -chownr@^1.1.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.3.tgz#42d837d5239688d55f303003a508230fa6727142" - integrity sha512-i70fVHhmV3DtTl6nqvZOnIjbY0Pe4kAUjwHj8z0zAdgBtYrJyYwLKCCuRBQ5ppkyL0AkN7HKRnETdmdp1zqNXw== - -chownr@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" - integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== - -code-point-at@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" - integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= - -console-control-strings@^1.0.0, console-control-strings@~1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" - integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= - -cookie@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.1.tgz#afd713fe26ebd21ba95ceb61f9a8116e50a537d1" - integrity sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA== - -core-util-is@~1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" - integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== - -debug@4: - version "4.3.2" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.2.tgz#f0a49c18ac8779e31d4a0c6029dfb76873c7428b" - integrity sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw== - dependencies: - ms "2.1.2" - -decompress-response@^4.2.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-4.2.1.tgz#414023cc7a302da25ce2ec82d0d5238ccafd8986" - integrity sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw== - dependencies: - mimic-response "^2.0.0" - -deep-extend@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" - integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== - -delegates@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" - integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= - -detect-libc@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" - integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups= - -emoji-regex@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" - integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== - -encoding@^0.1.11: - version "0.1.13" - resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" - integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== - dependencies: - iconv-lite "^0.6.2" - -end-of-stream@^1.1.0, end-of-stream@^1.4.1: - version "1.4.4" - resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" - integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== - dependencies: - once "^1.4.0" - -expand-template@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-2.0.3.tgz#6e14b3fcee0f3a6340ecb57d2e8918692052a47c" - integrity sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg== - -file-uri-to-path@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" - integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== - -fs-constants@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" - integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== - -fs-minipass@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" - integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== - dependencies: - minipass "^3.0.0" - -gauge@~2.7.3: - version "2.7.4" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" - integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c= - dependencies: - 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" - -github-from-package@0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce" - integrity sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4= - -has-unicode@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" - integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk= - -https-proxy-agent@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz#e2a90542abb68a762e0a0850f6c9edadfd8506b2" - integrity sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA== - dependencies: - agent-base "6" - debug "4" - -iconv-lite@^0.6.2: - version "0.6.3" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" - integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== - dependencies: - safer-buffer ">= 2.1.2 < 3.0.0" - -ieee754@^1.1.13: - version "1.2.1" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" - integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== - -inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: - version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - -ini@~1.3.0: - version "1.3.8" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" - integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== - -is-fullwidth-code-point@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" - integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs= - dependencies: - number-is-nan "^1.0.0" - -is-fullwidth-code-point@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" - integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== - -is-stream@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" - integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= - -isarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= - -lru_map@^0.3.3: - version "0.3.3" - resolved "https://registry.yarnpkg.com/lru_map/-/lru_map-0.3.3.tgz#b5c8351b9464cbd750335a79650a0ec0e56118dd" - integrity sha1-tcg1G5Rky9dQM1p5ZQoOwOVhGN0= - -mimic-response@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-2.1.0.tgz#d13763d35f613d09ec37ebb30bac0469c0ee8f43" - integrity sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA== - -minimist@^1.2.0, minimist@^1.2.3: - version "1.2.5" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" - integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== - -minipass@^3.0.0: - version "3.1.5" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.1.5.tgz#71f6251b0a33a49c01b3cf97ff77eda030dff732" - integrity sha512-+8NzxD82XQoNKNrl1d/FSi+X8wAEWR+sbYAfIvub4Nz0d22plFG72CEVVaufV8PNf4qSslFTD8VMOxNVhHCjTw== - dependencies: - yallist "^4.0.0" - -minizlib@^2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" - integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== - dependencies: - minipass "^3.0.0" - yallist "^4.0.0" - -mkdirp-classic@^0.5.2, mkdirp-classic@^0.5.3: - version "0.5.3" - resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113" - integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== - -mkdirp@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" - integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== - -ms@2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - -napi-build-utils@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/napi-build-utils/-/napi-build-utils-1.0.2.tgz#b1fddc0b2c46e380a0b7a76f984dd47c41a13806" - integrity sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg== - -node-abi@^2.21.0: - version "2.30.1" - resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-2.30.1.tgz#c437d4b1fe0e285aaf290d45b45d4d7afedac4cf" - integrity sha512-/2D0wOQPgaUWzVSVgRMx+trKJRC2UG4SUc4oCJoXx9Uxjtp0Vy3/kt7zcbxHF8+Z/pK3UloLWzBISg72brfy1w== - dependencies: - semver "^5.4.1" - -node-fetch@^1.6.3: - version "1.7.3" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef" - integrity sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ== - dependencies: - encoding "^0.1.11" - is-stream "^1.0.1" - -npmlog@^4.0.1: - version "4.1.2" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" - integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== - dependencies: - 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@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" - integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= - -object-assign@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" - integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= - -once@^1.3.1, once@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= - dependencies: - wrappy "1" - -prebuild-install@^6.0.1: - version "6.1.4" - resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-6.1.4.tgz#ae3c0142ad611d58570b89af4986088a4937e00f" - integrity sha512-Z4vpywnK1lBg+zdPCVCsKq0xO66eEV9rWo2zrROGGiRS4JtueBOdlB1FnY8lcy7JsUud/Q3ijUxyWN26Ika0vQ== - dependencies: - detect-libc "^1.0.3" - expand-template "^2.0.3" - github-from-package "0.0.0" - minimist "^1.2.3" - mkdirp-classic "^0.5.3" - napi-build-utils "^1.0.1" - node-abi "^2.21.0" - npmlog "^4.0.1" - pump "^3.0.0" - rc "^1.2.7" - simple-get "^3.0.3" - tar-fs "^2.0.0" - tunnel-agent "^0.6.0" - -process-nextick-args@~2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" - integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== - -pump@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" - integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - -rc@^1.2.7: - version "1.2.8" - resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" - integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== - dependencies: - deep-extend "^0.6.0" - ini "~1.3.0" - minimist "^1.2.0" - strip-json-comments "~2.0.1" - -readable-stream@^2.0.6: - version "2.3.7" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" - integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== - dependencies: - 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" - -readable-stream@^3.1.1, readable-stream@^3.4.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" - integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - -safe-buffer@^5.0.1, safe-buffer@~5.2.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - -safe-buffer@~5.1.0, safe-buffer@~5.1.1: - version "5.1.2" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== - -"safer-buffer@>= 2.1.2 < 3.0.0": - version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" - integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== - -semver@^5.4.1: - version "5.7.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" - integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== - -set-blocking@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" - integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= - -signal-exit@^3.0.0: - version "3.0.5" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.5.tgz#9e3e8cc0c75a99472b44321033a7702e7738252f" - integrity sha512-KWcOiKeQj6ZyXx7zq4YxSMgHRlod4czeBQZrPb8OKcohcqAXShm7E20kEMle9WBt26hFcAf0qLOcp5zmY7kOqQ== - -simple-concat@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f" - integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q== - -simple-get@^3.0.3: - version "3.1.0" - resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-3.1.0.tgz#b45be062435e50d159540b576202ceec40b9c6b3" - integrity sha512-bCR6cP+aTdScaQCnQKbPKtJOKDp/hj9EDLJo3Nw4y1QksqaovlW/bnptB6/c1e+qmNIDHRK+oXFDdEqBT8WzUA== - dependencies: - decompress-response "^4.2.0" - once "^1.3.1" - simple-concat "^1.0.0" - -string-width@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" - integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= - dependencies: - code-point-at "^1.0.0" - is-fullwidth-code-point "^1.0.0" - strip-ansi "^3.0.0" - -"string-width@^1.0.2 || 2 || 3 || 4": - version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - -string_decoder@^1.1.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== - dependencies: - safe-buffer "~5.2.0" - -string_decoder@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" - integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== - dependencies: - safe-buffer "~5.1.0" - -strip-ansi@^3.0.0, strip-ansi@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" - integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= - dependencies: - ansi-regex "^2.0.0" - -strip-ansi@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - -strip-json-comments@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" - integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= - -tar-fs@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.1.1.tgz#489a15ab85f1f0befabb370b7de4f9eb5cbe8784" - integrity sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng== - dependencies: - chownr "^1.1.1" - mkdirp-classic "^0.5.2" - pump "^3.0.0" - tar-stream "^2.1.4" - -tar-stream@^2.1.4: - version "2.2.0" - resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287" - integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ== - dependencies: - bl "^4.0.3" - end-of-stream "^1.4.1" - fs-constants "^1.0.0" - inherits "^2.0.3" - readable-stream "^3.1.1" - -tar@^6.1.0: - version "6.1.11" - resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.11.tgz#6760a38f003afa1b2ffd0ffe9e9abbd0eab3d621" - integrity sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA== - dependencies: - chownr "^2.0.0" - fs-minipass "^2.0.0" - minipass "^3.0.0" - minizlib "^2.1.1" - mkdirp "^1.0.3" - yallist "^4.0.0" - -tslib@^1.9.3: - version "1.14.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" - integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== - -tunnel-agent@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" - integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= - dependencies: - safe-buffer "^5.0.1" - -util-deprecate@^1.0.1, util-deprecate@~1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= - -wide-align@^1.1.0: - version "1.1.5" - resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3" - integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg== - dependencies: - string-width "^1.0.2 || 2 || 3 || 4" - -wrappy@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= - -yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== diff --git a/packages/mobile/package.json b/packages/mobile/package.json deleted file mode 100644 index c73f30d5eb..0000000000 --- a/packages/mobile/package.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "name": "mobile", - "version": "0.0.101", - "private": true, - "scripts": { - "start": "react-native start", - "bundle": "react-native bundle --entry-file index.js --platform ios --dev false --reset-cache --bundle-output ios/main.jsbundle", - "android": "npx react-native run-android --appId com.shiftreset.actual", - "android:prod": "rm -f ./android/app/build/generated/assets/react/release/index.android.bundle && npx react-native run-android --appId com.shiftreset.actual --variant=release", - "ios": "react-native run-ios", - "test": "jest --passWithNoTests", - "postinstall": "patch-package" - }, - "dependencies": { - "@babel/core": "~7.12.9", - "@babel/runtime": "~7.12.18", - "@expo/react-native-action-sheet": "^3.6.0", - "@jlongster/sentry-metrics-actual": "^0.0.10", - "@react-native-community/masked-view": "0.1.11", - "@react-navigation/bottom-tabs": "^6.0.5", - "@react-navigation/native": "^6.0.2", - "@react-navigation/native-stack": "^6.1.0", - "@reactions/component": "^2.0.2", - "@sentry/react-native": "3.0.2", - "jest": "^28.1.0", - "jsc-android": "^241213.1.0", - "loot-core": "*", - "memoize-one": "^4.0.0", - "metro-react-native-babel-preset": "^0.66.2", - "nodejs-mobile-gyp": "^0.3.1", - "nodejs-mobile-react-native": "0.6.3", - "patch-package": "^6.1.2", - "react": "16.9.0", - "react-native": "0.65.1", - "react-native-codegen": "^0.0.7", - "react-native-gesture-handler": "1.10.3", - "react-native-purchases": "^4.3.1", - "react-native-reanimated": "^2.2.0", - "react-native-safe-area-context": "^3.3.2", - "react-native-screens": "^3.7.2", - "react-native-status-bar-height": "^2.4.0", - "react-native-svg": "10.1.0", - "react-native-version-number": "^0.3.6", - "react-redux": "5.1.1", - "redux": "^3.7.2", - "redux-thunk": "^2.2.0", - "rn-fetch-blob": "^0.11.2" - }, - "devDependencies": { - "rn-snoopy": "^2.0.2" - } -} diff --git a/packages/mobile/patches/nodejs-mobile-react-native+0.6.3.patch b/packages/mobile/patches/nodejs-mobile-react-native+0.6.3.patch deleted file mode 100644 index f44e6a9e90..0000000000 --- a/packages/mobile/patches/nodejs-mobile-react-native+0.6.3.patch +++ /dev/null @@ -1,26 +0,0 @@ -diff --git a/node_modules/nodejs-mobile-react-native/android/build.gradle b/node_modules/nodejs-mobile-react-native/android/build.gradle -index e54f25c..8b0138b 100644 ---- a/node_modules/nodejs-mobile-react-native/android/build.gradle -+++ b/node_modules/nodejs-mobile-react-native/android/build.gradle -@@ -76,9 +76,6 @@ android { - } - - sourceSets { -- main { -- jniLibs.srcDirs 'libnode/bin/' -- } - main.assets.srcDirs += '../install/resources/nodejs-modules' - } - -diff --git a/node_modules/nodejs-mobile-react-native/index.js b/node_modules/nodejs-mobile-react-native/index.js -index 92a53ae..e0ac119 100644 ---- a/node_modules/nodejs-mobile-react-native/index.js -+++ b/node_modules/nodejs-mobile-react-native/index.js -@@ -1,6 +1,6 @@ - - import { NativeModules, NativeAppEventEmitter } from 'react-native'; --var EventEmitter = require('react-native/Libraries/vendor/emitter/EventEmitter').default; -+import EventEmitter from 'react-native/Libraries/vendor/emitter/EventEmitter'; - - const EVENT_CHANNEL = '_EVENTS_'; - diff --git a/packages/mobile/patches/react-native+0.65.1.patch b/packages/mobile/patches/react-native+0.65.1.patch deleted file mode 100644 index 0a3c22ad45..0000000000 --- a/packages/mobile/patches/react-native+0.65.1.patch +++ /dev/null @@ -1,35 +0,0 @@ -diff --git a/node_modules/react-native/Libraries/LayoutAnimation/LayoutAnimation.js b/node_modules/react-native/Libraries/LayoutAnimation/LayoutAnimation.js -index efb12af..64ac43f 100644 ---- a/node_modules/react-native/Libraries/LayoutAnimation/LayoutAnimation.js -+++ b/node_modules/react-native/Libraries/LayoutAnimation/LayoutAnimation.js -@@ -55,7 +55,7 @@ function configureNext( - } - animationCompletionHasRun = true; - clearTimeout(raceWithAnimationId); -- onAnimationDidEnd?.(); -+ onAnimationDidEnd && onAnimationDidEnd(); - }; - const raceWithAnimationId = setTimeout( - onAnimationComplete, -@@ -64,9 +64,9 @@ function configureNext( - - // In Fabric, LayoutAnimations are unconditionally enabled for Android, and - // conditionally enabled on iOS (pending fully shipping; this is a temporary state). -- const FabricUIManager: FabricUIManagerSpec = global?.nativeFabricUIManager; -- if (FabricUIManager?.configureNextLayoutAnimation) { -- global?.nativeFabricUIManager?.configureNextLayoutAnimation( -+ const FabricUIManager: FabricUIManagerSpec = global.nativeFabricUIManager && global.nativeFabricUIManager; -+ if (FabricUIManager && FabricUIManager.configureNextLayoutAnimation) { -+ global.nativeFabricUIManager.configureNextLayoutAnimation && global.nativeFabricUIManager.configureNextLayoutAnimation( - config, - onAnimationComplete, - onAnimationDidFail ?? -@@ -78,7 +78,7 @@ function configureNext( - // This will only run if Fabric is *not* installed. - // If you have Fabric + non-Fabric running in the same VM, non-Fabric LayoutAnimations - // will not work. -- if (UIManager?.configureNextLayoutAnimation) { -+ if (UIManager.configureNextLayoutAnimation && UIManager.configureNextLayoutAnimation) { - UIManager.configureNextLayoutAnimation( - config, - onAnimationComplete ?? function() {}, diff --git a/packages/mobile/react-navigation-tabs+1.0.2.patch b/packages/mobile/react-navigation-tabs+1.0.2.patch deleted file mode 100644 index ccd01659c8..0000000000 --- a/packages/mobile/react-navigation-tabs+1.0.2.patch +++ /dev/null @@ -1,321 +0,0 @@ -diff --git a/node_modules/react-navigation-tabs/src/views/BottomTabBar.js b/node_modules/react-navigation-tabs/src/views/BottomTabBar.js -index 219d26f..be514f3 100644 ---- a/node_modules/react-navigation-tabs/src/views/BottomTabBar.js -+++ b/node_modules/react-navigation-tabs/src/views/BottomTabBar.js -@@ -6,7 +6,8 @@ import { - TouchableWithoutFeedback, - StyleSheet, - View, -- Platform, -+ Keyboard, -+ Platform - } from 'react-native'; - import { SafeAreaView } from '@react-navigation/native'; - -@@ -24,7 +25,7 @@ export type TabBarOptions = { - labelStyle: any, - tabStyle: any, - adaptive?: boolean, -- style: any, -+ style: any - }; - - type Props = TabBarOptions & { -@@ -40,7 +41,7 @@ type Props = TabBarOptions & { - renderIcon: any, - dimensions: { width: number, height: number }, - isLandscape: boolean, -- safeAreaInset: { top: string, right: string, bottom: string, left: string }, -+ safeAreaInset: { top: string, right: string, bottom: string, left: string } - }; - - const majorVersion = parseInt(Platform.Version, 10); -@@ -83,7 +84,67 @@ class TabBarBottom extends React.Component { - showIcon: true, - allowFontScaling: true, - adaptive: isIOS11, -- safeAreaInset: { bottom: 'always', top: 'never' }, -+ safeAreaInset: { bottom: 'always', top: 'never' } -+ }; -+ -+ state = { -+ layout: { height: 0, width: 0 }, -+ keyboard: false, -+ visible: new Animated.Value(1) -+ }; -+ -+ componentDidMount() { -+ if (Platform.OS === 'ios') { -+ Keyboard.addListener('keyboardWillShow', this._handleKeyboardShow); -+ Keyboard.addListener('keyboardWillHide', this._handleKeyboardHide); -+ } else { -+ Keyboard.addListener('keyboardDidShow', this._handleKeyboardShow); -+ Keyboard.addListener('keyboardDidHide', this._handleKeyboardHide); -+ } -+ } -+ -+ componentWillUnmount() { -+ if (Platform.OS === 'ios') { -+ Keyboard.removeListener('keyboardWillShow', this._handleKeyboardShow); -+ Keyboard.removeListener('keyboardWillHide', this._handleKeyboardHide); -+ } else { -+ Keyboard.removeListener('keyboardDidShow', this._handleKeyboardShow); -+ Keyboard.removeListener('keyboardDidHide', this._handleKeyboardHide); -+ } -+ } -+ -+ _handleKeyboardShow = () => -+ this.setState({ keyboard: true }, () => -+ Animated.timing(this.state.visible, { -+ toValue: 0, -+ duration: 150, -+ useNativeDriver: true -+ }).start() -+ ); -+ -+ _handleKeyboardHide = () => -+ Animated.timing(this.state.visible, { -+ toValue: 1, -+ duration: 100, -+ useNativeDriver: true -+ }).start(() => { -+ this.setState({ keyboard: false }); -+ }); -+ -+ _handleLayout = e => { -+ const { layout } = this.state; -+ const { height, width } = e.nativeEvent.layout; -+ -+ if (height === layout.height && width === layout.width) { -+ return; -+ } -+ -+ this.setState({ -+ layout: { -+ height, -+ width -+ } -+ }); - }; - - _renderLabel = ({ route, focused }) => { -@@ -93,7 +154,7 @@ class TabBarBottom extends React.Component { - labelStyle, - showLabel, - showIcon, -- allowFontScaling, -+ allowFontScaling - } = this.props; - - if (showLabel === false) { -@@ -113,7 +174,7 @@ class TabBarBottom extends React.Component { - showIcon && this._shouldUseHorizontalLabels() - ? styles.labelBeside - : styles.labelBeneath, -- labelStyle, -+ labelStyle - ]} - allowFontScaling={allowFontScaling} - > -@@ -136,7 +197,7 @@ class TabBarBottom extends React.Component { - inactiveTintColor, - renderIcon, - showIcon, -- showLabel, -+ showLabel - } = this.props; - if (showIcon === false) { - return null; -@@ -160,7 +221,7 @@ class TabBarBottom extends React.Component { - style={[ - styles.iconWithExplicitHeight, - showLabel === false && !horizontal && styles.iconWithoutLabel, -- showLabel !== false && !horizontal && styles.iconWithLabel, -+ showLabel !== false && !horizontal && styles.iconWithLabel - ]} - /> - ); -@@ -202,7 +263,7 @@ class TabBarBottom extends React.Component { - onTabLongPress, - safeAreaInset, - style, -- tabStyle, -+ tabStyle - } = this.props; - - const { routes } = navigation.state; -@@ -212,49 +273,73 @@ class TabBarBottom extends React.Component { - this._shouldUseHorizontalLabels() && !Platform.isPad - ? styles.tabBarCompact - : styles.tabBarRegular, -- style, -+ style - ]; - - return ( -- -- {routes.map((route, index) => { -- const focused = index === navigation.state.index; -- const scene = { route, focused }; -- const accessibilityLabel = this.props.getAccessibilityLabel({ -- route, -- }); -- const testID = this.props.getTestID({ route }); -- -- const backgroundColor = focused -- ? activeBackgroundColor -- : inactiveBackgroundColor; -- -- const ButtonComponent = -- this.props.getButtonComponent({ route }) || -- TouchableWithoutFeedbackWrapper; -- -- return ( -- onTabPress({ route })} -- onLongPress={() => onTabLongPress({ route })} -- testID={testID} -- accessibilityLabel={accessibilityLabel} -- style={[ -- styles.tab, -- { backgroundColor }, -- this._shouldUseHorizontalLabels() -- ? styles.tabLandscape -- : styles.tabPortrait, -- tabStyle, -- ]} -- > -- {this._renderIcon(scene)} -- {this._renderLabel(scene)} -- -- ); -- })} -- -+ - ); - } - } -@@ -267,47 +352,47 @@ const styles = StyleSheet.create({ - backgroundColor: '#fff', - borderTopWidth: StyleSheet.hairlineWidth, - borderTopColor: 'rgba(0, 0, 0, .3)', -- flexDirection: 'row', -+ flexDirection: 'row' - }, - tabBarCompact: { -- height: COMPACT_HEIGHT, -+ height: COMPACT_HEIGHT - }, - tabBarRegular: { -- height: DEFAULT_HEIGHT, -+ height: DEFAULT_HEIGHT - }, - tab: { - flex: 1, -- alignItems: isIos ? 'center' : 'stretch', -+ alignItems: isIos ? 'center' : 'stretch' - }, - tabPortrait: { - justifyContent: 'flex-end', -- flexDirection: 'column', -+ flexDirection: 'column' - }, - tabLandscape: { - justifyContent: 'center', -- flexDirection: 'row', -+ flexDirection: 'row' - }, - iconWithoutLabel: { -- flex: 1, -+ flex: 1 - }, - iconWithLabel: { -- flex: 1, -+ flex: 1 - }, - iconWithExplicitHeight: { -- height: Platform.isPad ? DEFAULT_HEIGHT : COMPACT_HEIGHT, -+ height: Platform.isPad ? DEFAULT_HEIGHT : COMPACT_HEIGHT - }, - label: { - textAlign: 'center', -- backgroundColor: 'transparent', -+ backgroundColor: 'transparent' - }, - labelBeneath: { - fontSize: 11, -- marginBottom: 1.5, -+ marginBottom: 1.5 - }, - labelBeside: { - fontSize: 12, -- marginLeft: 15, -- }, -+ marginLeft: 15 -+ } - }); - - export default withDimensions(TabBarBottom); diff --git a/packages/mobile/rn-cli.config.js b/packages/mobile/rn-cli.config.js deleted file mode 100644 index 0aa1fe855c..0000000000 --- a/packages/mobile/rn-cli.config.js +++ /dev/null @@ -1,45 +0,0 @@ -let path = require('path'); -let blacklist = require('metro-config/src/defaults/blacklist'); - -module.exports = { - resolver: { - sourceExts: [ - 'mobile.js', - 'js', - 'ts', - 'tsx', - 'json' - ], - // These are special modules that need to be included outside of - // the `mobile` package. We don't hoist react native deps so all - // the normal tooling works for compiling/linking, but a few deps - // need to be included by other packages. They can't see these by - // default because it only searches parent node_modules, not - // siblings. - extraNodeModules: { - 'react-native-svg': path.resolve( - __dirname, - 'node_modules/react-native-svg' - ), - 'react-native-gesture-handler': path.resolve( - __dirname, - 'node_modules/react-native-gesture-handler' - ), - 'react-native-reanimated': path.resolve( - __dirname, - 'node_modules/react-native-reanimated' - ), - 'react-native-sentry': path.resolve( - __dirname, - 'node_modules/react-native-sentry' - ), - 'react-native-status-bar-height': path.resolve( - __dirname, - 'node_modules/react-native-status-bar-height' - ), - 'react-native': path.resolve(__dirname, 'node_modules/react-native') - }, - blacklistRE: blacklist([/nodejs-assets\/.*/, /android\/.*/, /ios\/.*/]) - }, - watchFolders: ['/Users/james/projects/actual'] -}; diff --git a/packages/mobile/sentry.js b/packages/mobile/sentry.js deleted file mode 100644 index 62384bc3f3..0000000000 --- a/packages/mobile/sentry.js +++ /dev/null @@ -1,19 +0,0 @@ -import * as Sentry from '@sentry/react-native'; -import { SentryMetricIntegration } from '@jlongster/sentry-metrics-actual'; - -if (!__DEV__) { - Sentry.init({ - dsn: 'https://45f67076016a4fe7bd2af69c4d37afba@sentry.io/1364085', - ignoreErrors: ['PostError', 'HttpError'], - integrations: [ - new SentryMetricIntegration({ - url: 'https://sync.actualbudget.com/metrics', - metric: 'app-errors', - dimensions: { platform: 'mobile' }, - headers: { Origin: 'app://actual-mobile' } - }) - ] - }); - - global.SentryClient = Sentry; -} diff --git a/packages/mobile/src/components/AccountButton.js b/packages/mobile/src/components/AccountButton.js deleted file mode 100644 index b87a2277c9..0000000000 --- a/packages/mobile/src/components/AccountButton.js +++ /dev/null @@ -1,344 +0,0 @@ -import React, { useState, useEffect } from 'react'; -import { View, Text, Linking, Platform } from 'react-native'; -import { connect } from 'react-redux'; -import Purchases from 'react-native-purchases'; -import * as actions from 'loot-core/src/client/actions'; -import { send } from 'loot-core/src/platform/client/fetch'; -import { - Button, - ButtonWithLoading -} from 'loot-design/src/components/mobile/common'; -import Loading from 'loot-design/src/svg/v1/AnimatedLoading'; -import { once } from 'loot-core/src/shared/async'; -import { captureException } from 'loot-core/src/platform/exceptions'; -import { colors } from 'loot-design/src/style'; -import { setupPurchases, getOfferings, purchase, restore } from '../util/iap'; - -function ExternalLink({ href, children }) { - return ( - Linking.openURL(href)} - > - {children} - - ); -} - -function AccountButton({ - userData: originalUserData, - isLoggedIn, - navigation, - loginUser, - getUserData, - closeBudget, - darkMode, - useDummyPurchaser -}) { - let userData = originalUserData || { offline: true }; - - let [purchaser, setPurchaser] = useState( - useDummyPurchaser ? { entitlements: { active: {}, all: {} } } : null - ); - - let [packages, setPackages] = useState(null); - let [initialized, setInitialized] = useState(useDummyPurchaser); - let [loading, setLoading] = useState(useDummyPurchaser ? 'button' : null); - let [activationFailure, setActivationFailure] = useState(false); - - useEffect(() => { - async function run() { - if (!userData.offline && userData.stripeId == null) { - if (Platform.OS !== 'ios') { - alert( - 'An error occurred loading your account. Please contact help@actualbudget.com for support' - ); - return; - } - - await setupPurchases(userData); - - let purchaser = await Purchases.getPurchaserInfo(); - setPurchaser(purchaser); - - setInitialized(true); - setLoading('button'); - - let packages = await getOfferings(); - if (packages) { - setPackages(packages); - } - - setLoading(null); - } else { - setInitialized(true); - } - } - run(); - }, [userData.offline, userData.stripeId]); - - useEffect(() => { - let listener = navigation.addListener('didFocus', async () => { - if (!userData.offline && userData.stripeId == null) { - await setupPurchases(userData); - let purchaser = await Purchases.getPurchaserInfo(); - setPurchaser(purchaser); - } - }); - - return () => listener.remove(); - }, []); - - if (!initialized || userData.offline) { - return null; - } - - async function onSubscribe() { - if (loading) { - return; - } else if (!packages) { - alert( - 'No subscriptions available, please contact help@actualbudget.com for support' - ); - return; - } - - setLoading('button'); - let result = await purchase(packages[0]); - - // A purchase was made, need to update their account - if (result) { - await onActivate(result.purchaser); - } else { - setLoading(null); - } - } - - async function onActivate(purchaser) { - setLoading('button'); - - let params = {}; - if (!isLoggedIn) { - params = { userId: userData.id, userKey: userData.key }; - } - - let { error } = await send('subscribe-sync-mobile-subscription', params); - - if (error) { - setActivationFailure(true); - setLoading(null); - - // If passed a purchaser, set it. This is to optimize the UX of - // signing up: if `onSubscribe` does this, the user will see a - // confusing message because their account hasn't been set up - // yet. - if (purchaser) { - setPurchaser(purchaser); - } - } else { - setActivationFailure(false); - - // It's possible that the user isn't actually logged in yet (no - // user registered in the backend) because they are creating an - // account - if (!isLoggedIn) { - loginUser(userData.id, userData.key); - } else { - await getUserData(); - setLoading(null); - - if (purchaser) { - setPurchaser(purchaser); - } - } - } - } - - function onManage() { - if (Platform.OS === 'ios') { - Linking.openURL('https://apps.apple.com/account/subscriptions'); - } else { - alert( - 'Your subscription is managed through Google Play. Manage your subscription through the Play Store.' - ); - } - } - - async function onRestore() { - if (loading) { - return; - } - - setLoading('button'); - let purchaser = await restore(); - if (purchaser) { - setPurchaser(purchaser); - } - - // In case the subscription has expired but the user's account - // doesn't reflect it yet, this forces it to check subscription status - await send('subscribe-sync-mobile-subscription', {}); - await getUserData(); - - setLoading(null); - } - - async function onManageWeb() { - setLoading('button'); - let tempId = await send('make-user-temp-id'); - setLoading(null); - - let url = 'https://actualbudget.com/account?tempId=' + tempId; - Linking.openURL(url); - } - - let buttonProps = { - primary: true, - loading: loading === 'button', - padding: 3, - loadingColor: darkMode ? colors.n1 : 'white', - style: darkMode ? { backgroundColor: 'white' } : null, - contentStyle: darkMode ? { borderWidth: 0 } : null, - textStyle: { color: darkMode ? colors.n1 : 'white', fontSize: 17 } - }; - - let store = Platform.OS === 'ios' ? 'Apple' : 'Google Play'; - let content; - - if (purchaser) { - // A bunch of logic. Really annoying to have to sync mobile - // subscriptions to our own accounts. - if ( - userData.status === 'subscribed' || - userData.status === 'trial' || - userData.status === 'pending_payment' - ) { - if ( - purchaser.entitlements.active['Actual'] || - userData.status === 'pending_payment' - ) { - content = ( - - Manage subscription - - ); - } else { - content = ( - - Restore purchase - - ); - } - } else if (activationFailure) { - // Something went wrong while registering the subscription - // with the server after purchasing it. Ask them to try - // again - content = ( - - - Something went wrong activating your subscription after purchase. - You need to activate it. - - - onActivate()}> - Activate subscription - - - ); - } else { - // Note that we will show this even in the case where the user - // has an active Actual entitlement (subscription). That is tied - // to their device, but the source of truth is their Actual - // account. In the case where they've already subscribed, we'll show a - // subscribe button and when clicked the OS will tell them they've - // already subscribe. - - let price = packages ? packages[0].product.price_string : '...'; - - content = ( - - - - Subscribe to Actual for {price} / month - - - - - After 1 month, a {price} purchase will be applied to your iTunes - account. Subscriptions will automatically renew unless canceled - within 24-hours before the end of the current period. You can cancel - anytime with your iTunes account setting. For more information, see - our{' '} - - Terms of Service - {' '} - and{' '} - - Privacy Policy - - . - - - ); - } - } else if (userData.stripeId) { - content = ( - - Manage subscription - - ); - } - - return ( - - {loading === 'global' ? ( - - - - ) : ( - <> - {purchaser && purchaser.entitlements.active['Actual'] && ( - - Your subscription is managed through {store}. - - )} - - {content} - - )} - - ); -} - -export default connect( - (state, props) => ({ - userData: props.userData || state.user.data, - isLoggedIn: !!state.user.data - }), - actions -)(AccountButton); diff --git a/packages/mobile/src/components/App.js b/packages/mobile/src/components/App.js deleted file mode 100644 index 8070e7b51c..0000000000 --- a/packages/mobile/src/components/App.js +++ /dev/null @@ -1,129 +0,0 @@ -import React from 'react'; -import { Text, View, Image, StatusBar } from 'react-native'; -import { connect } from 'react-redux'; -import { bindActionCreators } from 'redux'; -import { - SafeAreaProvider, - initialWindowMetrics -} from 'react-native-safe-area-context'; -import * as actions from 'loot-core/src/client/actions'; -import { send } from 'loot-core/src/platform/client/fetch'; -import { colors } from 'loot-design/src/style'; -import AnimatedLoading from 'loot-design/src/svg/v1/AnimatedLoading'; -import ManagementApp from './manager/ManagementApp'; -import FinancesApp from './FinancesApp'; -import logo from '../../assets/logo.png'; - -class App extends React.Component { - state = { initializing: true }; - - async componentDidMount() { - // Load any global prefs - let globalPrefs = await this.props.loadGlobalPrefs(); - - if (global.SentryClient) { - if (globalPrefs.userId) { - global.SentryClient.setUser({ - id: globalPrefs.userId, - ip_address: '{{auto}}' - }); - } else { - // For some reason, we need to do this for mobile. We don't need to do - // this on desktop, so there must be a slight difference (or bug) in the - // SDK - global.SentryClient.setUser({ - ip_address: '{{auto}}' - }); - } - } - - const budgetId = await send('get-last-opened-backup'); - if (budgetId) { - await this.props.loadBudget(budgetId); - } - - this.setState({ initializing: false }); - } - - render() { - let { loadingText } = this.props; - let { initializing } = this.state; - - let content; - let showBackground = true; - if (!initializing) { - if (!this.props.budgetId) { - content = ; - } else { - content = ; - showBackground = false; - } - } - - return ( - - - - {showBackground && ( - <> - - {(initializing || loadingText != null) && ( - - )} - - - - {(initializing || loadingText != null) && ( - - {loadingText !== '' && loadingText !== null && ( - - {loadingText} - - )} - - - )} - - - )} - {content} - - - ); - } -} - -export default connect( - state => ({ - budgetId: state.prefs.local && state.prefs.local.id, - loadingText: state.app.loadingText - }), - dispatch => bindActionCreators(actions, dispatch) -)(App); diff --git a/packages/mobile/src/components/FinancesApp.js b/packages/mobile/src/components/FinancesApp.js deleted file mode 100644 index 2faa514778..0000000000 --- a/packages/mobile/src/components/FinancesApp.js +++ /dev/null @@ -1,286 +0,0 @@ -import React, { useEffect, useRef } from 'react'; -import { AppState } from 'react-native'; -import { RectButton } from 'react-native-gesture-handler'; -import { connect } from 'react-redux'; - -import { ActionSheetProvider } from '@expo/react-native-action-sheet'; -import { createBottomTabNavigator } from '@react-navigation/bottom-tabs'; -import { NavigationContainer } from '@react-navigation/native'; -import { createNativeStackNavigator } from '@react-navigation/native-stack'; - -import * as actions from 'loot-core/src/client/actions'; -import { SpreadsheetProvider } from 'loot-core/src/client/SpreadsheetProvider'; -import checkForUpgradeNotifications from 'loot-core/src/client/upgrade-notifications'; -import { AmountAccessoryView } from 'loot-design/src/components/mobile/AmountInput'; -import { BudgetAccessoryView } from 'loot-design/src/components/mobile/budget'; -import { Button } from 'loot-design/src/components/mobile/common'; -import InputAccessoryView from 'loot-design/src/components/mobile/InputAccessoryView'; -import { colors } from 'loot-design/src/style'; -import Add from 'loot-design/src/svg/v1/Add'; -import Cog from 'loot-design/src/svg/v1/Cog'; -import PiggyBank from 'loot-design/src/svg/v1/PiggyBank'; -import Wallet from 'loot-design/src/svg/v1/Wallet'; - -import Accounts from './accounts'; -import Account from './accounts/Account'; -import Budget from './budget'; -import ModalListener from './ModalListener'; -import AccountSelect from './modals/AccountSelect'; -import AddAccount from './modals/AddAccount'; -import AddCategory from './modals/AddCategory'; -import AddLocalAccount from './modals/AddLocalAccount'; -import CategorySelect from './modals/CategorySelect'; -import CreateEncryptionKey from './modals/CreateEncryptionKey'; -import GenericSearchableSelect from './modals/GenericSearchableSelect'; -import GenericSelect from './modals/GenericSelect'; -import ConfigureLinkedAccounts from './modals/link-accounts/ConfigureLinkedAccounts'; -import SelectLinkedAccounts from './modals/link-accounts/SelectLinkedAccounts'; -import PayeeSelect from './modals/PayeeSelect'; -import Notifications from './Notifications'; -import Settings from './Settings'; -import Transaction from './transactions/Transaction'; - -function useForegroundSync(sync) { - let appState = useRef(null); - - useEffect(() => { - let onChange = nextAppState => { - let state = appState.current; - - // Detect when the app is coming into the foreground - if (state && state === 'background' && nextAppState === 'active') { - sync(); - } - - appState.current = nextAppState; - }; - - AppState.addEventListener('change', onChange); - - return () => { - AppState.removeEventListener('change', onChange); - }; - }, [sync]); -} - -const AddAccountStack = createNativeStackNavigator(); -function AddAccountRoutes() { - return ( - - - - - - - ); -} - -const AccountsStack = createNativeStackNavigator(); -function AccountRoutes() { - return ( - - ({ - headerStyle: { - backgroundColor: colors.b2 - }, - headerTintColor: '#fff', - headerRight: () => ( - - ) - })} - /> - ({ - title: route.params.title || 'Account', - headerShadowVisible: false, - headerRight: () => ( - { - navigation.navigate('Transaction', { - transactions: null, - accountId: route.params.id - }); - }} - style={{ padding: 10 }} - > - - - ) - })} - /> - - ); -} - -const AppTabs = createBottomTabNavigator(); -function AppRoutes() { - return ( - - ( - - ) - }} - /> - ({ - tabLongPress: () => { - navigation.navigate('Transaction', { - transactions: null, - accountId: null - }); - } - })} - options={{ - title: 'Accounts', - tabBarIcon: ({ color }) => ( - - ) - }} - /> - ( - - ) - }} - /> - - ); -} - -const RootStack = createNativeStackNavigator(); -function Routes() { - return ( - - - - - - - - - - - - - ); -} - -function FinancesApp({ getAccounts, sync, addNotification, resetSync }) { - let navigatorRef = useRef(null); - - useEffect(() => { - // Get the accounts and check if any exist. If there are no - // accounts, we want to redirect the user to the Accounts - // screen which will prompt them to add an account - getAccounts().then(accounts => { - if (accounts.length === 0) { - navigatorRef.current.navigate('App', { screen: 'AccountsStack' }); - } - }); - - // Check for upgrade notifications - checkForUpgradeNotifications(addNotification, resetSync); - - sync(); - }, []); - - useForegroundSync(sync); - - return ( - - - - - - - - - - - - - - - - - - - - ); -} - -export default connect(null, actions)(FinancesApp); diff --git a/packages/mobile/src/components/ModalListener.js b/packages/mobile/src/components/ModalListener.js deleted file mode 100644 index ccf4e8a198..0000000000 --- a/packages/mobile/src/components/ModalListener.js +++ /dev/null @@ -1,44 +0,0 @@ -import React, { useLayoutEffect } from 'react'; -import { CommonActions } from '@react-navigation/native'; -import { connect } from 'react-redux'; -import * as actions from 'loot-core/src/client/actions'; - -function ModalListener({ modalStack, navigatorRef, popModal }) { - useLayoutEffect(() => { - if (modalStack.length > 0) { - let last = modalStack[modalStack.length - 1]; - let { name, options = {} } = last; - - switch (name) { - case 'create-encryption-key': - navigatorRef.current.dispatch( - CommonActions.navigate('CreateEncryptionKeyModal', options) - ); - popModal(); - break; - case 'fix-encryption-key': - navigatorRef.current.dispatch( - CommonActions.navigate('FixEncryptionKeyModal', options) - ); - popModal(); - break; - case 'settings': - navigatorRef.current.dispatch( - CommonActions.navigate('Settings', options) - ); - popModal(); - break; - default: - } - } - }, [modalStack]); - - return null; -} - -export default connect( - state => ({ - modalStack: state.modals.modalStack - }), - actions -)(ModalListener); diff --git a/packages/mobile/src/components/Notifications.js b/packages/mobile/src/components/Notifications.js deleted file mode 100644 index a9193583bf..0000000000 --- a/packages/mobile/src/components/Notifications.js +++ /dev/null @@ -1,208 +0,0 @@ -import React, { useState, useEffect, useMemo } from 'react'; -import { connect } from 'react-redux'; -import * as actions from 'loot-core/src/client/actions'; -import { View, Text, Linking } from 'react-native'; -import { - Button, - ButtonWithLoading -} from 'loot-design/src/components/mobile/common'; -import Stack from 'loot-design/src/components/Stack'; -import Delete from 'loot-design/src/svg/Delete'; -import { styles, colors } from 'loot-design/src/style'; - -function compileMessage(message, actions, color, setLoading, onRemove) { - return ( - - {message.split(/\n\n/).map(paragraph => { - let parts = paragraph.split(/(\[[^\]]*\]\([^)]*\))/g); - - return ( - - {parts.map(part => { - let match = part.match(/\[([^\]]*)\]\(([^)]*)\)/); - if (match) { - let [_, text, href] = match; - - if (href[0] === '#') { - let actionName = href.slice(1); - return ( - // eslint-disable-next-line - { - if (actions[actionName]) { - setLoading(true); - await actions[actionName](); - onRemove(); - } - }} - > - {text} - - ); - } - - return ( - Linking.openURL(href)} href={match[2]}> - {match[1]} - - ); - } - return {part}; - })} - - ); - })} - - ); -} - -function Link({ href, children, onOpen }) { - return ( - onOpen(href)} - > - {children} - - ); -} - -function Notification({ notification, onRemove }) { - let { - id, - type, - title, - message, - messageActions, - sticky, - internal, - button - } = notification; - - let [loading, setLoading] = useState(false); - - useEffect(() => { - if (!sticky) { - setTimeout(onRemove, 6500); - } - }, []); - - let positive = type === 'message'; - let error = type === 'error'; - let color = positive ? colors.g3 : error ? colors.r3 : colors.y2; - - let processedMessage = useMemo( - () => compileMessage(message, messageActions, color, setLoading, onRemove), - [message, messageActions, color] - ); - - return ( - - - {title && ( - - {title} - - )} - {processedMessage} - {button && ( - { - setLoading(true); - await button.action(); - onRemove(); - setLoading(false); - }} - style={{ - backgroundColor: 'transparent', - fontSize: 15, - flexShrink: 0 - }} - contentStyle={{ - padding: 7, - borderWidth: 1, - borderColor: positive ? colors.g5 : error ? colors.r4 : colors.y3 - }} - textStyle={{ color }} - > - {button.title} - - )} - - {sticky && ( - - )} - - ); -} - -function Notifications({ - notifications, - addNotification, - removeNotification, - style -}) { - return ( - - {notifications.map(note => ( - { - if (note.onClose) { - note.onClose(); - } - removeNotification(note.id); - }} - /> - ))} - - ); -} - -export default connect( - state => ({ notifications: state.notifications.notifications }), - actions -)(Notifications); diff --git a/packages/mobile/src/components/Settings.js b/packages/mobile/src/components/Settings.js deleted file mode 100644 index b850349b5e..0000000000 --- a/packages/mobile/src/components/Settings.js +++ /dev/null @@ -1,309 +0,0 @@ -import React from 'react'; -import { View, Text, ScrollView } from 'react-native'; -import { RectButton } from 'react-native-gesture-handler'; -import { connect } from 'react-redux'; - -import * as actions from 'loot-core/src/client/actions'; -import { listen } from 'loot-core/src/platform/client/fetch'; -import { numberFormats } from 'loot-core/src/shared/util'; -import { - Button, - ButtonWithLoading -} from 'loot-design/src/components/mobile/common'; -import FocusAwareStatusBar from 'loot-design/src/components/mobile/FocusAwareStatusBar'; -import { - FieldLabel, - TapField, - EDITING_PADDING -} from 'loot-design/src/components/mobile/forms'; -import { colors, styles } from 'loot-design/src/style'; -import ExpandArrow from 'loot-design/src/svg/ExpandArrow'; - -import AccountButton from './AccountButton'; - -let dateFormats = [ - { value: 'MM/dd/yyyy', label: 'MM/DD/YYYY' }, - { value: 'dd/MM/yyyy', label: 'DD/MM/YYYY' }, - { value: 'yyyy-MM-dd', label: 'YYYY-MM-DD' }, - { value: 'MM.dd.yyyy', label: 'MM.DD.YYYY' }, - { value: 'dd.MM.yyyy', label: 'DD.MM.YYYY' } -]; - -function getValueLabel(data, value) { - let item = data.find(f => f.value === value); - return item ? item.label : null; -} - -class Settings extends React.Component { - state = { loading: true, expanded: false, resetting: false }; - static navigationOptions = { - title: 'Settings' - }; - - async componentDidMount() { - this.unlisten = listen('prefs-updated', () => { - this.props.loadPrefs(); - }); - - await this.props.getUserData(); - this.setState({ loading: false }); - this.props.loadPrefs(); - } - - componentWillUnmount() { - this.unlisten(); - } - - closeBudget = () => { - this.props.closeBudget(); - }; - - selectDateFormat = () => { - this.props.navigation.navigate('GenericSelectModal', { - title: 'Choose a date format', - items: dateFormats, - snapPoints: [450], - onSelect: value => { - this.props.savePrefs({ dateFormat: value }); - } - }); - }; - - selectNumberFormat = () => { - this.props.navigation.navigate('GenericSelectModal', { - title: 'Choose a number format', - items: numberFormats, - snapPoints: [450], - onSelect: value => { - this.props.savePrefs({ numberFormat: value }); - } - }); - }; - - resetSync = async () => { - this.setState({ resetting: true }); - await this.props.resetSync(); - this.setState({ resetting: false }); - }; - - render() { - let { prefs, sync, userData, navigation } = this.props; - let { loading, expanded, resetting } = this.state; - let dateFormat = prefs.dateFormat || 'MM/dd/yyyy'; - let numberFormat = prefs.numberFormat || 'comma-dot'; - - return ( - - - - - {prefs.budgetName} - - - - - - - - - - - {userData && ( - - - - {!userData.offline ? ( - - Signed in as{' '} - {userData.email} - - ) : ( - Offline - )} - - - - {userData.status === 'trial' && ( - - - Trial ends in{' '} - - {userData.trialDaysLeft} days - - . - - - )} - - {userData.status === 'pending_payment' && ( - - - We had a problem with your latest payment. Please update - your payment method. Your subscription will be cancelled - after 2 weeks. - - - )} - - - - - )} - - - {prefs.encryptKeyId ? ( - - - - Encryption is turned on. - {' '} - Your data is encrypted with a key that only you have before - sending it out to the cloud . Local data remains unencrypted so if - you forget your password you can re-encrypt it. - - - - ) : ( - - - Encryption is not enabled. Any data on our servers is still stored - safely and securely, but it's not end-to-end encrypted which means - we have the ability to read it (but we won't). If you want, you - can use a password to encrypt your data on our servers. - - - - )} - - {userData && ( - - - - {expanded && ( - - - Reset sync will - remove all local data used to track changes for syncing, and - create a fresh sync id on our server. This file on other - devices will have to be re-downloaded to use the new sync id. - Use this if there is a problem with syncing and you want to - start fresh. - - - - Reset sync - - - - Sync ID: {prefs.groupId || '(not synced)'} - - - )} - - )} - - ); - } -} - -export default connect( - state => ({ prefs: state.prefs.local, userData: state.user.data }), - actions -)(Settings); diff --git a/packages/mobile/src/components/SyncRefresh.js b/packages/mobile/src/components/SyncRefresh.js deleted file mode 100644 index 10e9001920..0000000000 --- a/packages/mobile/src/components/SyncRefresh.js +++ /dev/null @@ -1,14 +0,0 @@ -import React, { useState } from 'react'; -import { View, Text } from 'react-native'; - -export default function SyncRefresh({ onSync, children }) { - let [syncing, setSyncing] = useState(false); - - async function onSync_() { - setSyncing(true); - await onSync(); - setSyncing(false); - } - - return children({ refreshing: syncing, onRefresh: onSync_ }); -} diff --git a/packages/mobile/src/components/accounts/Account.js b/packages/mobile/src/components/accounts/Account.js deleted file mode 100644 index bd1a591651..0000000000 --- a/packages/mobile/src/components/accounts/Account.js +++ /dev/null @@ -1,263 +0,0 @@ -import React from 'react'; -import { RefreshControl } from 'react-native'; -import { connect } from 'react-redux'; -import { bindActionCreators } from 'redux'; -import debounce from 'debounce'; -import memoizeOne from 'memoize-one'; -import { connectActionSheet } from '@expo/react-native-action-sheet'; -import { send, listen } from 'loot-core/src/platform/client/fetch'; -import * as actions from 'loot-core/src/client/actions'; -import { AccountDetails } from 'loot-design/src/components/mobile/account'; -import FocusAwareStatusBar from 'loot-design/src/components/mobile/FocusAwareStatusBar'; -import * as queries from 'loot-core/src/client/queries'; -import { pagedQuery } from 'loot-core/src/client/query-helpers'; - -import { - getSplit, - ungroupTransactions -} from 'loot-core/src/shared/transactions'; -import SyncRefresh from '../SyncRefresh'; -import { - SchedulesProvider, - useCachedSchedules -} from 'loot-core/src/client/data-hooks/schedules'; -import { isPreviewId } from 'loot-design/src/components/mobile/transaction'; - -const getSchedulesTransform = memoizeOne((id, hasSearch) => { - let filter = queries.getAccountFilter(id, '_account'); - - // Never show schedules on these pages - if (hasSearch) { - filter = { id: null }; - } - - return q => { - q = q.filter({ $and: [filter, { '_account.closed': false }] }); - return q.orderBy({ next_date: 'desc' }); - }; -}); - -function PreviewTransactions({ accountId, children }) { - let scheduleData = useCachedSchedules(); - - if (scheduleData == null) { - return children(null); - } - - let schedules = scheduleData.schedules.filter( - s => - !s.completed && - ['due', 'upcoming', 'missed'].includes(scheduleData.statuses.get(s.id)) - ); - - return children( - schedules.map(schedule => ({ - id: 'preview/' + schedule.id, - payee: schedule._payee, - account: schedule._account, - amount: schedule._amount, - date: schedule.next_date, - notes: scheduleData.statuses.get(schedule.id), - schedule: schedule.id - })) - ); -} - -class Account extends React.Component { - state = { transactions: [], filter: '' }; - - async componentDidMount() { - this.unlisten = listen('sync-event', ({ type, tables }) => { - if (type === 'applied') { - if ( - tables.includes('transactions') || - tables.includes('category_mapping') || - tables.includes('payee_mapping') - ) { - this.paged && this.paged.run(); - } - - if (tables.includes('payees') || tables.includes('payee_mapping')) { - this.props.getPayees(); - } - } - }); - - if (this.props.categories.length === 0) { - await this.props.getCategories(); - } - if (this.props.accounts.length === 0) { - await this.props.getAccounts(); - } - - await this.props.initiallyLoadPayees(); - await this.fetchTransactions(); - - const { id } = this.props.route.params || {}; - const account = this.props.accounts.find(acct => acct.id === id); - this.props.navigation.setParams({ title: account.name }); - this.props.markAccountRead(id); - } - - componentWillUnmount() { - this.unlisten(); - } - - isNewTransaction = id => { - return this.props.newTransactions.includes(id); - }; - - onSearch = async text => { - this.paged.unsubscribe(); - this.setState({ filter: text }, this.onSearchDone); - }; - - onSearchDone = debounce(() => { - if (this.state.filter === '') { - this.updateQuery(this.currentQuery); - } else { - this.updateQuery( - queries.makeTransactionSearchQuery( - this.currentQuery, - this.state.filter, - this.props.dateFormat - ) - ); - } - }, 150); - - fetchTransactions = async () => { - let query = this.makeRootQuery(); - this.rootQuery = this.currentQuery = query; - this.updateQuery(query); - }; - - makeRootQuery = () => { - const { id } = this.props.route.params || {}; - return queries.makeTransactionsQuery(id); - }; - - updateQuery(query) { - if (this.paged) { - this.paged.unsubscribe(); - } - - this.paged = pagedQuery( - query.options({ splits: 'grouped' }).select('*'), - data => { - this.setState({ transactions: data }); - }, - { pageCount: 150, mapper: ungroupTransactions } - ); - } - - onSelectTransaction = transaction => { - const { transactions } = this.state; - - if (isPreviewId(transaction.id)) { - let parts = transaction.id.split('/'); - let scheduleId = parts[1]; - - let options = ['Post transaction', 'Skip scheduled date', 'Cancel']; - let cancelButtonIndex = 2; - - this.props.showActionSheetWithOptions( - { - options, - cancelButtonIndex - }, - buttonIndex => { - switch (buttonIndex) { - case 0: - // Post - send('schedule/post-transaction', { id: scheduleId }); - break; - case 1: - // Skip - send('schedule/skip-next-date', { id: scheduleId }); - break; - default: - } - } - ); - } else { - let trans = [transaction]; - if (transaction.parent_id || transaction.is_parent) { - let index = transactions.findIndex( - t => t.id === (transaction.parent_id || transaction.id) - ); - trans = getSplit(transactions, index); - } - - this.props.navigation.navigate('Transaction', { - transactions: trans - }); - } - }; - - onRefresh = async () => { - const { id } = this.props.route.params || {}; - await this.props.syncAndDownload(); - }; - - render() { - let { categories, accounts, payees, prefs } = this.props; - let { transactions, filter } = this.state; - let { id } = this.props.route.params || {}; - let account = accounts.find(acct => acct.id === id); - let balance = queries.accountBalance(account); - let numberFormat = prefs.numberFormat || 'comma-dot'; - - return ( - - {({ refreshing, onRefresh }) => ( - - - - {prependTransactions => - prependTransactions == null ? null : ( - - } - onLoadMore={() => this.paged && this.paged.fetchNext()} - onSearch={this.onSearch} - onSelectTransaction={this.onSelectTransaction} - /> - ) - } - - - )} - - ); - } -} - -export default connect( - state => ({ - accounts: state.queries.accounts, - payees: state.queries.payees, - newTransactions: state.queries.newTransactions, - categories: state.queries.categories.list, - prefs: state.prefs.local, - dateFormat: state.prefs.local.dateFormat || 'MM/dd/yyyy' - }), - dispatch => bindActionCreators(actions, dispatch) -)(connectActionSheet(Account)); diff --git a/packages/mobile/src/components/accounts/index.js b/packages/mobile/src/components/accounts/index.js deleted file mode 100644 index 11bca6fcd1..0000000000 --- a/packages/mobile/src/components/accounts/index.js +++ /dev/null @@ -1,86 +0,0 @@ -import React from 'react'; -import { View, RefreshControl } from 'react-native'; -import { connect } from 'react-redux'; -import * as actions from 'loot-core/src/client/actions'; -import { AccountList } from 'loot-design/src/components/mobile/accounts'; -import FocusAwareStatusBar from 'loot-design/src/components/mobile/FocusAwareStatusBar'; -import * as queries from 'loot-core/src/client/queries'; -import SyncRefresh from '../SyncRefresh'; -class Accounts extends React.Component { - state = { transactions: [] }; - - async componentDidMount() { - if (this.props.categories.length === 0) { - await this.props.getCategories(); - } - - this.props.getAccounts(); - } - - sync = async () => { - await this.props.syncAndDownload(); - }; - - onSelectAccount = id => { - const account = this.props.accounts.find(acct => acct.id === id); - this.props.navigation.navigate('Account', { id, title: account.name }); - }; - - onSelectTransaction = transaction => { - this.props.navigation.navigate('Transaction', { transaction }); - }; - - render() { - let { - navigation, - accounts, - categories, - payees, - newTransactions, - updatedAccounts, - prefs - } = this.props; - let { transactions } = this.state; - let numberFormat = prefs.numberFormat || 'comma-dot'; - - return ( - - - - {({ refreshing, onRefresh }) => ( - !account.closed)} - categories={categories} - transactions={transactions || []} - updatedAccounts={updatedAccounts} - newTransactions={newTransactions} - getBalanceQuery={queries.accountBalance} - getOnBudgetBalance={queries.budgetedAccountBalance} - getOffBudgetBalance={queries.offbudgetAccountBalance} - onAddAccount={() => navigation.navigate('AddAccountModal')} - onSelectAccount={this.onSelectAccount} - onSelectTransaction={this.onSelectTransaction} - refreshControl={ - - } - /> - )} - - - ); - } -} - -export default connect( - state => ({ - accounts: state.queries.accounts, - newTransactions: state.queries.newTransactions, - updatedAccounts: state.queries.updatedAccounts, - categories: state.queries.categories.list, - prefs: state.prefs.local - }), - actions -)(Accounts); diff --git a/packages/mobile/src/components/budget/index.js b/packages/mobile/src/components/budget/index.js deleted file mode 100644 index 9d0bc4222f..0000000000 --- a/packages/mobile/src/components/budget/index.js +++ /dev/null @@ -1,432 +0,0 @@ -import React, { useContext } from 'react'; -import { View, Text, Animated, RefreshControl } from 'react-native'; -import { connect } from 'react-redux'; -import { bindActionCreators } from 'redux'; -import { SafeAreaView } from 'react-native-safe-area-context'; -import { connectActionSheet } from '@expo/react-native-action-sheet'; -import { send, listen } from 'loot-core/src/platform/client/fetch'; -import * as actions from 'loot-core/src/client/actions'; -import * as monthUtils from 'loot-core/src/shared/months'; -import NamespaceContext from 'loot-design/src/components/spreadsheet/NamespaceContext'; -import SpreadsheetContext from 'loot-design/src/components/spreadsheet/SpreadsheetContext'; -import FocusAwareStatusBar from 'loot-design/src/components/mobile/FocusAwareStatusBar'; -import { colors, styles } from 'loot-design/src/style'; -import SheetValue from 'loot-design/src/components/spreadsheet/SheetValue'; -import CellValue from 'loot-design/src/components/spreadsheet/CellValue'; -import format from 'loot-design/src/components/spreadsheet/format'; -import { BudgetTable } from 'loot-design/src/components/mobile/budget'; -import AnimatedLoading from 'loot-design/src/svg/v1/AnimatedLoading'; -import { Button } from 'loot-design/src/components/mobile/common'; -import SyncRefresh from '../SyncRefresh'; -import Modal from '../modals/Modal'; -import { rolloverBudget } from 'loot-core/src/client/queries'; - -import { - addCategory, - moveCategory, - moveCategoryGroup -} from 'loot-core/src/shared/categories.js'; - -function BudgetSummary({ month, onClose }) { - const prevMonthName = monthUtils.format(monthUtils.prevMonth(month), 'MMM'); - - return ( - - - - - - - {'\n'} - - {'\n'} - - {'\n'} - - - - - Available Funds - {'\n'} - Overspent in {prevMonthName} - {'\n'} - Budgeted - {'\n'} - For Next Month - - - - - - {({ value: amount }) => { - return ( - <> - - {amount < 0 ? 'Overbudget:' : 'To budget:'} - - - {format(amount, 'financial')} - - - ); - }} - - - - - - - - - - ); -} - -class Budget extends React.Component { - constructor(props) { - super(props); - - this.summary = new Animated.Value(0); - - const currentMonth = monthUtils.currentMonth(); - this.state = { - bounds: { start: currentMonth, end: currentMonth }, - currentMonth: currentMonth, - initialized: false, - editMode: false, - categoryGroups: null, - showBudgetDetails: false - }; - } - - async loadCategories() { - let result = await this.props.getCategories(); - this.setState({ categoryGroups: result.grouped }); - } - - async componentDidMount() { - let removeBlur = this.props.navigation.addListener('didBlur', () => { - this.setState({ editMode: false }); - }); - - this.loadCategories(); - - const { start, end } = await send('get-budget-bounds'); - this.setState({ bounds: { start, end } }); - - this.prewarmMonth(this.state.currentMonth); - - let unlisten = listen('sync-event', ({ type, tables }) => { - if ( - type === 'success' && - (tables.includes('categories') || - tables.includes('category_mapping') || - tables.includes('category_groups')) - ) { - // TODO: is this loading every time? - this.loadCategories(); - } - }); - - this.cleanup = () => { - removeBlur(); - unlisten(); - }; - } - - componentWillUnmount() { - // this.cleanup(); - } - - prewarmMonth = async (month, type = null) => { - type = type || this.props.budgetType; - - let method = - type === 'report' ? 'report-budget-month' : 'rollover-budget-month'; - - let values = await send(method, { month }); - - for (let value of values) { - this.props.spreadsheet.prewarmCache(value.name, value); - } - - if (!this.state.initialized) { - this.setState({ initialized: true }); - } - }; - - onShowBudgetDetails = () => { - this.setState({ showBudgetDetails: true }); - }; - - onBudgetAction = type => { - const { currentMonth } = this.state; - this.props.applyBudgetAction(currentMonth, type, this.state.bounds); - }; - - onAddCategory = groupId => { - this.props.navigation.navigate('AddCategoryModal', { - groupId, - onAdd: async name => { - let id = await this.props.createCategory(name, groupId); - let { categoryGroups } = this.state; - - this.setState({ - categoryGroups: addCategory(categoryGroups, { - name, - cat_group: groupId, - is_income: 0, - id - }) - }); - } - }); - }; - - onReorderCategory = (id, { inGroup, aroundCategory }) => { - let { categoryGroups } = this.state; - let groupId, targetId; - - if (inGroup) { - groupId = inGroup; - } else if (aroundCategory) { - let { id: catId, position } = aroundCategory; - - let group = categoryGroups.find(group => - group.categories.find(cat => cat.id === catId) - ); - - if (position === 'bottom') { - let { categories } = group; - let idx = categories.findIndex(cat => cat.id === catId); - catId = idx < categories.length - 1 ? categories[idx + 1].id : null; - } - - groupId = group.id; - targetId = catId; - } - - this.props.moveCategory(id, groupId, targetId); - - this.setState({ - categoryGroups: moveCategory(categoryGroups, id, groupId, targetId) - }); - }; - - onReorderGroup = (id, targetId, position) => { - let { categoryGroups } = this.state; - - if (position === 'bottom') { - let idx = categoryGroups.findIndex(group => group.id === targetId); - targetId = - idx < categoryGroups.length - 1 ? categoryGroups[idx + 1].id : null; - } - - this.props.moveCategoryGroup(id, targetId); - - this.setState({ - categoryGroups: moveCategoryGroup(categoryGroups, id, targetId) - }); - }; - - sync = async () => { - const { updated, error } = await this.props.sync(); - if (error) { - return 'error'; - } else if (updated) { - return 'updated'; - } - return null; - }; - - onPrevMonth = async () => { - let month = monthUtils.subMonths(this.state.currentMonth, 1); - await this.prewarmMonth(month); - this.setState({ currentMonth: month }); - }; - - onNextMonth = async () => { - let month = monthUtils.addMonths(this.state.currentMonth, 1); - await this.prewarmMonth(month); - this.setState({ currentMonth: month }); - }; - - onOpenActionSheet = () => { - let { budgetType } = this.props; - - let options = [ - 'Edit Categories', - "Copy last month's budget", - 'Set budgets to zero', - 'Set budgets to 3 month average', - budgetType === 'report' && 'Apply to all future budgets', - 'Cancel' - ].filter(Boolean); - - this.props.showActionSheetWithOptions( - { - options, - cancelButtonIndex: options.length - 1, - title: 'Actions' - }, - idx => { - switch (idx) { - case 0: - this.setState({ editMode: true }); - break; - case 1: - this.onBudgetAction('copy-last'); - break; - case 2: - this.onBudgetAction('set-zero'); - break; - case 3: - this.onBudgetAction('set-3-avg'); - break; - default: - } - } - ); - }; - - render() { - const { - currentMonth, - bounds, - editMode, - initialized, - showBudgetDetails - } = this.state; - const { - categories, - categoryGroups, - prefs, - budgetType, - navigation, - applyBudgetAction - } = this.props; - let numberFormat = prefs.numberFormat || 'comma-dot'; - - if (!categoryGroups || !initialized) { - return ( - - - - ); - } - - return ( - - - - {({ refreshing, onRefresh }) => ( - - } - onEditMode={flag => this.setState({ editMode: flag })} - onShowBudgetDetails={this.onShowBudgetDetails} - onPrevMonth={this.onPrevMonth} - onNextMonth={this.onNextMonth} - onAddCategory={this.onAddCategory} - onReorderCategory={this.onReorderCategory} - onReorderGroup={this.onReorderGroup} - onOpenActionSheet={this.onOpenActionSheet} - onBudgetAction={applyBudgetAction} - /> - )} - - - {showBudgetDetails && ( - this.setState({ showBudgetDetails: false })} - /> - )} - - ); - } -} - -function BudgetWrapper(props) { - let spreadsheet = useContext(SpreadsheetContext); - return ; -} - -export default connect( - state => ({ - categoryGroups: state.queries.categories.grouped, - categories: state.queries.categories.list, - budgetType: state.prefs.local.budgetType || 'rollover', - prefs: state.prefs.local, - initialBudgetMonth: state.app.budgetMonth - }), - dispatch => bindActionCreators(actions, dispatch) -)(connectActionSheet(BudgetWrapper)); diff --git a/packages/mobile/src/components/manager/BudgetList.js b/packages/mobile/src/components/manager/BudgetList.js deleted file mode 100644 index 274730c745..0000000000 --- a/packages/mobile/src/components/manager/BudgetList.js +++ /dev/null @@ -1,320 +0,0 @@ -import React, { useState } from 'react'; -import { View, Text, FlatList, StatusBar } from 'react-native'; -import { connect } from 'react-redux'; -import { bindActionCreators } from 'redux'; -import { connectActionSheet } from '@expo/react-native-action-sheet'; -import { SafeAreaView } from 'react-native-safe-area-context'; -import { colors, styles } from 'loot-design/src/style'; -import * as actions from 'loot-core/src/client/actions'; -import { RectButton } from 'react-native-gesture-handler'; -import { Button } from 'loot-design/src/components/mobile/common'; -import { ListItem, ROW_HEIGHT } from 'loot-design/src/components/mobile/table'; -import Loading from 'loot-design/src/svg/v1/AnimatedLoading'; -import CloudCheck from 'loot-design/src/svg/v1/CloudCheck'; -import CloudDownload from 'loot-design/src/svg/v1/CloudDownload'; -import CloudUnknown from 'loot-design/src/svg/v2/CloudUnknown'; -import FileDouble from 'loot-design/src/svg/v1/FileDouble'; -import RefreshArrow from 'loot-design/src/svg/v2/RefreshArrow'; -import DotsHorizontalTriple from 'loot-design/src/svg/v1/DotsHorizontalTriple'; -import Modal from '../modals/Modal'; -import UserButton from './UserButton'; -import * as iap from '../../util/iap.js'; - -function getFileDescription(file) { - if (file.state === 'unknown') { - return ( - "This is a cloud-based file but it's state is unknown because you " + - 'are offline.' - ); - } - - if (file.encryptKeyId) { - if (file.hasKey) { - return 'This file is encrypted and you have the key to access it.'; - } - return 'This file is encrypted and you do not have the key for it.'; - } - - return null; -} - -function getActionsForFile(file, onDelete) { - let title = getFileDescription(file); - let options = [{ title: 'Delete', handler: onDelete }]; - - return { - title, - options: options.map(opt => opt.title), - handler: idx => idx < options.length && options[idx].handler() - }; -} - -function FileIcon({ state, style }) { - let Icon; - let color = colors.n1; - - switch (state) { - case 'unknown': - Icon = CloudUnknown; - color = colors.n7; - break; - case 'remote': - Icon = CloudDownload; - break; - case 'local': - Icon = FileDouble; - break; - case 'broken': - Icon = CloudUnknown; - color = colors.n7; - break; - default: - Icon = CloudCheck; - break; - } - - return ( - - ); -} - -function showBrokenMessage(file, showActionSheetWithOptions, onDelete) { - let { options, title, handler } = getActionsForFile(file, onDelete); - options.push('Cancel'); - - showActionSheetWithOptions( - { - options, - cancelButtonIndex: options.length - 1, - title - }, - handler - ); -} - -function DetailsButton({ file, style, showActionSheetWithOptions, onDelete }) { - let [loading, setLoading] = useState(false); - - function openMenu() { - if (file.state === 'unknown') { - alert(getFileDescription(file)); - return; - } - - let { options, title, handler } = getActionsForFile(file, onDelete); - options.push('Cancel'); - - showActionSheetWithOptions( - { - options, - cancelButtonIndex: options.length - 1, - title - }, - handler - ); - } - - return ( - - ); -} - -function EmptyMessage() { - return ( - - No existing files. Create one below! - - ); -} - -function RefreshButton({ onRefresh }) { - let [loading, setLoading] = useState(false); - - async function _onRefresh() { - setLoading(true); - await onRefresh(); - setLoading(false); - } - - let Icon = loading ? Loading : RefreshArrow; - - return ( - - ); -} - -function File({ file, showActionSheetWithOptions, onSelect, onDelete }) { - return ( - - - - - - {file.name} - - onDelete(file)} - /> - - - - ); -} - -class BudgetList extends React.Component { - componentDidMount() { - // Status bar won't change unless we do it imperatively?? When you - // close the file it's stuck in dark mode - StatusBar.setBarStyle('light-content'); - } - - onDelete = file => { - this.props.navigation.navigate('DeleteFile', { file }); - }; - - onCreate = () => { - if (!this.creating) { - this.creating = true; - this.props.createBudget(); - } - }; - - render() { - let { - navigation, - files, - loadAllFiles, - getUserData, - showActionSheetWithOptions, - keyId - } = this.props; - - return ( - - { - getUserData(); - loadAllFiles(); - }} - /> - } - > - {/* */} - ( - { - if (file.state === 'broken') { - showBrokenMessage(file, showActionSheetWithOptions, () => - this.onDelete(file) - ); - } else if (file.state === 'remote') { - this.props.downloadBudget(file.cloudFileId); - } else { - this.props.loadBudget(file.id); - } - }} - onDelete={this.onDelete} - /> - )} - keyExtractor={item => item.id} - style={{ flex: 1 }} - /> - - - - - { - iap.resetUser(); - this.props.signOut(); - }} - /> - - ); - } -} - -export default connect( - state => ({ - files: state.budgets.allFiles, - globalPrefs: state.prefs.global, - keyId: state.prefs.global.keyId - }), - dispatch => bindActionCreators(actions, dispatch) -)(connectActionSheet(BudgetList)); diff --git a/packages/mobile/src/components/manager/Confirm.js b/packages/mobile/src/components/manager/Confirm.js deleted file mode 100644 index 94b6e750a9..0000000000 --- a/packages/mobile/src/components/manager/Confirm.js +++ /dev/null @@ -1,133 +0,0 @@ -import React, { useState } from 'react'; -import { View, Text, Platform } from 'react-native'; -import { connect } from 'react-redux'; -import { SafeAreaView } from 'react-native-safe-area-context'; -import * as actions from 'loot-core/src/client/actions'; -import KeyboardAvoidingView from 'loot-design/src/components/mobile/KeyboardAvoidingView'; -import Stack from 'loot-design/src/components/Stack'; -import { send } from 'loot-core/src/platform/client/fetch'; -import { colors, styles } from 'loot-design/src/style'; -import SingleInput from './SingleInput'; -import Header from './Header'; -import TransitionView from './TransitionView'; -import { setupPurchases, getOfferings } from '../../util/iap'; - -function getErrorMessage(error) { - switch (error) { - case 'not-confirmed': - return 'Invalid code'; - case 'expired': - return 'Code is expired. Go back to resend a new code.'; - case 'too-many-attempts': - return 'Too many attempts to login. Go back to resend a new code.'; - default: - return "Whoops, an error occurred on our side! We'll try to get it fixed soon."; - } -} - -function Confirm({ route, navigation, getUserData, loginUser, createBudget }) { - let [code, setCode] = useState(''); - let [loading, setLoading] = useState(false); - let [error, setError] = useState(null); - - let { signingUp } = route.params || {}; - - async function onConfirm() { - let { email } = route.params || {}; - setLoading(true); - - let { - confirmed, - error, - userId, - key, - validSubscription - } = await send('subscribe-confirm', { email, code }); - - if (error) { - setLoading(false); - setError(getErrorMessage(error)); - } else if (!confirmed) { - setLoading(false); - setError(getErrorMessage('not-confirmed')); - } else if (!validSubscription) { - if (Platform.OS === 'ios') { - // Eagerly load in the offerings (otherwise the subscribe button - // shows a loading state which is weird) - await setupPurchases({ id: userId, email: email }); - await getOfferings(); - - setLoading(false); - navigation.navigate('Subscribe', { email, userId, key }); - } else { - // This is a "half-created" account, right now on Android we - // don't fix it here, we just tell the user. This is super - // rare - only happens if a user on iOS creates an account but - // doesn't subscribe, and then tries to log in on Android with - // that account - alert( - 'An error occurred loading your account. Please contact help@actualbudget.com for support' - ); - setLoading(false); - } - } else { - setLoading(false); - - // This will load the user in the backend and rerender the app - // in the logged in state - loginUser(userId, key); - - if (global.SentryClient) { - global.SentryClient.setUser({ - id: userId, - ip_address: '{{auto}}' - }); - } - } - } - - let textStyle = [ - styles.text, - { fontSize: 17, lineHeight: 25, color: 'white' } - ]; - - return ( - - - -
createBudget({ demoMode: true })} - /> - - - - {signingUp ? ( - - Enter the code you got in your email to activate your account: - - ) : ( - - Enter the code you got in your email: - - )} - - - - - - - - ); -} - -export default connect(null, actions)(Confirm); diff --git a/packages/mobile/src/components/manager/DeleteFile.js b/packages/mobile/src/components/manager/DeleteFile.js deleted file mode 100644 index 2c62823c8f..0000000000 --- a/packages/mobile/src/components/manager/DeleteFile.js +++ /dev/null @@ -1,131 +0,0 @@ -import React, { useState } from 'react'; -import { View, Text } from 'react-native'; -import { connect } from 'react-redux'; -import * as actions from 'loot-core/src/client/actions'; -import Modal from '../modals/Modal'; -import { - Button, - ButtonWithLoading -} from 'loot-design/src/components/mobile/common'; -import { colors, styles } from 'loot-design/src/style'; - -function DeleteFile({ route, navigation, deleteBudget }) { - let { file } = route.params; - let { state } = file; - let [loadingState, setLoadingState] = useState(null); - - async function onDeleteCloud() { - setLoadingState('cloud'); - await deleteBudget(file.id, file.cloudFileId); - setLoadingState(null); - - navigation.goBack(); - } - - async function onDeleteLocal() { - setLoadingState('local'); - await deleteBudget(file.id); - setLoadingState(null); - - navigation.goBack(); - } - - // If the state is "broken" that means it was created by another - // user. The current user should be able to delete the local file, - // but not the remote one - let isRemote = file.cloudFileId && file.state !== 'broken'; - - return ( - - - {isRemote && ( - <> - - This is a hosted file which we store to make it available for - download on any device. You can delete it from our servers which - will remove it from all of your devices. - - - - Delete file from all devices - - - )} - - {file.id && ( - <> - - {isRemote ? ( - - You can also delete just the local copy. This will remove all - local data and the file will be listed as available for - download. - - ) : ( - - {file.state === 'broken' ? ( - - This is a hosted file but it was created by another user. - You can only delete the local copy. - - ) : ( - - This a local file which is not stored on our servers.{' '} - - )} - - Deleting it will remove it and all of its backup - permanently. - - - )} - - - - Delete file locally - - - )} - - - ); -} - -export default connect(null, actions)(DeleteFile); diff --git a/packages/mobile/src/components/manager/Header.js b/packages/mobile/src/components/manager/Header.js deleted file mode 100644 index e9de4b69f3..0000000000 --- a/packages/mobile/src/components/manager/Header.js +++ /dev/null @@ -1,65 +0,0 @@ -import React, { useState, useRef } from 'react'; -import { connect } from 'react-redux'; -import * as actions from 'loot-core/src/client/actions'; -import Stack from 'loot-design/src/components/Stack'; -import { Button } from 'loot-design/src/components/mobile/common'; -import { colors, styles } from 'loot-design/src/style'; - -let buttonTextStyle = [ - styles.text, - { fontWeight: 'bold', fontSize: 15, color: 'white' } -]; - -function Header({ - loadDemoBudget, - navigation, - buttons = ['back', 'demo', 'login'] -}) { - let buttonElements = buttons.map(name => { - switch (name) { - case 'back': - return ( - - ); - case 'demo': - return ( - - ); - case 'login': - return ( - - ); - default: - return null; - } - }); - - return ( - - {buttonElements} - - ); -} - -export default connect(null, actions)(Header); diff --git a/packages/mobile/src/components/manager/Intro.js b/packages/mobile/src/components/manager/Intro.js deleted file mode 100644 index a0cc58832e..0000000000 --- a/packages/mobile/src/components/manager/Intro.js +++ /dev/null @@ -1,226 +0,0 @@ -import React from 'react'; -import { - View, - Text, - ScrollView, - Dimensions, - StatusBar, - Linking, - Animated -} from 'react-native'; -import { colors, styles } from 'loot-design/src/style'; -import { Button } from 'loot-design/src/components/mobile/common'; -import ScalableImage from 'loot-design/src/components/mobile/ScalableImage'; -import { connect } from 'react-redux'; -import { bindActionCreators } from 'redux'; -import { SafeAreaView } from 'react-native-safe-area-context'; -import * as actions from 'loot-core/src/client/actions'; -import TransitionView from './TransitionView'; -import Icon from '../../../assets/icon.png'; - -function ExternalLink({ href, children }) { - return ( - Linking.openURL(href)} - > - {children} - - ); -} - -function Feature({ title, subtitle }) { - let windowDimens = Dimensions.get('window'); - - return ( - - - - {title} - - - {subtitle} - - - - ); -} - -function SlideshowIndicator({ selected }) { - return ( - - ); -} - -class Intro extends React.Component { - state = { selectedFeature: 0 }; - - componentDidMount() { - // Status bar won't change unless we do it imperatively?? When you - // close the file it's stuck in dark mode - StatusBar.setBarStyle('light-content'); - } - - onMomentumScrollEnd = e => { - let x = e.nativeEvent.contentOffset.x; - let window = Dimensions.get('window'); - - let index = Math.round(x / window.width); - this.setState({ selectedFeature: index }); - }; - - render() { - let { navigation, createBudget } = this.props; - let { selectedFeature } = this.state; - - //let textStyle = [styles.text, { color: 'white' }]; - - return ( - - - - - - - (this.scrollView = el)} - pagingEnabled={true} - horizontal={true} - showsHorizontalScrollIndicator={false} - onScrollBeginDrag={this.onScrollBegin} - onScrollEndDrag={this.onScrollEnd} - onMomentumScrollEnd={this.onMomentumScrollEnd} - > - - - Actual is a privacy-focused app that lets you track your - finances without all the fuss. Create your own budgeting - workflows quickly and discover your spending habits.{' '} - - Learn more - - - } - /> - - - - - - - - - - - - - - - - - - - - - - - - ); - } -} - -export default connect(null, dispatch => bindActionCreators(actions, dispatch))( - Intro -); diff --git a/packages/mobile/src/components/manager/Login.js b/packages/mobile/src/components/manager/Login.js deleted file mode 100644 index 3041111a2f..0000000000 --- a/packages/mobile/src/components/manager/Login.js +++ /dev/null @@ -1,92 +0,0 @@ -import React, { useState } from 'react'; -import { View, Text, StatusBar } from 'react-native'; -import { connect } from 'react-redux'; -import { SafeAreaView } from 'react-native-safe-area-context'; -import * as actions from 'loot-core/src/client/actions'; -import { send } from 'loot-core/src/platform/client/fetch'; -import KeyboardAvoidingView from 'loot-design/src/components/mobile/KeyboardAvoidingView'; -import Stack from 'loot-design/src/components/Stack'; -import Header from './Header'; -import SingleInput from './SingleInput'; -import { colors, styles } from 'loot-design/src/style'; -import TransitionView from './TransitionView'; - -function getErrorMessage(error) { - switch (error) { - case 'not-found': - return 'An account with that email does not exist.'; - case 'network-failure': - return 'Unable to contact the server.'; - default: - return "Whoops, an error occurred on our side! We'll try to get it fixed soon."; - } -} - -function Login({ navigation, createBudget }) { - let [email, setEmail] = useState(''); - let [loading, setLoading] = useState(false); - let [error, setError] = useState(null); - - async function sendCode() { - setLoading(true); - setError(null); - let { error } = await send('subscribe-send-email-code', { email }); - setLoading(false); - - if (error) { - setError(getErrorMessage(error)); - } else { - navigation.navigate('Confirm', { email }); - } - } - - let textStyle = [ - styles.text, - { fontSize: 17, lineHeight: 25, color: 'white' } - ]; - - return ( - - - - {/* */} - -
{ - createBudget({ demoMode: true }); - }} - /> - - - - - Sign in. We - {"'"} - ll email you a code that you can use to log in. You only need to - do this once. Right now, the mobile app works best as a - companion to the desktop app. - - - - - - - - - ); -} - -export default connect(null, actions)(Login); diff --git a/packages/mobile/src/components/manager/ManagementApp.js b/packages/mobile/src/components/manager/ManagementApp.js deleted file mode 100644 index edd49e54f7..0000000000 --- a/packages/mobile/src/components/manager/ManagementApp.js +++ /dev/null @@ -1,185 +0,0 @@ -import React, { useState, useEffect, useRef, useLayoutEffect } from 'react'; -import { View, Image, StatusBar } from 'react-native'; -import { bindActionCreators } from 'redux'; -import { connect } from 'react-redux'; -import { NavigationContainer } from '@react-navigation/native'; -import { createNativeStackNavigator } from '@react-navigation/native-stack'; -import { ActionSheetProvider } from '@expo/react-native-action-sheet'; -import * as actions from 'loot-core/src/client/actions'; -import ModalListener from '../ModalListener'; -import Background from '../../../assets/gradient-bg.png'; -import Intro from './Intro'; -import Subscribe from './Subscribe'; -import SubscribeEmail from './SubscribeEmail'; -import BudgetList from './BudgetList'; -import Login from './Login'; -import Confirm from './Confirm'; -import DeleteFile from './DeleteFile'; -import FixEncryptionKey from '../modals/FixEncryptionKey'; - -const LoggedInNavigator = createNativeStackNavigator(); -const LoggedOutNavigator = createNativeStackNavigator(); - -function LoggedOutRoutes({ stack: Stack }) { - return ( - - - - - - - - ); -} - -function LoggedInRoutes({ stack: Stack }) { - return ( - - - - - - ); -} - -function ManagementApp({ - userData, - allFiles, - isHidden, - loadingText, - managerHasInitialized, - actions -}) { - let [navigator, setNavigator] = useState(null); - let [initializing, setInitializing] = useState(true); - let navigatorRef = useRef(null); - - // On first render, update the user and file list - useEffect(() => { - async function run() { - // An action may have been triggered from outside, and we don't - // want to override its loading message so we only show the - // initial loader if there isn't already a message - let alreadyLoading = loadingText != null; - - // Only show the loading message if this is the first run. When - // this is rendered subsequently, we should already have files - // to show immediately (but this will still update them). - // Remember, this component is re-mounted whenever the user - // navigates to the manager, but `managerHasInitialized` is in - // redux to persist across renders - if (!managerHasInitialized && !alreadyLoading) { - actions.setAppState({ loadingText: '' }); - } - - let userData = await actions.getUserData(); - if (userData) { - await actions.loadAllFiles(); - } - - actions.setAppState({ - managerHasInitialized: true, - ...(!alreadyLoading ? { loadingText: null } : null) - }); - } - run(); - }, []); - - // When certain things happen with the account, we want to swap out - // different navigators to show different screens. For example, if - // you login it should show your files. If your trial ends, we want - // to force the user to see a trial ended screen. The reason we - // don't use one router and navigate is to ensure that state is - // always fresh and the user is never able to navigate back between - // these states. - useLayoutEffect(() => { - if (managerHasInitialized) { - let newNavigator = null; - - if (userData) { - // Decide where to take the user when they have a valid - // account and we've tried to load their files - if (allFiles) { - if (allFiles.length > 0) { - // Files exist, so show the file select screen - newNavigator = LoggedInNavigator; - } else { - // No files exist. We automatically create one for the - // user and load it in, which will swap out the manager - // automatically, so we don't need to do anything else - actions.createBudget(); - } - } - } else { - // The user hasn't logged in, show the landing page - newNavigator = LoggedOutNavigator; - } - - if (newNavigator && newNavigator !== navigator) { - setNavigator(newNavigator); - } - } - }, [userData, allFiles, managerHasInitialized]); - - let hidden = isHidden || loadingText; - - return ( - - - - - ); -} - -export default connect( - state => ({ - allFiles: state.budgets.allFiles, - isHidden: state.modals.isHidden, - loadingText: state.app.loadingText, - userData: state.user.data, - managerHasInitialized: state.app.managerHasInitialized - }), - dispatch => ({ - actions: bindActionCreators(actions, dispatch) - }) -)(ManagementApp); diff --git a/packages/mobile/src/components/manager/SingleInput.js b/packages/mobile/src/components/manager/SingleInput.js deleted file mode 100644 index 1bf5a07bf8..0000000000 --- a/packages/mobile/src/components/manager/SingleInput.js +++ /dev/null @@ -1,74 +0,0 @@ -import React from 'react'; -import { View, Text, TextInput } from 'react-native'; -import Stack from 'loot-design/src/components/Stack'; -import { ButtonWithLoading } from 'loot-design/src/components/mobile/common'; -import { colors, styles } from 'loot-design/src/style'; - -export default function SingleInput({ - title, - value, - loading, - error, - inputProps, - onChange, - onSubmit -}) { - let textStyle = [ - styles.text, - { fontSize: 17, lineHeight: 25, color: 'white' } - ]; - - return ( - - - {title} - - - - - onSubmit()} - > - Next - - - - {error && ( - - {error} - - )} - - ); -} diff --git a/packages/mobile/src/components/manager/Subscribe.js b/packages/mobile/src/components/manager/Subscribe.js deleted file mode 100644 index f4bc4ec4f9..0000000000 --- a/packages/mobile/src/components/manager/Subscribe.js +++ /dev/null @@ -1,73 +0,0 @@ -import React, { useState, useRef, useEffect } from 'react'; -import { View, Text, TextInput, Alert, StatusBar, Linking } from 'react-native'; -import { connect } from 'react-redux'; -import { SafeAreaView } from 'react-native-safe-area-context'; -import * as actions from 'loot-core/src/client/actions'; -import { colors, styles } from 'loot-design/src/style'; -import { send } from 'loot-core/src/platform/client/fetch'; -import { getSubscribeError } from 'loot-core/src/shared/errors'; -import Stack from 'loot-design/src/components/Stack'; -import { - ButtonWithLoading, - Button -} from 'loot-design/src/components/mobile/common'; -import KeyboardAvoidingView from 'loot-design/src/components/mobile/KeyboardAvoidingView'; -import { InputField } from 'loot-design/src/components/mobile/forms'; -import AccountButton from '../AccountButton'; -import Header from './Header'; - -let buttonTextStyle = [ - styles.text, - { fontWeight: 'bold', fontSize: 15, color: 'white' } -]; - -function ExternalLink({ href, children }) { - return ( - Linking.openURL(href)} - > - {children} - - ); -} - -export function Subscribe({ route, navigation, getUserData, createBudget }) { - let { email, userId, key } = route.params || {}; - - let textStyle = [ - styles.text, - { fontSize: 17, lineHeight: 25, color: 'white' } - ]; - - return ( - - - {/* */} -
- - - - You{"'"}re almost there. You need to subscribe to gain access to - Actual. No charges will be made for 1 month. - - - - - - Start with a 1 month free trial. - - - - - - - ); -} - -export default connect(null, actions)(Subscribe); diff --git a/packages/mobile/src/components/manager/SubscribeEmail.js b/packages/mobile/src/components/manager/SubscribeEmail.js deleted file mode 100644 index 7a906a433b..0000000000 --- a/packages/mobile/src/components/manager/SubscribeEmail.js +++ /dev/null @@ -1,101 +0,0 @@ -import React, { useState } from 'react'; -import { View, Text, Platform } from 'react-native'; -import { connect } from 'react-redux'; -import { SafeAreaView } from 'react-native-safe-area-context'; -import * as actions from 'loot-core/src/client/actions'; -import { colors, styles } from 'loot-design/src/style'; -import { send } from 'loot-core/src/platform/client/fetch'; -import { getSubscribeError } from 'loot-core/src/shared/errors'; -import Stack from 'loot-design/src/components/Stack'; -import KeyboardAvoidingView from 'loot-design/src/components/mobile/KeyboardAvoidingView'; -import Header from './Header'; -import SingleInput from './SingleInput'; -import * as iap from '../../util/iap.js'; -import TransitionView from './TransitionView'; - -export function SubscribeEmail({ navigation, createBudget }) { - let [email, setEmail] = useState(''); - let [error, setError] = useState(null); - let [loading, setLoading] = useState(false); - - async function eagerlyLoadOfferings(userId, email) { - await iap.setupPurchases({ id: userId, email }); - iap.getOfferings(); - } - - async function onSignup() { - setLoading(true); - setError(null); - let { error, userId, key } = await send('subscribe-subscribe', { - email, - useStripe: Platform.OS !== 'ios' - }); - - if (error) { - setLoading(false); - setError(getSubscribeError(error)); - } else { - if (Platform.OS === 'ios') { - // Don't block on this, but start loading the available offerings - // now so when they see the subscribe screen later they don't see - // a loading screen - eagerlyLoadOfferings(userId, email); - } - - let { error } = await send('subscribe-send-email-code', { email }); - - if (error) { - setError('Something went wrong while activating your account'); - return; - } - - setLoading(false); - navigation.navigate('Confirm', { email, signingUp: true }); - } - } - - let textStyle = [ - styles.text, - { fontSize: 17, lineHeight: 25, color: 'white' } - ]; - - return ( - - - - {/* */} - -
createBudget({ demoMode: true })} - /> - - - - Create an account.{' '} - Sign up to sync your data across all devices. By default all - your data is local. In the future we will also provide bank - syncing. - - - - - - - - - ); -} - -export default connect(null, actions)(SubscribeEmail); diff --git a/packages/mobile/src/components/manager/TransitionView.js b/packages/mobile/src/components/manager/TransitionView.js deleted file mode 100644 index 52c9cdb0ac..0000000000 --- a/packages/mobile/src/components/manager/TransitionView.js +++ /dev/null @@ -1,33 +0,0 @@ -import React, { useRef, useEffect } from 'react'; -import { Animated } from 'react-native'; -import { useIsFocused } from '@react-navigation/native'; - -export default function TransitionView({ navigation, children }) { - let fadeAnim = useRef(new Animated.Value(1)).current; - let focused = useIsFocused(); - let prevFocused = useRef(focused); - - // A cheap effect to make up for the fact that we are using transparent cards, - // and the new native animator doesn't automatically fade out the previous - // card as it's going away (or coming in if going back). This works fine for - // navigating forwards, but less than ideal going backwards because it won't - // fade in until the gesture finishes. Need to look into how to perform custom - // gesture-based navigations - useEffect(() => { - if (prevFocused.current !== focused) { - Animated.timing(fadeAnim, { - toValue: focused ? 1 : 0, - duration: 200, - useNativeDriver: true - }).start(); - } - }, [focused]); - - useEffect(() => { - prevFocused.current = focused; - }); - - return ( - - ); -} diff --git a/packages/mobile/src/components/manager/UserButton.js b/packages/mobile/src/components/manager/UserButton.js deleted file mode 100644 index 3bcdbdeea9..0000000000 --- a/packages/mobile/src/components/manager/UserButton.js +++ /dev/null @@ -1,89 +0,0 @@ -import React from 'react'; -import { View, Text } from 'react-native'; -import { connectActionSheet } from '@expo/react-native-action-sheet'; -import { connect } from 'react-redux'; -import { CommonActions } from '@react-navigation/native'; -import { SafeAreaView } from 'react-native-safe-area-context'; -import { Button } from 'loot-design/src/components/mobile/common'; -import { colors } from 'loot-design/src/style'; -import Key from 'loot-design/src/svg/v2/Key'; - -function UserButton({ - navigation, - userData, - error, - keyId, - showActionSheetWithOptions, - onLogOut -}) { - function onPress() { - if (userData || error) { - let options = ['Log out', 'Cancel']; - - showActionSheetWithOptions( - { - options, - cancelButtonIndex: 1, - title: error - ? 'The current logged in user could not be authenticated. This usually means you are offline.' - : userData.email - }, - idx => { - switch (idx) { - case 0: - onLogOut(); - break; - } - } - ); - } else { - navigation.dispatch(CommonActions.navigate({ routeName: 'Login' })); - } - } - - if (userData) { - if (userData.offline) { - return ( - - Offline - - ); - } - - return ( - - ); - } - return null; -} - -export default connect(state => ({ - userData: state.user.data, - error: state.user.error -}))(connectActionSheet(UserButton)); diff --git a/packages/mobile/src/components/modals/AccountSelect.js b/packages/mobile/src/components/modals/AccountSelect.js deleted file mode 100644 index 2139dab963..0000000000 --- a/packages/mobile/src/components/modals/AccountSelect.js +++ /dev/null @@ -1,16 +0,0 @@ -import React from 'react'; -import GenericSearchableSelect from './GenericSearchableSelect'; - -export default function AccountSelect({ route, navigation }) { - let { onSelect } = route.params || {}; - return ( - { - onSelect(id); - navigation.goBack(); - }} - /> - ); -} diff --git a/packages/mobile/src/components/modals/AddAccount.js b/packages/mobile/src/components/modals/AddAccount.js deleted file mode 100644 index 0ffd297272..0000000000 --- a/packages/mobile/src/components/modals/AddAccount.js +++ /dev/null @@ -1,95 +0,0 @@ -import React from 'react'; -import { View, Text } from 'react-native'; -//import { openLink } from 'react-native-plaid-link-sdk'; -import { Button } from 'loot-design/src/components/mobile/common'; -import { colors, styles } from 'loot-design/src/style'; -import { send } from 'loot-core/src/platform/client/fetch'; -import Modal, { CloseButton } from './Modal'; - -let PLAID_CONFIG = { - env: 'sandbox', - publicKey: '25b3c7e18fa05f2bdbb0ad0640fdfe' -}; - -function normalizePlaidData(data) { - // Normalize the data object. The plaid SDK returns it - // differently on Android - if (data.link_connection_metadata) { - let metadata = data.link_connection_metadata; - data = { - public_token: data.public_token, - institution: { - institution_id: metadata.institution_id, - name: metadata.institution_name - }, - accounts: metadata.accounts.map(acct => ({ - type: acct.account_type, - subtype: acct.account_sub_type, - mask: acct.account_number, - name: acct.account_name, - id: acct.account_id - })) - }; - } - return data; -} - -export default function AddAccount({ navigation }) { - function onLink() { - // openLink({ - // env: PLAID_CONFIG.env, - // publicKey: PLAID_CONFIG.publicKey, - // clientName: 'Actual', - // webviewRedirectUri: 'actual://plaid-redirect', - // product: ['transactions'], - // onSuccess: async data => { - // data = normalizePlaidData(data); - // navigation.navigate('SelectLinkedAccounts', { - // institution: data.institution, - // publicToken: data.public_token, - // accounts: data.accounts - // }); - // }, - // onExit: data => {} - // }); - } - - function onCreateLocal() { - navigation.navigate('AddLocalAccount'); - } - - return ( - } - backgroundColor="white" - > - - - Link your bank accounts to - automatically download transactions. We offer hundreds of banks to - sync with and our service will provide reliable, up-to-date - information. - - - - - You can also create a local account if you want to track transactions - manually. You can add transactions manually or import QIF/OFX/QFX - files in the desktop app. - - - - - ); -} diff --git a/packages/mobile/src/components/modals/AddCategory.js b/packages/mobile/src/components/modals/AddCategory.js deleted file mode 100644 index cecdb3a638..0000000000 --- a/packages/mobile/src/components/modals/AddCategory.js +++ /dev/null @@ -1,67 +0,0 @@ -import React from 'react'; -import { View, Text } from 'react-native'; -import { connect } from 'react-redux'; -import * as actions from 'loot-core/src/client/actions'; -import { Button } from 'loot-design/src/components/mobile/common'; -import Modal from './Modal'; -import { - FieldLabel, - InputField -} from 'loot-design/src/components/mobile/forms'; - -class AddCategory extends React.Component { - state = { name: '' }; - - onChange = e => { - this.setState({ name: e.nativeEvent.text }); - }; - - close = () => { - this.props.navigation.goBack(); - }; - - onAdd = () => { - let { onAdd } = this.props.route.params || {}; - let { name } = this.state; - - onAdd(name); - this.close(); - }; - - render() { - let { name } = this.state; - - return ( - - - - - - - - - - ); - } -} - -export default connect( - null, - actions -)(AddCategory); diff --git a/packages/mobile/src/components/modals/AddLocalAccount.js b/packages/mobile/src/components/modals/AddLocalAccount.js deleted file mode 100644 index 9badd3f461..0000000000 --- a/packages/mobile/src/components/modals/AddLocalAccount.js +++ /dev/null @@ -1,157 +0,0 @@ -import React from 'react'; -import { View, Text } from 'react-native'; -import { connect } from 'react-redux'; -import * as actions from 'loot-core/src/client/actions'; -import { Button } from 'loot-design/src/components/mobile/common'; -import { RectButton } from 'react-native-gesture-handler'; -import Modal, { CloseButton } from './Modal'; -import { - FieldLabel, - InputField, - BooleanField, - TapField, - EDITING_PADDING, - FIELD_HEIGHT -} from 'loot-design/src/components/mobile/forms'; -import { toRelaxedNumber } from 'loot-core/src/shared/util'; -import { colors } from 'loot-design/src/style'; - -let accountTypes = [ - { value: 'checking', label: 'Checking' }, - { value: 'savings', label: 'Savings' }, - { value: 'credit', label: 'Credit' }, - { value: 'investment', label: 'Investment' }, - { value: 'mortgage', label: 'Mortgage' }, - { value: 'debt', label: 'Debt' }, - { value: 'other', label: 'Other' } -]; - -function getTypeLabel(value) { - return accountTypes.find(type => type.value === value).label; -} - -class AddLocalAccount extends React.Component { - static navigationOptions = { header: null }; - state = { - name: '', - balance: '', - offbudget: false, - type: null - }; - - onChange = (name, value) => { - this.setState({ [name]: value }); - }; - - close = () => { - this.props.navigation.goBack('modal'); - }; - - selectType = () => { - this.props.navigation.navigate('GenericSelectModal', { - title: 'Choose an account type', - items: accountTypes, - snapPoints: [450], - onSelect: value => { - this.setState({ type: value }); - } - }); - }; - - onAdd = () => { - let { name, type, balance, offbudget } = this.state; - if (name !== '') { - this.props.createAccount( - name, - type || 'checking', - toRelaxedNumber(balance === '' ? '0' : balance), - offbudget - ); - this.close(); - } - }; - - render() { - let { navigation } = this.props; - let { name, balance, offbudget, type } = this.state; - - return ( - } - > - - this.onChange('name', e.nativeEvent.text)} - onSubmitEditing={this.onAdd} - autoFocus - /> - - - this.onChange('balance', e.nativeEvent.text)} - onSubmitEditing={this.onAdd} - placeholder="0" - keyboardType="numeric" - /> - - - - - - - {type ? getTypeLabel(type) : 'Checking'} - - - - - - - this.onChange('offbudget', value)} - /> - - - - - - - - - ); - } -} - -export default connect( - null, - actions -)(AddLocalAccount); diff --git a/packages/mobile/src/components/modals/BottomSheet.js b/packages/mobile/src/components/modals/BottomSheet.js deleted file mode 100644 index 05d92bac76..0000000000 --- a/packages/mobile/src/components/modals/BottomSheet.js +++ /dev/null @@ -1,209 +0,0 @@ -import React, { Component } from 'react'; -import { View, StyleSheet, Animated, Dimensions } from 'react-native'; -import { PanGestureHandler, State } from 'react-native-gesture-handler'; -import AndroidKeyboardAvoidingView from 'loot-design/src/components/mobile/AndroidKeyboardAvoidingView'; - -const windowHeight = Dimensions.get('window').height; - -class BottomSheet extends Component { - constructor() { - super(); - - this.drawerHandler = React.createRef(); - - this.panY = new Animated.Value(0); - this.panEvent = Animated.event( - [{ nativeEvent: { translationY: this.panY } }], - { useNativeDriver: true } - ); - this.positionY = new Animated.Value(0); - this.translateY = Animated.add(this.panY, this.positionY); - this.opacity = new Animated.Value(1); - } - - componentDidMount() { - const { allowFullscreen = true, snapPoints = [] } = this.props; - - this.snapPoints = [ - // Invert the points so they are relative to the top - ...snapPoints.map(y => windowHeight - y), - // Always allow it to be fully closed - windowHeight - ]; - - if (allowFullscreen) { - // Allow it to be fully opened - this.snapPoints.unshift(30); - } - - // Initial state should be closed - this.positionY.setValue(this.snapPoints[this.snapPoints.length - 1]); - this.move(this.snapPoints.length > 2 ? 1 : 0); - } - - componentDidUpdate(prevProps) { - // If the sheet is opened again before we've finished closing, - // open the same instance up - if (prevProps.state !== 'open' && this.props.state === 'open') { - this.move(this.snapPoints.length > 2 ? 1 : 0); - } - } - - onHandlerStateChange = e => { - if (e.nativeEvent.oldState === State.ACTIVE) { - const y = Math.max( - this.snapPoints[this.currentSnapPoint] + e.nativeEvent.translationY, - 0 - ); - this.panY.setValue(0); - this.positionY.setValue(y); - - if (e.nativeEvent.velocityY > 100) { - this.close(); - } else { - let finalSnapPoint = this.currentSnapPoint; - - // Open it up more if it moves up enough - if ( - this.currentSnapPoint > 0 && - y < this.snapPoints[this.currentSnapPoint] - 50 - ) { - finalSnapPoint = this.currentSnapPoint - 1; - } - - // Close it if moved down enough - if (y > this.snapPoints[this.currentSnapPoint] + 75) { - finalSnapPoint = this.snapPoints.length - 1; - } - - this.move(finalSnapPoint); - } - } - }; - - move = (snapPoint, cb) => { - const { onChangeState, onMove } = this.props; - this.currentSnapPoint = snapPoint; - const closing = this.currentSnapPoint === this.snapPoints.length - 1; - - Animated.spring(this.positionY, { - tension: 50, - toValue: this.snapPoints[snapPoint], - useNativeDriver: true - }).start(() => { - if (this.currentSnapPoint === snapPoint) { - if (onMove) { - onMove(snapPoint, this.snapPoints[snapPoint]); - } - } - }); - - if (closing) { - onChangeState && onChangeState('closing'); - Animated.timing(this.opacity, { - toValue: 0, - duration: 500, - useNativeDriver: true - }).start(() => { - onChangeState && onChangeState('closed'); - }); - } - }; - - close = cb => { - this.move(this.snapPoints.length - 1, cb); - }; - - render() { - const { children, flush } = this.props; - - return ( - (this.container = el)}> - - - - - - - {typeof children === 'function' - ? children({ - panEvent: this.panEvent, - onHandlerStateChange: this.onHandlerStateChange - }) - : children} - - - - - - - - - ); - } -} - -const styles = StyleSheet.create({ - container: { - flex: 1 - }, - sheet: { flex: 1 }, - closeHandle: { - width: 28, - height: 5, - backgroundColor: 'rgba(0, 0, 0, .2)', - alignSelf: 'center', - borderRadius: 5, - transform: [{ translateY: 10 }] - }, - darkened: { - position: 'absolute', - top: 0, - left: 0, - right: 0, - bottom: 0 - }, - header: { - position: 'absolute', - top: 0, - left: 0, - right: 0 - }, - content: { - flex: 1 - } -}); - -export default BottomSheet; diff --git a/packages/mobile/src/components/modals/CategorySelect.js b/packages/mobile/src/components/modals/CategorySelect.js deleted file mode 100644 index e58d371a9f..0000000000 --- a/packages/mobile/src/components/modals/CategorySelect.js +++ /dev/null @@ -1,25 +0,0 @@ -import React from 'react'; -import { View, Text } from 'react-native'; -import { colors } from 'loot-design/src/style'; -import GenericSearchableSelect from './GenericSearchableSelect'; - -export default function CategorySelect({ route, navigation }) { - let { onSelect } = route.params || {}; - return ( - ( - - {item.name} - - {item['group.name']} - - )} - onSelect={id => { - onSelect(id); - navigation.goBack(); - }} - /> - ); -} diff --git a/packages/mobile/src/components/modals/CreateEncryptionKey.js b/packages/mobile/src/components/modals/CreateEncryptionKey.js deleted file mode 100644 index 7c3600b311..0000000000 --- a/packages/mobile/src/components/modals/CreateEncryptionKey.js +++ /dev/null @@ -1,146 +0,0 @@ -import React, { useState } from 'react'; -import { View, Text, Linking } from 'react-native'; -import { bindActionCreators } from 'redux'; -import { connect } from 'react-redux'; -import * as actions from 'loot-core/src/client/actions'; -import { - Button, - ButtonWithLoading -} from 'loot-design/src/components/mobile/common'; -import { - FieldLabel, - InputField -} from 'loot-design/src/components/mobile/forms'; -import { send } from 'loot-core/src/platform/client/fetch'; -import { styles, colors } from 'loot-design/src/style'; -import Modal from '../modals/Modal'; -import { getCreateKeyError } from 'loot-core/src/shared/errors'; - -let textStyle = styles.text; - -function ExternalLink({ href, children }) { - return ( - Linking.openURL(href)} - > - {children} - - ); -} - -function CreateEncryptionKey({ route, navigation, actions }) { - let [password, setPassword] = useState(''); - let [error, setError] = useState(null); - let [loading, setLoading] = useState(false); - - let { recreate: isRecreating } = route.params || {}; - - async function onCreateKey() { - if (password !== '' && !loading) { - setLoading(true); - setError(null); - - let res = await send('key-make', { password }); - if (res.error) { - setLoading(null); - setError(getCreateKeyError(res.error)); - return; - } - - actions.loadGlobalPrefs(); - actions.loadAllFiles(); - actions.sync(); - - setLoading(false); - navigation.goBack(null); - } - } - - return ( - - - {!isRecreating ? ( - - To enable encryption, you need to create a key. We will generate a - key based on a password and use it to encrypt from now on. This is - full end-to-end encryption and you{"'"}ll need to enter this - password whenever you set up a new device.{' '} - - Learn more - - - ) : ( - <> - - This will generate a new key for encrypting your data. Changing - your key will upload all your data encrypted with the new key and - requires all other devices to be reset. Actual will take you - through that process on those devices.{' '} - - Learn more - - - - Key generation is randomized. The same password will create - different keys, so this will change your key regardless of the - password being different. - - - )} - - - {error && ( - - {error} - - )} - - - - setPassword(e.nativeEvent.text)} - onSubmitEditing={onCreateKey} - autoFocus - /> - - - - - - {isRecreating ? 'Reset key' : 'Enable'} - - - - ); -} - -export default connect(null, dispatch => ({ - actions: bindActionCreators(actions, dispatch) -}))(CreateEncryptionKey); diff --git a/packages/mobile/src/components/modals/FixEncryptionKey.js b/packages/mobile/src/components/modals/FixEncryptionKey.js deleted file mode 100644 index 8ff2b68c8d..0000000000 --- a/packages/mobile/src/components/modals/FixEncryptionKey.js +++ /dev/null @@ -1,132 +0,0 @@ -import React, { useState } from 'react'; -import { View, Text, Linking } from 'react-native'; -import { bindActionCreators } from 'redux'; -import { connect } from 'react-redux'; -import { - Button, - ButtonWithLoading -} from 'loot-design/src/components/mobile/common'; -import { - FieldLabel, - InputField -} from 'loot-design/src/components/mobile/forms'; -import { send } from 'loot-core/src/platform/client/fetch'; -import * as actions from 'loot-core/src/client/actions'; -import { styles, colors } from 'loot-design/src/style'; -import Modal from '../modals/Modal'; -import { getDownloadError, getTestKeyError } from 'loot-core/src/shared/errors'; - -function ExternalLink({ href, children }) { - return ( - Linking.openURL(href)} - > - {children} - - ); -} - -function FixEncryptionKey({ route, navigation, actions }) { - let [password, setPassword] = useState(''); - let [error, setError] = useState(null); - let [loading, setLoading] = useState(false); - - let { hasExistingKey, cloudFileId, onSuccess } = route.params || {}; - - async function onUpdateKey(e) { - if (password !== '' && !loading) { - setError(null); - setLoading(true); - - let { error } = await send('key-test', { - password, - fileId: cloudFileId - }); - setLoading(false); - - if (error) { - setError(getTestKeyError(error)); - return; - } - - navigation.goBack(null); - - if (onSuccess) { - onSuccess(); - } - } - } - - return ( - - - {hasExistingKey ? ( - - This file was encrypted with a different key than you are currently - using. This probably means you changed your password. Enter your - current password to update your key. - - ) : ( - - We don{"'"}t have a key that encrypts or decrypts this file. Enter - the password for this file to create the key for encryption. - - )} - - - {error && ( - - {error} - - )} - - - - setPassword(e.nativeEvent.text)} - onSubmitEditing={onUpdateKey} - autoFocus - /> - - - - - - {hasExistingKey ? 'Update key' : 'Create key'} - - - - ); -} - -export default connect( - null, - dispatch => ({ actions: bindActionCreators(actions, dispatch) }) -)(FixEncryptionKey); diff --git a/packages/mobile/src/components/modals/GenericSearchableSelect.js b/packages/mobile/src/components/modals/GenericSearchableSelect.js deleted file mode 100644 index 69c7527cea..0000000000 --- a/packages/mobile/src/components/modals/GenericSearchableSelect.js +++ /dev/null @@ -1,163 +0,0 @@ -import React, { useState, useRef, useEffect, useMemo } from 'react'; -import { View, Text, FlatList, TextInput, NativeModules } from 'react-native'; -import { RectButton } from 'react-native-gesture-handler'; -import q from 'loot-core/src/client/query-helpers'; -import FocusAwareStatusBar from 'loot-design/src/components/mobile/FocusAwareStatusBar'; -import KeyboardAvoidingView from 'loot-design/src/components/mobile/KeyboardAvoidingView'; -import { throwError } from 'loot-core/src/shared/util'; -import { useLiveQuery } from 'loot-core/src/client/query-hooks'; -import { ListItem } from 'loot-design/src/components/mobile/table'; -import { colors } from 'loot-design/src/style'; -import Add from 'loot-design/src/svg/v1/Add'; - -const queries = { - payees: q('payees').select('*'), - categories: q('categories') - .select(['*', 'group.name']) - .orderBy(['is_income', 'group.name']), - accounts: q('accounts') - .select('*') - .orderBy('name') -}; - -const ACTScrollViewManager = - NativeModules && NativeModules.ACTScrollViewManager; - -export default function GenericSearchableSelect({ - title, - dataName, - canAdd, - formatItem, - onSelect -}) { - let [text, setText] = useState(''); - let inputRef = useRef(null); - let scrollRef = useRef(null); - - let { data: allData } = useLiveQuery( - queries[dataName] || throwError(new Error('Unknown data type: ' + dataName)) - ); - - let data = useMemo(() => { - if (allData) { - let data = allData.filter(item => { - if (text != '' && text != null) { - return item.name.toLowerCase().includes(text.toLowerCase()); - } - return item.name !== ''; - }); - - if (canAdd) { - data.unshift({ id: 'new', name: '' }); - } - return data; - } - return allData; - }, [allData, text, canAdd]); - - useEffect(() => { - let list = scrollRef.current; - if (list) { - ACTScrollViewManager.activate( - (list.getNode ? list.getNode() : list).getScrollableNode() - ); - } - - if (inputRef.current) { - inputRef.current.focus(); - } - }, []); - - let onFilter = text => { - setText(text); - }; - - let renderItem = ({ item }) => { - let isNew = item.id === 'new'; - - if (isNew && text === '') { - return null; - } - - let display = formatItem ? formatItem(item) : item.name; - - return ( - onSelect && onSelect(isNew ? 'new:' + text : item.id)} - underlayColor="#f0f0f0" - activeOpacity={1} - style={{ backgroundColor: 'white' }} - > - - {isNew ? ( - <> - - - {'Create Payee ' + text} - - - ) : typeof display === 'string' ? ( - {display} - ) : ( - display - )} - - - ); - }; - - return ( - - - - - {title} - - - - {data == null ? null : ( - item.id} - style={{ flex: 1 }} - /> - )} - - ); -} diff --git a/packages/mobile/src/components/modals/GenericSelect.js b/packages/mobile/src/components/modals/GenericSelect.js deleted file mode 100644 index 953fe2c79d..0000000000 --- a/packages/mobile/src/components/modals/GenericSelect.js +++ /dev/null @@ -1,66 +0,0 @@ -import React from 'react'; -import { View, Text, FlatList, Keyboard } from 'react-native'; -import { RectButton } from 'react-native-gesture-handler'; -import { ListItem } from 'loot-design/src/components/mobile/table'; -class GenericSelect extends React.Component { - onSelect = value => { - const { navigation } = this.props; - const { onSelect } = this.props.route.params || {}; - onSelect && onSelect(value); - navigation.goBack(); - }; - - renderItem = ({ item }) => { - return ( - this.onSelect(item.value)} - underlayColor="#f0f0f0" - activeOpacity={1} - style={{ backgroundColor: 'white' }} - > - - {item.label} - - - ); - }; - - render() { - const { navigation } = this.props; - const { title, items, snapPoints } = this.props.route.params || {}; - - return ( - - - - {title} - - - item.value} - style={{ flex: 1, backgroundColor: 'white' }} - /> - - ); - } -} - -export default GenericSelect; diff --git a/packages/mobile/src/components/modals/Modal.js b/packages/mobile/src/components/modals/Modal.js deleted file mode 100644 index 0deaf34bae..0000000000 --- a/packages/mobile/src/components/modals/Modal.js +++ /dev/null @@ -1,177 +0,0 @@ -import React from 'react'; -import { View, Text, Animated, Easing, ScrollView } from 'react-native'; -import { SafeAreaView } from 'react-native-safe-area-context'; -import FocusAwareStatusBar from 'loot-design/src/components/mobile/FocusAwareStatusBar'; -import { colors } from 'loot-design/src/style'; -import KeyboardAvoidingView from 'loot-design/src/components/mobile/KeyboardAvoidingView'; -import { Button } from 'loot-design/src/components/mobile/common'; -import Close from 'loot-design/src/svg/v1/Close'; - -export function navigateToModal(navigation, name) { - navigation.navigate({ name, key: 'modal' }); -} - -export function CloseButton({ navigation }) { - return ( - - ); -} - -class Modal extends React.Component { - opening = new Animated.Value(0); - - componentDidMount() { - if (this.props.animate) { - Animated.timing(this.opening, { - toValue: 1, - duration: 200, - easing: Easing.bezier(0.25, 0.1, 0.25, 1.0) - }).start(); - } - } - - close() { - Animated.timing(this.opening, { - toValue: 0, - duration: 200, - easing: Easing.bezier(0.25, 0.1, 0.25, 1.0) - }).start(); - } - - render() { - let { - title, - style, - children, - animate, - backgroundColor, - rightButton, - allowScrolling = true, - edges = ['top', 'bottom'] - } = this.props; - animate = false; - - return ( - - - - - - (this.modal = el)} - > - - - {title} - - {rightButton && ( - - {rightButton} - - )} - - {allowScrolling ? ( - {children} - ) : ( - children - )} - - - - - - ); - } -} - -const _Modal = Modal; - -export default React.forwardRef(function Modal(props, ref) { - return ( - <_Modal - {...props} - onRef={modal => { - // TODO: This is a hacky bugfix. We need to expose the internal - // `close` function and for some reason the HOC keeps being - // exposed instead. In the future, we should use render props - // or hooks and avoid all of this entirely - if (modal && modal.close && typeof ref === 'function') { - ref(modal); - } - }} - /> - ); -}); diff --git a/packages/mobile/src/components/modals/PayeeSelect.js b/packages/mobile/src/components/modals/PayeeSelect.js deleted file mode 100644 index 902e9211b7..0000000000 --- a/packages/mobile/src/components/modals/PayeeSelect.js +++ /dev/null @@ -1,25 +0,0 @@ -import React from 'react'; -import { send } from 'loot-core/src/platform/client/fetch'; -import GenericSearchableSelect from './GenericSearchableSelect'; - -export default function PayeeSelect({ route, navigation }) { - let { onSelect } = route.params || {}; - return ( - (item.transfer_acct ? 'Transfer: ' : '') + item.name} - onSelect={async id => { - if (id.startsWith('new:')) { - id = await send('payee-create', { - name: id.slice('new:'.length) - }); - } - - onSelect(id); - navigation.goBack(); - }} - /> - ); -} diff --git a/packages/mobile/src/components/modals/ScrollableBottomSheet.js b/packages/mobile/src/components/modals/ScrollableBottomSheet.js deleted file mode 100644 index 1e911ad988..0000000000 --- a/packages/mobile/src/components/modals/ScrollableBottomSheet.js +++ /dev/null @@ -1,229 +0,0 @@ -import React, { Component } from 'react'; -import { - View, - Animated, - KeyboardAvoidingView, - Keyboard, - Dimensions, - NativeModules, - Platform -} from 'react-native'; -import BottomSheet from './BottomSheet'; -import { - PanGestureHandler, - NativeViewGestureHandler -} from 'react-native-gesture-handler'; -import AndroidKeyboardAvoidingView from 'loot-design/src/components/mobile/AndroidKeyboardAvoidingView'; - -class ScrollableBottomSheet extends Component { - state = { shouldCheckScrollPan: true }; - - constructor() { - super(); - this.scrollHandler = React.createRef(); - this.checkScrollHandler = React.createRef(); - this.scrollWrapperHandler = React.createRef(); - this.positionY = 0; - this.keyboardHeight = 0; - } - - componentDidMount() { - if (Platform.OS === 'ios') { - const updateInset = e => { - this.keyboardHeight = - Dimensions.get('window').height - e.endCoordinates.screenY; - this.updateInset(); - }; - - const listener = Keyboard.addListener( - 'keyboardWillChangeFrame', - updateInset - ); - this.cleanup = () => { - listener.remove(); - }; - } else { - const onOpen = e => { - this.keyboardHeight = e.endCoordinates.height; - this.updateInset(); - }; - const onClose = e => { - this.keyboardHeight = 0; - this.updateInset(); - }; - - const listener1 = Keyboard.addListener('keyboardDidShow', onOpen); - const listener2 = Keyboard.addListener('keyboardDidHide', onClose); - this.cleanup = () => { - listener1.remove(); - listener2.remove(); - }; - } - } - - componentWillUnmount() { - this.cleanup(); - } - - onScrollPan = e => { - if (e.nativeEvent.y < 0 && this.currentSnapPoint !== 0) { - this.sheet.move(0); - } - }; - - onScrollBeginDrag = e => { - // Turn off the sheet pan handler when the scroll view activates - if (this.state.shouldCheckScrollPan) { - this.setState({ shouldCheckScrollPan: false }); - } - this.notifyScrollStateChanged(e, true); - this.dragging = true; - }; - - onScrollEndDrag = e => { - // Turn on the sheet pan handler when the scroll view has stopped - // moving and if it's at the top. It's important that this is done - // in this event and not a scroll end event which fires immediately - // when the user lifts their finger. This fires when the scroll - // view actually stops moving - const contentY = e.nativeEvent.contentOffset.y; - if (contentY <= 0 && !this.state.shouldCheckScrollPan) { - this.setState({ shouldCheckScrollPan: true }); - } - - if (e.nativeEvent.velocity.y === 0) { - this.notifyScrollStateChanged(e, false); - } - this.dragging = false; - }; - - onScroll = e => { - // This check is mostly an optimization, we don't need to switch - // it during a swipe. It also avoids the case where the user it - // crossing the threshold multiple times during a swipe and we - // would need to turn off `shouldCheckScrollPan` if they move back - // down - if (!this.dragging) { - const contentY = e.nativeEvent.contentOffset.y; - if (contentY <= 0 && !this.state.shouldCheckScrollPan) { - this.setState({ shouldCheckScrollPan: true }); - } - } - }; - - notifyScrollStateChanged = (args, isScrolling) => { - const { onScrollStateChanged } = this.props; - onScrollStateChanged && onScrollStateChanged({ isScrolling, args }); - }; - - onMomentumScrollEnd = e => { - this.notifyScrollStateChanged(e, false); - }; - - open = () => { - this.sheet.move(0); - }; - - close = cb => { - this.sheet.close(cb); - }; - - move = snapPoint => { - this.sheet.move(snapPoint); - }; - - onMove = (snapPoint, positionY) => { - this.currentSnapPoint = snapPoint; - this.positionY = positionY; - this.updateInset(); - }; - - updateInset() { - const inset = this.positionY + this.keyboardHeight; - - if (Platform.OS === 'ios') { - // this.scrollView.setNativeProps({ - // contentInset: { - // top: 0, - // left: 0, - // right: 0, - // bottom: inset - // } - // }); - } else { - this.setState({ forcedHeight: inset }); - } - } - - render() { - const { shouldCheckScrollPan, forcedHeight } = this.state; - const { - renderHeader, - renderScroll = this.defaultRenderScroll - } = this.props; - - return ( - (this.sheet = el)} - onMove={this.onMove} - {...this.props} - > - {({ panEvent, onHandlerStateChange }) => { - return ( - - {renderHeader && renderHeader()} - - - - - - {renderScroll({ - ref: el => (this.scrollView = el), - automaticallyAdjustContentInsets: false, - onScrollBeginDrag: this.onScrollBeginDrag, - onScrollEndDrag: this.onScrollEndDrag, - onScroll: this.onScroll, - onMomentumScrollEnd: this.onMomentumScrollEnd, - scrollEventThrottle: 1 - })} - - - - - - - ); - }} - - ); - } -} - -export default ScrollableBottomSheet; diff --git a/packages/mobile/src/components/modals/link-accounts/Account.js b/packages/mobile/src/components/modals/link-accounts/Account.js deleted file mode 100644 index df35ece92f..0000000000 --- a/packages/mobile/src/components/modals/link-accounts/Account.js +++ /dev/null @@ -1,52 +0,0 @@ -import React from 'react'; -import { View, Text } from 'react-native'; -import { RectButton } from 'react-native-gesture-handler'; - -import { - fromPlaidAccountType, - prettyAccountType -} from 'loot-core/src/shared/accounts'; -import { colors, styles } from 'loot-design/src/style'; - -export default function Account({ account, style, rightContent, onPress }) { - return ( - - - - - - - {account.name} - - - - - {prettyAccountType( - fromPlaidAccountType(account.type, account.subtype) - )} - - - ...{account.mask} - - - - {rightContent} - - - - ); -} diff --git a/packages/mobile/src/components/modals/link-accounts/ConfigureLinkedAccounts.js b/packages/mobile/src/components/modals/link-accounts/ConfigureLinkedAccounts.js deleted file mode 100644 index 8e2351bc26..0000000000 --- a/packages/mobile/src/components/modals/link-accounts/ConfigureLinkedAccounts.js +++ /dev/null @@ -1,140 +0,0 @@ -import React, { useState, useEffect, useRef } from 'react'; -import { View, Text, ScrollView, Switch } from 'react-native'; -import { connect } from 'react-redux'; -import * as actions from 'loot-core/src/client/actions'; -import { colors, styles } from 'loot-design/src/style'; -import { - Button, - ButtonWithLoading -} from 'loot-design/src/components/mobile/common'; -import Checkmark from 'loot-design/src/svg/v1/Checkmark'; -import { useScrollFlasher } from 'loot-design/src/components/mobile/hooks'; -import { - determineOffBudget, - fromPlaidAccountType -} from 'loot-core/src/shared/accounts'; -import Modal, { CloseButton } from '../Modal'; -import Account from './Account'; - -function ConfigureLinkedAccounts({ route, navigation, connectAccounts }) { - let { institution, publicToken, accounts } = route.params || {}; - - let scrollRef = useScrollFlasher(); - let [offbudgetAccounts, setOffbudgetAccounts] = useState(() => - accounts - .filter(acct => - determineOffBudget(fromPlaidAccountType(acct.type, acct.subtype)) - ) - .map(acct => acct.id) - ); - let [loading, setLoading] = useState(false); - - function onBack() { - navigation.goBack(); - } - - async function onNext() { - setLoading(true); - await connectAccounts( - institution, - publicToken, - accounts.map(acct => acct.id), - offbudgetAccounts - ); - setLoading(false); - - navigation.goBack('modal'); - } - - function onToggleAccount(id) { - if (offbudgetAccounts.includes(id)) { - setOffbudgetAccounts(offbudgetAccounts.filter(x => x !== id)); - } else { - setOffbudgetAccounts([...offbudgetAccounts, id]); - } - } - - return ( - } - > - - - A budgeted account is one - where expenses and income affect the budget. Usually things like - investments are off budget. We{"'"}ve chosen some defaults here, but - you can change the status if you like. - - - - {accounts.length === 0 ? ( - - - - ) : ( - - - {accounts.map(acct => { - let offbudget = offbudgetAccounts.includes(acct.id); - - return ( - - {offbudget ? ( - - Off budget - - ) : ( - <> - - - Budgeted - - - )} - - } - onPress={() => onToggleAccount(acct.id)} - /> - ); - })} - - - )} - - - - - Next - - - - ); -} - -export default connect(null, actions)(ConfigureLinkedAccounts); diff --git a/packages/mobile/src/components/modals/link-accounts/SelectLinkedAccounts.js b/packages/mobile/src/components/modals/link-accounts/SelectLinkedAccounts.js deleted file mode 100644 index f0053566b8..0000000000 --- a/packages/mobile/src/components/modals/link-accounts/SelectLinkedAccounts.js +++ /dev/null @@ -1,101 +0,0 @@ -import React, { useState, useEffect } from 'react'; -import { View, Text, ScrollView } from 'react-native'; -import Modal, { CloseButton } from '../Modal'; -import { colors, styles } from 'loot-design/src/style'; -import { Button } from 'loot-design/src/components/mobile/common'; -import Checkmark from 'loot-design/src/svg/v1/Checkmark'; -import { useScrollFlasher } from 'loot-design/src/components/mobile/hooks'; -import Account from './Account'; - -export default function SelectLinkedAccounts({ route, navigation }) { - let { institution, publicToken, accounts } = route.params || {}; - - let scrollRef = useScrollFlasher(); - let [selectedAccounts, setSelectedAccounts] = useState([]); - - useEffect(() => { - setTimeout(() => { - if (scrollRef.current) { - scrollRef.current.flashScrollIndicators(); - } - }, 1000); - }, []); - - function onToggleAccount(id) { - if (selectedAccounts.includes(id)) { - setSelectedAccounts(selectedAccounts.filter(x => x !== id)); - } else { - setSelectedAccounts([...selectedAccounts, id]); - } - } - - function onNext() { - navigation.navigate('ConfigureLinkedAccounts', { - institution, - publicToken, - accounts: selectedAccounts.map(id => - accounts.find(acct => acct.id === id) - ) - }); - } - - return ( - } - > - - Select which accounts you want to link: - - - {accounts.length === 0 ? ( - - - - ) : ( - - - {accounts.map(acct => { - let selected = selectedAccounts.includes(acct.id); - return ( - - - - ) - } - onPress={() => onToggleAccount(acct.id)} - /> - ); - })} - - - )} - - - - - - ); -} diff --git a/packages/mobile/src/components/transactions/ChildEdit.js b/packages/mobile/src/components/transactions/ChildEdit.js deleted file mode 100644 index 2a616ea03b..0000000000 --- a/packages/mobile/src/components/transactions/ChildEdit.js +++ /dev/null @@ -1,190 +0,0 @@ -import React from 'react'; -import { - View, - Text, - ScrollView, - TextInput, - NativeModules, - Animated -} from 'react-native'; -import { PanGestureHandler, State } from 'react-native-gesture-handler'; -import { - FieldLabel, - TapField, - InputField -} from 'loot-design/src/components/mobile/forms'; -import { colors, mobileStyles } from 'loot-design/src/style'; -import { FocusableAmountInput } from 'loot-design/src/components/mobile/AmountInput'; -import { currencyToInteger, integerToAmount } from 'loot-core/src/shared/util'; - -class ChildEdit extends React.PureComponent { - gestureY = new Animated.Value(400); - gestureEvent = Animated.event( - [{ nativeEvent: { translationY: this.gestureY } }], - { useNativeDriver: true } - ); - - componentDidMount() { - Animated.spring(this.gestureY, { - tension: 50, - toValue: 0, - useNativeDriver: true - }).start(); - } - - componentDidUpdate(prevProps) { - if (!prevProps.exiting && this.props.exiting) { - Animated.spring(this.gestureY, { - tension: 50, - toValue: 400, - useNativeDriver: true - }).start(() => { - this.props.onClose(); - }); - } else if (prevProps.exiting && !this.props.exiting) { - Animated.spring(this.gestureY, { - tension: 50, - toValue: 0, - useNativeDriver: true - }).start(); - } - } - - onHandlerStateChange = e => { - if (e.nativeEvent.oldState === State.ACTIVE) { - const closing = e.nativeEvent.translationY > 80; - - if (closing) { - this.props.onStartClose(); - } else { - Animated.spring(this.gestureY, { - tension: 50, - toValue: 0, - useNativeDriver: true - }).start(); - } - } - }; - - onEditCategory = () => { - this.props.navigation.navigate('CategorySelect', { - title: 'Select a category', - onSelect: id => { - this.props.onEdit(this.props.transaction, 'category', id); - } - }); - }; - - render() { - const { transaction, exiting, getCategoryName, amountSign } = this.props; - - return ( - - - - - - - Edit Split Transaction - - - - - - - this.props.onEdit(transaction, 'amount', value.toString()) - } - textStyle={{ fontSize: 20, textAlign: 'center' }} - /> - - - - - - - - this.props.onEdit(transaction, 'notes', value) - } - /> - - - - - ); - } -} - -export default ChildEdit; diff --git a/packages/mobile/src/components/transactions/Transaction.js b/packages/mobile/src/components/transactions/Transaction.js deleted file mode 100644 index 07cabc74a9..0000000000 --- a/packages/mobile/src/components/transactions/Transaction.js +++ /dev/null @@ -1,183 +0,0 @@ -import React from 'react'; -import { connect } from 'react-redux'; -import { View } from 'react-native'; -import { bindActionCreators } from 'redux'; -import { useSafeAreaInsets } from 'react-native-safe-area-context'; -import * as actions from 'loot-core/src/client/actions'; -import * as monthUtils from 'loot-core/src/shared/months'; -import FocusAwareStatusBar from 'loot-design/src/components/mobile/FocusAwareStatusBar'; -import { TransactionEdit } from 'loot-design/src/components/mobile/transaction'; -import ChildEdit from './ChildEdit'; -import { send } from 'loot-core/src/platform/client/fetch'; -import { getChangedValues, diffItems } from 'loot-core/src/shared/util'; -import { colors } from 'loot-design/src/style'; - -function isTemporary(transaction) { - return transaction.id.indexOf('temp') === 0; -} - -function makeTemporaryTransactions(currentAccountId, lastDate) { - return [ - { - id: 'temp', - date: lastDate || monthUtils.currentDay(), - account: currentAccountId, - amount: 0, - cleared: false - } - ]; -} - -class _Transaction extends React.Component { - componentDidMount() { - this.props.getCategories(); - this.props.getAccounts(); - } - - onEdit = async transaction => { - // Run the rules to auto-fill in any data. Right now we only do - // this on new transactions because that's how desktop works. - if (isTemporary(transaction)) { - let afterRules = await send('rules-run', { transaction }); - let diff = getChangedValues(transaction, afterRules); - - let newTransaction = { ...transaction }; - if (diff) { - Object.keys(diff).forEach(field => { - if (newTransaction[field] == null) { - newTransaction[field] = diff[field]; - } - }); - } - return newTransaction; - } - - return transaction; - }; - - onSave = async newTransactions => { - const { transactions } = this.props.route.params || {}; - if (this.deleted) { - return; - } - - const changes = diffItems(transactions || [], newTransactions); - if ( - changes.added.length > 0 || - changes.updated.length > 0 || - changes.deleted.length - ) { - const remoteUpdates = await send('transactions-batch-update', { - added: changes.added, - deleted: changes.deleted, - updated: changes.updated - }); - - const { onTransactionsChange: onChange } = this.props.route.params || {}; - if (onChange) { - onChange({ - ...changes, - updated: changes.updated.concat(remoteUpdates) - }); - } - } - - // If transactions is null, we are adding a new transaction - if (transactions === null) { - // The first one is always the "parent" and the only one we care - // about - this.props.setLastTransaction(newTransactions[0]); - } - }; - - onDelete = async () => { - const { transactions } = this.props.route.params || {}; - - // Eagerly go back - this.props.navigation.goBack(null); - - if (transactions === null) { - // Adding a new transactions, this disables saving when the component unmounts - this.deleted = true; - } else { - const changes = { deleted: transactions }; - const remoteUpdates = await send('transactions-batch-update', changes); - const { onTransactionsChange: onChange } = this.props.route.params || {}; - if (onChange) { - onChange({ ...changes, updated: remoteUpdates }); - } - } - }; - - render() { - const { - categories, - accounts, - payees, - navigation, - route, - lastTransaction, - dateFormat - } = this.props; - let { transactions } = this.props.route.params || {}; - let adding = false; - - if (transactions === null) { - // Create an empty transaction - transactions = makeTemporaryTransactions( - (route.params && route.params.accountId) || - (lastTransaction && lastTransaction.account) || - null, - lastTransaction && lastTransaction.date - ); - adding = true; - } - - if (categories.length === 0 || accounts.length === 0) { - return null; - } - - return ( - - - } - dateFormat={dateFormat} - onTapField={this.onTapField} - onEdit={this.onEdit} - onSave={this.onSave} - onDelete={this.onDelete} - /> - - ); - } -} - -function Transaction(props) { - const insets = useSafeAreaInsets(); - return <_Transaction insets={insets} {...props} />; -} - -export default connect( - state => ({ - categories: state.queries.categories.list, - payees: state.queries.payees, - lastTransaction: state.queries.lastTransaction, - accounts: state.queries.accounts, - dateFormat: state.prefs.local.dateFormat || 'MM/dd/yyyy' - }), - dispatch => bindActionCreators(actions, dispatch) -)(Transaction); diff --git a/packages/mobile/src/util/iap.js b/packages/mobile/src/util/iap.js deleted file mode 100644 index 226d1d9c48..0000000000 --- a/packages/mobile/src/util/iap.js +++ /dev/null @@ -1,161 +0,0 @@ -import Purchases from 'react-native-purchases'; -import { captureException } from 'loot-core/src/platform/exceptions'; - -// This should stay in sync with the enum in RCPurchasesErrors.h -function RCPurchasesErrorDescription(code) { - let errors = [ - 'RCUnknownError', - 'RCPurchaseCancelledError', - 'RCStoreProblemError', - 'RCPurchaseNotAllowedError', - 'RCPurchaseInvalidError', - 'RCProductNotAvailableForPurchaseError', - 'RCProductAlreadyPurchasedError', - 'RCReceiptAlreadyInUseError', - 'RCInvalidReceiptError', - 'RCMissingReceiptFileError', - 'RCNetworkError', - 'RCInvalidCredentialsError', - 'RCUnexpectedBackendResponseError', - 'RCReceiptInUseByOtherSubscriberError', - 'RCInvalidAppUserIdError', - 'RCOperationAlreadyInProgressError', - 'RCUnknownBackendError', - 'RCInvalidAppleSubscriptionKeyError', - 'RCIneligibleError', - 'RCInsufficientPermissionsError', - 'RCPaymentPendingError', - 'RCInvalidSubscriberAttributesError' - ]; - - return errors[code]; -} - -let IS_SETUP = false; - -export async function setupPurchases(userData) { - // eslint-disable-next-line - // Purchases.debugLogsEnabled = __DEV__; - // await Purchases.identify(userData.id); - // await Purchases.setEmail(userData.email); - // await Purchases.setAttributes({ userId: userData.id }); -} - -export async function invalidatePurchaserInfoCache() { - // if (IS_SETUP) { - // await Purchases.invalidatePurchaserInfoCache(); - // } -} - -export async function resetUser() { - if (IS_SETUP) { - await Purchases.reset(); - } -} - -let _cachedPackages = null; - -export async function getOfferings() { - if (_cachedPackages) { - return _cachedPackages; - } - - let offerings = await Purchases.getOfferings(); - if (offerings && offerings.current) { - let packages = offerings.current.availablePackages; - let monthly = packages.find( - p => p.packageType === Purchases.PACKAGE_TYPE.MONTHLY - ); - - if (!monthly) { - alert('No subscription offerings available'); - } else { - _cachedPackages = [monthly]; - return _cachedPackages; - } - } else { - alert('No subscription offerings available'); - } - - return null; -} - -export async function purchase(package_) { - try { - let { productIdentifier, purchaserInfo } = await Purchases.purchasePackage( - package_ - ); - - return { - productId: productIdentifier, - purchaser: purchaserInfo - }; - } catch (e) { - console.log(e); - let desc = RCPurchasesErrorDescription(e.code); - - if (desc !== 'RCPurchaseCancelledError') { - captureException( - new Error(`Error purchasing subscription: ${e.code} ${desc}`) - ); - - switch (desc) { - case 'RCProductNotAvailableForPurchaseError': - case 'RCNetworkError': - alert( - 'Unable to contact the server. Check your internet connection.' - ); - break; - case 'RCStoreProblemError': - alert( - 'There was a problem connection to the store. Please try again' - ); - break; - case 'RCProductAlreadyPurchasedError': - alert('This product has already been purchased'); - break; - default: - alert( - 'An error occurred processing your subscription. Please contact help@actualbudget.com for support.' - ); - } - } - } - - return null; -} - -export async function restore() { - try { - let purchaser = await Purchases.restoreTransactions(); - return purchaser; - } catch (e) { - let desc = RCPurchasesErrorDescription(e.code); - - captureException( - new Error(`Error restoring subscription: ${e.code} ${desc}`) - ); - - switch (desc) { - case 'RCReceiptAlreadyInUseError': - alert( - 'The current subscription is in use by a different account. Please sign into your device with the correct account.' - ); - break; - case 'RCMissingReceiptFileError': - alert( - 'Receipt missing. Make sure you are signed into the correct account on your device.' - ); - break; - case 'RCNetworkError': - alert('Unable to contact the server. Check your internet connection.'); - break; - default: - alert( - 'An error occurred processing your subscription. Please contact help@actualbudget.com for support.' - ); - } - } - - return null; -} diff --git a/packages/mobile/test/jest.config.js b/packages/mobile/test/jest.config.js deleted file mode 100644 index 4c56897037..0000000000 --- a/packages/mobile/test/jest.config.js +++ /dev/null @@ -1,6 +0,0 @@ -module.exports = { - moduleFileExtensions: ['js', 'ts', 'json', 'testing.js'], - setupTestFrameworkScriptFile: './test/setup.js', - testEnvironment: 'node', - rootDir: '../', -}; diff --git a/packages/mobile/test/setup.js b/packages/mobile/test/setup.js deleted file mode 100644 index 0aaf5885d2..0000000000 --- a/packages/mobile/test/setup.js +++ /dev/null @@ -1,19 +0,0 @@ -const detox = require('detox'); -const config = require('../package.json').detox; -const adapter = require('detox/runners/jest/adapter'); - -jest.setTimeout(120000); -jasmine.getEnv().addReporter(adapter); - -beforeAll(async () => { - await detox.init(config); -}); - -beforeEach(async () => { - await adapter.beforeEach(); -}); - -afterAll(async () => { - await adapter.afterAll(); - await detox.cleanup(); -}); \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index eb833e9d1d..7c5bc462c1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -152,7 +152,7 @@ __metadata: languageName: node linkType: hard -"@babel/code-frame@npm:^7.16.0, @babel/code-frame@npm:^7.8.3": +"@babel/code-frame@npm:^7.16.0, @babel/code-frame@npm:^7.18.6, @babel/code-frame@npm:^7.8.3": version: 7.18.6 resolution: "@babel/code-frame@npm:7.18.6" dependencies: @@ -168,6 +168,13 @@ __metadata: languageName: node linkType: hard +"@babel/compat-data@npm:^7.20.5": + version: 7.20.10 + resolution: "@babel/compat-data@npm:7.20.10" + checksum: 6ed6c1bb6fc03c225d63b8611788cd976107d1692402b560ebffbf1fa53e63705f8625bb12e12d17ce7f7af34e61e1ca96c77858aac6f57010045271466200c0 + languageName: node + linkType: hard + "@babel/core@npm:^7.15.1": version: 7.17.8 resolution: "@babel/core@npm:7.17.8" @@ -191,7 +198,18 @@ __metadata: languageName: node linkType: hard -"@babel/generator@npm:^7.14.0, @babel/generator@npm:^7.17.3, @babel/generator@npm:^7.17.7, @babel/generator@npm:^7.7.2": +"@babel/generator@npm:^7.14.0, @babel/generator@npm:^7.20.7": + version: 7.20.7 + resolution: "@babel/generator@npm:7.20.7" + dependencies: + "@babel/types": ^7.20.7 + "@jridgewell/gen-mapping": ^0.3.2 + jsesc: ^2.5.1 + checksum: 84b6983ffdb50c80c1c2e3f3c32617a7133d8effd1065f3e0f9bba188a7d54ab42a4dd5e42b61b843c65f9dd1aa870036ff0f848ebd42707aaa8a2b6d31d04f5 + languageName: node + linkType: hard + +"@babel/generator@npm:^7.17.3, @babel/generator@npm:^7.17.7, @babel/generator@npm:^7.7.2": version: 7.17.7 resolution: "@babel/generator@npm:7.17.7" dependencies: @@ -211,6 +229,15 @@ __metadata: languageName: node linkType: hard +"@babel/helper-annotate-as-pure@npm:^7.18.6": + version: 7.18.6 + resolution: "@babel/helper-annotate-as-pure@npm:7.18.6" + dependencies: + "@babel/types": ^7.18.6 + checksum: 88ccd15ced475ef2243fdd3b2916a29ea54c5db3cd0cfabf9d1d29ff6e63b7f7cd1c27264137d7a40ac2e978b9b9a542c332e78f40eb72abe737a7400788fc1b + languageName: node + linkType: hard + "@babel/helper-builder-binary-assignment-operator-visitor@npm:^7.16.7": version: 7.16.7 resolution: "@babel/helper-builder-binary-assignment-operator-visitor@npm:7.16.7" @@ -221,6 +248,16 @@ __metadata: languageName: node linkType: hard +"@babel/helper-builder-binary-assignment-operator-visitor@npm:^7.18.6": + version: 7.18.9 + resolution: "@babel/helper-builder-binary-assignment-operator-visitor@npm:7.18.9" + dependencies: + "@babel/helper-explode-assignable-expression": ^7.18.6 + "@babel/types": ^7.18.9 + checksum: b4bc214cb56329daff6cc18a7f7a26aeafb55a1242e5362f3d47fe3808421f8c7cd91fff95d6b9b7ccb67e14e5a67d944e49dbe026942bfcbfda19b1c72a8e72 + languageName: node + linkType: hard + "@babel/helper-compilation-targets@npm:^7.13.0, @babel/helper-compilation-targets@npm:^7.14.5, @babel/helper-compilation-targets@npm:^7.16.7, @babel/helper-compilation-targets@npm:^7.17.7": version: 7.17.7 resolution: "@babel/helper-compilation-targets@npm:7.17.7" @@ -235,6 +272,21 @@ __metadata: languageName: node linkType: hard +"@babel/helper-compilation-targets@npm:^7.18.9, @babel/helper-compilation-targets@npm:^7.20.7": + version: 7.20.7 + resolution: "@babel/helper-compilation-targets@npm:7.20.7" + dependencies: + "@babel/compat-data": ^7.20.5 + "@babel/helper-validator-option": ^7.18.6 + browserslist: ^4.21.3 + lru-cache: ^5.1.1 + semver: ^6.3.0 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 8c32c873ba86e2e1805b30e0807abd07188acbe00ebb97576f0b09061cc65007f1312b589eccb4349c5a8c7f8bb9f2ab199d41da7030bf103d9f347dcd3a3cf4 + languageName: node + linkType: hard + "@babel/helper-create-class-features-plugin@npm:^7.14.5, @babel/helper-create-class-features-plugin@npm:^7.16.10, @babel/helper-create-class-features-plugin@npm:^7.16.7, @babel/helper-create-class-features-plugin@npm:^7.17.6": version: 7.17.6 resolution: "@babel/helper-create-class-features-plugin@npm:7.17.6" @@ -252,6 +304,24 @@ __metadata: languageName: node linkType: hard +"@babel/helper-create-class-features-plugin@npm:^7.18.6, @babel/helper-create-class-features-plugin@npm:^7.20.7": + version: 7.20.12 + resolution: "@babel/helper-create-class-features-plugin@npm:7.20.12" + dependencies: + "@babel/helper-annotate-as-pure": ^7.18.6 + "@babel/helper-environment-visitor": ^7.18.9 + "@babel/helper-function-name": ^7.19.0 + "@babel/helper-member-expression-to-functions": ^7.20.7 + "@babel/helper-optimise-call-expression": ^7.18.6 + "@babel/helper-replace-supers": ^7.20.7 + "@babel/helper-skip-transparent-expression-wrappers": ^7.20.0 + "@babel/helper-split-export-declaration": ^7.18.6 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 1e9ed4243b75278fa24deb40dc62bf537b79307987223a2d2d2ae5abf7ba6dc8435d6e3bb55d52ceb30d3e1eba88e7eb6a1885a8bb519e5cfc3e9dedb97d43e6 + languageName: node + linkType: hard + "@babel/helper-create-regexp-features-plugin@npm:^7.16.7": version: 7.17.0 resolution: "@babel/helper-create-regexp-features-plugin@npm:7.17.0" @@ -264,6 +334,18 @@ __metadata: languageName: node linkType: hard +"@babel/helper-create-regexp-features-plugin@npm:^7.18.6": + version: 7.20.5 + resolution: "@babel/helper-create-regexp-features-plugin@npm:7.20.5" + dependencies: + "@babel/helper-annotate-as-pure": ^7.18.6 + regexpu-core: ^5.2.1 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 7f29c3cb7447cca047b0d394f8ab98e4923d00e86a7afa56e5df9770c48ec107891505d2d1f06b720ecc94ed24bf58d90986cc35fe4a43b549eb7b7a5077b693 + languageName: node + linkType: hard + "@babel/helper-define-polyfill-provider@npm:^0.3.1": version: 0.3.1 resolution: "@babel/helper-define-polyfill-provider@npm:0.3.1" @@ -282,6 +364,22 @@ __metadata: languageName: node linkType: hard +"@babel/helper-define-polyfill-provider@npm:^0.3.3": + version: 0.3.3 + resolution: "@babel/helper-define-polyfill-provider@npm:0.3.3" + dependencies: + "@babel/helper-compilation-targets": ^7.17.7 + "@babel/helper-plugin-utils": ^7.16.7 + debug: ^4.1.1 + lodash.debounce: ^4.0.8 + resolve: ^1.14.2 + semver: ^6.1.2 + peerDependencies: + "@babel/core": ^7.4.0-0 + checksum: 8e3fe75513302e34f6d92bd67b53890e8545e6c5bca8fe757b9979f09d68d7e259f6daea90dc9e01e332c4f8781bda31c5fe551c82a277f9bc0bec007aed497c + languageName: node + linkType: hard + "@babel/helper-environment-visitor@npm:^7.16.7": version: 7.16.7 resolution: "@babel/helper-environment-visitor@npm:7.16.7" @@ -291,6 +389,13 @@ __metadata: languageName: node linkType: hard +"@babel/helper-environment-visitor@npm:^7.18.9": + version: 7.18.9 + resolution: "@babel/helper-environment-visitor@npm:7.18.9" + checksum: b25101f6162ddca2d12da73942c08ad203d7668e06663df685634a8fde54a98bc015f6f62938e8554457a592a024108d45b8f3e651fd6dcdb877275b73cc4420 + languageName: node + linkType: hard + "@babel/helper-explode-assignable-expression@npm:^7.16.7": version: 7.16.7 resolution: "@babel/helper-explode-assignable-expression@npm:7.16.7" @@ -300,6 +405,15 @@ __metadata: languageName: node linkType: hard +"@babel/helper-explode-assignable-expression@npm:^7.18.6": + version: 7.18.6 + resolution: "@babel/helper-explode-assignable-expression@npm:7.18.6" + dependencies: + "@babel/types": ^7.18.6 + checksum: 225cfcc3376a8799023d15dc95000609e9d4e7547b29528c7f7111a0e05493ffb12c15d70d379a0bb32d42752f340233c4115bded6d299bc0c3ab7a12be3d30f + languageName: node + linkType: hard + "@babel/helper-function-name@npm:^7.16.7": version: 7.16.7 resolution: "@babel/helper-function-name@npm:7.16.7" @@ -311,6 +425,16 @@ __metadata: languageName: node linkType: hard +"@babel/helper-function-name@npm:^7.18.9, @babel/helper-function-name@npm:^7.19.0": + version: 7.19.0 + resolution: "@babel/helper-function-name@npm:7.19.0" + dependencies: + "@babel/template": ^7.18.10 + "@babel/types": ^7.19.0 + checksum: eac1f5db428ba546270c2b8d750c24eb528b8fcfe50c81de2e0bdebf0e20f24bec688d4331533b782e4a907fad435244621ca2193cfcf80a86731299840e0f6e + languageName: node + linkType: hard + "@babel/helper-get-function-arity@npm:^7.16.7": version: 7.16.7 resolution: "@babel/helper-get-function-arity@npm:7.16.7" @@ -329,6 +453,15 @@ __metadata: languageName: node linkType: hard +"@babel/helper-hoist-variables@npm:^7.18.6": + version: 7.18.6 + resolution: "@babel/helper-hoist-variables@npm:7.18.6" + dependencies: + "@babel/types": ^7.18.6 + checksum: fd9c35bb435fda802bf9ff7b6f2df06308a21277c6dec2120a35b09f9de68f68a33972e2c15505c1a1a04b36ec64c9ace97d4a9e26d6097b76b4396b7c5fa20f + languageName: node + linkType: hard + "@babel/helper-member-expression-to-functions@npm:^7.16.7": version: 7.17.7 resolution: "@babel/helper-member-expression-to-functions@npm:7.17.7" @@ -338,6 +471,15 @@ __metadata: languageName: node linkType: hard +"@babel/helper-member-expression-to-functions@npm:^7.20.7": + version: 7.20.7 + resolution: "@babel/helper-member-expression-to-functions@npm:7.20.7" + dependencies: + "@babel/types": ^7.20.7 + checksum: cec17aab7e964830b0146e575bd141127032319f26ed864a65b35abd75ad618d264d3e11449b9b4e29cfd95bb1a7e774afddd4884fdcc29c36ac9cbd2b66359f + languageName: node + linkType: hard + "@babel/helper-module-imports@npm:^7.12.13, @babel/helper-module-imports@npm:^7.16.7": version: 7.16.7 resolution: "@babel/helper-module-imports@npm:7.16.7" @@ -347,6 +489,15 @@ __metadata: languageName: node linkType: hard +"@babel/helper-module-imports@npm:^7.18.6": + version: 7.18.6 + resolution: "@babel/helper-module-imports@npm:7.18.6" + dependencies: + "@babel/types": ^7.18.6 + checksum: f393f8a3b3304b1b7a288a38c10989de754f01d29caf62ce7c4e5835daf0a27b81f3ac687d9d2780d39685aae7b55267324b512150e7b2be967b0c493b6a1def + languageName: node + linkType: hard + "@babel/helper-module-transforms@npm:^7.16.7, @babel/helper-module-transforms@npm:^7.17.7": version: 7.17.7 resolution: "@babel/helper-module-transforms@npm:7.17.7" @@ -363,6 +514,22 @@ __metadata: languageName: node linkType: hard +"@babel/helper-module-transforms@npm:^7.20.11": + version: 7.20.11 + resolution: "@babel/helper-module-transforms@npm:7.20.11" + dependencies: + "@babel/helper-environment-visitor": ^7.18.9 + "@babel/helper-module-imports": ^7.18.6 + "@babel/helper-simple-access": ^7.20.2 + "@babel/helper-split-export-declaration": ^7.18.6 + "@babel/helper-validator-identifier": ^7.19.1 + "@babel/template": ^7.20.7 + "@babel/traverse": ^7.20.10 + "@babel/types": ^7.20.7 + checksum: 29319ebafa693d48756c6ba0d871677bb0037e0da084fbe221a17c38d57093fc8aa38543c07d76e788266a937976e37ab4901971ca7f237c5ab45f524b9ecca0 + languageName: node + linkType: hard + "@babel/helper-optimise-call-expression@npm:^7.16.7": version: 7.16.7 resolution: "@babel/helper-optimise-call-expression@npm:7.16.7" @@ -372,6 +539,15 @@ __metadata: languageName: node linkType: hard +"@babel/helper-optimise-call-expression@npm:^7.18.6": + version: 7.18.6 + resolution: "@babel/helper-optimise-call-expression@npm:7.18.6" + dependencies: + "@babel/types": ^7.18.6 + checksum: e518fe8418571405e21644cfb39cf694f30b6c47b10b006609a92469ae8b8775cbff56f0b19732343e2ea910641091c5a2dc73b56ceba04e116a33b0f8bd2fbd + languageName: node + linkType: hard + "@babel/helper-plugin-utils@npm:^7.14.5": version: 7.16.7 resolution: "@babel/helper-plugin-utils@npm:7.16.7" @@ -390,6 +566,20 @@ __metadata: languageName: node linkType: hard +"@babel/helper-remap-async-to-generator@npm:^7.18.9": + version: 7.18.9 + resolution: "@babel/helper-remap-async-to-generator@npm:7.18.9" + dependencies: + "@babel/helper-annotate-as-pure": ^7.18.6 + "@babel/helper-environment-visitor": ^7.18.9 + "@babel/helper-wrap-function": ^7.18.9 + "@babel/types": ^7.18.9 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 4be6076192308671b046245899b703ba090dbe7ad03e0bea897bb2944ae5b88e5e85853c9d1f83f643474b54c578d8ac0800b80341a86e8538264a725fbbefec + languageName: node + linkType: hard + "@babel/helper-replace-supers@npm:^7.16.7": version: 7.16.7 resolution: "@babel/helper-replace-supers@npm:7.16.7" @@ -403,6 +593,20 @@ __metadata: languageName: node linkType: hard +"@babel/helper-replace-supers@npm:^7.18.6, @babel/helper-replace-supers@npm:^7.20.7": + version: 7.20.7 + resolution: "@babel/helper-replace-supers@npm:7.20.7" + dependencies: + "@babel/helper-environment-visitor": ^7.18.9 + "@babel/helper-member-expression-to-functions": ^7.20.7 + "@babel/helper-optimise-call-expression": ^7.18.6 + "@babel/template": ^7.20.7 + "@babel/traverse": ^7.20.7 + "@babel/types": ^7.20.7 + checksum: b8e0087c9b0c1446e3c6f3f72b73b7e03559c6b570e2cfbe62c738676d9ebd8c369a708cf1a564ef88113b4330750a50232ee1131d303d478b7a5e65e46fbc7c + languageName: node + linkType: hard + "@babel/helper-simple-access@npm:^7.17.7": version: 7.17.7 resolution: "@babel/helper-simple-access@npm:7.17.7" @@ -412,6 +616,15 @@ __metadata: languageName: node linkType: hard +"@babel/helper-simple-access@npm:^7.20.2": + version: 7.20.2 + resolution: "@babel/helper-simple-access@npm:7.20.2" + dependencies: + "@babel/types": ^7.20.2 + checksum: ad1e96ee2e5f654ffee2369a586e5e8d2722bf2d8b028a121b4c33ebae47253f64d420157b9f0a8927aea3a9e0f18c0103e74fdd531815cf3650a0a4adca11a1 + languageName: node + linkType: hard + "@babel/helper-skip-transparent-expression-wrappers@npm:^7.16.0": version: 7.16.0 resolution: "@babel/helper-skip-transparent-expression-wrappers@npm:7.16.0" @@ -421,6 +634,15 @@ __metadata: languageName: node linkType: hard +"@babel/helper-skip-transparent-expression-wrappers@npm:^7.20.0": + version: 7.20.0 + resolution: "@babel/helper-skip-transparent-expression-wrappers@npm:7.20.0" + dependencies: + "@babel/types": ^7.20.0 + checksum: 34da8c832d1c8a546e45d5c1d59755459ffe43629436707079989599b91e8c19e50e73af7a4bd09c95402d389266731b0d9c5f69e372d8ebd3a709c05c80d7dd + languageName: node + linkType: hard + "@babel/helper-split-export-declaration@npm:^7.16.7": version: 7.16.7 resolution: "@babel/helper-split-export-declaration@npm:7.16.7" @@ -430,6 +652,15 @@ __metadata: languageName: node linkType: hard +"@babel/helper-split-export-declaration@npm:^7.18.6": + version: 7.18.6 + resolution: "@babel/helper-split-export-declaration@npm:7.18.6" + dependencies: + "@babel/types": ^7.18.6 + checksum: c6d3dede53878f6be1d869e03e9ffbbb36f4897c7cc1527dc96c56d127d834ffe4520a6f7e467f5b6f3c2843ea0e81a7819d66ae02f707f6ac057f3d57943a2b + languageName: node + linkType: hard + "@babel/helper-string-parser@npm:^7.18.10": version: 7.18.10 resolution: "@babel/helper-string-parser@npm:7.18.10" @@ -437,6 +668,13 @@ __metadata: languageName: node linkType: hard +"@babel/helper-string-parser@npm:^7.19.4": + version: 7.19.4 + resolution: "@babel/helper-string-parser@npm:7.19.4" + checksum: b2f8a3920b30dfac81ec282ac4ad9598ea170648f8254b10f475abe6d944808fb006aab325d3eb5a8ad3bea8dfa888cfa6ef471050dae5748497c110ec060943 + languageName: node + linkType: hard + "@babel/helper-validator-identifier@npm:^7.16.7": version: 7.16.7 resolution: "@babel/helper-validator-identifier@npm:7.16.7" @@ -451,6 +689,13 @@ __metadata: languageName: node linkType: hard +"@babel/helper-validator-identifier@npm:^7.19.1": + version: 7.19.1 + resolution: "@babel/helper-validator-identifier@npm:7.19.1" + checksum: 0eca5e86a729162af569b46c6c41a63e18b43dbe09fda1d2a3c8924f7d617116af39cac5e4cd5d431bb760b4dca3c0970e0c444789b1db42bcf1fa41fbad0a3a + languageName: node + linkType: hard + "@babel/helper-validator-option@npm:^7.14.5, @babel/helper-validator-option@npm:^7.16.7": version: 7.16.7 resolution: "@babel/helper-validator-option@npm:7.16.7" @@ -458,6 +703,13 @@ __metadata: languageName: node linkType: hard +"@babel/helper-validator-option@npm:^7.18.6": + version: 7.18.6 + resolution: "@babel/helper-validator-option@npm:7.18.6" + checksum: f9cc6eb7cc5d759c5abf006402180f8d5e4251e9198197428a97e05d65eb2f8ae5a0ce73b1dfd2d35af41d0eb780627a64edf98a4e71f064eeeacef8de58f2cf + languageName: node + linkType: hard + "@babel/helper-wrap-function@npm:^7.16.8": version: 7.16.8 resolution: "@babel/helper-wrap-function@npm:7.16.8" @@ -470,6 +722,18 @@ __metadata: languageName: node linkType: hard +"@babel/helper-wrap-function@npm:^7.18.9": + version: 7.20.5 + resolution: "@babel/helper-wrap-function@npm:7.20.5" + dependencies: + "@babel/helper-function-name": ^7.19.0 + "@babel/template": ^7.18.10 + "@babel/traverse": ^7.20.5 + "@babel/types": ^7.20.5 + checksum: 11a6fc28334368a193a9cb3ad16f29cd7603bab958433efc82ebe59fa6556c227faa24f07ce43983f7a85df826f71d441638442c4315e90a554fe0a70ca5005b + languageName: node + linkType: hard + "@babel/helpers@npm:^7.17.8": version: 7.17.8 resolution: "@babel/helpers@npm:7.17.8" @@ -503,7 +767,7 @@ __metadata: languageName: node linkType: hard -"@babel/parser@npm:^7.0.0, @babel/parser@npm:^7.1.0, @babel/parser@npm:^7.1.6, @babel/parser@npm:^7.14.0, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.16.7, @babel/parser@npm:^7.17.3, @babel/parser@npm:^7.17.8": +"@babel/parser@npm:^7.0.0, @babel/parser@npm:^7.1.0, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.16.7, @babel/parser@npm:^7.17.3, @babel/parser@npm:^7.17.8": version: 7.17.8 resolution: "@babel/parser@npm:7.17.8" bin: @@ -512,6 +776,15 @@ __metadata: languageName: node linkType: hard +"@babel/parser@npm:^7.14.0, @babel/parser@npm:^7.20.7": + version: 7.20.7 + resolution: "@babel/parser@npm:7.20.7" + bin: + parser: ./bin/babel-parser.js + checksum: 25b5266e3bd4be837092685f6b7ef886f1308ff72659a24342eb646ae5014f61ed1771ce8fc20636c890fcae19304fc72c069564ca6075207b7fbf3f75367275 + languageName: node + linkType: hard + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:^7.16.7": version: 7.16.7 resolution: "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:7.16.7" @@ -549,7 +822,19 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-proposal-class-properties@npm:^7.0.0, @babel/plugin-proposal-class-properties@npm:^7.1.0, @babel/plugin-proposal-class-properties@npm:^7.16.7": +"@babel/plugin-proposal-class-properties@npm:^7.0.0": + version: 7.18.6 + resolution: "@babel/plugin-proposal-class-properties@npm:7.18.6" + dependencies: + "@babel/helper-create-class-features-plugin": ^7.18.6 + "@babel/helper-plugin-utils": ^7.18.6 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 49a78a2773ec0db56e915d9797e44fd079ab8a9b2e1716e0df07c92532f2c65d76aeda9543883916b8e0ff13606afeffa67c5b93d05b607bc87653ad18a91422 + languageName: node + linkType: hard + +"@babel/plugin-proposal-class-properties@npm:^7.16.7": version: 7.16.7 resolution: "@babel/plugin-proposal-class-properties@npm:7.16.7" dependencies: @@ -599,14 +884,14 @@ __metadata: linkType: hard "@babel/plugin-proposal-export-default-from@npm:^7.0.0": - version: 7.16.7 - resolution: "@babel/plugin-proposal-export-default-from@npm:7.16.7" + version: 7.18.10 + resolution: "@babel/plugin-proposal-export-default-from@npm:7.18.10" dependencies: - "@babel/helper-plugin-utils": ^7.16.7 - "@babel/plugin-syntax-export-default-from": ^7.16.7 + "@babel/helper-plugin-utils": ^7.18.9 + "@babel/plugin-syntax-export-default-from": ^7.18.6 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: de6d2e4e8c77073ecbfe3cba8fb4db046a80d22a76817ad8e65c1861e3443956b82d931936388059dee2bb4b6c745f9cd16fa390d51a18ea7b56b2e8afdcc6d9 + checksum: 2a12387e095ccd02a1560e5dd40812a83befe581d319685ae2a95f0650a4500381c1d9c710e6e29b34a1b053f9632ee2d3827b937e1cc5c9d2555280da22df53 languageName: node linkType: hard @@ -658,7 +943,19 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-proposal-nullish-coalescing-operator@npm:^7.0.0, @babel/plugin-proposal-nullish-coalescing-operator@npm:^7.1.0, @babel/plugin-proposal-nullish-coalescing-operator@npm:^7.16.7": +"@babel/plugin-proposal-nullish-coalescing-operator@npm:^7.0.0": + version: 7.18.6 + resolution: "@babel/plugin-proposal-nullish-coalescing-operator@npm:7.18.6" + dependencies: + "@babel/helper-plugin-utils": ^7.18.6 + "@babel/plugin-syntax-nullish-coalescing-operator": ^7.8.3 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 949c9ddcdecdaec766ee610ef98f965f928ccc0361dd87cf9f88cf4896a6ccd62fce063d4494778e50da99dea63d270a1be574a62d6ab81cbe9d85884bf55a7d + languageName: node + linkType: hard + +"@babel/plugin-proposal-nullish-coalescing-operator@npm:^7.16.7": version: 7.16.7 resolution: "@babel/plugin-proposal-nullish-coalescing-operator@npm:7.16.7" dependencies: @@ -682,7 +979,22 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-proposal-object-rest-spread@npm:^7.0.0, @babel/plugin-proposal-object-rest-spread@npm:^7.16.7": +"@babel/plugin-proposal-object-rest-spread@npm:^7.0.0": + version: 7.20.7 + resolution: "@babel/plugin-proposal-object-rest-spread@npm:7.20.7" + dependencies: + "@babel/compat-data": ^7.20.5 + "@babel/helper-compilation-targets": ^7.20.7 + "@babel/helper-plugin-utils": ^7.20.2 + "@babel/plugin-syntax-object-rest-spread": ^7.8.3 + "@babel/plugin-transform-parameters": ^7.20.7 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 1329db17009964bc644484c660eab717cb3ca63ac0ab0f67c651a028d1bc2ead51dc4064caea283e46994f1b7221670a35cbc0b4beb6273f55e915494b5aa0b2 + languageName: node + linkType: hard + +"@babel/plugin-proposal-object-rest-spread@npm:^7.16.7": version: 7.17.3 resolution: "@babel/plugin-proposal-object-rest-spread@npm:7.17.3" dependencies: @@ -712,7 +1024,19 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-proposal-optional-catch-binding@npm:^7.0.0, @babel/plugin-proposal-optional-catch-binding@npm:^7.16.7": +"@babel/plugin-proposal-optional-catch-binding@npm:^7.0.0": + version: 7.18.6 + resolution: "@babel/plugin-proposal-optional-catch-binding@npm:7.18.6" + dependencies: + "@babel/helper-plugin-utils": ^7.18.6 + "@babel/plugin-syntax-optional-catch-binding": ^7.8.3 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 7b5b39fb5d8d6d14faad6cb68ece5eeb2fd550fb66b5af7d7582402f974f5bc3684641f7c192a5a57e0f59acfae4aada6786be1eba030881ddc590666eff4d1e + languageName: node + linkType: hard + +"@babel/plugin-proposal-optional-catch-binding@npm:^7.16.7": version: 7.16.7 resolution: "@babel/plugin-proposal-optional-catch-binding@npm:7.16.7" dependencies: @@ -724,7 +1048,20 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-proposal-optional-chaining@npm:^7.0.0, @babel/plugin-proposal-optional-chaining@npm:^7.1.0, @babel/plugin-proposal-optional-chaining@npm:^7.16.7": +"@babel/plugin-proposal-optional-chaining@npm:^7.0.0": + version: 7.20.7 + resolution: "@babel/plugin-proposal-optional-chaining@npm:7.20.7" + dependencies: + "@babel/helper-plugin-utils": ^7.20.2 + "@babel/helper-skip-transparent-expression-wrappers": ^7.20.0 + "@babel/plugin-syntax-optional-chaining": ^7.8.3 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 274b8932335bd064ca24cf1a4da2b2c20c92726d4bfa8b0cb5023857479b8481feef33505c16650c7b9239334e5c6959babc924816324c4cf223dd91c7ca79bc + languageName: node + linkType: hard + +"@babel/plugin-proposal-optional-chaining@npm:^7.16.7": version: 7.16.7 resolution: "@babel/plugin-proposal-optional-chaining@npm:7.16.7" dependencies: @@ -830,7 +1167,18 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-export-default-from@npm:^7.0.0, @babel/plugin-syntax-export-default-from@npm:^7.14.5, @babel/plugin-syntax-export-default-from@npm:^7.16.7": +"@babel/plugin-syntax-export-default-from@npm:^7.0.0, @babel/plugin-syntax-export-default-from@npm:^7.18.6": + version: 7.18.6 + resolution: "@babel/plugin-syntax-export-default-from@npm:7.18.6" + dependencies: + "@babel/helper-plugin-utils": ^7.18.6 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 4258156553d825abb2ebac920eae6837087b485eb8e0011e05ad1e57004a03441335325feb18185ffbfa0c33a340673e7ab79549080ff2beb4607f88936fedf2 + languageName: node + linkType: hard + +"@babel/plugin-syntax-export-default-from@npm:^7.14.5": version: 7.16.7 resolution: "@babel/plugin-syntax-export-default-from@npm:7.16.7" dependencies: @@ -852,14 +1200,14 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-flow@npm:^7.0.0, @babel/plugin-syntax-flow@npm:^7.16.7, @babel/plugin-syntax-flow@npm:^7.2.0": - version: 7.16.7 - resolution: "@babel/plugin-syntax-flow@npm:7.16.7" +"@babel/plugin-syntax-flow@npm:^7.0.0, @babel/plugin-syntax-flow@npm:^7.18.6, @babel/plugin-syntax-flow@npm:^7.2.0": + version: 7.18.6 + resolution: "@babel/plugin-syntax-flow@npm:7.18.6" dependencies: - "@babel/helper-plugin-utils": ^7.16.7 + "@babel/helper-plugin-utils": ^7.18.6 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: b1ab0bd9b78e4aa5fb48714d6514f3d08d72693807c6044a5be4f301a9bb677b5648fbdae11c8bc93923da6b320a1898560c307933021bdb75ee39e577ed74ee + checksum: abe82062b3eef14de7d2b3c0e4fecf80a3e796ca497e9df616d12dd250968abf71495ee85a955b43a6c827137203f0c409450cf792732ed0d6907c806580ea71 languageName: node linkType: hard @@ -885,18 +1233,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-jsx@npm:^7.0.0, @babel/plugin-syntax-jsx@npm:^7.16.7": - version: 7.16.7 - resolution: "@babel/plugin-syntax-jsx@npm:7.16.7" - dependencies: - "@babel/helper-plugin-utils": ^7.16.7 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: cd9b0e53c50e8ddb0afaf0f42e0b221a94e4f59aee32a591364266a31195c48cac5fef288d02c1c935686bda982d2e0f1ed61cceb995fc9f6fb09ef5ebecdd2b - languageName: node - linkType: hard - -"@babel/plugin-syntax-jsx@npm:^7.7.2": +"@babel/plugin-syntax-jsx@npm:^7.0.0, @babel/plugin-syntax-jsx@npm:^7.18.6, @babel/plugin-syntax-jsx@npm:^7.7.2": version: 7.18.6 resolution: "@babel/plugin-syntax-jsx@npm:7.18.6" dependencies: @@ -907,6 +1244,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-syntax-jsx@npm:^7.16.7": + version: 7.16.7 + resolution: "@babel/plugin-syntax-jsx@npm:7.16.7" + dependencies: + "@babel/helper-plugin-utils": ^7.16.7 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: cd9b0e53c50e8ddb0afaf0f42e0b221a94e4f59aee32a591364266a31195c48cac5fef288d02c1c935686bda982d2e0f1ed61cceb995fc9f6fb09ef5ebecdd2b + languageName: node + linkType: hard + "@babel/plugin-syntax-logical-assignment-operators@npm:^7.10.4, @babel/plugin-syntax-logical-assignment-operators@npm:^7.8.3": version: 7.10.4 resolution: "@babel/plugin-syntax-logical-assignment-operators@npm:7.10.4" @@ -995,7 +1343,18 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-typescript@npm:^7.16.7, @babel/plugin-syntax-typescript@npm:^7.7.2": +"@babel/plugin-syntax-typescript@npm:^7.20.0": + version: 7.20.0 + resolution: "@babel/plugin-syntax-typescript@npm:7.20.0" + dependencies: + "@babel/helper-plugin-utils": ^7.19.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 6189c0b5c32ba3c9a80a42338bd50719d783b20ef29b853d4f03929e971913d3cefd80184e924ae98ad6db09080be8fe6f1ffde9a6db8972523234f0274d36f7 + languageName: node + linkType: hard + +"@babel/plugin-syntax-typescript@npm:^7.7.2": version: 7.16.7 resolution: "@babel/plugin-syntax-typescript@npm:7.16.7" dependencies: @@ -1006,7 +1365,18 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-arrow-functions@npm:^7.0.0, @babel/plugin-transform-arrow-functions@npm:^7.16.7": +"@babel/plugin-transform-arrow-functions@npm:^7.0.0": + version: 7.20.7 + resolution: "@babel/plugin-transform-arrow-functions@npm:7.20.7" + dependencies: + "@babel/helper-plugin-utils": ^7.20.2 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: b43cabe3790c2de7710abe32df9a30005eddb2050dadd5d122c6872f679e5710e410f1b90c8f99a2aff7b614cccfecf30e7fd310236686f60d3ed43fd80b9847 + languageName: node + linkType: hard + +"@babel/plugin-transform-arrow-functions@npm:^7.16.7": version: 7.16.7 resolution: "@babel/plugin-transform-arrow-functions@npm:7.16.7" dependencies: @@ -1017,7 +1387,20 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-async-to-generator@npm:^7.0.0, @babel/plugin-transform-async-to-generator@npm:^7.16.8": +"@babel/plugin-transform-async-to-generator@npm:^7.0.0": + version: 7.20.7 + resolution: "@babel/plugin-transform-async-to-generator@npm:7.20.7" + dependencies: + "@babel/helper-module-imports": ^7.18.6 + "@babel/helper-plugin-utils": ^7.20.2 + "@babel/helper-remap-async-to-generator": ^7.18.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: fe9ee8a5471b4317c1b9ea92410ace8126b52a600d7cfbfe1920dcac6fb0fad647d2e08beb4fd03c630eb54430e6c72db11e283e3eddc49615c68abd39430904 + languageName: node + linkType: hard + +"@babel/plugin-transform-async-to-generator@npm:^7.16.8": version: 7.16.8 resolution: "@babel/plugin-transform-async-to-generator@npm:7.16.8" dependencies: @@ -1030,7 +1413,18 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-block-scoped-functions@npm:^7.0.0, @babel/plugin-transform-block-scoped-functions@npm:^7.16.7": +"@babel/plugin-transform-block-scoped-functions@npm:^7.0.0": + version: 7.18.6 + resolution: "@babel/plugin-transform-block-scoped-functions@npm:7.18.6" + dependencies: + "@babel/helper-plugin-utils": ^7.18.6 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 0a0df61f94601e3666bf39f2cc26f5f7b22a94450fb93081edbed967bd752ce3f81d1227fefd3799f5ee2722171b5e28db61379234d1bb85b6ec689589f99d7e + languageName: node + linkType: hard + +"@babel/plugin-transform-block-scoped-functions@npm:^7.16.7": version: 7.16.7 resolution: "@babel/plugin-transform-block-scoped-functions@npm:7.16.7" dependencies: @@ -1041,7 +1435,18 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-block-scoping@npm:^7.0.0, @babel/plugin-transform-block-scoping@npm:^7.16.7": +"@babel/plugin-transform-block-scoping@npm:^7.0.0": + version: 7.20.11 + resolution: "@babel/plugin-transform-block-scoping@npm:7.20.11" + dependencies: + "@babel/helper-plugin-utils": ^7.20.2 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: b33fe53f42f83f14d1d73d6bfc058d3311ac314809de504fd4e7c99ef3a411b2d25211d7ca23aadd6530f73a8df070eaae6d202c07422ffc36f5507917e35f58 + languageName: node + linkType: hard + +"@babel/plugin-transform-block-scoping@npm:^7.16.7": version: 7.16.7 resolution: "@babel/plugin-transform-block-scoping@npm:7.16.7" dependencies: @@ -1052,7 +1457,26 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-classes@npm:^7.0.0, @babel/plugin-transform-classes@npm:^7.16.7": +"@babel/plugin-transform-classes@npm:^7.0.0": + version: 7.20.7 + resolution: "@babel/plugin-transform-classes@npm:7.20.7" + dependencies: + "@babel/helper-annotate-as-pure": ^7.18.6 + "@babel/helper-compilation-targets": ^7.20.7 + "@babel/helper-environment-visitor": ^7.18.9 + "@babel/helper-function-name": ^7.19.0 + "@babel/helper-optimise-call-expression": ^7.18.6 + "@babel/helper-plugin-utils": ^7.20.2 + "@babel/helper-replace-supers": ^7.20.7 + "@babel/helper-split-export-declaration": ^7.18.6 + globals: ^11.1.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 4cf55ad88e52c7c66a991add4c8e1c3324384bd52df7085962d396879561456a44352e5ab1725cc80f4e83737a2931e847c4a96c7aa4a549357f23631ff31799 + languageName: node + linkType: hard + +"@babel/plugin-transform-classes@npm:^7.16.7": version: 7.16.7 resolution: "@babel/plugin-transform-classes@npm:7.16.7" dependencies: @@ -1070,7 +1494,19 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-computed-properties@npm:^7.0.0, @babel/plugin-transform-computed-properties@npm:^7.16.7": +"@babel/plugin-transform-computed-properties@npm:^7.0.0": + version: 7.20.7 + resolution: "@babel/plugin-transform-computed-properties@npm:7.20.7" + dependencies: + "@babel/helper-plugin-utils": ^7.20.2 + "@babel/template": ^7.20.7 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: be70e54bda8b469146459f429e5f2bd415023b87b2d5af8b10e48f465ffb02847a3ed162ca60378c004b82db848e4d62e90010d41ded7e7176b6d8d1c2911139 + languageName: node + linkType: hard + +"@babel/plugin-transform-computed-properties@npm:^7.16.7": version: 7.16.7 resolution: "@babel/plugin-transform-computed-properties@npm:7.16.7" dependencies: @@ -1081,7 +1517,18 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-destructuring@npm:^7.0.0, @babel/plugin-transform-destructuring@npm:^7.16.7": +"@babel/plugin-transform-destructuring@npm:^7.0.0": + version: 7.20.7 + resolution: "@babel/plugin-transform-destructuring@npm:7.20.7" + dependencies: + "@babel/helper-plugin-utils": ^7.20.2 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: bd8affdb142c77662037215e37128b2110a786c92a67e1f00b38223c438c1610bd84cbc0386e9cd3479245ea811c5ca6c9838f49be4729b592159a30ce79add2 + languageName: node + linkType: hard + +"@babel/plugin-transform-destructuring@npm:^7.16.7": version: 7.17.7 resolution: "@babel/plugin-transform-destructuring@npm:7.17.7" dependencies: @@ -1126,7 +1573,19 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-exponentiation-operator@npm:^7.0.0, @babel/plugin-transform-exponentiation-operator@npm:^7.16.7": +"@babel/plugin-transform-exponentiation-operator@npm:^7.0.0": + version: 7.18.6 + resolution: "@babel/plugin-transform-exponentiation-operator@npm:7.18.6" + dependencies: + "@babel/helper-builder-binary-assignment-operator-visitor": ^7.18.6 + "@babel/helper-plugin-utils": ^7.18.6 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 7f70222f6829c82a36005508d34ddbe6fd0974ae190683a8670dd6ff08669aaf51fef2209d7403f9bd543cb2d12b18458016c99a6ed0332ccedb3ea127b01229 + languageName: node + linkType: hard + +"@babel/plugin-transform-exponentiation-operator@npm:^7.16.7": version: 7.16.7 resolution: "@babel/plugin-transform-exponentiation-operator@npm:7.16.7" dependencies: @@ -1138,19 +1597,30 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-flow-strip-types@npm:^7.0.0, @babel/plugin-transform-flow-strip-types@npm:^7.16.7": - version: 7.16.7 - resolution: "@babel/plugin-transform-flow-strip-types@npm:7.16.7" +"@babel/plugin-transform-flow-strip-types@npm:^7.0.0": + version: 7.19.0 + resolution: "@babel/plugin-transform-flow-strip-types@npm:7.19.0" dependencies: - "@babel/helper-plugin-utils": ^7.16.7 - "@babel/plugin-syntax-flow": ^7.16.7 + "@babel/helper-plugin-utils": ^7.19.0 + "@babel/plugin-syntax-flow": ^7.18.6 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 4b4801c91d805d95957781e537f88e9f34c7f8a4c262c4d230af2ab7a920889c542860e505149a856d4c16916ffb02df4f3af161733adeedb7671555d1510bba + checksum: c35339bf80c2a2b9abb9e2ce0382e1d9cc3ef7db2af127f4ec3d184bad2aec3269f3fcac5fdcd565439732803acad72eb9e7d5a18e439221526fdc041c9e8e1e languageName: node linkType: hard -"@babel/plugin-transform-for-of@npm:^7.0.0, @babel/plugin-transform-for-of@npm:^7.16.7": +"@babel/plugin-transform-for-of@npm:^7.0.0": + version: 7.18.8 + resolution: "@babel/plugin-transform-for-of@npm:7.18.8" + dependencies: + "@babel/helper-plugin-utils": ^7.18.6 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: ca64c623cf0c7a80ab6f07ebd3e6e4ade95e2ae806696f70b43eafe6394fa8ce21f2b1ffdd15df2067f7363d2ecfe26472a97c6c774403d2163fa05f50c98f17 + languageName: node + linkType: hard + +"@babel/plugin-transform-for-of@npm:^7.16.7": version: 7.16.7 resolution: "@babel/plugin-transform-for-of@npm:7.16.7" dependencies: @@ -1161,7 +1631,20 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-function-name@npm:^7.0.0, @babel/plugin-transform-function-name@npm:^7.16.7": +"@babel/plugin-transform-function-name@npm:^7.0.0": + version: 7.18.9 + resolution: "@babel/plugin-transform-function-name@npm:7.18.9" + dependencies: + "@babel/helper-compilation-targets": ^7.18.9 + "@babel/helper-function-name": ^7.18.9 + "@babel/helper-plugin-utils": ^7.18.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 62dd9c6cdc9714704efe15545e782ee52d74dc73916bf954b4d3bee088fb0ec9e3c8f52e751252433656c09f744b27b757fc06ed99bcde28e8a21600a1d8e597 + languageName: node + linkType: hard + +"@babel/plugin-transform-function-name@npm:^7.16.7": version: 7.16.7 resolution: "@babel/plugin-transform-function-name@npm:7.16.7" dependencies: @@ -1174,7 +1657,18 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-literals@npm:^7.0.0, @babel/plugin-transform-literals@npm:^7.16.7": +"@babel/plugin-transform-literals@npm:^7.0.0": + version: 7.18.9 + resolution: "@babel/plugin-transform-literals@npm:7.18.9" + dependencies: + "@babel/helper-plugin-utils": ^7.18.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 3458dd2f1a47ac51d9d607aa18f3d321cbfa8560a985199185bed5a906bb0c61ba85575d386460bac9aed43fdd98940041fae5a67dff286f6f967707cff489f8 + languageName: node + linkType: hard + +"@babel/plugin-transform-literals@npm:^7.16.7": version: 7.16.7 resolution: "@babel/plugin-transform-literals@npm:7.16.7" dependencies: @@ -1185,7 +1679,18 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-member-expression-literals@npm:^7.0.0, @babel/plugin-transform-member-expression-literals@npm:^7.16.7": +"@babel/plugin-transform-member-expression-literals@npm:^7.0.0": + version: 7.18.6 + resolution: "@babel/plugin-transform-member-expression-literals@npm:7.18.6" + dependencies: + "@babel/helper-plugin-utils": ^7.18.6 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 35a3d04f6693bc6b298c05453d85ee6e41cc806538acb6928427e0e97ae06059f97d2f07d21495fcf5f70d3c13a242e2ecbd09d5c1fcb1b1a73ff528dcb0b695 + languageName: node + linkType: hard + +"@babel/plugin-transform-member-expression-literals@npm:^7.16.7": version: 7.16.7 resolution: "@babel/plugin-transform-member-expression-literals@npm:7.16.7" dependencies: @@ -1209,7 +1714,20 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-modules-commonjs@npm:^7.0.0, @babel/plugin-transform-modules-commonjs@npm:^7.1.0, @babel/plugin-transform-modules-commonjs@npm:^7.16.8": +"@babel/plugin-transform-modules-commonjs@npm:^7.0.0": + version: 7.20.11 + resolution: "@babel/plugin-transform-modules-commonjs@npm:7.20.11" + dependencies: + "@babel/helper-module-transforms": ^7.20.11 + "@babel/helper-plugin-utils": ^7.20.2 + "@babel/helper-simple-access": ^7.20.2 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: ddd0623e2ad4b5c0faaa0ae30d3407a3fa484d911c968ed33cfb1b339ac3691321c959db60b66dc136dbd67770fff586f7e48a7ce0d7d357f92d6ef6fb7ed1a7 + languageName: node + linkType: hard + +"@babel/plugin-transform-modules-commonjs@npm:^7.16.8": version: 7.17.7 resolution: "@babel/plugin-transform-modules-commonjs@npm:7.17.7" dependencies: @@ -1272,18 +1790,30 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-object-assign@npm:^7.0.0, @babel/plugin-transform-object-assign@npm:^7.16.7": - version: 7.16.7 - resolution: "@babel/plugin-transform-object-assign@npm:7.16.7" +"@babel/plugin-transform-object-assign@npm:^7.0.0": + version: 7.18.6 + resolution: "@babel/plugin-transform-object-assign@npm:7.18.6" dependencies: - "@babel/helper-plugin-utils": ^7.16.7 + "@babel/helper-plugin-utils": ^7.18.6 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 4d8e7f4c08e0695e78d4c3ff9bdc0ca8243a3ce8fa9dc75940d9caabb766567ec550b2055723599e70132dab173f70e8e9f18cb120adc7badb0153527c4111be + checksum: a9738264cc996c54febafa0701c5a182d99afbddbfe9fbcc0b2536e3b2332b3318a8143aacd0368e31e18c24cd1b1980be7a3b0b2e5122efb520952d863a1203 languageName: node linkType: hard -"@babel/plugin-transform-object-super@npm:^7.0.0, @babel/plugin-transform-object-super@npm:^7.16.7": +"@babel/plugin-transform-object-super@npm:^7.0.0": + version: 7.18.6 + resolution: "@babel/plugin-transform-object-super@npm:7.18.6" + dependencies: + "@babel/helper-plugin-utils": ^7.18.6 + "@babel/helper-replace-supers": ^7.18.6 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 0fcb04e15deea96ae047c21cb403607d49f06b23b4589055993365ebd7a7d7541334f06bf9642e90075e66efce6ebaf1eb0ef066fbbab802d21d714f1aac3aef + languageName: node + linkType: hard + +"@babel/plugin-transform-object-super@npm:^7.16.7": version: 7.16.7 resolution: "@babel/plugin-transform-object-super@npm:7.16.7" dependencies: @@ -1295,7 +1825,18 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-parameters@npm:^7.0.0, @babel/plugin-transform-parameters@npm:^7.14.5, @babel/plugin-transform-parameters@npm:^7.16.7": +"@babel/plugin-transform-parameters@npm:^7.0.0, @babel/plugin-transform-parameters@npm:^7.20.7": + version: 7.20.7 + resolution: "@babel/plugin-transform-parameters@npm:7.20.7" + dependencies: + "@babel/helper-plugin-utils": ^7.20.2 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 6ffe0dd9afb2d2b9bc247381aa2e95dd9997ff5568a0a11900528919a4e073ac68f46409431455badb8809644d47cff180045bc2b9700e3f36e3b23554978947 + languageName: node + linkType: hard + +"@babel/plugin-transform-parameters@npm:^7.14.5, @babel/plugin-transform-parameters@npm:^7.16.7": version: 7.16.7 resolution: "@babel/plugin-transform-parameters@npm:7.16.7" dependencies: @@ -1306,7 +1847,18 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-property-literals@npm:^7.0.0, @babel/plugin-transform-property-literals@npm:^7.16.7": +"@babel/plugin-transform-property-literals@npm:^7.0.0": + version: 7.18.6 + resolution: "@babel/plugin-transform-property-literals@npm:7.18.6" + dependencies: + "@babel/helper-plugin-utils": ^7.18.6 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 1c16e64de554703f4b547541de2edda6c01346dd3031d4d29e881aa7733785cd26d53611a4ccf5353f4d3e69097bb0111c0a93ace9e683edd94fea28c4484144 + languageName: node + linkType: hard + +"@babel/plugin-transform-property-literals@npm:^7.16.7": version: 7.16.7 resolution: "@babel/plugin-transform-property-literals@npm:7.16.7" dependencies: @@ -1328,7 +1880,18 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-react-display-name@npm:^7.0.0, @babel/plugin-transform-react-display-name@npm:^7.14.5, @babel/plugin-transform-react-display-name@npm:^7.16.7": +"@babel/plugin-transform-react-display-name@npm:^7.0.0": + version: 7.18.6 + resolution: "@babel/plugin-transform-react-display-name@npm:7.18.6" + dependencies: + "@babel/helper-plugin-utils": ^7.18.6 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 51c087ab9e41ef71a29335587da28417536c6f816c292e092ffc0e0985d2f032656801d4dd502213ce32481f4ba6c69402993ffa67f0818a07606ff811e4be49 + languageName: node + linkType: hard + +"@babel/plugin-transform-react-display-name@npm:^7.14.5, @babel/plugin-transform-react-display-name@npm:^7.16.7": version: 7.16.7 resolution: "@babel/plugin-transform-react-display-name@npm:7.16.7" dependencies: @@ -1351,28 +1914,43 @@ __metadata: linkType: hard "@babel/plugin-transform-react-jsx-self@npm:^7.0.0": - version: 7.16.7 - resolution: "@babel/plugin-transform-react-jsx-self@npm:7.16.7" + version: 7.18.6 + resolution: "@babel/plugin-transform-react-jsx-self@npm:7.18.6" dependencies: - "@babel/helper-plugin-utils": ^7.16.7 + "@babel/helper-plugin-utils": ^7.18.6 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: cf1e408eedf99de3e49689473f329f0a45f1d8642536398570267f564a0da785a676045f042ca6e5d026bcee271127e3b2555fd84949fb7fc87f8ba4fefec34e + checksum: 7d24e29c63869bb23495c163a92678c1c3341ecf74db420a20c6d3db74cbf5000fe908943f6106494e7225c0168945c150e528162274fd8fc7721966ad26930a languageName: node linkType: hard "@babel/plugin-transform-react-jsx-source@npm:^7.0.0": - version: 7.16.7 - resolution: "@babel/plugin-transform-react-jsx-source@npm:7.16.7" + version: 7.19.6 + resolution: "@babel/plugin-transform-react-jsx-source@npm:7.19.6" dependencies: - "@babel/helper-plugin-utils": ^7.16.7 + "@babel/helper-plugin-utils": ^7.19.0 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 722147fd37d8b5343ab88f611f0e05dd1e298ac981ec74797751689d4a3ed35a09af1d62dc81bf78efee922d8962aa0840a4fcf07f030434139e41012ade851d + checksum: 1e9e29a4efc5b79840bd4f68e404f5ab7765ce48c7bd22f12f2b185f9c782c66933bdf54a1b21879e4e56e6b50b4e88aca82789ecb1f61123af6dfa9ab16c555 languageName: node linkType: hard -"@babel/plugin-transform-react-jsx@npm:^7.0.0, @babel/plugin-transform-react-jsx@npm:^7.14.5, @babel/plugin-transform-react-jsx@npm:^7.16.7": +"@babel/plugin-transform-react-jsx@npm:^7.0.0": + version: 7.20.7 + resolution: "@babel/plugin-transform-react-jsx@npm:7.20.7" + dependencies: + "@babel/helper-annotate-as-pure": ^7.18.6 + "@babel/helper-module-imports": ^7.18.6 + "@babel/helper-plugin-utils": ^7.20.2 + "@babel/plugin-syntax-jsx": ^7.18.6 + "@babel/types": ^7.20.7 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 13ecbd1da582177f76ebd74d685947e703a3dcf8bd39cbc62784253201c6f7a667f3573932f6f20602dbcaf077451bf9dd3571892e3ccf4c7176add6358cd641 + languageName: node + linkType: hard + +"@babel/plugin-transform-react-jsx@npm:^7.14.5, @babel/plugin-transform-react-jsx@npm:^7.16.7": version: 7.17.3 resolution: "@babel/plugin-transform-react-jsx@npm:7.17.3" dependencies: @@ -1399,7 +1977,19 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-regenerator@npm:^7.0.0, @babel/plugin-transform-regenerator@npm:^7.16.7": +"@babel/plugin-transform-regenerator@npm:^7.0.0": + version: 7.20.5 + resolution: "@babel/plugin-transform-regenerator@npm:7.20.5" + dependencies: + "@babel/helper-plugin-utils": ^7.20.2 + regenerator-transform: ^0.15.1 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 13164861e71fb23d84c6270ef5330b03c54d5d661c2c7468f28e21c4f8598558ca0c8c3cb1d996219352946e849d270a61372bc93c8fbe9676e78e3ffd0dea07 + languageName: node + linkType: hard + +"@babel/plugin-transform-regenerator@npm:^7.16.7": version: 7.16.7 resolution: "@babel/plugin-transform-regenerator@npm:7.16.7" dependencies: @@ -1422,22 +2012,33 @@ __metadata: linkType: hard "@babel/plugin-transform-runtime@npm:^7.0.0": - version: 7.17.0 - resolution: "@babel/plugin-transform-runtime@npm:7.17.0" + version: 7.19.6 + resolution: "@babel/plugin-transform-runtime@npm:7.19.6" dependencies: - "@babel/helper-module-imports": ^7.16.7 - "@babel/helper-plugin-utils": ^7.16.7 - babel-plugin-polyfill-corejs2: ^0.3.0 - babel-plugin-polyfill-corejs3: ^0.5.0 - babel-plugin-polyfill-regenerator: ^0.3.0 + "@babel/helper-module-imports": ^7.18.6 + "@babel/helper-plugin-utils": ^7.19.0 + babel-plugin-polyfill-corejs2: ^0.3.3 + babel-plugin-polyfill-corejs3: ^0.6.0 + babel-plugin-polyfill-regenerator: ^0.4.1 semver: ^6.3.0 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 9a469d4389cb265d50f1e83e6b524ceda7abd24a0bd7cda57e54a1e6103ca7c36efc99eebd485cf0a468f048739e21d940126df40b11db34f4692bdd2d5beacd + checksum: ef93efbcbb00dcf4da6dcc55bda698a2a57fca3fb05a6a13e932ecfdb7c1c5d2f0b5b245c1c4faca0318853937caba0d82442f58b7653249f64275d08052fbd8 languageName: node linkType: hard -"@babel/plugin-transform-shorthand-properties@npm:^7.0.0, @babel/plugin-transform-shorthand-properties@npm:^7.16.7": +"@babel/plugin-transform-shorthand-properties@npm:^7.0.0": + version: 7.18.6 + resolution: "@babel/plugin-transform-shorthand-properties@npm:7.18.6" + dependencies: + "@babel/helper-plugin-utils": ^7.18.6 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: b8e4e8acc2700d1e0d7d5dbfd4fdfb935651913de6be36e6afb7e739d8f9ca539a5150075a0f9b79c88be25ddf45abb912fe7abf525f0b80f5b9d9860de685d7 + languageName: node + linkType: hard + +"@babel/plugin-transform-shorthand-properties@npm:^7.16.7": version: 7.16.7 resolution: "@babel/plugin-transform-shorthand-properties@npm:7.16.7" dependencies: @@ -1448,7 +2049,19 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-spread@npm:^7.0.0, @babel/plugin-transform-spread@npm:^7.16.7": +"@babel/plugin-transform-spread@npm:^7.0.0": + version: 7.20.7 + resolution: "@babel/plugin-transform-spread@npm:7.20.7" + dependencies: + "@babel/helper-plugin-utils": ^7.20.2 + "@babel/helper-skip-transparent-expression-wrappers": ^7.20.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 8ea698a12da15718aac7489d4cde10beb8a3eea1f66167d11ab1e625033641e8b328157fd1a0b55dd6531933a160c01fc2e2e61132a385cece05f26429fd0cc2 + languageName: node + linkType: hard + +"@babel/plugin-transform-spread@npm:^7.16.7": version: 7.16.7 resolution: "@babel/plugin-transform-spread@npm:7.16.7" dependencies: @@ -1460,7 +2073,18 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-sticky-regex@npm:^7.0.0, @babel/plugin-transform-sticky-regex@npm:^7.16.7": +"@babel/plugin-transform-sticky-regex@npm:^7.0.0": + version: 7.18.6 + resolution: "@babel/plugin-transform-sticky-regex@npm:7.18.6" + dependencies: + "@babel/helper-plugin-utils": ^7.18.6 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 68ea18884ae9723443ffa975eb736c8c0d751265859cd3955691253f7fee37d7a0f7efea96c8a062876af49a257a18ea0ed5fea0d95a7b3611ce40f7ee23aee3 + languageName: node + linkType: hard + +"@babel/plugin-transform-sticky-regex@npm:^7.16.7": version: 7.16.7 resolution: "@babel/plugin-transform-sticky-regex@npm:7.16.7" dependencies: @@ -1471,7 +2095,18 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-template-literals@npm:^7.0.0, @babel/plugin-transform-template-literals@npm:^7.16.7": +"@babel/plugin-transform-template-literals@npm:^7.0.0": + version: 7.18.9 + resolution: "@babel/plugin-transform-template-literals@npm:7.18.9" + dependencies: + "@babel/helper-plugin-utils": ^7.18.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 3d2fcd79b7c345917f69b92a85bdc3ddd68ce2c87dc70c7d61a8373546ccd1f5cb8adc8540b49dfba08e1b82bb7b3bbe23a19efdb2b9c994db2db42906ca9fb2 + languageName: node + linkType: hard + +"@babel/plugin-transform-template-literals@npm:^7.16.7": version: 7.16.7 resolution: "@babel/plugin-transform-template-literals@npm:7.16.7" dependencies: @@ -1493,16 +2128,16 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-typescript@npm:^7.16.7, @babel/plugin-transform-typescript@npm:^7.5.0": - version: 7.16.8 - resolution: "@babel/plugin-transform-typescript@npm:7.16.8" +"@babel/plugin-transform-typescript@npm:^7.5.0": + version: 7.20.7 + resolution: "@babel/plugin-transform-typescript@npm:7.20.7" dependencies: - "@babel/helper-create-class-features-plugin": ^7.16.7 - "@babel/helper-plugin-utils": ^7.16.7 - "@babel/plugin-syntax-typescript": ^7.16.7 + "@babel/helper-create-class-features-plugin": ^7.20.7 + "@babel/helper-plugin-utils": ^7.20.2 + "@babel/plugin-syntax-typescript": ^7.20.0 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: a76d0afcbd550208cf2e7cdedb4f2d3ca3fa287640a4858a5ee0a28270b784d7d20d5a51b5997dc84514e066a5ebef9e0a0f74ed9fffae09e73984786dd08036 + checksum: ca569a1b8001e7e8971874656091789c6b3209f155c91c56bce82b545e43d09d156b4fcf2f0dfcdf7911a2c546c7090c2aff167a5692443f6f0382b358c233e0 languageName: node linkType: hard @@ -1517,7 +2152,19 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-unicode-regex@npm:^7.0.0, @babel/plugin-transform-unicode-regex@npm:^7.16.7": +"@babel/plugin-transform-unicode-regex@npm:^7.0.0": + version: 7.18.6 + resolution: "@babel/plugin-transform-unicode-regex@npm:7.18.6" + dependencies: + "@babel/helper-create-regexp-features-plugin": ^7.18.6 + "@babel/helper-plugin-utils": ^7.18.6 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: d9e18d57536a2d317fb0b7c04f8f55347f3cfacb75e636b4c6fa2080ab13a3542771b5120e726b598b815891fc606d1472ac02b749c69fd527b03847f22dc25e + languageName: node + linkType: hard + +"@babel/plugin-transform-unicode-regex@npm:^7.16.7": version: 7.16.7 resolution: "@babel/plugin-transform-unicode-regex@npm:7.16.7" dependencies: @@ -1613,19 +2260,6 @@ __metadata: languageName: node linkType: hard -"@babel/preset-flow@npm:^7.0.0": - version: 7.16.7 - resolution: "@babel/preset-flow@npm:7.16.7" - dependencies: - "@babel/helper-plugin-utils": ^7.16.7 - "@babel/helper-validator-option": ^7.16.7 - "@babel/plugin-transform-flow-strip-types": ^7.16.7 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: b73c743a6bdfb51fe907adbc425a82469145ea15f32b43096804e28ba30921c4ac3199f86e11d1cefbce95c3a5404aaf3534152f5a12358c57303c05dfc51b4f - languageName: node - linkType: hard - "@babel/preset-modules@npm:^0.1.5": version: 0.1.5 resolution: "@babel/preset-modules@npm:0.1.5" @@ -1673,20 +2307,22 @@ __metadata: languageName: node linkType: hard -"@babel/preset-typescript@npm:^7.1.0": - version: 7.16.7 - resolution: "@babel/preset-typescript@npm:7.16.7" +"@babel/register@npm:^7.0.0": + version: 7.18.9 + resolution: "@babel/register@npm:7.18.9" dependencies: - "@babel/helper-plugin-utils": ^7.16.7 - "@babel/helper-validator-option": ^7.16.7 - "@babel/plugin-transform-typescript": ^7.16.7 + clone-deep: ^4.0.1 + find-cache-dir: ^2.0.0 + make-dir: ^2.1.0 + pirates: ^4.0.5 + source-map-support: ^0.5.16 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 44e2f3fa302befe0dc50a01b79e5aa8c27a9c7047c46df665beae97201173030646ddf7c83d7d3ed3724fc38151745b11693e7b4502c81c4cd67781ff5677da5 + checksum: 4aeaff97e061a397f632659082ba86c539ef8194697b236d991c10d1c2ea8f73213d3b5b3b2c24625951a1ef726b7a7d2e70f70ffcb37f79ef0c1a745eebef21 languageName: node linkType: hard -"@babel/register@npm:^7.0.0, @babel/register@npm:^7.12.10": +"@babel/register@npm:^7.12.10": version: 7.17.7 resolution: "@babel/register@npm:7.17.7" dependencies: @@ -1720,7 +2356,18 @@ __metadata: languageName: node linkType: hard -"@babel/template@npm:^7.0.0, @babel/template@npm:^7.16.7, @babel/template@npm:^7.3.3": +"@babel/template@npm:^7.0.0, @babel/template@npm:^7.18.10, @babel/template@npm:^7.20.7": + version: 7.20.7 + resolution: "@babel/template@npm:7.20.7" + dependencies: + "@babel/code-frame": ^7.18.6 + "@babel/parser": ^7.20.7 + "@babel/types": ^7.20.7 + checksum: 2eb1a0ab8d415078776bceb3473d07ab746e6bb4c2f6ca46ee70efb284d75c4a32bb0cd6f4f4946dec9711f9c0780e8e5d64b743208deac6f8e9858afadc349e + languageName: node + linkType: hard + +"@babel/template@npm:^7.16.7, @babel/template@npm:^7.3.3": version: 7.16.7 resolution: "@babel/template@npm:7.16.7" dependencies: @@ -1731,7 +2378,7 @@ __metadata: languageName: node linkType: hard -"@babel/traverse@npm:^7.0.0, @babel/traverse@npm:^7.0.0-rc.1, @babel/traverse@npm:^7.13.0, @babel/traverse@npm:^7.14.0, @babel/traverse@npm:^7.16.7, @babel/traverse@npm:^7.16.8, @babel/traverse@npm:^7.17.3, @babel/traverse@npm:^7.7.2": +"@babel/traverse@npm:^7.0.0, @babel/traverse@npm:^7.0.0-rc.1, @babel/traverse@npm:^7.13.0, @babel/traverse@npm:^7.16.7, @babel/traverse@npm:^7.16.8, @babel/traverse@npm:^7.17.3, @babel/traverse@npm:^7.7.2": version: 7.17.3 resolution: "@babel/traverse@npm:7.17.3" dependencies: @@ -1749,6 +2396,24 @@ __metadata: languageName: node linkType: hard +"@babel/traverse@npm:^7.14.0, @babel/traverse@npm:^7.20.10, @babel/traverse@npm:^7.20.5, @babel/traverse@npm:^7.20.7": + version: 7.20.12 + resolution: "@babel/traverse@npm:7.20.12" + dependencies: + "@babel/code-frame": ^7.18.6 + "@babel/generator": ^7.20.7 + "@babel/helper-environment-visitor": ^7.18.9 + "@babel/helper-function-name": ^7.19.0 + "@babel/helper-hoist-variables": ^7.18.6 + "@babel/helper-split-export-declaration": ^7.18.6 + "@babel/parser": ^7.20.7 + "@babel/types": ^7.20.7 + debug: ^4.1.0 + globals: ^11.1.0 + checksum: d758b355ab4f1e87984524b67785fa23d74e8a45d2ceb8bcf4d5b2b0cd15ee160db5e68c7078808542805774ca3802e2eafb1b9638afa4cd7f9ecabd0ca7fd56 + languageName: node + linkType: hard + "@babel/types@npm:^7.0.0, @babel/types@npm:^7.0.0-rc.1, @babel/types@npm:^7.16.0, @babel/types@npm:^7.16.7, @babel/types@npm:^7.16.8, @babel/types@npm:^7.17.0, @babel/types@npm:^7.3.0, @babel/types@npm:^7.3.3, @babel/types@npm:^7.4.4": version: 7.17.0 resolution: "@babel/types@npm:7.17.0" @@ -1759,6 +2424,17 @@ __metadata: languageName: node linkType: hard +"@babel/types@npm:^7.18.6, @babel/types@npm:^7.18.9, @babel/types@npm:^7.19.0, @babel/types@npm:^7.20.0, @babel/types@npm:^7.20.2, @babel/types@npm:^7.20.5, @babel/types@npm:^7.20.7": + version: 7.20.7 + resolution: "@babel/types@npm:7.20.7" + dependencies: + "@babel/helper-string-parser": ^7.19.4 + "@babel/helper-validator-identifier": ^7.19.1 + to-fast-properties: ^2.0.0 + checksum: b39af241f0b72bba67fd6d0d23914f6faec8c0eba8015c181cbd5ea92e59fc91a52a1ab490d3520c7dbd19ddb9ebb76c476308f6388764f16d8201e37fae6811 + languageName: node + linkType: hard + "@babel/types@npm:^7.8.3": version: 7.18.13 resolution: "@babel/types@npm:7.18.13" @@ -1859,18 +2535,6 @@ __metadata: languageName: node linkType: hard -"@expo/react-native-action-sheet@npm:^3.6.0": - version: 3.13.0 - resolution: "@expo/react-native-action-sheet@npm:3.13.0" - dependencies: - "@types/hoist-non-react-statics": ^3.3.1 - hoist-non-react-statics: ^3.3.0 - peerDependencies: - react: ">=16.3.0" - checksum: e05e1221bf298ff909341d28313ef32c535bf74b9db2f24d376b78643d24d035004a311d3aecdd1a3138948f691f06cc9ee5fefb94aa1143e4304304d2763653 - languageName: node - linkType: hard - "@formatjs/ecma402-abstract@npm:1.12.0": version: 1.12.0 resolution: "@formatjs/ecma402-abstract@npm:1.12.0" @@ -1928,9 +2592,9 @@ __metadata: linkType: hard "@hapi/hoek@npm:^9.0.0": - version: 9.2.1 - resolution: "@hapi/hoek@npm:9.2.1" - checksum: 6a439f672df5f12f1d08d56967b4cb364ce05d81e95e3c3c1b88c5a98b917ca91c70e78cc0b2b4219a760cceec1f22d6658bfc93a83670cecc1ce9ca2247ebd8 + version: 9.3.0 + resolution: "@hapi/hoek@npm:9.3.0" + checksum: 4771c7a776242c3c022b168046af4e324d116a9d2e1d60631ee64f474c6e38d1bb07092d898bf95c7bc5d334c5582798a1456321b2e53ca817d4e7c88bc25b43 languageName: node linkType: hard @@ -2376,6 +3040,17 @@ __metadata: languageName: node linkType: hard +"@jridgewell/gen-mapping@npm:^0.3.2": + version: 0.3.2 + resolution: "@jridgewell/gen-mapping@npm:0.3.2" + dependencies: + "@jridgewell/set-array": ^1.0.1 + "@jridgewell/sourcemap-codec": ^1.4.10 + "@jridgewell/trace-mapping": ^0.3.9 + checksum: 1832707a1c476afebe4d0fbbd4b9434fdb51a4c3e009ab1e9938648e21b7a97049fa6009393bdf05cab7504108413441df26d8a3c12193996e65493a4efb6882 + languageName: node + linkType: hard + "@jridgewell/resolve-uri@npm:3.1.0": version: 3.1.0 resolution: "@jridgewell/resolve-uri@npm:3.1.0" @@ -2390,6 +3065,13 @@ __metadata: languageName: node linkType: hard +"@jridgewell/set-array@npm:^1.0.1": + version: 1.1.2 + resolution: "@jridgewell/set-array@npm:1.1.2" + checksum: 69a84d5980385f396ff60a175f7177af0b8da4ddb81824cb7016a9ef914eee9806c72b6b65942003c63f7983d4f39a5c6c27185bbca88eb4690b62075602e28e + languageName: node + linkType: hard + "@jridgewell/sourcemap-codec@npm:1.4.14": version: 1.4.14 resolution: "@jridgewell/sourcemap-codec@npm:1.4.14" @@ -2434,7 +3116,7 @@ __metadata: languageName: node linkType: hard -"@jridgewell/trace-mapping@npm:^0.3.15": +"@jridgewell/trace-mapping@npm:^0.3.15, @jridgewell/trace-mapping@npm:^0.3.9": version: 0.3.17 resolution: "@jridgewell/trace-mapping@npm:0.3.17" dependencies: @@ -2847,23 +3529,23 @@ __metadata: linkType: hard "@react-native-community/cli-hermes@npm:^6.3.0": - version: 6.3.0 - resolution: "@react-native-community/cli-hermes@npm:6.3.0" + version: 6.3.1 + resolution: "@react-native-community/cli-hermes@npm:6.3.1" dependencies: - "@react-native-community/cli-platform-android": ^6.3.0 - "@react-native-community/cli-tools": ^6.2.0 + "@react-native-community/cli-platform-android": ^6.3.1 + "@react-native-community/cli-tools": ^6.2.1 chalk: ^4.1.2 hermes-profile-transformer: ^0.0.6 ip: ^1.1.5 - checksum: 47e126be04e4638850ed7318a11ecacce0226094424fde46e6c457c425d2bbb7f1e1b2ba754c2da7ef14d04b13cb7c3c7ba3a19397fc7ec7a3ba0952d6be4a05 + checksum: 7e82764c8531de228882e912158f26c9b3a426c36f2c1751f58ac68763689b8b733c43b745814c1b72cc1100de2d5bbc764ed105e7d846104d3d69427aa75a60 languageName: node linkType: hard -"@react-native-community/cli-platform-android@npm:^6.0.0, @react-native-community/cli-platform-android@npm:^6.3.0": - version: 6.3.0 - resolution: "@react-native-community/cli-platform-android@npm:6.3.0" +"@react-native-community/cli-platform-android@npm:^6.0.0, @react-native-community/cli-platform-android@npm:^6.3.1": + version: 6.3.1 + resolution: "@react-native-community/cli-platform-android@npm:6.3.1" dependencies: - "@react-native-community/cli-tools": ^6.2.0 + "@react-native-community/cli-tools": ^6.2.1 chalk: ^4.1.2 execa: ^1.0.0 fs-extra: ^8.1.0 @@ -2873,15 +3555,15 @@ __metadata: logkitty: ^0.7.1 slash: ^3.0.0 xmldoc: ^1.1.2 - checksum: 997d416db128b62b4d416ad01902c11a2f28ad949e10827154994693570713fef8a9d98d6d95c86552dfe4cbecc29997defdf6cb0132b23b800f8e1fbf016b67 + checksum: cb4d649213c277c792cfff338d9530f622a5445de576402684dd322ac71b6cc8dfcf699179d8dee9fb89c76b18997740eac41cac7e7ff2c6032cc97afd405e0e languageName: node linkType: hard "@react-native-community/cli-platform-ios@npm:^6.0.0": - version: 6.2.0 - resolution: "@react-native-community/cli-platform-ios@npm:6.2.0" + version: 6.2.1 + resolution: "@react-native-community/cli-platform-ios@npm:6.2.1" dependencies: - "@react-native-community/cli-tools": ^6.2.0 + "@react-native-community/cli-tools": ^6.2.1 chalk: ^4.1.2 glob: ^7.1.3 js-yaml: ^3.13.1 @@ -2889,7 +3571,7 @@ __metadata: ora: ^3.4.0 plist: ^3.0.2 xcode: ^2.0.0 - checksum: 827ce62aa978964817d21b5b7f77ce5e58a9d57ea9e96abc1d17a5dddc3f51eb4623c4619d149eb9a28c8799537649913d37a0eb4a8b931727547ee2d2a478e9 + checksum: 40c5a3318382319919f604724be62522c51681b7306cf0fa1d18cbafe1bea14cfa05758685adf620e8ba643475a7e1946b6c1a7795c4de285c92c0cc4181c37c languageName: node linkType: hard @@ -2928,9 +3610,9 @@ __metadata: languageName: node linkType: hard -"@react-native-community/cli-tools@npm:^6.2.0": - version: 6.2.0 - resolution: "@react-native-community/cli-tools@npm:6.2.0" +"@react-native-community/cli-tools@npm:^6.2.0, @react-native-community/cli-tools@npm:^6.2.1": + version: 6.2.1 + resolution: "@react-native-community/cli-tools@npm:6.2.1" dependencies: appdirsjs: ^1.2.4 chalk: ^4.1.2 @@ -2939,8 +3621,8 @@ __metadata: node-fetch: ^2.6.0 open: ^6.2.0 semver: ^6.3.0 - shell-quote: 1.6.1 - checksum: 17bb1e2e22c4e3e8c6902da4d46fcba4ed365831b41f35e24ab28720a6e36998092203e694c2a53b21b37161c1bfe10f0d63bcc05d38d149093e28a0d336602d + shell-quote: ^1.7.3 + checksum: dcc5084c0c021cbec98099c97bdbdaedcd46d51fbd271a369a80c76754fa068dd90b4c5f4a61a9c1a852bce715bea5c4e0f30f2d6da958c7204c2fa14d0f99a8 languageName: node linkType: hard @@ -2996,16 +3678,6 @@ __metadata: languageName: node linkType: hard -"@react-native-community/masked-view@npm:0.1.11": - version: 0.1.11 - resolution: "@react-native-community/masked-view@npm:0.1.11" - peerDependencies: - react: ">=16.0" - react-native: ">=0.57" - checksum: 246bcd94a6a2cafc415c7a192fb5a76ef7cd9b648b47ea4b2366f06128376ab377dcff3fab676261050fd3a97324bde5d64802aa3e8d1580fe6c0e3b0138cefc - languageName: node - linkType: hard - "@react-native/assets@npm:1.0.0": version: 1.0.0 resolution: "@react-native/assets@npm:1.0.0" @@ -3027,90 +3699,6 @@ __metadata: languageName: node linkType: hard -"@react-navigation/bottom-tabs@npm:^6.0.5": - version: 6.2.0 - resolution: "@react-navigation/bottom-tabs@npm:6.2.0" - dependencies: - "@react-navigation/elements": ^1.3.1 - color: ^3.1.3 - warn-once: ^0.1.0 - peerDependencies: - "@react-navigation/native": ^6.0.0 - react: "*" - react-native: "*" - react-native-safe-area-context: ">= 3.0.0" - react-native-screens: ">= 3.0.0" - checksum: 8f576e254916ddef9bcbcc2ffea80f861854e2679b208504d5bf8202dd28fe008832bf882d7d47d36bfedb092bef3e500e5fe0a81cd2cdaf7891bd237e4b7063 - languageName: node - linkType: hard - -"@react-navigation/core@npm:^6.1.1": - version: 6.1.1 - resolution: "@react-navigation/core@npm:6.1.1" - dependencies: - "@react-navigation/routers": ^6.1.0 - escape-string-regexp: ^4.0.0 - nanoid: ^3.1.23 - query-string: ^7.0.0 - react-is: ^16.13.0 - peerDependencies: - react: "*" - checksum: 16944169cdfa8a3da796a3090e432011148229e186304fd073b1223d32df488afdaad6aef4ab6e1be3c87d8d1a922d1e1582b6b707e4bf5995d9dcc4ef7ae492 - languageName: node - linkType: hard - -"@react-navigation/elements@npm:^1.3.1": - version: 1.3.1 - resolution: "@react-navigation/elements@npm:1.3.1" - peerDependencies: - "@react-navigation/native": ^6.0.0 - react: "*" - react-native: "*" - react-native-safe-area-context: ">= 3.0.0" - checksum: 40a06dda5b3ed3db9018b0686a5ee96716c8dc1ddac8a0c2bc7375b40e51e4d6698e57884d07022b7d164d489bf3817a9394a692eee53e90bd281c2e9170de8f - languageName: node - linkType: hard - -"@react-navigation/native-stack@npm:^6.1.0": - version: 6.5.2 - resolution: "@react-navigation/native-stack@npm:6.5.2" - dependencies: - "@react-navigation/elements": ^1.3.1 - warn-once: ^0.1.0 - peerDependencies: - "@react-navigation/native": ^6.0.0 - react: "*" - react-native: "*" - react-native-safe-area-context: ">= 3.0.0" - react-native-screens: ">= 3.0.0" - checksum: 1d74e549e5f4ea6cd981aed02fdf084545d697bcfffba30ec95f51afb10e3718a322dcdcda0fd1ff8b65ae525f2860037d026e5e4917b89866804218533f949a - languageName: node - linkType: hard - -"@react-navigation/native@npm:^6.0.2": - version: 6.0.8 - resolution: "@react-navigation/native@npm:6.0.8" - dependencies: - "@react-navigation/core": ^6.1.1 - escape-string-regexp: ^4.0.0 - fast-deep-equal: ^3.1.3 - nanoid: ^3.1.23 - peerDependencies: - react: "*" - react-native: "*" - checksum: 612e326b72f2839fd6031bb19ef3f79807f37f7bea20ec9d8ae2a3e50179b9428632ea3d7c2e9910146752ca2e749f94e696a837c4b407a8071d38d107a2d72e - languageName: node - linkType: hard - -"@react-navigation/routers@npm:^6.1.0": - version: 6.1.0 - resolution: "@react-navigation/routers@npm:6.1.0" - dependencies: - nanoid: ^3.1.23 - checksum: 08a4ad5d8ee132cd3901f07a39da8bbbd9f9359f6da669b1fc8d9cf57f1422d9297dce85545e7639a4d8b679291255ceb93392ff1df474dff219644435a4c22c - languageName: node - linkType: hard - "@react-stately/collections@npm:^3.4.3": version: 3.4.3 resolution: "@react-stately/collections@npm:3.4.3" @@ -3373,18 +3961,6 @@ __metadata: languageName: node linkType: hard -"@sentry/integrations@npm:6.12.0": - version: 6.12.0 - resolution: "@sentry/integrations@npm:6.12.0" - dependencies: - "@sentry/types": 6.12.0 - "@sentry/utils": 6.12.0 - localforage: ^1.8.1 - tslib: ^1.9.3 - checksum: 529c6ff345d6cc356537923167efb7c56b8908e481fb74ea7a8d57639faadfff8307ce14292cfc2bd065428a763cf14834c8a1db7dcb856e64d73bd4c34a14cb - languageName: node - linkType: hard - "@sentry/minimal@npm:6.12.0": version: 6.12.0 resolution: "@sentry/minimal@npm:6.12.0" @@ -3451,55 +4027,6 @@ __metadata: languageName: node linkType: hard -"@sentry/react-native@npm:3.0.2": - version: 3.0.2 - resolution: "@sentry/react-native@npm:3.0.2" - dependencies: - "@sentry/browser": 6.12.0 - "@sentry/cli": ^1.68.0 - "@sentry/core": 6.12.0 - "@sentry/hub": 6.12.0 - "@sentry/integrations": 6.12.0 - "@sentry/react": 6.12.0 - "@sentry/tracing": 6.12.0 - "@sentry/types": 6.12.0 - "@sentry/utils": 6.12.0 - peerDependencies: - react: ">=16.4.1" - react-native: ">=0.56.0" - checksum: 54eab1d8781d117de38c54fbf6895fd16939b2727c25ac6b25506e403e5548b8337e5cfec7f87cbc31fb99fc7f6fa9460ef904e339fed097bae5736e4ef223e8 - languageName: node - linkType: hard - -"@sentry/react@npm:6.12.0": - version: 6.12.0 - resolution: "@sentry/react@npm:6.12.0" - dependencies: - "@sentry/browser": 6.12.0 - "@sentry/minimal": 6.12.0 - "@sentry/types": 6.12.0 - "@sentry/utils": 6.12.0 - hoist-non-react-statics: ^3.3.2 - tslib: ^1.9.3 - peerDependencies: - react: 15.x || 16.x || 17.x - checksum: b484a87160abb52eaf4f53a0e17b60507cd44c125be24e77b98cdcbe76cc8b6ca990110515c59253f7df9d38929a651ee51a93e9d3e69273417cfdefd30247b2 - languageName: node - linkType: hard - -"@sentry/tracing@npm:6.12.0": - version: 6.12.0 - resolution: "@sentry/tracing@npm:6.12.0" - dependencies: - "@sentry/hub": 6.12.0 - "@sentry/minimal": 6.12.0 - "@sentry/types": 6.12.0 - "@sentry/utils": 6.12.0 - tslib: ^1.9.3 - checksum: 9b4b7c8f13932dd6c9e522ba952d068b06d37db4ce8e94f2c644c29499712a82091bf062a2e9ffa002d92cc07942ebd500cf8c7545d3fc4d31018bdcce4c6f6a - languageName: node - linkType: hard - "@sentry/tracing@npm:6.7.1": version: 6.7.1 resolution: "@sentry/tracing@npm:6.7.1" @@ -3602,9 +4129,9 @@ __metadata: linkType: hard "@sideway/formula@npm:^3.0.0": - version: 3.0.0 - resolution: "@sideway/formula@npm:3.0.0" - checksum: 8ae26a0ed6bc84f7310be6aae6eb9d81e97f382619fc69025d346871a707eaab0fa38b8c857e3f0c35a19923de129f42d35c50b8010c928d64aab41578580ec4 + version: 3.0.1 + resolution: "@sideway/formula@npm:3.0.1" + checksum: e4beeebc9dbe2ff4ef0def15cec0165e00d1612e3d7cea0bc9ce5175c3263fc2c818b679bd558957f49400ee7be9d4e5ac90487e1625b4932e15c4aa7919c57a languageName: node linkType: hard @@ -3869,7 +4396,16 @@ __metadata: languageName: node linkType: hard -"@types/graceful-fs@npm:^4.1.2, @types/graceful-fs@npm:^4.1.3": +"@types/graceful-fs@npm:^4.1.2": + version: 4.1.6 + resolution: "@types/graceful-fs@npm:4.1.6" + dependencies: + "@types/node": "*" + checksum: c3070ccdc9ca0f40df747bced1c96c71a61992d6f7c767e8fd24bb6a3c2de26e8b84135ede000b7e79db530a23e7e88dcd9db60eee6395d0f4ce1dae91369dd4 + languageName: node + linkType: hard + +"@types/graceful-fs@npm:^4.1.3": version: 4.1.5 resolution: "@types/graceful-fs@npm:4.1.5" dependencies: @@ -3902,13 +4438,6 @@ __metadata: languageName: node linkType: hard -"@types/invariant@npm:^2.2.35": - version: 2.2.35 - resolution: "@types/invariant@npm:2.2.35" - checksum: af1b624057c89789ed0917838fea3d42bb0c101cc22b829a24d8777c678be3bc79d6ae05992a13bdf607b94731262467a2e62a809602ea1f7eea5e8c2242660d - languageName: node - linkType: hard - "@types/istanbul-lib-coverage@npm:*, @types/istanbul-lib-coverage@npm:^2.0.0, @types/istanbul-lib-coverage@npm:^2.0.1": version: 2.0.4 resolution: "@types/istanbul-lib-coverage@npm:2.0.4" @@ -4201,11 +4730,11 @@ __metadata: linkType: hard "@types/yargs@npm:^16.0.0": - version: 16.0.4 - resolution: "@types/yargs@npm:16.0.4" + version: 16.0.5 + resolution: "@types/yargs@npm:16.0.5" dependencies: "@types/yargs-parser": "*" - checksum: caa21d2c957592fe2184a8368c8cbe5a82a6c2e2f2893722e489f842dc5963293d2f3120bc06fe3933d60a3a0d1e2eb269649fd6b1947fe1820f8841ba611dd9 + checksum: 22697f7cc8aa32dcc10981a87f035e183303a58351c537c81fb450270d5c494b1d918186210e445b0eb2e4a8b34a8bda2a595f346bdb1c9ed2b63d193cb00430 languageName: node linkType: hard @@ -4783,6 +5312,7 @@ __metadata: patch-package: ^6.1.2 prettier: ^1.18.1 pretty-quick: ^1.11.1 + react-refresh: ^0.14.0 shelljs: ^0.8.2 source-map-support: ^0.5.21 languageName: unknown @@ -5061,9 +5591,9 @@ __metadata: linkType: hard "appdirsjs@npm:^1.2.4": - version: 1.2.6 - resolution: "appdirsjs@npm:1.2.6" - checksum: b680cffe91fe422168c29c66609bb390db7004c214f4b11644a3269d84bb2828b5d60b5e2dce5af10d143e538a68169f93738ce2f0a6f57cca8c5c4f19cef2ed + version: 1.2.7 + resolution: "appdirsjs@npm:1.2.7" + checksum: 3411b4e31edf8687ad69638ef81b92b4889ad31e527b673a364990c28c99b6b8c3ea81b2b2b636d5b08e166a18706c4464fd8436b298f85384d499ba6b8dc4b7 languageName: node linkType: hard @@ -5124,16 +5654,6 @@ __metadata: languageName: node linkType: hard -"aria-query@npm:^0.7.0": - version: 0.7.1 - resolution: "aria-query@npm:0.7.1" - dependencies: - ast-types-flow: 0.0.7 - commander: ^2.11.0 - checksum: 3c72650113610e7195a514b383cee84902b5a3b8a06f141795301ffa7c7b03f26b7fe1ec568fcdb25207f7a25a128df13ba79804b8c9479164ddca3047674dde - languageName: node - linkType: hard - "aria-query@npm:^3.0.0": version: 3.0.0 resolution: "aria-query@npm:3.0.0" @@ -5189,13 +5709,6 @@ __metadata: languageName: node linkType: hard -"array-filter@npm:~0.0.0": - version: 0.0.1 - resolution: "array-filter@npm:0.0.1" - checksum: 0e9afdf5e248c45821c6fe1232071a13a3811e1902c2c2a39d12e4495e8b0b25739fd95bffbbf9884b9693629621f6077b4ae16207b8f23d17710fc2465cebbb - languageName: node - linkType: hard - "array-find-index@npm:^1.0.2": version: 1.0.2 resolution: "array-find-index@npm:1.0.2" @@ -5243,20 +5756,6 @@ __metadata: languageName: node linkType: hard -"array-map@npm:~0.0.0": - version: 0.0.0 - resolution: "array-map@npm:0.0.0" - checksum: 30d73fdc99956c8bd70daea40db5a7d78c5c2c75a03c64fc77904885e79adf7d5a0595076534f4e58962d89435f0687182ac929e65634e3d19931698cbac8149 - languageName: node - linkType: hard - -"array-reduce@npm:~0.0.0": - version: 0.0.0 - resolution: "array-reduce@npm:0.0.0" - checksum: d6226325271f477e3dd65b4d40db8597735b8d08bebcca4972e52d3c173d6c697533664fa8865789ea2d076bdaf1989bab5bdfbb61598be92074a67f13057c3a - languageName: node - linkType: hard - "array-union@npm:^1.0.1, array-union@npm:^1.0.2": version: 1.0.2 resolution: "array-union@npm:1.0.2" @@ -5383,15 +5882,6 @@ __metadata: languageName: node linkType: hard -"ast-types@npm:0.14.2": - version: 0.14.2 - resolution: "ast-types@npm:0.14.2" - dependencies: - tslib: ^2.0.1 - checksum: 8674a77307764979f0a0b2006b7223a4b789abffaa7acbf6a1132650a799252155170173a1ff6a7fb6897f59437fc955f2707bdfc391b0797750898876e6c9ed - languageName: node - linkType: hard - "astral-regex@npm:^1.0.0": version: 1.0.0 resolution: "astral-regex@npm:1.0.0" @@ -5434,7 +5924,16 @@ __metadata: languageName: node linkType: hard -"async@npm:^2.4.0, async@npm:^2.6.2": +"async@npm:^2.4.0": + version: 2.6.4 + resolution: "async@npm:2.6.4" + dependencies: + lodash: ^4.17.14 + checksum: a52083fb32e1ebe1d63e5c5624038bb30be68ff07a6c8d7dfe35e47c93fc144bd8652cbec869e0ac07d57dde387aa5f1386be3559cdee799cb1f789678d88e19 + languageName: node + linkType: hard + +"async@npm:^2.6.2": version: 2.6.3 resolution: "async@npm:2.6.3" dependencies: @@ -5511,15 +6010,6 @@ __metadata: languageName: node linkType: hard -"axobject-query@npm:^0.1.0": - version: 0.1.0 - resolution: "axobject-query@npm:0.1.0" - dependencies: - ast-types-flow: 0.0.7 - checksum: 48e1e4ed68e7f52feea2a5141a9b65a02a929ddb32eb64c30d0a06d90a698b5658fa60e046fb1b8e6bc349a1b1b8294c15b68e8c5cdc3a0194fb223791060d9a - languageName: node - linkType: hard - "axobject-query@npm:^2.0.1": version: 2.2.0 resolution: "axobject-query@npm:2.2.0" @@ -5538,15 +6028,6 @@ __metadata: languageName: node linkType: hard -"babel-core@npm:^7.0.0-bridge.0": - version: 7.0.0-bridge.0 - resolution: "babel-core@npm:7.0.0-bridge.0" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 2a1cb879019dffb08d17bec36e13c3a6d74c94773f41c1fd8b14de13f149cc34b705b0a1e07b42fcf35917b49d78db6ff0c5c3b00b202a5235013d517b5c6bbb - languageName: node - linkType: hard - "babel-eslint@npm:9.0.0": version: 9.0.0 resolution: "babel-eslint@npm:9.0.0" @@ -5664,6 +6145,19 @@ __metadata: languageName: node linkType: hard +"babel-plugin-polyfill-corejs2@npm:^0.3.3": + version: 0.3.3 + resolution: "babel-plugin-polyfill-corejs2@npm:0.3.3" + dependencies: + "@babel/compat-data": ^7.17.7 + "@babel/helper-define-polyfill-provider": ^0.3.3 + semver: ^6.1.1 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 7db3044993f3dddb3cc3d407bc82e640964a3bfe22de05d90e1f8f7a5cb71460011ab136d3c03c6c1ba428359ebf635688cd6205e28d0469bba221985f5c6179 + languageName: node + linkType: hard + "babel-plugin-polyfill-corejs3@npm:^0.5.0": version: 0.5.2 resolution: "babel-plugin-polyfill-corejs3@npm:0.5.2" @@ -5676,6 +6170,18 @@ __metadata: languageName: node linkType: hard +"babel-plugin-polyfill-corejs3@npm:^0.6.0": + version: 0.6.0 + resolution: "babel-plugin-polyfill-corejs3@npm:0.6.0" + dependencies: + "@babel/helper-define-polyfill-provider": ^0.3.3 + core-js-compat: ^3.25.1 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 470bb8c59f7c0912bd77fe1b5a2e72f349b3f65bbdee1d60d6eb7e1f4a085c6f24b2dd5ab4ac6c2df6444a96b070ef6790eccc9edb6a2668c60d33133bfb62c6 + languageName: node + linkType: hard + "babel-plugin-polyfill-regenerator@npm:^0.3.0": version: 0.3.1 resolution: "babel-plugin-polyfill-regenerator@npm:0.3.1" @@ -5687,6 +6193,17 @@ __metadata: languageName: node linkType: hard +"babel-plugin-polyfill-regenerator@npm:^0.4.1": + version: 0.4.1 + resolution: "babel-plugin-polyfill-regenerator@npm:0.4.1" + dependencies: + "@babel/helper-define-polyfill-provider": ^0.3.3 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: ab0355efbad17d29492503230387679dfb780b63b25408990d2e4cf421012dae61d6199ddc309f4d2409ce4e9d3002d187702700dd8f4f8770ebbba651ed066c + languageName: node + linkType: hard + "babel-plugin-syntax-object-rest-spread@npm:^6.8.0": version: 6.13.0 resolution: "babel-plugin-syntax-object-rest-spread@npm:6.13.0" @@ -5832,13 +6349,6 @@ __metadata: languageName: node linkType: hard -"base-64@npm:0.1.0": - version: 0.1.0 - resolution: "base-64@npm:0.1.0" - checksum: 5a42938f82372ab5392cbacc85a5a78115cbbd9dbef9f7540fa47d78763a3a8bd7d598475f0d92341f66285afd377509851a9bb5c67bbecb89686e9255d5b3eb - languageName: node - linkType: hard - "base64-arraybuffer-es6@npm:^0.7.0": version: 0.7.0 resolution: "base64-arraybuffer-es6@npm:0.7.0" @@ -6089,6 +6599,15 @@ __metadata: languageName: node linkType: hard +"bplist-creator@npm:0.1.1": + version: 0.1.1 + resolution: "bplist-creator@npm:0.1.1" + dependencies: + stream-buffers: 2.2.x + checksum: b0d40d1d1623f1afdbb575cfc8075d742d2c4f0eb458574be809e3857752d1042a39553b3943d2d7f505dde92bcd43e1d7bdac61c9cd44475d696deb79f897ce + languageName: node + linkType: hard + "bplist-parser@npm:0.3.0": version: 0.3.0 resolution: "bplist-parser@npm:0.3.0" @@ -6098,6 +6617,15 @@ __metadata: languageName: node linkType: hard +"bplist-parser@npm:0.3.2": + version: 0.3.2 + resolution: "bplist-parser@npm:0.3.2" + dependencies: + big-integer: 1.6.x + checksum: fad0f6eb155a9b636b4096a1725ce972a0386490d7d38df7be11a3a5645372446b7c44aacbc6626d24d2c17d8b837765361520ebf2960aeffcaf56765811620e + languageName: node + linkType: hard + "brace-expansion@npm:^1.1.7": version: 1.1.11 resolution: "brace-expansion@npm:1.1.11" @@ -6260,6 +6788,20 @@ __metadata: languageName: node linkType: hard +"browserslist@npm:^4.21.3, browserslist@npm:^4.21.4": + version: 4.21.4 + resolution: "browserslist@npm:4.21.4" + dependencies: + caniuse-lite: ^1.0.30001400 + electron-to-chromium: ^1.4.251 + node-releases: ^2.0.6 + update-browserslist-db: ^1.0.9 + bin: + browserslist: cli.js + checksum: 4af3793704dbb4615bcd29059ab472344dc7961c8680aa6c4bb84f05340e14038d06a5aead58724eae69455b8fade8b8c69f1638016e87e5578969d74c078b79 + languageName: node + linkType: hard + "bs-logger@npm:0.x": version: 0.2.6 resolution: "bs-logger@npm:0.2.6" @@ -6662,6 +7204,13 @@ __metadata: languageName: node linkType: hard +"caniuse-lite@npm:^1.0.30001400": + version: 1.0.30001442 + resolution: "caniuse-lite@npm:1.0.30001442" + checksum: c1bff65bd4f53da2d288e7f55be40706ee0119b983eae5a9dcc884046990476891630aef72d708f7989f8f1964200c44e4c37ea40deecaa2fb4a480df23e6317 + languageName: node + linkType: hard + "capture-exit@npm:^2.0.0": version: 2.0.0 resolution: "capture-exit@npm:2.0.0" @@ -6936,7 +7485,14 @@ __metadata: languageName: node linkType: hard -"cli-spinners@npm:^2.0.0, cli-spinners@npm:^2.5.0": +"cli-spinners@npm:^2.0.0": + version: 2.7.0 + resolution: "cli-spinners@npm:2.7.0" + checksum: a9afaf73f58d1f951fb23742f503631b3cf513f43f4c7acb1b640100eb76bfa16efbcd1994d149ffc6603a6d75dd3d4a516a76f125f90dce437de9b16fd0ee6f + languageName: node + linkType: hard + +"cli-spinners@npm:^2.5.0": version: 2.6.1 resolution: "cli-spinners@npm:2.6.1" checksum: 423409baaa7a58e5104b46ca1745fbfc5888bbd0b0c5a626e052ae1387060839c8efd512fb127e25769b3dc9562db1dc1b5add6e0b93b7ef64f477feb6416a45 @@ -7163,7 +7719,7 @@ __metadata: languageName: node linkType: hard -"color@npm:^3.0.0, color@npm:^3.1.3": +"color@npm:^3.0.0": version: 3.2.1 resolution: "color@npm:3.2.1" dependencies: @@ -7187,7 +7743,7 @@ __metadata: languageName: node linkType: hard -"colors@npm:^1.1.2, colors@npm:^1.3.3": +"colors@npm:^1.3.3": version: 1.4.0 resolution: "colors@npm:1.4.0" checksum: 98aa2c2418ad87dedf25d781be69dc5fc5908e279d9d30c34d8b702e586a0474605b3a189511482b9d5ed0d20c867515d22749537f7bc546256c6014f3ebdcec @@ -7247,6 +7803,13 @@ __metadata: languageName: node linkType: hard +"commander@npm:~2.14.1": + version: 2.14.1 + resolution: "commander@npm:2.14.1" + checksum: 26bd49febeac8efabb7488fb5a4a2480b04bc4c4eef3c50da93eead72959f7a5232d003deda5b9761937205721274e80108f6d1d2b45ae7a8387cfb92031084e + languageName: node + linkType: hard + "commander@npm:~2.19.0": version: 2.19.0 resolution: "commander@npm:2.19.0" @@ -7466,6 +8029,15 @@ __metadata: languageName: node linkType: hard +"core-js-compat@npm:^3.25.1": + version: 3.27.1 + resolution: "core-js-compat@npm:3.27.1" + dependencies: + browserslist: ^4.21.4 + checksum: e857068f470d67c681564eb87aebf068341db32aa0b9941a5126e588945d909fcd51b1959bb589c855c11056e2ccabe49e96d07007d7d91d56b0d9936fe00d50 + languageName: node + linkType: hard + "core-js-pure@npm:^3.20.2": version: 3.21.1 resolution: "core-js-pure@npm:3.21.1" @@ -7760,7 +8332,7 @@ __metadata: languageName: node linkType: hard -"css-select@npm:^2.0.0, css-select@npm:^2.1.0": +"css-select@npm:^2.0.0": version: 2.1.0 resolution: "css-select@npm:2.1.0" dependencies: @@ -7805,7 +8377,7 @@ __metadata: languageName: node linkType: hard -"css-tree@npm:^1.0.0-alpha.39, css-tree@npm:^1.1.2": +"css-tree@npm:^1.1.2": version: 1.1.3 resolution: "css-tree@npm:1.1.3" dependencies: @@ -8427,7 +8999,7 @@ __metadata: languageName: node linkType: hard -"damerau-levenshtein@npm:^1.0.0, damerau-levenshtein@npm:^1.0.4": +"damerau-levenshtein@npm:^1.0.4": version: 1.0.8 resolution: "damerau-levenshtein@npm:1.0.8" checksum: d240b7757544460ae0586a341a53110ab0a61126570ef2d8c731e3eab3f0cb6e488e2609e6a69b46727635de49be20b071688698744417ff1b6c1d7ccd03e0de @@ -8462,9 +9034,9 @@ __metadata: linkType: hard "dayjs@npm:^1.8.15": - version: 1.11.0 - resolution: "dayjs@npm:1.11.0" - checksum: 2d36f6d71345114cdcd89147adf9e05b4f8fe81684e08c8bf1f86b140aa0b86ecc3cae661a9348d96feb7fbefd03e1bc3697303688e95209670abcb36b4ece15 + version: 1.11.7 + resolution: "dayjs@npm:1.11.7" + checksum: 5003a7c1dd9ed51385beb658231c3548700b82d3548c0cfbe549d85f2d08e90e972510282b7506941452c58d32136d6362f009c77ca55381a09c704e9f177ebb languageName: node linkType: hard @@ -9330,6 +9902,13 @@ __metadata: languageName: node linkType: hard +"electron-to-chromium@npm:^1.4.251": + version: 1.4.284 + resolution: "electron-to-chromium@npm:1.4.284" + checksum: be496e9dca6509dbdbb54dc32146fc99f8eb716d28a7ee8ccd3eba0066561df36fc51418d8bd7cf5a5891810bf56c0def3418e74248f51ea4a843d423603d10a + languageName: node + linkType: hard + "electron-to-chromium@npm:^1.4.84": version: 1.4.96 resolution: "electron-to-chromium@npm:1.4.96" @@ -9387,7 +9966,7 @@ __metadata: languageName: node linkType: hard -"emoji-regex@npm:^6.1.0, emoji-regex@npm:^6.5.1": +"emoji-regex@npm:^6.5.1": version: 6.5.1 resolution: "emoji-regex@npm:6.5.1" checksum: b207c92f9389b8c918dd960aa8d2ecab75ddb276f26a25a832b1f4fac2af4fed33dc45363151d091d6ba11d8ee2fffa57253a580b9585cd1404aa08101f3d244 @@ -9822,23 +10401,6 @@ __metadata: languageName: node linkType: hard -"eslint-plugin-jsx-a11y@npm:5.1.1": - version: 5.1.1 - resolution: "eslint-plugin-jsx-a11y@npm:5.1.1" - dependencies: - aria-query: ^0.7.0 - array-includes: ^3.0.3 - ast-types-flow: 0.0.7 - axobject-query: ^0.1.0 - damerau-levenshtein: ^1.0.0 - emoji-regex: ^6.1.0 - jsx-ast-utils: ^1.4.0 - peerDependencies: - eslint: ^2.10.2 || ^3 || ^4 - checksum: adf9dcb7e1c3898df21dc160bbfc8389081c6405580cc9af98ab44282203657b028bd2416d9f67cf4f6aaaac8a5e57908bb7a1bf228264b82f92fd11580ef12a - languageName: node - linkType: hard - "eslint-plugin-jsx-a11y@npm:6.1.2": version: 6.1.2 resolution: "eslint-plugin-jsx-a11y@npm:6.1.2" @@ -9989,7 +10551,7 @@ __metadata: languageName: node linkType: hard -"esprima@npm:^4.0.0, esprima@npm:^4.0.1, esprima@npm:~4.0.0": +"esprima@npm:^4.0.0, esprima@npm:^4.0.1": version: 4.0.1 resolution: "esprima@npm:4.0.1" bin: @@ -10389,7 +10951,7 @@ __metadata: languageName: node linkType: hard -"fast-deep-equal@npm:^3.1.1, fast-deep-equal@npm:^3.1.3": +"fast-deep-equal@npm:^3.1.1": version: 3.1.3 resolution: "fast-deep-equal@npm:3.1.3" checksum: e21a9d8d84f53493b6aa15efc9cfd53dd5b714a1f23f67fb5dc8f574af80df889b3bce25dc081887c6d25457cce704e636395333abad896ccdec03abaf1f3f9d @@ -10633,13 +11195,6 @@ __metadata: languageName: node linkType: hard -"filter-obj@npm:^1.1.0": - version: 1.1.0 - resolution: "filter-obj@npm:1.1.0" - checksum: cf2104a7c45ff48e7f505b78a3991c8f7f30f28bd8106ef582721f321f1c6277f7751aacd5d83026cb079d9d5091082f588d14a72e7c5d720ece79118fa61e10 - languageName: node - linkType: hard - "finalhandler@npm:1.1.2, finalhandler@npm:~1.1.2": version: 1.1.2 resolution: "finalhandler@npm:1.1.2" @@ -10787,20 +11342,6 @@ __metadata: languageName: node linkType: hard -"flow-parser@npm:0.*": - version: 0.174.1 - resolution: "flow-parser@npm:0.174.1" - checksum: b56077cab003bf9389cccf5b35bf27f14f977d831e6063fd35092df51295f74a95e2af3b90024c931b55059ddc9d92c873cd96e15d41c36abc70fa7701f42d7d - languageName: node - linkType: hard - -"flow-parser@npm:^0.121.0": - version: 0.121.0 - resolution: "flow-parser@npm:0.121.0" - checksum: 2d9a9724b903f4c2eae63f8e1442f97c8284516197bebd746cdbba938ff0a17f2dd7a2bc74ca9a987556af0f43d31a793b251ae30660d6b5e914f0c2e8501d2d - languageName: node - linkType: hard - "flush-write-stream@npm:^1.0.0": version: 1.1.1 resolution: "flush-write-stream@npm:1.1.1" @@ -11400,20 +11941,6 @@ __metadata: languageName: node linkType: hard -"glob@npm:7.0.6": - version: 7.0.6 - resolution: "glob@npm:7.0.6" - dependencies: - 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 - checksum: 6ad065f51982f9a76f7052984121c95bca376ea02060b21200ad62b400422b05f0dc331f72da89a73c21a2451cbe9bec16bb17dcf37a516dc51bbbb6efe462a1 - languageName: node - linkType: hard - "glob@npm:^7.0.0, glob@npm:^7.0.3, glob@npm:^7.1.2, glob@npm:^7.1.3, glob@npm:^7.1.4, glob@npm:^7.1.6": version: 7.2.0 resolution: "glob@npm:7.2.0" @@ -11608,14 +12135,14 @@ __metadata: languageName: node linkType: hard -"graceful-fs@npm:^4.1.11, graceful-fs@npm:^4.1.15, graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.1.3, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.1.9, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.3, graceful-fs@npm:^4.2.4, graceful-fs@npm:^4.2.9": +"graceful-fs@npm:^4.1.11, graceful-fs@npm:^4.1.15, graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.3, graceful-fs@npm:^4.2.9": version: 4.2.9 resolution: "graceful-fs@npm:4.2.9" checksum: 68ea4e07ff2c041ada184f9278b830375f8e0b75154e3f080af6b70f66172fabb4108d19b3863a96b53fc068a310b9b6493d86d1291acc5f3861eb4b79d26ad6 languageName: node linkType: hard -"graceful-fs@npm:^4.2.6": +"graceful-fs@npm:^4.1.3, graceful-fs@npm:^4.1.9, graceful-fs@npm:^4.2.4, graceful-fs@npm:^4.2.6": version: 4.2.10 resolution: "graceful-fs@npm:4.2.10" checksum: 3f109d70ae123951905d85032ebeae3c2a5a7a997430df00ea30df0e3a6c60cf6689b109654d6fdacd28810a053348c4d14642da1d075049e6be1ba5216218da @@ -11949,7 +12476,7 @@ __metadata: languageName: node linkType: hard -"hoist-non-react-statics@npm:^3.1.0, hoist-non-react-statics@npm:^3.3.0, hoist-non-react-statics@npm:^3.3.2": +"hoist-non-react-statics@npm:^3.1.0, hoist-non-react-statics@npm:^3.3.0": version: 3.3.2 resolution: "hoist-non-react-statics@npm:3.3.2" dependencies: @@ -12383,13 +12910,6 @@ __metadata: languageName: node linkType: hard -"immediate@npm:~3.0.5": - version: 3.0.6 - resolution: "immediate@npm:3.0.6" - checksum: f9b3486477555997657f70318cc8d3416159f208bec4cca3ff3442fd266bc23f50f0c9bd8547e1371a6b5e82b821ec9a7044a4f7b944798b25aa3cc6d5e63e62 - languageName: node - linkType: hard - "immer@npm:^9.0.7": version: 9.0.15 resolution: "immer@npm:9.0.15" @@ -14163,15 +14683,15 @@ __metadata: linkType: hard "joi@npm:^17.2.1": - version: 17.6.0 - resolution: "joi@npm:17.6.0" + version: 17.7.0 + resolution: "joi@npm:17.7.0" dependencies: "@hapi/hoek": ^9.0.0 "@hapi/topo": ^5.0.0 "@sideway/address": ^4.1.3 "@sideway/formula": ^3.0.0 "@sideway/pinpoint": ^2.0.0 - checksum: eaf62f6c02f2edb1042f1ab04fc23a5918a2cb8f54bec84c6e1033624d8a462c10ae9518af55a3ba84f1793960450d58094eda308e7ef93c17edd4e3c8ef31d5 + checksum: 767a847936cb66787256c4351ff86e1b9e8d7383cbe81a5c827064032c2a8e8b6e938baef5ad32c4035fe4c56e537bd90aa2a952be8a0658601c920cdeb4fb3c languageName: node linkType: hard @@ -14235,13 +14755,6 @@ __metadata: languageName: node linkType: hard -"jsc-android@npm:^241213.1.0": - version: 241213.2.0 - resolution: "jsc-android@npm:241213.2.0" - checksum: 2702ffb5ce39e636ab1add039abf516f483485b9d3e994cbdc3ca9838b9914becfd6c7507d1dfbe85fd597690afeb10fb45df8b39322f25bd018cab87f03a0e8 - languageName: node - linkType: hard - "jsc-android@npm:^250230.2.1": version: 250230.2.1 resolution: "jsc-android@npm:250230.2.1" @@ -14249,37 +14762,6 @@ __metadata: languageName: node linkType: hard -"jscodeshift@npm:^0.11.0": - version: 0.11.0 - resolution: "jscodeshift@npm:0.11.0" - dependencies: - "@babel/core": ^7.1.6 - "@babel/parser": ^7.1.6 - "@babel/plugin-proposal-class-properties": ^7.1.0 - "@babel/plugin-proposal-nullish-coalescing-operator": ^7.1.0 - "@babel/plugin-proposal-optional-chaining": ^7.1.0 - "@babel/plugin-transform-modules-commonjs": ^7.1.0 - "@babel/preset-flow": ^7.0.0 - "@babel/preset-typescript": ^7.1.0 - "@babel/register": ^7.0.0 - babel-core: ^7.0.0-bridge.0 - colors: ^1.1.2 - flow-parser: 0.* - graceful-fs: ^4.2.4 - micromatch: ^3.1.10 - neo-async: ^2.5.0 - node-dir: ^0.1.17 - recast: ^0.20.3 - temp: ^0.8.1 - write-file-atomic: ^2.3.0 - peerDependencies: - "@babel/preset-env": ^7.1.6 - bin: - jscodeshift: bin/jscodeshift.js - checksum: 647dc36a50d417b14659f81109685f9ea3924daf604d50d7d2b522c4a658d6abff921dedb4cf74a6d2173c1c48195f9e92cca3df1cb535c6d5f67455d35a19ce - languageName: node - linkType: hard - "jsdom@npm:>=11.0.0, jsdom@npm:^19.0.0": version: 19.0.0 resolution: "jsdom@npm:19.0.0" @@ -14498,13 +14980,6 @@ __metadata: languageName: node linkType: hard -"jsx-ast-utils@npm:^1.4.0": - version: 1.4.1 - resolution: "jsx-ast-utils@npm:1.4.1" - checksum: dc4874c45f7fcd6dad9bd9268f0e5bf9fec85884eacc09481115b2b992758eafece4b407c008fd653dd267aca0e274a09182193787337efdc5bd59aa4fcdbc6b - languageName: node - linkType: hard - "jsx-ast-utils@npm:^2.0.1": version: 2.4.1 resolution: "jsx-ast-utils@npm:2.4.1" @@ -14682,15 +15157,6 @@ __metadata: languageName: node linkType: hard -"lie@npm:3.1.1": - version: 3.1.1 - resolution: "lie@npm:3.1.1" - dependencies: - immediate: ~3.0.5 - checksum: 6da9f2121d2dbd15f1eca44c0c7e211e66a99c7b326ec8312645f3648935bc3a658cf0e9fa7b5f10144d9e2641500b4f55bd32754607c3de945b5f443e50ddd1 - languageName: node - linkType: hard - "lines-and-columns@npm:^1.1.6": version: 1.2.4 resolution: "lines-and-columns@npm:1.2.4" @@ -14775,15 +15241,6 @@ __metadata: languageName: node linkType: hard -"localforage@npm:^1.8.1": - version: 1.10.0 - resolution: "localforage@npm:1.10.0" - dependencies: - lie: 3.1.1 - checksum: f2978b434dafff9bcb0d9498de57d97eba165402419939c944412e179cab1854782830b5ec196212560b22712d1dd03918939f59cf1d4fc1d756fca7950086cf - languageName: node - linkType: hard - "locate-path@npm:^2.0.0": version: 2.0.0 resolution: "locate-path@npm:2.0.0" @@ -14822,13 +15279,6 @@ __metadata: languageName: node linkType: hard -"lodash-es@npm:^4.2.1": - version: 4.17.21 - resolution: "lodash-es@npm:4.17.21" - checksum: 05cbffad6e2adbb331a4e16fbd826e7faee403a1a04873b82b42c0f22090f280839f85b95393f487c1303c8a3d2a010048bf06151a6cbe03eee4d388fb0a12d2 - languageName: node - linkType: hard - "lodash._reinterpolate@npm:^3.0.0": version: 3.0.0 resolution: "lodash._reinterpolate@npm:3.0.0" @@ -14946,20 +15396,13 @@ __metadata: languageName: node linkType: hard -"lodash@npm:>=3.5 <5, lodash@npm:^4.17.10, lodash@npm:^4.17.11, lodash@npm:^4.17.12, lodash@npm:^4.17.14, lodash@npm:^4.17.15, lodash@npm:^4.17.20, lodash@npm:^4.17.21, lodash@npm:^4.17.4, lodash@npm:^4.17.5, lodash@npm:^4.2.1, lodash@npm:^4.7.0": +"lodash@npm:>=3.5 <5, lodash@npm:^4.17.10, lodash@npm:^4.17.11, lodash@npm:^4.17.12, lodash@npm:^4.17.14, lodash@npm:^4.17.15, lodash@npm:^4.17.20, lodash@npm:^4.17.21, lodash@npm:^4.17.4, lodash@npm:^4.17.5, lodash@npm:^4.7.0": version: 4.17.21 resolution: "lodash@npm:4.17.21" checksum: eb835a2e51d381e561e508ce932ea50a8e5a68f4ebdd771ea240d3048244a8d13658acbd502cd4829768c56f2e16bdd4340b9ea141297d472517b83868e677f7 languageName: node linkType: hard -"lodash@npm:^3.10.0": - version: 3.10.1 - resolution: "lodash@npm:3.10.1" - checksum: 53065d3712a2fd90b55690c5af19f9625a5bbb2b7876ff76d782ee1dc22618fd4dff191d44a8e165a17b5b81a851c3e884d3b5b25e314422fbe24bb299542685 - languageName: node - linkType: hard - "log-symbols@npm:^2.2.0": version: 2.2.0 resolution: "log-symbols@npm:2.2.0" @@ -15114,6 +15557,8 @@ __metadata: react-element-query: ^3.0.2 react-merge-refs: ^1.1.0 react-modal: 3.4.4 + react-native: 0.65.1 + react-native-gesture-handler: 1.10.3 react-native-web: ^0.11.7 react-spring: ^8.0.27 react-test-renderer: ^16.3.1 @@ -15578,7 +16023,7 @@ __metadata: languageName: node linkType: hard -"metro-react-native-babel-preset@npm:0.66.2, metro-react-native-babel-preset@npm:^0.66.2": +"metro-react-native-babel-preset@npm:0.66.2": version: 0.66.2 resolution: "metro-react-native-babel-preset@npm:0.66.2" dependencies: @@ -15952,7 +16397,7 @@ __metadata: languageName: node linkType: hard -"minimatch@npm:^3.0.2, minimatch@npm:^3.0.4, minimatch@npm:^3.1.2": +"minimatch@npm:^3.0.4, minimatch@npm:^3.1.2": version: 3.1.2 resolution: "minimatch@npm:3.1.2" dependencies: @@ -15970,13 +16415,20 @@ __metadata: languageName: node linkType: hard -"minimist@npm:^1.1.0, minimist@npm:^1.1.1, minimist@npm:^1.2.0, minimist@npm:^1.2.3, minimist@npm:^1.2.6": +"minimist@npm:^1.1.0, minimist@npm:^1.2.0, minimist@npm:^1.2.3, minimist@npm:^1.2.6": version: 1.2.6 resolution: "minimist@npm:1.2.6" checksum: d15428cd1e11eb14e1233bcfb88ae07ed7a147de251441d61158619dfb32c4d7e9061d09cab4825fdee18ecd6fce323228c8c47b5ba7cd20af378ca4048fb3fb languageName: node linkType: hard +"minimist@npm:^1.1.1": + version: 1.2.7 + resolution: "minimist@npm:1.2.7" + checksum: 7346574a1038ca23c32e02252f603801f09384dd1d78b69a943a4e8c2c28730b80e96193882d3d3b22a063445f460e48316b29b8a25addca2d7e5e8f75478bec + languageName: node + linkType: hard + "minipass-collect@npm:^1.0.2": version: 1.0.2 resolution: "minipass-collect@npm:1.0.2" @@ -16152,7 +16604,7 @@ __metadata: languageName: node linkType: hard -"mkdirp@npm:^0.5.0, mkdirp@npm:^0.5.1, mkdirp@npm:^0.5.3, mkdirp@npm:^0.5.4, mkdirp@npm:^0.5.5, mkdirp@npm:~0.5.0, mkdirp@npm:~0.5.1": +"mkdirp@npm:^0.5.1, mkdirp@npm:^0.5.3, mkdirp@npm:^0.5.4, mkdirp@npm:^0.5.5, mkdirp@npm:~0.5.0, mkdirp@npm:~0.5.1": version: 0.5.6 resolution: "mkdirp@npm:0.5.6" dependencies: @@ -16172,47 +16624,6 @@ __metadata: languageName: node linkType: hard -"mobile@workspace:packages/mobile": - version: 0.0.0-use.local - resolution: "mobile@workspace:packages/mobile" - dependencies: - "@babel/core": ~7.12.9 - "@babel/runtime": ~7.12.18 - "@expo/react-native-action-sheet": ^3.6.0 - "@jlongster/sentry-metrics-actual": ^0.0.10 - "@react-native-community/masked-view": 0.1.11 - "@react-navigation/bottom-tabs": ^6.0.5 - "@react-navigation/native": ^6.0.2 - "@react-navigation/native-stack": ^6.1.0 - "@reactions/component": ^2.0.2 - "@sentry/react-native": 3.0.2 - jest: ^28.1.0 - jsc-android: ^241213.1.0 - loot-core: "*" - memoize-one: ^4.0.0 - metro-react-native-babel-preset: ^0.66.2 - nodejs-mobile-gyp: ^0.3.1 - nodejs-mobile-react-native: 0.6.3 - patch-package: ^6.1.2 - react: 16.9.0 - react-native: 0.65.1 - react-native-codegen: ^0.0.7 - react-native-gesture-handler: 1.10.3 - react-native-purchases: ^4.3.1 - react-native-reanimated: ^2.2.0 - react-native-safe-area-context: ^3.3.2 - react-native-screens: ^3.7.2 - react-native-status-bar-height: ^2.4.0 - react-native-svg: 10.1.0 - react-native-version-number: ^0.3.6 - react-redux: 5.1.1 - redux: ^3.7.2 - redux-thunk: ^2.2.0 - rn-fetch-blob: ^0.11.2 - rn-snoopy: ^2.0.2 - languageName: unknown - linkType: soft - "mock-require@npm:^3.0.2": version: 3.0.3 resolution: "mock-require@npm:3.0.3" @@ -16326,15 +16737,6 @@ __metadata: languageName: node linkType: hard -"nanoid@npm:^3.1.23": - version: 3.3.1 - resolution: "nanoid@npm:3.3.1" - bin: - nanoid: bin/nanoid.cjs - checksum: 4ef0969e1bbe866fc223eb32276cbccb0961900bfe79104fa5abe34361979dead8d0e061410a5c03bc3d47455685adf32c09d6f27790f4a6898fb51f7df7ec86 - languageName: node - linkType: hard - "nanomatch@npm:^1.2.9": version: 1.2.13 resolution: "nanomatch@npm:1.2.13" @@ -16377,15 +16779,6 @@ __metadata: languageName: node linkType: hard -"ncp@npm:^2.0.0": - version: 2.0.0 - resolution: "ncp@npm:2.0.0" - bin: - ncp: ./bin/ncp - checksum: ea9b19221da1d1c5529bdb9f8e85c9d191d156bcaae408cce5e415b7fbfd8744c288e792bd7faf1fe3b70fd44c74e22f0d43c39b209bc7ac1fb8016f70793a16 - languageName: node - linkType: hard - "needle@npm:^2.2.1": version: 2.9.1 resolution: "needle@npm:2.9.1" @@ -16470,15 +16863,6 @@ __metadata: languageName: node linkType: hard -"node-dir@npm:^0.1.17": - version: 0.1.17 - resolution: "node-dir@npm:0.1.17" - dependencies: - minimatch: ^3.0.2 - checksum: 29de9560e52cdac8d3f794d38d782f6799e13d4d11aaf96d3da8c28458e1c5e33bb5f8edfb42dc34172ec5516c50c5b8850c9e1526542616757a969267263328 - languageName: node - linkType: hard - "node-fetch@npm:1.6.3": version: 1.6.3 resolution: "node-fetch@npm:1.6.3" @@ -16663,52 +17047,6 @@ __metadata: languageName: node linkType: hard -"nodejs-mobile-gyp@npm:^0.3.1": - version: 0.3.1 - resolution: "nodejs-mobile-gyp@npm:0.3.1" - dependencies: - glob: ^7.0.3 - graceful-fs: ^4.1.2 - mkdirp: ^0.5.0 - nopt: 2 || 3 - npmlog: 0 || 1 || 2 || 3 || 4 - osenv: 0 - request: ^2.87.0 - rimraf: 2 - semver: ~5.3.0 - tar: ^4.4.8 - which: 1 - bin: - nodejs-mobile-gyp: ./bin/node-gyp.js - checksum: 616f2d5287712a08301e17fc97a3d43ea73e77f212b843eb1d4f78c97580b31f8e664e2aa56e330ecb69f31da3abd0e99b46f0d55ee36d329b3c88f118721523 - languageName: node - linkType: hard - -"nodejs-mobile-react-native@npm:0.6.3": - version: 0.6.3 - resolution: "nodejs-mobile-react-native@npm:0.6.3" - dependencies: - mkdirp: ^0.5.1 - ncp: ^2.0.0 - nodejs-mobile-gyp: ^0.3.1 - xcode: ^2.0.0 - peerDependencies: - react-native: ">=0.60.0" - checksum: 8965d5faff470f351041bb7e8ed02101a854e465ac822450f09c8c6c8ae4253623fc50c968d99c74287a3e6741ffaa02743b1d22680ffd08a5f179e3a8dcef51 - languageName: node - linkType: hard - -"nopt@npm:2 || 3": - version: 3.0.6 - resolution: "nopt@npm:3.0.6" - dependencies: - abbrev: 1 - bin: - nopt: ./bin/nopt.js - checksum: 7f8579029a0d7cb3341c6b1610b31e363f708b7aaaaf3580e3ec5ae8528d1f3a79d350d8bfa331776e6c6703a5a148b72edd9b9b4c1dd55874d8e70e963d1e20 - languageName: node - linkType: hard - "nopt@npm:^4.0.1": version: 4.0.3 resolution: "nopt@npm:4.0.3" @@ -16883,7 +17221,7 @@ __metadata: languageName: node linkType: hard -"npmlog@npm:0 || 1 || 2 || 3 || 4, npmlog@npm:^4.0.1, npmlog@npm:^4.0.2, npmlog@npm:^4.1.2": +"npmlog@npm:^4.0.1, npmlog@npm:^4.0.2, npmlog@npm:^4.1.2": version: 4.1.2 resolution: "npmlog@npm:4.1.2" dependencies: @@ -17318,7 +17656,7 @@ __metadata: languageName: node linkType: hard -"osenv@npm:0, osenv@npm:^0.1.4": +"osenv@npm:^0.1.4": version: 0.1.5 resolution: "osenv@npm:0.1.5" dependencies: @@ -17878,7 +18216,17 @@ __metadata: languageName: node linkType: hard -"plist@npm:^3.0.2, plist@npm:^3.0.4": +"plist@npm:^3.0.2, plist@npm:^3.0.5": + version: 3.0.6 + resolution: "plist@npm:3.0.6" + dependencies: + base64-js: ^1.5.1 + xmlbuilder: ^15.1.1 + checksum: e21390fab8a3c388f8f51b76c0aa187242a40537119ce865d8637630e7d7df79b21f841ec6a4668e7c68d409a6f584d696619099a6125d28011561639c0823b8 + languageName: node + linkType: hard + +"plist@npm:^3.0.4": version: 3.0.5 resolution: "plist@npm:3.0.5" dependencies: @@ -18957,11 +19305,11 @@ __metadata: linkType: hard "promise@npm:^8.0.3": - version: 8.1.0 - resolution: "promise@npm:8.1.0" + version: 8.3.0 + resolution: "promise@npm:8.3.0" dependencies: asap: ~2.0.6 - checksum: 89b71a56154ed7d66a73236d8e8351a9c59adddba3929ecc845f75421ff37fc08ea0c67ad76cd5c0b0d81812c7d07a32bed27e7df5fcc960c6d68b0c1cd771f7 + checksum: a69f0ddbddf78ffc529cffee7ad950d307347615970564b17988ce43fbe767af5c738a9439660b24a9a8cbea106c0dcbb6c2b20e23b7e96a8e89e5c2679e94d5 languageName: node linkType: hard @@ -18986,7 +19334,7 @@ __metadata: languageName: node linkType: hard -"prop-types@npm:^15.5.10, prop-types@npm:^15.5.8, prop-types@npm:^15.6.0, prop-types@npm:^15.6.1, prop-types@npm:^15.6.2, prop-types@npm:^15.7.2": +"prop-types@npm:^15.5.10, prop-types@npm:^15.5.8, prop-types@npm:^15.6.0, prop-types@npm:^15.6.2, prop-types@npm:^15.7.2": version: 15.8.1 resolution: "prop-types@npm:15.8.1" dependencies: @@ -19152,18 +19500,6 @@ __metadata: languageName: node linkType: hard -"query-string@npm:^7.0.0": - version: 7.1.1 - resolution: "query-string@npm:7.1.1" - dependencies: - decode-uri-component: ^0.2.0 - filter-obj: ^1.1.0 - split-on-first: ^1.0.0 - strict-uri-encode: ^2.0.0 - checksum: b227d1f588ae93f9f0ad078c6b811295fa151dc5a160a03bb2bac5fa0e6919cb1daa570aad1d288e77c8e89fde5362ba505b1014e6e793da9b1e885b59a690a6 - languageName: node - linkType: hard - "querystring-es3@npm:^0.2.0": version: 0.2.1 resolution: "querystring-es3@npm:0.2.1" @@ -19375,12 +19711,12 @@ __metadata: linkType: hard "react-devtools-core@npm:^4.6.0": - version: 4.24.2 - resolution: "react-devtools-core@npm:4.24.2" + version: 4.27.1 + resolution: "react-devtools-core@npm:4.27.1" dependencies: shell-quote: ^1.6.1 ws: ^7 - checksum: 5f6fb369e5a6c76696aae0949eada6bc13a8a814131ca8df5b71b4431f8d016553ad7a7c1db7ef3fd5686593451841d64ad6646786e3f9695577de774e723291 + checksum: 3c0b89942f5a8525fa16001470b4c9343974673643d2f642c93c631f823ee232418f9e3e6fe2cada4553c796cac909e77b0e51088daf6f7f9e0229046f829e51 languageName: node linkType: hard @@ -19454,16 +19790,7 @@ __metadata: languageName: node linkType: hard -"react-freeze@npm:^1.0.0": - version: 1.0.0 - resolution: "react-freeze@npm:1.0.0" - peerDependencies: - react: ^17.0.0 - checksum: c746b9d369c77296c277626cf7dd5ff24d49657e2f16412d14f845d1b428588184c0009374119f7dec24be37ab8c134d15aa4ecd57360c874880af508dcc577b - languageName: node - linkType: hard - -"react-is@npm:^16.12.0, react-is@npm:^16.13.0, react-is@npm:^16.13.1, react-is@npm:^16.6.0, react-is@npm:^16.7.0, react-is@npm:^16.8.4, react-is@npm:^16.8.6, react-is@npm:^16.9.0": +"react-is@npm:^16.12.0, react-is@npm:^16.13.1, react-is@npm:^16.6.0, react-is@npm:^16.7.0, react-is@npm:^16.8.4, react-is@npm:^16.8.6, react-is@npm:^16.9.0": version: 16.13.1 resolution: "react-is@npm:16.13.1" checksum: f7a19ac3496de32ca9ae12aa030f00f14a3d45374f1ceca0af707c831b2a6098ef0d6bdae51bd437b0a306d7f01d4677fcc8de7c0d331eb47ad0f46130e53c5f @@ -19513,17 +19840,6 @@ __metadata: languageName: node linkType: hard -"react-native-codegen@npm:^0.0.7": - version: 0.0.7 - resolution: "react-native-codegen@npm:0.0.7" - dependencies: - flow-parser: ^0.121.0 - jscodeshift: ^0.11.0 - nullthrows: ^1.1.1 - checksum: d550d6e985a0d564f0ac470b19c9a2e4e78ffc0f5769ba46992a4d10130928093e9c2ada7eda0ec8bd976db4ba4c21ef410280e979226f11844aa0215335cde5 - languageName: node - linkType: hard - "react-native-gesture-handler@npm:1.10.3": version: 1.10.3 resolution: "react-native-gesture-handler@npm:1.10.3" @@ -19537,86 +19853,6 @@ __metadata: languageName: node linkType: hard -"react-native-purchases@npm:^4.3.1": - version: 4.5.3 - resolution: "react-native-purchases@npm:4.5.3" - peerDependencies: - react: ">= 16.6.3" - react-native: ">= 0.58.2" - checksum: b6b2a57968eea020a2afacd80e5afcd20f1ea2dc4b35edcdbdac7df1f128da2dc477cefd0549ffed5822550fda5fa04ad2be7aac0904b2a5a703da110d996bd1 - languageName: node - linkType: hard - -"react-native-reanimated@npm:^2.2.0": - version: 2.5.0 - resolution: "react-native-reanimated@npm:2.5.0" - dependencies: - "@babel/plugin-transform-object-assign": ^7.16.7 - "@types/invariant": ^2.2.35 - invariant: ^2.2.4 - lodash.isequal: ^4.5.0 - react-native-screens: ^3.11.1 - setimmediate: ^1.0.5 - string-hash-64: ^1.0.3 - peerDependencies: - "@babel/preset-typescript": "*" - react: "*" - react-native: "*" - react-native-gesture-handler: "*" - checksum: 39251ce1cd03f2398372a6e5c2e67d0fef7e3e04964ccac33419e34db687e88828751a602a020eaef34fd569eabba34bda994b4f8e2fc3f500f96063db941495 - languageName: node - linkType: hard - -"react-native-safe-area-context@npm:^3.3.2": - version: 3.4.1 - resolution: "react-native-safe-area-context@npm:3.4.1" - peerDependencies: - react: "*" - react-native: "*" - checksum: 86a0614c5bef60ff8e056cff3fd4200cc6d181653cb6c26992ab62061792474f4872d1f5d394234ec6da75ce8b2960c930f4d6a1b6af3b6579cf1c30b6d64bb5 - languageName: node - linkType: hard - -"react-native-screens@npm:^3.11.1, react-native-screens@npm:^3.7.2": - version: 3.13.1 - resolution: "react-native-screens@npm:3.13.1" - dependencies: - react-freeze: ^1.0.0 - warn-once: ^0.1.0 - peerDependencies: - react: "*" - react-native: "*" - checksum: aaab7071f65ea7b3be197417e073d0cad06c80fcb2a956faaeb020322c8002963f4d14ba96550484e96d156a48a29989c1485f47ec4bcd98c9701fe8de5c7cc1 - languageName: node - linkType: hard - -"react-native-status-bar-height@npm:^2.4.0": - version: 2.6.0 - resolution: "react-native-status-bar-height@npm:2.6.0" - checksum: ee9e95ce30d346e113ecb68d6db66a5a2653263b03605428558e11956840bcc7498282c450a8bcc1c03ced9372ede6c4a5c51ab133c563492acedf328e8feecb - languageName: node - linkType: hard - -"react-native-svg@npm:10.1.0": - version: 10.1.0 - resolution: "react-native-svg@npm:10.1.0" - dependencies: - css-select: ^2.1.0 - css-tree: ^1.0.0-alpha.39 - peerDependencies: - react: "*" - react-native: ">=0.50.0" - checksum: ba9a38c1bdc4cb7550214f8bbec7afa0e10de0ca79ac9e7cfd00197b9108128768cc9d1c22df8b551a84c9edff0b662e039ce3bf4ca679f110d9143535d74b08 - languageName: node - linkType: hard - -"react-native-version-number@npm:^0.3.6": - version: 0.3.6 - resolution: "react-native-version-number@npm:0.3.6" - checksum: 87d626204970dc8f58e718f507f9111bad5a05cfba7c4a0320ef52961f3d73f708d8b4370f744a5a5cbf83b97e0481a4de24e650090df85c39550a17b085f2e6 - languageName: node - linkType: hard - "react-native-web@npm:^0.11.7": version: 0.11.7 resolution: "react-native-web@npm:0.11.7" @@ -19680,24 +19916,6 @@ __metadata: languageName: node linkType: hard -"react-redux@npm:5.1.1": - version: 5.1.1 - resolution: "react-redux@npm:5.1.1" - dependencies: - "@babel/runtime": ^7.1.2 - hoist-non-react-statics: ^3.1.0 - invariant: ^2.2.4 - loose-envify: ^1.1.0 - prop-types: ^15.6.1 - react-is: ^16.6.0 - react-lifecycles-compat: ^3.0.0 - peerDependencies: - react: ^0.14.0 || ^15.0.0-0 || ^16.0.0-0 - redux: ^2.0.0 || ^3.0.0 || ^4.0.0-0 - checksum: 6c79892e8dd40d33af056fa6064184287f7237891c6a858708b4decc9e1a456bab84b4f0a9ae14cb7b0bf520bbed044adae952c0d688d9a1c33072d3a058ad3c - languageName: node - linkType: hard - "react-redux@npm:7.2.1": version: 7.2.1 resolution: "react-redux@npm:7.2.1" @@ -19719,6 +19937,13 @@ __metadata: languageName: node linkType: hard +"react-refresh@npm:^0.14.0": + version: 0.14.0 + resolution: "react-refresh@npm:0.14.0" + checksum: dc69fa8c993df512f42dd0f1b604978ae89bd747c0ed5ec595c0cc50d535fb2696619ccd98ae28775cc01d0a7c146a532f0f7fb81dc22e1977c242a4912312f4 + languageName: node + linkType: hard + "react-refresh@npm:^0.4.0": version: 0.4.3 resolution: "react-refresh@npm:0.4.3" @@ -19852,17 +20077,6 @@ __metadata: languageName: node linkType: hard -"react@npm:16.9.0": - version: 16.9.0 - resolution: "react@npm:16.9.0" - dependencies: - loose-envify: ^1.1.0 - object-assign: ^4.1.1 - prop-types: ^15.6.2 - checksum: 47346b93777f06793d0585ec9ec9546016600a19987ce0d8613cd937fc642f479b12865043ba046b04d23bc9afd511fd35683382f158bd761d8ca84638f187a6 - languageName: node - linkType: hard - "read-config-file@npm:6.0.0": version: 6.0.0 resolution: "read-config-file@npm:6.0.0" @@ -20006,18 +20220,6 @@ __metadata: languageName: node linkType: hard -"recast@npm:^0.20.3": - version: 0.20.5 - resolution: "recast@npm:0.20.5" - dependencies: - ast-types: 0.14.2 - esprima: ~4.0.0 - source-map: ~0.6.1 - tslib: ^2.0.1 - checksum: 14c35115cd9965950724cb2968f069a247fa79ce890643ab6dc3795c705b363f7b92a45238e9f765387c306763be9955f72047bb9d15b5d60b0a55f9e7912d5a - languageName: node - linkType: hard - "rechoir@npm:^0.6.2": version: 0.6.2 resolution: "rechoir@npm:0.6.2" @@ -20036,7 +20238,7 @@ __metadata: languageName: node linkType: hard -"redux-thunk@npm:^2.2.0, redux-thunk@npm:^2.3.0": +"redux-thunk@npm:^2.3.0": version: 2.4.1 resolution: "redux-thunk@npm:2.4.1" peerDependencies: @@ -20045,18 +20247,6 @@ __metadata: languageName: node linkType: hard -"redux@npm:^3.7.2": - version: 3.7.2 - resolution: "redux@npm:3.7.2" - dependencies: - lodash: ^4.2.1 - lodash-es: ^4.2.1 - loose-envify: ^1.1.0 - symbol-observable: ^1.0.3 - checksum: c349b77e68d009bc530d3cb6252a6a3e43e20a6e52f9483a048b24cd2f266d9bfa6f0bbd4769d40fe36795e2f7a7a884c3ddc92c13e82efd3328890f94821091 - languageName: node - linkType: hard - "redux@npm:^4.0.4, redux@npm:^4.0.5": version: 4.1.2 resolution: "redux@npm:4.1.2" @@ -20075,6 +20265,15 @@ __metadata: languageName: node linkType: hard +"regenerate-unicode-properties@npm:^10.1.0": + version: 10.1.0 + resolution: "regenerate-unicode-properties@npm:10.1.0" + dependencies: + regenerate: ^1.4.2 + checksum: b1a8929588433ab8b9dc1a34cf3665b3b472f79f2af6ceae00d905fc496b332b9af09c6718fb28c730918f19a00dc1d7310adbaa9b72a2ec7ad2f435da8ace17 + languageName: node + linkType: hard + "regenerate@npm:^1.4.2": version: 1.4.2 resolution: "regenerate@npm:1.4.2" @@ -20089,7 +20288,14 @@ __metadata: languageName: node linkType: hard -"regenerator-runtime@npm:^0.13.2, regenerator-runtime@npm:^0.13.4, regenerator-runtime@npm:^0.13.7": +"regenerator-runtime@npm:^0.13.2": + version: 0.13.11 + resolution: "regenerator-runtime@npm:0.13.11" + checksum: 27481628d22a1c4e3ff551096a683b424242a216fee44685467307f14d58020af1e19660bf2e26064de946bad7eff28950eae9f8209d55723e2d9351e632bbb4 + languageName: node + linkType: hard + +"regenerator-runtime@npm:^0.13.4, regenerator-runtime@npm:^0.13.7": version: 0.13.9 resolution: "regenerator-runtime@npm:0.13.9" checksum: 65ed455fe5afd799e2897baf691ca21c2772e1a969d19bb0c4695757c2d96249eb74ee3553ea34a91062b2a676beedf630b4c1551cc6299afb937be1426ec55e @@ -20105,6 +20311,15 @@ __metadata: languageName: node linkType: hard +"regenerator-transform@npm:^0.15.1": + version: 0.15.1 + resolution: "regenerator-transform@npm:0.15.1" + dependencies: + "@babel/runtime": ^7.8.4 + checksum: 2d15bdeadbbfb1d12c93f5775493d85874dbe1d405bec323da5c61ec6e701bc9eea36167483e1a5e752de9b2df59ab9a2dfff6bf3784f2b28af2279a673d29a4 + languageName: node + linkType: hard + "regex-not@npm:^1.0.0, regex-not@npm:^1.0.2": version: 1.0.2 resolution: "regex-not@npm:1.0.2" @@ -20157,6 +20372,20 @@ __metadata: languageName: node linkType: hard +"regexpu-core@npm:^5.2.1": + version: 5.2.2 + resolution: "regexpu-core@npm:5.2.2" + dependencies: + regenerate: ^1.4.2 + regenerate-unicode-properties: ^10.1.0 + regjsgen: ^0.7.1 + regjsparser: ^0.9.1 + unicode-match-property-ecmascript: ^2.0.0 + unicode-match-property-value-ecmascript: ^2.1.0 + checksum: 87c56815e20d213848d38f6b047ba52f0d632f36e791b777f59327e8d350c0743b27cc25feab64c0eadc9fe9959dde6b1261af71108a9371b72c8c26beda05ef + languageName: node + linkType: hard + "registry-auth-token@npm:^4.0.0": version: 4.2.1 resolution: "registry-auth-token@npm:4.2.1" @@ -20182,6 +20411,13 @@ __metadata: languageName: node linkType: hard +"regjsgen@npm:^0.7.1": + version: 0.7.1 + resolution: "regjsgen@npm:0.7.1" + checksum: 7cac399921c58db8e16454869283ff66871531180218064fa938ac05c11c2976792a00706c3c78bbc625e1d793ca373065ea90564e06189a751a7b4ae33acadc + languageName: node + linkType: hard + "regjsparser@npm:^0.8.2": version: 0.8.4 resolution: "regjsparser@npm:0.8.4" @@ -20193,6 +20429,17 @@ __metadata: languageName: node linkType: hard +"regjsparser@npm:^0.9.1": + version: 0.9.1 + resolution: "regjsparser@npm:0.9.1" + dependencies: + jsesc: ~0.5.0 + bin: + regjsparser: bin/parser + checksum: 5e1b76afe8f1d03c3beaf9e0d935dd467589c3625f6d65fb8ffa14f224d783a0fed4bf49c2c1b8211043ef92b6117313419edf055a098ed8342e340586741afc + languageName: node + linkType: hard + "relateurl@npm:0.2.x": version: 0.2.7 resolution: "relateurl@npm:0.2.7" @@ -20234,7 +20481,7 @@ __metadata: languageName: node linkType: hard -"request@npm:^2.45.0, request@npm:^2.87.0, request@npm:^2.88.2": +"request@npm:^2.45.0, request@npm:^2.88.2": version: 2.88.2 resolution: "request@npm:2.88.2" dependencies: @@ -20527,7 +20774,7 @@ __metadata: languageName: node linkType: hard -"rimraf@npm:2, rimraf@npm:^2.5.4, rimraf@npm:^2.6.1, rimraf@npm:^2.6.2, rimraf@npm:^2.6.3, rimraf@npm:^2.7.1": +"rimraf@npm:^2.5.4, rimraf@npm:^2.6.1, rimraf@npm:^2.6.2, rimraf@npm:^2.6.3, rimraf@npm:^2.7.1": version: 2.7.1 resolution: "rimraf@npm:2.7.1" dependencies: @@ -20579,27 +20826,6 @@ __metadata: languageName: node linkType: hard -"rn-fetch-blob@npm:^0.11.2": - version: 0.11.2 - resolution: "rn-fetch-blob@npm:0.11.2" - dependencies: - base-64: 0.1.0 - glob: 7.0.6 - checksum: 9423fe95a2acb537867ef143cea4e2812ba2235fb48e8bed2a27942c061e329d2c5f4437ae3dd545dc5a135759848702287db582f4755baaf74fd7b8b7197650 - languageName: node - linkType: hard - -"rn-snoopy@npm:^2.0.2": - version: 2.0.2 - resolution: "rn-snoopy@npm:2.0.2" - dependencies: - eslint-plugin-jsx-a11y: 5.1.1 - lodash: ^3.10.0 - rxjs: 5.5.2 - checksum: b11dfa12f363aa84ccb40eca744fd555ecc4dfe059469b9340c309e0ac65ec12bc01633a90564e415c66776987810f3ee3cfef9729b073844921f26578468206 - languageName: node - linkType: hard - "roarr@npm:^2.15.3": version: 2.15.4 resolution: "roarr@npm:2.15.4" @@ -20662,15 +20888,6 @@ __metadata: languageName: node linkType: hard -"rxjs@npm:5.5.2": - version: 5.5.2 - resolution: "rxjs@npm:5.5.2" - dependencies: - symbol-observable: ^1.0.1 - checksum: eedf45c385d210f4f12d2ccdc2530004a875e89f7c97fbd858da51070e69ddc3df46eb600e165af68872c42c927ea64130fb5df072c811471616e04488bb7053 - languageName: node - linkType: hard - "rxjs@npm:^6.4.0": version: 6.6.7 resolution: "rxjs@npm:6.6.7" @@ -20754,7 +20971,7 @@ __metadata: languageName: node linkType: hard -"sax@npm:^1.2.1, sax@npm:^1.2.4, sax@npm:~1.2.4": +"sax@npm:^1.2.4, sax@npm:~1.2.4": version: 1.2.4 resolution: "sax@npm:1.2.4" checksum: d3df7d32b897a2c2f28e941f732c71ba90e27c24f62ee918bd4d9a8cfb3553f2f81e5493c7f0be94a11c1911b643a9108f231dd6f60df3fa9586b5d2e3e9e1fe @@ -20939,15 +21156,6 @@ __metadata: languageName: node linkType: hard -"semver@npm:~5.3.0": - version: 5.3.0 - resolution: "semver@npm:5.3.0" - bin: - semver: ./bin/semver - checksum: 2717b14299c76a4b35aec0aafebca22a3644da2942d2a4095f26e36d77a9bbe17a9a3a5199795f83edd26323d5c22024a2d9d373a038dec4e023156fa166d314 - languageName: node - linkType: hard - "send@npm:0.17.2": version: 0.17.2 resolution: "send@npm:0.17.2" @@ -21184,18 +21392,6 @@ __metadata: languageName: node linkType: hard -"shell-quote@npm:1.6.1": - version: 1.6.1 - resolution: "shell-quote@npm:1.6.1" - dependencies: - array-filter: ~0.0.0 - array-map: ~0.0.0 - array-reduce: ~0.0.0 - jsonify: ~0.0.0 - checksum: 982a4fdf2d474f0dc40885de4222f100ba457d7c75d46b532bf23b01774b8617bc62522c6825cb1fa7dd4c54c18e9dcbae7df2ca8983101841b6f2e6a7cacd2f - languageName: node - linkType: hard - "shell-quote@npm:^1.6.1, shell-quote@npm:^1.7.3": version: 1.7.3 resolution: "shell-quote@npm:1.7.3" @@ -21263,7 +21459,18 @@ __metadata: languageName: node linkType: hard -"simple-plist@npm:^1.0.0, simple-plist@npm:^1.1.0": +"simple-plist@npm:^1.0.0": + version: 1.4.0 + resolution: "simple-plist@npm:1.4.0" + dependencies: + bplist-creator: 0.1.1 + bplist-parser: 0.3.2 + plist: ^3.0.5 + checksum: fa8086f6b781c289f1abad21306481dda4af6373b32a5d998a70e53c2b7218a1d21ebb5ae3e736baae704c21d311d3d39d01d0e6a2387eda01b4020b9ebd909e + languageName: node + linkType: hard + +"simple-plist@npm:^1.1.0": version: 1.3.0 resolution: "simple-plist@npm:1.3.0" dependencies: @@ -21582,13 +21789,6 @@ __metadata: languageName: node linkType: hard -"split-on-first@npm:^1.0.0": - version: 1.1.0 - resolution: "split-on-first@npm:1.1.0" - checksum: 16ff85b54ddcf17f9147210a4022529b343edbcbea4ce977c8f30e38408b8d6e0f25f92cd35b86a524d4797f455e29ab89eb8db787f3c10708e0b47ebf528d30 - languageName: node - linkType: hard - "split-string@npm:^3.0.1, split-string@npm:^3.0.2": version: 3.1.0 resolution: "split-string@npm:3.1.0" @@ -21770,20 +21970,6 @@ __metadata: languageName: node linkType: hard -"strict-uri-encode@npm:^2.0.0": - version: 2.0.0 - resolution: "strict-uri-encode@npm:2.0.0" - checksum: eaac4cf978b6fbd480f1092cab8b233c9b949bcabfc9b598dd79a758f7243c28765ef7639c876fa72940dac687181b35486ea01ff7df3e65ce3848c64822c581 - languageName: node - linkType: hard - -"string-hash-64@npm:^1.0.3": - version: 1.0.3 - resolution: "string-hash-64@npm:1.0.3" - checksum: 79de8431b4fa3e85a2429cd52a34f7948221ff167b7a094e05d6bcfd0173474b232e0c9845c96f74b0d7b6b0c8bbe2c3532a4cacb21635293ef0cf3cc8e77f06 - languageName: node - linkType: hard - "string-length@npm:^4.0.1": version: 4.0.2 resolution: "string-length@npm:4.0.2" @@ -22143,13 +22329,6 @@ __metadata: languageName: node linkType: hard -"symbol-observable@npm:^1.0.1, symbol-observable@npm:^1.0.3": - version: 1.2.0 - resolution: "symbol-observable@npm:1.2.0" - checksum: 48ffbc22e3d75f9853b3ff2ae94a44d84f386415110aea5effc24d84c502e03a4a6b7a8f75ebaf7b585780bda34eb5d6da3121f826a6f93398429d30032971b6 - languageName: node - linkType: hard - "symbol-tree@npm:^3.2.4": version: 3.2.4 resolution: "symbol-tree@npm:3.2.4" @@ -22210,7 +22389,7 @@ __metadata: languageName: node linkType: hard -"tar@npm:^4, tar@npm:^4.4.8": +"tar@npm:^4": version: 4.4.19 resolution: "tar@npm:4.4.19" dependencies: @@ -22259,15 +22438,6 @@ __metadata: languageName: node linkType: hard -"temp@npm:^0.8.1": - version: 0.8.4 - resolution: "temp@npm:0.8.4" - dependencies: - rimraf: ~2.6.2 - checksum: f35bed78565355dfdf95f730b7b489728bd6b7e35071bcc6497af7c827fb6c111fbe9063afc7b8cbc19522a072c278679f9a0ee81e684aa2c8617cc0f2e9c191 - languageName: node - linkType: hard - "terminal-link@npm:^2.0.0": version: 2.1.1 resolution: "terminal-link@npm:2.1.1" @@ -22722,7 +22892,7 @@ __metadata: languageName: node linkType: hard -"tslib@npm:^2.0.0, tslib@npm:^2.0.1, tslib@npm:^2.2.0": +"tslib@npm:^2.0.0, tslib@npm:^2.2.0": version: 2.3.1 resolution: "tslib@npm:2.3.1" checksum: de17a98d4614481f7fcb5cd53ffc1aaf8654313be0291e1bfaee4b4bb31a20494b7d218ff2e15017883e8ea9626599b3b0e0229c18383ba9dce89da2adf15cb9 @@ -22902,7 +23072,19 @@ __metadata: languageName: node linkType: hard -"uglify-es@npm:^3.1.9, uglify-es@npm:^3.3.4": +"uglify-es@npm:^3.1.9": + version: 3.3.10 + resolution: "uglify-es@npm:3.3.10" + dependencies: + commander: ~2.14.1 + source-map: ~0.6.1 + bin: + uglifyjs: bin/uglifyjs + checksum: 22b028b6454c4d684c76617e9ac5b8da0e56611b32cd5d89e797225d6f1022f697a5642d9084319436df3aed462225749f8287d37bf67dccda1ac9d0365dd950 + languageName: node + linkType: hard + +"uglify-es@npm:^3.3.4": version: 3.3.9 resolution: "uglify-es@npm:3.3.9" dependencies: @@ -22999,6 +23181,13 @@ __metadata: languageName: node linkType: hard +"unicode-match-property-value-ecmascript@npm:^2.1.0": + version: 2.1.0 + resolution: "unicode-match-property-value-ecmascript@npm:2.1.0" + checksum: 8d6f5f586b9ce1ed0e84a37df6b42fdba1317a05b5df0c249962bd5da89528771e2d149837cad11aa26bcb84c35355cb9f58a10c3d41fa3b899181ece6c85220 + languageName: node + linkType: hard + "unicode-property-aliases-ecmascript@npm:^2.0.0": version: 2.0.0 resolution: "unicode-property-aliases-ecmascript@npm:2.0.0" @@ -23118,6 +23307,20 @@ __metadata: languageName: node linkType: hard +"update-browserslist-db@npm:^1.0.9": + version: 1.0.10 + resolution: "update-browserslist-db@npm:1.0.10" + dependencies: + escalade: ^3.1.1 + picocolors: ^1.0.0 + peerDependencies: + browserslist: ">= 4.21.0" + bin: + browserslist-lint: cli.js + checksum: 12db73b4f63029ac407b153732e7cd69a1ea8206c9100b482b7d12859cd3cd0bc59c602d7ae31e652706189f1acb90d42c53ab24a5ba563ed13aebdddc5561a0 + languageName: node + linkType: hard + "update-notifier@npm:^5.1.0": version: 5.1.0 resolution: "update-notifier@npm:5.1.0" @@ -23193,13 +23396,22 @@ __metadata: linkType: hard "use-subscription@npm:^1.0.0": - version: 1.5.1 - resolution: "use-subscription@npm:1.5.1" + version: 1.8.0 + resolution: "use-subscription@npm:1.8.0" dependencies: - object-assign: ^4.1.1 + use-sync-external-store: ^1.2.0 peerDependencies: - react: ^16.8.0 || ^17.0.0 - checksum: 96e64977a573244fd11350a3141b2cf57fb72dd9dd902f387c8a0a565d0a948bc81588bd7378c6ef6defc0d1119f37f73aac4a7a287c8443abd444bd4e7bbea8 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + checksum: beac1f0ff14fe23fd6ae9c34681258936729f343bf6532bbce36caa8f4c1019ff380783e35b4aeb7f3faaec1a83af242d7833bf7e660816d24555dbdd2c934da + languageName: node + linkType: hard + +"use-sync-external-store@npm:^1.2.0": + version: 1.2.0 + resolution: "use-sync-external-store@npm:1.2.0" + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + checksum: 5c639e0f8da3521d605f59ce5be9e094ca772bd44a4ce7322b055a6f58eeed8dda3c94cabd90c7a41fb6fa852210092008afe48f7038792fd47501f33299116a languageName: node linkType: hard @@ -23500,13 +23712,6 @@ __metadata: languageName: node linkType: hard -"warn-once@npm:^0.1.0": - version: 0.1.0 - resolution: "warn-once@npm:0.1.0" - checksum: 5fde2b526d132369ae30a34e9bd172f77ae3c061e6b875194de42d668bc189bd779ddada5217348cdf23ecac6a277931b40482173c6695544b924f6a8cd67601 - languageName: node - linkType: hard - "warning@npm:^3.0.0": version: 3.0.0 resolution: "warning@npm:3.0.0" @@ -23922,7 +24127,7 @@ __metadata: languageName: node linkType: hard -"which@npm:1, which@npm:^1.2.14, which@npm:^1.2.9, which@npm:^1.3.1": +"which@npm:^1.2.14, which@npm:^1.2.9, which@npm:^1.3.1": version: 1.3.1 resolution: "which@npm:1.3.1" dependencies: @@ -24206,17 +24411,6 @@ __metadata: languageName: node linkType: hard -"write-file-atomic@npm:^2.3.0": - version: 2.4.3 - resolution: "write-file-atomic@npm:2.4.3" - dependencies: - graceful-fs: ^4.1.11 - imurmurhash: ^0.1.4 - signal-exit: ^3.0.2 - checksum: 2db81f92ae974fd87ab4a5e7932feacaca626679a7c98fcc73ad8fcea5a1950eab32fa831f79e9391ac99b562ca091ad49be37a79045bd65f595efbb8f4596ae - languageName: node - linkType: hard - "write-file-atomic@npm:^3.0.0": version: 3.0.3 resolution: "write-file-atomic@npm:3.0.3" @@ -24278,8 +24472,8 @@ __metadata: linkType: hard "ws@npm:^7": - version: 7.5.7 - resolution: "ws@npm:7.5.7" + version: 7.5.9 + resolution: "ws@npm:7.5.9" peerDependencies: bufferutil: ^4.0.1 utf-8-validate: ^5.0.2 @@ -24288,7 +24482,7 @@ __metadata: optional: true utf-8-validate: optional: true - checksum: 5c1f669a166fb57560b4e07f201375137fa31d9186afde78b1508926345ce546332f109081574ddc4e38cc474c5406b5fc71c18d71eb75f6e2d2245576976cba + checksum: c3c100a181b731f40b7f2fddf004aa023f79d64f489706a28bc23ff88e87f6a64b3c6651fbec3a84a53960b75159574d7a7385709847a62ddb7ad6af76f49138 languageName: node linkType: hard @@ -24341,7 +24535,7 @@ __metadata: languageName: node linkType: hard -"xmlbuilder@npm:>=11.0.1": +"xmlbuilder@npm:>=11.0.1, xmlbuilder@npm:^15.1.1": version: 15.1.1 resolution: "xmlbuilder@npm:15.1.1" checksum: 14f7302402e28d1f32823583d121594a9dca36408d40320b33f598bd589ca5163a352d076489c9c64d2dc1da19a790926a07bf4191275330d4de2b0d85bb1843 @@ -24363,11 +24557,11 @@ __metadata: linkType: hard "xmldoc@npm:^1.1.2": - version: 1.1.2 - resolution: "xmldoc@npm:1.1.2" + version: 1.2.0 + resolution: "xmldoc@npm:1.2.0" dependencies: - sax: ^1.2.1 - checksum: ada5101e8221e87e3cf0f339a1bec213a7c91ad56fe453c27fc0f5b88feee67437a5604a08484f72041cd6104e23cf86c5000bc9bf658a01176b01b6daded429 + sax: ^1.2.4 + checksum: df42d06cf42bad47189f0d11d402de8da42652f1d96ee20586f906a3db72c6a0efbabc04d1a97cec7fe235fde55ff7e601c9dc4fdf31b9ef3ce30bd7836b4b08 languageName: node linkType: hard