| 
									
										
										
										
											2022-11-15 03:26:52 +00:00
										 |  |  | <script setup lang="ts"> | 
					
						
							| 
									
										
										
										
											2022-11-27 07:44:47 +00:00
										 |  |  | import type { Account, Field } from 'masto' | 
					
						
							| 
									
										
										
										
											2022-11-15 03:26:52 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | const { account } = defineProps<{ | 
					
						
							|  |  |  |   account: Account | 
					
						
							| 
									
										
										
										
											2022-11-29 08:15:05 +00:00
										 |  |  |   command?: boolean | 
					
						
							| 
									
										
										
										
											2022-11-15 03:26:52 +00:00
										 |  |  | }>() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-12-02 02:18:36 +00:00
										 |  |  | const { t } = useI18n() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-11-26 08:34:24 +00:00
										 |  |  | const createdAt = $(useFormattedDateTime(() => account.createdAt, { | 
					
						
							|  |  |  |   month: 'long', | 
					
						
							|  |  |  |   day: 'numeric', | 
					
						
							|  |  |  |   year: 'numeric', | 
					
						
							|  |  |  | })) | 
					
						
							| 
									
										
										
										
											2022-11-24 06:41:29 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-11-27 07:44:47 +00:00
										 |  |  | const namedFields = ref<Field[]>([]) | 
					
						
							|  |  |  | const iconFields = ref<Field[]>([]) | 
					
						
							| 
									
										
										
										
											2022-11-24 06:41:29 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | const fieldNameIcons: Record<string, string> = { | 
					
						
							|  |  |  |   github: 'i-ri:github-fill', | 
					
						
							|  |  |  |   twitter: 'i-ri:twitter-line', | 
					
						
							|  |  |  |   mastodon: 'i-ri:mastodon-line', | 
					
						
							|  |  |  |   youtube: 'i-ri:youtube-line', | 
					
						
							|  |  |  |   twitch: 'i-ri:twitch-line', | 
					
						
							|  |  |  |   instagram: 'i-ri:instagram-line', | 
					
						
							|  |  |  |   website: 'i-ri:link', | 
					
						
							|  |  |  |   site: 'i-ri:link', | 
					
						
							| 
									
										
										
										
											2022-11-27 04:45:26 +00:00
										 |  |  |   portfolio: 'i-ri:link', | 
					
						
							| 
									
										
										
										
											2022-11-24 06:41:29 +00:00
										 |  |  |   blog: 'i-ri:newspaper-line', | 
					
						
							|  |  |  |   home: 'i-ri:home-2-line', | 
					
						
							|  |  |  |   sponsors: 'i-ri:heart-3-line', | 
					
						
							|  |  |  |   location: 'i-ri:map-pin-2-line', | 
					
						
							|  |  |  |   city: 'i-ri:map-pin-2-line', | 
					
						
							|  |  |  |   joined: 'i-ri:user-add-line', | 
					
						
							|  |  |  |   birth: 'i-ri:calendar-line', | 
					
						
							| 
									
										
										
										
											2022-11-27 04:45:26 +00:00
										 |  |  |   tumblr: 'i-ri:tumblr-fill', | 
					
						
							|  |  |  |   linkedin: 'i-ri:linkedin-box-fill', | 
					
						
							|  |  |  |   facebook: 'i-ri:facebook-fill', | 
					
						
							|  |  |  |   patreon: 'i-ri:patreon-fill', | 
					
						
							| 
									
										
										
										
											2022-11-24 06:41:29 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function getFieldNameIcon(fieldName: string) { | 
					
						
							|  |  |  |   const name = fieldName.trim().toLowerCase() | 
					
						
							|  |  |  |   if (fieldNameIcons[name]) | 
					
						
							|  |  |  |     return fieldNameIcons[name] | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2022-12-02 02:18:36 +00:00
										 |  |  | function getFieldIconTitle(fieldName: string) { | 
					
						
							|  |  |  |   return fieldName === 'Joined' ? t('account.joined') : fieldName | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2022-11-25 18:13:44 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | function previewHeader() { | 
					
						
							| 
									
										
										
										
											2022-11-30 03:27:19 +00:00
										 |  |  |   openMediaPreview([{ | 
					
						
							|  |  |  |     id: `${account.acct}:header`, | 
					
						
							|  |  |  |     type: 'image', | 
					
						
							|  |  |  |     previewUrl: account.header, | 
					
						
							| 
									
										
										
										
											2022-12-02 02:18:36 +00:00
										 |  |  |     description: t('account.profile_description', [account.username]), | 
					
						
							| 
									
										
										
										
											2022-11-30 03:27:19 +00:00
										 |  |  |   }]) | 
					
						
							| 
									
										
										
										
											2022-11-25 18:13:44 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function previewAvatar() { | 
					
						
							| 
									
										
										
										
											2022-11-30 03:27:19 +00:00
										 |  |  |   openMediaPreview([{ | 
					
						
							|  |  |  |     id: `${account.acct}:avatar`, | 
					
						
							|  |  |  |     type: 'image', | 
					
						
							|  |  |  |     previewUrl: account.avatar, | 
					
						
							| 
									
										
										
										
											2022-12-02 02:18:36 +00:00
										 |  |  |     description: t('account.avatar_description', [account.username]), | 
					
						
							| 
									
										
										
										
											2022-11-30 03:27:19 +00:00
										 |  |  |   }]) | 
					
						
							| 
									
										
										
										
											2022-11-25 18:13:44 +00:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2022-11-27 07:44:47 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | watchEffect(() => { | 
					
						
							|  |  |  |   const named: Field[] = [] | 
					
						
							|  |  |  |   const icons: Field[] = [] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   account.fields?.forEach((field) => { | 
					
						
							|  |  |  |     const icon = getFieldNameIcon(field.name) | 
					
						
							|  |  |  |     if (icon) | 
					
						
							|  |  |  |       icons.push(field) | 
					
						
							|  |  |  |     else | 
					
						
							|  |  |  |       named.push(field) | 
					
						
							|  |  |  |   }) | 
					
						
							|  |  |  |   icons.push({ | 
					
						
							|  |  |  |     name: 'Joined', | 
					
						
							|  |  |  |     value: createdAt, | 
					
						
							|  |  |  |   }) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   namedFields.value = named | 
					
						
							|  |  |  |   iconFields.value = icons | 
					
						
							|  |  |  | }) | 
					
						
							| 
									
										
										
										
											2022-11-15 03:26:52 +00:00
										 |  |  | </script> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | <template> | 
					
						
							|  |  |  |   <div flex flex-col> | 
					
						
							| 
									
										
										
										
											2022-11-25 18:13:44 +00:00
										 |  |  |     <button border="b base" z-1> | 
					
						
							| 
									
										
										
										
											2022-12-02 02:18:36 +00:00
										 |  |  |       <img h-50 w-full object-cover :src="account.header" :alt="t('account.profile_description', [account.username])" @click="previewHeader"> | 
					
						
							| 
									
										
										
										
											2022-11-25 18:13:44 +00:00
										 |  |  |     </button> | 
					
						
							| 
									
										
										
										
											2022-11-29 20:04:23 +00:00
										 |  |  |     <div p4 mt--18 flex flex-col gap-4> | 
					
						
							| 
									
										
										
										
											2022-11-27 12:20:03 +00:00
										 |  |  |       <div relative> | 
					
						
							| 
									
										
										
										
											2022-11-25 18:13:44 +00:00
										 |  |  |         <div flex="~ col gap-2 1"> | 
					
						
							| 
									
										
										
										
											2022-11-29 06:00:06 +00:00
										 |  |  |           <button w-30 h-30 rounded-full border-4 border-bg-base z-2 @click="previewAvatar"> | 
					
						
							| 
									
										
										
										
											2022-11-25 18:13:44 +00:00
										 |  |  |             <AccountAvatar :account="account" hover:opacity-90 transition-opacity /> | 
					
						
							|  |  |  |           </button> | 
					
						
							| 
									
										
										
										
											2022-11-23 14:39:48 +00:00
										 |  |  |           <div flex flex-col> | 
					
						
							| 
									
										
										
										
											2022-12-02 07:27:44 +00:00
										 |  |  |             <ContentRich | 
					
						
							| 
									
										
										
										
											2022-12-06 16:37:58 +00:00
										 |  |  |               font-bold sm:text-2xl text-xl | 
					
						
							| 
									
										
										
										
											2022-12-02 07:27:44 +00:00
										 |  |  |               :content="getDisplayName(account, { rich: true })" | 
					
						
							|  |  |  |               :emojis="account.emojis" | 
					
						
							|  |  |  |             /> | 
					
						
							| 
									
										
										
										
											2022-11-26 20:41:18 +00:00
										 |  |  |             <AccountHandle :account="account" /> | 
					
						
							| 
									
										
										
										
											2022-11-23 14:39:48 +00:00
										 |  |  |           </div> | 
					
						
							| 
									
										
										
										
											2022-11-15 03:26:52 +00:00
										 |  |  |         </div> | 
					
						
							| 
									
										
										
										
											2022-12-06 16:37:58 +00:00
										 |  |  |         <div absolute top-18 right-0 flex gap-2 items-center> | 
					
						
							| 
									
										
										
										
											2022-11-29 08:15:05 +00:00
										 |  |  |           <AccountMoreButton :account="account" :command="command" /> | 
					
						
							|  |  |  |           <AccountFollowButton :account="account" :command="command" /> | 
					
						
							| 
									
										
										
										
											2022-11-21 13:45:09 +00:00
										 |  |  |           <!-- <button flex gap-1 items-center w-full rounded op75 hover="op100 text-purple" group> | 
					
						
							| 
									
										
										
										
											2022-11-15 03:26:52 +00:00
										 |  |  |             <div rounded p2 group-hover="bg-rose/10"> | 
					
						
							|  |  |  |               <div i-ri:bell-line /> | 
					
						
							|  |  |  |             </div> | 
					
						
							| 
									
										
										
										
											2022-11-21 13:45:09 +00:00
										 |  |  |           </button> --> | 
					
						
							| 
									
										
										
										
											2022-11-15 03:26:52 +00:00
										 |  |  |         </div> | 
					
						
							|  |  |  |       </div> | 
					
						
							| 
									
										
										
										
											2022-11-24 10:36:22 +00:00
										 |  |  |       <div v-if="account.note"> | 
					
						
							| 
									
										
										
										
											2022-11-26 20:41:18 +00:00
										 |  |  |         <ContentRich text-4 text-secondary :content="account.note" :emojis="account.emojis" /> | 
					
						
							| 
									
										
										
										
											2022-11-15 03:26:52 +00:00
										 |  |  |       </div> | 
					
						
							| 
									
										
										
										
											2022-11-27 07:44:47 +00:00
										 |  |  |       <div v-if="namedFields.length" flex="~ col wrap gap1"> | 
					
						
							|  |  |  |         <div v-for="field in namedFields" :key="field.name" flex="~ gap-1" items-center> | 
					
						
							|  |  |  |           <div text-secondary uppercase text-xs font-bold> | 
					
						
							| 
									
										
										
										
											2022-11-24 06:41:29 +00:00
										 |  |  |             {{ field.name }} | | 
					
						
							|  |  |  |           </div> | 
					
						
							| 
									
										
										
										
											2022-11-28 13:58:58 +00:00
										 |  |  |           <ContentRich :content="field.value" :emojis="account.emojis" /> | 
					
						
							| 
									
										
										
										
											2022-11-27 07:44:47 +00:00
										 |  |  |         </div> | 
					
						
							|  |  |  |       </div> | 
					
						
							|  |  |  |       <div v-if="iconFields.length" flex="~ wrap gap-4"> | 
					
						
							|  |  |  |         <div v-for="field in iconFields" :key="field.name" flex="~ gap-1" items-center> | 
					
						
							| 
									
										
										
										
											2022-12-02 02:18:36 +00:00
										 |  |  |           <div text-secondary :class="getFieldNameIcon(field.name)" :title="getFieldIconTitle(field.name)" /> | 
					
						
							| 
									
										
										
										
											2022-11-28 13:58:58 +00:00
										 |  |  |           <ContentRich text-sm filter-saturate-0 :content="field.value" :emojis="account.emojis" /> | 
					
						
							| 
									
										
										
										
											2022-11-15 03:26:52 +00:00
										 |  |  |         </div> | 
					
						
							|  |  |  |       </div> | 
					
						
							| 
									
										
										
										
											2022-11-28 09:51:15 +00:00
										 |  |  |       <AccountPostsFollowers :account="account" /> | 
					
						
							| 
									
										
										
										
											2022-11-15 03:26:52 +00:00
										 |  |  |     </div> | 
					
						
							|  |  |  |   </div> | 
					
						
							|  |  |  | </template> |