├── .watchmanconfig
├── docs
├── CNAME
├── images
│ ├── screen1.png
│ ├── screen2.png
│ ├── sticky-phone.png
│ ├── sticky-header-bg.png
│ ├── appstore_badge.svg
│ └── playstore_badge.svg
├── vendors
│ ├── slick
│ │ ├── fonts
│ │ │ ├── slick.eot
│ │ │ ├── slick.ttf
│ │ │ ├── slick.woff
│ │ │ └── slick.svg
│ │ ├── images
│ │ │ └── ajax-loader.gif
│ │ └── css
│ │ │ ├── slick.css
│ │ │ └── slick-theme.css
│ ├── fontawesome
│ │ └── fonts
│ │ │ ├── FontAwesome.otf
│ │ │ ├── fontawesome-webfont.eot
│ │ │ ├── fontawesome-webfont.ttf
│ │ │ ├── fontawesome-webfont.woff
│ │ │ └── fontawesome-webfont.woff2
│ ├── pe-icon
│ │ ├── fonts
│ │ │ ├── Pe-icon-7-stroke.eot
│ │ │ ├── Pe-icon-7-stroke.ttf
│ │ │ └── Pe-icon-7-stroke.woff
│ │ └── css
│ │ │ └── helper.css
│ ├── simple-line-icons
│ │ └── fonts
│ │ │ ├── Simple-Line-Icons.eot
│ │ │ ├── Simple-Line-Icons.ttf
│ │ │ ├── Simple-Line-Icons.woff
│ │ │ └── Simple-Line-Icons.woff2
│ ├── owlcarousel
│ │ └── css
│ │ │ ├── owl.theme.default.min.css
│ │ │ └── owl.carousel.min.css
│ ├── animate.css
│ ├── fullpage
│ │ └── fullpage.min.css
│ ├── smoothscroll.min.js
│ ├── wow.min.js
│ └── magnific-popup
│ │ └── css
│ │ └── magnific-popup.css
├── package.json
├── scss
│ ├── _variables.scss
│ └── nav-menu.scss
├── js
│ ├── contact.js
│ └── subscribe.js
└── index.html
├── src
├── static
│ ├── schema.json
│ └── loading.gif
├── Redux
│ ├── RootReducer.ts
│ ├── Types.ts
│ ├── configureStore.ts
│ ├── ReduxPersist.ts
│ └── MainRedux.ts
├── Navigation
│ ├── index.ts
│ └── Service.ts
├── Sagas
│ ├── index.ts
│ ├── ThreadMigrationSaga.ts
│ └── MainSagas.ts
├── Setup
│ ├── RootContainer.tsx
│ └── App.tsx
└── Containers
│ ├── Styles
│ └── index.tsx
│ ├── Swipe.tsx
│ └── Home.tsx
├── .gitattributes
├── app.json
├── babel.config.js
├── ios
├── TApp
│ ├── Images.xcassets
│ │ ├── Contents.json
│ │ └── AppIcon.appiconset
│ │ │ ├── 114.png
│ │ │ ├── 120.png
│ │ │ ├── 180.png
│ │ │ ├── 29.png
│ │ │ ├── 40.png
│ │ │ ├── 57.png
│ │ │ ├── 58.png
│ │ │ ├── 60.png
│ │ │ ├── 80.png
│ │ │ ├── 87.png
│ │ │ ├── 1024.png
│ │ │ └── Contents.json
│ ├── AppDelegate.h
│ ├── main.m
│ ├── RNBackgroundFetch+AppDelegate.m
│ ├── AppDelegate.m
│ ├── Info.plist
│ └── Base.lproj
│ │ └── LaunchScreen.xib
├── Textile Notes.xcworkspace
│ ├── xcshareddata
│ │ ├── WorkspaceSettings.xcsettings
│ │ └── IDEWorkspaceChecks.plist
│ └── contents.xcworkspacedata
├── Podfile
├── Podfile.lock
└── Textile Notes.xcodeproj
│ └── xcshareddata
│ └── xcschemes
│ ├── TApp-tvOS.xcscheme
│ └── TApp.xcscheme
├── android
├── app
│ ├── src
│ │ └── main
│ │ │ ├── res
│ │ │ ├── values
│ │ │ │ ├── strings.xml
│ │ │ │ └── styles.xml
│ │ │ ├── mipmap
│ │ │ │ ├── ic_launcher.png
│ │ │ │ └── ic_launcher_round.png
│ │ │ ├── mipmap-hdpi
│ │ │ │ └── ic_launcher.png
│ │ │ ├── mipmap-mdpi
│ │ │ │ └── ic_launcher.png
│ │ │ ├── mipmap-xhdpi
│ │ │ │ └── ic_launcher.png
│ │ │ ├── mipmap-xxhdpi
│ │ │ │ └── ic_launcher.png
│ │ │ └── mipmap-xxxhdpi
│ │ │ │ └── ic_launcher.png
│ │ │ ├── java
│ │ │ └── io
│ │ │ │ └── textile
│ │ │ │ └── notes
│ │ │ │ ├── MainActivity.java
│ │ │ │ └── MainApplication.java
│ │ │ └── AndroidManifest.xml
│ ├── build_defs.bzl
│ ├── proguard-rules.pro
│ ├── BUCK
│ └── build.gradle
├── gradle
│ └── wrapper
│ │ ├── gradle-wrapper.jar
│ │ └── gradle-wrapper.properties
├── keystores
│ ├── debug.keystore.properties
│ └── BUCK
├── mobile
│ └── build.gradle
├── gradle.properties
├── settings.gradle
├── build.gradle
├── gradlew.bat
└── gradlew
├── tsconfig.jest.json
├── rn-cli.config.js
├── index.js
├── __tests__
└── App.js
├── tsconfig.json
├── SUPPORT.md
├── .gitignore
├── README.md
├── tslint.json
├── PRIVACY.md
└── package.json
/.watchmanconfig:
--------------------------------------------------------------------------------
1 | {}
--------------------------------------------------------------------------------
/docs/CNAME:
--------------------------------------------------------------------------------
1 | noet.io
2 |
--------------------------------------------------------------------------------
/src/static/schema.json:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/.gitattributes:
--------------------------------------------------------------------------------
1 | *.pbxproj -text
2 |
--------------------------------------------------------------------------------
/app.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "TextileNotes",
3 | "displayName": "Textile Notes"
4 | }
--------------------------------------------------------------------------------
/docs/images/screen1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/textileio/notes/HEAD/docs/images/screen1.png
--------------------------------------------------------------------------------
/docs/images/screen2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/textileio/notes/HEAD/docs/images/screen2.png
--------------------------------------------------------------------------------
/src/static/loading.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/textileio/notes/HEAD/src/static/loading.gif
--------------------------------------------------------------------------------
/babel.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | presets: ["module:metro-react-native-babel-preset"]
3 | }
4 |
--------------------------------------------------------------------------------
/docs/images/sticky-phone.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/textileio/notes/HEAD/docs/images/sticky-phone.png
--------------------------------------------------------------------------------
/docs/images/sticky-header-bg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/textileio/notes/HEAD/docs/images/sticky-header-bg.png
--------------------------------------------------------------------------------
/docs/vendors/slick/fonts/slick.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/textileio/notes/HEAD/docs/vendors/slick/fonts/slick.eot
--------------------------------------------------------------------------------
/docs/vendors/slick/fonts/slick.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/textileio/notes/HEAD/docs/vendors/slick/fonts/slick.ttf
--------------------------------------------------------------------------------
/docs/vendors/slick/fonts/slick.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/textileio/notes/HEAD/docs/vendors/slick/fonts/slick.woff
--------------------------------------------------------------------------------
/ios/TApp/Images.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "version" : 1,
4 | "author" : "xcode"
5 | }
6 | }
--------------------------------------------------------------------------------
/android/app/src/main/res/values/strings.xml:
--------------------------------------------------------------------------------
1 |
2 | noet.io
3 |
4 |
--------------------------------------------------------------------------------
/android/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/textileio/notes/HEAD/android/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/docs/vendors/slick/images/ajax-loader.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/textileio/notes/HEAD/docs/vendors/slick/images/ajax-loader.gif
--------------------------------------------------------------------------------
/docs/vendors/fontawesome/fonts/FontAwesome.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/textileio/notes/HEAD/docs/vendors/fontawesome/fonts/FontAwesome.otf
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/textileio/notes/HEAD/android/app/src/main/res/mipmap/ic_launcher.png
--------------------------------------------------------------------------------
/docs/vendors/pe-icon/fonts/Pe-icon-7-stroke.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/textileio/notes/HEAD/docs/vendors/pe-icon/fonts/Pe-icon-7-stroke.eot
--------------------------------------------------------------------------------
/docs/vendors/pe-icon/fonts/Pe-icon-7-stroke.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/textileio/notes/HEAD/docs/vendors/pe-icon/fonts/Pe-icon-7-stroke.ttf
--------------------------------------------------------------------------------
/docs/vendors/pe-icon/fonts/Pe-icon-7-stroke.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/textileio/notes/HEAD/docs/vendors/pe-icon/fonts/Pe-icon-7-stroke.woff
--------------------------------------------------------------------------------
/ios/TApp/Images.xcassets/AppIcon.appiconset/114.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/textileio/notes/HEAD/ios/TApp/Images.xcassets/AppIcon.appiconset/114.png
--------------------------------------------------------------------------------
/ios/TApp/Images.xcassets/AppIcon.appiconset/120.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/textileio/notes/HEAD/ios/TApp/Images.xcassets/AppIcon.appiconset/120.png
--------------------------------------------------------------------------------
/ios/TApp/Images.xcassets/AppIcon.appiconset/180.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/textileio/notes/HEAD/ios/TApp/Images.xcassets/AppIcon.appiconset/180.png
--------------------------------------------------------------------------------
/ios/TApp/Images.xcassets/AppIcon.appiconset/29.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/textileio/notes/HEAD/ios/TApp/Images.xcassets/AppIcon.appiconset/29.png
--------------------------------------------------------------------------------
/ios/TApp/Images.xcassets/AppIcon.appiconset/40.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/textileio/notes/HEAD/ios/TApp/Images.xcassets/AppIcon.appiconset/40.png
--------------------------------------------------------------------------------
/ios/TApp/Images.xcassets/AppIcon.appiconset/57.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/textileio/notes/HEAD/ios/TApp/Images.xcassets/AppIcon.appiconset/57.png
--------------------------------------------------------------------------------
/ios/TApp/Images.xcassets/AppIcon.appiconset/58.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/textileio/notes/HEAD/ios/TApp/Images.xcassets/AppIcon.appiconset/58.png
--------------------------------------------------------------------------------
/ios/TApp/Images.xcassets/AppIcon.appiconset/60.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/textileio/notes/HEAD/ios/TApp/Images.xcassets/AppIcon.appiconset/60.png
--------------------------------------------------------------------------------
/ios/TApp/Images.xcassets/AppIcon.appiconset/80.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/textileio/notes/HEAD/ios/TApp/Images.xcassets/AppIcon.appiconset/80.png
--------------------------------------------------------------------------------
/ios/TApp/Images.xcassets/AppIcon.appiconset/87.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/textileio/notes/HEAD/ios/TApp/Images.xcassets/AppIcon.appiconset/87.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/textileio/notes/HEAD/android/app/src/main/res/mipmap-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/textileio/notes/HEAD/android/app/src/main/res/mipmap-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/textileio/notes/HEAD/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/textileio/notes/HEAD/android/app/src/main/res/mipmap/ic_launcher_round.png
--------------------------------------------------------------------------------
/ios/TApp/Images.xcassets/AppIcon.appiconset/1024.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/textileio/notes/HEAD/ios/TApp/Images.xcassets/AppIcon.appiconset/1024.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/textileio/notes/HEAD/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/textileio/notes/HEAD/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/docs/vendors/fontawesome/fonts/fontawesome-webfont.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/textileio/notes/HEAD/docs/vendors/fontawesome/fonts/fontawesome-webfont.eot
--------------------------------------------------------------------------------
/docs/vendors/fontawesome/fonts/fontawesome-webfont.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/textileio/notes/HEAD/docs/vendors/fontawesome/fonts/fontawesome-webfont.ttf
--------------------------------------------------------------------------------
/docs/vendors/fontawesome/fonts/fontawesome-webfont.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/textileio/notes/HEAD/docs/vendors/fontawesome/fonts/fontawesome-webfont.woff
--------------------------------------------------------------------------------
/docs/vendors/fontawesome/fonts/fontawesome-webfont.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/textileio/notes/HEAD/docs/vendors/fontawesome/fonts/fontawesome-webfont.woff2
--------------------------------------------------------------------------------
/android/keystores/debug.keystore.properties:
--------------------------------------------------------------------------------
1 | key.store=debug.keystore
2 | key.alias=androiddebugkey
3 | key.store.password=android
4 | key.alias.password=android
5 |
--------------------------------------------------------------------------------
/android/mobile/build.gradle:
--------------------------------------------------------------------------------
1 | configurations.maybeCreate("default")
2 | artifacts.add("default", file('../../node_modules/@textile/go-mobile/dist/android/mobile.aar'))
--------------------------------------------------------------------------------
/docs/vendors/simple-line-icons/fonts/Simple-Line-Icons.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/textileio/notes/HEAD/docs/vendors/simple-line-icons/fonts/Simple-Line-Icons.eot
--------------------------------------------------------------------------------
/docs/vendors/simple-line-icons/fonts/Simple-Line-Icons.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/textileio/notes/HEAD/docs/vendors/simple-line-icons/fonts/Simple-Line-Icons.ttf
--------------------------------------------------------------------------------
/docs/vendors/simple-line-icons/fonts/Simple-Line-Icons.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/textileio/notes/HEAD/docs/vendors/simple-line-icons/fonts/Simple-Line-Icons.woff
--------------------------------------------------------------------------------
/docs/vendors/simple-line-icons/fonts/Simple-Line-Icons.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/textileio/notes/HEAD/docs/vendors/simple-line-icons/fonts/Simple-Line-Icons.woff2
--------------------------------------------------------------------------------
/tsconfig.jest.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "./tsconfig",
3 | "compilerOptions": {
4 | "resolveJsonModule": true,
5 | "jsx": "react",
6 | "module": "commonjs"
7 | }
8 | }
--------------------------------------------------------------------------------
/ios/TApp/AppDelegate.h:
--------------------------------------------------------------------------------
1 | #import
2 |
3 | @interface AppDelegate : UIResponder
4 |
5 | @property (nonatomic, strong) UIWindow *window;
6 |
7 | @end
8 |
--------------------------------------------------------------------------------
/src/Redux/RootReducer.ts:
--------------------------------------------------------------------------------
1 | import { combineReducers } from 'redux'
2 |
3 | import { reducer as mainReducer } from './MainRedux'
4 |
5 | export default combineReducers({
6 | main: mainReducer
7 | })
8 |
--------------------------------------------------------------------------------
/android/keystores/BUCK:
--------------------------------------------------------------------------------
1 | keystore(
2 | name = "debug",
3 | properties = "debug.keystore.properties",
4 | store = "debug.keystore",
5 | visibility = [
6 | "PUBLIC",
7 | ],
8 | )
9 |
--------------------------------------------------------------------------------
/rn-cli.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | getTransformModulePath() {
3 | return require.resolve("react-native-typescript-transformer");
4 | },
5 | getSourceExts() {
6 | return ["ts", "tsx"];
7 | }
8 | };
--------------------------------------------------------------------------------
/ios/TApp/main.m:
--------------------------------------------------------------------------------
1 | #import
2 |
3 | #import "AppDelegate.h"
4 |
5 | int main(int argc, char * argv[]) {
6 | @autoreleasepool {
7 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/android/app/src/main/res/values/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/ios/Textile Notes.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/index.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @format
3 | * @lint-ignore-every XPLATJSCOPYRIGHT1
4 | */
5 |
6 | import {AppRegistry} from 'react-native';
7 | import App from './src/Setup/App'
8 | import {name as appName} from './app.json';
9 |
10 | AppRegistry.registerComponent(appName, () => App);
11 |
12 |
13 |
--------------------------------------------------------------------------------
/android/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | #Thu Feb 28 11:31:04 CET 2019
2 | distributionBase=GRADLE_USER_HOME
3 | distributionPath=wrapper/dists
4 | zipStoreBase=GRADLE_USER_HOME
5 | zipStorePath=wrapper/dists
6 | distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.1-all.zip
7 |
--------------------------------------------------------------------------------
/src/Redux/Types.ts:
--------------------------------------------------------------------------------
1 | import { StateType } from 'typesafe-actions'
2 |
3 | import RootReducer from './RootReducer'
4 | import { MainActions } from './MainRedux'
5 |
6 | export type RootState = StateType
7 | export type RootAction =
8 | MainActions
9 | // Add any new types here
10 |
--------------------------------------------------------------------------------
/docs/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "noet.io",
3 | "version": "1.0.0",
4 | "description": "",
5 | "main": "index.html",
6 | "scripts": {
7 | "scss": "node-sass --watch scss -o css"
8 | },
9 | "author": "",
10 | "license": "ISC",
11 | "devDependencies": {
12 | "node-sass": "^4.12.0"
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/ios/Textile Notes.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/ios/Textile Notes.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/src/Navigation/index.ts:
--------------------------------------------------------------------------------
1 | import {
2 | createAppContainer,
3 | createSwitchNavigator
4 | } from 'react-navigation'
5 |
6 | import Home from '../Containers/Home'
7 |
8 | const nav = createSwitchNavigator(
9 | {
10 | Home
11 | },
12 | {
13 | initialRouteName: 'Home'
14 | }
15 | )
16 |
17 | const app = createAppContainer(nav)
18 |
19 | export default app
20 |
--------------------------------------------------------------------------------
/__tests__/App.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @format
3 | * @lint-ignore-every XPLATJSCOPYRIGHT1
4 | */
5 |
6 | import 'react-native';
7 | import React from 'react';
8 | import App from '../App';
9 |
10 | // Note: test renderer must be required after react-native.
11 | import renderer from 'react-test-renderer';
12 |
13 | it('renders correctly', () => {
14 | renderer.create();
15 | });
16 |
--------------------------------------------------------------------------------
/android/app/src/main/java/io/textile/notes/MainActivity.java:
--------------------------------------------------------------------------------
1 | package io.textile.notes;
2 |
3 | import com.facebook.react.ReactActivity;
4 |
5 | public class MainActivity extends ReactActivity {
6 |
7 | /**
8 | * Returns the name of the main component registered from JavaScript.
9 | * This is used to schedule rendering of the component.
10 | */
11 | @Override
12 | protected String getMainComponentName() {
13 | return "TextileNotes";
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/src/Sagas/index.ts:
--------------------------------------------------------------------------------
1 | import { all, call } from 'redux-saga/effects'
2 | import { Dispatch } from 'redux'
3 |
4 | /* ------------- Types ------------- */
5 |
6 | import MainActions from '../Redux/MainRedux'
7 |
8 | /* ------------- Sagas ------------- */
9 |
10 | import {
11 | mainSagaInit
12 | } from './MainSagas'
13 |
14 | /* ------------- Connect Types To Sagas ------------- */
15 |
16 | export default function * root (dispatch: Dispatch) {
17 | yield all([
18 | call(mainSagaInit)
19 | ])
20 | }
21 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "jsx": "react-native",
4 | "lib": ["es6"],
5 | "moduleResolution": "node",
6 | "resolveJsonModule": true,
7 | "noEmit": true,
8 | "strict": true,
9 | "allowJs": true,
10 | "allowSyntheticDefaultImports": true,
11 | "noImplicitAny": false,
12 | "esModuleInterop": true,
13 | "isolatedModules": true,
14 | "skipLibCheck": true,
15 | "target": "esnext"
16 | },
17 | "exclude": ["node_modules", "coverage", "*.js"]
18 | }
19 |
--------------------------------------------------------------------------------
/ios/TApp/RNBackgroundFetch+AppDelegate.m:
--------------------------------------------------------------------------------
1 | #import
2 | #import "AppDelegate.h"
3 | #import
4 |
5 | @implementation AppDelegate(AppDelegate)
6 |
7 | -(void)application:(UIApplication *)application performFetchWithCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
8 | {
9 | NSLog(@"RNBackgroundFetch AppDelegate received fetch event");
10 | TSBackgroundFetch *fetchManager = [TSBackgroundFetch sharedInstance];
11 | [fetchManager performFetchWithCompletionHandler:completionHandler applicationState:application.applicationState];
12 | }
13 |
14 | @end
15 |
--------------------------------------------------------------------------------
/android/app/build_defs.bzl:
--------------------------------------------------------------------------------
1 | """Helper definitions to glob .aar and .jar targets"""
2 |
3 | def create_aar_targets(aarfiles):
4 | for aarfile in aarfiles:
5 | name = "aars__" + aarfile[aarfile.rindex("/") + 1:aarfile.rindex(".aar")]
6 | lib_deps.append(":" + name)
7 | android_prebuilt_aar(
8 | name = name,
9 | aar = aarfile,
10 | )
11 |
12 | def create_jar_targets(jarfiles):
13 | for jarfile in jarfiles:
14 | name = "jars__" + jarfile[jarfile.rindex("/") + 1:jarfile.rindex(".jar")]
15 | lib_deps.append(":" + name)
16 | prebuilt_jar(
17 | name = name,
18 | binary_jar = jarfile,
19 | )
20 |
--------------------------------------------------------------------------------
/src/Redux/configureStore.ts:
--------------------------------------------------------------------------------
1 | import { createStore, applyMiddleware } from 'redux'
2 | import createSagaMiddleware from 'redux-saga'
3 | import { persistStore, persistReducer } from 'redux-persist'
4 | import persistConfig from './ReduxPersist'
5 |
6 | import rootReducer from './RootReducer'
7 | import rootSaga from '../Sagas/'
8 |
9 | const persistedReducer = persistReducer(persistConfig, rootReducer)
10 |
11 | export default () => {
12 |
13 | const sagaMiddleware = createSagaMiddleware()
14 |
15 | const store = createStore(persistedReducer, applyMiddleware(sagaMiddleware))
16 |
17 | const persistor = persistStore(store, undefined, undefined)
18 |
19 | sagaMiddleware.run(rootSaga, store.dispatch)
20 |
21 | return { store, persistor }
22 | }
23 |
--------------------------------------------------------------------------------
/src/Setup/RootContainer.tsx:
--------------------------------------------------------------------------------
1 | import React, { Component } from 'react'
2 | import { View, StatusBar, Platform } from 'react-native'
3 | import { NavigationContainerComponent } from 'react-navigation'
4 | import Navigation from '../Navigation'
5 | import NavigationService from '../Navigation/Service'
6 | import styles from '../Containers/Styles'
7 |
8 | class App extends Component<{}> {
9 | render () {
10 | const barStyle = Platform.OS === 'ios' ? 'dark-content' : 'light-content'
11 | return (
12 |
13 |
14 | { NavigationService.setTopLevelNavigator(navRef) }}
16 | />
17 |
18 | )
19 | }
20 | }
21 |
22 | export default App
23 |
--------------------------------------------------------------------------------
/android/app/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | # Add project specific ProGuard rules here.
2 | # By default, the flags in this file are appended to flags specified
3 | # in /usr/local/Cellar/android-sdk/24.3.3/tools/proguard/proguard-android.txt
4 | # You can edit the include path and order by changing the proguardFiles
5 | # directive in build.gradle.
6 | #
7 | # For more details, see
8 | # http://developer.android.com/guide/developing/tools/proguard.html
9 |
10 | # Add any project specific keep options here:
11 |
12 | # If your project uses WebView with JS, uncomment the following
13 | # and specify the fully qualified class name to the JavaScript interface
14 | # class:
15 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
16 | # public *;
17 | #}
18 |
19 | -ignorewarnings
20 | -keep class io.textile.notes.BuildConfig { *; }
21 | -keep class * {
22 | public private *;
23 | }
--------------------------------------------------------------------------------
/android/gradle.properties:
--------------------------------------------------------------------------------
1 | # Project-wide Gradle settings.
2 |
3 | # IDE (e.g. Android Studio) users:
4 | # Gradle settings configured through the IDE *will override*
5 | # any settings specified in this file.
6 |
7 | # For more details on how to configure your build environment visit
8 | # http://www.gradle.org/docs/current/userguide/build_environment.html
9 |
10 | # Specifies the JVM arguments used for the daemon process.
11 | # The setting is particularly useful for tweaking memory settings.
12 | # Default value: -Xmx10248m -XX:MaxPermSize=256m
13 | # org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
14 |
15 | # When configured, Gradle will run in incubating parallel mode.
16 | # This option should only be used with decoupled projects. More details, visit
17 | # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
18 | # org.gradle.parallel=true
19 |
20 |
--------------------------------------------------------------------------------
/SUPPORT.md:
--------------------------------------------------------------------------------
1 | # Textile Notes Support
2 |
3 | If you are experiencing issues or have questions about the Textile Notes app, here are ways you can get in touch.
4 |
5 | ### Report a Technical Issue
6 |
7 | All technical issues are best filed as GitHub tickets on this repo, you can [click here to find existing issues and create new issues](https://github.com/textileio/notes/issues)
8 |
9 | If you have not created an issue on GitHub before, [here is a guide](https://help.github.com/en/articles/creating-an-issue) to get started.
10 |
11 | ### Ask a question
12 |
13 | You can ask us questions or leave us comments by writing to [contact@textile.io](mailto:contact@textile.io) or starting a discussion with [@Textile01Help on Twitter](https://twitter.com/textile01help).
14 |
15 | ### App Updates
16 |
17 | The latest releases will always be available through the the official stores:
18 |
19 | [Android release](https://play.google.com/store/apps/details?id=io.textile.notes)
20 |
--------------------------------------------------------------------------------
/docs/vendors/owlcarousel/css/owl.theme.default.min.css:
--------------------------------------------------------------------------------
1 | /**
2 | * Owl Carousel v2.2.1
3 | * Copyright 2013-2017 David Deutsch
4 | * Licensed under ()
5 | */
6 | .owl-theme .owl-dots,.owl-theme .owl-nav{text-align:center;-webkit-tap-highlight-color:transparent}.owl-theme .owl-nav{margin-top:10px}.owl-theme .owl-nav [class*=owl-]{color:#FFF;font-size:14px;margin:5px;padding:4px 7px;background:#D6D6D6;display:inline-block;cursor:pointer;border-radius:3px}.owl-theme .owl-nav [class*=owl-]:hover{background:#869791;color:#FFF;text-decoration:none}.owl-theme .owl-nav .disabled{opacity:.5;cursor:default}.owl-theme .owl-nav.disabled+.owl-dots{margin-top:10px}.owl-theme .owl-dots .owl-dot{display:inline-block;zoom:1}.owl-theme .owl-dots .owl-dot span{width:10px;height:10px;margin:5px 7px;background:#D6D6D6;display:block;-webkit-backface-visibility:visible;transition:opacity .2s ease;border-radius:30px}.owl-theme .owl-dots .owl-dot.active span,.owl-theme .owl-dots .owl-dot:hover span{background:#869791}
--------------------------------------------------------------------------------
/src/Navigation/Service.ts:
--------------------------------------------------------------------------------
1 | import {
2 | NavigationActions,
3 | NavigationContainerComponent,
4 | NavigationParams
5 | } from 'react-navigation'
6 |
7 | let _navigator: NavigationContainerComponent
8 |
9 | function setTopLevelNavigator(navigatorRef: NavigationContainerComponent) {
10 | _navigator = navigatorRef
11 | }
12 |
13 | function navigate(routeName: string, params?: NavigationParams) {
14 | _navigator.dispatch(
15 | NavigationActions.navigate({
16 | routeName,
17 | params
18 | })
19 | )
20 | }
21 |
22 | function goBack() {
23 | _navigator.dispatch(
24 | NavigationActions.back()
25 | )
26 | }
27 |
28 | export interface NavigationService {
29 | setTopLevelNavigator: (navigatorRef: NavigationContainerComponent) => void
30 | navigate: (routeName: string, params?: NavigationParams) => void
31 | goBack: () => void
32 | }
33 |
34 | // add other navigation functions that you need and export them
35 | export default {
36 | navigate,
37 | goBack,
38 | setTopLevelNavigator
39 | } as NavigationService
40 |
--------------------------------------------------------------------------------
/android/settings.gradle:
--------------------------------------------------------------------------------
1 | rootProject.name = 'noet.io'
2 | include ':@textile_react-native-sdk'
3 | project(':@textile_react-native-sdk').projectDir = new File(rootProject.projectDir, '../node_modules/@textile/react-native-sdk/android')
4 | include ':react-native-shake'
5 | project(':react-native-shake').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-shake/android')
6 | include ':react-native-config'
7 | project(':react-native-config').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-config/android')
8 | include ':react-native-background-fetch'
9 | project(':react-native-background-fetch').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-background-fetch/android')
10 | include ':react-native-fs'
11 | project(':react-native-fs').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-fs/android')
12 | include ':react-native-background-timer'
13 | project(':react-native-background-timer').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-background-timer/android')
14 | include ':app'
15 |
--------------------------------------------------------------------------------
/docs/scss/_variables.scss:
--------------------------------------------------------------------------------
1 | /* ==========================================================================
2 | * FONTS
3 | * ========================================================================== */
4 |
5 | $primary-font :'Roboto', sans-serif;
6 | $bold : 700;
7 | $regular : 400;
8 | $light : 300;
9 | $thin : 100;
10 |
11 | /* ==========================================================================
12 | * COLORS
13 | * ========================================================================== */
14 |
15 | $primary-color :#2935ff;
16 | $secondary-color :#3fb125;
17 | $white :#ffffff;
18 | $light :#f0f4f6;
19 | $dark :#2a2e2f;
20 | $gray :#383e40;
21 | $blue :linear-gradient(to right, #2935ff 0%,#2935ff 100%);
22 | $red :linear-gradient(to right, #fff 1%,#fff 100%);
23 | $light-green :linear-gradient(to right, #11d5aa 0%,#00d3a2 100%);
24 | $yellow :linear-gradient(to right, #ffe900 0%,#ffed27 100%);
25 | $violet :linear-gradient(to right, #2d02ef 2%,#5936f0 100%);
--------------------------------------------------------------------------------
/android/build.gradle:
--------------------------------------------------------------------------------
1 | // Top-level build file where you can add configuration options common to all sub-projects/modules.
2 |
3 | buildscript {
4 | ext {
5 | buildToolsVersion = "28.0.2"
6 | minSdkVersion = 24
7 | compileSdkVersion = 28
8 | targetSdkVersion = 27
9 | supportLibVersion = "28.0.0"
10 | }
11 | repositories {
12 | google()
13 | jcenter()
14 | }
15 | dependencies {
16 | classpath 'com.android.tools.build:gradle:3.3.2'
17 |
18 | // NOTE: Do not place your application dependencies here; they belong
19 | // in the individual module build.gradle files
20 | }
21 | }
22 |
23 | allprojects {
24 | repositories {
25 | mavenLocal()
26 | google()
27 | jcenter()
28 | maven {
29 | // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm
30 | url "$rootDir/../node_modules/react-native/android"
31 | }
32 | maven {
33 | url "$rootDir/../node_modules/react-native-background-fetch/android/libs"
34 | }
35 | maven {
36 | url "https://dl.bintray.com/textile/maven"
37 | }
38 | maven {
39 | url 'https://jitpack.io'
40 | }
41 | }
42 | }
43 |
44 | task wrapper(type: Wrapper) {
45 | gradleVersion = '4.4'
46 | distributionUrl = distributionUrl.replace("bin", "all")
47 | }
48 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Android
2 |
3 | *.keystore
4 | *.jks
5 | android/**/*.settings
6 | android/**/*.project
7 | android/**/*.classpath
8 |
9 | # OSX
10 | #
11 | .DS_Store
12 | ios/pods/
13 |
14 | .tmp
15 |
16 | # Xcode
17 | #
18 | build/
19 | *.pbxuser
20 | !default.pbxuser
21 | *.mode1v3
22 | !default.mode1v3
23 | *.mode2v3
24 | !default.mode2v3
25 | *.perspectivev3
26 | !default.perspectivev3
27 | xcuserdata
28 | *.xccheckout
29 | *.moved-aside
30 | DerivedData
31 | *.hmap
32 | *.ipa
33 | *.xcuserstate
34 | project.xcworkspace
35 |
36 | # Android/IntelliJ
37 | #
38 | build/
39 | .idea
40 | .gradle
41 | local.properties
42 | *.iml
43 |
44 | # Visual Studio Code
45 | #
46 | .vscode/
47 |
48 | # node.js
49 | #
50 | node_modules/
51 | npm-debug.log
52 | yarn-error.log
53 |
54 | # BUCK
55 | buck-out/
56 | \.buckd/
57 | *.keystore
58 |
59 | # fastlane
60 | #
61 | # It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the
62 | # screenshots whenever they are needed.
63 | # For more information about the recommended setup visit:
64 | # https://docs.fastlane.tools/best-practices/source-control/
65 |
66 | **/fastlane/report.xml
67 | **/fastlane/Preview.html
68 | **/fastlane/screenshots
69 | **/fastlane/test_output
70 |
71 | # Bundle artifact
72 | *.jsbundle
73 | sourcemap.js
74 |
75 | # Jest
76 | #
77 | .jest/
78 | coverage/
79 |
80 | # React Native Config
81 | .env
82 | .env.production
83 | .env.staging
84 | .env.default
85 |
--------------------------------------------------------------------------------
/android/app/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
3 |
4 |
5 |
6 |
7 |
14 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
--------------------------------------------------------------------------------
/android/app/BUCK:
--------------------------------------------------------------------------------
1 | # To learn about Buck see [Docs](https://buckbuild.com/).
2 | # To run your application with Buck:
3 | # - install Buck
4 | # - `npm start` - to start the packager
5 | # - `cd android`
6 | # - `keytool -genkey -v -keystore keystores/debug.keystore -storepass android -alias androiddebugkey -keypass android -dname "CN=Android Debug,O=Android,C=US"`
7 | # - `./gradlew :app:copyDownloadableDepsToLibs` - make all Gradle compile dependencies available to Buck
8 | # - `buck install -r android/app` - compile, install and run application
9 | #
10 |
11 | load(":build_defs.bzl", "create_aar_targets", "create_jar_targets")
12 |
13 | lib_deps = []
14 |
15 | create_aar_targets(glob(["libs/*.aar"]))
16 |
17 | create_jar_targets(glob(["libs/*.jar"]))
18 |
19 | android_library(
20 | name = "all-libs",
21 | exported_deps = lib_deps,
22 | )
23 |
24 | android_library(
25 | name = "app-code",
26 | srcs = glob([
27 | "src/main/java/**/*.java",
28 | ]),
29 | deps = [
30 | ":all-libs",
31 | ":build_config",
32 | ":res",
33 | ],
34 | )
35 |
36 | android_build_config(
37 | name = "build_config",
38 | package = "io.textile.notes",
39 | )
40 |
41 | android_resource(
42 | name = "res",
43 | package = "io.textile.notes",
44 | res = "src/main/res",
45 | )
46 |
47 | android_binary(
48 | name = "app",
49 | keystore = "//android/keystores:debug",
50 | manifest = "src/main/AndroidManifest.xml",
51 | package_type = "debug",
52 | deps = [
53 | ":app-code",
54 | ],
55 | )
56 |
--------------------------------------------------------------------------------
/ios/TApp/AppDelegate.m:
--------------------------------------------------------------------------------
1 | #import "AppDelegate.h"
2 |
3 | #import
4 | #import
5 | #import
6 |
7 | @implementation AppDelegate
8 |
9 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
10 | {
11 | signal(SIGPIPE, SIG_IGN);
12 | NSURL *jsCodeLocation;
13 |
14 | jsCodeLocation = [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index" fallbackResource:nil];
15 |
16 | RCTRootView *rootView = [[RCTRootView alloc] initWithBundleURL:jsCodeLocation
17 | moduleName:@"TextileNotes"
18 | initialProperties:nil
19 | launchOptions:launchOptions];
20 | rootView.backgroundColor = [UIColor blackColor];
21 |
22 | self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
23 | UIViewController *rootViewController = [UIViewController new];
24 | rootViewController.view = rootView;
25 | self.window.rootViewController = rootViewController;
26 | [self.window makeKeyAndVisible];
27 | return YES;
28 | }
29 |
30 | - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url
31 |
32 | sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
33 |
34 | {
35 |
36 | return [RCTLinkingManager application:application openURL:url
37 |
38 | sourceApplication:sourceApplication annotation:annotation];
39 |
40 | }
41 |
42 | @end
43 |
--------------------------------------------------------------------------------
/src/Setup/App.tsx:
--------------------------------------------------------------------------------
1 | import React, { Component } from 'react'
2 | import { Provider } from 'react-redux'
3 | import { PersistGate } from 'redux-persist/integration/react'
4 | import RootContainer from './RootContainer'
5 | import configureStore from '../Redux/configureStore'
6 | import MainActions from '../Redux/MainRedux'
7 |
8 | import Textile, { EventSubscription } from '@textile/react-native-sdk'
9 | import { Linking } from 'react-native'
10 |
11 | const { store, persistor } = configureStore()
12 |
13 | class App extends Component {
14 | subscriptions: EventSubscription[] = []
15 |
16 | render () {
17 | return (
18 |
19 |
20 |
21 |
22 |
23 | )
24 | }
25 |
26 | handleDeepLink = (event: {url: string}) => {
27 | store.dispatch(MainActions.handleNewDeepLink(event.url))
28 | }
29 |
30 | componentDidMount () {
31 |
32 | this.subscriptions.push(
33 | Textile.events.addNodeStartedListener(() => {
34 | store.dispatch(MainActions.nodeStarted())
35 | store.dispatch(MainActions.newNodeState('started'))
36 | })
37 | )
38 | this.subscriptions.push(
39 | Textile.events.addNodeStoppedListener(() => {
40 | store.dispatch(MainActions.newNodeState('stopped'))
41 | })
42 | )
43 | Linking.addEventListener('url', this.handleDeepLink)
44 | }
45 |
46 | componentWillUnmount () {
47 | for (const subscription of this.subscriptions) {
48 | subscription.cancel()
49 | }
50 | Linking.removeEventListener('url', this.handleDeepLink)
51 | }
52 | }
53 |
54 | export default App
55 |
--------------------------------------------------------------------------------
/ios/Podfile:
--------------------------------------------------------------------------------
1 | platform :ios, '10.0'
2 |
3 | target 'Textile Notes' do
4 | pod 'React', :path => '../node_modules/react-native', :subspecs => [
5 | 'Core',
6 | 'CxxBridge',
7 | 'DevSupport',
8 | # the following ones are the ones taken from "Libraries" in Xcode:
9 | 'RCTAnimation',
10 | 'RCTActionSheet',
11 | 'RCTBlob',
12 | 'RCTGeolocation',
13 | 'RCTImage',
14 | 'RCTLinkingIOS',
15 | 'RCTNetwork',
16 | 'RCTSettings',
17 | 'RCTText',
18 | 'RCTVibration',
19 | 'RCTWebSocket'
20 | ]
21 |
22 | # the following dependencies are dependencies of React native itself.
23 | pod 'yoga', :path => '../node_modules/react-native/ReactCommon/yoga/Yoga.podspec'
24 | pod 'DoubleConversion', :podspec => '../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec'
25 | pod 'Folly', :podspec => '../node_modules/react-native/third-party-podspecs/Folly.podspec'
26 | pod 'glog', :podspec => '../node_modules/react-native/third-party-podspecs/GLog.podspec'
27 |
28 | # your other libraries will follow here!
29 | pod 'textile-react-native-sdk', :path => '../node_modules/@textile/react-native-sdk'
30 | end
31 |
32 | # The following is needed to ensure the "archive" step works in XCode.
33 | # It removes React from the Pods project, as it is already included in the main project.
34 | post_install do |installer|
35 | installer.pods_project.targets.each do |target|
36 | if target.name == "React"
37 | target.remove_from_project
38 | end
39 | if target.name == 'yoga'
40 | target.remove_from_project
41 | target.build_configurations.each do |config|
42 | config.build_settings['GCC_TREAT_WARNINGS_AS_ERRORS'] = 'NO'
43 | config.build_settings['GCC_WARN_64_TO_32_BIT_CONVERSION'] = 'NO'
44 | end
45 | end
46 | end
47 | end
48 |
--------------------------------------------------------------------------------
/ios/TApp/Images.xcassets/AppIcon.appiconset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "size" : "20x20",
5 | "idiom" : "iphone",
6 | "filename" : "40.png",
7 | "scale" : "2x"
8 | },
9 | {
10 | "size" : "20x20",
11 | "idiom" : "iphone",
12 | "filename" : "60.png",
13 | "scale" : "3x"
14 | },
15 | {
16 | "size" : "29x29",
17 | "idiom" : "iphone",
18 | "filename" : "29.png",
19 | "scale" : "1x"
20 | },
21 | {
22 | "size" : "29x29",
23 | "idiom" : "iphone",
24 | "filename" : "58.png",
25 | "scale" : "2x"
26 | },
27 | {
28 | "size" : "29x29",
29 | "idiom" : "iphone",
30 | "filename" : "87.png",
31 | "scale" : "3x"
32 | },
33 | {
34 | "size" : "40x40",
35 | "idiom" : "iphone",
36 | "filename" : "80.png",
37 | "scale" : "2x"
38 | },
39 | {
40 | "size" : "40x40",
41 | "idiom" : "iphone",
42 | "filename" : "120.png",
43 | "scale" : "3x"
44 | },
45 | {
46 | "size" : "57x57",
47 | "idiom" : "iphone",
48 | "filename" : "57.png",
49 | "scale" : "1x"
50 | },
51 | {
52 | "size" : "57x57",
53 | "idiom" : "iphone",
54 | "filename" : "114.png",
55 | "scale" : "2x"
56 | },
57 | {
58 | "size" : "60x60",
59 | "idiom" : "iphone",
60 | "filename" : "120.png",
61 | "scale" : "2x"
62 | },
63 | {
64 | "size" : "60x60",
65 | "idiom" : "iphone",
66 | "filename" : "180.png",
67 | "scale" : "3x"
68 | },
69 | {
70 | "size" : "1024x1024",
71 | "idiom" : "ios-marketing",
72 | "filename" : "1024.png",
73 | "scale" : "1x"
74 | }
75 | ],
76 | "info" : {
77 | "version" : 1,
78 | "author" : "xcode"
79 | }
80 | }
--------------------------------------------------------------------------------
/android/app/src/main/java/io/textile/notes/MainApplication.java:
--------------------------------------------------------------------------------
1 | package io.textile.notes;
2 |
3 | import android.app.Application;
4 |
5 | import com.facebook.react.ReactApplication;
6 | import io.textile.rnmobile.RNTextilePackage;
7 | import com.clipsub.RNShake.RNShakeEventPackage;
8 | import com.lugg.ReactNativeConfig.ReactNativeConfigPackage;
9 | import com.transistorsoft.rnbackgroundfetch.RNBackgroundFetchPackage;
10 | import com.rnfs.RNFSPackage;
11 | import com.ocetnik.timer.BackgroundTimerPackage;
12 | import com.facebook.react.ReactNativeHost;
13 | import com.facebook.react.ReactPackage;
14 | import com.facebook.react.shell.MainReactPackage;
15 | import com.facebook.soloader.SoLoader;
16 |
17 | import java.util.Arrays;
18 | import java.util.List;
19 |
20 | public class MainApplication extends Application implements ReactApplication {
21 |
22 | private final ReactNativeHost mReactNativeHost = new ReactNativeHost(this) {
23 | @Override
24 | public boolean getUseDeveloperSupport() {
25 | return BuildConfig.DEBUG;
26 | }
27 |
28 | @Override
29 | protected List getPackages() {
30 | return Arrays.asList(
31 | new MainReactPackage(),
32 | new RNTextilePackage(),
33 | new RNShakeEventPackage(),
34 | new ReactNativeConfigPackage(),
35 | new RNBackgroundFetchPackage(),
36 | new RNFSPackage(),
37 | new BackgroundTimerPackage()
38 | );
39 | }
40 |
41 | @Override
42 | protected String getJSMainModuleName() {
43 | return "index";
44 | }
45 | };
46 |
47 | @Override
48 | public ReactNativeHost getReactNativeHost() {
49 | return mReactNativeHost;
50 | }
51 |
52 | @Override
53 | public void onCreate() {
54 | super.onCreate();
55 | SoLoader.init(this, /* native exopackage */ false);
56 | }
57 | }
58 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | 
2 |
3 | # Textile Notes
4 |
5 | **Why another notes app?**
6 |
7 | - **Simplicity**. Textile Note is a single screen app that let's you take a note and save it to your device + have it delivered to your inbox with a single swipe.
8 | - **Privacy**. We don't track anything about you except your email address for delivering your notes. We don't collect metrics outside those provided by iOS and Android app stores, and we don't plan to change that.
9 | - **Function**. Your best ideas come whenever they want. Textile Note gives you the ability to capture those ideas without interupting your thoughts or conversations. Minimal and easy to use.
10 |
11 | ## Available on the Google Play store
12 |
13 | [Grab the Android release](https://play.google.com/store/apps/details?id=io.textile.notes)
14 |
15 | ## Available for iOS
16 |
17 | [Grab the iOS release](https://itunes.apple.com/us/app/textile-notes/id1455735844?ls=1&mt=8)
18 |
19 | ## Blog Post
20 |
21 | We released the app in a [blog post](https://medium.com/textileio/textile-notes-a-minimalist-tool-for-your-creative-ideas-68b9357d5cd0) and [tweet](https://twitter.com/Textile01/status/1108074549512306688), join the discussions over there.
22 |
23 | ## More info
24 |
25 | [Support](SUPPORT.md)
26 |
27 | [Privacy](PRIVACY.md)
28 |
29 | [More about Textile](https://textile.io)
30 |
31 | [Try Textile Photos](https://textile.photos)
32 |
33 | ## Running Textile Inside
34 |
35 | Textile Note stores notes on device using a local IPFS node, later we'll use that node to help you sync your notes across devices. The app uses the [Textile React Native SDK](https://github.com/textileio/react-native-sdk) to manage note encryption and pinning locally.
36 |
37 | ## Built with Textile Boilerplate
38 |
39 | If you want to build your own app, feel free to pick this code apart or just grab the [advanced boilerplate](https://github.com/textileio/advanced-react-native-boilerplate) we used.
40 |
--------------------------------------------------------------------------------
/docs/vendors/animate.css:
--------------------------------------------------------------------------------
1 | @charset "UTF-8";
2 |
3 | /*!
4 | * animate.css -http://daneden.me/animate
5 | * Version - 3.5.2
6 | * Licensed under the MIT license - http://opensource.org/licenses/MIT
7 | *
8 | * Copyright (c) 2017 Daniel Eden
9 | */
10 |
11 | .animated {
12 | animation-duration: 1s;
13 | animation-fill-mode: both;
14 | }
15 |
16 | .animated.infinite {
17 | animation-iteration-count: infinite;
18 | }
19 |
20 | .animated.hinge {
21 | animation-duration: 2s;
22 | }
23 |
24 | @keyframes fadeIn {
25 | from {
26 | opacity: 0;
27 | }
28 |
29 | to {
30 | opacity: 1;
31 | }
32 | }
33 |
34 | .fadeIn {
35 | animation-name: fadeIn;
36 | }
37 |
38 | @keyframes fadeInDown {
39 | from {
40 | opacity: 0;
41 | transform: translate3d(0, -50%, 0);
42 | }
43 |
44 | to {
45 | opacity: 1;
46 | transform: none;
47 | }
48 | }
49 |
50 | .fadeInDown {
51 | animation-name: fadeInDown;
52 | }
53 |
54 |
55 | @keyframes fadeInLeft {
56 | from {
57 | opacity: 0;
58 | transform: translate3d(-50%, 0, 0);
59 | }
60 |
61 | to {
62 | opacity: 1;
63 | transform: none;
64 | }
65 | }
66 |
67 | .fadeInLeft {
68 | animation-name: fadeInLeft;
69 | }
70 |
71 |
72 | @keyframes fadeInRight {
73 | from {
74 | opacity: 0;
75 | transform: translate3d(50%, 0, 0);
76 | }
77 |
78 | to {
79 | opacity: 1;
80 | transform: none;
81 | }
82 | }
83 |
84 | .fadeInRight {
85 | animation-name: fadeInRight;
86 | }
87 |
88 |
89 | @keyframes fadeInUp {
90 | from {
91 | opacity: 0;
92 | transform: translate3d(0, 50%, 0);
93 | }
94 |
95 | to {
96 | opacity: 1;
97 | transform: none;
98 | }
99 | }
100 |
101 | .fadeInUp {
102 | animation-name: fadeInUp;
103 | }
104 |
105 |
106 |
107 | @keyframes zoomIn {
108 | from {
109 | opacity: 0;
110 | transform: scale3d(.3, .3, .3);
111 | }
112 |
113 | 50% {
114 | opacity: 1;
115 | }
116 | }
117 |
118 | .zoomIn {
119 | animation-name: zoomIn;
120 | }
121 |
--------------------------------------------------------------------------------
/tslint.json:
--------------------------------------------------------------------------------
1 | {
2 | "defaultSeverity": "error",
3 | "extends": [
4 | "tslint:recommended",
5 | "tslint-react"
6 | ],
7 | "linterOptions": {
8 | "exclude": [
9 | "**/*.json",
10 | "android/*",
11 | "ios/*",
12 | "coverage/**/*"
13 | ]
14 | },
15 | "jsRules": {
16 | "quotemark": [true, "single", "jsx-single", "avoid-escape"],
17 | "semicolon": [true, "never"],
18 | "jsx-no-multiline-js": false,
19 | "no-shadowed-variable": false,
20 | "no-null-keyword": true,
21 | "no-string-literal": false,
22 | "no-this-assignment": false,
23 | "no-submodule-imports": false,
24 | "variable-name": false,
25 | "no-console": [true, "log"],
26 | "no-implicit-dependencies": [true, "dev"],
27 | "max-classes-per-file": false,
28 | "object-literal-sort-keys": false,
29 | "ordered-imports": false,
30 | "space-before-function-paren": false,
31 | "trailing-comma": [
32 | true,
33 | {
34 | "multiline": "never",
35 | "singleline": "never"
36 | }
37 | ],
38 | "max-line-length": [true, 200]
39 | },
40 | "rules": {
41 | "quotemark": [true, "single", "jsx-single", "avoid-escape"],
42 | "semicolon": [true, "never"],
43 | "jsx-no-multiline-js": false,
44 | "no-shadowed-variable": false,
45 | "no-null-keyword": true,
46 | "no-var-requires": false,
47 | "no-string-literal": false,
48 | "no-this-assignment": false,
49 | "no-submodule-imports": false,
50 | "variable-name": false,
51 | "no-console": [true, "log"],
52 | "interface-name": false,
53 | "no-namespace": [false],
54 | "no-implicit-dependencies": [true, "dev"],
55 | "max-classes-per-file": false,
56 | "object-literal-sort-keys": false,
57 | "ordered-imports": false,
58 | // begin bandaids
59 | "no-empty": false,
60 | "space-before-function-paren": false,
61 | "member-access": false,
62 | "trailing-comma": [
63 | true,
64 | {
65 | "multiline": "never",
66 | "singleline": "never"
67 | }
68 | ],
69 | "max-line-length": [true, 200]
70 | },
71 | "rulesDirectory": []
72 | }
73 |
--------------------------------------------------------------------------------
/docs/vendors/slick/fonts/slick.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
15 |
--------------------------------------------------------------------------------
/ios/TApp/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleDisplayName
8 | noet.io
9 | CFBundleExecutable
10 | $(EXECUTABLE_NAME)
11 | CFBundleIdentifier
12 | $(PRODUCT_BUNDLE_IDENTIFIER)
13 | CFBundleInfoDictionaryVersion
14 | 6.0
15 | CFBundleName
16 | $(PRODUCT_NAME)
17 | CFBundlePackageType
18 | APPL
19 | CFBundleShortVersionString
20 | 1.2
21 | CFBundleSignature
22 | ????
23 | CFBundleURLTypes
24 |
25 |
26 | CFBundleTypeRole
27 | Editor
28 | CFBundleURLName
29 | textileNotes
30 | CFBundleURLSchemes
31 |
32 | textileNotes
33 |
34 |
35 |
36 | CFBundleVersion
37 | 11
38 | LSRequiresIPhoneOS
39 |
40 | NSAppTransportSecurity
41 |
42 | NSAllowsArbitraryLoads
43 |
44 | NSExceptionDomains
45 |
46 | localhost
47 |
48 | NSExceptionAllowsInsecureHTTPLoads
49 |
50 |
51 |
52 |
53 | NSLocationWhenInUseUsageDescription
54 |
55 | UIBackgroundModes
56 |
57 | fetch
58 |
59 | UILaunchStoryboardName
60 | LaunchScreen
61 | UIRequiredDeviceCapabilities
62 |
63 | armv7
64 |
65 | UISupportedInterfaceOrientations
66 |
67 | UIInterfaceOrientationPortrait
68 | UIInterfaceOrientationLandscapeLeft
69 | UIInterfaceOrientationLandscapeRight
70 |
71 | UIViewControllerBasedStatusBarAppearance
72 |
73 |
74 |
75 |
--------------------------------------------------------------------------------
/src/Sagas/ThreadMigrationSaga.ts:
--------------------------------------------------------------------------------
1 | import { takeLatest, fork, put, all, call, take, select, delay } from 'redux-saga/effects'
2 | import { ActionType, getType } from 'typesafe-actions'
3 | import MainActions, { MainSelectors, UINote, NoteSchema, ThreadNote } from '../Redux/MainRedux'
4 | import Textile, { IAddThreadConfig, Thread, AddThreadConfig, IFilesList, ThreadList, IThread, FilesList } from '@textile/react-native-sdk'
5 | import { Buffer } from 'buffer'
6 | import Config from 'react-native-config'
7 | import { findExistingThread, addToThread, uuidv4 } from './MainSagas'
8 |
9 | export function * runPendingMigration() {
10 | try {
11 | const migrationKey = yield select(MainSelectors.getMigrations)
12 | if (!migrationKey) {
13 | return
14 | }
15 | const appThread = yield select(MainSelectors.getAppThread)
16 | if (!appThread) {
17 | return
18 | }
19 | // todo abort
20 | const oldThread = yield call(findExistingThread, migrationKey)
21 | if (!oldThread) {
22 | return
23 | }
24 | const pageSize = 1000
25 | const files: FilesList = yield call(Textile.files.list, oldThread.id, '', pageSize)
26 | if (files.items.length === 0) {
27 | yield put(MainActions.migrationSuccess())
28 | return
29 | }
30 | for (const file of files.items) {
31 | for (const hash of file.files.map((ffs) => ffs.file.hash)) {
32 | const data = yield call(Textile.files.content, hash)
33 | const noteText = Buffer.from(data.split(',')[1], 'base64').toString()
34 | const created: number = file.date.seconds as number
35 | const updated: number = file.date.seconds as number
36 | const newNote: ThreadNote = {
37 | key: uuidv4(),
38 | text: noteText,
39 | value: {},
40 | created,
41 | updated
42 | }
43 | try {
44 | yield call(addToThread, newNote, appThread.id)
45 | yield call(Textile.ignores.add, file.block) // ensures it doesn't get migrated if we restart
46 | } catch (error) {
47 | // ignore for now
48 | console.error(error)
49 | }
50 | }
51 | }
52 | yield call(Textile.threads.remove, oldThread.id)
53 | yield put(MainActions.migrationSuccess())
54 | } catch (error) {
55 | // pass for now
56 | console.error(error)
57 | }
58 | }
59 |
--------------------------------------------------------------------------------
/docs/vendors/slick/css/slick.css:
--------------------------------------------------------------------------------
1 | /* Slider */
2 | .slick-slider
3 | {
4 | position: relative;
5 |
6 | display: block;
7 | box-sizing: border-box;
8 |
9 | -webkit-user-select: none;
10 | -moz-user-select: none;
11 | -ms-user-select: none;
12 | user-select: none;
13 |
14 | -webkit-touch-callout: none;
15 | -khtml-user-select: none;
16 | -ms-touch-action: pan-y;
17 | touch-action: pan-y;
18 | -webkit-tap-highlight-color: transparent;
19 | }
20 |
21 | .slick-list
22 | {
23 | position: relative;
24 | display: block;
25 | overflow: hidden;
26 | margin: 0 120px;
27 | padding: 0!important;
28 | }
29 | @media (max-width: 768px) {
30 | .slick-list {
31 | margin: 0 0px;
32 | }
33 | }
34 | .slick-list:focus
35 | {
36 | outline: none;
37 | }
38 | .slick-list.dragging
39 | {
40 | cursor: pointer;
41 | cursor: hand;
42 | }
43 |
44 | .slick-slider .slick-track,
45 | .slick-slider .slick-list
46 | {
47 | -webkit-transform: translate3d(0, 0, 0);
48 | -moz-transform: translate3d(0, 0, 0);
49 | -ms-transform: translate3d(0, 0, 0);
50 | -o-transform: translate3d(0, 0, 0);
51 | transform: translate3d(0, 0, 0);
52 | }
53 |
54 | .slick-track
55 | {
56 | position: relative;
57 | top: 0;
58 | left: 0;
59 |
60 | display: block;
61 | }
62 | .slick-track:before,
63 | .slick-track:after
64 | {
65 | display: table;
66 |
67 | content: '';
68 | }
69 | .slick-track:after
70 | {
71 | clear: both;
72 | }
73 | .slick-loading .slick-track
74 | {
75 | visibility: hidden;
76 | }
77 |
78 | .slick-slide
79 | {
80 | display: none;
81 | float: left;
82 |
83 | height: 100%;
84 | min-height: 1px;
85 | }
86 | [dir='rtl'] .slick-slide
87 | {
88 | float: right;
89 | }
90 | .slick-slide img
91 | {
92 | display: block;
93 | }
94 | .slick-slide.slick-loading img
95 | {
96 | display: none;
97 | }
98 | .slick-slide.dragging img
99 | {
100 | pointer-events: none;
101 | }
102 | .slick-initialized .slick-slide
103 | {
104 | display: block;
105 | }
106 | .slick-loading .slick-slide
107 | {
108 | visibility: hidden;
109 | }
110 | .slick-vertical .slick-slide
111 | {
112 | display: block;
113 |
114 | height: auto;
115 |
116 | border: 1px solid transparent;
117 | }
118 | .slick-arrow.slick-hidden {
119 | display: none;
120 | }
121 |
--------------------------------------------------------------------------------
/src/Redux/ReduxPersist.ts:
--------------------------------------------------------------------------------
1 | import { AsyncStorage } from 'react-native'
2 | import { createMigrate, PersistConfig, MigrationManifest } from 'redux-persist'
3 |
4 | const migrations: MigrationManifest = {
5 | 0: (persistedState) => {
6 | const state = persistedState as any
7 | return state
8 | },
9 | 1: (persistedState) => {
10 | const state = persistedState as any
11 | return {
12 | ...state,
13 | main: {
14 | ...state.main,
15 | appThreadMeta: {
16 | name: 'private_notes_blob',
17 | key: 'textile_notes-primary-blob',
18 | schema: {
19 | name: 'notes',
20 | pin: true,
21 | mill: '/blob',
22 | plaintext: false
23 | }
24 | },
25 | publicThreadMeta: {
26 | name: 'public_notes_blob',
27 | key: 'textile_public_notes-primary-blob',
28 | schema: {
29 | name: 'public-notes',
30 | pin: true,
31 | mill: '/blob',
32 | plaintext: true
33 | }
34 | }
35 | }
36 | }
37 | },
38 | 2: (persistedState) => {
39 | const state = persistedState as any
40 | return {
41 | ...state,
42 | main: {
43 | ...state.main,
44 | threadNotes: [],
45 | migrations: 'textile_notes-primary-blob',
46 | appThreadMeta: {
47 | name: 'private_notes_blob',
48 | key: 'io.textile.notes_desktop_primary_v1',
49 | schema: {
50 | name: 'io.textile.notes_primary_v0.0.1',
51 | mill: '/json',
52 | json_schema: {
53 | definitions: {},
54 | type: 'object',
55 | title: '',
56 | required: ['key', 'text', 'value', 'updated', 'created'],
57 | properties: {
58 | key: {
59 | type: 'string'
60 | },
61 | text: {
62 | type: 'string'
63 | },
64 | value: {
65 | type: 'object'
66 | },
67 | updated: {
68 | type: 'integer'
69 | },
70 | created: {
71 | type: 'integer'
72 | }
73 | }
74 | }
75 | }
76 | }
77 | }
78 | }
79 | }
80 | }
81 |
82 | const persistConfig: PersistConfig = {
83 | key: 'primary',
84 | storage: AsyncStorage,
85 | version: 2,
86 | migrate: createMigrate(migrations, { debug: true })
87 | }
88 |
89 | export default persistConfig
90 |
--------------------------------------------------------------------------------
/android/gradlew.bat:
--------------------------------------------------------------------------------
1 | @if "%DEBUG%" == "" @echo off
2 | @rem ##########################################################################
3 | @rem
4 | @rem Gradle startup script for Windows
5 | @rem
6 | @rem ##########################################################################
7 |
8 | @rem Set local scope for the variables with windows NT shell
9 | if "%OS%"=="Windows_NT" setlocal
10 |
11 | set DIRNAME=%~dp0
12 | if "%DIRNAME%" == "" set DIRNAME=.
13 | set APP_BASE_NAME=%~n0
14 | set APP_HOME=%DIRNAME%
15 |
16 | @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
17 | set DEFAULT_JVM_OPTS=
18 |
19 | @rem Find java.exe
20 | if defined JAVA_HOME goto findJavaFromJavaHome
21 |
22 | set JAVA_EXE=java.exe
23 | %JAVA_EXE% -version >NUL 2>&1
24 | if "%ERRORLEVEL%" == "0" goto init
25 |
26 | echo.
27 | echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
28 | echo.
29 | echo Please set the JAVA_HOME variable in your environment to match the
30 | echo location of your Java installation.
31 |
32 | goto fail
33 |
34 | :findJavaFromJavaHome
35 | set JAVA_HOME=%JAVA_HOME:"=%
36 | set JAVA_EXE=%JAVA_HOME%/bin/java.exe
37 |
38 | if exist "%JAVA_EXE%" goto init
39 |
40 | echo.
41 | echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
42 | echo.
43 | echo Please set the JAVA_HOME variable in your environment to match the
44 | echo location of your Java installation.
45 |
46 | goto fail
47 |
48 | :init
49 | @rem Get command-line arguments, handling Windows variants
50 |
51 | if not "%OS%" == "Windows_NT" goto win9xME_args
52 |
53 | :win9xME_args
54 | @rem Slurp the command line arguments.
55 | set CMD_LINE_ARGS=
56 | set _SKIP=2
57 |
58 | :win9xME_args_slurp
59 | if "x%~1" == "x" goto execute
60 |
61 | set CMD_LINE_ARGS=%*
62 |
63 | :execute
64 | @rem Setup the command line
65 |
66 | set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
67 |
68 | @rem Execute Gradle
69 | "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
70 |
71 | :end
72 | @rem End local scope for the variables with windows NT shell
73 | if "%ERRORLEVEL%"=="0" goto mainEnd
74 |
75 | :fail
76 | rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
77 | rem the _cmd.exe /c_ return code!
78 | if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
79 | exit /b 1
80 |
81 | :mainEnd
82 | if "%OS%"=="Windows_NT" endlocal
83 |
84 | :omega
85 |
--------------------------------------------------------------------------------
/PRIVACY.md:
--------------------------------------------------------------------------------
1 | # Textile Privacy Policy
2 |
3 | ##### March 12, 2019
4 |
5 | ### What do we mean by "personal information?"
6 |
7 | For us, "personal information" means information which identifies you, like your name or email address.
8 |
9 | Any information that falls outside of this is "non-personal information."
10 |
11 | If we store your personal information with information that is non-personal, we will consider the combination as personal information. If we remove all personal information from a set of data then the remaining is non-personal information.
12 |
13 | ### How do we learn information about you?
14 |
15 | We learn information about you when:
16 |
17 | - you give it to us directly (e.g., when you choose to send us crash reports or add your email to Textile Notes);
18 |
19 | ### What do we do with your information once we have it?
20 |
21 | When you give us information, we will use it in the ways for which you've given us permission. Generally, we use your information to help us provide and improve our products and services for you.
22 |
23 | ### When do we share your information with others?
24 |
25 | - When we have asked and received your permission to share it.
26 | - When the law requires it. We follow the law whenever we receive requests about you from a government or related to a lawsuit. We'll notify you when we're asked to hand over your personal information in this way unless we're legally prohibited from doing so. When we receive requests like this, we'll only release your personal information if we have a good faith belief that the law requires us to do so. Nothing in this policy is intended to limit any legal defenses or objections that you may have to a third party's request to disclose your information.
27 | - If our organizational structure or status changes (if we undergo a restructuring, are acquired, or go bankrupt) we may pass your information to a successor or affiliate.
28 |
29 | ### What else should you know?
30 |
31 | If you are under 13, we don't want your personal information, and you must not provide it to us. If you are a parent and believe that your child who is under 13 has provided us with personal information, please contact us to have your child's information removed.
32 |
33 | ### What if we change this privacy policy or any of our privacy notices?
34 |
35 | We may need to change this policy and our notices. The updates will be posted online. If the changes are substantive, we will announce the update through Textile's usual channels for such announcements such as blog posts and forums. Your continued use of the product or service after the effective date of such changes constitutes your acceptance of such changes.
36 |
37 | ### Unsolicited Emails
38 |
39 | Textile will not email you with unsolicited advertisements.
40 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "textile-notes",
3 | "version": "0.0.1",
4 | "private": true,
5 | "scripts": {
6 | "start": "node node_modules/react-native/local-cli/cli.js start",
7 | "tsc": "tsc -p . --noEmit",
8 | "lint": "tslint -c tslint.json --project .",
9 | "test": "jest",
10 | "device:ios": "react-native run-ios",
11 | "log:device:ios": "react-native log-ios",
12 | "pow-ios": "ttab yarn start; ttab yarn device:ios; yarn log:device:ios;"
13 | },
14 | "dependencies": {
15 | "@babel/polyfill": "^7.2.5",
16 | "@textile/react-native-sdk": "3.0.12",
17 | "buffer": "^5.2.1",
18 | "react": "^16.6.3",
19 | "react-native": "^0.59.9",
20 | "react-native-background-fetch": "^2.4.3",
21 | "react-native-background-timer": "2.1.0-alpha.6",
22 | "react-native-config": "^0.11.7",
23 | "react-native-drawer": "^2.5.1",
24 | "react-native-fs": "^2.11.17",
25 | "react-native-responsive-fontsize": "^0.1.8",
26 | "react-native-shake": "^3.3.0",
27 | "react-native-typography": "^1.4.0",
28 | "react-navigation": "^3.2.3",
29 | "react-redux": "^6.0.0",
30 | "redux": "^4.0.1",
31 | "redux-persist": "^5.10.0",
32 | "redux-saga": "^1.0.1",
33 | "typesafe-actions": "4.2.0"
34 | },
35 | "devDependencies": {
36 | "@babel/cli": "^7.2.3",
37 | "@babel/core": "^7.3.4",
38 | "@types/enzyme": "^3.1.14",
39 | "@types/enzyme-adapter-react-16": "^1.0.3",
40 | "@types/jest": "^24.0.0",
41 | "@types/react": "^16.8.3",
42 | "@types/react-native": "^0.57.36",
43 | "@types/react-native-background-timer": "^2.0.0",
44 | "@types/react-native-fs": "^2.8.2",
45 | "@types/react-navigation": "^3.0.2",
46 | "@types/react-redux": "^6.0.9",
47 | "@types/react-test-renderer": "^16.0.3",
48 | "babel-core": "^7.0.0-bridge.0",
49 | "babel-jest": "24.1.0",
50 | "enzyme": "^3.7.0",
51 | "enzyme-adapter-react-16": "^1.6.0",
52 | "jest": "24.1.0",
53 | "metro-react-native-babel-preset": "0.48.0",
54 | "react-dom": "^16.5.2",
55 | "react-native-typescript-transformer": "^1.2.11",
56 | "react-test-renderer": "16.6.3",
57 | "ts-jest": "^23.10.5",
58 | "tslint": "^5.11.0",
59 | "tslint-react": "^3.6.0",
60 | "typescript": "^3.2.4"
61 | },
62 | "jest": {
63 | "preset": "react-native",
64 | "moduleFileExtensions": [
65 | "ts",
66 | "tsx",
67 | "js"
68 | ],
69 | "transform": {
70 | "^.+\\.(js)$": "/node_modules/babel-jest",
71 | "\\.(ts|tsx)$": "/node_modules/ts-jest/preprocessor.js"
72 | },
73 | "testRegex": "(/__tests__/.*|\\.(test|spec))\\.(ts|tsx|js)$",
74 | "testPathIgnorePatterns": [
75 | "\\.snap$",
76 | "/node_modules/"
77 | ],
78 | "cacheDirectory": ".jest/cache"
79 | }
80 | }
81 |
--------------------------------------------------------------------------------
/docs/vendors/owlcarousel/css/owl.carousel.min.css:
--------------------------------------------------------------------------------
1 | /**
2 | * Owl Carousel v2.2.1
3 | * Copyright 2013-2017 David Deutsch
4 | * Licensed under ()
5 | */
6 | .owl-carousel,.owl-carousel .owl-item{-webkit-tap-highlight-color:transparent;position:relative}.owl-carousel{display:none;width:100%;z-index:1}.owl-carousel .owl-stage{position:relative;-ms-touch-action:pan-Y;-moz-backface-visibility:hidden}.owl-carousel .owl-stage:after{content:".";display:block;clear:both;visibility:hidden;line-height:0;height:0}.owl-carousel .owl-stage-outer{position:relative;overflow:hidden;-webkit-transform:translate3d(0,0,0)}.owl-carousel .owl-item,.owl-carousel .owl-wrapper{-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;-webkit-transform:translate3d(0,0,0);-moz-transform:translate3d(0,0,0);-ms-transform:translate3d(0,0,0)}.owl-carousel .owl-item{min-height:1px;float:left;-webkit-backface-visibility:hidden;-webkit-touch-callout:none}.owl-carousel .owl-item img{display:block;width:100%}.owl-carousel .owl-dots.disabled,.owl-carousel .owl-nav.disabled{display:none}.no-js .owl-carousel,.owl-carousel.owl-loaded{display:block}.owl-carousel .owl-dot,.owl-carousel .owl-nav .owl-next,.owl-carousel .owl-nav .owl-prev{cursor:pointer;cursor:hand;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.owl-carousel.owl-loading{opacity:0;display:block}.owl-carousel.owl-hidden{opacity:0}.owl-carousel.owl-refresh .owl-item{visibility:hidden}.owl-carousel.owl-drag .owl-item{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.owl-carousel.owl-grab{cursor:move;cursor:grab}.owl-carousel.owl-rtl{direction:rtl}.owl-carousel.owl-rtl .owl-item{float:right}.owl-carousel .animated{animation-duration:1s;animation-fill-mode:both}.owl-carousel .owl-animated-in{z-index:0}.owl-carousel .owl-animated-out{z-index:1}.owl-carousel .fadeOut{animation-name:fadeOut}@keyframes fadeOut{0%{opacity:1}100%{opacity:0}}.owl-height{transition:height .5s ease-in-out}.owl-carousel .owl-item .owl-lazy{opacity:0;transition:opacity .4s ease}.owl-carousel .owl-item img.owl-lazy{transform-style:preserve-3d}.owl-carousel .owl-video-wrapper{position:relative;height:100%;background:#000}.owl-carousel .owl-video-play-icon{position:absolute;height:80px;width:80px;left:50%;top:50%;margin-left:-40px;margin-top:-40px;background:url(owl.video.play.png) no-repeat;cursor:pointer;z-index:1;-webkit-backface-visibility:hidden;transition:transform .1s ease}.owl-carousel .owl-video-play-icon:hover{-ms-transform:scale(1.3,1.3);transform:scale(1.3,1.3)}.owl-carousel .owl-video-playing .owl-video-play-icon,.owl-carousel .owl-video-playing .owl-video-tn{display:none}.owl-carousel .owl-video-tn{opacity:0;height:100%;background-position:center center;background-repeat:no-repeat;background-size:contain;transition:opacity .4s ease}.owl-carousel .owl-video-frame{position:relative;z-index:1;height:100%;width:100%}
--------------------------------------------------------------------------------
/docs/vendors/fullpage/fullpage.min.css:
--------------------------------------------------------------------------------
1 | /*!
2 | * fullPage 2.9.4
3 | * https://github.com/alvarotrigo/fullPage.js
4 | * MIT licensed
5 | *
6 | * Copyright (C) 2013 alvarotrigo.com - A project by Alvaro Trigo
7 | */.fp-enabled body,html.fp-enabled{margin:0;padding:0;overflow:hidden;-webkit-tap-highlight-color:rgba(0,0,0,0)}#superContainer{height:100%;position:relative;-ms-touch-action:none;touch-action:none}.fp-section{position:relative;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.fp-slide{float:left}.fp-slide,.fp-slidesContainer{height:100%;display:block}.fp-slides{z-index:1;height:100%;overflow:hidden;position:relative;-webkit-transition:all .3s ease-out;transition:all .3s ease-out}.fp-section.fp-table,.fp-slide.fp-table{display:table;table-layout:fixed;width:100%}.fp-tableCell{display:table-cell;vertical-align:middle;width:100%;height:100%}.fp-slidesContainer{float:left;position:relative}.fp-controlArrow{-webkit-user-select:none;-moz-user-select:none;-khtml-user-select:none;-ms-user-select:none;position:absolute;z-index:4;top:50%;cursor:pointer;width:0;height:0;border-style:solid;margin-top:-38px;-webkit-transform:translate3d(0,0,0);-ms-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.fp-controlArrow.fp-prev{left:15px;width:0;border-width:38.5px 34px 38.5px 0;border-color:transparent #fff transparent transparent}.fp-controlArrow.fp-next{right:15px;border-width:38.5px 0 38.5px 34px;border-color:transparent transparent transparent #fff}.fp-scrollable{overflow:hidden;position:relative}.fp-scroller{overflow:hidden}.iScrollIndicator{border:0!important}.fp-notransition{-webkit-transition:none!important;transition:none!important}#fp-nav{position:fixed;z-index:100;margin-top:-32px;top:50%;opacity:1;-webkit-transform:translate3d(0,0,0)}#fp-nav.right{right:17px}#fp-nav.left{left:17px}.fp-slidesNav{position:absolute;z-index:4;left:50%;opacity:1;-webkit-transform:translate3d(0,0,0);-ms-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.fp-slidesNav.bottom{bottom:17px}.fp-slidesNav.top{top:17px}#fp-nav ul,.fp-slidesNav ul{margin:0;padding:0}#fp-nav ul li,.fp-slidesNav ul li{display:block;width:14px;height:13px;margin:10px;position:relative}.fp-slidesNav ul li{display:inline-block}#fp-nav ul li a,.fp-slidesNav ul li a{display:block;position:relative;z-index:1;width:100%;height:100%;cursor:pointer;text-decoration:none}#fp-nav ul li a.active span,#fp-nav ul li:hover a.active span,.fp-slidesNav ul li a.active span,.fp-slidesNav ul li:hover a.active span{height:12px;width:12px;margin:0;border-radius:100%; background: #FFF;}#fp-nav ul li a span,.fp-slidesNav ul li a span{border-radius:50%;position:absolute;z-index:1;height:12px;width:12px;border:0;background: rgba(255, 255, 255, 0.4);margin:0;-webkit-transition:all .1s ease-in-out;-moz-transition:all .1s ease-in-out;-o-transition:all .1s ease-in-out;transition:all .1s ease-in-out}#fp-nav ul li:hover a span,.fp-slidesNav ul li:hover a span{width:12px;height:12px;margin:0}#fp-nav ul li .fp-tooltip{position:absolute;top:-2px;color:#fff;font-size:14px;font-family:arial,helvetica,sans-serif;white-space:nowrap;max-width:220px;overflow:hidden;display:block;opacity:0;width:0;cursor:pointer}#fp-nav ul li:hover .fp-tooltip,#fp-nav.fp-show-active a.active+.fp-tooltip{-webkit-transition:opacity .2s ease-in;transition:opacity .2s ease-in;width:auto;opacity:1}#fp-nav ul li .fp-tooltip.right{right:20px}#fp-nav ul li .fp-tooltip.left{left:20px}.fp-auto-height .fp-slide,.fp-auto-height .fp-tableCell,.fp-auto-height.fp-section{height:auto!important}.fp-responsive .fp-auto-height-responsive .fp-slide,.fp-responsive .fp-auto-height-responsive .fp-tableCell,.fp-responsive .fp-auto-height-responsive.fp-section{height:auto!important}
8 | /*# sourceMappingURL=jquery.fullpage.min.css.map */
9 |
--------------------------------------------------------------------------------
/src/Containers/Styles/index.tsx:
--------------------------------------------------------------------------------
1 | import {
2 | StyleSheet,
3 | Text,
4 | TextStyle,
5 | TouchableOpacity,
6 | View,
7 | ViewStyle,
8 | ImageStyle
9 | } from 'react-native'
10 |
11 | import { material, materialColors, systemWeights } from 'react-native-typography'
12 |
13 | interface Style {
14 | applicationView: ViewStyle
15 | textArea: TextStyle
16 | container: ViewStyle
17 | scrollView: ViewStyle
18 | title: TextStyle
19 | imageView: ViewStyle
20 | animatedBox: ViewStyle
21 | form: ViewStyle
22 | emailInput: TextStyle
23 | emailLabel: TextStyle
24 | instructions: TextStyle
25 | submit: TextStyle
26 | enabled: TextStyle
27 | poweredBy: ViewStyle
28 | credit: TextStyle
29 | notesBox: ViewStyle
30 | note: ViewStyle
31 | noteText: TextStyle
32 | publicLink: ViewStyle
33 | }
34 |
35 | const styles = StyleSheet.create