├── .watchmanconfig ├── .node-version ├── .ruby-version ├── index.js ├── mise.toml ├── index.share.js ├── .bundle └── config ├── bun.lockb ├── .yarnrc.yml ├── .eslintrc.js ├── src ├── assets │ └── icons │ │ ├── add.png │ │ ├── rtt.png │ │ ├── web.png │ │ ├── add@2x.png │ │ ├── add@3x.png │ │ ├── block.png │ │ ├── code.png │ │ ├── group.png │ │ ├── link.png │ │ ├── more.png │ │ ├── reply.png │ │ ├── report.png │ │ ├── rtt@2x.png │ │ ├── rtt@3x.png │ │ ├── web@2x.png │ │ ├── web@3x.png │ │ ├── block@2x.png │ │ ├── block@3x.png │ │ ├── code@2x.png │ │ ├── code@3x.png │ │ ├── group@2x.png │ │ ├── group@3x.png │ │ ├── link@2x.png │ │ ├── link@3x.png │ │ ├── more@2x.png │ │ ├── more@3x.png │ │ ├── more_ios.png │ │ ├── nav │ │ ├── help.png │ │ ├── help@2x.png │ │ ├── help@3x.png │ │ ├── replies.png │ │ ├── bookmarks.png │ │ ├── discover.png │ │ ├── mentions.png │ │ ├── timeline.png │ │ ├── bookmarks@2x.png │ │ ├── bookmarks@3x.png │ │ ├── discover@2x.png │ │ ├── discover@3x.png │ │ ├── mentions@2x.png │ │ ├── mentions@3x.png │ │ ├── replies@2x.png │ │ ├── replies@3x.png │ │ ├── timeline@2x.png │ │ └── timeline@3x.png │ │ ├── post_add.png │ │ ├── reply@2x.png │ │ ├── reply@3x.png │ │ ├── add_account.png │ │ ├── arrow_back.png │ │ ├── checkmark.png │ │ ├── more_ios@2x.png │ │ ├── more_ios@3x.png │ │ ├── more_white.png │ │ ├── post_add@2x.png │ │ ├── post_add@3x.png │ │ ├── report@2x.png │ │ ├── report@3x.png │ │ ├── arrow_back@2x.png │ │ ├── arrow_back@3x.png │ │ ├── checkmark@2x.png │ │ ├── checkmark@3x.png │ │ ├── more_white@2x.png │ │ ├── more_white@3x.png │ │ ├── add_account@2x.png │ │ ├── add_account@3x.png │ │ ├── more_ios_white.png │ │ ├── tab_bar │ │ ├── discover.png │ │ ├── mentions.png │ │ ├── timeline.png │ │ ├── discover@2x.png │ │ ├── discover@3x.png │ │ ├── mentions@2x.png │ │ ├── mentions@3x.png │ │ ├── timeline@2x.png │ │ └── timeline@3x.png │ │ ├── toolbar │ │ ├── settings.png │ │ ├── photo_library.png │ │ ├── settings@2x.png │ │ ├── settings@3x.png │ │ ├── photo_library@2x.png │ │ └── photo_library@3x.png │ │ ├── more_ios_white@2x.png │ │ └── more_ios_white@3x.png ├── stores │ ├── Collection.js │ ├── models │ │ ├── posting │ │ │ ├── Contact.js │ │ │ ├── Page.js │ │ │ └── Post.js │ │ ├── Device.js │ │ ├── Token.js │ │ └── Notification.js │ ├── enums │ │ └── blog_services.js │ ├── Settings.js │ ├── Reporting.js │ ├── Replies.js │ └── Discover.js ├── utils │ ├── ui.js │ ├── string_checker.js │ ├── string_utils.js │ ├── dev.js │ └── snapshots.js ├── index.js ├── index.share.js ├── components │ ├── text │ │ └── highlighting_text.js │ ├── info │ │ └── login_message.js │ ├── share │ │ ├── dev.js │ │ └── header.js │ ├── sheets │ │ ├── header.js │ │ ├── login_message.js │ │ ├── sheets.js │ │ ├── notifications.js │ │ ├── menu.js │ │ ├── tagmoji.js │ │ └── posts_destination.js │ ├── web │ │ ├── loading_view.js │ │ └── error_view.js │ ├── header │ │ ├── update_reply.js │ │ ├── post_button.js │ │ ├── post_reply.js │ │ ├── update_page.js │ │ ├── screen_title.js │ │ ├── update_post.js │ │ ├── new_collection.js │ │ ├── refresh_activity.js │ │ ├── remove_image.js │ │ ├── add_bookmark.js │ │ ├── new_post.js │ │ ├── close.js │ │ ├── close_post_clear.js │ │ ├── reply.js │ │ ├── profile_image.js │ │ ├── new_upload.js │ │ └── back.js │ ├── generic │ │ ├── loading.js │ │ └── generic_screen.js │ ├── common │ │ └── MBImage.js │ ├── cells │ │ └── checkmark_row_cell.js │ ├── images │ │ └── image_modal.js │ ├── tabs │ │ └── tab.js │ ├── search_bar.js │ ├── settings │ │ ├── user_muting.js │ │ └── user_posting.js │ ├── bookmarks │ │ └── tag_filter_header.js │ └── keyboard │ │ └── username_toolbar.js └── screens │ ├── loading │ └── Loading.js │ ├── bookmarks │ ├── bookmark.js │ ├── bookmarks.js │ └── add_bookmark.js │ ├── discover │ ├── topic.js │ └── discover.js │ ├── mentions │ └── mentions.js │ ├── timeline │ └── timeline.js │ ├── following │ └── following.js │ ├── conversation │ └── conversation.js │ ├── profile │ └── profile.js │ ├── stacks │ ├── MentionsStack.js │ ├── TimelineStack.js │ ├── PostEditStack.js │ ├── DiscoverStack.js │ ├── BookmarksStack.js │ ├── TabNavigator.js │ └── PostingStack.js │ ├── replies │ ├── edit.android.js │ ├── replies.js │ └── edit.ios.js │ └── share │ ├── post.android.js │ ├── index.android.js │ ├── post.ios.js │ └── index.js ├── android ├── app │ ├── debug.keystore │ ├── src │ │ ├── main │ │ │ ├── res │ │ │ │ ├── values │ │ │ │ │ ├── colors.xml │ │ │ │ │ ├── strings.xml │ │ │ │ │ └── styles.xml │ │ │ │ ├── mipmap-hdpi │ │ │ │ │ ├── ic_launcher.png │ │ │ │ │ ├── ic_launcher_adaptive_back.png │ │ │ │ │ └── ic_launcher_adaptive_fore.png │ │ │ │ ├── mipmap-mdpi │ │ │ │ │ ├── ic_launcher.png │ │ │ │ │ ├── ic_launcher_adaptive_back.png │ │ │ │ │ └── ic_launcher_adaptive_fore.png │ │ │ │ ├── mipmap-xhdpi │ │ │ │ │ ├── ic_launcher.png │ │ │ │ │ ├── ic_launcher_adaptive_back.png │ │ │ │ │ └── ic_launcher_adaptive_fore.png │ │ │ │ ├── mipmap-xxhdpi │ │ │ │ │ ├── ic_launcher.png │ │ │ │ │ ├── ic_launcher_adaptive_back.png │ │ │ │ │ └── ic_launcher_adaptive_fore.png │ │ │ │ ├── mipmap-xxxhdpi │ │ │ │ │ ├── ic_launcher.png │ │ │ │ │ ├── ic_launcher_adaptive_back.png │ │ │ │ │ └── ic_launcher_adaptive_fore.png │ │ │ │ ├── drawable-hdpi │ │ │ │ │ └── ic_notification.png │ │ │ │ ├── drawable-mdpi │ │ │ │ │ └── ic_notification.png │ │ │ │ ├── drawable-xhdpi │ │ │ │ │ └── ic_notification.png │ │ │ │ ├── drawable-xxhdpi │ │ │ │ │ └── ic_notification.png │ │ │ │ ├── drawable-xxxhdpi │ │ │ │ │ ├── ic_notification.png │ │ │ │ │ └── shell_launch_background_image.png │ │ │ │ ├── mipmap-anydpi-v26 │ │ │ │ │ └── ic_launcher.xml │ │ │ │ ├── values-night │ │ │ │ │ └── styles.xml │ │ │ │ └── drawable │ │ │ │ │ ├── splash_background.xml │ │ │ │ │ └── rn_edit_text_material.xml │ │ │ └── java │ │ │ │ └── blog │ │ │ │ └── micro │ │ │ │ └── android │ │ │ │ ├── MainActivity.kt │ │ │ │ └── MainApplication.kt │ │ ├── debug │ │ │ └── AndroidManifest.xml │ │ └── release │ │ │ └── java │ │ │ └── blog │ │ │ └── micro │ │ │ └── android │ │ │ └── ReactNativeFlipper.java │ └── proguard-rules.pro ├── gradle │ └── wrapper │ │ ├── gradle-wrapper.jar │ │ └── gradle-wrapper.properties ├── build.gradle ├── settings.gradle └── gradle.properties ├── jsconfig.json ├── ios ├── MicroBlog_RN │ ├── Images.xcassets │ │ ├── Contents.json │ │ ├── AppIcon.appiconset │ │ │ ├── icon-152.png │ │ │ ├── icon-167.png │ │ │ ├── icon-1024 1.png │ │ │ ├── icon-1024 2.png │ │ │ ├── icon-1024.png │ │ │ ├── icon-152 1.png │ │ │ ├── icon-152 2.png │ │ │ ├── icon-167 1.png │ │ │ └── icon-167 2.png │ │ ├── icon_512x512.imageset │ │ │ ├── icon_512x512.png │ │ │ └── Contents.json │ │ ├── color_syntax_tags.colorset │ │ │ └── Contents.json │ │ └── color_editing_paragraph.colorset │ │ │ └── Contents.json │ ├── UIBarButtonItem+Plainify.h │ ├── UIScrollViewDelegate+Zooming.h │ ├── MBClipboardHelper.h │ ├── MBHighlightingTextStorage.h │ ├── RCTInputAccessoryShadowView.h │ ├── UIScrollViewDelegate+Zooming.m │ ├── MicroBlog_RN.entitlements │ ├── RCTInputAccessoryShadowView.m │ ├── MBClipboardHelper.m │ ├── MBHighlightingTextManager.h │ ├── MBHighlightingTextView.h │ ├── UIBarButtonItem+Plainify.m │ └── Info.plist ├── File.swift ├── MicroBlog_RN-Bridging-Header.h ├── MicroBlog_RN.xcworkspace │ ├── contents.xcworkspacedata │ └── xcshareddata │ │ └── IDEWorkspaceChecks.plist ├── MicroBlog_Share │ ├── MicroBlog_Share-Bridging-Header.h │ ├── MicroBlog_Share.entitlements │ ├── GetURL.js │ ├── Info.plist │ └── Base.lproj │ │ └── MainInterface.storyboard ├── ci_scripts │ └── ci_post_clone.sh ├── .xcode.env ├── PrivacyInfo.xcprivacy └── Podfile ├── app.json ├── babel.config.js ├── Gemfile ├── metro.config.js ├── patches ├── react-native-fs+2.20.0.patch ├── react-native-image-viewing+0.2.2.patch └── react-native-sensitive-info@5.5.8.patch ├── LICENSE ├── .gitignore └── Gemfile.lock /.watchmanconfig: -------------------------------------------------------------------------------- 1 | {} -------------------------------------------------------------------------------- /.node-version: -------------------------------------------------------------------------------- 1 | 16 2 | -------------------------------------------------------------------------------- /.ruby-version: -------------------------------------------------------------------------------- 1 | ruby-3.4.5 2 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | require('./src/index.js') -------------------------------------------------------------------------------- /mise.toml: -------------------------------------------------------------------------------- 1 | [tools] 2 | ruby = "3.4.5" 3 | -------------------------------------------------------------------------------- /index.share.js: -------------------------------------------------------------------------------- 1 | require('./src/index.share.js') -------------------------------------------------------------------------------- /.bundle/config: -------------------------------------------------------------------------------- 1 | BUNDLE_PATH: "vendor/bundle" 2 | BUNDLE_FORCE_RUBY_PLATFORM: 1 3 | -------------------------------------------------------------------------------- /bun.lockb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microdotblog/microblog-react/HEAD/bun.lockb -------------------------------------------------------------------------------- /.yarnrc.yml: -------------------------------------------------------------------------------- 1 | nodeLinker: node-modules 2 | 3 | yarnPath: .yarn/releases/yarn-3.6.4.cjs -------------------------------------------------------------------------------- /.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | root: true, 3 | extends: '@react-native', 4 | }; 5 | -------------------------------------------------------------------------------- /src/assets/icons/add.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microdotblog/microblog-react/HEAD/src/assets/icons/add.png -------------------------------------------------------------------------------- /src/assets/icons/rtt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microdotblog/microblog-react/HEAD/src/assets/icons/rtt.png -------------------------------------------------------------------------------- /src/assets/icons/web.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microdotblog/microblog-react/HEAD/src/assets/icons/web.png -------------------------------------------------------------------------------- /android/app/debug.keystore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microdotblog/microblog-react/HEAD/android/app/debug.keystore -------------------------------------------------------------------------------- /src/assets/icons/add@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microdotblog/microblog-react/HEAD/src/assets/icons/add@2x.png -------------------------------------------------------------------------------- /src/assets/icons/add@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microdotblog/microblog-react/HEAD/src/assets/icons/add@3x.png -------------------------------------------------------------------------------- /src/assets/icons/block.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microdotblog/microblog-react/HEAD/src/assets/icons/block.png -------------------------------------------------------------------------------- /src/assets/icons/code.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microdotblog/microblog-react/HEAD/src/assets/icons/code.png -------------------------------------------------------------------------------- /src/assets/icons/group.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microdotblog/microblog-react/HEAD/src/assets/icons/group.png -------------------------------------------------------------------------------- /src/assets/icons/link.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microdotblog/microblog-react/HEAD/src/assets/icons/link.png -------------------------------------------------------------------------------- /src/assets/icons/more.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microdotblog/microblog-react/HEAD/src/assets/icons/more.png -------------------------------------------------------------------------------- /src/assets/icons/reply.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microdotblog/microblog-react/HEAD/src/assets/icons/reply.png -------------------------------------------------------------------------------- /src/assets/icons/report.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microdotblog/microblog-react/HEAD/src/assets/icons/report.png -------------------------------------------------------------------------------- /src/assets/icons/rtt@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microdotblog/microblog-react/HEAD/src/assets/icons/rtt@2x.png -------------------------------------------------------------------------------- /src/assets/icons/rtt@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microdotblog/microblog-react/HEAD/src/assets/icons/rtt@3x.png -------------------------------------------------------------------------------- /src/assets/icons/web@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microdotblog/microblog-react/HEAD/src/assets/icons/web@2x.png -------------------------------------------------------------------------------- /src/assets/icons/web@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microdotblog/microblog-react/HEAD/src/assets/icons/web@3x.png -------------------------------------------------------------------------------- /jsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "experimentalDecorators": true, 4 | "allowJs": true 5 | } 6 | } -------------------------------------------------------------------------------- /src/assets/icons/block@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microdotblog/microblog-react/HEAD/src/assets/icons/block@2x.png -------------------------------------------------------------------------------- /src/assets/icons/block@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microdotblog/microblog-react/HEAD/src/assets/icons/block@3x.png -------------------------------------------------------------------------------- /src/assets/icons/code@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microdotblog/microblog-react/HEAD/src/assets/icons/code@2x.png -------------------------------------------------------------------------------- /src/assets/icons/code@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microdotblog/microblog-react/HEAD/src/assets/icons/code@3x.png -------------------------------------------------------------------------------- /src/assets/icons/group@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microdotblog/microblog-react/HEAD/src/assets/icons/group@2x.png -------------------------------------------------------------------------------- /src/assets/icons/group@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microdotblog/microblog-react/HEAD/src/assets/icons/group@3x.png -------------------------------------------------------------------------------- /src/assets/icons/link@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microdotblog/microblog-react/HEAD/src/assets/icons/link@2x.png -------------------------------------------------------------------------------- /src/assets/icons/link@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microdotblog/microblog-react/HEAD/src/assets/icons/link@3x.png -------------------------------------------------------------------------------- /src/assets/icons/more@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microdotblog/microblog-react/HEAD/src/assets/icons/more@2x.png -------------------------------------------------------------------------------- /src/assets/icons/more@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microdotblog/microblog-react/HEAD/src/assets/icons/more@3x.png -------------------------------------------------------------------------------- /src/assets/icons/more_ios.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microdotblog/microblog-react/HEAD/src/assets/icons/more_ios.png -------------------------------------------------------------------------------- /src/assets/icons/nav/help.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microdotblog/microblog-react/HEAD/src/assets/icons/nav/help.png -------------------------------------------------------------------------------- /src/assets/icons/post_add.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microdotblog/microblog-react/HEAD/src/assets/icons/post_add.png -------------------------------------------------------------------------------- /src/assets/icons/reply@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microdotblog/microblog-react/HEAD/src/assets/icons/reply@2x.png -------------------------------------------------------------------------------- /src/assets/icons/reply@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microdotblog/microblog-react/HEAD/src/assets/icons/reply@3x.png -------------------------------------------------------------------------------- /src/assets/icons/add_account.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microdotblog/microblog-react/HEAD/src/assets/icons/add_account.png -------------------------------------------------------------------------------- /src/assets/icons/arrow_back.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microdotblog/microblog-react/HEAD/src/assets/icons/arrow_back.png -------------------------------------------------------------------------------- /src/assets/icons/checkmark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microdotblog/microblog-react/HEAD/src/assets/icons/checkmark.png -------------------------------------------------------------------------------- /src/assets/icons/more_ios@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microdotblog/microblog-react/HEAD/src/assets/icons/more_ios@2x.png -------------------------------------------------------------------------------- /src/assets/icons/more_ios@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microdotblog/microblog-react/HEAD/src/assets/icons/more_ios@3x.png -------------------------------------------------------------------------------- /src/assets/icons/more_white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microdotblog/microblog-react/HEAD/src/assets/icons/more_white.png -------------------------------------------------------------------------------- /src/assets/icons/nav/help@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microdotblog/microblog-react/HEAD/src/assets/icons/nav/help@2x.png -------------------------------------------------------------------------------- /src/assets/icons/nav/help@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microdotblog/microblog-react/HEAD/src/assets/icons/nav/help@3x.png -------------------------------------------------------------------------------- /src/assets/icons/nav/replies.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microdotblog/microblog-react/HEAD/src/assets/icons/nav/replies.png -------------------------------------------------------------------------------- /src/assets/icons/post_add@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microdotblog/microblog-react/HEAD/src/assets/icons/post_add@2x.png -------------------------------------------------------------------------------- /src/assets/icons/post_add@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microdotblog/microblog-react/HEAD/src/assets/icons/post_add@3x.png -------------------------------------------------------------------------------- /src/assets/icons/report@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microdotblog/microblog-react/HEAD/src/assets/icons/report@2x.png -------------------------------------------------------------------------------- /src/assets/icons/report@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microdotblog/microblog-react/HEAD/src/assets/icons/report@3x.png -------------------------------------------------------------------------------- /ios/MicroBlog_RN/Images.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /src/assets/icons/arrow_back@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microdotblog/microblog-react/HEAD/src/assets/icons/arrow_back@2x.png -------------------------------------------------------------------------------- /src/assets/icons/arrow_back@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microdotblog/microblog-react/HEAD/src/assets/icons/arrow_back@3x.png -------------------------------------------------------------------------------- /src/assets/icons/checkmark@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microdotblog/microblog-react/HEAD/src/assets/icons/checkmark@2x.png -------------------------------------------------------------------------------- /src/assets/icons/checkmark@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microdotblog/microblog-react/HEAD/src/assets/icons/checkmark@3x.png -------------------------------------------------------------------------------- /src/assets/icons/more_white@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microdotblog/microblog-react/HEAD/src/assets/icons/more_white@2x.png -------------------------------------------------------------------------------- /src/assets/icons/more_white@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microdotblog/microblog-react/HEAD/src/assets/icons/more_white@3x.png -------------------------------------------------------------------------------- /src/assets/icons/nav/bookmarks.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microdotblog/microblog-react/HEAD/src/assets/icons/nav/bookmarks.png -------------------------------------------------------------------------------- /src/assets/icons/nav/discover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microdotblog/microblog-react/HEAD/src/assets/icons/nav/discover.png -------------------------------------------------------------------------------- /src/assets/icons/nav/mentions.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microdotblog/microblog-react/HEAD/src/assets/icons/nav/mentions.png -------------------------------------------------------------------------------- /src/assets/icons/nav/timeline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microdotblog/microblog-react/HEAD/src/assets/icons/nav/timeline.png -------------------------------------------------------------------------------- /src/assets/icons/add_account@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microdotblog/microblog-react/HEAD/src/assets/icons/add_account@2x.png -------------------------------------------------------------------------------- /src/assets/icons/add_account@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microdotblog/microblog-react/HEAD/src/assets/icons/add_account@3x.png -------------------------------------------------------------------------------- /src/assets/icons/more_ios_white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microdotblog/microblog-react/HEAD/src/assets/icons/more_ios_white.png -------------------------------------------------------------------------------- /src/assets/icons/nav/bookmarks@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microdotblog/microblog-react/HEAD/src/assets/icons/nav/bookmarks@2x.png -------------------------------------------------------------------------------- /src/assets/icons/nav/bookmarks@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microdotblog/microblog-react/HEAD/src/assets/icons/nav/bookmarks@3x.png -------------------------------------------------------------------------------- /src/assets/icons/nav/discover@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microdotblog/microblog-react/HEAD/src/assets/icons/nav/discover@2x.png -------------------------------------------------------------------------------- /src/assets/icons/nav/discover@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microdotblog/microblog-react/HEAD/src/assets/icons/nav/discover@3x.png -------------------------------------------------------------------------------- /src/assets/icons/nav/mentions@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microdotblog/microblog-react/HEAD/src/assets/icons/nav/mentions@2x.png -------------------------------------------------------------------------------- /src/assets/icons/nav/mentions@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microdotblog/microblog-react/HEAD/src/assets/icons/nav/mentions@3x.png -------------------------------------------------------------------------------- /src/assets/icons/nav/replies@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microdotblog/microblog-react/HEAD/src/assets/icons/nav/replies@2x.png -------------------------------------------------------------------------------- /src/assets/icons/nav/replies@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microdotblog/microblog-react/HEAD/src/assets/icons/nav/replies@3x.png -------------------------------------------------------------------------------- /src/assets/icons/nav/timeline@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microdotblog/microblog-react/HEAD/src/assets/icons/nav/timeline@2x.png -------------------------------------------------------------------------------- /src/assets/icons/nav/timeline@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microdotblog/microblog-react/HEAD/src/assets/icons/nav/timeline@3x.png -------------------------------------------------------------------------------- /src/assets/icons/tab_bar/discover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microdotblog/microblog-react/HEAD/src/assets/icons/tab_bar/discover.png -------------------------------------------------------------------------------- /src/assets/icons/tab_bar/mentions.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microdotblog/microblog-react/HEAD/src/assets/icons/tab_bar/mentions.png -------------------------------------------------------------------------------- /src/assets/icons/tab_bar/timeline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microdotblog/microblog-react/HEAD/src/assets/icons/tab_bar/timeline.png -------------------------------------------------------------------------------- /src/assets/icons/toolbar/settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microdotblog/microblog-react/HEAD/src/assets/icons/toolbar/settings.png -------------------------------------------------------------------------------- /src/assets/icons/more_ios_white@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microdotblog/microblog-react/HEAD/src/assets/icons/more_ios_white@2x.png -------------------------------------------------------------------------------- /src/assets/icons/more_ios_white@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microdotblog/microblog-react/HEAD/src/assets/icons/more_ios_white@3x.png -------------------------------------------------------------------------------- /android/gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microdotblog/microblog-react/HEAD/android/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /src/assets/icons/tab_bar/discover@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microdotblog/microblog-react/HEAD/src/assets/icons/tab_bar/discover@2x.png -------------------------------------------------------------------------------- /src/assets/icons/tab_bar/discover@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microdotblog/microblog-react/HEAD/src/assets/icons/tab_bar/discover@3x.png -------------------------------------------------------------------------------- /src/assets/icons/tab_bar/mentions@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microdotblog/microblog-react/HEAD/src/assets/icons/tab_bar/mentions@2x.png -------------------------------------------------------------------------------- /src/assets/icons/tab_bar/mentions@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microdotblog/microblog-react/HEAD/src/assets/icons/tab_bar/mentions@3x.png -------------------------------------------------------------------------------- /src/assets/icons/tab_bar/timeline@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microdotblog/microblog-react/HEAD/src/assets/icons/tab_bar/timeline@2x.png -------------------------------------------------------------------------------- /src/assets/icons/tab_bar/timeline@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microdotblog/microblog-react/HEAD/src/assets/icons/tab_bar/timeline@3x.png -------------------------------------------------------------------------------- /src/assets/icons/toolbar/photo_library.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microdotblog/microblog-react/HEAD/src/assets/icons/toolbar/photo_library.png -------------------------------------------------------------------------------- /src/assets/icons/toolbar/settings@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microdotblog/microblog-react/HEAD/src/assets/icons/toolbar/settings@2x.png -------------------------------------------------------------------------------- /src/assets/icons/toolbar/settings@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microdotblog/microblog-react/HEAD/src/assets/icons/toolbar/settings@3x.png -------------------------------------------------------------------------------- /ios/File.swift: -------------------------------------------------------------------------------- 1 | // 2 | // File.swift 3 | // MicroBlog_RN 4 | // 5 | // Created by Vincent Ritter on 12/10/2021. 6 | // 7 | 8 | import Foundation 9 | -------------------------------------------------------------------------------- /src/assets/icons/toolbar/photo_library@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microdotblog/microblog-react/HEAD/src/assets/icons/toolbar/photo_library@2x.png -------------------------------------------------------------------------------- /src/assets/icons/toolbar/photo_library@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microdotblog/microblog-react/HEAD/src/assets/icons/toolbar/photo_library@3x.png -------------------------------------------------------------------------------- /android/app/src/main/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #f80 4 | -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microdotblog/microblog-react/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/microdotblog/microblog-react/HEAD/android/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /app.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Micro.blog", 3 | "displayName": "Micro.blog", 4 | "plugins": [ 5 | "expo-secure-store", 6 | "expo-web-browser" 7 | ] 8 | } 9 | -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microdotblog/microblog-react/HEAD/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microdotblog/microblog-react/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/microdotblog/microblog-react/HEAD/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-hdpi/ic_notification.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microdotblog/microblog-react/HEAD/android/app/src/main/res/drawable-hdpi/ic_notification.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-mdpi/ic_notification.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microdotblog/microblog-react/HEAD/android/app/src/main/res/drawable-mdpi/ic_notification.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-xhdpi/ic_notification.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microdotblog/microblog-react/HEAD/android/app/src/main/res/drawable-xhdpi/ic_notification.png -------------------------------------------------------------------------------- /android/app/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | Micro.blog 3 | #fff 4 | 5 | -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-xxhdpi/ic_notification.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microdotblog/microblog-react/HEAD/android/app/src/main/res/drawable-xxhdpi/ic_notification.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-xxxhdpi/ic_notification.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microdotblog/microblog-react/HEAD/android/app/src/main/res/drawable-xxxhdpi/ic_notification.png -------------------------------------------------------------------------------- /ios/MicroBlog_RN/Images.xcassets/AppIcon.appiconset/icon-152.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microdotblog/microblog-react/HEAD/ios/MicroBlog_RN/Images.xcassets/AppIcon.appiconset/icon-152.png -------------------------------------------------------------------------------- /ios/MicroBlog_RN/Images.xcassets/AppIcon.appiconset/icon-167.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microdotblog/microblog-react/HEAD/ios/MicroBlog_RN/Images.xcassets/AppIcon.appiconset/icon-167.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-hdpi/ic_launcher_adaptive_back.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microdotblog/microblog-react/HEAD/android/app/src/main/res/mipmap-hdpi/ic_launcher_adaptive_back.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-hdpi/ic_launcher_adaptive_fore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microdotblog/microblog-react/HEAD/android/app/src/main/res/mipmap-hdpi/ic_launcher_adaptive_fore.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-mdpi/ic_launcher_adaptive_back.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microdotblog/microblog-react/HEAD/android/app/src/main/res/mipmap-mdpi/ic_launcher_adaptive_back.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-mdpi/ic_launcher_adaptive_fore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microdotblog/microblog-react/HEAD/android/app/src/main/res/mipmap-mdpi/ic_launcher_adaptive_fore.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xhdpi/ic_launcher_adaptive_back.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microdotblog/microblog-react/HEAD/android/app/src/main/res/mipmap-xhdpi/ic_launcher_adaptive_back.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xhdpi/ic_launcher_adaptive_fore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microdotblog/microblog-react/HEAD/android/app/src/main/res/mipmap-xhdpi/ic_launcher_adaptive_fore.png -------------------------------------------------------------------------------- /ios/MicroBlog_RN/Images.xcassets/AppIcon.appiconset/icon-1024 1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microdotblog/microblog-react/HEAD/ios/MicroBlog_RN/Images.xcassets/AppIcon.appiconset/icon-1024 1.png -------------------------------------------------------------------------------- /ios/MicroBlog_RN/Images.xcassets/AppIcon.appiconset/icon-1024 2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microdotblog/microblog-react/HEAD/ios/MicroBlog_RN/Images.xcassets/AppIcon.appiconset/icon-1024 2.png -------------------------------------------------------------------------------- /ios/MicroBlog_RN/Images.xcassets/AppIcon.appiconset/icon-1024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microdotblog/microblog-react/HEAD/ios/MicroBlog_RN/Images.xcassets/AppIcon.appiconset/icon-1024.png -------------------------------------------------------------------------------- /ios/MicroBlog_RN/Images.xcassets/AppIcon.appiconset/icon-152 1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microdotblog/microblog-react/HEAD/ios/MicroBlog_RN/Images.xcassets/AppIcon.appiconset/icon-152 1.png -------------------------------------------------------------------------------- /ios/MicroBlog_RN/Images.xcassets/AppIcon.appiconset/icon-152 2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microdotblog/microblog-react/HEAD/ios/MicroBlog_RN/Images.xcassets/AppIcon.appiconset/icon-152 2.png -------------------------------------------------------------------------------- /ios/MicroBlog_RN/Images.xcassets/AppIcon.appiconset/icon-167 1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microdotblog/microblog-react/HEAD/ios/MicroBlog_RN/Images.xcassets/AppIcon.appiconset/icon-167 1.png -------------------------------------------------------------------------------- /ios/MicroBlog_RN/Images.xcassets/AppIcon.appiconset/icon-167 2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microdotblog/microblog-react/HEAD/ios/MicroBlog_RN/Images.xcassets/AppIcon.appiconset/icon-167 2.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxhdpi/ic_launcher_adaptive_back.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microdotblog/microblog-react/HEAD/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_adaptive_back.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxhdpi/ic_launcher_adaptive_fore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microdotblog/microblog-react/HEAD/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_adaptive_fore.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_adaptive_back.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microdotblog/microblog-react/HEAD/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_adaptive_back.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_adaptive_fore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microdotblog/microblog-react/HEAD/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_adaptive_fore.png -------------------------------------------------------------------------------- /ios/MicroBlog_RN/Images.xcassets/icon_512x512.imageset/icon_512x512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microdotblog/microblog-react/HEAD/ios/MicroBlog_RN/Images.xcassets/icon_512x512.imageset/icon_512x512.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-xxxhdpi/shell_launch_background_image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microdotblog/microblog-react/HEAD/android/app/src/main/res/drawable-xxxhdpi/shell_launch_background_image.png -------------------------------------------------------------------------------- /ios/MicroBlog_RN-Bridging-Header.h: -------------------------------------------------------------------------------- 1 | // 2 | // Use this file to import your target's public headers that you would like to expose to Swift. 3 | // 4 | 5 | #import 6 | -------------------------------------------------------------------------------- /src/stores/Collection.js: -------------------------------------------------------------------------------- 1 | import { types } from 'mobx-state-tree'; 2 | 3 | export default Collection = types.model('Collection', { 4 | id: types.identifierNumber, 5 | name: types.string, 6 | uploads_count: types.optional(types.number, 0) 7 | }); -------------------------------------------------------------------------------- /src/stores/models/posting/Contact.js: -------------------------------------------------------------------------------- 1 | import { types, flow } from 'mobx-state-tree'; 2 | 3 | export default Contact = types.model('Contact', { 4 | username: types.maybe(types.string), 5 | avatar: types.maybe(types.string) 6 | }) 7 | .actions(self => ({ 8 | })) -------------------------------------------------------------------------------- /src/utils/ui.js: -------------------------------------------------------------------------------- 1 | import { Platform } from 'react-native'; 2 | 3 | export const STANDARD_SLOP = 7; 4 | 5 | export function isLiquidGlass() { 6 | return ( 7 | false 8 | // (Platform.OS == 'ios') && (parseInt(Platform.Version, 10) >= 26) 9 | ); 10 | } 11 | -------------------------------------------------------------------------------- /src/stores/models/Device.js: -------------------------------------------------------------------------------- 1 | import { types } from 'mobx-state-tree'; 2 | 3 | export default Device = types.model('Device', { 4 | token: types.identifier, 5 | app_name: types.maybe(types.string), 6 | push_env: types.maybe(types.string), 7 | created_at: types.maybe(types.string), 8 | }) 9 | -------------------------------------------------------------------------------- /src/stores/models/Token.js: -------------------------------------------------------------------------------- 1 | import { types } from 'mobx-state-tree'; 2 | 3 | export default Token = types.model('Token', { 4 | token: types.identifier, 5 | username: types.maybe(types.string), 6 | type: types.optional(types.string, "user"), 7 | service_id: types.maybe(types.string), 8 | }) 9 | -------------------------------------------------------------------------------- /android/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-bin.zip 4 | networkTimeout=10000 5 | validateDistributionUrl=true 6 | zipStoreBase=GRADLE_USER_HOME 7 | zipStorePath=wrapper/dists 8 | -------------------------------------------------------------------------------- /babel.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | presets: ['babel-preset-expo'], 3 | plugins: [ 4 | ["@babel/plugin-proposal-decorators", { "legacy": true }], 5 | 'react-native-reanimated/plugin' 6 | ], 7 | env: { 8 | production: { 9 | plugins: ['transform-remove-console'] 10 | } 11 | } 12 | }; 13 | -------------------------------------------------------------------------------- /ios/MicroBlog_RN.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /ios/MicroBlog_RN.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /ios/MicroBlog_RN/UIBarButtonItem+Plainify.h: -------------------------------------------------------------------------------- 1 | // 2 | // UIBarButtonItem+Plainify.h 3 | // MicroBlog_RN 4 | // 5 | // Created by Manton Reece on 8/30/25. 6 | // 7 | 8 | #import 9 | 10 | NS_ASSUME_NONNULL_BEGIN 11 | 12 | @interface UIBarButtonItem (Plainify) 13 | 14 | @end 15 | 16 | NS_ASSUME_NONNULL_END 17 | -------------------------------------------------------------------------------- /ios/MicroBlog_RN/UIScrollViewDelegate+Zooming.h: -------------------------------------------------------------------------------- 1 | // 2 | // UIScrollViewDelegate+Zooming.h 3 | // MicroBlog_RN 4 | // 5 | // Created by Manton Reece on 4/27/23. 6 | // 7 | 8 | #import 9 | 10 | NS_ASSUME_NONNULL_BEGIN 11 | 12 | @interface NSObject (Zooming) 13 | 14 | @end 15 | 16 | NS_ASSUME_NONNULL_END 17 | -------------------------------------------------------------------------------- /src/index.js: -------------------------------------------------------------------------------- 1 | import { AppRegistry } from 'react-native'; 2 | import MainApp from './screens/App'; 3 | import { name as appName } from './../app.json'; 4 | import './utils/dev'; 5 | import './utils/string_checker'; 6 | import './utils/snapshots'; 7 | import './utils/string_utils'; 8 | 9 | AppRegistry.registerComponent(appName, () => MainApp); -------------------------------------------------------------------------------- /src/index.share.js: -------------------------------------------------------------------------------- 1 | import './utils/dev'; 2 | import './utils/string_checker'; 3 | import './utils/string_utils'; 4 | import './utils/snapshots'; 5 | import { AppRegistry } from "react-native" 6 | import ShareScreen from "./screens/share" 7 | 8 | AppRegistry.registerComponent( 9 | "ShareMenuModuleComponent", () => ShareScreen 10 | ) -------------------------------------------------------------------------------- /ios/MicroBlog_Share/MicroBlog_Share-Bridging-Header.h: -------------------------------------------------------------------------------- 1 | // 2 | // Use this file to import your target's public headers that you would like to expose to Swift. 3 | // 4 | 5 | #import 6 | #import 7 | #import 8 | #import 9 | #import 10 | -------------------------------------------------------------------------------- /ios/ci_scripts/ci_post_clone.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | # What are we running on? 4 | system_profiler SPHardwareDataType 5 | 6 | # Install CocoaPods and bun. 7 | brew tap oven-sh/bun 8 | brew install cocoapods node bun 9 | 10 | bun install 11 | 12 | npm config set maxsockets 3 13 | 14 | # Install dependencies you manage with CocoaPods. 15 | bun pods -------------------------------------------------------------------------------- /android/app/src/main/res/values-night/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | -------------------------------------------------------------------------------- /ios/MicroBlog_RN/MBClipboardHelper.h: -------------------------------------------------------------------------------- 1 | // 2 | // MBClipboardHelper.h 3 | // MicroBlog_RN 4 | // 5 | // Created by Manton Reece on 6/13/25. 6 | // 7 | 8 | #import 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface MBClipboardHelper : NSObject 14 | @end 15 | 16 | NS_ASSUME_NONNULL_END 17 | -------------------------------------------------------------------------------- /ios/MicroBlog_RN/MBHighlightingTextStorage.h: -------------------------------------------------------------------------------- 1 | // 2 | // MBHighlightingTextStorage.h 3 | // MicroBlog_RN 4 | // 5 | // Created by Manton Reece on 4/16/23. 6 | // From Micro.blog 2.x iOS code, which was based on TKDHighlightingTextStorage by Max Seelemann. 7 | // 8 | 9 | #import 10 | 11 | @interface MBHighlightingTextStorage : NSTextStorage 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /android/app/src/debug/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 9 | 10 | -------------------------------------------------------------------------------- /ios/MicroBlog_RN/RCTInputAccessoryShadowView.h: -------------------------------------------------------------------------------- 1 | // 2 | // RCTInputAccessoryShadowView.h 3 | // MicroBlog_RN 4 | // 5 | // Created by Manton Reece on 10/24/23. 6 | // 7 | 8 | #import 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface RCTInputAccessoryShadowView (ScreenWidth) 14 | 15 | @end 16 | 17 | NS_ASSUME_NONNULL_END 18 | -------------------------------------------------------------------------------- /android/app/src/main/res/drawable/splash_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /Gemfile: -------------------------------------------------------------------------------- 1 | source 'https://rubygems.org' 2 | 3 | # You may use http://rbenv.org/ or https://rvm.io/ to install and use this version 4 | ruby ">= 2.6.10" 5 | 6 | # Exclude problematic versions of cocoapods and activesupport that causes build failures. 7 | gem 'cocoapods', '>= 1.13', '!= 1.15.0', '!= 1.15.1' 8 | gem 'activesupport', '>= 6.1.7.5', '!= 7.1.0' 9 | gem 'xcodeproj', '< 1.26.0' 10 | gem 'concurrent-ruby', '<= 1.3.4' 11 | -------------------------------------------------------------------------------- /ios/MicroBlog_RN/UIScrollViewDelegate+Zooming.m: -------------------------------------------------------------------------------- 1 | // 2 | // UIScrollViewDelegate+Zooming.m 3 | // MicroBlog_RN 4 | // 5 | // Created by Manton Reece on 4/27/23. 6 | // 7 | 8 | #import "UIScrollViewDelegate+Zooming.h" 9 | 10 | @implementation NSObject (Zooming) 11 | 12 | - (void) scrollViewWillBeginZooming:(UIScrollView *)scrollView withView:(UIView *)view 13 | { 14 | scrollView.pinchGestureRecognizer.enabled = NO; 15 | } 16 | 17 | @end 18 | -------------------------------------------------------------------------------- /ios/MicroBlog_RN/Images.xcassets/icon_512x512.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "icon_512x512.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/components/text/highlighting_text.js: -------------------------------------------------------------------------------- 1 | import * as React from 'react'; 2 | import { requireNativeComponent, Platform, TextInput } from 'react-native'; 3 | 4 | const MBHighlightingTextView = requireNativeComponent("MBHighlightingTextView"); 5 | 6 | export default class HighlightingText extends React.Component { 7 | render() { 8 | if(Platform.OS === "ios"){ 9 | return( ) 10 | } 11 | return( ) 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /ios/MicroBlog_Share/MicroBlog_Share.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | com.apple.security.application-groups 6 | 7 | group.blog.micro.ios 8 | 9 | keychain-access-groups 10 | 11 | $(AppIdentifierPrefix)blog.micro.ios 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /ios/MicroBlog_Share/GetURL.js: -------------------------------------------------------------------------------- 1 | var MyExtensionJavaScriptClass = function() {}; 2 | 3 | MyExtensionJavaScriptClass.prototype = { 4 | run: function(arguments) { 5 | // Pass the baseURI of the webpage to the extension. 6 | arguments.completionFunction({"title": document.title, "url": document.URL, "text": document.getSelection().toString()}); 7 | } 8 | }; 9 | 10 | // The JavaScript file must contain a global object named "ExtensionPreprocessingJS". 11 | var ExtensionPreprocessingJS = new MyExtensionJavaScriptClass; 12 | -------------------------------------------------------------------------------- /ios/.xcode.env: -------------------------------------------------------------------------------- 1 | # This `.xcode.env` file is versioned and is used to source the environment 2 | # used when running script phases inside Xcode. 3 | # To customize your local environment, you can create an `.xcode.env.local` 4 | # file that is not versioned. 5 | 6 | # NODE_BINARY variable contains the PATH to the node executable. 7 | # 8 | # Customize the NODE_BINARY variable here. 9 | # For example, to use nvm with brew, add the following line 10 | # . "$(brew --prefix nvm)/nvm.sh" --no-use 11 | export NODE_BINARY=$(command -v node) 12 | -------------------------------------------------------------------------------- /src/stores/enums/blog_services.js: -------------------------------------------------------------------------------- 1 | import { types } from 'mobx-state-tree'; 2 | 3 | export const blog_services = { 4 | microblog: { name: "Micro.blog", url: "https://micro.blog/micropub", type: "micropub", description: "Micro.blog hosted blog" }, 5 | xmlrpc: { name: "WordPress", url: "", type: "xmlrpc", description: "WordPress or compatible blog" }, 6 | micropub: { name: "Micropub", url: "", type: "micropub", description: "WordPress or compatible blog" }, 7 | }; 8 | 9 | export default types.enumeration('BlogServices', Object.keys(blog_services)); 10 | -------------------------------------------------------------------------------- /ios/MicroBlog_RN/MicroBlog_RN.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | aps-environment 6 | development 7 | com.apple.security.application-groups 8 | 9 | group.blog.micro.ios 10 | 11 | keychain-access-groups 12 | 13 | $(AppIdentifierPrefix)blog.micro.ios 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /ios/MicroBlog_RN/RCTInputAccessoryShadowView.m: -------------------------------------------------------------------------------- 1 | // 2 | // RCTInputAccessoryShadowView.m 3 | // MicroBlog_RN 4 | // 5 | // Created by Manton Reece on 10/24/23. 6 | // 7 | 8 | #import "RCTInputAccessoryShadowView.h" 9 | 10 | @implementation RCTInputAccessoryShadowView (ScreenWidth) 11 | 12 | - (void) insertReactSubview:(RCTShadowView *)subview atIndex:(NSInteger)atIndex 13 | { 14 | [super insertReactSubview:subview atIndex:atIndex]; 15 | 16 | CGRect r = [[UIScreen mainScreen] bounds]; 17 | subview.width = (YGValue) { r.size.width, YGUnitPoint }; 18 | } 19 | 20 | @end 21 | -------------------------------------------------------------------------------- /metro.config.js: -------------------------------------------------------------------------------- 1 | const { getDefaultConfig } = require('expo/metro-config'); 2 | const { mergeConfig } = require('@react-native/metro-config'); 3 | 4 | /** 5 | * Metro configuration 6 | * https://reactnative.dev/docs/metro 7 | * 8 | * @type {import('metro-config').MetroConfig} 9 | */ 10 | const config = { 11 | transformer: { 12 | getTransformOptions: async () => ({ 13 | transform: { 14 | experimentalImportSupport: false, 15 | inlineRequires: true, 16 | }, 17 | }), 18 | }, 19 | }; 20 | 21 | module.exports = mergeConfig(getDefaultConfig(__dirname), config); 22 | -------------------------------------------------------------------------------- /src/screens/loading/Loading.js: -------------------------------------------------------------------------------- 1 | import * as React from 'react'; 2 | import { observer } from 'mobx-react'; 3 | import { Text, View } from 'react-native'; 4 | import App from '../../stores/App' 5 | 6 | @observer 7 | export default class LoadingScreen extends React.Component { 8 | 9 | componentDidMount() { 10 | //App.set_navigation(this.props.navigation) 11 | } 12 | 13 | render() { 14 | return ( 15 | 16 | Loading... 17 | 18 | ) 19 | } 20 | 21 | } -------------------------------------------------------------------------------- /android/app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 11 | 12 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /src/utils/string_checker.js: -------------------------------------------------------------------------------- 1 | class StringChecker { 2 | 3 | _validate_email = (value) => { 4 | var re = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/; 5 | return re.test(value); 6 | } 7 | 8 | _validate_is_token = (value) => { 9 | const is_email = this._validate_email(value) 10 | return !is_email && value.length === 20 11 | } 12 | 13 | _validate_url = (value) => { 14 | var re = /^(https?:\/\/)?([a-z0-9-]+\.)+[a-z]{2,}(\/[^\s]*)?(\?\S*)?(#[^\s]*)?$/ 15 | return re.test(value); 16 | } 17 | 18 | } 19 | export default new StringChecker() -------------------------------------------------------------------------------- /ios/MicroBlog_RN/MBClipboardHelper.m: -------------------------------------------------------------------------------- 1 | // 2 | // MBClipboardHelper.m 3 | // MicroBlog_RN 4 | // 5 | // Created by Manton Reece on 6/13/25. 6 | // 7 | 8 | #import "MBClipboardHelper.h" 9 | 10 | @implementation MBClipboardHelper 11 | 12 | RCT_EXPORT_MODULE(MBClipboardHelper); 13 | 14 | // expose hasWebURL(): Promise 15 | RCT_REMAP_METHOD(hasWebURL, resolver:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject) 16 | { 17 | @try { 18 | BOOL has_urls = [UIPasteboard generalPasteboard].hasURLs; 19 | resolve(@(has_urls)); 20 | } 21 | @catch (NSException* exception) { 22 | reject(@"pasteboard_error", exception.reason, nil); 23 | } 24 | } 25 | 26 | @end 27 | -------------------------------------------------------------------------------- /src/components/info/login_message.js: -------------------------------------------------------------------------------- 1 | import * as React from 'react'; 2 | import { observer } from 'mobx-react'; 3 | import { View, Text, TouchableOpacity } from 'react-native'; 4 | import App from '../../stores/App' 5 | 6 | @observer 7 | export default class LoginMessage extends React.Component{ 8 | 9 | render() { 10 | return( 11 | 12 | App.navigate_to_screen("Login")}> 13 | Please sign in to continue 14 | 15 | 16 | ) 17 | } 18 | 19 | } -------------------------------------------------------------------------------- /src/components/share/dev.js: -------------------------------------------------------------------------------- 1 | import * as React from 'react' 2 | import { observer } from 'mobx-react' 3 | import { View, Text } from 'react-native' 4 | import Share from '../../stores/Share' 5 | import App from '../../stores/App' 6 | 7 | @observer 8 | export default class ShareDevComponent extends React.Component { 9 | 10 | render() { 11 | if(!__DEV__) return 12 | return ( 13 | 14 | Users: {Share.users.length} 15 | Is Logged In: {Share.is_logged_in() ? "Yes" : "No"} 16 | 17 | ) 18 | } 19 | } -------------------------------------------------------------------------------- /src/components/sheets/header.js: -------------------------------------------------------------------------------- 1 | import * as React from 'react'; 2 | import { observer } from 'mobx-react'; 3 | import { View, Text } from 'react-native'; 4 | import App from '../../stores/App' 5 | 6 | @observer 7 | export default class SheetHeader extends React.Component{ 8 | 9 | render() { 10 | return( 11 | 20 | {this.props.title} 21 | 22 | ) 23 | } 24 | 25 | } -------------------------------------------------------------------------------- /patches/react-native-fs+2.20.0.patch: -------------------------------------------------------------------------------- 1 | diff --git a/node_modules/react-native-fs/RNFSManager.m b/node_modules/react-native-fs/RNFSManager.m 2 | index 5ddd941..7bca62a 100755 3 | --- a/node_modules/react-native-fs/RNFSManager.m 4 | +++ b/node_modules/react-native-fs/RNFSManager.m 5 | @@ -294,8 +294,8 @@ + (BOOL)requiresMainQueueSetup 6 | } 7 | 8 | RCT_EXPORT_METHOD(read:(NSString *)filepath 9 | - length: (NSInteger *)length 10 | - position: (NSInteger *)position 11 | + length: (NSInteger)length 12 | + position: (NSInteger)position 13 | resolver:(RCTPromiseResolveBlock)resolve 14 | rejecter:(RCTPromiseRejectBlock)reject) 15 | { 16 | -------------------------------------------------------------------------------- /src/screens/bookmarks/bookmark.js: -------------------------------------------------------------------------------- 1 | import * as React from 'react'; 2 | import { observer } from 'mobx-react'; 3 | import Auth from './../../stores/Auth'; 4 | import App from './../../stores/App'; 5 | import GenericScreenComponent from '../../components/generic/generic_screen'; 6 | 7 | @observer 8 | export default class BookmarkScreen extends React.Component{ 9 | 10 | render() { 11 | return ( 12 | 18 | ) 19 | } 20 | 21 | } 22 | -------------------------------------------------------------------------------- /ios/MicroBlog_RN/MBHighlightingTextManager.h: -------------------------------------------------------------------------------- 1 | // 2 | // MBHighlightingTextManager.h 3 | // MicroBlog_RN 4 | // 5 | // Created by Manton Reece on 4/16/23. 6 | // 7 | 8 | #import 9 | #import 10 | 11 | @class MBHighlightingTextView; 12 | 13 | NS_ASSUME_NONNULL_BEGIN 14 | 15 | @interface MBHighlightingTextManager : RCTViewManager 16 | 17 | @property (strong, nonatomic) id textStorage; 18 | @property (strong, nonatomic) MBHighlightingTextView* textView; 19 | @property (strong, nonatomic) NSTimer* typingTimer; 20 | @property (assign) BOOL isTyping; 21 | 22 | + (CGFloat) preferredTimelineFontSize; 23 | + (CGFloat) preferredPostingFontSize; 24 | 25 | @end 26 | 27 | NS_ASSUME_NONNULL_END 28 | -------------------------------------------------------------------------------- /src/components/web/loading_view.js: -------------------------------------------------------------------------------- 1 | import * as React from 'react'; 2 | import { observer } from 'mobx-react'; 3 | import { ActivityIndicator, View, Text } from "react-native" 4 | import App from '../../stores/App' 5 | 6 | @observer 7 | export default class WebLoadingViewModule extends React.Component{ 8 | 9 | render() { 10 | return ( 11 | 12 | 13 | {this.props.loading_text ?? "Loading posts..."} 14 | 15 | ) 16 | } 17 | 18 | } 19 | -------------------------------------------------------------------------------- /ios/MicroBlog_RN/MBHighlightingTextView.h: -------------------------------------------------------------------------------- 1 | // 2 | // MBHighlightingTextView.h 3 | // MicroBlog_RN 4 | // 5 | // Created by Manton Reece on 4/16/23. 6 | // 7 | 8 | #import 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface MBHighlightingTextView : UITextView 14 | 15 | @property (copy, nonatomic) RCTBubblingEventBlock onChangeText; 16 | @property (copy, nonatomic) RCTBubblingEventBlock onSelectionChange; 17 | @property (strong, nonatomic) UIView* reactAccessoryView; 18 | @property (assign, nonatomic) CGFloat keyboardHeight; 19 | 20 | - (void) callTextChanged:(NSString *)text; 21 | - (void) callSelectionChanged:(UITextRange *)range; 22 | 23 | - (void) adjustHeight; 24 | 25 | @end 26 | 27 | NS_ASSUME_NONNULL_END 28 | -------------------------------------------------------------------------------- /src/components/header/update_reply.js: -------------------------------------------------------------------------------- 1 | import * as React from 'react'; 2 | import { observer } from 'mobx-react'; 3 | import { Button, Keyboard } from 'react-native'; 4 | import App from './../../stores/App'; 5 | import Replies from './../../stores/Replies'; 6 | 7 | @observer 8 | export default class UpdateReplyButton extends React.Component { 9 | 10 | render() { 11 | return ( 12 |