🚀 Launch v1.0 pre-alpha testing
@@ -1,41 +1,46 @@
 | 
			
		||||
<?xml version="1.0" encoding="utf-8"?>
 | 
			
		||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
 | 
			
		||||
 | 
			
		||||
    <application
 | 
			
		||||
        android:allowBackup="true"
 | 
			
		||||
        android:icon="@mipmap/ic_launcher"
 | 
			
		||||
        android:label="@string/app_name"
 | 
			
		||||
        android:roundIcon="@mipmap/ic_launcher_round"
 | 
			
		||||
        android:supportsRtl="true"
 | 
			
		||||
        android:theme="@style/AppTheme">
 | 
			
		||||
  <application
 | 
			
		||||
    android:allowBackup="true"
 | 
			
		||||
    android:icon="@mipmap/ic_launcher"
 | 
			
		||||
    android:label="@string/app_name"
 | 
			
		||||
    android:roundIcon="@mipmap/ic_launcher_round"
 | 
			
		||||
    android:supportsRtl="true"
 | 
			
		||||
    android:theme="@style/AppTheme">
 | 
			
		||||
 | 
			
		||||
        <activity
 | 
			
		||||
            android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|smallestScreenSize|screenLayout|uiMode"
 | 
			
		||||
            android:name=".MainActivity"
 | 
			
		||||
            android:label="@string/title_activity_main"
 | 
			
		||||
            android:theme="@style/AppTheme.NoActionBarLaunch"
 | 
			
		||||
            android:launchMode="singleTask"
 | 
			
		||||
            android:exported="true">
 | 
			
		||||
    <activity
 | 
			
		||||
      android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|smallestScreenSize|screenLayout|uiMode"
 | 
			
		||||
      android:name=".MainActivity"
 | 
			
		||||
      android:label="@string/title_activity_main"
 | 
			
		||||
      android:theme="@style/AppTheme.NoActionBarLaunch"
 | 
			
		||||
      android:launchMode="singleTask"
 | 
			
		||||
      android:exported="true">
 | 
			
		||||
 | 
			
		||||
            <intent-filter>
 | 
			
		||||
                <action android:name="android.intent.action.MAIN" />
 | 
			
		||||
                <category android:name="android.intent.category.LAUNCHER" />
 | 
			
		||||
            </intent-filter>
 | 
			
		||||
      <intent-filter>
 | 
			
		||||
        <action android:name="android.intent.action.MAIN" />
 | 
			
		||||
        <category android:name="android.intent.category.LAUNCHER" />
 | 
			
		||||
      </intent-filter>
 | 
			
		||||
 | 
			
		||||
        </activity>
 | 
			
		||||
    </activity>
 | 
			
		||||
 | 
			
		||||
        <provider
 | 
			
		||||
            android:name="androidx.core.content.FileProvider"
 | 
			
		||||
            android:authorities="${applicationId}.fileprovider"
 | 
			
		||||
            android:exported="false"
 | 
			
		||||
            android:grantUriPermissions="true">
 | 
			
		||||
            <meta-data
 | 
			
		||||
                android:name="android.support.FILE_PROVIDER_PATHS"
 | 
			
		||||
                android:resource="@xml/file_paths"></meta-data>
 | 
			
		||||
        </provider>
 | 
			
		||||
    </application>
 | 
			
		||||
    <provider
 | 
			
		||||
      android:name="androidx.core.content.FileProvider"
 | 
			
		||||
      android:authorities="${applicationId}.fileprovider"
 | 
			
		||||
      android:exported="false"
 | 
			
		||||
      android:grantUriPermissions="true">
 | 
			
		||||
      <meta-data
 | 
			
		||||
        android:name="android.support.FILE_PROVIDER_PATHS"
 | 
			
		||||
        android:resource="@xml/file_paths"></meta-data>
 | 
			
		||||
    </provider>
 | 
			
		||||
  </application>
 | 
			
		||||
 | 
			
		||||
    <!-- Permissions -->
 | 
			
		||||
  <!-- Permissions -->
 | 
			
		||||
 | 
			
		||||
    <uses-permission android:name="android.permission.INTERNET" />
 | 
			
		||||
  <uses-permission android:name="android.permission.INTERNET" />
 | 
			
		||||
  <uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
 | 
			
		||||
  <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"
 | 
			
		||||
    android:maxSdkVersion="32" />
 | 
			
		||||
  <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"
 | 
			
		||||
    android:maxSdkVersion="29" />
 | 
			
		||||
</manifest>
 | 
			
		||||
 
 | 
			
		||||
| 
		 Before Width: | Height: | Size: 2.7 KiB After Width: | Height: | Size: 2.7 KiB  | 
| 
		 Before Width: | Height: | Size: 4.2 KiB After Width: | Height: | Size: 3.4 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								android/app/src/main/res/mipmap-ldpi/ic_launcher.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 845 B  | 
							
								
								
									
										
											BIN
										
									
								
								android/app/src/main/res/mipmap-ldpi/ic_launcher_round.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 1.6 KiB  | 
| 
		 Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 1.4 KiB  | 
| 
		 Before Width: | Height: | Size: 2.7 KiB After Width: | Height: | Size: 2.1 KiB  | 
| 
		 Before Width: | Height: | Size: 3.9 KiB After Width: | Height: | Size: 4.1 KiB  | 
| 
		 Before Width: | Height: | Size: 6.4 KiB After Width: | Height: | Size: 4.5 KiB  | 
| 
		 Before Width: | Height: | Size: 6.5 KiB After Width: | Height: | Size: 6.9 KiB  | 
| 
		 Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 6.9 KiB  | 
| 
		 Before Width: | Height: | Size: 9.2 KiB After Width: | Height: | Size: 10 KiB  | 
| 
		 Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 9.7 KiB  | 
@@ -7,7 +7,7 @@ buildscript {
 | 
			
		||||
        mavenCentral()
 | 
			
		||||
    }
 | 
			
		||||
    dependencies {
 | 
			
		||||
        classpath 'com.android.tools.build:gradle:8.0.0'
 | 
			
		||||
        classpath 'com.android.tools.build:gradle:8.3.1'
 | 
			
		||||
        classpath 'com.google.gms:google-services:4.3.15'
 | 
			
		||||
 | 
			
		||||
        // NOTE: Do not place your application dependencies here; they belong
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,6 @@
 | 
			
		||||
distributionBase=GRADLE_USER_HOME
 | 
			
		||||
distributionPath=wrapper/dists
 | 
			
		||||
distributionUrl=https\://services.gradle.org/distributions/gradle-8.0.2-all.zip
 | 
			
		||||
distributionUrl=https\://services.gradle.org/distributions/gradle-8.4-all.zip
 | 
			
		||||
networkTimeout=10000
 | 
			
		||||
zipStoreBase=GRADLE_USER_HOME
 | 
			
		||||
zipStorePath=wrapper/dists
 | 
			
		||||
 
 | 
			
		||||
@@ -6,8 +6,6 @@ const config: CapacitorConfig = {
 | 
			
		||||
  webDir: "dist",
 | 
			
		||||
  server: {
 | 
			
		||||
    androidScheme: "https",
 | 
			
		||||
    url: "http://localhost:5173",
 | 
			
		||||
    cleartext: true
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -122,8 +122,8 @@
 | 
			
		||||
		504EC2FC1FED79650016851F /* Project object */ = {
 | 
			
		||||
			isa = PBXProject;
 | 
			
		||||
			attributes = {
 | 
			
		||||
				LastSwiftUpdateCheck = 0920;
 | 
			
		||||
				LastUpgradeCheck = 0920;
 | 
			
		||||
				LastSwiftUpdateCheck = 920;
 | 
			
		||||
				LastUpgradeCheck = 920;
 | 
			
		||||
				TargetAttributes = {
 | 
			
		||||
					504EC3031FED79650016851F = {
 | 
			
		||||
						CreatedOnToolsVersion = 9.2;
 | 
			
		||||
@@ -347,6 +347,7 @@
 | 
			
		||||
				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
 | 
			
		||||
				CODE_SIGN_STYLE = Automatic;
 | 
			
		||||
				CURRENT_PROJECT_VERSION = 1;
 | 
			
		||||
				DEVELOPMENT_TEAM = W7HPZ53V6B;
 | 
			
		||||
				INFOPLIST_FILE = App/Info.plist;
 | 
			
		||||
				INFOPLIST_KEY_CFBundleDisplayName = Solian;
 | 
			
		||||
				IPHONEOS_DEPLOYMENT_TARGET = 13.0;
 | 
			
		||||
@@ -368,6 +369,7 @@
 | 
			
		||||
				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
 | 
			
		||||
				CODE_SIGN_STYLE = Automatic;
 | 
			
		||||
				CURRENT_PROJECT_VERSION = 1;
 | 
			
		||||
				DEVELOPMENT_TEAM = W7HPZ53V6B;
 | 
			
		||||
				INFOPLIST_FILE = App/Info.plist;
 | 
			
		||||
				INFOPLIST_KEY_CFBundleDisplayName = Solian;
 | 
			
		||||
				IPHONEOS_DEPLOYMENT_TARGET = 13.0;
 | 
			
		||||
 
 | 
			
		||||
| 
		 Before Width: | Height: | Size: 108 KiB After Width: | Height: | Size: 48 KiB  | 
@@ -1,14 +1,14 @@
 | 
			
		||||
{
 | 
			
		||||
  "images" : [
 | 
			
		||||
  "images": [
 | 
			
		||||
    {
 | 
			
		||||
      "filename" : "AppIcon-512@2x.png",
 | 
			
		||||
      "idiom" : "universal",
 | 
			
		||||
      "platform" : "ios",
 | 
			
		||||
      "size" : "1024x1024"
 | 
			
		||||
      "idiom": "universal",
 | 
			
		||||
      "size": "1024x1024",
 | 
			
		||||
      "filename": "AppIcon-512@2x.png",
 | 
			
		||||
      "platform": "ios"
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "info" : {
 | 
			
		||||
    "author" : "xcode",
 | 
			
		||||
    "version" : 1
 | 
			
		||||
  "info": {
 | 
			
		||||
    "author": "xcode",
 | 
			
		||||
    "version": 1
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
@@ -1,23 +1,56 @@
 | 
			
		||||
{
 | 
			
		||||
  "images" : [
 | 
			
		||||
  "images": [
 | 
			
		||||
    {
 | 
			
		||||
      "idiom" : "universal",
 | 
			
		||||
      "filename" : "splash-2732x2732-2.png",
 | 
			
		||||
      "scale" : "1x"
 | 
			
		||||
      "idiom": "universal",
 | 
			
		||||
      "filename": "Default@1x~universal~anyany.png",
 | 
			
		||||
      "scale": "1x"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "idiom" : "universal",
 | 
			
		||||
      "filename" : "splash-2732x2732-1.png",
 | 
			
		||||
      "scale" : "2x"
 | 
			
		||||
      "idiom": "universal",
 | 
			
		||||
      "filename": "Default@2x~universal~anyany.png",
 | 
			
		||||
      "scale": "2x"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "idiom" : "universal",
 | 
			
		||||
      "filename" : "splash-2732x2732.png",
 | 
			
		||||
      "scale" : "3x"
 | 
			
		||||
      "idiom": "universal",
 | 
			
		||||
      "filename": "Default@3x~universal~anyany.png",
 | 
			
		||||
      "scale": "3x"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "appearances": [
 | 
			
		||||
        {
 | 
			
		||||
          "appearance": "luminosity",
 | 
			
		||||
          "value": "dark"
 | 
			
		||||
        }
 | 
			
		||||
      ],
 | 
			
		||||
      "idiom": "universal",
 | 
			
		||||
      "scale": "1x",
 | 
			
		||||
      "filename": "Default@1x~universal~anyany-dark.png"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "appearances": [
 | 
			
		||||
        {
 | 
			
		||||
          "appearance": "luminosity",
 | 
			
		||||
          "value": "dark"
 | 
			
		||||
        }
 | 
			
		||||
      ],
 | 
			
		||||
      "idiom": "universal",
 | 
			
		||||
      "scale": "2x",
 | 
			
		||||
      "filename": "Default@2x~universal~anyany-dark.png"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "appearances": [
 | 
			
		||||
        {
 | 
			
		||||
          "appearance": "luminosity",
 | 
			
		||||
          "value": "dark"
 | 
			
		||||
        }
 | 
			
		||||
      ],
 | 
			
		||||
      "idiom": "universal",
 | 
			
		||||
      "scale": "3x",
 | 
			
		||||
      "filename": "Default@3x~universal~anyany-dark.png"
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "info" : {
 | 
			
		||||
    "version" : 1,
 | 
			
		||||
    "author" : "xcode"
 | 
			
		||||
  "info": {
 | 
			
		||||
    "version": 1,
 | 
			
		||||
    "author": "xcode"
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										
											BIN
										
									
								
								ios/App/App/Assets.xcassets/Splash.imageset/Default@1x~universal~anyany-dark.png
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 34 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								ios/App/App/Assets.xcassets/Splash.imageset/Default@1x~universal~anyany.png
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 50 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								ios/App/App/Assets.xcassets/Splash.imageset/Default@2x~universal~anyany-dark.png
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 34 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								ios/App/App/Assets.xcassets/Splash.imageset/Default@2x~universal~anyany.png
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 50 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								ios/App/App/Assets.xcassets/Splash.imageset/Default@3x~universal~anyany-dark.png
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 34 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								ios/App/App/Assets.xcassets/Splash.imageset/Default@3x~universal~anyany.png
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 50 KiB  | 
@@ -43,7 +43,15 @@
 | 
			
		||||
		<string>UIInterfaceOrientationLandscapeLeft</string>
 | 
			
		||||
		<string>UIInterfaceOrientationLandscapeRight</string>
 | 
			
		||||
	</array>
 | 
			
		||||
	<key>LSApplicationCategoryType</key>
 | 
			
		||||
	<string></string>
 | 
			
		||||
	<key>UIViewControllerBasedStatusBarAppearance</key>
 | 
			
		||||
	<false/>
 | 
			
		||||
	<key>NSPhotoLibraryAddUsageDescription</key>
 | 
			
		||||
	<string>Allow Solian full access your photo library so that you can share photos more easily.</string>
 | 
			
		||||
	<key>NSPhotoLibraryUsageDescription</key>
 | 
			
		||||
	<string>Allow Solian access your photo library so that you can share photos.</string>
 | 
			
		||||
	<key>NSCameraUsageDescription</key>
 | 
			
		||||
	<string>Allow Solian use your camera so that you can take photo for your post.</string>
 | 
			
		||||
</dict>
 | 
			
		||||
</plist>
 | 
			
		||||
 
 | 
			
		||||
@@ -29,6 +29,7 @@
 | 
			
		||||
    "vuetify": "^3.5.12"
 | 
			
		||||
  },
 | 
			
		||||
  "devDependencies": {
 | 
			
		||||
    "@capacitor/assets": "^3.0.4",
 | 
			
		||||
    "@capacitor/cli": "^5.7.4",
 | 
			
		||||
    "@rushstack/eslint-patch": "^1.3.3",
 | 
			
		||||
    "@tsconfig/node20": "^20.1.2",
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										46
									
								
								public/manifest.webmanifest
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,46 @@
 | 
			
		||||
{
 | 
			
		||||
  "icons": [
 | 
			
		||||
    {
 | 
			
		||||
      "src": "../icons/icon-48.webp",
 | 
			
		||||
      "type": "image/png",
 | 
			
		||||
      "sizes": "48x48",
 | 
			
		||||
      "purpose": "any maskable"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "src": "../icons/icon-72.webp",
 | 
			
		||||
      "type": "image/png",
 | 
			
		||||
      "sizes": "72x72",
 | 
			
		||||
      "purpose": "any maskable"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "src": "../icons/icon-96.webp",
 | 
			
		||||
      "type": "image/png",
 | 
			
		||||
      "sizes": "96x96",
 | 
			
		||||
      "purpose": "any maskable"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "src": "../icons/icon-128.webp",
 | 
			
		||||
      "type": "image/png",
 | 
			
		||||
      "sizes": "128x128",
 | 
			
		||||
      "purpose": "any maskable"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "src": "../icons/icon-192.webp",
 | 
			
		||||
      "type": "image/png",
 | 
			
		||||
      "sizes": "192x192",
 | 
			
		||||
      "purpose": "any maskable"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "src": "../icons/icon-256.webp",
 | 
			
		||||
      "type": "image/png",
 | 
			
		||||
      "sizes": "256x256",
 | 
			
		||||
      "purpose": "any maskable"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "src": "../icons/icon-512.webp",
 | 
			
		||||
      "type": "image/png",
 | 
			
		||||
      "sizes": "512x512",
 | 
			
		||||
      "purpose": "any maskable"
 | 
			
		||||
    }
 | 
			
		||||
  ]
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										
											BIN
										
									
								
								resources/icon-background.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 17 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								resources/icon-foreground.png
									
									
									
									
									
										Executable file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 70 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								resources/icon-only.png
									
									
									
									
									
										Executable file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 70 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								resources/splash-dark.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 112 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								resources/splash.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 134 KiB  | 
@@ -1,6 +1,6 @@
 | 
			
		||||
<template>
 | 
			
		||||
  <v-app>
 | 
			
		||||
    <v-system-bar v-if="safeAreaHeight > 0" color="primary" :order="1" :height="safeAreaHeight" />
 | 
			
		||||
    <v-system-bar v-show="ui.safeArea.top > 0" color="primary" :order="1" :height="ui.safeArea.top" />
 | 
			
		||||
 | 
			
		||||
    <router-view />
 | 
			
		||||
  </v-app>
 | 
			
		||||
@@ -8,13 +8,22 @@
 | 
			
		||||
 | 
			
		||||
<script setup lang="ts">
 | 
			
		||||
import { onMounted, ref } from "vue"
 | 
			
		||||
import { Capacitor } from "@capacitor/core"
 | 
			
		||||
import { useUI } from "@/stores/ui"
 | 
			
		||||
 | 
			
		||||
const safeAreaHeight = ref(0)
 | 
			
		||||
const ui = useUI()
 | 
			
		||||
 | 
			
		||||
function updateSafeArea() {
 | 
			
		||||
  const property = getComputedStyle(document.documentElement).getPropertyValue("--safe-area-top")
 | 
			
		||||
  safeAreaHeight.value = parseInt(property.replace("px", ""))
 | 
			
		||||
  const topProperty = getComputedStyle(document.documentElement).getPropertyValue("--safe-area-top")
 | 
			
		||||
  ui.safeArea.top = parseInt(topProperty.replace("px", ""))
 | 
			
		||||
  const bottomProperty = getComputedStyle(document.documentElement).getPropertyValue("--safe-area-top")
 | 
			
		||||
  ui.safeArea.bottom = parseInt(bottomProperty.replace("px", ""))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
onMounted(() => updateSafeArea())
 | 
			
		||||
onMounted(() => {
 | 
			
		||||
  updateSafeArea()
 | 
			
		||||
  for (let idx = 1; idx <= 10; idx++) {
 | 
			
		||||
    setTimeout(() => updateSafeArea(), 250 * idx)
 | 
			
		||||
  }
 | 
			
		||||
})
 | 
			
		||||
</script>
 | 
			
		||||
 
 | 
			
		||||
@@ -1,11 +1,8 @@
 | 
			
		||||
<template>
 | 
			
		||||
  <v-navigation-drawer v-model="drawerOpen" color="grey-lighten-5" width="320" :order="0" floating>
 | 
			
		||||
    <div class="flex flex-col h-full">
 | 
			
		||||
      <div
 | 
			
		||||
        class="flex items-center px-3 pb-2.5 border-opacity-15"
 | 
			
		||||
        style="border-bottom-width: thin"
 | 
			
		||||
        :style="`padding-top: max(${safeAreaTop}, 16px)`"
 | 
			
		||||
      >
 | 
			
		||||
      <div class="flex items-center px-3 pb-2.5 border-opacity-15" style="border-bottom-width: thin"
 | 
			
		||||
        :style="`padding-top: max(${safeAreaTop}, 16px)`">
 | 
			
		||||
        <img src="/favicon.png" width="36" height="36" class="block" />
 | 
			
		||||
        <div class="ms-6 font-medium">Solar Network</div>
 | 
			
		||||
      </div>
 | 
			
		||||
@@ -15,14 +12,11 @@
 | 
			
		||||
      </div>
 | 
			
		||||
 | 
			
		||||
      <!-- User info -->
 | 
			
		||||
      <v-list
 | 
			
		||||
        class="border-opacity-15 h-[64px]"
 | 
			
		||||
        style="border-top-width: thin"
 | 
			
		||||
        :style="`margin-bottom: ${safeAreaBottom}`"
 | 
			
		||||
      >
 | 
			
		||||
      <v-list class="border-opacity-15 h-[64px]" style="border-top-width: thin"
 | 
			
		||||
        :style="`margin-bottom: ${safeAreaBottom}`">
 | 
			
		||||
        <v-list-item :subtitle="username" :title="nickname">
 | 
			
		||||
          <template #prepend>
 | 
			
		||||
            <v-avatar icon="mdi-account-circle" :image="id.userinfo.data?.avatar" />
 | 
			
		||||
            <v-avatar icon="mdi-account-circle" :image="id.userinfo.data?.picture" />
 | 
			
		||||
          </template>
 | 
			
		||||
          <template #append>
 | 
			
		||||
            <v-menu v-if="id.userinfo.isLoggedIn">
 | 
			
		||||
@@ -31,12 +25,8 @@
 | 
			
		||||
              </template>
 | 
			
		||||
 | 
			
		||||
              <v-list density="compact">
 | 
			
		||||
                <v-list-item
 | 
			
		||||
                  title="Solarpass"
 | 
			
		||||
                  prepend-icon="mdi-passport-biometric"
 | 
			
		||||
                  target="_blank"
 | 
			
		||||
                  :href="passportUrl"
 | 
			
		||||
                />
 | 
			
		||||
                <v-list-item title="Solarpass" prepend-icon="mdi-passport-biometric" target="_blank"
 | 
			
		||||
                  :href="passportUrl" />
 | 
			
		||||
              </v-list>
 | 
			
		||||
            </v-menu>
 | 
			
		||||
 | 
			
		||||
@@ -58,7 +48,7 @@
 | 
			
		||||
      <v-spacer />
 | 
			
		||||
 | 
			
		||||
      <div v-if="id.userinfo.isLoggedIn">
 | 
			
		||||
          <notification-list />
 | 
			
		||||
        <notification-list />
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
  </v-app-bar>
 | 
			
		||||
@@ -67,24 +57,11 @@
 | 
			
		||||
    <router-view />
 | 
			
		||||
  </v-main>
 | 
			
		||||
 | 
			
		||||
  <v-menu
 | 
			
		||||
    open-on-hover
 | 
			
		||||
    open-on-click
 | 
			
		||||
    :open-delay="0"
 | 
			
		||||
    :close-delay="0"
 | 
			
		||||
    location="top"
 | 
			
		||||
    transition="scroll-y-reverse-transition"
 | 
			
		||||
  >
 | 
			
		||||
  <v-menu open-on-hover open-on-click :open-delay="0" :close-delay="0" location="top"
 | 
			
		||||
    transition="scroll-y-reverse-transition">
 | 
			
		||||
    <template v-slot:activator="{ props }">
 | 
			
		||||
      <v-fab
 | 
			
		||||
        v-bind="props"
 | 
			
		||||
        appear
 | 
			
		||||
        class="editor-fab"
 | 
			
		||||
        icon="mdi-pencil"
 | 
			
		||||
        color="primary"
 | 
			
		||||
        size="64"
 | 
			
		||||
        :active="id.userinfo.isLoggedIn"
 | 
			
		||||
      />
 | 
			
		||||
      <v-fab v-bind="props" appear class="editor-fab" icon="mdi-pencil" color="primary" size="64"
 | 
			
		||||
        :active="id.userinfo.isLoggedIn" />
 | 
			
		||||
    </template>
 | 
			
		||||
 | 
			
		||||
    <div class="flex flex-col items-center gap-4 mb-4">
 | 
			
		||||
@@ -102,17 +79,20 @@ import { computed, ref } from "vue"
 | 
			
		||||
import { useEditor } from "@/stores/editor"
 | 
			
		||||
import { useUserinfo } from "@/stores/userinfo"
 | 
			
		||||
import { useWellKnown } from "@/stores/wellKnown"
 | 
			
		||||
import { useUI } from "@/stores/ui"
 | 
			
		||||
import PostTools from "@/components/publish/PostTools.vue"
 | 
			
		||||
import RealmTools from "@/components/realms/RealmTools.vue"
 | 
			
		||||
import RealmList from "@/components/realms/RealmList.vue"
 | 
			
		||||
import NotificationList from "@/components/NotificationList.vue"
 | 
			
		||||
 | 
			
		||||
const ui = useUI()
 | 
			
		||||
 | 
			
		||||
const safeAreaTop = computed(() => {
 | 
			
		||||
  return getComputedStyle(document.documentElement).getPropertyValue("--safe-area-top")
 | 
			
		||||
  return `${ui.safeArea.top}px`
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
const safeAreaBottom = computed(() => {
 | 
			
		||||
  return getComputedStyle(document.documentElement).getPropertyValue("--safe-area-bottom")
 | 
			
		||||
  return `${ui.safeArea.bottom}px`
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
const id = useUserinfo()
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										11
									
								
								src/stores/ui.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,11 @@
 | 
			
		||||
import { defineStore } from "pinia"
 | 
			
		||||
import { reactive } from "vue"
 | 
			
		||||
 | 
			
		||||
export const useUI = defineStore("ui", () => {
 | 
			
		||||
  const safeArea = reactive({
 | 
			
		||||
    top: 0,
 | 
			
		||||
    bottom: 0,
 | 
			
		||||
  })
 | 
			
		||||
 | 
			
		||||
  return { safeArea }
 | 
			
		||||
})
 | 
			
		||||