├── .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 | ![promo](https://user-images.githubusercontent.com/370259/54317359-20453080-45a0-11e9-8cd4-9313eaa6d276.png) 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 | 4 | Generated by Fontastic.me 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 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