| 
					
				 | 
			
			
				@@ -1,3 +1,87 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+<script setup lang="ts"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import { useStore } from "vuex"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import { useRoute } from "vue-router"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import { onMounted, defineAsyncComponent } from "vue"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import Toast from "toasters"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import ws from "@/ws"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import useTabQueryHandler from "@/composables/useTabQueryHandler"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const SecuritySettings = defineAsyncComponent( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	() => import("./Tabs/Security.vue") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const AccountSettings = defineAsyncComponent( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	() => import("./Tabs/Account.vue") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const ProfileSettings = defineAsyncComponent( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	() => import("./Tabs/Profile.vue") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const PreferencesSettings = defineAsyncComponent( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	() => import("./Tabs/Preferences.vue") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const store = useStore(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const route = useRoute(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const { tab, showTab } = useTabQueryHandler(""); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const { socket } = store.state.websockets; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const setUser = payload => store.dispatch("settings/setUser", payload); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const updateOriginalUser = payload => 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	store.dispatch("settings/updateOriginalUser", payload); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const init = () => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	socket.dispatch("users.findBySession", res => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		if (res.status === "success") setUser(res.data.user); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		else new Toast("You're not currently signed in."); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+onMounted(() => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	if ( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		route.query.tab === "profile" || 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		route.query.tab === "security" || 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		route.query.tab === "account" || 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		route.query.tab === "preferences" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		tab.value = route.query.tab; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	else tab.value = "profile"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	// this.localNightmode = this.nightmode; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	ws.onConnect(init); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	socket.on("event:user.password.linked", () => 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		updateOriginalUser({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			property: "password", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			value: true 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		}) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	socket.on("event:user.password.unlinked", () => 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		updateOriginalUser({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			property: "password", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			value: false 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		}) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	socket.on("event:user.github.linked", () => 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		updateOriginalUser({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			property: "github", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			value: true 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		}) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	socket.on("event:user.github.unlinked", () => 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		updateOriginalUser({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			property: "github", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			value: false 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		}) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+</script> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 <template> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	<div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		<page-metadata title="Settings" /> 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -45,94 +129,6 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	</div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 </template> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-<script> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import { mapActions, mapGetters } from "vuex"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import { defineAsyncComponent } from "vue"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import Toast from "toasters"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import ws from "@/ws"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import TabQueryHandler from "@/mixins/TabQueryHandler.vue"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-export default { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	components: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		SecuritySettings: defineAsyncComponent(() => 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			import("./Tabs/Security.vue") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		AccountSettings: defineAsyncComponent(() => 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			import("./Tabs/Account.vue") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		ProfileSettings: defineAsyncComponent(() => 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			import("./Tabs/Profile.vue") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		PreferencesSettings: defineAsyncComponent(() => 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			import("./Tabs/Preferences.vue") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	mixins: [TabQueryHandler], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	data() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		return { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			tab: "" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	computed: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		...mapGetters({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			socket: "websockets/getSocket" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		}) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	mounted() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if ( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			this.$route.query.tab === "profile" || 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			this.$route.query.tab === "security" || 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			this.$route.query.tab === "account" || 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			this.$route.query.tab === "preferences" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			this.tab = this.$route.query.tab; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		else this.tab = "profile"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		this.localNightmode = this.nightmode; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		ws.onConnect(this.init); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		this.socket.on("event:user.password.linked", () => 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			this.updateOriginalUser({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				property: "password", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				value: true 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			}) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		this.socket.on("event:user.password.unlinked", () => 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			this.updateOriginalUser({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				property: "password", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				value: false 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			}) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		this.socket.on("event:user.github.linked", () => 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			this.updateOriginalUser({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				property: "github", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				value: true 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			}) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		this.socket.on("event:user.github.unlinked", () => 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			this.updateOriginalUser({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				property: "github", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				value: false 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			}) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	methods: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		init() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			this.socket.dispatch("users.findBySession", res => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				if (res.status === "success") this.setUser(res.data.user); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				else new Toast("You're not currently signed in."); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		...mapActions("settings", ["updateOriginalUser", "setUser"]) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-</script> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 <style lang="less" scoped> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 .night-mode { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	.container .content { 
			 |