├── .browserslistrc
├── .dockerignore
├── .editorconfig
├── .github
├── CODEOWNERS
├── FUNDING.yml
├── ISSUE_TEMPLATE
│ ├── bug_report.md
│ └── feature_request.md
└── workflows
│ ├── build_release.yml
│ ├── ci.yml
│ ├── docker.yml
│ ├── e2e.yml
│ ├── release.yml
│ └── semantic_pull_request.yml
├── .gitignore
├── .npmrc
├── .prettierignore
├── .prettierrc
├── .release-it.json
├── .vscode
├── extensions.json
└── settings.json
├── CONTRIBUTING.md
├── Dockerfile
├── Gemfile
├── Gemfile.lock
├── LICENSE
├── README.md
├── android
├── .gitignore
├── app
│ ├── .gitignore
│ ├── build.gradle
│ ├── capacitor.build.gradle
│ ├── proguard-rules.pro
│ └── src
│ │ ├── androidTest
│ │ └── java
│ │ │ └── com
│ │ │ └── getcapacitor
│ │ │ └── myapp
│ │ │ └── ExampleInstrumentedTest.java
│ │ ├── main
│ │ ├── AndroidManifest.xml
│ │ ├── java
│ │ │ └── app
│ │ │ │ └── vger
│ │ │ │ └── voyager
│ │ │ │ └── MainActivity.java
│ │ └── res
│ │ │ ├── drawable-land-hdpi
│ │ │ └── splash.png
│ │ │ ├── drawable-land-ldpi
│ │ │ └── splash.png
│ │ │ ├── drawable-land-mdpi
│ │ │ └── splash.png
│ │ │ ├── drawable-land-xhdpi
│ │ │ └── splash.png
│ │ │ ├── drawable-land-xxhdpi
│ │ │ └── splash.png
│ │ │ ├── drawable-land-xxxhdpi
│ │ │ └── splash.png
│ │ │ ├── drawable-port-hdpi
│ │ │ └── splash.png
│ │ │ ├── drawable-port-ldpi
│ │ │ └── splash.png
│ │ │ ├── drawable-port-mdpi
│ │ │ └── splash.png
│ │ │ ├── drawable-port-xhdpi
│ │ │ └── splash.png
│ │ │ ├── drawable-port-xxhdpi
│ │ │ └── splash.png
│ │ │ ├── drawable-port-xxxhdpi
│ │ │ └── splash.png
│ │ │ ├── drawable
│ │ │ ├── ic_launcher_monochrome.xml
│ │ │ └── splash.png
│ │ │ ├── layout
│ │ │ └── activity_main.xml
│ │ │ ├── mipmap-anydpi-v26
│ │ │ ├── galactic.xml
│ │ │ ├── holidays.xml
│ │ │ ├── ic_launcher.xml
│ │ │ ├── original.xml
│ │ │ ├── planetary.xml
│ │ │ ├── pride.xml
│ │ │ ├── psych.xml
│ │ │ └── space.xml
│ │ │ ├── mipmap-hdpi
│ │ │ ├── galactic.webp
│ │ │ ├── galactic_background.webp
│ │ │ ├── galactic_foreground.webp
│ │ │ ├── galactic_round.webp
│ │ │ ├── holidays.webp
│ │ │ ├── holidays_background.webp
│ │ │ ├── holidays_foreground.webp
│ │ │ ├── holidays_round.webp
│ │ │ ├── ic_launcher.webp
│ │ │ ├── ic_launcher_background.webp
│ │ │ ├── ic_launcher_foreground.webp
│ │ │ ├── ic_launcher_round.webp
│ │ │ ├── original.webp
│ │ │ ├── original_background.webp
│ │ │ ├── original_foreground.webp
│ │ │ ├── original_round.webp
│ │ │ ├── planetary.webp
│ │ │ ├── planetary_background.webp
│ │ │ ├── planetary_foreground.webp
│ │ │ ├── planetary_round.webp
│ │ │ ├── pride.webp
│ │ │ ├── pride_background.webp
│ │ │ ├── pride_foreground.webp
│ │ │ ├── pride_round.webp
│ │ │ ├── psych.webp
│ │ │ ├── psych_background.webp
│ │ │ ├── psych_foreground.webp
│ │ │ ├── psych_round.webp
│ │ │ ├── space.webp
│ │ │ ├── space_background.webp
│ │ │ ├── space_foreground.webp
│ │ │ └── space_round.webp
│ │ │ ├── mipmap-mdpi
│ │ │ ├── galactic.webp
│ │ │ ├── galactic_background.webp
│ │ │ ├── galactic_foreground.webp
│ │ │ ├── galactic_round.webp
│ │ │ ├── holidays.webp
│ │ │ ├── holidays_background.webp
│ │ │ ├── holidays_foreground.webp
│ │ │ ├── holidays_round.webp
│ │ │ ├── ic_launcher.webp
│ │ │ ├── ic_launcher_background.webp
│ │ │ ├── ic_launcher_foreground.webp
│ │ │ ├── ic_launcher_round.webp
│ │ │ ├── original.webp
│ │ │ ├── original_background.webp
│ │ │ ├── original_foreground.webp
│ │ │ ├── original_round.webp
│ │ │ ├── planetary.webp
│ │ │ ├── planetary_background.webp
│ │ │ ├── planetary_foreground.webp
│ │ │ ├── planetary_round.webp
│ │ │ ├── pride.webp
│ │ │ ├── pride_background.webp
│ │ │ ├── pride_foreground.webp
│ │ │ ├── pride_round.webp
│ │ │ ├── psych.webp
│ │ │ ├── psych_background.webp
│ │ │ ├── psych_foreground.webp
│ │ │ ├── psych_round.webp
│ │ │ ├── space.webp
│ │ │ ├── space_background.webp
│ │ │ ├── space_foreground.webp
│ │ │ └── space_round.webp
│ │ │ ├── mipmap-xhdpi
│ │ │ ├── galactic.webp
│ │ │ ├── galactic_background.webp
│ │ │ ├── galactic_foreground.webp
│ │ │ ├── galactic_round.webp
│ │ │ ├── holidays.webp
│ │ │ ├── holidays_background.webp
│ │ │ ├── holidays_foreground.webp
│ │ │ ├── holidays_round.webp
│ │ │ ├── ic_launcher.webp
│ │ │ ├── ic_launcher_background.webp
│ │ │ ├── ic_launcher_foreground.webp
│ │ │ ├── ic_launcher_round.webp
│ │ │ ├── original.webp
│ │ │ ├── original_background.webp
│ │ │ ├── original_foreground.webp
│ │ │ ├── original_round.webp
│ │ │ ├── planetary.webp
│ │ │ ├── planetary_background.webp
│ │ │ ├── planetary_foreground.webp
│ │ │ ├── planetary_round.webp
│ │ │ ├── pride.webp
│ │ │ ├── pride_background.webp
│ │ │ ├── pride_foreground.webp
│ │ │ ├── pride_round.webp
│ │ │ ├── psych.webp
│ │ │ ├── psych_background.webp
│ │ │ ├── psych_foreground.webp
│ │ │ ├── psych_round.webp
│ │ │ ├── space.webp
│ │ │ ├── space_background.webp
│ │ │ ├── space_foreground.webp
│ │ │ └── space_round.webp
│ │ │ ├── mipmap-xxhdpi
│ │ │ ├── galactic.webp
│ │ │ ├── galactic_background.webp
│ │ │ ├── galactic_foreground.webp
│ │ │ ├── galactic_round.webp
│ │ │ ├── holidays.webp
│ │ │ ├── holidays_background.webp
│ │ │ ├── holidays_foreground.webp
│ │ │ ├── holidays_round.webp
│ │ │ ├── ic_launcher.webp
│ │ │ ├── ic_launcher_background.webp
│ │ │ ├── ic_launcher_foreground.webp
│ │ │ ├── ic_launcher_round.webp
│ │ │ ├── original.webp
│ │ │ ├── original_background.webp
│ │ │ ├── original_foreground.webp
│ │ │ ├── original_round.webp
│ │ │ ├── planetary.webp
│ │ │ ├── planetary_background.webp
│ │ │ ├── planetary_foreground.webp
│ │ │ ├── planetary_round.webp
│ │ │ ├── pride.webp
│ │ │ ├── pride_background.webp
│ │ │ ├── pride_foreground.webp
│ │ │ ├── pride_round.webp
│ │ │ ├── psych.webp
│ │ │ ├── psych_background.webp
│ │ │ ├── psych_foreground.webp
│ │ │ ├── psych_round.webp
│ │ │ ├── space.webp
│ │ │ ├── space_background.webp
│ │ │ ├── space_foreground.webp
│ │ │ └── space_round.webp
│ │ │ ├── mipmap-xxxhdpi
│ │ │ ├── galactic.webp
│ │ │ ├── galactic_background.webp
│ │ │ ├── galactic_foreground.webp
│ │ │ ├── galactic_round.webp
│ │ │ ├── holidays.webp
│ │ │ ├── holidays_background.webp
│ │ │ ├── holidays_foreground.webp
│ │ │ ├── holidays_round.webp
│ │ │ ├── ic_launcher.webp
│ │ │ ├── ic_launcher_background.webp
│ │ │ ├── ic_launcher_foreground.webp
│ │ │ ├── ic_launcher_round.webp
│ │ │ ├── original.webp
│ │ │ ├── original_background.webp
│ │ │ ├── original_foreground.webp
│ │ │ ├── original_round.webp
│ │ │ ├── planetary.webp
│ │ │ ├── planetary_background.webp
│ │ │ ├── planetary_foreground.webp
│ │ │ ├── planetary_round.webp
│ │ │ ├── pride.webp
│ │ │ ├── pride_background.webp
│ │ │ ├── pride_foreground.webp
│ │ │ ├── pride_round.webp
│ │ │ ├── psych.webp
│ │ │ ├── psych_background.webp
│ │ │ ├── psych_foreground.webp
│ │ │ ├── psych_round.webp
│ │ │ ├── space.webp
│ │ │ ├── space_background.webp
│ │ │ ├── space_foreground.webp
│ │ │ └── space_round.webp
│ │ │ ├── values
│ │ │ ├── ic_launcher_background.xml
│ │ │ ├── strings.xml
│ │ │ └── styles.xml
│ │ │ └── xml
│ │ │ └── file_paths.xml
│ │ └── test
│ │ └── java
│ │ └── com
│ │ └── getcapacitor
│ │ └── myapp
│ │ └── ExampleUnitTest.java
├── build.gradle
├── capacitor.settings.gradle
├── gradle.properties
├── gradle
│ └── wrapper
│ │ ├── gradle-wrapper.jar
│ │ └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
├── settings.gradle
└── variables.gradle
├── capacitor.config.ts
├── compilerOptions.js
├── e2e
├── ci
│ ├── docker-compose.yml
│ ├── lemmy.hjson
│ └── nginx.conf
├── community-feed.spec.ts
└── testdata
│ └── posts.ts
├── eslint.config.js
├── fastlane
├── Appfile
├── Fastfile
├── Matchfile
└── metadata
│ └── android
│ └── en-US
│ ├── changelogs
│ └── default.txt
│ ├── full_description.txt
│ ├── images
│ ├── icon.png
│ ├── phoneScreenshots
│ │ ├── 1.png
│ │ ├── 2.png
│ │ ├── 3.png
│ │ ├── 4.png
│ │ └── 5.png
│ ├── sevenInchScreenshots
│ │ ├── 1.png
│ │ ├── 2.png
│ │ ├── 3.png
│ │ ├── 4.png
│ │ └── 5.png
│ └── tenInchScreenshots
│ │ ├── 1.png
│ │ ├── 2.png
│ │ ├── 3.png
│ │ ├── 4.png
│ │ └── 5.png
│ ├── short_description.txt
│ └── title.txt
├── index.html
├── ionic.config.json
├── ios
├── .gitignore
└── App
│ ├── App.xcodeproj
│ ├── project.pbxproj
│ ├── project.xcworkspace
│ │ ├── contents.xcworkspacedata
│ │ └── xcshareddata
│ │ │ └── swiftpm
│ │ │ └── Package.resolved
│ └── xcshareddata
│ │ └── xcschemes
│ │ ├── App.xcscheme
│ │ └── VoyagerWatch Watch App.xcscheme
│ ├── App.xcworkspace
│ ├── contents.xcworkspacedata
│ └── xcshareddata
│ │ └── IDEWorkspaceChecks.plist
│ ├── App
│ ├── App.entitlements
│ ├── AppDelegate.swift
│ ├── Assets.xcassets
│ │ ├── Alt Icons
│ │ │ ├── Contents.json
│ │ │ ├── galactic_v2.appiconset
│ │ │ │ ├── Contents.json
│ │ │ │ └── galactic.png
│ │ │ ├── holidays_v2.appiconset
│ │ │ │ ├── Contents.json
│ │ │ │ ├── holidays.png
│ │ │ │ ├── holidaysDark.png
│ │ │ │ └── holidaysTinted.png
│ │ │ ├── original_v2.appiconset
│ │ │ │ ├── Contents.json
│ │ │ │ └── original.png
│ │ │ ├── planetary_v2.appiconset
│ │ │ │ ├── Contents.json
│ │ │ │ ├── planetary.png
│ │ │ │ ├── planetaryDark.png
│ │ │ │ └── planetaryTinted.png
│ │ │ ├── pride_v2.appiconset
│ │ │ │ ├── Contents.json
│ │ │ │ ├── pride.png
│ │ │ │ ├── prideDark.png
│ │ │ │ └── prideTinted.png
│ │ │ ├── psych_v2.appiconset
│ │ │ │ ├── Contents.json
│ │ │ │ ├── psych.png
│ │ │ │ ├── psychadelicTinted.png
│ │ │ │ └── psychedelicDark.png
│ │ │ └── space_v2.appiconset
│ │ │ │ ├── Contents.json
│ │ │ │ └── space.png
│ │ ├── AppIcon.appiconset
│ │ │ ├── AppIcon-1024@4x.png
│ │ │ ├── Contents.json
│ │ │ ├── dark.png
│ │ │ └── tinted.png
│ │ └── Contents.json
│ ├── Base.lproj
│ │ ├── LaunchScreen.storyboard
│ │ └── Main.storyboard
│ └── Info.plist
│ ├── CapApp-SPM
│ ├── .gitignore
│ ├── Package.swift
│ ├── README.md
│ └── Sources
│ │ └── CapApp-SPM
│ │ └── CapApp-SPM.swift
│ ├── VoyagerActionExtension
│ ├── Action.js
│ ├── ActionRequestHandler.swift
│ ├── Assets.xcassets
│ │ ├── ActionIcon.appiconset
│ │ │ ├── Contents.json
│ │ │ └── actionicon.png
│ │ └── Contents.json
│ └── Info.plist
│ └── VoyagerWatch Watch App
│ ├── APIManager.swift
│ ├── Assets.xcassets
│ ├── AccentColor.colorset
│ │ └── Contents.json
│ ├── AppIcon.appiconset
│ │ ├── AppIcon-1024@4x.png
│ │ └── Contents.json
│ └── Contents.json
│ ├── FeedView.swift
│ ├── FeedViewModel.swift
│ ├── HomeView.swift
│ ├── PostUIView.swift
│ ├── Preview Content
│ └── Preview Assets.xcassets
│ │ └── Contents.json
│ ├── VoyagerWatchApp.swift
│ ├── WatchSessionManager.swift
│ └── models
│ ├── GetPostsResponse.swift
│ ├── Post.swift
│ ├── PostView.swift
│ └── SavePost.swift
├── manifest.json
├── nginx.conf.template
├── package.json
├── patches
├── @capacitor__android.patch
├── @capacitor__haptics.patch
└── @capacitor__keyboard.patch
├── playwright.config.ts
├── pnpm-lock.yaml
├── postcss.config.js
├── public
├── alternateIcons
│ ├── galactic.png
│ ├── holidays.png
│ ├── original.png
│ ├── planetary.png
│ ├── pride.png
│ ├── psych.png
│ └── space.png
├── badges
│ ├── fdroid.png
│ ├── ios.svg
│ ├── play.svg
│ └── pwa.svg
├── favicons
│ ├── 192.png
│ └── 512.png
├── logo-1024.png
├── logo-maskable-minified.svg
├── logo-maskable.svg
├── logo-minified.svg
├── logo.png
├── logo.svg
├── promo.webp
├── screenshots
│ └── android
│ │ ├── 1.png
│ │ ├── 2.png
│ │ ├── 3.png
│ │ ├── 4.png
│ │ └── 5.png
├── splash.html
└── splash
│ ├── apple-splash-1125-2436.png
│ ├── apple-splash-1136-640.png
│ ├── apple-splash-1170-2532.png
│ ├── apple-splash-1179-2556.png
│ ├── apple-splash-1242-2208.png
│ ├── apple-splash-1242-2688.png
│ ├── apple-splash-1284-2778.png
│ ├── apple-splash-1290-2796.png
│ ├── apple-splash-1334-750.png
│ ├── apple-splash-1536-2048.png
│ ├── apple-splash-1620-2160.png
│ ├── apple-splash-1668-2224.png
│ ├── apple-splash-1668-2388.png
│ ├── apple-splash-1792-828.png
│ ├── apple-splash-2048-1536.png
│ ├── apple-splash-2048-2732.png
│ ├── apple-splash-2160-1620.png
│ ├── apple-splash-2208-1242.png
│ ├── apple-splash-2224-1668.png
│ ├── apple-splash-2388-1668.png
│ ├── apple-splash-2436-1125.png
│ ├── apple-splash-2532-1170.png
│ ├── apple-splash-2556-1179.png
│ ├── apple-splash-2688-1242.png
│ ├── apple-splash-2732-2048.png
│ ├── apple-splash-2778-1284.png
│ ├── apple-splash-2796-1290.png
│ ├── apple-splash-640-1136.png
│ ├── apple-splash-750-1334.png
│ ├── apple-splash-828-1792.png
│ ├── apple-splash-dark-1125-2436.png
│ ├── apple-splash-dark-1136-640.png
│ ├── apple-splash-dark-1170-2532.png
│ ├── apple-splash-dark-1179-2556.png
│ ├── apple-splash-dark-1242-2208.png
│ ├── apple-splash-dark-1242-2688.png
│ ├── apple-splash-dark-1284-2778.png
│ ├── apple-splash-dark-1290-2796.png
│ ├── apple-splash-dark-1334-750.png
│ ├── apple-splash-dark-1536-2048.png
│ ├── apple-splash-dark-1620-2160.png
│ ├── apple-splash-dark-1668-2224.png
│ ├── apple-splash-dark-1668-2388.png
│ ├── apple-splash-dark-1792-828.png
│ ├── apple-splash-dark-2048-1536.png
│ ├── apple-splash-dark-2048-2732.png
│ ├── apple-splash-dark-2160-1620.png
│ ├── apple-splash-dark-2208-1242.png
│ ├── apple-splash-dark-2224-1668.png
│ ├── apple-splash-dark-2388-1668.png
│ ├── apple-splash-dark-2436-1125.png
│ ├── apple-splash-dark-2532-1170.png
│ ├── apple-splash-dark-2556-1179.png
│ ├── apple-splash-dark-2688-1242.png
│ ├── apple-splash-dark-2732-2048.png
│ ├── apple-splash-dark-2778-1284.png
│ ├── apple-splash-dark-2796-1290.png
│ ├── apple-splash-dark-640-1136.png
│ ├── apple-splash-dark-750-1334.png
│ └── apple-splash-dark-828-1792.png
├── resources
├── icon-foreground.png
├── icon-only.png
└── splash.png
├── scripts
├── disable_in_app_purchases.sh
├── docker_generate_config.sh
├── prebuild.sh
├── prerelease.sh
└── release.sh
├── src
├── core
│ ├── App.tsx
│ ├── AppCrash.module.css
│ ├── AppCrash.tsx
│ ├── Auth.tsx
│ ├── GlobalStyles.module.css
│ ├── GlobalStyles.tsx
│ ├── TabContext.tsx
│ ├── globalCssOverrides.css
│ ├── listeners
│ │ ├── AndroidBackButton.tsx
│ │ ├── AppUrlListener.tsx
│ │ ├── DatabaseErrorListener.ts
│ │ ├── HapticsListener.tsx
│ │ ├── androidSafeArea.ts
│ │ ├── db.ts
│ │ ├── index.tsx
│ │ ├── ionActivatable.ts
│ │ ├── network
│ │ │ ├── listener.ts
│ │ │ ├── networkSlice.ts
│ │ │ └── useShouldAutoplay.ts
│ │ └── statusTap.ts
│ ├── syntaxHighlights.css
│ └── theme
│ │ ├── AppThemes.ts
│ │ ├── darkModifierVariables.css
│ │ ├── darkVariables.css
│ │ ├── lightVariables.css
│ │ └── variables.css
├── features
│ ├── auth
│ │ ├── Account.tsx
│ │ ├── AccountSwitcher.tsx
│ │ ├── SharedDialogContext.module.css
│ │ ├── SharedDialogContext.tsx
│ │ ├── authSelectors.ts
│ │ ├── authSlice.ts
│ │ ├── login
│ │ │ ├── LearnMore.module.css
│ │ │ ├── LearnMore.tsx
│ │ │ ├── LoginModal.module.css
│ │ │ ├── LoginModal.tsx
│ │ │ ├── LoginNav.tsx
│ │ │ ├── data
│ │ │ │ ├── README.md
│ │ │ │ └── servers.ts
│ │ │ ├── join
│ │ │ │ ├── Captcha.module.css
│ │ │ │ ├── Captcha.tsx
│ │ │ │ ├── Join.tsx
│ │ │ │ ├── Joined.tsx
│ │ │ │ ├── Legal.tsx
│ │ │ │ ├── Question.tsx
│ │ │ │ └── joinSlice.ts
│ │ │ ├── lemmyLogo.svg
│ │ │ ├── login
│ │ │ │ ├── Login.tsx
│ │ │ │ ├── LoginAvatarImg.module.css
│ │ │ │ ├── LoginAvatarImg.tsx
│ │ │ │ ├── PickLoginServer.module.css
│ │ │ │ ├── PickLoginServer.tsx
│ │ │ │ └── Totp.tsx
│ │ │ ├── pickJoinServer
│ │ │ │ ├── Filters.module.css
│ │ │ │ ├── Filters.tsx
│ │ │ │ ├── PickJoinServer.module.css
│ │ │ │ ├── PickJoinServer.tsx
│ │ │ │ ├── pickJoinServerSlice.ts
│ │ │ │ └── useStartJoinFlow.tsx
│ │ │ └── welcome
│ │ │ │ ├── AndroidClose.module.css
│ │ │ │ ├── AndroidClose.tsx
│ │ │ │ ├── Buttons.module.css
│ │ │ │ ├── Buttons.tsx
│ │ │ │ ├── Welcome.module.css
│ │ │ │ ├── Welcome.tsx
│ │ │ │ └── assets
│ │ │ │ └── base.svg
│ │ └── siteSlice.ts
│ ├── comment
│ │ ├── Comment.module.css
│ │ ├── Comment.tsx
│ │ ├── CommentContent.tsx
│ │ ├── CommentEllipsis.module.css
│ │ ├── CommentEllipsis.tsx
│ │ ├── CommentHeader.module.css
│ │ ├── CommentHeader.tsx
│ │ ├── CommentLinks.module.css
│ │ ├── CommentLinks.tsx
│ │ ├── CommentMarkdown.tsx
│ │ ├── CommentSort.tsx
│ │ ├── ModActions.tsx
│ │ ├── commentSlice.ts
│ │ ├── elements
│ │ │ ├── CommentContainer.module.css
│ │ │ ├── CommentContainer.tsx
│ │ │ ├── PositionedContainer.module.css
│ │ │ └── PositionedContainer.tsx
│ │ ├── inFeed
│ │ │ └── FeedComment.tsx
│ │ ├── inTree
│ │ │ ├── CommentExpander.module.css
│ │ │ ├── CommentExpander.tsx
│ │ │ ├── CommentHr.module.css
│ │ │ ├── CommentHr.tsx
│ │ │ ├── CommentTree.tsx
│ │ │ ├── Comments.module.css
│ │ │ ├── Comments.tsx
│ │ │ ├── CommentsContext.ts
│ │ │ ├── ContinueThread.module.css
│ │ │ ├── ContinueThread.tsx
│ │ │ ├── FullyCollapsibleComment.tsx
│ │ │ ├── JumpFab.tsx
│ │ │ ├── LoadParentComments.module.css
│ │ │ ├── LoadParentComments.tsx
│ │ │ └── useCollapseRootComment.ts
│ │ └── useCommentActions.ts
│ ├── community
│ │ ├── CommunitySummary.module.css
│ │ ├── CommunitySummary.tsx
│ │ ├── MoreActions.tsx
│ │ ├── ToggleIcon.module.css
│ │ ├── ToggleIcon.tsx
│ │ ├── communitySlice.ts
│ │ ├── list
│ │ │ ├── AlphabetJump.module.css
│ │ │ ├── AlphabetJump.tsx
│ │ │ ├── CommunitiesList.tsx
│ │ │ ├── CommunitiesListRedirectBootstrapper.tsx
│ │ │ ├── EmptyCommunities.module.css
│ │ │ ├── EmptyCommunities.tsx
│ │ │ ├── GuestCommunitiesList.tsx
│ │ │ ├── InitialPageRedirectBootstrapper.module.css
│ │ │ ├── InitialPageRedirectBootstrapper.tsx
│ │ │ ├── InstanceMoreActions.tsx
│ │ │ ├── Item.tsx
│ │ │ ├── LoggedInCommunitiesList.tsx
│ │ │ ├── ResolvedCommunitiesList.module.css
│ │ │ ├── ResolvedCommunitiesList.tsx
│ │ │ ├── deepLinkReadySlice.tsx
│ │ │ ├── items
│ │ │ │ ├── CommunityListItem.module.css
│ │ │ │ ├── CommunityListItem.tsx
│ │ │ │ └── SpecialItem.tsx
│ │ │ └── useShowModeratorFeed.ts
│ │ ├── mod
│ │ │ └── ModActions.tsx
│ │ ├── search
│ │ │ └── CommunitySearchResults.tsx
│ │ ├── titleSearch
│ │ │ ├── TitleSearch.module.css
│ │ │ ├── TitleSearch.tsx
│ │ │ ├── TitleSearchProvider.tsx
│ │ │ ├── TitleSearchResults.module.css
│ │ │ └── TitleSearchResults.tsx
│ │ ├── useCommunityActions.tsx
│ │ ├── useFetchCommunity.ts
│ │ └── useGetRandomCommunity.ts
│ ├── feed
│ │ ├── CommunityFeed.tsx
│ │ ├── ConversationsMoreActions.tsx
│ │ ├── Feed.tsx
│ │ ├── FeedContext.tsx
│ │ ├── InboxFeed.tsx
│ │ ├── ListingType.tsx
│ │ ├── PageTypeContext.tsx
│ │ ├── PostCommentFeed.module.css
│ │ ├── PostCommentFeed.tsx
│ │ ├── PostSort.tsx
│ │ ├── SpecialFeedMoreActions.tsx
│ │ ├── empty
│ │ │ └── home
│ │ │ │ ├── BulkSubscriber.tsx
│ │ │ │ ├── EmptyHomeFeed.tsx
│ │ │ │ ├── Pack.module.css
│ │ │ │ ├── Pack.tsx
│ │ │ │ ├── StarterPacksModal.tsx
│ │ │ │ └── starterPackData.ts
│ │ ├── endItems
│ │ │ ├── EndPost.module.css
│ │ │ ├── EndPost.tsx
│ │ │ ├── FeedLoadMoreFailed.tsx
│ │ │ ├── FetchMore.module.css
│ │ │ └── FetchMore.tsx
│ │ ├── helpers.ts
│ │ ├── postFabs
│ │ │ ├── HidePostsFab.tsx
│ │ │ └── PostFabs.tsx
│ │ ├── sort
│ │ │ ├── feedSortSlice.tsx
│ │ │ └── useFeedSort.tsx
│ │ ├── useCommonPostFeedParams.ts
│ │ ├── useFeedUpdate.ts
│ │ ├── useHidePosts.tsx
│ │ ├── useRangeChange.ts
│ │ └── useResetHiddenPosts.ts
│ ├── icons
│ │ ├── index.ts
│ │ └── svg
│ │ │ ├── airplay.svg
│ │ │ ├── bold.svg
│ │ │ ├── calendarNineMonths.svg
│ │ │ ├── calendarSingleDay.svg
│ │ │ ├── calendarSixMonths.svg
│ │ │ ├── calendarThreeMonths.svg
│ │ │ ├── calendarWeek.svg
│ │ │ ├── calendarYear.svg
│ │ │ ├── clockBadgeOne.svg
│ │ │ ├── clockBadgeSix.svg
│ │ │ ├── clockBadgeTwelve.svg
│ │ │ ├── faceid.svg
│ │ │ ├── gesture.svg
│ │ │ ├── italic.svg
│ │ │ ├── listOrdered.svg
│ │ │ ├── listUnordered.svg
│ │ │ ├── pip.svg
│ │ │ ├── quote.svg
│ │ │ ├── strikethrough.svg
│ │ │ ├── subscript.svg
│ │ │ ├── superscript.svg
│ │ │ └── trashEllipse.svg
│ ├── inbox
│ │ ├── BoxesRedirectBootstrapper.tsx
│ │ ├── InboxItem.module.css
│ │ ├── InboxItem.tsx
│ │ ├── InboxItemMoreActions.module.css
│ │ ├── InboxItemMoreActions.tsx
│ │ ├── PrivateMessageMoreActions.module.css
│ │ ├── PrivateMessageMoreActions.tsx
│ │ ├── SendMessageBox.module.css
│ │ ├── SendMessageBox.tsx
│ │ ├── VoteArrow.module.css
│ │ ├── VoteArrow.tsx
│ │ ├── inboxSlice.ts
│ │ └── messages
│ │ │ ├── ConversationItem.module.css
│ │ │ ├── ConversationItem.tsx
│ │ │ ├── Message.module.css
│ │ │ ├── Message.tsx
│ │ │ └── Time.tsx
│ ├── instances
│ │ └── instancesSlice.tsx
│ ├── labels
│ │ ├── Ago.test.ts
│ │ ├── Ago.tsx
│ │ ├── Edited.module.css
│ │ ├── Edited.tsx
│ │ ├── Handle.module.css
│ │ ├── Handle.tsx
│ │ ├── Nsfw.module.css
│ │ ├── Nsfw.tsx
│ │ ├── Save.module.css
│ │ ├── Save.tsx
│ │ ├── VoteStat.tsx
│ │ ├── formatDistanceShort.ts
│ │ ├── img
│ │ │ ├── ItemIcon.module.css
│ │ │ └── ItemIcon.tsx
│ │ ├── links
│ │ │ ├── AgeBadge.tsx
│ │ │ ├── AppBadge.module.css
│ │ │ ├── CommunityLink.module.css
│ │ │ ├── CommunityLink.tsx
│ │ │ ├── PersonLink.module.css
│ │ │ ├── PersonLink.tsx
│ │ │ └── shared.module.css
│ │ └── vote
│ │ │ ├── HideVoteMode.tsx
│ │ │ ├── SeparateVoteMode.tsx
│ │ │ ├── TotalVoteMode.tsx
│ │ │ ├── Vote.tsx
│ │ │ ├── shared.module.css
│ │ │ └── shared.ts
│ ├── media
│ │ ├── CachedImg.tsx
│ │ ├── Media.tsx
│ │ ├── MediaPlaceholder.module.css
│ │ ├── MediaPlaceholder.tsx
│ │ ├── external
│ │ │ └── redgifs
│ │ │ │ ├── LargeFeedRedgifMedia.module.css
│ │ │ │ ├── LargeFeedRedgifMedia.tsx
│ │ │ │ ├── helpers.ts
│ │ │ │ └── redgifsSlice.ts
│ │ ├── gallery
│ │ │ ├── GalleryGif.tsx
│ │ │ ├── GalleryImg.tsx
│ │ │ ├── GalleryMedia.tsx
│ │ │ ├── GalleryProvider.tsx
│ │ │ └── actions
│ │ │ │ ├── AltText.module.css
│ │ │ │ ├── AltText.tsx
│ │ │ │ ├── GalleryActions.tsx
│ │ │ │ ├── GalleryPostActions.module.css
│ │ │ │ ├── GalleryPostActions.tsx
│ │ │ │ ├── ImageMoreActions.module.css
│ │ │ │ ├── ImageMoreActions.tsx
│ │ │ │ ├── VideoActions.module.css
│ │ │ │ ├── VideoActions.tsx
│ │ │ │ ├── VideoActionsProgress.module.css
│ │ │ │ ├── VideoActionsProgress.tsx
│ │ │ │ ├── shared.module.css
│ │ │ │ ├── shared.tsx
│ │ │ │ └── vote
│ │ │ │ ├── HideVoteMode.tsx
│ │ │ │ ├── SeparateVoteMode.tsx
│ │ │ │ ├── TotalVoteMode.tsx
│ │ │ │ └── Vote.tsx
│ │ ├── imageSlice.ts
│ │ ├── useImageData.ts
│ │ ├── useMediaLoadObserver.ts
│ │ └── video
│ │ │ ├── OutPortalEventDispatcher.module.css
│ │ │ ├── OutPortalEventDispatcher.tsx
│ │ │ ├── Player.module.css
│ │ │ ├── Player.tsx
│ │ │ ├── PortaledPlayer.tsx
│ │ │ ├── Video.tsx
│ │ │ ├── VideoPortalProvider.module.css
│ │ │ └── VideoPortalProvider.tsx
│ ├── migrate
│ │ ├── MigrateList.tsx
│ │ ├── MigrateSubsList.tsx
│ │ └── migrationSlice.ts
│ ├── moderation
│ │ ├── BackgroundReportSync.tsx
│ │ ├── ModeratableItem.tsx
│ │ ├── ModqueueItemActions.tsx
│ │ ├── ban
│ │ │ ├── BanUser.module.css
│ │ │ ├── BanUser.tsx
│ │ │ ├── BanUserModal.module.css
│ │ │ └── BanUserModal.tsx
│ │ ├── banner
│ │ │ ├── ModeratableItemBanner.module.css
│ │ │ ├── ModeratableItemBanner.tsx
│ │ │ ├── RemovedBanner.tsx
│ │ │ └── ReportBanner.tsx
│ │ ├── logs
│ │ │ ├── ModRolePersonLink.module.css
│ │ │ ├── ModRolePersonLink.tsx
│ │ │ ├── ModlogItem.module.css
│ │ │ ├── ModlogItem.tsx
│ │ │ ├── ModlogItemMoreActions.module.css
│ │ │ ├── ModlogItemMoreActions.tsx
│ │ │ ├── helpers.ts
│ │ │ └── types
│ │ │ │ ├── addCommunity.ts
│ │ │ │ ├── addInstance.ts
│ │ │ │ ├── banFromCommunity.ts
│ │ │ │ ├── banFromInstance.ts
│ │ │ │ ├── featurePost.ts
│ │ │ │ ├── hideCommunity.ts
│ │ │ │ ├── lockPost.ts
│ │ │ │ ├── purgeComment.ts
│ │ │ │ ├── purgeCommunity.ts
│ │ │ │ ├── purgePerson.ts
│ │ │ │ ├── purgePost.ts
│ │ │ │ ├── removeComment.ts
│ │ │ │ ├── removeCommunity.ts
│ │ │ │ ├── removePost.ts
│ │ │ │ ├── shared.ts
│ │ │ │ └── transferCommunity.ts
│ │ ├── modSlice.tsx
│ │ ├── useCanModerate.tsx
│ │ ├── useCommentModActions.tsx
│ │ ├── useIsAdmin.tsx
│ │ ├── useModZoneActions.tsx
│ │ └── usePostModActions.tsx
│ ├── post
│ │ ├── actions
│ │ │ ├── ActionButton.module.css
│ │ │ ├── ActionButton.tsx
│ │ │ ├── ActionsContainer.module.css
│ │ │ ├── ActionsContainer.tsx
│ │ │ ├── PostActions.module.css
│ │ │ ├── PostActions.tsx
│ │ │ └── ShareButton.tsx
│ │ ├── appearance
│ │ │ ├── PostAppearanceProvider.tsx
│ │ │ └── appearanceSlice.ts
│ │ ├── crosspost
│ │ │ ├── CompactCrosspost.module.css
│ │ │ ├── CompactCrosspost.tsx
│ │ │ ├── Crosspost.tsx
│ │ │ ├── CrosspostContainer.tsx
│ │ │ ├── CrosspostContents.module.css
│ │ │ ├── CrosspostContents.tsx
│ │ │ ├── create
│ │ │ │ ├── CreateCrosspostDialog.module.css
│ │ │ │ └── CreateCrosspostDialog.tsx
│ │ │ └── useCopyPostImageDataIfNeeded.ts
│ │ ├── detail
│ │ │ ├── AnnouncementIcon.module.css
│ │ │ ├── AnnouncementIcon.tsx
│ │ │ ├── HappyStat.tsx
│ │ │ ├── Locked.module.css
│ │ │ ├── Locked.tsx
│ │ │ ├── PostDetail.tsx
│ │ │ ├── PostHeader.module.css
│ │ │ ├── PostHeader.tsx
│ │ │ ├── Stat.module.css
│ │ │ ├── Stat.tsx
│ │ │ ├── Stats.module.css
│ │ │ ├── Stats.tsx
│ │ │ ├── TimeStat.module.css
│ │ │ ├── TimeStat.tsx
│ │ │ ├── ViewAllComments.module.css
│ │ │ └── ViewAllComments.tsx
│ │ ├── inFeed
│ │ │ ├── Post.module.css
│ │ │ ├── Post.tsx
│ │ │ ├── PreviewStats.module.css
│ │ │ ├── PreviewStats.tsx
│ │ │ ├── compact
│ │ │ │ ├── CompactFeedPostMedia.tsx
│ │ │ │ ├── CompactPost.module.css
│ │ │ │ ├── CompactPost.tsx
│ │ │ │ ├── Thumbnail.module.css
│ │ │ │ ├── Thumbnail.tsx
│ │ │ │ └── self.svg
│ │ │ ├── large
│ │ │ │ ├── LargePost.module.css
│ │ │ │ ├── LargePost.tsx
│ │ │ │ ├── LargePostContents.module.css
│ │ │ │ ├── LargePostContents.tsx
│ │ │ │ └── media
│ │ │ │ │ ├── BlurOverlay.module.css
│ │ │ │ │ ├── BlurOverlay.tsx
│ │ │ │ │ ├── BlurOverlayMessage.module.css
│ │ │ │ │ ├── BlurOverlayMessage.tsx
│ │ │ │ │ ├── LargeFeedMedia.module.css
│ │ │ │ │ ├── LargeFeedMedia.tsx
│ │ │ │ │ ├── LargeFeedPostMedia.module.css
│ │ │ │ │ └── LargeFeedPostMedia.tsx
│ │ │ └── usePostSrc.ts
│ │ ├── link
│ │ │ ├── CommentLink.tsx
│ │ │ ├── Link.module.css
│ │ │ ├── Link.tsx
│ │ │ ├── LinkPreview.module.css
│ │ │ ├── LinkPreview.tsx
│ │ │ ├── PostLink.tsx
│ │ │ └── thumbnail
│ │ │ │ ├── sites
│ │ │ │ └── youtube.ts
│ │ │ │ ├── thumbnailSlice.tsx
│ │ │ │ └── thumbnailinator.ts
│ │ ├── new
│ │ │ ├── NewPostText.tsx
│ │ │ ├── PhotoPreview.module.css
│ │ │ ├── PhotoPreview.tsx
│ │ │ ├── PostEditor.tsx
│ │ │ ├── PostEditorModal.tsx
│ │ │ ├── PostEditorRoot.module.css
│ │ │ └── PostEditorRoot.tsx
│ │ ├── postSlice.ts
│ │ ├── shared
│ │ │ ├── MoreActions.tsx
│ │ │ ├── MoreModAction.tsx
│ │ │ ├── SaveButton.module.css
│ │ │ ├── SaveButton.tsx
│ │ │ ├── VoteButton.module.css
│ │ │ ├── VoteButton.tsx
│ │ │ ├── useCrosspostUrl.tsx
│ │ │ └── usePostActions.tsx
│ │ └── useIsPostUrlMedia.ts
│ ├── pwa
│ │ ├── BeforeInstallPromptProvider.tsx
│ │ └── useShouldInstall.ts
│ ├── report
│ │ └── Report.tsx
│ ├── resolve
│ │ └── resolveSlice.tsx
│ ├── search
│ │ ├── AutoResolvePostComment.module.css
│ │ ├── AutoResolvePostComment.tsx
│ │ ├── EmptySearch.tsx
│ │ ├── SearchOptions.tsx
│ │ ├── SpecialSearchMenu.tsx
│ │ ├── TrendingCommunities.module.css
│ │ └── TrendingCommunities.tsx
│ ├── settings
│ │ ├── appIcon
│ │ │ ├── AppIcon.module.css
│ │ │ ├── AppIcon.tsx
│ │ │ └── appIconSlice.tsx
│ │ ├── appearance
│ │ │ ├── AppearanceSettings.tsx
│ │ │ ├── CompactSettings.tsx
│ │ │ ├── LargeSettings.tsx
│ │ │ ├── TextSize.module.css
│ │ │ ├── TextSize.tsx
│ │ │ ├── ThemesButton.tsx
│ │ │ ├── layout
│ │ │ │ ├── Layout.tsx
│ │ │ │ └── TwoColumn.tsx
│ │ │ ├── other
│ │ │ │ ├── DisplayVotes.tsx
│ │ │ │ ├── Other.tsx
│ │ │ │ └── ShowUserInstance.tsx
│ │ │ ├── posts
│ │ │ │ ├── AlwaysShowAuthor.tsx
│ │ │ │ ├── BlurNsfw.tsx
│ │ │ │ ├── CommunityAtTop.tsx
│ │ │ │ ├── EmbedCrossposts.tsx
│ │ │ │ ├── EmbedExternalMedia.tsx
│ │ │ │ ├── PostSize.tsx
│ │ │ │ ├── Posts.tsx
│ │ │ │ ├── RememberType.tsx
│ │ │ │ ├── ShowCommunityIcons.tsx
│ │ │ │ └── SubscribedIcon.tsx
│ │ │ └── themes
│ │ │ │ ├── Theme.tsx
│ │ │ │ ├── appTheme
│ │ │ │ ├── AppTheme.module.css
│ │ │ │ ├── AppTheme.tsx
│ │ │ │ ├── AppThemePreview.module.css
│ │ │ │ └── AppThemePreview.tsx
│ │ │ │ ├── commentsTheme
│ │ │ │ ├── Color.module.css
│ │ │ │ ├── Color.tsx
│ │ │ │ ├── CommentsTheme.module.css
│ │ │ │ ├── CommentsTheme.tsx
│ │ │ │ └── values.ts
│ │ │ │ ├── dark
│ │ │ │ ├── Dark.tsx
│ │ │ │ └── PureBlack.tsx
│ │ │ │ ├── system
│ │ │ │ ├── DarkMode.tsx
│ │ │ │ ├── DeviceMode.tsx
│ │ │ │ ├── QuickSwitchDarkMode.tsx
│ │ │ │ ├── SelectDeviceMode.tsx
│ │ │ │ ├── System.tsx
│ │ │ │ └── UserDarkMode.tsx
│ │ │ │ └── votesTheme
│ │ │ │ ├── VotesTheme.module.css
│ │ │ │ └── VotesTheme.tsx
│ │ ├── biometric
│ │ │ ├── BiometricIcon.tsx
│ │ │ ├── BiometricSettings.tsx
│ │ │ ├── BiometricTitle.tsx
│ │ │ ├── biometricSlice.ts
│ │ │ └── settings
│ │ │ │ ├── BiometricEnabled.tsx
│ │ │ │ └── BiometricTimeout.tsx
│ │ ├── blocks
│ │ │ ├── BlockedCommunities.tsx
│ │ │ ├── BlockedInstances.tsx
│ │ │ ├── BlockedUsers.tsx
│ │ │ ├── FilterNsfw.tsx
│ │ │ ├── FilteredKeywords.tsx
│ │ │ └── FilteredWebsites.tsx
│ │ ├── general
│ │ │ ├── GeneralSettings.tsx
│ │ │ ├── comments
│ │ │ │ ├── CollapsedByDefault.tsx
│ │ │ │ ├── Comments.tsx
│ │ │ │ ├── DefaultSort.tsx
│ │ │ │ ├── HighlightNewAccount.tsx
│ │ │ │ ├── JumpButtonPosition.tsx
│ │ │ │ ├── RememberCommunityCommentSort.tsx
│ │ │ │ ├── ShowCollapsed.tsx
│ │ │ │ ├── ShowCommentImages.tsx
│ │ │ │ ├── ShowJumpButton.tsx
│ │ │ │ ├── TapToCollapse.tsx
│ │ │ │ └── TouchFriendlyLinks.tsx
│ │ │ ├── hiding
│ │ │ │ ├── DisableMarkingRead.tsx
│ │ │ │ ├── HidingSettings.tsx
│ │ │ │ ├── MarkReadOnScroll.tsx
│ │ │ │ ├── NeverShowReadPosts.tsx
│ │ │ │ ├── ShowHiddenInCommunities.tsx
│ │ │ │ ├── ShowHideReadButton.tsx
│ │ │ │ └── autoHide
│ │ │ │ │ ├── AutoHideRead.tsx
│ │ │ │ │ └── DisableInCommunities.tsx
│ │ │ ├── media
│ │ │ │ ├── HideAltText.tsx
│ │ │ │ ├── Media.tsx
│ │ │ │ └── ShowControlsOnOpen.tsx
│ │ │ ├── other
│ │ │ │ ├── ClearCache.tsx
│ │ │ │ ├── DefaultFeed.tsx
│ │ │ │ ├── Haptics.tsx
│ │ │ │ ├── LinkHandler.tsx
│ │ │ │ ├── NoSubscribedInFeed.tsx
│ │ │ │ ├── OpenNativeApps.tsx
│ │ │ │ ├── Other.tsx
│ │ │ │ ├── ProfileTabLabel.tsx
│ │ │ │ ├── Share.tsx
│ │ │ │ ├── Thumbnailinator.tsx
│ │ │ │ └── backup
│ │ │ │ │ ├── BackupSettings.tsx
│ │ │ │ │ └── helpers.ts
│ │ │ ├── posts
│ │ │ │ ├── AutoplayMedia.tsx
│ │ │ │ ├── DefaultSort.tsx
│ │ │ │ ├── InfiniteScrolling.tsx
│ │ │ │ ├── Posts.tsx
│ │ │ │ ├── RememberCommunityPostSort.tsx
│ │ │ │ └── UpvoteOnSave.tsx
│ │ │ └── safari
│ │ │ │ ├── AlwaysUseReaderMode.tsx
│ │ │ │ └── Safari.tsx
│ │ ├── gestures
│ │ │ ├── SwipeSettings.tsx
│ │ │ ├── gestureSlice.tsx
│ │ │ ├── swipeLong.svg
│ │ │ └── swipeShort.svg
│ │ ├── root
│ │ │ ├── DatabaseErrorItem.tsx
│ │ │ └── DatabaseErrorModal.tsx
│ │ ├── settingsSlice.tsx
│ │ ├── shared
│ │ │ ├── SettingSelector.module.css
│ │ │ ├── SettingSelector.tsx
│ │ │ ├── formatting.module.css
│ │ │ └── formatting.tsx
│ │ ├── syncStorage.ts
│ │ └── tags
│ │ │ ├── Browse.tsx
│ │ │ ├── Enabled.tsx
│ │ │ ├── HideInstance.tsx
│ │ │ ├── Reset.tsx
│ │ │ ├── StoreSource.tsx
│ │ │ ├── TagsSettings.tsx
│ │ │ ├── TrackVotes.tsx
│ │ │ ├── browse
│ │ │ ├── BrowseTag.module.css
│ │ │ ├── BrowseTag.tsx
│ │ │ └── BrowseTags.tsx
│ │ │ └── tag.svg
│ ├── share
│ │ ├── asImage
│ │ │ ├── AddRemoveButtons.module.css
│ │ │ ├── AddRemoveButtons.tsx
│ │ │ ├── ShareAsImage.module.css
│ │ │ ├── ShareAsImage.tsx
│ │ │ ├── ShareAsImageModal.module.css
│ │ │ ├── ShareAsImageModal.tsx
│ │ │ ├── Watermark.module.css
│ │ │ ├── Watermark.tsx
│ │ │ └── includeStyleProperties.ts
│ │ ├── goVoyager.ts
│ │ ├── share.ts
│ │ ├── useSharePostComment.ts
│ │ └── useShareUserCommunity.ts
│ ├── shared
│ │ ├── AppContent.tsx
│ │ ├── AppHeader.tsx
│ │ ├── AppTitle.tsx
│ │ ├── CenteredSpinner.module.css
│ │ ├── CenteredSpinner.tsx
│ │ ├── DocumentTitle.tsx
│ │ ├── DynamicDismissableModal.tsx
│ │ ├── FakeIcon.module.css
│ │ ├── FakeIcon.tsx
│ │ ├── HeaderEllipsisIcon.tsx
│ │ ├── InAppExternalLink.tsx
│ │ ├── IonModalAutosizedForOnScreenKeyboard.module.css
│ │ ├── IonModalAutosizedForOnScreenKeyboard.tsx
│ │ ├── ListEditor.module.css
│ │ ├── ListEditor.tsx
│ │ ├── MultilineTitle.module.css
│ │ ├── MultilineTitle.tsx
│ │ ├── SelectTextModal.module.css
│ │ ├── SelectTextModal.tsx
│ │ ├── TextareaAutosizedForOnScreenKeyboard.tsx
│ │ ├── Url.tsx
│ │ ├── bounce.module.css
│ │ ├── markdown
│ │ │ ├── InlineMarkdown.tsx
│ │ │ ├── LinkInterceptor.module.css
│ │ │ ├── LinkInterceptor.tsx
│ │ │ ├── Markdown.module.css
│ │ │ ├── Markdown.test.tsx
│ │ │ ├── Markdown.tsx
│ │ │ ├── MarkdownImg.module.css
│ │ │ ├── MarkdownImg.tsx
│ │ │ ├── components
│ │ │ │ ├── Table.module.css
│ │ │ │ ├── Table.tsx
│ │ │ │ └── spoiler
│ │ │ │ │ ├── Details.module.css
│ │ │ │ │ ├── Details.tsx
│ │ │ │ │ ├── Summary.tsx
│ │ │ │ │ ├── inlinifySpoiler.ts
│ │ │ │ │ └── spoilerSlice.ts
│ │ │ ├── customRemarkGfm.tsx
│ │ │ └── editing
│ │ │ │ ├── Editor.module.css
│ │ │ │ ├── Editor.tsx
│ │ │ │ ├── MarkdownToolbar.module.css
│ │ │ │ ├── MarkdownToolbar.tsx
│ │ │ │ ├── PreviewModal.tsx
│ │ │ │ ├── modal
│ │ │ │ ├── GenericMarkdownEditorModal.tsx
│ │ │ │ └── contents
│ │ │ │ │ ├── CommentEditPage.tsx
│ │ │ │ │ ├── CommentEditorContent.tsx
│ │ │ │ │ ├── CommentReplyPage.tsx
│ │ │ │ │ ├── ItemReplyingTo.module.css
│ │ │ │ │ ├── ItemReplyingTo.tsx
│ │ │ │ │ ├── PrivateMessagePage.tsx
│ │ │ │ │ └── TemporarySelectedAccountContext.tsx
│ │ │ │ ├── modes
│ │ │ │ ├── DefaultMode.module.css
│ │ │ │ ├── DefaultMode.tsx
│ │ │ │ ├── autocomplete
│ │ │ │ │ ├── CommunityAutocompleteMode.tsx
│ │ │ │ │ ├── GenericAutocompleteMode.module.css
│ │ │ │ │ ├── GenericAutocompleteMode.tsx
│ │ │ │ │ └── UsernameAutocompleteMode.tsx
│ │ │ │ └── textFaces.txt
│ │ │ │ ├── uploadImageSlice.tsx
│ │ │ │ ├── useEditorHelpers.tsx
│ │ │ │ └── useUploadImage.tsx
│ │ ├── selectorModals
│ │ │ ├── CommunitySelectorModal.tsx
│ │ │ ├── GenericSelectorModal.module.css
│ │ │ ├── GenericSelectorModal.tsx
│ │ │ └── InstanceSelectorModal.tsx
│ │ ├── shared.module.css
│ │ ├── sliding
│ │ │ ├── ActionContents.module.css
│ │ │ ├── ActionContents.tsx
│ │ │ ├── BaseSliding.module.css
│ │ │ ├── BaseSliding.tsx
│ │ │ ├── SlidingInbox.tsx
│ │ │ ├── SlidingItem.module.css
│ │ │ ├── SlidingItem.tsx
│ │ │ ├── SlidingNestedCommentVote.tsx
│ │ │ ├── SlidingPostVote.tsx
│ │ │ └── internal
│ │ │ │ ├── GenericBaseSliding.tsx
│ │ │ │ ├── impl
│ │ │ │ ├── DMActionsImpl.tsx
│ │ │ │ └── VotableActionsImpl.tsx
│ │ │ │ └── shared.ts
│ │ ├── toast
│ │ │ ├── Toast.module.css
│ │ │ └── Toast.tsx
│ │ ├── useLemmyUrlHandler.ts
│ │ ├── useLinkLongPress.tsx
│ │ └── useNativeBrowser.ts
│ ├── sidebar
│ │ ├── Sidebar.tsx
│ │ └── internal
│ │ │ ├── CommunitySidebar.tsx
│ │ │ ├── GenericSidebar.module.css
│ │ │ ├── GenericSidebar.tsx
│ │ │ ├── InstanceSidebar.tsx
│ │ │ ├── SidebarCounts.tsx
│ │ │ └── SidebarOwners.tsx
│ ├── tags
│ │ ├── SourceUrlButton.tsx
│ │ ├── UserScore.module.css
│ │ ├── UserScore.tsx
│ │ ├── UserTag.module.css
│ │ ├── UserTag.tsx
│ │ ├── UserTagModal.module.css
│ │ ├── UserTagModal.tsx
│ │ ├── userTagSlice.tsx
│ │ └── voteColor.ts
│ ├── tips
│ │ ├── ExternalSponsorOptions.tsx
│ │ ├── Tip.module.css
│ │ ├── TipDialog.module.css
│ │ ├── TipDialog.tsx
│ │ ├── external
│ │ │ ├── ExternalTip.tsx
│ │ │ └── ExternalTips.tsx
│ │ ├── inAppPurchase
│ │ │ ├── InAppProducts.tsx
│ │ │ ├── Tip.tsx
│ │ │ └── useInAppPurchase.ts
│ │ ├── inAppPurchase__stub
│ │ │ └── InAppProducts.tsx
│ │ └── useOnExternalPaymentLinkClickHandler.ts
│ └── user
│ │ ├── AsyncProfile.tsx
│ │ ├── LoggedOut.module.css
│ │ ├── LoggedOut.tsx
│ │ ├── PostContext.module.css
│ │ ├── PostContext.tsx
│ │ ├── Profile.tsx
│ │ ├── ProfilePageActions.tsx
│ │ ├── Scores.module.css
│ │ ├── Scores.tsx
│ │ ├── UserPageActions.tsx
│ │ ├── incognito.svg
│ │ ├── usePresentUserActions.ts
│ │ └── userSlice.tsx
├── helpers
│ ├── AppPage.tsx
│ ├── AppVList.tsx
│ ├── BooleanWatcher.ts
│ ├── FloatingDialog.module.css
│ ├── FloatingDialog.tsx
│ ├── appLinkBuilder.ts
│ ├── array.ts
│ ├── blob.ts
│ ├── color.ts
│ ├── css.ts
│ ├── date.test.ts
│ ├── date.ts
│ ├── device.ts
│ ├── dom.ts
│ ├── gif.ts
│ ├── imageCompress.ts
│ ├── ionic.ts
│ ├── jwt.ts
│ ├── lemmy.test.ts
│ ├── lemmy.ts
│ ├── lemmyCompat.ts
│ ├── lemmyErrors.ts
│ ├── longPress.ts
│ ├── markdown.test.ts
│ ├── markdown.ts
│ ├── number.test.ts
│ ├── number.ts
│ ├── object.test.ts
│ ├── object.ts
│ ├── promise.ts
│ ├── regex.ts
│ ├── routes.ts
│ ├── safari.ts
│ ├── scrollUpIfNeeded.ts
│ ├── serviceWorker.ts
│ ├── toast.ts
│ ├── toastMessages.ts
│ ├── typescript.d.ts
│ ├── url.test.ts
│ ├── url.ts
│ ├── useAppNavigation.ts
│ ├── useAppToast.module.css
│ ├── useAppToast.tsx
│ ├── useClient.ts
│ ├── useGetAppScrollable.ts
│ ├── useHapticFeedback.ts
│ ├── useIonNavBackButtonListener.ts
│ ├── useIonViewIsVisible.tsx
│ ├── useKeyboardOpen.ts
│ ├── useOptimizedIonRouter.tsx
│ ├── usePreservePositionFromBottomInScrollView.ts
│ ├── useStateRef.ts
│ ├── useSupported.ts
│ ├── useSystemDarkMode.ts
│ ├── useTextRecovery.ts
│ ├── virtua.tsx
│ ├── vote.ts
│ └── voyager.ts
├── index.tsx
├── react.d.ts
├── routes
│ ├── Outlet.module.css
│ ├── Outlet.tsx
│ ├── OutletProvider.tsx
│ ├── TabBar.module.css
│ ├── TabBar.tsx
│ ├── TabbedRoutes.tsx
│ ├── common
│ │ ├── ActorRedirect.tsx
│ │ ├── Route.tsx
│ │ └── Router.tsx
│ ├── pages
│ │ ├── inbox
│ │ │ ├── BoxesPage.tsx
│ │ │ ├── ComposeButton.tsx
│ │ │ ├── ConversationPage.module.css
│ │ │ ├── ConversationPage.tsx
│ │ │ ├── InboxAuthRequired.tsx
│ │ │ ├── InboxPage.tsx
│ │ │ ├── MarkAllAsReadButton.tsx
│ │ │ ├── MentionsPage.tsx
│ │ │ ├── MessagesPage.tsx
│ │ │ └── RepliesPage.tsx
│ │ ├── posts
│ │ │ ├── CommunitiesPage.tsx
│ │ │ └── PostPage.tsx
│ │ ├── profile
│ │ │ ├── BaseProfileFeedItemsPage.tsx
│ │ │ ├── ProfileFeedCommentsPage.tsx
│ │ │ ├── ProfileFeedHiddenPostsPage.tsx
│ │ │ ├── ProfileFeedPostsPage.tsx
│ │ │ ├── ProfileFeedSavedPage.tsx
│ │ │ ├── ProfileFeedVotedPage.tsx
│ │ │ ├── ProfilePage.tsx
│ │ │ └── UserPage.tsx
│ │ ├── search
│ │ │ ├── CommunitiesResultsPage.tsx
│ │ │ ├── RandomCommunityPage.tsx
│ │ │ ├── SearchPage.module.css
│ │ │ ├── SearchPage.tsx
│ │ │ └── results
│ │ │ │ ├── SearchCommunitiesPage.tsx
│ │ │ │ └── SearchFeedResultsPage.tsx
│ │ ├── settings
│ │ │ ├── AppIconPage.tsx
│ │ │ ├── AppearancePage.tsx
│ │ │ ├── AppearanceThemePage.tsx
│ │ │ ├── BiometricPage.tsx
│ │ │ ├── BlocksSettingsPage.tsx
│ │ │ ├── BrowseTagsPage.tsx
│ │ │ ├── DeviceModeSettingsPage.tsx
│ │ │ ├── GeneralPage.tsx
│ │ │ ├── GesturesPage.tsx
│ │ │ ├── HidingSettingsPage.tsx
│ │ │ ├── InstallAppPage.module.css
│ │ │ ├── InstallAppPage.tsx
│ │ │ ├── RedditDataMigratePage.tsx
│ │ │ ├── RedditMigrateSubsListPage.tsx
│ │ │ ├── SettingsPage.module.css
│ │ │ ├── SettingsPage.tsx
│ │ │ ├── TagsSettingsPage.tsx
│ │ │ ├── UpdateAppPage.module.css
│ │ │ ├── UpdateAppPage.tsx
│ │ │ ├── about
│ │ │ │ ├── AboutPage.tsx
│ │ │ │ ├── AboutThanksPage.tsx
│ │ │ │ ├── AppDetails.module.css
│ │ │ │ ├── AppDetails.tsx
│ │ │ │ ├── AppVersionInfo.tsx
│ │ │ │ └── compliments.txt
│ │ │ └── update
│ │ │ │ └── UpdateContext.tsx
│ │ └── shared
│ │ │ ├── CommentsPage.tsx
│ │ │ ├── CommunityCommentsPage.tsx
│ │ │ ├── CommunityPage.module.css
│ │ │ ├── CommunityPage.tsx
│ │ │ ├── CommunitySidebarPage.tsx
│ │ │ ├── FeedContent.tsx
│ │ │ ├── InstanceSidebarPage.tsx
│ │ │ ├── ModlogPage.tsx
│ │ │ ├── ModqueuePage.tsx
│ │ │ └── SpecialFeedPage.tsx
│ ├── tabs
│ │ ├── anyPane.tsx
│ │ ├── anyPaneGeneral.tsx
│ │ ├── anyPaneInbox.tsx
│ │ ├── buttons
│ │ │ ├── InboxTabButton.tsx
│ │ │ ├── PostsTabButton.tsx
│ │ │ ├── ProfileTabButton.module.css
│ │ │ ├── ProfileTabButton.tsx
│ │ │ ├── SearchTabButton.tsx
│ │ │ ├── SettingsTabButton.tsx
│ │ │ ├── shared.module.css
│ │ │ └── shared.tsx
│ │ ├── general.tsx
│ │ ├── inbox.tsx
│ │ ├── posts.tsx
│ │ ├── profile.tsx
│ │ ├── search.tsx
│ │ └── settings.tsx
│ └── twoColumn
│ │ ├── AppBackButton.tsx
│ │ ├── SecondColumnContent.tsx
│ │ ├── TwoColumnEmpty.module.css
│ │ ├── TwoColumnEmpty.tsx
│ │ ├── useActivatedClass.ts
│ │ ├── useIsDeviceTwoColumnCapable.ts
│ │ ├── useIsLandscape.ts
│ │ ├── useIsLinkSelected.ts
│ │ ├── useIsPageHidden.tsx
│ │ ├── useIsSecondColumn.ts
│ │ ├── useIsTwoColumnLayout.ts
│ │ ├── useIsViewportTwoColumnCapable.ts
│ │ └── useOpenInSecondColumnIfNeededProps.tsx
├── services
│ ├── app.ts
│ ├── db.ts
│ ├── lemmy.ts
│ ├── lemmyverse.ts
│ ├── nativeFetch.ts
│ └── redgifs.ts
├── setupTests.ts
├── store.tsx
└── vite-env.d.ts
├── trapeze.yaml
├── tsconfig.json
└── vite.config.ts
/.browserslistrc:
--------------------------------------------------------------------------------
1 | last 2 versions
2 | not dead
3 | iOS >= 15
--------------------------------------------------------------------------------
/.dockerignore:
--------------------------------------------------------------------------------
1 | *.swp
2 | .git/
3 | .github/
4 | .gitignore
5 | .prettierignore
6 | .vscode/
7 |
8 | *.tsbuildinfo
9 |
10 | node_modules
11 | *.md
12 | dist
13 |
14 | android/
15 | ios/
16 | fastlane/
17 | e2e/
18 |
--------------------------------------------------------------------------------
/.editorconfig:
--------------------------------------------------------------------------------
1 | root = true
2 |
3 | [*.{js,ts,jsx,tsx,yaml,json}]
4 | indent_style = space
5 | indent_size = 2
6 | trim_trailing_whitespace = true
7 | insert_final_newline = true
8 |
--------------------------------------------------------------------------------
/.github/CODEOWNERS:
--------------------------------------------------------------------------------
1 | ** @aeharding
2 | /e2e/ @aashu16 @aeharding
--------------------------------------------------------------------------------
/.github/FUNDING.yml:
--------------------------------------------------------------------------------
1 | github: aeharding
2 |
--------------------------------------------------------------------------------
/.npmrc:
--------------------------------------------------------------------------------
1 | public-hoist-pattern[]=workbox-window
2 |
--------------------------------------------------------------------------------
/.prettierignore:
--------------------------------------------------------------------------------
1 | dist/
2 | pnpm-lock.yaml
3 | ios/
4 | android/
5 | vite.config.ts.timestamp-*
--------------------------------------------------------------------------------
/.prettierrc:
--------------------------------------------------------------------------------
1 | {
2 | "tabWidth": 2,
3 | "useTabs": false,
4 | "trailingComma": "all"
5 | }
6 |
--------------------------------------------------------------------------------
/.release-it.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://unpkg.com/release-it@17/schema/release-it.json",
3 | "git": {
4 | "commitMessage": "chore: bump version to ${version}",
5 | "tag": false,
6 | "getLatestTagFromAllRefs": true
7 | },
8 | "npm": {
9 | "publish": false
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/.vscode/extensions.json:
--------------------------------------------------------------------------------
1 | {
2 | "recommendations": [
3 | "ionic.ionic",
4 | "esbenp.prettier-vscode",
5 | "github.vscode-github-actions",
6 | "clinyong.vscode-css-modules"
7 | ]
8 | }
9 |
--------------------------------------------------------------------------------
/.vscode/settings.json:
--------------------------------------------------------------------------------
1 | {
2 | "editor.formatOnSave": true,
3 | "prettier.enable": true,
4 | "editor.defaultFormatter": "esbenp.prettier-vscode",
5 | "typescript.tsdk": "node_modules/typescript/lib",
6 | "editor.codeActionsOnSave": {
7 | "source.fixAll.eslint": "explicit"
8 | },
9 | "eslint.codeActionsOnSave.rules": ["perfectionist/*"],
10 | "css.lint.validProperties": ["composes"],
11 | "css.lint.vendorPrefix": "ignore"
12 | }
13 |
--------------------------------------------------------------------------------
/Gemfile:
--------------------------------------------------------------------------------
1 | source "https://rubygems.org"
2 |
3 | gem "fastlane"
4 |
5 | # https://github.com/fastlane/fastlane/issues/29183#issuecomment-2567093826
6 | gem "abbrev"
7 | gem "mutex_m"
8 | gem "ostruct"
--------------------------------------------------------------------------------
/android/app/.gitignore:
--------------------------------------------------------------------------------
1 | /build/*
2 | !/build/.npmkeep
3 |
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-land-hdpi/splash.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/drawable-land-hdpi/splash.png
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-land-ldpi/splash.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/drawable-land-ldpi/splash.png
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-land-mdpi/splash.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/drawable-land-mdpi/splash.png
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-land-xhdpi/splash.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/drawable-land-xhdpi/splash.png
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-land-xxhdpi/splash.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/drawable-land-xxhdpi/splash.png
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-land-xxxhdpi/splash.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/drawable-land-xxxhdpi/splash.png
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-port-hdpi/splash.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/drawable-port-hdpi/splash.png
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-port-ldpi/splash.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/drawable-port-ldpi/splash.png
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-port-mdpi/splash.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/drawable-port-mdpi/splash.png
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-port-xhdpi/splash.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/drawable-port-xhdpi/splash.png
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-port-xxhdpi/splash.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/drawable-port-xxhdpi/splash.png
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-port-xxxhdpi/splash.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/drawable-port-xxxhdpi/splash.png
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable/splash.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/drawable/splash.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-anydpi-v26/galactic.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-anydpi-v26/holidays.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-anydpi-v26/original.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-anydpi-v26/planetary.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-anydpi-v26/pride.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-anydpi-v26/psych.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-anydpi-v26/space.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-hdpi/galactic.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-hdpi/galactic.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-hdpi/galactic_background.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-hdpi/galactic_background.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-hdpi/galactic_foreground.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-hdpi/galactic_foreground.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-hdpi/galactic_round.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-hdpi/galactic_round.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-hdpi/holidays.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-hdpi/holidays.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-hdpi/holidays_background.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-hdpi/holidays_background.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-hdpi/holidays_foreground.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-hdpi/holidays_foreground.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-hdpi/holidays_round.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-hdpi/holidays_round.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-hdpi/ic_launcher.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-hdpi/ic_launcher.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-hdpi/ic_launcher_background.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-hdpi/ic_launcher_background.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-hdpi/original.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-hdpi/original.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-hdpi/original_background.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-hdpi/original_background.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-hdpi/original_foreground.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-hdpi/original_foreground.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-hdpi/original_round.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-hdpi/original_round.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-hdpi/planetary.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-hdpi/planetary.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-hdpi/planetary_background.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-hdpi/planetary_background.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-hdpi/planetary_foreground.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-hdpi/planetary_foreground.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-hdpi/planetary_round.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-hdpi/planetary_round.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-hdpi/pride.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-hdpi/pride.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-hdpi/pride_background.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-hdpi/pride_background.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-hdpi/pride_foreground.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-hdpi/pride_foreground.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-hdpi/pride_round.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-hdpi/pride_round.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-hdpi/psych.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-hdpi/psych.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-hdpi/psych_background.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-hdpi/psych_background.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-hdpi/psych_foreground.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-hdpi/psych_foreground.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-hdpi/psych_round.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-hdpi/psych_round.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-hdpi/space.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-hdpi/space.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-hdpi/space_background.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-hdpi/space_background.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-hdpi/space_foreground.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-hdpi/space_foreground.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-hdpi/space_round.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-hdpi/space_round.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-mdpi/galactic.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-mdpi/galactic.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-mdpi/galactic_background.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-mdpi/galactic_background.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-mdpi/galactic_foreground.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-mdpi/galactic_foreground.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-mdpi/galactic_round.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-mdpi/galactic_round.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-mdpi/holidays.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-mdpi/holidays.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-mdpi/holidays_background.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-mdpi/holidays_background.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-mdpi/holidays_foreground.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-mdpi/holidays_foreground.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-mdpi/holidays_round.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-mdpi/holidays_round.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-mdpi/ic_launcher.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-mdpi/ic_launcher.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-mdpi/ic_launcher_background.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-mdpi/ic_launcher_background.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-mdpi/original.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-mdpi/original.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-mdpi/original_background.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-mdpi/original_background.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-mdpi/original_foreground.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-mdpi/original_foreground.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-mdpi/original_round.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-mdpi/original_round.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-mdpi/planetary.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-mdpi/planetary.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-mdpi/planetary_background.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-mdpi/planetary_background.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-mdpi/planetary_foreground.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-mdpi/planetary_foreground.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-mdpi/planetary_round.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-mdpi/planetary_round.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-mdpi/pride.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-mdpi/pride.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-mdpi/pride_background.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-mdpi/pride_background.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-mdpi/pride_foreground.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-mdpi/pride_foreground.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-mdpi/pride_round.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-mdpi/pride_round.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-mdpi/psych.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-mdpi/psych.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-mdpi/psych_background.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-mdpi/psych_background.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-mdpi/psych_foreground.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-mdpi/psych_foreground.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-mdpi/psych_round.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-mdpi/psych_round.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-mdpi/space.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-mdpi/space.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-mdpi/space_background.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-mdpi/space_background.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-mdpi/space_foreground.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-mdpi/space_foreground.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-mdpi/space_round.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-mdpi/space_round.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xhdpi/galactic.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-xhdpi/galactic.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xhdpi/galactic_background.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-xhdpi/galactic_background.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xhdpi/galactic_foreground.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-xhdpi/galactic_foreground.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xhdpi/galactic_round.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-xhdpi/galactic_round.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xhdpi/holidays.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-xhdpi/holidays.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xhdpi/holidays_background.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-xhdpi/holidays_background.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xhdpi/holidays_foreground.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-xhdpi/holidays_foreground.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xhdpi/holidays_round.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-xhdpi/holidays_round.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xhdpi/ic_launcher.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-xhdpi/ic_launcher.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xhdpi/ic_launcher_background.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-xhdpi/ic_launcher_background.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xhdpi/original.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-xhdpi/original.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xhdpi/original_background.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-xhdpi/original_background.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xhdpi/original_foreground.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-xhdpi/original_foreground.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xhdpi/original_round.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-xhdpi/original_round.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xhdpi/planetary.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-xhdpi/planetary.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xhdpi/planetary_background.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-xhdpi/planetary_background.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xhdpi/planetary_foreground.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-xhdpi/planetary_foreground.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xhdpi/planetary_round.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-xhdpi/planetary_round.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xhdpi/pride.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-xhdpi/pride.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xhdpi/pride_background.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-xhdpi/pride_background.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xhdpi/pride_foreground.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-xhdpi/pride_foreground.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xhdpi/pride_round.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-xhdpi/pride_round.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xhdpi/psych.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-xhdpi/psych.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xhdpi/psych_background.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-xhdpi/psych_background.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xhdpi/psych_foreground.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-xhdpi/psych_foreground.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xhdpi/psych_round.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-xhdpi/psych_round.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xhdpi/space.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-xhdpi/space.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xhdpi/space_background.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-xhdpi/space_background.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xhdpi/space_foreground.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-xhdpi/space_foreground.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xhdpi/space_round.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-xhdpi/space_round.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxhdpi/galactic.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-xxhdpi/galactic.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxhdpi/galactic_background.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-xxhdpi/galactic_background.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxhdpi/galactic_foreground.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-xxhdpi/galactic_foreground.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxhdpi/galactic_round.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-xxhdpi/galactic_round.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxhdpi/holidays.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-xxhdpi/holidays.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxhdpi/holidays_background.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-xxhdpi/holidays_background.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxhdpi/holidays_foreground.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-xxhdpi/holidays_foreground.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxhdpi/holidays_round.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-xxhdpi/holidays_round.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_background.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_background.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxhdpi/original.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-xxhdpi/original.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxhdpi/original_background.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-xxhdpi/original_background.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxhdpi/original_foreground.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-xxhdpi/original_foreground.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxhdpi/original_round.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-xxhdpi/original_round.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxhdpi/planetary.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-xxhdpi/planetary.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxhdpi/planetary_background.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-xxhdpi/planetary_background.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxhdpi/planetary_foreground.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-xxhdpi/planetary_foreground.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxhdpi/planetary_round.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-xxhdpi/planetary_round.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxhdpi/pride.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-xxhdpi/pride.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxhdpi/pride_background.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-xxhdpi/pride_background.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxhdpi/pride_foreground.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-xxhdpi/pride_foreground.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxhdpi/pride_round.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-xxhdpi/pride_round.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxhdpi/psych.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-xxhdpi/psych.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxhdpi/psych_background.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-xxhdpi/psych_background.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxhdpi/psych_foreground.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-xxhdpi/psych_foreground.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxhdpi/psych_round.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-xxhdpi/psych_round.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxhdpi/space.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-xxhdpi/space.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxhdpi/space_background.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-xxhdpi/space_background.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxhdpi/space_foreground.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-xxhdpi/space_foreground.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxhdpi/space_round.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-xxhdpi/space_round.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxxhdpi/galactic.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-xxxhdpi/galactic.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxxhdpi/galactic_background.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-xxxhdpi/galactic_background.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxxhdpi/galactic_foreground.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-xxxhdpi/galactic_foreground.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxxhdpi/galactic_round.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-xxxhdpi/galactic_round.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxxhdpi/holidays.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-xxxhdpi/holidays.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxxhdpi/holidays_background.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-xxxhdpi/holidays_background.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxxhdpi/holidays_foreground.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-xxxhdpi/holidays_foreground.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxxhdpi/holidays_round.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-xxxhdpi/holidays_round.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_background.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_background.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxxhdpi/original.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-xxxhdpi/original.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxxhdpi/original_background.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-xxxhdpi/original_background.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxxhdpi/original_foreground.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-xxxhdpi/original_foreground.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxxhdpi/original_round.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-xxxhdpi/original_round.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxxhdpi/planetary.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-xxxhdpi/planetary.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxxhdpi/planetary_background.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-xxxhdpi/planetary_background.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxxhdpi/planetary_foreground.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-xxxhdpi/planetary_foreground.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxxhdpi/planetary_round.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-xxxhdpi/planetary_round.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxxhdpi/pride.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-xxxhdpi/pride.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxxhdpi/pride_background.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-xxxhdpi/pride_background.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxxhdpi/pride_foreground.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-xxxhdpi/pride_foreground.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxxhdpi/pride_round.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-xxxhdpi/pride_round.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxxhdpi/psych.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-xxxhdpi/psych.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxxhdpi/psych_background.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-xxxhdpi/psych_background.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxxhdpi/psych_foreground.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-xxxhdpi/psych_foreground.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxxhdpi/psych_round.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-xxxhdpi/psych_round.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxxhdpi/space.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-xxxhdpi/space.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxxhdpi/space_background.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-xxxhdpi/space_background.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxxhdpi/space_foreground.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-xxxhdpi/space_foreground.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxxhdpi/space_round.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/app/src/main/res/mipmap-xxxhdpi/space_round.webp
--------------------------------------------------------------------------------
/android/app/src/main/res/values/ic_launcher_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | #FFFFFF
4 |
--------------------------------------------------------------------------------
/android/app/src/main/res/values/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | Voyager
4 | Voyager
5 | app.vger.voyager
6 | app.vger.voyager
7 | Lemmy link
8 |
9 |
--------------------------------------------------------------------------------
/android/app/src/main/res/xml/file_paths.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/android/app/src/test/java/com/getcapacitor/myapp/ExampleUnitTest.java:
--------------------------------------------------------------------------------
1 | package com.getcapacitor.myapp;
2 |
3 | import static org.junit.Assert.*;
4 |
5 | import org.junit.Test;
6 |
7 | /**
8 | * Example local unit test, which will execute on the development machine (host).
9 | *
10 | * @see Testing documentation
11 | */
12 | public class ExampleUnitTest {
13 |
14 | @Test
15 | public void addition_isCorrect() throws Exception {
16 | assertEquals(4, 2 + 2);
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/android/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/android/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/android/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | #Sun Nov 03 15:54:48 CST 2024
2 | distributionBase=GRADLE_USER_HOME
3 | distributionPath=wrapper/dists
4 | distributionSha256Sum=d725d707bfabd4dfdc958c624003b3c80accc03f7037b5122c4b1d0ef15cecab
5 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.9-bin.zip
6 | networkTimeout=10000
7 | validateDistributionUrl=true
8 | zipStoreBase=GRADLE_USER_HOME
9 | zipStorePath=wrapper/dists
10 |
--------------------------------------------------------------------------------
/android/settings.gradle:
--------------------------------------------------------------------------------
1 | include ':app'
2 | include ':capacitor-cordova-android-plugins'
3 | project(':capacitor-cordova-android-plugins').projectDir = new File('./capacitor-cordova-android-plugins/')
4 |
5 | apply from: 'capacitor.settings.gradle'
--------------------------------------------------------------------------------
/android/variables.gradle:
--------------------------------------------------------------------------------
1 | ext {
2 | minSdkVersion = 23
3 | compileSdkVersion = 35
4 | targetSdkVersion = 35
5 | androidxActivityVersion = '1.9.2'
6 | androidxAppCompatVersion = '1.7.0'
7 | androidxCoordinatorLayoutVersion = '1.2.0'
8 | androidxCoreVersion = '1.15.0'
9 | androidxFragmentVersion = '1.8.4'
10 | coreSplashScreenVersion = '1.0.1'
11 | androidxWebkitVersion = '1.12.1'
12 | junitVersion = '4.13.2'
13 | androidxJunitVersion = '1.2.1'
14 | androidxEspressoCoreVersion = '3.6.1'
15 | cordovaAndroidVersion = '10.1.1'
16 | }
--------------------------------------------------------------------------------
/compilerOptions.js:
--------------------------------------------------------------------------------
1 | export default {
2 | environment: {
3 | enableTreatRefLikeIdentifiersAsRefs: true,
4 | },
5 | // eslint-disable-next-line no-undef
6 | reportableLevels: !process.env.RCALL
7 | ? undefined
8 | : // https://github.com/facebook/react/blob/5c56b87/compiler/packages/babel-plugin-react-compiler/src/CompilerError.ts#L11-L39
9 | new Set([
10 | "InvalidJS",
11 | "InvalidReact",
12 | "InvalidConfig",
13 | "CannotPreserveMemoization",
14 | "Todo",
15 | "Invariant",
16 | ]),
17 | };
18 |
--------------------------------------------------------------------------------
/e2e/ci/lemmy.hjson:
--------------------------------------------------------------------------------
1 | {
2 | setup: {
3 | admin_username: "voyager"
4 | admin_password: "voyagerapp"
5 | site_name: "voyager"
6 | }
7 |
8 | database: {
9 | host: postgres
10 | }
11 |
12 | hostname: "localhost"
13 | bind: "0.0.0.0"
14 | port: 8536
15 |
16 | pictrs: {
17 | url: "http://pictrs:8080/"
18 | image_mode: None
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/fastlane/Appfile:
--------------------------------------------------------------------------------
1 | app_identifier(["app.vger.voyager", "app.vger.voyager.watchkitapp", "app.vger.voyager.VoyagerActionExtension"]) # The bundle identifier of your app
2 | apple_id("alex@harding.dev") # Your Apple email address
3 |
4 | itc_team_id("126507712") # App Store Connect Team ID
5 | team_id("SYTN44U2UN") # Developer Portal Team ID
6 |
7 | # For more information about the Appfile, see:
8 | # https://docs.fastlane.tools/advanced/#appfile
9 |
--------------------------------------------------------------------------------
/fastlane/Matchfile:
--------------------------------------------------------------------------------
1 | git_url("https://github.com/aeharding/voyager-match")
2 |
3 | storage_mode("git")
4 |
5 | type("appstore") # The default type, can be: appstore, adhoc, enterprise or development
6 |
7 | # app_identifier(["tools.fastlane.app", "tools.fastlane.app2"])
8 | # username("user@fastlane.tools") # Your Apple Developer Portal username
9 |
10 | # For all available options run `fastlane match --help`
11 | # Remove the # in the beginning of the line to enable the other options
12 |
13 | # The docs are available on https://docs.fastlane.tools/actions/match
14 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/changelogs/default.txt:
--------------------------------------------------------------------------------
1 | Full release change log: https://github.com/aeharding/voyager/releases/latest
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/fastlane/metadata/android/en-US/images/icon.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/phoneScreenshots/1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/fastlane/metadata/android/en-US/images/phoneScreenshots/1.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/phoneScreenshots/2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/fastlane/metadata/android/en-US/images/phoneScreenshots/2.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/phoneScreenshots/3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/fastlane/metadata/android/en-US/images/phoneScreenshots/3.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/phoneScreenshots/4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/fastlane/metadata/android/en-US/images/phoneScreenshots/4.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/phoneScreenshots/5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/fastlane/metadata/android/en-US/images/phoneScreenshots/5.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/sevenInchScreenshots/1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/fastlane/metadata/android/en-US/images/sevenInchScreenshots/1.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/sevenInchScreenshots/2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/fastlane/metadata/android/en-US/images/sevenInchScreenshots/2.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/sevenInchScreenshots/3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/fastlane/metadata/android/en-US/images/sevenInchScreenshots/3.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/sevenInchScreenshots/4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/fastlane/metadata/android/en-US/images/sevenInchScreenshots/4.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/sevenInchScreenshots/5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/fastlane/metadata/android/en-US/images/sevenInchScreenshots/5.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/tenInchScreenshots/1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/fastlane/metadata/android/en-US/images/tenInchScreenshots/1.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/tenInchScreenshots/2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/fastlane/metadata/android/en-US/images/tenInchScreenshots/2.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/tenInchScreenshots/3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/fastlane/metadata/android/en-US/images/tenInchScreenshots/3.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/tenInchScreenshots/4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/fastlane/metadata/android/en-US/images/tenInchScreenshots/4.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/tenInchScreenshots/5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/fastlane/metadata/android/en-US/images/tenInchScreenshots/5.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/short_description.txt:
--------------------------------------------------------------------------------
1 | Join the discussion
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/title.txt:
--------------------------------------------------------------------------------
1 | Voyager for Lemmy
--------------------------------------------------------------------------------
/ionic.config.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "Voyager",
3 | "integrations": {
4 | "capacitor": {}
5 | },
6 | "type": "react-vite"
7 | }
8 |
--------------------------------------------------------------------------------
/ios/.gitignore:
--------------------------------------------------------------------------------
1 | App/build
2 | App/Pods
3 | App/output
4 | App/App/public
5 | DerivedData
6 | xcuserdata
7 |
8 | # Cordova plugins for Capacitor
9 | capacitor-cordova-ios-plugins
10 |
11 | # Generated Config files
12 | App/App/capacitor.config.json
13 | App/App/config.xml
14 |
--------------------------------------------------------------------------------
/ios/App/App.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/ios/App/App.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/ios/App/App.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/ios/App/App/App.entitlements:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | com.apple.developer.associated-domains
6 |
7 | applinks:go.getvoyager.app
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/ios/App/App/Assets.xcassets/Alt Icons/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/ios/App/App/Assets.xcassets/Alt Icons/galactic_v2.appiconset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "galactic.png",
5 | "idiom" : "universal",
6 | "platform" : "ios",
7 | "size" : "1024x1024"
8 | }
9 | ],
10 | "info" : {
11 | "author" : "xcode",
12 | "version" : 1
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/ios/App/App/Assets.xcassets/Alt Icons/galactic_v2.appiconset/galactic.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/ios/App/App/Assets.xcassets/Alt Icons/galactic_v2.appiconset/galactic.png
--------------------------------------------------------------------------------
/ios/App/App/Assets.xcassets/Alt Icons/holidays_v2.appiconset/holidays.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/ios/App/App/Assets.xcassets/Alt Icons/holidays_v2.appiconset/holidays.png
--------------------------------------------------------------------------------
/ios/App/App/Assets.xcassets/Alt Icons/holidays_v2.appiconset/holidaysDark.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/ios/App/App/Assets.xcassets/Alt Icons/holidays_v2.appiconset/holidaysDark.png
--------------------------------------------------------------------------------
/ios/App/App/Assets.xcassets/Alt Icons/holidays_v2.appiconset/holidaysTinted.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/ios/App/App/Assets.xcassets/Alt Icons/holidays_v2.appiconset/holidaysTinted.png
--------------------------------------------------------------------------------
/ios/App/App/Assets.xcassets/Alt Icons/original_v2.appiconset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "original.png",
5 | "idiom" : "universal",
6 | "platform" : "ios",
7 | "size" : "1024x1024"
8 | }
9 | ],
10 | "info" : {
11 | "author" : "xcode",
12 | "version" : 1
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/ios/App/App/Assets.xcassets/Alt Icons/original_v2.appiconset/original.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/ios/App/App/Assets.xcassets/Alt Icons/original_v2.appiconset/original.png
--------------------------------------------------------------------------------
/ios/App/App/Assets.xcassets/Alt Icons/planetary_v2.appiconset/planetary.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/ios/App/App/Assets.xcassets/Alt Icons/planetary_v2.appiconset/planetary.png
--------------------------------------------------------------------------------
/ios/App/App/Assets.xcassets/Alt Icons/planetary_v2.appiconset/planetaryDark.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/ios/App/App/Assets.xcassets/Alt Icons/planetary_v2.appiconset/planetaryDark.png
--------------------------------------------------------------------------------
/ios/App/App/Assets.xcassets/Alt Icons/planetary_v2.appiconset/planetaryTinted.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/ios/App/App/Assets.xcassets/Alt Icons/planetary_v2.appiconset/planetaryTinted.png
--------------------------------------------------------------------------------
/ios/App/App/Assets.xcassets/Alt Icons/pride_v2.appiconset/pride.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/ios/App/App/Assets.xcassets/Alt Icons/pride_v2.appiconset/pride.png
--------------------------------------------------------------------------------
/ios/App/App/Assets.xcassets/Alt Icons/pride_v2.appiconset/prideDark.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/ios/App/App/Assets.xcassets/Alt Icons/pride_v2.appiconset/prideDark.png
--------------------------------------------------------------------------------
/ios/App/App/Assets.xcassets/Alt Icons/pride_v2.appiconset/prideTinted.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/ios/App/App/Assets.xcassets/Alt Icons/pride_v2.appiconset/prideTinted.png
--------------------------------------------------------------------------------
/ios/App/App/Assets.xcassets/Alt Icons/psych_v2.appiconset/psych.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/ios/App/App/Assets.xcassets/Alt Icons/psych_v2.appiconset/psych.png
--------------------------------------------------------------------------------
/ios/App/App/Assets.xcassets/Alt Icons/psych_v2.appiconset/psychadelicTinted.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/ios/App/App/Assets.xcassets/Alt Icons/psych_v2.appiconset/psychadelicTinted.png
--------------------------------------------------------------------------------
/ios/App/App/Assets.xcassets/Alt Icons/psych_v2.appiconset/psychedelicDark.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/ios/App/App/Assets.xcassets/Alt Icons/psych_v2.appiconset/psychedelicDark.png
--------------------------------------------------------------------------------
/ios/App/App/Assets.xcassets/Alt Icons/space_v2.appiconset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "space.png",
5 | "idiom" : "universal",
6 | "platform" : "ios",
7 | "size" : "1024x1024"
8 | }
9 | ],
10 | "info" : {
11 | "author" : "xcode",
12 | "version" : 1
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/ios/App/App/Assets.xcassets/Alt Icons/space_v2.appiconset/space.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/ios/App/App/Assets.xcassets/Alt Icons/space_v2.appiconset/space.png
--------------------------------------------------------------------------------
/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-1024@4x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-1024@4x.png
--------------------------------------------------------------------------------
/ios/App/App/Assets.xcassets/AppIcon.appiconset/dark.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/ios/App/App/Assets.xcassets/AppIcon.appiconset/dark.png
--------------------------------------------------------------------------------
/ios/App/App/Assets.xcassets/AppIcon.appiconset/tinted.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/ios/App/App/Assets.xcassets/AppIcon.appiconset/tinted.png
--------------------------------------------------------------------------------
/ios/App/App/Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/ios/App/CapApp-SPM/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | /.build
3 | /Packages
4 | /*.xcodeproj
5 | xcuserdata/
6 | DerivedData/
7 | .swiftpm/config/registries.json
8 | .swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata
9 | .netrc
10 |
--------------------------------------------------------------------------------
/ios/App/CapApp-SPM/README.md:
--------------------------------------------------------------------------------
1 | # CapApp-SPM
2 |
3 | > [!WARNING]
4 | > SPM Support is currently experimental.
5 |
6 | This SPM is used to host SPM dependancies for you Capacitor project
7 |
8 | Do not modifiy the contents of it or there may be unintended concquences.
9 |
--------------------------------------------------------------------------------
/ios/App/CapApp-SPM/Sources/CapApp-SPM/CapApp-SPM.swift:
--------------------------------------------------------------------------------
1 | public let isCapacitorApp = true
2 |
--------------------------------------------------------------------------------
/ios/App/VoyagerActionExtension/Action.js:
--------------------------------------------------------------------------------
1 | //
2 | // Action.js
3 | // VoyagerActionExtension
4 | //
5 | // Created by Alexander Harding on 3/11/24.
6 | //
7 |
8 | var Action = function() {};
9 |
10 | Action.prototype = {
11 | run: function(arguments) {
12 | arguments.completionFunction({ "url" : document.URL })
13 | },
14 | finalize: function(arguments) {
15 | var openingUrl = arguments["deeplink"]
16 | if (openingUrl) {
17 | document.location.href = openingUrl
18 | }
19 | }
20 | };
21 |
22 | var ExtensionPreprocessingJS = new Action
23 |
--------------------------------------------------------------------------------
/ios/App/VoyagerActionExtension/Assets.xcassets/ActionIcon.appiconset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "actionicon.png",
5 | "idiom" : "universal",
6 | "platform" : "ios",
7 | "size" : "1024x1024"
8 | }
9 | ],
10 | "info" : {
11 | "author" : "xcode",
12 | "version" : 1
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/ios/App/VoyagerActionExtension/Assets.xcassets/ActionIcon.appiconset/actionicon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/ios/App/VoyagerActionExtension/Assets.xcassets/ActionIcon.appiconset/actionicon.png
--------------------------------------------------------------------------------
/ios/App/VoyagerActionExtension/Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/ios/App/VoyagerWatch Watch App/Assets.xcassets/AccentColor.colorset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "colors" : [
3 | {
4 | "color" : {
5 | "platform" : "universal",
6 | "reference" : "systemBlueColor"
7 | },
8 | "idiom" : "universal"
9 | }
10 | ],
11 | "info" : {
12 | "author" : "xcode",
13 | "version" : 1
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/ios/App/VoyagerWatch Watch App/Assets.xcassets/AppIcon.appiconset/AppIcon-1024@4x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/ios/App/VoyagerWatch Watch App/Assets.xcassets/AppIcon.appiconset/AppIcon-1024@4x.png
--------------------------------------------------------------------------------
/ios/App/VoyagerWatch Watch App/Assets.xcassets/AppIcon.appiconset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "AppIcon-1024@4x.png",
5 | "idiom" : "universal",
6 | "platform" : "watchos",
7 | "size" : "1024x1024"
8 | }
9 | ],
10 | "info" : {
11 | "author" : "xcode",
12 | "version" : 1
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/ios/App/VoyagerWatch Watch App/Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/ios/App/VoyagerWatch Watch App/Preview Content/Preview Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/ios/App/VoyagerWatch Watch App/VoyagerWatchApp.swift:
--------------------------------------------------------------------------------
1 | //
2 | // VoyagerWatchApp.swift
3 | // VoyagerWatch Watch App
4 | //
5 | // Created by Alexander Harding on 8/3/23.
6 | //
7 |
8 | import SwiftUI
9 |
10 | @main
11 | struct VoyagerWatch_Watch_AppApp: App {
12 | var body: some Scene {
13 | WindowGroup {
14 | NavigationView {
15 | HomeView()
16 | }
17 | }
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/ios/App/VoyagerWatch Watch App/models/GetPostsResponse.swift:
--------------------------------------------------------------------------------
1 | //
2 | // GetPostsResponse.swift
3 | // watchapp Watch App
4 | //
5 | // Created by Alexander Harding on 8/2/23.
6 | //
7 |
8 | import Foundation
9 |
10 | struct GetPostsResponse: Codable {
11 | let posts: [PostView]
12 | }
13 |
--------------------------------------------------------------------------------
/ios/App/VoyagerWatch Watch App/models/Post.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Post.swift
3 | // watchapp Watch App
4 | //
5 | // Created by Alexander Harding on 8/2/23.
6 | //
7 |
8 | import Foundation
9 |
10 | struct Post: Codable, Identifiable {
11 | let id: Int
12 | let name: String
13 | let url: String?
14 | let body: String?
15 | let thumbnailUrl: String?
16 | }
17 |
--------------------------------------------------------------------------------
/ios/App/VoyagerWatch Watch App/models/PostView.swift:
--------------------------------------------------------------------------------
1 | //
2 | // PostView.swift
3 | // watchapp Watch App
4 | //
5 | // Created by Alexander Harding on 8/2/23.
6 | //
7 |
8 | import Foundation
9 |
10 | struct PostView: Codable, Identifiable {
11 | var id: Int {
12 | post.id
13 | }
14 |
15 | let post: Post
16 | let saved: Bool
17 | }
18 |
--------------------------------------------------------------------------------
/ios/App/VoyagerWatch Watch App/models/SavePost.swift:
--------------------------------------------------------------------------------
1 | //
2 | // SavePost.swift
3 | // watchapp Watch App
4 | //
5 | // Created by Alexander Harding on 8/2/23.
6 | //
7 |
8 | import Foundation
9 |
10 | struct SavePost: Codable {
11 | let post_id: Int
12 | let save: Bool
13 | let auth: String
14 | }
15 |
--------------------------------------------------------------------------------
/nginx.conf.template:
--------------------------------------------------------------------------------
1 | server {
2 | listen ${NGINX_PORT};
3 |
4 | gzip on;
5 | gzip_types text/css application/javascript application/json image/svg+xml;
6 | gzip_comp_level 9;
7 |
8 | root /var/www/;
9 |
10 | location / {
11 | try_files $uri /index.html;
12 | add_header Cache-Control no-cache;
13 | }
14 |
15 | location /assets/ {
16 | add_header Cache-Control max-age=31536000;
17 | }
18 |
19 | location /_config {
20 | alias /var/www/config.json;
21 | add_header Cache-Control no-cache;
22 | }
23 | }
--------------------------------------------------------------------------------
/postcss.config.js:
--------------------------------------------------------------------------------
1 | export default {
2 | plugins: {
3 | autoprefixer: {},
4 | },
5 | };
6 |
--------------------------------------------------------------------------------
/public/alternateIcons/galactic.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/public/alternateIcons/galactic.png
--------------------------------------------------------------------------------
/public/alternateIcons/holidays.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/public/alternateIcons/holidays.png
--------------------------------------------------------------------------------
/public/alternateIcons/original.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/public/alternateIcons/original.png
--------------------------------------------------------------------------------
/public/alternateIcons/planetary.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/public/alternateIcons/planetary.png
--------------------------------------------------------------------------------
/public/alternateIcons/pride.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/public/alternateIcons/pride.png
--------------------------------------------------------------------------------
/public/alternateIcons/psych.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/public/alternateIcons/psych.png
--------------------------------------------------------------------------------
/public/alternateIcons/space.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/public/alternateIcons/space.png
--------------------------------------------------------------------------------
/public/badges/fdroid.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/public/badges/fdroid.png
--------------------------------------------------------------------------------
/public/favicons/192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/public/favicons/192.png
--------------------------------------------------------------------------------
/public/favicons/512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/public/favicons/512.png
--------------------------------------------------------------------------------
/public/logo-1024.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/public/logo-1024.png
--------------------------------------------------------------------------------
/public/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/public/logo.png
--------------------------------------------------------------------------------
/public/promo.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/public/promo.webp
--------------------------------------------------------------------------------
/public/screenshots/android/1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/public/screenshots/android/1.png
--------------------------------------------------------------------------------
/public/screenshots/android/2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/public/screenshots/android/2.png
--------------------------------------------------------------------------------
/public/screenshots/android/3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/public/screenshots/android/3.png
--------------------------------------------------------------------------------
/public/screenshots/android/4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/public/screenshots/android/4.png
--------------------------------------------------------------------------------
/public/screenshots/android/5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/public/screenshots/android/5.png
--------------------------------------------------------------------------------
/public/splash/apple-splash-1125-2436.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/public/splash/apple-splash-1125-2436.png
--------------------------------------------------------------------------------
/public/splash/apple-splash-1136-640.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/public/splash/apple-splash-1136-640.png
--------------------------------------------------------------------------------
/public/splash/apple-splash-1170-2532.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/public/splash/apple-splash-1170-2532.png
--------------------------------------------------------------------------------
/public/splash/apple-splash-1179-2556.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/public/splash/apple-splash-1179-2556.png
--------------------------------------------------------------------------------
/public/splash/apple-splash-1242-2208.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/public/splash/apple-splash-1242-2208.png
--------------------------------------------------------------------------------
/public/splash/apple-splash-1242-2688.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/public/splash/apple-splash-1242-2688.png
--------------------------------------------------------------------------------
/public/splash/apple-splash-1284-2778.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/public/splash/apple-splash-1284-2778.png
--------------------------------------------------------------------------------
/public/splash/apple-splash-1290-2796.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/public/splash/apple-splash-1290-2796.png
--------------------------------------------------------------------------------
/public/splash/apple-splash-1334-750.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/public/splash/apple-splash-1334-750.png
--------------------------------------------------------------------------------
/public/splash/apple-splash-1536-2048.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/public/splash/apple-splash-1536-2048.png
--------------------------------------------------------------------------------
/public/splash/apple-splash-1620-2160.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/public/splash/apple-splash-1620-2160.png
--------------------------------------------------------------------------------
/public/splash/apple-splash-1668-2224.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/public/splash/apple-splash-1668-2224.png
--------------------------------------------------------------------------------
/public/splash/apple-splash-1668-2388.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/public/splash/apple-splash-1668-2388.png
--------------------------------------------------------------------------------
/public/splash/apple-splash-1792-828.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/public/splash/apple-splash-1792-828.png
--------------------------------------------------------------------------------
/public/splash/apple-splash-2048-1536.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/public/splash/apple-splash-2048-1536.png
--------------------------------------------------------------------------------
/public/splash/apple-splash-2048-2732.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/public/splash/apple-splash-2048-2732.png
--------------------------------------------------------------------------------
/public/splash/apple-splash-2160-1620.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/public/splash/apple-splash-2160-1620.png
--------------------------------------------------------------------------------
/public/splash/apple-splash-2208-1242.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/public/splash/apple-splash-2208-1242.png
--------------------------------------------------------------------------------
/public/splash/apple-splash-2224-1668.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/public/splash/apple-splash-2224-1668.png
--------------------------------------------------------------------------------
/public/splash/apple-splash-2388-1668.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/public/splash/apple-splash-2388-1668.png
--------------------------------------------------------------------------------
/public/splash/apple-splash-2436-1125.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/public/splash/apple-splash-2436-1125.png
--------------------------------------------------------------------------------
/public/splash/apple-splash-2532-1170.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/public/splash/apple-splash-2532-1170.png
--------------------------------------------------------------------------------
/public/splash/apple-splash-2556-1179.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/public/splash/apple-splash-2556-1179.png
--------------------------------------------------------------------------------
/public/splash/apple-splash-2688-1242.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/public/splash/apple-splash-2688-1242.png
--------------------------------------------------------------------------------
/public/splash/apple-splash-2732-2048.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/public/splash/apple-splash-2732-2048.png
--------------------------------------------------------------------------------
/public/splash/apple-splash-2778-1284.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/public/splash/apple-splash-2778-1284.png
--------------------------------------------------------------------------------
/public/splash/apple-splash-2796-1290.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/public/splash/apple-splash-2796-1290.png
--------------------------------------------------------------------------------
/public/splash/apple-splash-640-1136.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/public/splash/apple-splash-640-1136.png
--------------------------------------------------------------------------------
/public/splash/apple-splash-750-1334.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/public/splash/apple-splash-750-1334.png
--------------------------------------------------------------------------------
/public/splash/apple-splash-828-1792.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/public/splash/apple-splash-828-1792.png
--------------------------------------------------------------------------------
/public/splash/apple-splash-dark-1125-2436.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/public/splash/apple-splash-dark-1125-2436.png
--------------------------------------------------------------------------------
/public/splash/apple-splash-dark-1136-640.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/public/splash/apple-splash-dark-1136-640.png
--------------------------------------------------------------------------------
/public/splash/apple-splash-dark-1170-2532.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/public/splash/apple-splash-dark-1170-2532.png
--------------------------------------------------------------------------------
/public/splash/apple-splash-dark-1179-2556.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/public/splash/apple-splash-dark-1179-2556.png
--------------------------------------------------------------------------------
/public/splash/apple-splash-dark-1242-2208.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/public/splash/apple-splash-dark-1242-2208.png
--------------------------------------------------------------------------------
/public/splash/apple-splash-dark-1242-2688.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/public/splash/apple-splash-dark-1242-2688.png
--------------------------------------------------------------------------------
/public/splash/apple-splash-dark-1284-2778.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/public/splash/apple-splash-dark-1284-2778.png
--------------------------------------------------------------------------------
/public/splash/apple-splash-dark-1290-2796.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/public/splash/apple-splash-dark-1290-2796.png
--------------------------------------------------------------------------------
/public/splash/apple-splash-dark-1334-750.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/public/splash/apple-splash-dark-1334-750.png
--------------------------------------------------------------------------------
/public/splash/apple-splash-dark-1536-2048.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/public/splash/apple-splash-dark-1536-2048.png
--------------------------------------------------------------------------------
/public/splash/apple-splash-dark-1620-2160.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/public/splash/apple-splash-dark-1620-2160.png
--------------------------------------------------------------------------------
/public/splash/apple-splash-dark-1668-2224.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/public/splash/apple-splash-dark-1668-2224.png
--------------------------------------------------------------------------------
/public/splash/apple-splash-dark-1668-2388.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/public/splash/apple-splash-dark-1668-2388.png
--------------------------------------------------------------------------------
/public/splash/apple-splash-dark-1792-828.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/public/splash/apple-splash-dark-1792-828.png
--------------------------------------------------------------------------------
/public/splash/apple-splash-dark-2048-1536.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/public/splash/apple-splash-dark-2048-1536.png
--------------------------------------------------------------------------------
/public/splash/apple-splash-dark-2048-2732.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/public/splash/apple-splash-dark-2048-2732.png
--------------------------------------------------------------------------------
/public/splash/apple-splash-dark-2160-1620.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/public/splash/apple-splash-dark-2160-1620.png
--------------------------------------------------------------------------------
/public/splash/apple-splash-dark-2208-1242.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/public/splash/apple-splash-dark-2208-1242.png
--------------------------------------------------------------------------------
/public/splash/apple-splash-dark-2224-1668.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/public/splash/apple-splash-dark-2224-1668.png
--------------------------------------------------------------------------------
/public/splash/apple-splash-dark-2388-1668.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/public/splash/apple-splash-dark-2388-1668.png
--------------------------------------------------------------------------------
/public/splash/apple-splash-dark-2436-1125.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/public/splash/apple-splash-dark-2436-1125.png
--------------------------------------------------------------------------------
/public/splash/apple-splash-dark-2532-1170.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/public/splash/apple-splash-dark-2532-1170.png
--------------------------------------------------------------------------------
/public/splash/apple-splash-dark-2556-1179.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/public/splash/apple-splash-dark-2556-1179.png
--------------------------------------------------------------------------------
/public/splash/apple-splash-dark-2688-1242.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/public/splash/apple-splash-dark-2688-1242.png
--------------------------------------------------------------------------------
/public/splash/apple-splash-dark-2732-2048.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/public/splash/apple-splash-dark-2732-2048.png
--------------------------------------------------------------------------------
/public/splash/apple-splash-dark-2778-1284.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/public/splash/apple-splash-dark-2778-1284.png
--------------------------------------------------------------------------------
/public/splash/apple-splash-dark-2796-1290.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/public/splash/apple-splash-dark-2796-1290.png
--------------------------------------------------------------------------------
/public/splash/apple-splash-dark-640-1136.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/public/splash/apple-splash-dark-640-1136.png
--------------------------------------------------------------------------------
/public/splash/apple-splash-dark-750-1334.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/public/splash/apple-splash-dark-750-1334.png
--------------------------------------------------------------------------------
/public/splash/apple-splash-dark-828-1792.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/public/splash/apple-splash-dark-828-1792.png
--------------------------------------------------------------------------------
/resources/icon-foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/resources/icon-foreground.png
--------------------------------------------------------------------------------
/resources/icon-only.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/resources/icon-only.png
--------------------------------------------------------------------------------
/resources/splash.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aeharding/voyager/13881a40e5da81b6529083f1bfce99114e65e0f2/resources/splash.png
--------------------------------------------------------------------------------
/scripts/disable_in_app_purchases.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | # Check the folder doesn't exist before performing actions
4 | if [ -d "src/features/tips/inAppPurchase__stub" ]; then
5 | pnpm uninstall capacitor-tips
6 |
7 | # Removes the proprietary google play app purchase libs
8 | npx cap update
9 |
10 | # Remove and rename files
11 | rm -rf src/features/tips/inAppPurchase
12 | mv src/features/tips/inAppPurchase__stub src/features/tips/inAppPurchase
13 | else
14 | echo "In-app purchases already disabled and references removed. Skipping uninstallation and file operations."
15 | fi
16 |
--------------------------------------------------------------------------------
/scripts/prebuild.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | SETUP_SCRIPT="./scripts/disable_in_app_purchases.sh"
4 |
5 | # Check if the environment variable BUILD_FOSS_ONLY is set
6 | if [ ! -z "$BUILD_FOSS_ONLY" ]; then
7 | # Run the setup script
8 | sh "$SETUP_SCRIPT"
9 |
10 | echo "In-app purchases disabled."
11 | else
12 | echo "BUILD_FOSS_ONLY not set. In-app purchases not disabled."
13 | fi
14 |
--------------------------------------------------------------------------------
/scripts/release.sh:
--------------------------------------------------------------------------------
1 | read -p "Would you like to cut a release? [Y/n] " -n 1 -r
2 | echo
3 | if [[ $REPLY =~ ^[Yy]$ ]]
4 | then
5 | gh workflow run release.yml
6 | fi
7 |
--------------------------------------------------------------------------------
/src/core/AppCrash.module.css:
--------------------------------------------------------------------------------
1 | .container {
2 | display: flex;
3 | flex-direction: column;
4 | align-items: center;
5 | gap: 16px;
6 | text-align: center;
7 | padding: 8px;
8 |
9 | position: absolute;
10 | inset: 0;
11 |
12 | overflow: auto;
13 |
14 | padding-top: max(env(safe-area-inset-top), 8px);
15 | padding-right: max(env(safe-area-inset-right), 8px);
16 | padding-bottom: max(env(safe-area-inset-bottom), 8px);
17 | padding-left: max(env(safe-area-inset-left), 8px);
18 |
19 | color: var(--ion-text-color);
20 | }
21 |
--------------------------------------------------------------------------------
/src/core/GlobalStyles.module.css:
--------------------------------------------------------------------------------
1 | .fixedDeviceFont {
2 | --ion-dynamic-font: initial;
3 | }
4 |
--------------------------------------------------------------------------------
/src/core/listeners/network/listener.ts:
--------------------------------------------------------------------------------
1 | import { Network } from "@capacitor/network";
2 |
3 | import { isNative } from "#/helpers/device";
4 | import store from "#/store";
5 |
6 | import { getConnectionType, updateConnectionType } from "./networkSlice";
7 |
8 | (async () => {
9 | if (!isNative()) return;
10 |
11 | await store.dispatch(getConnectionType());
12 |
13 | Network.addListener("networkStatusChange", ({ connectionType }) => {
14 | store.dispatch(updateConnectionType(connectionType));
15 | });
16 | })();
17 |
--------------------------------------------------------------------------------
/src/core/theme/lightVariables.css:
--------------------------------------------------------------------------------
1 | html:not(.ion-palette-dark) {
2 | &:root {
3 | --ion-color-primary: var(--app-primary);
4 | --ion-color-primary-fixed: #3880ff; /* always blue always blue! */
5 |
6 | ion-item {
7 | /* default ionic light mode opacity is too harsh */
8 | --background-activated-opacity: 0.06;
9 | }
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/src/features/auth/SharedDialogContext.module.css:
--------------------------------------------------------------------------------
1 | .autoHeight {
2 | --height: auto;
3 | }
4 |
--------------------------------------------------------------------------------
/src/features/auth/login/LearnMore.module.css:
--------------------------------------------------------------------------------
1 | .content {
2 | line-height: 1.4;
3 | }
4 |
5 | .list {
6 | li:not(:last-of-type) {
7 | margin-bottom: 1rem;
8 | }
9 | }
10 |
11 | .compare {
12 | display: flex;
13 | text-align: center;
14 | align-items: center;
15 | justify-content: space-around;
16 |
17 | line-height: 1.5;
18 |
19 | margin: 1rem 0;
20 |
21 | > div {
22 | display: flex;
23 | flex-direction: column;
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/src/features/auth/login/LoginModal.module.css:
--------------------------------------------------------------------------------
1 | .modal {
2 | --max-width: 500px;
3 |
4 | @media (min-width: 600px) {
5 | --max-height: 750px;
6 | }
7 | }
8 |
--------------------------------------------------------------------------------
/src/features/auth/login/login/LoginAvatarImg.module.css:
--------------------------------------------------------------------------------
1 | .img {
2 | object-fit: contain;
3 | }
4 |
5 | .loading {
6 | background-color: rgba(var(--ion-text-color-rgb, 0, 0, 0), 0.07);
7 | }
8 |
--------------------------------------------------------------------------------
/src/features/auth/login/login/PickLoginServer.module.css:
--------------------------------------------------------------------------------
1 | .container {
2 | height: 100%;
3 |
4 | display: flex;
5 | flex-direction: column;
6 | }
7 |
8 | .list {
9 | flex: 1;
10 |
11 | --ion-item-background: none;
12 | }
13 |
--------------------------------------------------------------------------------
/src/features/auth/login/pickJoinServer/Filters.module.css:
--------------------------------------------------------------------------------
1 | .container {
2 | display: flex;
3 |
4 | overflow: auto;
5 |
6 | padding-left: 8px;
7 | padding-right: 8px;
8 |
9 | > * {
10 | flex-shrink: 0;
11 | }
12 |
13 | &::-webkit-scrollbar {
14 | display: none;
15 | }
16 | }
17 |
18 | .selectedChip {
19 | --background: var(--ion-color-primary);
20 | --color: var(--ion-color-primary-contrast);
21 | }
22 |
--------------------------------------------------------------------------------
/src/features/auth/login/welcome/AndroidClose.module.css:
--------------------------------------------------------------------------------
1 | .androidIonButtons {
2 | :global(.ios) & {
3 | display: none;
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/src/features/comment/Comment.module.css:
--------------------------------------------------------------------------------
1 | .commentItem {
2 | scroll-margin-bottom: 35vh;
3 |
4 | --padding-start: 0;
5 | --inner-padding-end: 0;
6 | --border-style: none;
7 | --min-height: 0;
8 | }
9 |
10 | .content {
11 | padding-top: 0.35em;
12 |
13 | display: flex;
14 | flex-direction: column;
15 | gap: 1em;
16 |
17 | @media (hover: none) {
18 | padding-top: 0.45em;
19 | }
20 |
21 | line-height: 1.25;
22 | }
23 |
--------------------------------------------------------------------------------
/src/features/comment/CommentEllipsis.module.css:
--------------------------------------------------------------------------------
1 | .icon {
2 | font-size: 1.2em;
3 | }
4 |
--------------------------------------------------------------------------------
/src/features/comment/CommentLinks.module.css:
--------------------------------------------------------------------------------
1 | .container {
2 | display: flex;
3 | flex-direction: column;
4 | gap: 12px;
5 | }
6 |
--------------------------------------------------------------------------------
/src/features/comment/elements/PositionedContainer.module.css:
--------------------------------------------------------------------------------
1 | .positionedContainer {
2 | composes: maxWidth from "#/features/shared/shared.module.css";
3 |
4 | position: relative;
5 |
6 | padding: 8px 12px;
7 |
8 | @media (hover: none) {
9 | padding-top: 0.65em;
10 | padding-bottom: 0.65em;
11 | }
12 |
13 | padding-left: calc(12px + max(0px, calc(calc(var(--sv-depth) - 1) * 10px)));
14 | }
15 |
--------------------------------------------------------------------------------
/src/features/comment/elements/PositionedContainer.tsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 |
3 | import { sv } from "#/helpers/css";
4 |
5 | import styles from "./PositionedContainer.module.css";
6 |
7 | interface PositionedContainerProps extends React.PropsWithChildren {
8 | depth: number;
9 | }
10 |
11 | export function PositionedContainer({
12 | depth,
13 | ...props
14 | }: PositionedContainerProps) {
15 | return (
16 |
21 | );
22 | }
23 |
--------------------------------------------------------------------------------
/src/features/comment/inTree/CommentExpander.module.css:
--------------------------------------------------------------------------------
1 | .moreRepliesBlock {
2 | display: flex;
3 | align-items: center;
4 | justify-content: space-between;
5 | width: 100%;
6 |
7 | color: var(--ion-color-primary);
8 |
9 | opacity: 1;
10 | }
11 |
12 | .hidden {
13 | opacity: 0;
14 | }
15 |
16 | .chevronIcon {
17 | font-size: 1rem;
18 | }
19 |
20 | .spinner {
21 | width: 1.25rem;
22 | opacity: 0.6;
23 |
24 | position: absolute;
25 | top: 50%;
26 | left: 50%;
27 | transform: translate(-50%, -50%);
28 | }
29 |
--------------------------------------------------------------------------------
/src/features/comment/inTree/CommentHr.module.css:
--------------------------------------------------------------------------------
1 | .hrContainer {
2 | composes: maxWidth from "#/features/shared/shared.module.css";
3 |
4 | position: absolute;
5 | left: 50%;
6 | transform: translateX(-50%);
7 | z-index: 100;
8 |
9 | padding-left: calc(0.5rem + calc(calc(var(--sv-depth) - 1) * 10px));
10 | }
11 |
12 | .hr {
13 | flex: 1;
14 | height: 1px;
15 | background-color: var(
16 | --ion-item-border-color,
17 | var(--ion-border-color, var(--ion-background-color-step-250, #c8c7cc))
18 | );
19 | width: 100%;
20 | margin: 0;
21 | }
22 |
--------------------------------------------------------------------------------
/src/features/comment/inTree/CommentHr.tsx:
--------------------------------------------------------------------------------
1 | import { sv } from "#/helpers/css";
2 |
3 | import styles from "./CommentHr.module.css";
4 |
5 | interface CommentHrProps {
6 | depth: number;
7 | }
8 |
9 | export default function CommentHr({ depth }: CommentHrProps) {
10 | return (
11 |
12 |
13 |
14 | );
15 | }
16 |
--------------------------------------------------------------------------------
/src/features/comment/inTree/Comments.module.css:
--------------------------------------------------------------------------------
1 | .scrollViewContainer {
2 | width: 100%;
3 | height: 100%;
4 | }
5 |
6 | .center {
7 | position: relative;
8 | padding: 4rem 0 4rem;
9 | left: 50%;
10 | transform: translateX(-50%);
11 | }
12 |
13 | .spinner {
14 | composes: center;
15 |
16 | opacity: 0.7;
17 | }
18 |
19 | .empty {
20 | composes: center;
21 |
22 | display: flex;
23 | flex-direction: column;
24 | gap: 0.5rem;
25 | text-align: center;
26 |
27 | aside {
28 | color: var(--ion-color-medium);
29 | font-size: 0.8em;
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/src/features/comment/inTree/CommentsContext.ts:
--------------------------------------------------------------------------------
1 | import { noop } from "es-toolkit";
2 | import { CommentView } from "lemmy-js-client";
3 | import { createContext } from "react";
4 |
5 | interface ICommentsContext {
6 | refresh: () => void;
7 | prependComments: (comments: CommentView[]) => void;
8 | appendComments: (comments: CommentView[]) => void;
9 | getComments: () => CommentView[] | void;
10 | }
11 |
12 | export const CommentsContext = createContext({
13 | refresh: noop,
14 | appendComments: noop,
15 | prependComments: noop,
16 | getComments: noop,
17 | });
18 |
--------------------------------------------------------------------------------
/src/features/comment/inTree/ContinueThread.module.css:
--------------------------------------------------------------------------------
1 | .moreRepliesBlock {
2 | display: flex;
3 | align-items: center;
4 | justify-content: space-between;
5 | width: 100%;
6 |
7 | color: var(--ion-color-primary);
8 | }
9 |
10 | .chevronIcon {
11 | font-size: 1rem;
12 | }
13 |
--------------------------------------------------------------------------------
/src/features/comment/inTree/FullyCollapsibleComment.tsx:
--------------------------------------------------------------------------------
1 | import { ComponentProps } from "react";
2 | import AnimateHeight from "react-animate-height";
3 |
4 | import Comment from "../Comment";
5 |
6 | interface CollapsibleCommentProps extends ComponentProps {
7 | fullyCollapsed?: boolean;
8 | }
9 |
10 | export default function FullyCollapsibleComment({
11 | fullyCollapsed,
12 | ...rest
13 | }: CollapsibleCommentProps) {
14 | return (
15 |
16 |
17 |
18 | );
19 | }
20 |
--------------------------------------------------------------------------------
/src/features/comment/inTree/LoadParentComments.module.css:
--------------------------------------------------------------------------------
1 | .moreRepliesBlock {
2 | display: flex;
3 | align-items: center;
4 | gap: 8px;
5 | width: 100%;
6 |
7 | color: var(--ion-color-primary);
8 | }
9 |
10 | .chevronIcon {
11 | font-size: 1rem;
12 | }
13 |
--------------------------------------------------------------------------------
/src/features/community/ToggleIcon.module.css:
--------------------------------------------------------------------------------
1 | .base {
2 | font-size: 24px;
3 | }
4 |
5 | .selected {
6 | color: var(--ion-color-primary);
7 | }
8 |
9 | .unselected {
10 | opacity: 0.08;
11 | }
12 |
--------------------------------------------------------------------------------
/src/features/community/list/EmptyCommunities.module.css:
--------------------------------------------------------------------------------
1 | .inlineChip {
2 | margin: -8px 0;
3 | padding: 3px 8px;
4 | min-height: 0;
5 | }
6 |
--------------------------------------------------------------------------------
/src/features/community/list/InitialPageRedirectBootstrapper.module.css:
--------------------------------------------------------------------------------
1 | .loadingOverlay {
2 | background: var(--ion-background-color);
3 | position: fixed;
4 | inset: 0;
5 | z-index: 1000;
6 | }
7 |
--------------------------------------------------------------------------------
/src/features/community/list/items/CommunityListItem.module.css:
--------------------------------------------------------------------------------
1 | .toggleIcon {
2 | @media (max-width: 725px) {
3 | margin-right: 8px;
4 | }
5 |
6 | /* Hide alphabet jump query DO NOT MODIFY unless also changing everywhere else */
7 | @media (max-height: 600px) and (orientation: landscape) {
8 | margin-right: 0;
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/src/features/community/list/useShowModeratorFeed.ts:
--------------------------------------------------------------------------------
1 | import { useAppSelector } from "#/store";
2 |
3 | export default function useShowModeratorFeed() {
4 | const moderates = useAppSelector(
5 | (state) => state.site.response?.my_user?.moderates,
6 | );
7 |
8 | return !!moderates?.length;
9 | }
10 |
--------------------------------------------------------------------------------
/src/features/feed/PostCommentFeed.module.css:
--------------------------------------------------------------------------------
1 | .thickBottomBorder {
2 | border-bottom: 8px solid var(--thick-separator-color);
3 | }
4 |
--------------------------------------------------------------------------------
/src/features/feed/empty/home/Pack.module.css:
--------------------------------------------------------------------------------
1 | .disabled {
2 | pointer-events: none;
3 | }
4 |
--------------------------------------------------------------------------------
/src/features/feed/endItems/EndPost.module.css:
--------------------------------------------------------------------------------
1 | .container {
2 | display: flex;
3 | flex-direction: column;
4 | gap: 1rem;
5 | padding: 3rem 3rem 4rem;
6 | font-size: 0.875em;
7 | align-items: center;
8 | justify-content: center;
9 | color: var(--ion-color-medium);
10 | }
11 |
--------------------------------------------------------------------------------
/src/features/feed/endItems/FeedLoadMoreFailed.tsx:
--------------------------------------------------------------------------------
1 | import endPostStyles from "./EndPost.module.css";
2 |
3 | interface FeedLoadMoreFailedProps {
4 | fetchMore: () => void;
5 | loading: boolean;
6 | pluralType?: string;
7 | }
8 |
9 | export default function FeedLoadMoreFailed({
10 | fetchMore,
11 | loading,
12 | pluralType = "posts",
13 | }: FeedLoadMoreFailedProps) {
14 | return (
15 | fetchMore()} className={endPostStyles.container}>
16 | Failed to load more {pluralType}. {loading ? "Loading..." : "Try again?"}
17 |
18 | );
19 | }
20 |
--------------------------------------------------------------------------------
/src/features/feed/endItems/FetchMore.module.css:
--------------------------------------------------------------------------------
1 | .container {
2 | display: flex;
3 | flex-direction: column;
4 | height: 100px;
5 | font-size: 0.875em;
6 | align-items: center;
7 | justify-content: center;
8 | color: var(--ion-color-medium);
9 | }
10 |
--------------------------------------------------------------------------------
/src/features/feed/postFabs/PostFabs.tsx:
--------------------------------------------------------------------------------
1 | import { ComponentProps } from "react";
2 |
3 | import { useAppSelector } from "#/store";
4 |
5 | import HidePostsFab from "./HidePostsFab";
6 |
7 | export default function PostFabs(props: ComponentProps) {
8 | const showHideReadButton = useAppSelector(
9 | (state) => state.settings.general.posts.showHideReadButton,
10 | );
11 |
12 | return <>{showHideReadButton && }>;
13 | }
14 |
--------------------------------------------------------------------------------
/src/features/feed/useCommonPostFeedParams.ts:
--------------------------------------------------------------------------------
1 | import { GetPosts } from "lemmy-js-client";
2 |
3 | import { handleSelector } from "#/features/auth/authSelectors";
4 | import { useAppSelector } from "#/store";
5 |
6 | export default function useCommonPostFeedParams():
7 | | Pick
8 | | undefined {
9 | const handle = useAppSelector(handleSelector);
10 |
11 | if (handle === "lemmynsfw.com") return { show_nsfw: true };
12 | }
13 |
--------------------------------------------------------------------------------
/src/features/feed/useFeedUpdate.ts:
--------------------------------------------------------------------------------
1 | import { useState } from "react";
2 |
3 | export default function useFeedUpdate() {
4 | const [fetchFnLastUpdated, setFetchFnLastUpdated] = useState(0);
5 |
6 | function notifyFeedUpdated() {
7 | setFetchFnLastUpdated(Date.now());
8 | }
9 |
10 | return {
11 | notifyFeedUpdated,
12 | fetchFnLastUpdated,
13 | };
14 | }
15 |
--------------------------------------------------------------------------------
/src/features/icons/svg/airplay.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/features/icons/svg/bold.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/features/icons/svg/calendarSingleDay.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/features/icons/svg/faceid.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/features/icons/svg/italic.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/features/icons/svg/listUnordered.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/features/icons/svg/pip.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/features/icons/svg/strikethrough.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/features/icons/svg/subscript.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/features/icons/svg/superscript.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/features/inbox/BoxesRedirectBootstrapper.tsx:
--------------------------------------------------------------------------------
1 | import { loggedInSelector } from "#/features/auth/authSelectors";
2 | import InitialPageRedirectBootstrapper from "#/features/community/list/InitialPageRedirectBootstrapper";
3 | import { useAppSelector } from "#/store";
4 |
5 | export default function BoxesRedirectBootstrapper() {
6 | const loggedIn = useAppSelector(loggedInSelector);
7 |
8 | if (!loggedIn) return;
9 |
10 | return ;
11 | }
12 |
--------------------------------------------------------------------------------
/src/features/inbox/InboxItemMoreActions.module.css:
--------------------------------------------------------------------------------
1 | .button {
2 | composes: plainButton from "#/features/shared/shared.module.css";
3 |
4 | && {
5 | font-size: 1.12em;
6 | }
7 | }
8 |
--------------------------------------------------------------------------------
/src/features/inbox/PrivateMessageMoreActions.module.css:
--------------------------------------------------------------------------------
1 | .icon {
2 | font-size: 1.2em;
3 | }
4 |
--------------------------------------------------------------------------------
/src/features/inbox/VoteArrow.module.css:
--------------------------------------------------------------------------------
1 | .container {
2 | font-size: 1.4em;
3 |
4 | width: 100%;
5 | height: 1rem;
6 |
7 | position: relative;
8 | }
9 |
10 | .voteIcon {
11 | position: absolute;
12 | left: 50%;
13 | top: 50%;
14 | transform: translate(-50%, -50%);
15 | }
16 |
--------------------------------------------------------------------------------
/src/features/inbox/messages/Time.tsx:
--------------------------------------------------------------------------------
1 | import { differenceInDays, differenceInHours, format } from "date-fns";
2 |
3 | interface TimeProps {
4 | date: string;
5 | }
6 |
7 | export default function Time({ date: dateStr }: TimeProps) {
8 | const date = new Date(dateStr);
9 |
10 | if (differenceInDays(new Date(), date) > 6) {
11 | return <>{format(date, "PP")}>;
12 | }
13 |
14 | if (differenceInHours(new Date(), date) > 24) {
15 | return <>{format(date, "iiii")}>;
16 | }
17 |
18 | return <>{format(date, "p")}>;
19 | }
20 |
--------------------------------------------------------------------------------
/src/features/labels/Edited.module.css:
--------------------------------------------------------------------------------
1 | .edited {
2 | display: flex;
3 | align-items: center;
4 | gap: inherit;
5 |
6 | margin: -3px;
7 | padding: 3px;
8 | }
9 |
--------------------------------------------------------------------------------
/src/features/labels/Handle.module.css:
--------------------------------------------------------------------------------
1 | .aside {
2 | display: inline;
3 | opacity: 0.7;
4 | }
5 |
--------------------------------------------------------------------------------
/src/features/labels/Nsfw.module.css:
--------------------------------------------------------------------------------
1 | .container {
2 | font-size: 0.8rem;
3 | vertical-align: middle;
4 | padding: 2px 4px;
5 | border-radius: 8px;
6 | margin-left: 4px;
7 | background: #ff0000;
8 | background: color(display-p3 1 0 0);
9 | color: white;
10 | }
11 |
--------------------------------------------------------------------------------
/src/features/labels/Save.module.css:
--------------------------------------------------------------------------------
1 | .marker {
2 | position: absolute;
3 | right: 0;
4 | bottom: 1px; /* Match bottom edge of sliding options, which is slightly inset */
5 |
6 | --size: 18px;
7 |
8 | width: 0;
9 | height: 0;
10 | border-left: var(--size) solid transparent;
11 | border-right: 0 solid transparent;
12 |
13 | border-bottom: var(--size) solid var(--ion-color-success);
14 | }
15 |
--------------------------------------------------------------------------------
/src/features/labels/Save.tsx:
--------------------------------------------------------------------------------
1 | import { useAppSelector } from "#/store";
2 |
3 | import styles from "./Save.module.css";
4 |
5 | interface SaveProps {
6 | type: "comment" | "post";
7 | id: number;
8 | }
9 |
10 | export default function Save({ type, id }: SaveProps) {
11 | const saved = useAppSelector((state) =>
12 | type === "comment"
13 | ? state.comment.commentSavedById[id]
14 | : state.post.postSavedById[id],
15 | );
16 |
17 | if (!saved) return null;
18 |
19 | return ;
20 | }
21 |
--------------------------------------------------------------------------------
/src/features/labels/img/ItemIcon.module.css:
--------------------------------------------------------------------------------
1 | .subImgIcon {
2 | border-radius: 50%;
3 | object-fit: cover;
4 | }
5 |
--------------------------------------------------------------------------------
/src/features/labels/links/AppBadge.module.css:
--------------------------------------------------------------------------------
1 | .newAccountBadge {
2 | color: #d9a900;
3 |
4 | :global(.ion-palette-dark) & {
5 | color: gold;
6 | }
7 | }
8 |
--------------------------------------------------------------------------------
/src/features/labels/links/CommunityLink.module.css:
--------------------------------------------------------------------------------
1 | .itemIcon {
2 | margin-right: 0.4rem;
3 | vertical-align: middle;
4 | }
5 |
6 | .subscribedIcon {
7 | color: var(--ion-color-primary);
8 | vertical-align: middle;
9 |
10 | margin-bottom: 1px;
11 | margin-left: 2px;
12 |
13 | opacity: 0.4;
14 |
15 | :global(.ion-palette-dark) & {
16 | opacity: 0.5;
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/src/features/labels/links/PersonLink.module.css:
--------------------------------------------------------------------------------
1 | .prefix {
2 | font-weight: normal;
3 | }
4 |
5 | .shrinkable {
6 | min-width: 0;
7 | overflow: hidden;
8 | text-overflow: ellipsis;
9 | }
10 |
--------------------------------------------------------------------------------
/src/features/labels/links/shared.module.css:
--------------------------------------------------------------------------------
1 | .linkContainer {
2 | position: relative;
3 | display: inline;
4 |
5 | font-weight: 500;
6 | white-space: nowrap;
7 |
8 | overflow: hidden;
9 | text-overflow: ellipsis;
10 | }
11 |
12 | .link {
13 | text-decoration: none;
14 | color: inherit;
15 | }
16 |
17 | .hide {
18 | position: relative;
19 |
20 | &:after {
21 | content: "";
22 | position: absolute;
23 | inset: 0;
24 | background: var(--ion-background-color-step-150, #ccc);
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/src/features/labels/vote/shared.module.css:
--------------------------------------------------------------------------------
1 | .icon {
2 | /* Vote icons are tall and narrow, but svg container is square.
3 | * This creates visually inconsistent padding.
4 | * So fudge it so it looks better next to more square icons
5 | */
6 | margin: 0 -2px;
7 | }
8 |
--------------------------------------------------------------------------------
/src/features/media/external/redgifs/LargeFeedRedgifMedia.module.css:
--------------------------------------------------------------------------------
1 | .enableWarningContainer {
2 | display: flex;
3 | flex-direction: column;
4 | padding: 16px;
5 | text-align: center;
6 | }
7 |
--------------------------------------------------------------------------------
/src/features/media/external/redgifs/helpers.ts:
--------------------------------------------------------------------------------
1 | import { canBypassCors } from "#/helpers/device";
2 |
3 | export const redgifUrlRegex =
4 | /^https?:\/\/(?:www\.|v3\.)?redgifs.com\/watch\/([a-z0-9]+)/;
5 |
6 | export function platformSupportsRedgif() {
7 | return canBypassCors();
8 | }
9 |
10 | export function isRedgif(url: string): boolean {
11 | if (!platformSupportsRedgif()) return false;
12 |
13 | return redgifUrlRegex.test(url);
14 | }
15 |
--------------------------------------------------------------------------------
/src/features/media/gallery/actions/GalleryPostActions.module.css:
--------------------------------------------------------------------------------
1 | .container {
2 | display: flex;
3 | align-items: center;
4 | justify-content: space-around;
5 | font-size: 1.5em;
6 |
7 | max-width: 600px;
8 | width: 100%;
9 |
10 | a {
11 | text-decoration: none;
12 | color: inherit;
13 | }
14 | }
15 |
16 | .section {
17 | display: flex;
18 | align-items: center;
19 | gap: 0.5rem;
20 | }
21 |
22 | .amount {
23 | font-size: 1rem;
24 | }
25 |
--------------------------------------------------------------------------------
/src/features/media/gallery/actions/ImageMoreActions.module.css:
--------------------------------------------------------------------------------
1 | .topContainer {
2 | position: absolute;
3 | top: 0;
4 | right: 0;
5 | left: 0;
6 | height: 60px;
7 | padding: 0 1rem;
8 | margin-top: var(--ion-safe-area-top, env(safe-area-inset-top, 0));
9 |
10 | display: flex;
11 | align-items: center;
12 |
13 | color: white;
14 |
15 | font-size: 1.5em;
16 | }
17 |
--------------------------------------------------------------------------------
/src/features/media/gallery/actions/vote/HideVoteMode.tsx:
--------------------------------------------------------------------------------
1 | import { ComponentProps } from "react";
2 |
3 | import { VoteButton } from "#/features/post/shared/VoteButton";
4 |
5 | import Vote from "./Vote";
6 |
7 | import styles from "../GalleryPostActions.module.css";
8 |
9 | export default function HideVoteMode({ post }: ComponentProps) {
10 | return (
11 |
12 |
13 |
14 |
15 | );
16 | }
17 |
--------------------------------------------------------------------------------
/src/features/media/useImageData.ts:
--------------------------------------------------------------------------------
1 | import { useAppSelector } from "#/store";
2 |
3 | import { IMAGE_FAILED, ImageMetadata } from "./imageSlice";
4 |
5 | export default function useImageData(src: string | undefined) {
6 | return useAppSelector((state) =>
7 | src ? state.image.loadedBySrc[src] : undefined,
8 | );
9 | }
10 |
11 | export function isLoadedImageData(
12 | imageData: ImageMetadata | typeof IMAGE_FAILED | undefined,
13 | ) {
14 | return typeof imageData === "object" && imageData.aspectRatio > 0;
15 | }
16 |
--------------------------------------------------------------------------------
/src/features/media/video/OutPortalEventDispatcher.module.css:
--------------------------------------------------------------------------------
1 | .container {
2 | flex: 1;
3 | display: flex;
4 | width: 100%;
5 | }
6 |
--------------------------------------------------------------------------------
/src/features/media/video/VideoPortalProvider.module.css:
--------------------------------------------------------------------------------
1 | .portalNodeStyles {
2 | flex: 1;
3 | display: flex;
4 | width: 100%;
5 | }
6 |
--------------------------------------------------------------------------------
/src/features/moderation/ban/BanUser.module.css:
--------------------------------------------------------------------------------
1 | .daysValues {
2 | display: flex;
3 | align-items: center;
4 | gap: 16px;
5 | }
6 |
7 | .banTextContainer {
8 | font-size: 0.925em;
9 | margin: 0 32px 32px;
10 | }
11 |
--------------------------------------------------------------------------------
/src/features/moderation/ban/BanUserModal.module.css:
--------------------------------------------------------------------------------
1 | .modPrimaryColor {
2 | --ion-color-primary: var(--ion-color-success);
3 | }
4 |
--------------------------------------------------------------------------------
/src/features/moderation/banner/ModeratableItemBanner.module.css:
--------------------------------------------------------------------------------
1 | .sharedBanner {
2 | composes: maxWidth from "#/features/shared/shared.module.css";
3 |
4 | display: flex;
5 | align-items: center;
6 | justify-content: center;
7 | gap: 6px;
8 |
9 | font-size: 0.875rem;
10 |
11 | padding: 6px 0;
12 | border-radius: 6px;
13 |
14 | text-align: center;
15 | }
16 |
--------------------------------------------------------------------------------
/src/features/moderation/logs/ModRolePersonLink.module.css:
--------------------------------------------------------------------------------
1 | .icon {
2 | font-size: 1.2em;
3 | vertical-align: middle;
4 | transform: translateY(-1px);
5 | }
6 |
--------------------------------------------------------------------------------
/src/features/moderation/logs/ModlogItemMoreActions.module.css:
--------------------------------------------------------------------------------
1 | .button {
2 | composes: plainButton from "#/features/shared/shared.module.css";
3 |
4 | && {
5 | margin: -6px 0; /* prevent size from breaking line height */
6 | }
7 | }
8 |
9 | .ellipsisIcon {
10 | font-size: 1.2rem;
11 | }
12 |
--------------------------------------------------------------------------------
/src/features/moderation/logs/types/purgeComment.ts:
--------------------------------------------------------------------------------
1 | import { trashBin } from "ionicons/icons";
2 | import { AdminPurgeCommentView } from "lemmy-js-client";
3 |
4 | import { LogEntryData } from "../ModlogItem";
5 | import { buildBaseData, getAdminRole } from "./shared";
6 |
7 | export default function purgeComment(
8 | item: AdminPurgeCommentView,
9 | ): LogEntryData {
10 | return {
11 | icon: trashBin,
12 | title: "Purged Comment",
13 | by: item.admin,
14 | role: getAdminRole(item.admin),
15 | ...buildBaseData(item.admin_purge_comment),
16 | };
17 | }
18 |
--------------------------------------------------------------------------------
/src/features/moderation/logs/types/purgeCommunity.ts:
--------------------------------------------------------------------------------
1 | import { trashBin } from "ionicons/icons";
2 | import { AdminPurgeCommunityView } from "lemmy-js-client";
3 |
4 | import { LogEntryData } from "../ModlogItem";
5 | import { buildBaseData, getAdminRole } from "./shared";
6 |
7 | export default function purgeCommunity(
8 | item: AdminPurgeCommunityView,
9 | ): LogEntryData {
10 | return {
11 | icon: trashBin,
12 | title: "Purged Community",
13 | by: item.admin,
14 | role: getAdminRole(item.admin),
15 | ...buildBaseData(item.admin_purge_community),
16 | };
17 | }
18 |
--------------------------------------------------------------------------------
/src/features/moderation/logs/types/purgePerson.ts:
--------------------------------------------------------------------------------
1 | import { trashBin } from "ionicons/icons";
2 | import { AdminPurgePersonView } from "lemmy-js-client";
3 |
4 | import { LogEntryData } from "../ModlogItem";
5 | import { buildBaseData, getAdminRole } from "./shared";
6 |
7 | export default function purgePerson(item: AdminPurgePersonView): LogEntryData {
8 | return {
9 | icon: trashBin,
10 | title: "Purged User",
11 | by: item.admin,
12 | role: getAdminRole(item.admin),
13 | ...buildBaseData(item.admin_purge_person),
14 | };
15 | }
16 |
--------------------------------------------------------------------------------
/src/features/moderation/logs/types/purgePost.ts:
--------------------------------------------------------------------------------
1 | import { trashBin } from "ionicons/icons";
2 | import { AdminPurgePostView } from "lemmy-js-client";
3 |
4 | import { LogEntryData } from "../ModlogItem";
5 | import { buildBaseData, getAdminRole } from "./shared";
6 |
7 | export default function purgePost(item: AdminPurgePostView): LogEntryData {
8 | return {
9 | icon: trashBin,
10 | title: "Purged Post",
11 | by: item.admin,
12 | role: getAdminRole(item.admin),
13 | ...buildBaseData(item.admin_purge_post),
14 | };
15 | }
16 |
--------------------------------------------------------------------------------
/src/features/moderation/useIsAdmin.tsx:
--------------------------------------------------------------------------------
1 | import { Person } from "lemmy-js-client";
2 |
3 | import { isAdminSelector } from "#/features/auth/siteSlice";
4 | import { useAppSelector } from "#/store";
5 |
6 | export default function useIsAdmin(person?: Person) {
7 | return useAppSelector(
8 | !person
9 | ? isAdminSelector
10 | : (state) =>
11 | state.site.response?.admins?.some(
12 | (admin) => admin.person.id === person.id,
13 | ),
14 | );
15 | }
16 |
--------------------------------------------------------------------------------
/src/features/post/actions/ActionButton.module.css:
--------------------------------------------------------------------------------
1 | .button {
2 | display: flex;
3 | align-items: center;
4 | justify-content: center;
5 |
6 | background: inherit;
7 | font-size: inherit;
8 | color: inherit;
9 |
10 | padding: 0.35rem;
11 |
12 | border-radius: 8px;
13 | }
14 |
--------------------------------------------------------------------------------
/src/features/post/actions/ActionButton.tsx:
--------------------------------------------------------------------------------
1 | import { ButtonHTMLAttributes } from "react";
2 |
3 | import { cx } from "#/helpers/css";
4 |
5 | import styles from "./ActionButton.module.css";
6 |
7 | export function ActionButton(props: ButtonHTMLAttributes) {
8 | return ;
9 | }
10 |
--------------------------------------------------------------------------------
/src/features/post/actions/ActionsContainer.module.css:
--------------------------------------------------------------------------------
1 | .actionsContainer {
2 | display: flex;
3 | align-items: center;
4 | gap: 6px;
5 |
6 | > button {
7 | font-size: 1.2em;
8 |
9 | padding: 6px 3px;
10 | margin: -10px -3px;
11 |
12 | &:global(.large) {
13 | font-size: 1.6em;
14 | }
15 | }
16 |
17 | white-space: nowrap;
18 | }
19 |
--------------------------------------------------------------------------------
/src/features/post/actions/ActionsContainer.tsx:
--------------------------------------------------------------------------------
1 | import { cx } from "#/helpers/css";
2 |
3 | import styles from "./ActionsContainer.module.css";
4 |
5 | export default function ActionsContainer(
6 | props: React.HTMLAttributes,
7 | ) {
8 | return (
9 |
10 | );
11 | }
12 |
--------------------------------------------------------------------------------
/src/features/post/actions/PostActions.module.css:
--------------------------------------------------------------------------------
1 | .container {
2 | display: flex;
3 | justify-content: space-around;
4 | color: var(--ion-color-primary);
5 | font-size: 1.7em;
6 |
7 | width: 100%;
8 | padding: 3px 0;
9 | }
10 |
--------------------------------------------------------------------------------
/src/features/post/detail/AnnouncementIcon.module.css:
--------------------------------------------------------------------------------
1 | .icon {
2 | font-size: 1.1rem;
3 | margin-right: 5px;
4 | vertical-align: middle;
5 | color: var(--ion-color-success);
6 | }
7 |
--------------------------------------------------------------------------------
/src/features/post/detail/AnnouncementIcon.tsx:
--------------------------------------------------------------------------------
1 | import { IonIcon } from "@ionic/react";
2 | import { megaphone } from "ionicons/icons";
3 |
4 | import styles from "./AnnouncementIcon.module.css";
5 |
6 | export default function AnnouncementIcon() {
7 | return ;
8 | }
9 |
--------------------------------------------------------------------------------
/src/features/post/detail/Locked.tsx:
--------------------------------------------------------------------------------
1 | import { IonIcon } from "@ionic/react";
2 | import { lockClosed } from "ionicons/icons";
3 |
4 | import styles from "./Locked.module.css";
5 |
6 | export default function Locked() {
7 | return (
8 |
9 |
10 |
11 |
Post Locked
12 |
13 |
14 |
15 | );
16 | }
17 |
--------------------------------------------------------------------------------
/src/features/post/detail/Stat.module.css:
--------------------------------------------------------------------------------
1 | .base {
2 | display: flex;
3 | align-items: center;
4 | gap: 0.25rem;
5 | }
6 |
7 | .baseIcon {
8 | font-size: 1.2em;
9 | }
10 |
--------------------------------------------------------------------------------
/src/features/post/detail/Stats.module.css:
--------------------------------------------------------------------------------
1 | .sharedStatsClass {
2 | display: flex;
3 | align-items: center;
4 | gap: 0.5rem;
5 | }
6 |
7 | .container {
8 | font-size: 0.8rem;
9 | color: var(--ion-color-text-aside);
10 | }
11 |
--------------------------------------------------------------------------------
/src/features/post/detail/TimeStat.module.css:
--------------------------------------------------------------------------------
1 | .icon {
2 | margin: -1px; /* slightly more padding than happyOutline looks off in comparison */
3 | }
4 |
--------------------------------------------------------------------------------
/src/features/post/detail/TimeStat.tsx:
--------------------------------------------------------------------------------
1 | import { timeOutline } from "ionicons/icons";
2 |
3 | import Stat from "./Stat";
4 |
5 | import styles from "./TimeStat.module.css";
6 |
7 | export default function TimeStat(
8 | props: Omit, "icon" | "iconClassName">,
9 | ) {
10 | return ;
11 | }
12 |
--------------------------------------------------------------------------------
/src/features/post/inFeed/Post.module.css:
--------------------------------------------------------------------------------
1 | .item {
2 | --padding-start: 0;
3 | --inner-padding-end: 0;
4 |
5 | --border-width: 0;
6 | --border-style: none;
7 | --background-hover: none;
8 | }
9 |
--------------------------------------------------------------------------------
/src/features/post/inFeed/PreviewStats.module.css:
--------------------------------------------------------------------------------
1 | .container {
2 | composes: sharedStatsClass from "#/features/post/detail/Stats.module.css";
3 | }
4 |
--------------------------------------------------------------------------------
/src/features/post/inFeed/compact/self.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/features/post/inFeed/large/LargePostContents.module.css:
--------------------------------------------------------------------------------
1 | .body {
2 | font-size: 0.8em;
3 | line-height: 1.25;
4 |
5 | display: -webkit-box;
6 | -webkit-line-clamp: 3;
7 | -webkit-box-orient: vertical;
8 | overflow: hidden;
9 |
10 | &:empty {
11 | display: none;
12 | }
13 | }
14 |
15 | .read {
16 | color: var(--read-color-medium);
17 | }
18 |
19 | .unread {
20 | opacity: 0.6;
21 | }
22 |
23 | .imageContainer {
24 | overflow: hidden;
25 | margin: 0 -12px;
26 | }
27 |
--------------------------------------------------------------------------------
/src/features/post/inFeed/large/media/BlurOverlay.module.css:
--------------------------------------------------------------------------------
1 | .container {
2 | position: relative;
3 | }
4 |
5 | .blur {
6 | filter: blur(40px) brightness(0.8) saturate(1.2);
7 |
8 | /* https://graffino.com/til/CjT2jrcLHP-how-to-fix-filter-blur-performance-issue-in-safari */
9 | transform: translate3d(0, 0, 0);
10 | }
11 |
--------------------------------------------------------------------------------
/src/features/post/inFeed/large/media/LargeFeedMedia.module.css:
--------------------------------------------------------------------------------
1 | .fullWidthPost {
2 | display: flex;
3 | width: 100%;
4 | max-width: none;
5 | max-height: max(100vh, 1000px);
6 | object-fit: contain;
7 | -webkit-touch-callout: default;
8 |
9 | min-height: 0;
10 | }
11 |
--------------------------------------------------------------------------------
/src/features/post/inFeed/large/media/LargeFeedPostMedia.module.css:
--------------------------------------------------------------------------------
1 | .lightbox {
2 | background: var(--lightroom-bg);
3 | }
4 |
--------------------------------------------------------------------------------
/src/features/post/link/CommentLink.tsx:
--------------------------------------------------------------------------------
1 | import { LinkData } from "#/features/comment/CommentLinks";
2 |
3 | import Link from "./Link";
4 |
5 | interface CommentLinkProps {
6 | link: LinkData;
7 | }
8 |
9 | export default function CommentLink({ link }: CommentLinkProps) {
10 | return (
11 |
17 | );
18 | }
19 |
--------------------------------------------------------------------------------
/src/features/post/link/LinkPreview.module.css:
--------------------------------------------------------------------------------
1 | .linkIcon {
2 | width: 26px;
3 | height: 30px;
4 | box-sizing: content-box;
5 |
6 | padding-right: var(--gap);
7 | margin-right: 2px;
8 | border-right: 1px solid rgba(160, 160, 160, 0.7);
9 |
10 | font-size: 26px;
11 | opacity: 0.7;
12 | }
13 |
--------------------------------------------------------------------------------
/src/features/post/link/thumbnail/thumbnailinator.ts:
--------------------------------------------------------------------------------
1 | import determineThumbnailForYoutube from "./sites/youtube";
2 |
3 | export type Thumbnail =
4 | | string
5 | | {
6 | sm: string;
7 | lg: string;
8 | };
9 |
10 | export async function determineThumbnail(
11 | url: string,
12 | ): Promise {
13 | const potentialYoutube = determineThumbnailForYoutube(url);
14 |
15 | if (potentialYoutube) return potentialYoutube;
16 |
17 | // Add more services here
18 | }
19 |
--------------------------------------------------------------------------------
/src/features/post/new/PhotoPreview.module.css:
--------------------------------------------------------------------------------
1 | .container {
2 | position: relative;
3 | }
4 |
5 | .img {
6 | max-width: 100px;
7 | max-height: 100px;
8 | padding: 1rem;
9 |
10 | &.loadingImage {
11 | filter: blur(5px) brightness(0.5);
12 | }
13 | }
14 |
15 | .overlaySpinner {
16 | position: absolute;
17 | left: 50%;
18 | top: 50%;
19 | transform: translate(-50%, -50%);
20 | }
21 |
--------------------------------------------------------------------------------
/src/features/post/shared/SaveButton.module.css:
--------------------------------------------------------------------------------
1 | .button {
2 | background: var(--ion-color-success);
3 | color: var(--ion-color-primary-contrast);
4 | }
5 |
--------------------------------------------------------------------------------
/src/features/post/shared/VoteButton.module.css:
--------------------------------------------------------------------------------
1 | .active {
2 | color: var(--ion-color-primary-contrast);
3 | background: var(--sv-background);
4 | }
5 |
6 | .entering {
7 | composes: bounce from "#/features/shared/bounce.module.css";
8 | }
9 |
--------------------------------------------------------------------------------
/src/features/pwa/useShouldInstall.ts:
--------------------------------------------------------------------------------
1 | import { use } from "react";
2 |
3 | import {
4 | isAppleDeviceInstallable,
5 | isInstalled,
6 | isTouchDevice,
7 | } from "#/helpers/device";
8 |
9 | import { BeforeInstallPromptContext } from "./BeforeInstallPromptProvider";
10 |
11 | export default function useShouldInstall() {
12 | const { event } = use(BeforeInstallPromptContext);
13 |
14 | if (isInstalled()) return false;
15 | if (isAppleDeviceInstallable()) return true;
16 | if (!isTouchDevice()) return false;
17 | if (event) return true;
18 |
19 | return false;
20 | }
21 |
--------------------------------------------------------------------------------
/src/features/search/AutoResolvePostComment.module.css:
--------------------------------------------------------------------------------
1 | .spinner {
2 | margin-top: 60px;
3 | }
4 |
--------------------------------------------------------------------------------
/src/features/search/EmptySearch.tsx:
--------------------------------------------------------------------------------
1 | import SpecialSearchMenu from "./SpecialSearchMenu";
2 | import TrendingCommunities from "./TrendingCommunities";
3 |
4 | export default function EmptySearch() {
5 | return (
6 | <>
7 |
8 |
9 | >
10 | );
11 | }
12 |
--------------------------------------------------------------------------------
/src/features/search/TrendingCommunities.module.css:
--------------------------------------------------------------------------------
1 | .label {
2 | margin-top: 0;
3 | }
4 |
--------------------------------------------------------------------------------
/src/features/settings/appIcon/AppIcon.module.css:
--------------------------------------------------------------------------------
1 | .thumbnail {
2 | margin: 1rem 1rem 1rem 0;
3 |
4 | --size: 4.75em;
5 | }
6 |
7 | .img {
8 | border-radius: 1em;
9 | }
10 |
11 | .h2 {
12 | composes: ion-text-wrap from global;
13 |
14 | display: flex;
15 | align-items: center;
16 | gap: 6px;
17 | }
18 |
--------------------------------------------------------------------------------
/src/features/settings/appearance/TextSize.module.css:
--------------------------------------------------------------------------------
1 | .range {
2 | --bar-background: var(--ion-color-medium);
3 |
4 | ::part(tick) {
5 | background: var(--ion-color-medium);
6 | }
7 | }
8 |
9 | .a {
10 | padding: 0 6px;
11 | font-weight: 500;
12 | font-size: 1.3em;
13 | }
14 |
15 | .aSmall {
16 | composes: a;
17 |
18 | font-size: 0.8em;
19 | }
20 |
--------------------------------------------------------------------------------
/src/features/settings/appearance/other/Other.tsx:
--------------------------------------------------------------------------------
1 | import { IonLabel, IonList } from "@ionic/react";
2 |
3 | import { ListHeader } from "#/features/settings/shared/formatting";
4 |
5 | import DisplayVotes from "./DisplayVotes";
6 | import ShowUserInstance from "./ShowUserInstance";
7 |
8 | export default function Other() {
9 | return (
10 | <>
11 |
12 | Other
13 |
14 |
15 |
16 |
17 |
18 | >
19 | );
20 | }
21 |
--------------------------------------------------------------------------------
/src/features/settings/appearance/themes/Theme.tsx:
--------------------------------------------------------------------------------
1 | import AppTheme from "./appTheme/AppTheme";
2 | import CommentsTheme from "./commentsTheme/CommentsTheme";
3 | import Dark from "./dark/Dark";
4 | import System from "./system/System";
5 | import VotesTheme from "./votesTheme/VotesTheme";
6 |
7 | export default function Theme() {
8 | return (
9 | <>
10 |
11 |
12 |
13 |
14 |
15 | >
16 | );
17 | }
18 |
--------------------------------------------------------------------------------
/src/features/settings/appearance/themes/appTheme/AppTheme.module.css:
--------------------------------------------------------------------------------
1 | .description {
2 | composes: ion-text-wrap from global;
3 |
4 | font-size: 0.76em;
5 | color: var(--ion-color-medium);
6 | }
7 |
--------------------------------------------------------------------------------
/src/features/settings/appearance/themes/commentsTheme/Color.module.css:
--------------------------------------------------------------------------------
1 | .container {
2 | width: 10px;
3 | height: 10px;
4 | border-radius: 5px;
5 | }
6 |
--------------------------------------------------------------------------------
/src/features/settings/appearance/themes/commentsTheme/Color.tsx:
--------------------------------------------------------------------------------
1 | import styles from "./Color.module.css";
2 |
3 | interface ColorProps {
4 | color: string;
5 | }
6 |
7 | export default function Color({ color }: ColorProps) {
8 | return (
9 |
10 | );
11 | }
12 |
--------------------------------------------------------------------------------
/src/features/settings/appearance/themes/commentsTheme/CommentsTheme.module.css:
--------------------------------------------------------------------------------
1 | .container {
2 | display: flex;
3 | align-items: center;
4 | justify-content: space-between;
5 | }
6 |
7 | .colors {
8 | display: flex;
9 | gap: 6px;
10 | margin: 0 6px;
11 |
12 | :global(.ion-palette-dark) & {
13 | opacity: 0.7;
14 | }
15 | }
16 |
17 | .radio {
18 | &::part(label) {
19 | flex: 1;
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/src/features/settings/appearance/themes/dark/Dark.tsx:
--------------------------------------------------------------------------------
1 | import { IonLabel, IonList } from "@ionic/react";
2 |
3 | import { ListHeader } from "#/features/settings/shared/formatting";
4 |
5 | import PureBlack from "./PureBlack";
6 |
7 | export default function Dark() {
8 | return (
9 | <>
10 |
11 | Dark Mode
12 |
13 |
14 |
15 |
16 |
17 | >
18 | );
19 | }
20 |
--------------------------------------------------------------------------------
/src/features/settings/appearance/themes/votesTheme/VotesTheme.module.css:
--------------------------------------------------------------------------------
1 | .container {
2 | display: flex;
3 | align-items: center;
4 | justify-content: space-between;
5 | }
6 |
7 | .votes {
8 | display: flex;
9 | gap: 6px;
10 | margin: 0 6px;
11 | }
12 |
13 | .vote {
14 | display: flex;
15 | align-items: center;
16 | justify-content: center;
17 | padding: 4px;
18 | border-radius: 4px;
19 |
20 | color: white;
21 | }
22 |
23 | .radio {
24 | &::part(label) {
25 | flex: 1;
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/src/features/settings/biometric/BiometricSettings.tsx:
--------------------------------------------------------------------------------
1 | import { IonList } from "@ionic/react";
2 |
3 | import BiometricEnabled from "./settings/BiometricEnabled";
4 | import BiometricTimeout from "./settings/BiometricTimeout";
5 |
6 | export default function BiometricSettings() {
7 | return (
8 |
9 |
10 |
11 |
12 | );
13 | }
14 |
--------------------------------------------------------------------------------
/src/features/settings/general/GeneralSettings.tsx:
--------------------------------------------------------------------------------
1 | import Comments from "./comments/Comments";
2 | import Media from "./media/Media";
3 | import Other from "./other/Other";
4 | import Posts from "./posts/Posts";
5 | import Safari from "./safari/Safari";
6 |
7 | export default function GeneralSettings() {
8 | return (
9 | <>
10 |
11 |
12 |
13 |
14 |
15 | >
16 | );
17 | }
18 |
--------------------------------------------------------------------------------
/src/features/settings/general/media/Media.tsx:
--------------------------------------------------------------------------------
1 | import { IonLabel } from "@ionic/react";
2 | import { IonList } from "@ionic/react";
3 |
4 | import { ListHeader } from "#/features/settings/shared/formatting";
5 |
6 | import HideAltText from "./HideAltText";
7 | import ShowControlsOnOpen from "./ShowControlsOnOpen";
8 |
9 | export default function Media() {
10 | return (
11 | <>
12 |
13 | Media
14 |
15 |
16 |
17 |
18 |
19 | >
20 | );
21 | }
22 |
--------------------------------------------------------------------------------
/src/features/settings/gestures/swipeLong.svg:
--------------------------------------------------------------------------------
1 |
26 |
--------------------------------------------------------------------------------
/src/features/settings/gestures/swipeShort.svg:
--------------------------------------------------------------------------------
1 |
26 |
--------------------------------------------------------------------------------
/src/features/settings/shared/SettingSelector.module.css:
--------------------------------------------------------------------------------
1 | .icon {
2 | position: relative;
3 | display: inline-flex;
4 | height: 40px;
5 | width: auto;
6 | stroke: var(--ion-color-primary);
7 | fill: var(--ion-color-primary);
8 | }
9 |
10 | .iconMirrored {
11 | transform: scaleX(-1);
12 | }
13 |
--------------------------------------------------------------------------------
/src/features/settings/shared/formatting.module.css:
--------------------------------------------------------------------------------
1 | .listHeader {
2 | font-size: 0.8em;
3 | margin: 32px 0 -8px 32px;
4 | text-transform: uppercase;
5 | color: var(--ion-color-medium);
6 | }
7 |
8 | .helperText {
9 | margin: 0 32px;
10 | font-size: 0.875em;
11 | color: var(--ion-color-medium);
12 | }
13 |
--------------------------------------------------------------------------------
/src/features/settings/shared/formatting.tsx:
--------------------------------------------------------------------------------
1 | import styles from "./formatting.module.css";
2 |
3 | export function ListHeader(props: React.PropsWithChildren) {
4 | return ;
5 | }
6 |
7 | export function HelperText(props: React.PropsWithChildren) {
8 | return ;
9 | }
10 |
--------------------------------------------------------------------------------
/src/features/settings/tags/Browse.tsx:
--------------------------------------------------------------------------------
1 | import { IonItem, IonLabel } from "@ionic/react";
2 |
3 | export default function Browse() {
4 | return (
5 | <>
6 |
7 | View All
8 |
9 |
10 | View Tagged
11 |
12 | >
13 | );
14 | }
15 |
--------------------------------------------------------------------------------
/src/features/settings/tags/browse/BrowseTag.module.css:
--------------------------------------------------------------------------------
1 | .sourceUrlButton {
2 | ion-icon {
3 | font-size: min(1.6em, 30px);
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/src/features/settings/tags/tag.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/features/share/asImage/AddRemoveButtons.module.css:
--------------------------------------------------------------------------------
1 | .button {
2 | --padding-start: 5px;
3 | --padding-end: 5px;
4 | --height: 20px;
5 |
6 | color: inherit;
7 | }
8 |
9 | .container {
10 | display: inline-flex;
11 |
12 | background: rgba(var(--ion-text-color-rgb, 0, 0, 0), 0.088);
13 | border-radius: 6px;
14 | }
15 |
--------------------------------------------------------------------------------
/src/features/share/asImage/ShareAsImageModal.module.css:
--------------------------------------------------------------------------------
1 | .content {
2 | composes: appLightColorContent from "#/features/shared/shared.module.css";
3 | }
4 |
5 | .header {
6 | box-shadow: none;
7 | }
8 |
9 | .title:global(.md) {
10 | padding-inline: 0;
11 | }
12 |
13 | .buttons:global(.md) {
14 | margin-inline-end: 0;
15 | }
16 |
--------------------------------------------------------------------------------
/src/features/share/asImage/Watermark.module.css:
--------------------------------------------------------------------------------
1 | .container {
2 | width: 100%;
3 | font-size: 12px;
4 | font-weight: 300;
5 | padding: 0 8px 8px;
6 |
7 | display: flex;
8 | align-items: center;
9 | justify-content: flex-end;
10 | gap: 8px;
11 |
12 | opacity: 0.6;
13 |
14 | color: var(--ion-item-color, var(--ion-text-color, #000));
15 | }
16 |
17 | .text {
18 | opacity: 0.5;
19 | }
20 |
21 | .logoImg {
22 | border-radius: 4px;
23 | width: 25px;
24 | }
25 |
--------------------------------------------------------------------------------
/src/features/share/asImage/Watermark.tsx:
--------------------------------------------------------------------------------
1 | import styles from "./Watermark.module.css";
2 |
3 | export default function Watermark() {
4 | return (
5 |
6 |
Voyager for Lemmy
7 |

8 |
9 | );
10 | }
11 |
--------------------------------------------------------------------------------
/src/features/shared/CenteredSpinner.module.css:
--------------------------------------------------------------------------------
1 | .centeredSpinner {
2 | position: absolute;
3 | left: 50%;
4 | top: 50%;
5 | transform: translate(-50%, -50%);
6 | }
7 |
--------------------------------------------------------------------------------
/src/features/shared/CenteredSpinner.tsx:
--------------------------------------------------------------------------------
1 | import { IonSpinner } from "@ionic/react";
2 |
3 | import { cx } from "#/helpers/css";
4 |
5 | import styles from "./CenteredSpinner.module.css";
6 |
7 | export function CenteredSpinner(
8 | props: React.ComponentProps,
9 | ) {
10 | return (
11 |
15 | );
16 | }
17 |
--------------------------------------------------------------------------------
/src/features/shared/FakeIcon.module.css:
--------------------------------------------------------------------------------
1 | .container {
2 | border-radius: 50%;
3 |
4 | display: inline-flex;
5 | align-items: center;
6 | justify-content: center;
7 |
8 | color: white;
9 | }
10 |
--------------------------------------------------------------------------------
/src/features/shared/HeaderEllipsisIcon.tsx:
--------------------------------------------------------------------------------
1 | import { IonIcon } from "@ionic/react";
2 | import { ellipsisHorizontal, ellipsisVertical } from "ionicons/icons";
3 | import { ComponentProps } from "react";
4 |
5 | import { isIosTheme } from "#/helpers/device";
6 |
7 | export default function HeaderEllipsisIcon(
8 | props: ComponentProps,
9 | ) {
10 | return (
11 |
16 | );
17 | }
18 |
--------------------------------------------------------------------------------
/src/features/shared/IonModalAutosizedForOnScreenKeyboard.module.css:
--------------------------------------------------------------------------------
1 | .pwaIonModal {
2 | /* Capacitor inside native web view resizes for on-screen keyboard, so we don't need bespoke layout management */
3 | ion-content::part(scroll) {
4 | max-height: calc(var(--sv-viewportHeight) * 1px);
5 | }
6 |
7 | ion-content .fixedToolbarContainer {
8 | max-height: calc(var(--sv-viewportHeight) * 1px);
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/src/features/shared/ListEditor.module.css:
--------------------------------------------------------------------------------
1 | .removeIcon {
2 | position: relative;
3 | font-size: 1.6rem;
4 |
5 | &:after {
6 | z-index: -1;
7 | content: "";
8 | position: absolute;
9 | inset: 5px;
10 | border-radius: 50%;
11 | background: white;
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/src/features/shared/MultilineTitle.module.css:
--------------------------------------------------------------------------------
1 | .multilineTitle {
2 | display: flex;
3 | align-items: center;
4 | gap: 0.5rem;
5 | line-height: 1;
6 |
7 | :global(.ios) & {
8 | justify-content: center;
9 | }
10 |
11 | ion-spinner {
12 | flex-shrink: 0;
13 | }
14 | }
15 |
16 | .subheaderText {
17 | font-size: 0.7em;
18 | font-weight: normal;
19 | }
20 |
21 | .titleContainer {
22 | line-height: 1;
23 | }
24 |
--------------------------------------------------------------------------------
/src/features/shared/Url.tsx:
--------------------------------------------------------------------------------
1 | import { parseUrlForDisplay } from "#/helpers/url";
2 |
3 | interface UrlProps {
4 | children: string;
5 | }
6 |
7 | export default function Url({ children }: UrlProps) {
8 | const [domain, rest] = parseUrlForDisplay(children);
9 |
10 | if (!domain || !rest) return;
11 |
12 | return (
13 | <>
14 | {domain}
15 | {rest !== "/" ? {rest} : ""}
16 | >
17 | );
18 | }
19 |
--------------------------------------------------------------------------------
/src/features/shared/bounce.module.css:
--------------------------------------------------------------------------------
1 | .bounce {
2 | animation: bounce 175ms linear;
3 | }
4 |
5 | @keyframes bounce {
6 | 0% {
7 | transform: scale(1);
8 | }
9 | 50% {
10 | transform: scale(1.25);
11 | }
12 | 100% {
13 | transform: scale(1);
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/src/features/shared/markdown/LinkInterceptor.module.css:
--------------------------------------------------------------------------------
1 | .link {
2 | -webkit-touch-callout: default;
3 | }
4 |
--------------------------------------------------------------------------------
/src/features/shared/markdown/MarkdownImg.module.css:
--------------------------------------------------------------------------------
1 | .small {
2 | max-height: 200px;
3 | }
4 |
5 | .media {
6 | display: inline-flex;
7 | vertical-align: middle;
8 |
9 | &:global(.not-loaded) {
10 | height: 200px;
11 | border: 1px solid rgba(var(--ion-color-dark-rgb), 0.15);
12 | }
13 |
14 | /* Lemmy emojis set the title like this: "emoji emoji_name" */
15 | img {
16 | &[title^="emoji "],
17 | &[title="emoji"] {
18 | max-height: 40px;
19 | }
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/src/features/shared/markdown/components/spoiler/Summary.tsx:
--------------------------------------------------------------------------------
1 | import React, { use, useLayoutEffect } from "react";
2 | import { ExtraProps } from "react-markdown";
3 |
4 | import { SpoilerContext } from "./Details";
5 |
6 | export default function Summary({
7 | children,
8 | }: React.JSX.IntrinsicElements["summary"] & ExtraProps) {
9 | const { setLabel } = use(SpoilerContext);
10 |
11 | useLayoutEffect(() => {
12 | setLabel(children);
13 | }, [children, setLabel]);
14 |
15 | return null;
16 | }
17 |
--------------------------------------------------------------------------------
/src/features/shared/markdown/editing/modal/contents/ItemReplyingTo.module.css:
--------------------------------------------------------------------------------
1 | .container {
2 | padding: 16px;
3 | background: var(--lightroom-bg);
4 | font-size: 0.875em;
5 |
6 | a {
7 | color: inherit !important;
8 | pointer-events: none;
9 | }
10 | }
11 |
12 | .header {
13 | display: flex;
14 | align-items: center;
15 | gap: 8px;
16 | color: var(--ion-color-medium);
17 | font-size: 0.875em;
18 | margin-bottom: 8px;
19 | }
20 |
21 | .ago {
22 | margin-left: auto;
23 | }
24 |
25 | .commentContentWrapper {
26 | user-select: text;
27 | }
28 |
--------------------------------------------------------------------------------
/src/features/shared/markdown/editing/modes/DefaultMode.module.css:
--------------------------------------------------------------------------------
1 | .button {
2 | padding: 0;
3 | font-size: 1.5rem;
4 |
5 | appearance: none;
6 | background: none;
7 | border: 0;
8 |
9 | display: flex;
10 | align-items: center;
11 | justify-content: center;
12 |
13 | cursor: pointer;
14 |
15 | /* Image upload button */
16 | label > & {
17 | width: 100%;
18 | height: 100%;
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/src/features/shared/markdown/editing/modes/autocomplete/GenericAutocompleteMode.module.css:
--------------------------------------------------------------------------------
1 | .container {
2 | display: flex;
3 | gap: 16px;
4 | padding: 0 16px;
5 | overflow: auto;
6 | height: 100%;
7 | }
8 |
9 | .item {
10 | display: flex;
11 | align-items: center;
12 | justify-content: center;
13 |
14 | white-space: nowrap;
15 | }
16 |
17 | .emptyItem {
18 | composes: item;
19 |
20 | color: var(--ion-color-medium);
21 | }
22 |
--------------------------------------------------------------------------------
/src/features/shared/markdown/editing/modes/textFaces.txt:
--------------------------------------------------------------------------------
1 | ~(つˆ0ˆ)つ。☆
2 | (͡•_ ͡• )
3 | ಠ_ಠ
4 | ಥ_ಥ
5 | ಠᴗಠ
6 | ¯\\\_(ツ)\_/¯
7 | ᕕ(ᐛ)ᕗ
8 | (☝︎ ՞ਊ ՞)☝︎
9 | ( ͡° ͜ʖ ͡°)
10 | ( ͡~ ͜ʖ ͡°)
11 | ʕ ͡° ʖ̯ ͡°ʔ
12 | (╯°□°)╯︵ ┻━┻
13 | (ノಠ益ಠ)ノ彡┻━┻
14 | ┬──┬◡ノ(° -°ノ)
15 | (☞゚ヮ゚)☞
16 | ༼∩☉ل͜☉༽⊃━☆゚. * ・ 。゚
17 | (ง’̀-‘́)ง
18 | ლ(ಠ益ಠლ)
19 | ༼ つ ◕_◕ ༽つ
20 | (⌐■_■)
21 | (´・ω・`)
22 | (っ˘ڡ˘ς)
23 | ƪ(˘⌣˘)ʃ
24 | /╲/\╭(ఠఠ益ఠఠ)╮/\╱\
25 | ( ˘ ³˘)
26 | (/¯ ಠ_ಠ)/¯
27 | ( ꈍᴗꈍ)
28 | (っ˘̩╭╮˘̩)っ
29 | (。╯︵╰。)
30 | (◕દ◕)
31 | ٩(。•́‿•̀。)۶
32 | (⁀ᗢ⁀)
33 | (*≧ω≦*)
34 | (´・ᴗ・ ` )
35 | (づ ̄ ³ ̄)づ
36 | (ง ื▿ ื)ว
37 | („ಡωಡ„)
38 | ヽ( `д´*)ノ
39 | (°▽°)/
--------------------------------------------------------------------------------
/src/features/shared/selectorModals/GenericSelectorModal.module.css:
--------------------------------------------------------------------------------
1 | .searchbar {
2 | padding-top: 0;
3 | padding-bottom: 0;
4 | height: 40px;
5 | }
6 |
7 | .list {
8 | --ion-item-background: none;
9 |
10 | height: 100%;
11 | }
12 |
--------------------------------------------------------------------------------
/src/features/shared/sliding/ActionContents.module.css:
--------------------------------------------------------------------------------
1 | .icon {
2 | margin-block: 24px;
3 |
4 | color: white;
5 |
6 | &::after {
7 | content: var(--sv-slash);
8 | position: absolute;
9 | height: var(--sv-slashHeight);
10 | width: 3px;
11 | background: white;
12 | font-size: 1.7em;
13 | left: 50%;
14 | top: 50%;
15 | transform: translate(-50%, -50%) rotate(-45deg);
16 | transform-origin: center;
17 | box-shadow: 0 0 0 2px var(--sv-bgColorVar);
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/src/features/shared/sliding/BaseSliding.module.css:
--------------------------------------------------------------------------------
1 | .itemContainer {
2 | --ion-item-border-color: transparent;
3 | }
4 |
--------------------------------------------------------------------------------
/src/features/sidebar/Sidebar.tsx:
--------------------------------------------------------------------------------
1 | import { CommunityView } from "lemmy-js-client";
2 |
3 | import CommunitySidebar from "./internal/CommunitySidebar";
4 | import InstanceSidebar from "./internal/InstanceSidebar";
5 |
6 | interface SidebarProps {
7 | community?: CommunityView;
8 | }
9 |
10 | export default function Sidebar({ community }: SidebarProps) {
11 | if (community) return ;
12 |
13 | return ;
14 | }
15 |
--------------------------------------------------------------------------------
/src/features/sidebar/internal/GenericSidebar.module.css:
--------------------------------------------------------------------------------
1 | .container {
2 | composes: ion-padding-start ion-padding-end ion-padding-top from global;
3 |
4 | line-height: 1.5;
5 | }
6 |
7 | .bannerImg {
8 | margin-top: calc(var(--padding-top) * -1);
9 | margin-left: calc(var(--padding-start) * -1);
10 | margin-right: calc(var(--padding-end) * -1);
11 | width: calc(100% + var(--padding-start) + var(--padding-end));
12 | max-width: initial;
13 |
14 | max-height: 300px;
15 | object-fit: cover;
16 | }
17 |
--------------------------------------------------------------------------------
/src/features/tags/UserScore.module.css:
--------------------------------------------------------------------------------
1 | .scoreContainer {
2 | color: var(--ion-color-medium2);
3 | }
4 |
--------------------------------------------------------------------------------
/src/features/tags/UserTag.module.css:
--------------------------------------------------------------------------------
1 | .tagContainer {
2 | white-space: nowrap;
3 | overflow: hidden;
4 | text-overflow: ellipsis;
5 |
6 | background: var(--lightroom-bg);
7 | color: var(--ion-color-medium);
8 |
9 | border-radius: 4px;
10 | padding: 0 4px;
11 |
12 | min-width: 0; /* when contained in flexbox */
13 | }
14 |
--------------------------------------------------------------------------------
/src/features/tips/TipDialog.module.css:
--------------------------------------------------------------------------------
1 | .heart {
2 | font-size: 3em;
3 | margin-top: -46px;
4 |
5 | border-radius: 50%;
6 | padding: 8px;
7 |
8 | display: flex;
9 |
10 | background: color(display-p3 1 0 0);
11 | color: white;
12 | }
13 |
14 | .title {
15 | font-size: 1.4em;
16 | }
17 |
18 | .description {
19 | line-height: 1.5;
20 | text-align: center;
21 | }
22 |
23 | .tips {
24 | flex: 1;
25 |
26 | display: flex;
27 | flex-direction: column;
28 | align-items: center;
29 | justify-content: space-evenly;
30 | gap: 16px;
31 |
32 | width: 100%;
33 | min-height: 150px;
34 | }
35 |
--------------------------------------------------------------------------------
/src/features/tips/inAppPurchase__stub/InAppProducts.tsx:
--------------------------------------------------------------------------------
1 | // This is a stub that replaces the non-stub InAppPurchases.tsx
2 | // for F-droid and Github builds
3 | // (because Google Play In-App Payments is nonfree)
4 |
5 | export default function InAppProducts() {
6 | return <>>;
7 | }
8 |
--------------------------------------------------------------------------------
/src/features/user/LoggedOut.module.css:
--------------------------------------------------------------------------------
1 | .content {
2 | min-height: 100%;
3 | display: flex;
4 | flex-direction: column;
5 | justify-content: space-around;
6 | }
7 |
8 | .message {
9 | composes: ion-padding from global;
10 |
11 | font-size: 0.875em;
12 | }
13 |
--------------------------------------------------------------------------------
/src/features/user/PostContext.module.css:
--------------------------------------------------------------------------------
1 | .link {
2 | padding: 6px 12px;
3 |
4 | background: var(
5 | --ion-tab-bar-background,
6 | var(--ion-background-color-step-50, #f7f7f7)
7 | );
8 | color: var(--ion-color-dark);
9 | border-radius: 6px;
10 |
11 | font-size: 0.95em;
12 |
13 | display: flex;
14 | flex-direction: column;
15 | gap: 0.4rem;
16 |
17 | text-decoration: none;
18 | }
19 |
20 | .name {
21 | display: -webkit-box;
22 | -webkit-line-clamp: 2;
23 | -webkit-box-orient: vertical;
24 | overflow: hidden;
25 | }
26 |
27 | .communityName {
28 | opacity: 0.7;
29 | }
30 |
--------------------------------------------------------------------------------
/src/features/user/Scores.module.css:
--------------------------------------------------------------------------------
1 | .container {
2 | display: flex;
3 | justify-content: space-evenly;
4 | gap: 12px;
5 | margin: 24px 24px;
6 | }
7 |
8 | .score {
9 | font-size: min(1.3rem, 52px);
10 |
11 | font-weight: 600;
12 | text-align: center;
13 | cursor: pointer;
14 |
15 | aside {
16 | font-size: min(0.8rem, 32px);
17 |
18 | margin-top: 0.35rem;
19 | opacity: 0.5;
20 | font-weight: 500;
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/src/helpers/AppVList.tsx:
--------------------------------------------------------------------------------
1 | import { useMergedRef } from "@mantine/hooks";
2 | import { VList } from "virtua";
3 |
4 | import { useAppPageVListHandleRef } from "./AppPage";
5 |
6 | export default function AppVList(props: React.ComponentProps) {
7 | const virtuaRef = useAppPageVListHandleRef();
8 |
9 | return ;
10 | }
11 |
--------------------------------------------------------------------------------
/src/helpers/color.ts:
--------------------------------------------------------------------------------
1 | import { ColorSpace, contrastAPCA, parse, sRGB } from "colorjs.io/fn";
2 |
3 | ColorSpace.register(sRGB);
4 |
5 | export function getTextColorFor(bgColor: string): string {
6 | const parsedBgColor = parse(bgColor);
7 | const onWhite = Math.abs(contrastAPCA(parsedBgColor, "white"));
8 | const onBlack = Math.abs(contrastAPCA(parsedBgColor, "black"));
9 | return onWhite > onBlack ? "white" : "black";
10 | }
11 |
--------------------------------------------------------------------------------
/src/helpers/jwt.ts:
--------------------------------------------------------------------------------
1 | export function parseJWT(payload: string): T {
2 | const base64 = payload.split(".")[1]!;
3 | const jsonPayload = atob(base64);
4 | return JSON.parse(jsonPayload);
5 | }
6 |
--------------------------------------------------------------------------------
/src/helpers/promise.ts:
--------------------------------------------------------------------------------
1 | export function isPromiseResolvedByPaint(
2 | promise: Promise,
3 | ): Promise {
4 | return Promise.race([
5 | promise.then(() => true),
6 | new Promise((resolve) => {
7 | requestAnimationFrame(() => {
8 | resolve(false);
9 | });
10 | }),
11 | // If promise rejected, it's still resolved by paint
12 | ]).catch(() => true);
13 | }
14 |
--------------------------------------------------------------------------------
/src/helpers/regex.ts:
--------------------------------------------------------------------------------
1 | const syntaxChars = /[\^$\\.*+?()[\]{}|]/g;
2 |
3 | /**
4 | * Escapes all special special regex characters in a given string
5 | * so that it can be passed to `new RegExp(escaped, ...)` to match all given
6 | * characters literally.
7 | *
8 | * inspired by https://github.com/es-shims/regexp.escape/blob/master/implementation.js
9 | *
10 | * @param {string} s
11 | */
12 | export function escapeStringForRegex(s: string) {
13 | return s.replace(syntaxChars, "\\$&");
14 | }
15 |
--------------------------------------------------------------------------------
/src/helpers/safari.ts:
--------------------------------------------------------------------------------
1 | export function fixSafariAutoscroll() {
2 | let checkAttempts = 0;
3 |
4 | const interval = setInterval(() => {
5 | window.scrollTo(0, 0);
6 |
7 | if (window.scrollY === 0) {
8 | checkAttempts++;
9 |
10 | if (checkAttempts > 10) clearInterval(interval);
11 | }
12 | }, 100);
13 | }
14 |
--------------------------------------------------------------------------------
/src/helpers/serviceWorker.ts:
--------------------------------------------------------------------------------
1 | export async function unloadServiceWorkerAndRefresh() {
2 | try {
3 | const registrations = await navigator.serviceWorker.getRegistrations();
4 |
5 | await Promise.all(
6 | registrations.map((registration) => registration.unregister()),
7 | );
8 | } finally {
9 | window.location.href = "/";
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/src/helpers/typescript.d.ts:
--------------------------------------------------------------------------------
1 | export type DeepPartial = {
2 | [K in keyof T]?: T[K] extends object ? DeepPartial : T[K];
3 | };
4 |
--------------------------------------------------------------------------------
/src/helpers/useAppToast.module.css:
--------------------------------------------------------------------------------
1 | .icon {
2 | font-size: 22px;
3 | flex-shrink: 0;
4 | }
5 |
6 | .message {
7 | font-weight: 500;
8 | }
9 |
--------------------------------------------------------------------------------
/src/helpers/useClient.ts:
--------------------------------------------------------------------------------
1 | import { clientSelector } from "#/features/auth/authSelectors";
2 | import { useAppSelector } from "#/store";
3 |
4 | export default function useClient() {
5 | const client = useAppSelector(clientSelector);
6 |
7 | return client;
8 | }
9 |
--------------------------------------------------------------------------------
/src/helpers/useGetAppScrollable.ts:
--------------------------------------------------------------------------------
1 | import { VListHandle } from "virtua";
2 |
3 | import { useAppPageRef, useAppPageVListHandleRef } from "./AppPage";
4 |
5 | export type AppScrollable = VListHandle | HTMLElement | null;
6 |
7 | export default function useGetAppScrollable() {
8 | const virtuaHandleRef = useAppPageVListHandleRef();
9 | const appPageRef = useAppPageRef();
10 |
11 | return function getAppScrollable(): AppScrollable {
12 | if (virtuaHandleRef) return virtuaHandleRef.current;
13 | if (appPageRef) return appPageRef.current;
14 |
15 | return null;
16 | };
17 | }
18 |
--------------------------------------------------------------------------------
/src/helpers/useIonViewIsVisible.tsx:
--------------------------------------------------------------------------------
1 | import { useIonViewDidLeave, useIonViewWillEnter } from "@ionic/react";
2 | import { useState } from "react";
3 |
4 | export default function useIonViewIsVisible() {
5 | const [visible, setVisible] = useState(false);
6 |
7 | useIonViewWillEnter(() => {
8 | setVisible(true);
9 | });
10 |
11 | useIonViewDidLeave(() => {
12 | setVisible(false);
13 | });
14 |
15 | return visible;
16 | }
17 |
--------------------------------------------------------------------------------
/src/helpers/virtua.tsx:
--------------------------------------------------------------------------------
1 | import { CustomItemComponentProps } from "virtua";
2 |
3 | /**
4 | * Add data-index to each item for programmatic scrolling
5 | */
6 | export function IndexedVirtuaItem({
7 | children,
8 | index,
9 | style,
10 | ref,
11 | }: CustomItemComponentProps) {
12 | return (
13 |
14 | {children}
15 |
16 | );
17 | }
18 |
--------------------------------------------------------------------------------
/src/helpers/voyager.ts:
--------------------------------------------------------------------------------
1 | export const VOYAGER_PRIVACY = "https://getvoyager.app/privacy.html";
2 | export const VOYAGER_TERMS = "https://getvoyager.app/terms.html";
3 |
--------------------------------------------------------------------------------
/src/routes/TabBar.module.css:
--------------------------------------------------------------------------------
1 | .tabBar {
2 | @media (orientation: landscape) and (max-height: 450px) {
3 | height: 36px;
4 |
5 | ion-badge {
6 | inset-inline-start: calc(70% + 6px);
7 |
8 | &:global(.md) {
9 | inset-inline-start: calc(75% + 6px);
10 | }
11 | }
12 |
13 | ion-tab-button {
14 | flex-direction: row;
15 |
16 | > ion-label {
17 | margin-bottom: 0;
18 | }
19 |
20 | > ion-icon {
21 | font-size: 22px !important;
22 | margin-right: 5px;
23 | }
24 | }
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/src/routes/pages/inbox/ConversationPage.module.css:
--------------------------------------------------------------------------------
1 | .container {
2 | height: 100%;
3 | height: 100%;
4 |
5 | font-size: 0.9rem;
6 |
7 | display: flex;
8 | flex-direction: column;
9 | }
10 |
11 | .messageContainer {
12 | composes: maxWidth from "#/features/shared/shared.module.css";
13 |
14 | display: flex;
15 | flex-direction: column;
16 |
17 | padding: 0 16px;
18 |
19 | overflow: hidden;
20 | }
21 |
22 | .footer {
23 | background: var(--ion-background-color);
24 | }
25 |
26 | .title {
27 | padding-inline-start: 120px !important;
28 | padding-inline-end: 120px;
29 | }
30 |
--------------------------------------------------------------------------------
/src/routes/pages/inbox/InboxAuthRequired.tsx:
--------------------------------------------------------------------------------
1 | import { Redirect } from "react-router";
2 |
3 | import { jwtSelector } from "#/features/auth/authSelectors";
4 | import useIonViewIsVisible from "#/helpers/useIonViewIsVisible";
5 | import { useAppSelector } from "#/store";
6 |
7 | export default function InboxAuthRequired({
8 | children,
9 | }: React.PropsWithChildren) {
10 | const jwt = useAppSelector(jwtSelector);
11 |
12 | const ionViewIsVisible = useIonViewIsVisible();
13 |
14 | if (!jwt && ionViewIsVisible) return ;
15 |
16 | return children;
17 | }
18 |
--------------------------------------------------------------------------------
/src/routes/pages/search/SearchPage.module.css:
--------------------------------------------------------------------------------
1 | .searchbar {
2 | padding-top: 0 !important;
3 | padding-bottom: 0 !important;
4 | }
5 |
--------------------------------------------------------------------------------
/src/routes/pages/search/results/SearchCommunitiesPage.tsx:
--------------------------------------------------------------------------------
1 | import { useParams } from "react-router";
2 |
3 | import CommunitiesResultsPage from "../CommunitiesResultsPage";
4 |
5 | export default function SearchCommunitiesPage() {
6 | const { search: _encodedSearch } = useParams<{ search: string }>();
7 |
8 | const search = decodeURIComponent(_encodedSearch);
9 |
10 | return ;
11 | }
12 |
--------------------------------------------------------------------------------
/src/routes/pages/settings/SettingsPage.module.css:
--------------------------------------------------------------------------------
1 | .iconBg {
2 | width: 30px;
3 | height: 30px;
4 |
5 | display: flex;
6 | align-items: center;
7 | justify-content: center;
8 |
9 | ion-icon {
10 | width: 20px;
11 | height: 20px;
12 |
13 | transform: scale(var(--sv-scale));
14 | }
15 |
16 | border-radius: 50%;
17 | background-color: var(--sv-color);
18 | color: white;
19 | }
20 |
21 | .appIcon {
22 | width: 30px;
23 | height: 30px;
24 | border-radius: 6px;
25 | }
26 |
--------------------------------------------------------------------------------
/src/routes/pages/settings/UpdateAppPage.module.css:
--------------------------------------------------------------------------------
1 | .upToDateText {
2 | margin: auto;
3 | text-align: center;
4 |
5 | padding: 5rem 1rem;
6 |
7 | color: var(--ion-color-medium);
8 | }
9 |
10 | .container {
11 | height: 100%;
12 | width: 100%;
13 |
14 | display: flex;
15 | flex-direction: column;
16 | }
17 |
--------------------------------------------------------------------------------
/src/routes/pages/settings/about/AppDetails.module.css:
--------------------------------------------------------------------------------
1 | .container {
2 | display: flex;
3 | align-items: center;
4 | justify-content: center;
5 | gap: 16px;
6 | font-size: 1.2rem;
7 | margin: 32px 32px 48px;
8 |
9 | img {
10 | width: 70px;
11 | height: 70px;
12 | border-radius: 16px;
13 | }
14 |
15 | aside {
16 | font-size: 0.9rem;
17 | margin-top: 4px;
18 | color: var(--ion-color-medium);
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/src/routes/pages/settings/about/AppDetails.tsx:
--------------------------------------------------------------------------------
1 | import AppVersionInfo from "./AppVersionInfo";
2 |
3 | import styles from "./AppDetails.module.css";
4 |
5 | export default function AppDetails() {
6 | return (
7 |
8 |

9 |
13 |
14 | );
15 | }
16 |
--------------------------------------------------------------------------------
/src/routes/pages/settings/about/compliments.txt:
--------------------------------------------------------------------------------
1 | Your presence is cherished.
2 | You are a good person.
3 | Your kindness is a blessing.
4 | Your laughter is heartwarming.
5 | You bring smiles daily.
6 | You are beautiful.
7 | You inspire others.
8 | You have a good soul.
9 | You make people smile.
10 | You matter.
11 | You're a positive force.
12 | You're a true happiness booster.
13 | You are smart.
--------------------------------------------------------------------------------
/src/routes/pages/shared/CommunityCommentsPage.tsx:
--------------------------------------------------------------------------------
1 | import { useParams } from "react-router";
2 |
3 | import CommentsPage from "./CommentsPage";
4 |
5 | export default function CommunityCommentsPage() {
6 | const { community } = useParams<{
7 | community: string;
8 | }>();
9 |
10 | return ;
11 | }
12 |
--------------------------------------------------------------------------------
/src/routes/tabs/anyPane.tsx:
--------------------------------------------------------------------------------
1 | import anyPaneGeneral from "./anyPaneGeneral";
2 | import anyPaneInbox from "./anyPaneInbox";
3 |
4 | export default [...anyPaneGeneral, ...anyPaneInbox];
5 |
--------------------------------------------------------------------------------
/src/routes/tabs/anyPaneGeneral.tsx:
--------------------------------------------------------------------------------
1 | /* eslint-disable react/jsx-key */
2 | import Route from "#/routes/common/Route";
3 | import PostDetail from "#/routes/pages/posts/PostPage";
4 |
5 | export default [
6 |
7 |
8 | ,
9 |
10 |
11 | ,
12 | ];
13 |
--------------------------------------------------------------------------------
/src/routes/tabs/anyPaneInbox.tsx:
--------------------------------------------------------------------------------
1 | /* eslint-disable react/jsx-key */
2 | import { Route } from "react-router";
3 |
4 | import ConversationPage from "#/routes/pages/inbox/ConversationPage";
5 | import InboxAuthRequired from "#/routes/pages/inbox/InboxAuthRequired";
6 |
7 | export default [
8 |
9 |
10 |
11 |
12 | ,
13 | ];
14 |
--------------------------------------------------------------------------------
/src/routes/tabs/buttons/ProfileTabButton.module.css:
--------------------------------------------------------------------------------
1 | .profileLabel {
2 | max-width: 20vw;
3 | }
4 |
--------------------------------------------------------------------------------
/src/routes/tabs/buttons/shared.module.css:
--------------------------------------------------------------------------------
1 | /* reverts https://github.com/ionic-team/ionic-framework/pull/28754 */
2 | .tabButton {
3 | &:global(.ios.tab-has-label) {
4 | ion-icon {
5 | font-size: 30px;
6 | }
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/src/routes/tabs/profile.tsx:
--------------------------------------------------------------------------------
1 | /* eslint-disable react/jsx-key */
2 | import Route from "#/routes/common/Route";
3 | import ProfilePage from "#/routes/pages/profile/ProfilePage";
4 |
5 | export default [
6 |
7 |
8 | ,
9 | ];
10 |
--------------------------------------------------------------------------------
/src/routes/twoColumn/TwoColumnEmpty.module.css:
--------------------------------------------------------------------------------
1 | .container {
2 | display: flex;
3 | flex-direction: column;
4 | align-items: center;
5 | justify-content: center;
6 |
7 | img {
8 | border-radius: 15%;
9 | filter: grayscale(80%) opacity(0.2);
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/src/routes/twoColumn/TwoColumnEmpty.tsx:
--------------------------------------------------------------------------------
1 | import styles from "./TwoColumnEmpty.module.css";
2 |
3 | export default function TwoColumnEmpty() {
4 | return (
5 |
6 |

7 |
8 | );
9 | }
10 |
--------------------------------------------------------------------------------
/src/routes/twoColumn/useActivatedClass.ts:
--------------------------------------------------------------------------------
1 | import useIsLinkSelected from "./useIsLinkSelected";
2 |
3 | export default function useActivatedClass(routerLink: string) {
4 | const isActivated = useIsLinkSelected(routerLink);
5 |
6 | if (isActivated) return "app-activated";
7 | }
8 |
--------------------------------------------------------------------------------
/src/routes/twoColumn/useIsDeviceTwoColumnCapable.ts:
--------------------------------------------------------------------------------
1 | import { isPlatform } from "@ionic/core";
2 |
3 | export default function useIsDeviceTwoColumnCapable() {
4 | return isPlatform("desktop") || isPlatform("tablet") || isPlatform("phablet");
5 | }
6 |
--------------------------------------------------------------------------------
/src/routes/twoColumn/useIsLandscape.ts:
--------------------------------------------------------------------------------
1 | import { useMediaQuery } from "@mantine/hooks";
2 |
3 | export default function useIsLandscape() {
4 | return !!useMediaQuery("(orientation: landscape)");
5 | }
6 |
--------------------------------------------------------------------------------
/src/routes/twoColumn/useIsPageHidden.tsx:
--------------------------------------------------------------------------------
1 | import { createContext, use } from "react";
2 |
3 | export default function useIsPageHidden() {
4 | return use(HiddenPageContext);
5 | }
6 |
7 | export const HiddenPageContext = createContext(false);
8 |
--------------------------------------------------------------------------------
/src/routes/twoColumn/useIsSecondColumn.ts:
--------------------------------------------------------------------------------
1 | import { createContext } from "react";
2 | import { use } from "react";
3 |
4 | export const IsSecondColumnContext = createContext(false);
5 |
6 | export function useIsSecondColumn() {
7 | return use(IsSecondColumnContext);
8 | }
9 |
--------------------------------------------------------------------------------
/src/routes/twoColumn/useIsViewportTwoColumnCapable.ts:
--------------------------------------------------------------------------------
1 | import { useMediaQuery } from "@mantine/hooks";
2 |
3 | export default function useIsViewportTwoColumnCapable() {
4 | return useMediaQuery("(min-width: 768px)");
5 | }
6 |
--------------------------------------------------------------------------------
/src/setupTests.ts:
--------------------------------------------------------------------------------
1 | import { vi } from "vitest";
2 |
3 | // Mock window.matchMedia
4 | Object.defineProperty(window, "matchMedia", {
5 | writable: true,
6 | value: vi.fn().mockImplementation((query) => ({
7 | matches: false,
8 | media: query,
9 | onchange: null,
10 | addListener: vi.fn(), // deprecated
11 | removeListener: vi.fn(), // deprecated
12 | addEventListener: vi.fn(),
13 | removeEventListener: vi.fn(),
14 | dispatchEvent: vi.fn(),
15 | })),
16 | });
17 |
--------------------------------------------------------------------------------
/src/vite-env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 | ///
3 | ///
4 |
--------------------------------------------------------------------------------
/trapeze.yaml:
--------------------------------------------------------------------------------
1 | vars:
2 | APP_VERSION:
3 | APP_BUILD:
4 | platforms:
5 | android:
6 | versionName: $APP_VERSION
7 | versionCode: $APP_BUILD
8 | ios:
9 | version: $APP_VERSION
10 | buildNumber: $APP_BUILD
11 |
--------------------------------------------------------------------------------