chore: new

This commit is contained in:
胡鑫 2023-04-23 23:14:52 +08:00
parent 6839fe8a29
commit 1d9adc16f1
28 changed files with 8306 additions and 4025 deletions

View File

@ -6,5 +6,6 @@
"files.associations": {
"*.css": "postcss"
},
"editor.formatOnSave": false
"editor.formatOnSave": false,
"typescript.tsdk": "node_modules/typescript/lib"
}

15
app.vue
View File

@ -1,5 +1,5 @@
<script setup lang="ts">
import { appName } from '~/constants'
import { appName } from './constants'
useHead({
title: appName,
@ -12,16 +12,3 @@ useHead({
<NuxtPage />
</NuxtLayout>
</template>
<style>
html, body , #__nuxt{
height: 100vh;
margin: 0;
padding: 0;
}
html.dark {
background: #222;
color: white;
}
</style>

82
components/Carousel.vue Normal file
View File

@ -0,0 +1,82 @@
<script setup>
// Import Swiper Vue.js components
import { Swiper, SwiperSlide } from 'swiper/vue'
// Import Swiper styles
import 'swiper/css'
import 'swiper/css/effect-fade'
import 'swiper/css/navigation'
import 'swiper/css/pagination'
// import required modules
import { Autoplay, EffectFade, Navigation, Pagination } from 'swiper'
const modules = [Autoplay, EffectFade, Navigation, Pagination]
</script>
<template>
<Swiper
:space-between="30"
effect="fade"
:navigation="true"
:pagination="{
clickable: true,
}"
:autoplay="{
delay: 2500,
disableOnInteraction: false,
}"
:modules="modules"
loop
>
<SwiperSlide>
<img src="https://swiperjs.com/demos/images/nature-1.jpg">
</SwiperSlide>
<SwiperSlide>
<img
src="https://swiperjs.com/demos/images/nature-2.jpg"
>
</SwiperSlide>
<SwiperSlide>
<img
src="https://swiperjs.com/demos/images/nature-3.jpg"
>
</SwiperSlide>
<SwiperSlide>
<img src="https://swiperjs.com/demos/images/nature-4.jpg">
</SwiperSlide>
<div className="absolute z-1 h-1/3 w-full top-0 from-[hsl(var(--a-body-bg-c))] bg-gradient-to-b w-full bg-opacity-30 " />
<div className="absolute z-1 h-1/2 w-full bottom-0 from-[hsl(var(--a-body-bg-c))] bg-gradient-to-t w-full bg-opacity-30 " />
</Swiper>
</template>
<style scoped>
.swiper {
--uno:'w-full h-500px lg:h-600px 2xl:h-700px relative';
}
.swiper-slide {
text-align: center;
font-size: 18px;
background: #fff;
/* Center slide text vertically */
display: flex;
justify-content: center;
align-items: center;
}
.swiper-slide img {
display: block;
width: 100%;
height: 100%;
object-fit: cover;
}
.swiper {
margin-left: auto;
margin-right: auto;
}
</style>

16
components/Divider.vue Normal file
View File

@ -0,0 +1,16 @@
<script setup lang="ts">
$defineProps<{
asChild?: boolean
title?: string
}>()
</script>
<template>
<div className="relative col-span-full lg:col-span-10 lg:col-start-2 px-50">
<hr className="border-0 h-px opacity-20 from-white/0 to-white/0 via-[#fff_21.5%,#fff_80%] bg-gradient-to-r">
<div v-if="title" className="font-medium absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 bg-[hsl(var(--a-body-bg-c))] leading-none text-center whitespace-nowrap p-2 z-10 ">
{{ title }}
</div>
<slot v-if="asChild" />
</div>
</template>

View File

@ -1,7 +1,7 @@
<template>
<div inline-flex cursor-default text-2xl font-300>
<div flex flex-col children:mx-auto>
<img inline-block h-18 w-18 src="/nuxt.svg">
<img inline-block h-18 w-18 src="/topverse.icon.svg">
<span mt--2 text-green5>Nuxt 3</span>
</div>
<div

View File

@ -0,0 +1,5 @@
<template>
<div inline-flex>
<img inline-block h-38 w-38 src="/topverse.svg">
</div>
</template>

View File

@ -0,0 +1,47 @@
<script setup lang="ts">
const nav = [
{
name: 'nav.dashboard',
to: '/dashboard',
},
{
name: 'nav.datacenter',
to: '/data-center',
},
{
name: 'nav.server',
to: '/server',
},
{
name: 'nav.filer',
to: '/filer',
},
{
name: 'nav.cdn',
to: '/cdn',
},
{
name: 'nav.management',
to: '/management',
},
]
</script>
<template>
<header class="bg-header/10 h-[100px]" absolute z-100 w-full flex items-center justify-between px-15>
<NuxtLink to="/" class="w-35 flex items-center gap-5">
<BrandLogo />
</NuxtLink>
<nav h-full flex items-center>
<HeaderNav />
</nav>
<div w-20 flex justify-center>
<ABtn variant="text">
login
</ABtn>
<ABtn shadow-lg>
login
</ABtn>
</div>
</header>
</template>

60
components/header/nav.vue Normal file
View File

@ -0,0 +1,60 @@
<script setup>
const navs = [
{
title: 'home',
href: '/',
},
{
title: 'solutions.t',
child: [
{
title: 'solutions.child.land.t',
subtitle: 'solutions.child.land.description',
href: '/land',
icon: 'i-solar-accumulator-bold-duotone',
iconColor: 'red',
},
{
title: 'solutions.child.land.t',
subtitle: 'solutions.child.land.description sdfdsfasdf ',
href: '/landa',
icon: 'i-solar-airbuds-case-open-line-duotone text-amber',
iconColor: 'amber',
// avatarProps: { icon: 'i-solar-airbuds-case-open-line-duotone' },
},
],
},
]
</script>
<template>
<nav>
<NuxtLink v-for="(nav, i) in navs" :key="i" class="mx-2 border-primary p-1 pb-5 transition-all" :to="nav.href" active-class="border-b-3px">
<ABtn variant="text" color="white">
<AMenu v-if="nav.child" color="white" trigger="hover" z-1000 mt-5 placement="bottom">
<AList
:items="nav.child"
avatar-append
class="[--a-list-item-gap:1rem]"
>
<NuxtLink v-for="(item, index) in nav.child" :key="index" :href="item.href" class="mx-2 my-1 max-w-250px overflow-hidden rounded py-2 hover:bg-light-50/5" active-class="bg-light-50/5">
<AListItem
:title="item.title"
:subtitle="item.subtitle"
:icon="item.icon"
:disabled="item.disabled"
/>
</NuxtLink>
</AList>
</AMenu>
<span>{{ nav.title }}</span>
</ABtn>
</NuxtLink>
</nav>
</template>
<style scoped>
.a-btn-content{
--uno:text-white;
}
</style>

View File

@ -1,2 +1,2 @@
export const appName = 'Vitesse for Nuxt 3'
export const appDescription = 'Vitesse for Nuxt 3'
export const appName = 'Topverse'
export const appDescription = 'Topverse website'

View File

@ -1,6 +1,11 @@
<template>
<main class="px-10 py-20 text-center">
<main class="scrollbar scrollbar-rounded scrollbar-w-4px scrollbar-radius-2 scrollbar-track-color-transparent scrollbar-thumb-color-dark-50 scrollbar-thumb-radius-4 h-screen w-screen overflow-auto">
<Header />
<slot />
<ABtn shadow-lg>
test
</ABtn>
<AInput />
<Footer />
<div class="mx-auto mt-5 text-center text-sm opacity-25">
[Default Layout]

593
locales/en-US.json Normal file
View File

@ -0,0 +1,593 @@
{
"a11y": {
"loading_page": "Orrialdea kargatzen, itxaron",
"loading_titled_page": "{0} orria kargatzen, itxaron",
"locale_changed": "Hizkuntza {0}ra aldatu da",
"locale_changing": "Hizkuntza aldatzen, itxaron",
"route_loaded": "{0} orrialdea kargatu da"
},
"account": {
"avatar_description": "{0}(r)en abatarra",
"blocked_by": "Erabiltzaile honek blokeatu zaitu.",
"blocked_domains": "Blokeatutako domeinuak",
"blocked_users": "Blokeatutako erabiltzaileak",
"blocking": "Blokeatuta",
"bot": "BOTa",
"favourites": "Gogokoak",
"follow": "Jarraitu",
"follow_back": "Jarraitu bera ere",
"follow_requested": "Eskaera bidalita",
"followers": "Jarraitzaileak",
"followers_count": "{0} jarraitzaile|Jarraitzaile {0}|{0} jarraitzaile",
"following": "Jarraitzen",
"following_count": "{0} jarraitzen",
"follows_you": "Jarraitzen dizu",
"go_to_profile": "Joan profilera",
"joined": "Batze-data:",
"moved_title": "adierazi du bere kontua aurrerantzean honakoa izango dela:",
"muted_users": "Mutututako erabiltzaileak",
"muting": "Mutututa",
"mutuals": "Komunean",
"notifications_on_post_disable": "Utzi jakinarazpenak bidaltzeari {username}(r)ek argitaratzen duenean",
"notifications_on_post_enable": "Jakinarazi {username}(r)ek argitaratzen duenean",
"pinned": "Finkatuta",
"posts": "Bidalketak",
"posts_count": "{0} bidalketa|Bidalketa {0}|{0} bidalketa",
"profile_description": "{0}(r)en profilaren goiburua",
"profile_unavailable": "Profila ez dago eskuragai",
"request_follow": "Bidali jarraipen-eskaera",
"unblock": "Utzi blokeatzeari",
"unfollow": "Utzi jarraitzeari",
"unmute": "Utzi mututzeari",
"view_other_followers": "Litekeena da beste instantziatako jarraitzaileak erakusgai ez egotea.",
"view_other_following": "Litekeena da beste instantziatan jarraitzen direnak erakusgai ez egotea."
},
"action": {
"apply": "Ezarri",
"bookmark": "Jarri laster-marka",
"bookmarked": "Laster-marka jarrita",
"boost": "Bultzatu",
"boost_count": "{0}",
"boosted": "Bultzatuta",
"clear_publish_failed": "Garbitu argitalpen erroreak",
"clear_upload_failed": "Garbitu fitxategi-igoeren erroreak",
"close": "Itxi",
"compose": "Idatzi",
"confirm": "Baieztatu",
"edit": "Editatu",
"enter_app": "Sartu aplikaziora",
"favourite": "Egin gogoko",
"favourite_count": "{0}",
"favourited": "Gogoko eginda",
"more": "Gehiago",
"next": "Hurrengoa",
"prev": "Aurrekoa",
"publish": "Argitaratu",
"reply": "Erantzun",
"reply_count": "{0}",
"reset": "Berrezarri",
"save": "Gorde",
"save_changes": "Gorde aldaketak",
"sign_in": "Hasi saioa",
"sign_in_to": "Hasi saioa {0}(e)n",
"switch_account": "Aldatu kontua",
"vote": "Eman botoa"
},
"app_desc_short": "Mastodon web-bezero arin bat",
"app_logo": "Elk Logo",
"app_name": "Elk",
"attachment": {
"edit_title": "Deskribapena",
"remove_label": "Kendu erantsitakoak"
},
"command": {
"activate": "Aktibatu",
"complete": "Osatu",
"compose_desc": "Idatzi bidalketa berria",
"n-people-in-the-past-n-days": "{0} pertsona azken {1} egunetan",
"select_lang": "Hautatu hizkuntza",
"sign_in_desc": "Gehitu dagoeneko existitzen den kontu bat",
"switch_account": "Aldatu {0}(e)ra",
"switch_account_desc": "Aldatu beste kontu batera",
"toggle_dark_mode": "Modu iluna",
"toggle_zen_mode": "ZEN modua"
},
"common": {
"end_of_list": "Zerrendaren amaiera",
"error": "ERROREA",
"fetching": "Eskuratzen…",
"in": "·",
"not_found": "404 Ez da aurkitu",
"offline_desc": "Lineaz kanpo zaudela dirudi. Egiaztatu konexioa."
},
"compose": {
"draft_title": "Zirriborroa {0}",
"drafts": "Zirriborroak ({v})"
},
"confirm": {
"block_account": {
"cancel": "Utzi",
"confirm": "Blokeatu",
"title": "Ziur {0} blokeatu nahi duzula?"
},
"block_domain": {
"cancel": "Utzi",
"confirm": "Blokeatu",
"title": "Ziur {0} domeinua blokeatu nahi duzula?"
},
"common": {
"cancel": "Ez",
"confirm": "Bai"
},
"delete_list": {
"cancel": "Utzi",
"confirm": "Ezabatu",
"title": "Ziur \"{0}\" zerrenda ezabatu nahi duzula?"
},
"delete_posts": {
"cancel": "Utzi",
"confirm": "Ezabatu",
"title": "Ziur bidalketa hau ezabatu nahi duzula?"
},
"mute_account": {
"cancel": "Utzi",
"confirm": "Mututu",
"title": "Ziur {0} mututu nahi duzula?"
},
"show_reblogs": {
"cancel": "Utzi",
"confirm": "Erakutsi",
"title": "Ziur {0}(r)en bultzadak ikusi nahi dituzula?"
},
"unfollow": {
"cancel": "Utzi",
"confirm": "Utzi jarraitzeari",
"title": "Ziur jarraitzeari utzi nahi diozula?"
}
},
"conversation": {
"with": "parte-hartzailea:"
},
"custom_cards": {
"stackblitz": {
"lines": "{0} lerro",
"open": "Ireki",
"snippet_from": "{0}(e)ko lagina"
}
},
"error": {
"account_not_found": "{0} kontua ez da aurkitu",
"explore-list-empty": "Ez dago joerarik une honetan. Zatoz geroago!",
"file_size_cannot_exceed_n_mb": "Fitxategien tamaina ezin da {0}MB baino handiagoa izan",
"sign_in_error": "Ezin izan da zerbitzarira konektatu.",
"status_not_found": "Ez da bidalketa aurkitu",
"unsupported_file_format": "Fitxategia ez da bateragarria"
},
"help": {
"build_preview": {
"desc1": "Komunitateak sortutako Elk-en aurreikuspen bat duzu aurrean - {0}.",
"desc2": "Litekeena da berrikusi ez diren aldaketak izatea, baita maltzurrak izan litezkeenak ere.",
"desc3": "Ez hasi saioa zure benetako kontuarekin.",
"title": "Preview deploy"
},
"desc_highlight": "Oso litekeena da erroreak eta ezaugarriak faltan egotea aplikazioan zehar.",
"desc_para1": "Eskerrik asko interesagatik eta Elk probatzeagatik, amaitu gabe dagoen Mastodonerako web-bezero arin bat!",
"desc_para2": "Gogor ari gara garapen- eta hobetze-lanetan.",
"desc_para3": "Garapenari bultzada emateko, GitHub Sponsors aukerari esker eman diezaiokezu babesa taldeari. Espero dugu Elk gogoko izatea!",
"desc_para4": "Elk kode irekikoa da. Laguntza eman nahi badiguzu probatzen, iritzia ematen edo kodea idazten,",
"desc_para5": "jarri harremanetan GitHub bidez",
"desc_para6": "eta hartu parte.",
"footer_team": "Elk taldea",
"title": "Elk-en aurreikuspena da hau!"
},
"language": {
"search": "Bilatu"
},
"list": {
"add_account": "Gehitu kontua zerrendara",
"cancel_edit": "Utzi editatzeari",
"clear_error": "Garbitu errorea",
"create": "Sortu",
"delete": "Ezabatu zerrenda",
"delete_error": "Errorea gertatu da zerrenda ezabatzerakoan",
"edit": "Editatu zerrenda",
"edit_error": "Errorea gertatu da zerrenda eguneratzerakoan",
"error": "Errorea gertatu da zerrenda sortzerakoan",
"error_prefix": "Errorea: ",
"list_title_placeholder": "Zerrendaren izena",
"modify_account": "Aldatu honako kontua duten zerrendak:",
"remove_account": "Kendu kontua zerrendatik",
"save": "Gorde aldaketak"
},
"menu": {
"block_account": "Blokeatu {0}",
"block_domain": "Blokeatu {0} domeinua",
"copy_link_to_post": "Kopiatu bidalketa honen esteka",
"copy_original_link_to_post": "Kopiatu bidalketa honen jatorrizko esteka",
"delete": "Ezabatu",
"delete_and_redraft": "Ezabatu eta berridatzi",
"direct_message_account": "Mezu zuzena {0}",
"edit": "Editatu",
"hide_reblogs": "Ezkutatu {0}(r)en bultzadak",
"mention_account": "Aipatu {0}",
"mute_account": "Mututu {0}",
"mute_conversation": "Mututu bidalketa",
"open_in_original_site": "Ireki jatorrizko orrian",
"pin_on_profile": "Finkatu profilean",
"share_post": "Partekatu bidalketa",
"show_favourited_and_boosted_by": "Erakutsi nork egin duen gogoko eta nork bultzatu duen",
"show_reblogs": "Erakutsi {0}(r)en bultzadak",
"show_untranslated": "Erakutsi jatorrizko hizkuntzan",
"toggle_theme": {
"dark": "Modu iluna",
"light": "Modu argia"
},
"translate_post": "Egin itzulpena",
"unblock_account": "Utzi {0} blokeatzeari",
"unblock_domain": "Utzi {0} domeinua blokeatzeari",
"unmute_account": "Utzi {0} mututzeari",
"unmute_conversation": "Utzi bidalketa mututzeari",
"unpin_on_profile": "Utzi finkatzeari"
},
"nav": {
"back": "Joan atzera",
"blocked_domains": "Blokeatutako domeinuak",
"blocked_users": "Blokeatutako erabiltzaileak",
"bookmarks": "Laster-markak",
"built_at": "Biltze-data: {0}",
"compose": "Idatzi",
"conversations": "Elkarrizketak",
"explore": "Esploratu",
"favourites": "Gogokoak",
"federated": "Federatua",
"home": "Hasiera",
"list": "Zerrenda",
"lists": "Zerrendak",
"local": "Lokala",
"muted_users": "Mutututako erabiltzaileak",
"notifications": "Jakinarazpenak",
"privacy": "Pribatutasuna",
"profile": "Profila",
"search": "Bilaketa",
"select_feature_flags": "Toggle Feature Flags",
"select_font_size": "Letra-tipoaren tamaina",
"select_language": "Hizkuntza",
"settings": "Ezarpenak",
"show_intro": "Erakutsi aurkezpena",
"toggle_theme": "Gai argia/iluna",
"zen_mode": "ZEN modua"
},
"notification": {
"favourited_post": "zure bidalketa gogoko egin du",
"followed_you": "jarraitu dizu",
"followed_you_count": "{0} pertsonak jarraitu dizute|pertsona {0}ek jarraitu dizu|{0} pertsonak jarraitu dizute",
"missing_type": "MISSING notification.type:",
"reblogged_post": "zure bidalketari bultzada eman dio",
"request_to_follow": "jarraipen-eskaera bidali dizu",
"signed_up": "izena eman du",
"update_status": "bidalketa eguneratu du"
},
"placeholder": {
"content_warning": "Idatzi oharra hemen",
"default_1": "Zer duzu buruan?",
"reply_to_account": "Erantzun {0}(r)i",
"replying": "Erantzuten",
"the_thread": "haria"
},
"pwa": {
"dismiss": "Baztertu",
"install": "Instalatu",
"install_title": "Instalatu Elk",
"title": "Eguneraketa berria eskuragai!",
"update": "Eguneratu",
"update_available_short": "Eguneratu Elk",
"webmanifest": {
"canary": {
"description": "Mastodon web-bezero arin bat (canary)",
"name": "Elk (canary)",
"short_name": "Elk (canary)"
},
"dev": {
"description": "Mastodon web-bezero arin bat (dev)",
"name": "Elk (dev)",
"short_name": "Elk (dev)"
},
"preview": {
"description": "Mastodon web-bezero arin bat (preview)",
"name": "Elk (preview)",
"short_name": "Elk (preview)"
},
"release": {
"description": "Mastodon web-bezero arin bat",
"name": "Elk",
"short_name": "Elk"
}
}
},
"search": {
"search_desc": "Bilatu pertsonak eta traolak",
"search_empty": "Ezin izan da ezer aurkitu"
},
"settings": {
"about": {
"built_at": "Biltze-data",
"label": "Honi buruz",
"meet_the_team": "Ezagutu taldea",
"sponsor_action": "Eman babesa",
"sponsor_action_desc": "Elk garatzen duen taldeari babesa emateko",
"sponsors": "Babesleak",
"sponsors_body_1": "Elk ondorengoen babes eskuzabalari eta laguntzari esker izan da posible egitea:",
"sponsors_body_2": "Baita Elk taldea eta bere kideak babesten dituzten enpresa eta norbanakoei esker.",
"sponsors_body_3": "Aplikazioa gogoko baduzu, agian babesa eman diezagukezu:",
"version": "Bertsioa"
},
"account_settings": {
"description": "Editatu zure kontuaren ezarpenak Mastodonen interfazean",
"label": "Kontuaren ezarpenak"
},
"interface": {
"color_mode": "Kolorea",
"dark_mode": "Iluna",
"default": " (defektuzkoa)",
"font_size": "Letra-tipoaren tamaina",
"label": "Interfazea",
"light_mode": "Argia",
"system_mode": "Sistemak darabilena",
"theme_color": "Gaiaren kolorea"
},
"language": {
"display_language": "Hizkuntza",
"label": "Hizkuntza",
"status": "Itzulpenaren egoera: {0}/{1} ({2}%)",
"translations": {
"add": "Gehitu",
"choose_language": "Hautatu hizkuntza",
"heading": "Itzulpenak",
"hide_specific": "Ezkutatu itzulpena ondorengo hizkuntzetarako:",
"remove": "Kendu"
}
},
"notifications": {
"label": "Jakinarazpenak",
"notifications": {
"label": "Jakinarazpenen ezarpenak"
},
"push_notifications": {
"alerts": {
"favourite": "Gogokoak",
"follow": "Jarraitzaile berriak",
"mention": "Aipamenak",
"poll": "Bozketak",
"reblog": "Zure bidalketen bultzadak",
"title": "Zer jakinarazpen jaso nahi duzu?"
},
"description": "Jaso jakinarazpenak Elk erabiltzen ari ez bazara ere.",
"instructions": "Ez ahaztu aldaketak gordetzeaz @:settings.notifications.push_notifications.save_settings botoia erabiliz!",
"label": "Push jakinarazpenen ezarpenak",
"policy": {
"all": "Edonorenak",
"followed": "Jarraitzen ditudan pertsonenak",
"follower": "Jarraitzen didaten pertsonenak",
"none": "Inorenak",
"title": "Noren jakinarazpenak jaso ditzazket?"
},
"save_settings": "Gorde ezarpenak",
"subscription_error": {
"clear_error": "Garbitu errorea",
"invalid_vapid_key": "Ez dirudi VAPID gako publikoa baliozkoa denik.",
"permission_denied": "Baimena ukatu da: gaitu jakinarazpenak zure nabigatzailean.",
"repo_link": "Elk-en biltegia GitHub-en",
"request_error": "Errorea gertatu da harpidetza eskatzerakoan, saiatu berriro eta errorea gertatuko balitz, jakinarazi Elk-en biltegian.",
"title": "Ezin izan da push jakinarazpenei harpidetu",
"too_many_registrations": "Nabigatzailearen mugak direla-eta, Elk-ek ezin ditu push jakinarazpenak zerbitzari desberdinetan dauden kontuetarako erabili. Beste kontu bateko push harpidetza utzi eta saiatu berriro.",
"vapid_not_supported": "Zure nabigatzailea webeko push jakinarazpenekin bateragarria da, baina ez dirudi VAPID protokoloa gauzatu duenik."
},
"title": "Push jakinarazpenen ezarpenak",
"undo_settings": "Desegin aldaketak",
"unsubscribe": "Ezgaitu push jakinarazpenak",
"unsupported": "Zure nabigatzailea ez da push jakinarazpenekin bateragarria.",
"warning": {
"enable_close": "Itxi",
"enable_description": "Elk irekita ez dagoenean jakinarazpenak jasotzeko, gaitu push jakinarazpenak. Zehatz mehatz kontrola dezakezu zer jakinarazpen mota jaso nahi duzun \"@:settings.notifications.show_btn{'\"'} botoiari esker aukera gaitu eta gero.",
"enable_description_desktop": "Elk irekita ez dagoenean jakinarazpenak jasotzeko, gaitu push jakinarazpenak. Zehatz mehatz kontrola dezakezu zer jakinarazpen mota jaso nahi duzun \"Settings > Notifications > Push notifications settings\" eremuan aukera gaitu eta gero.",
"enable_description_mobile": "Menuko nabigazioa ere erabil dezakezu ezarpenetara jotzeko: \"Settings > Notifications > Push notification settings\".",
"enable_description_settings": "Elk irekita ez dagoenean jakinarazpenak jasotzeko, gaitu push jakinarazpenak. Zehatz mehatz kontrola dezakezu zer jakinarazpen mota jaso nahi duzun pantaila honetan bertan aukera gaitu eta gero.",
"enable_desktop": "Gaitu push jakinarazpenak",
"enable_title": "Ez galdu ezer inoiz",
"re_auth": "Ez dirudi zure zerbitzaria push jakinarazpenekin bateragarria denik. Saiatu saioa amaitzen eta berriro hasten; mezu honek badirau, jarri harremanetan zure zerbitzariko administratzailearekin."
}
},
"show_btn": "Joan jakinarazpenen ezarpenetara",
"under_construction": "Amaitzeke"
},
"notifications_settings": "Jakinarazpenak",
"preferences": {
"enable_autoplay": "Gaitu erreproduzitze automatikoa",
"enable_data_saving": "Gaitu datu aurrezlea",
"enable_data_saving_description": "Aurreztu datuak eranskinen kargatze-automatikoa galarazten.",
"enable_pinch_to_zoom": "Gaitu atximur keinua zoom egiteko",
"github_cards": "GitHub Cards",
"grayscale_mode": "Gris modua",
"hide_account_hover_card": "Ezkutatu kontuaren geruza (Hide account hover card)",
"hide_alt_indi_on_posts": "Ezkutatu ALT adierazlea bidalketetan",
"hide_boost_count": "Ezkutatu bultzaden kopurua",
"hide_favorite_count": "Ezkutatu gogokoen kopurua",
"hide_follower_count": "Ezkutatu jarraitzaileen kopurua",
"hide_reply_count": "Ezkutatu erantzunen kopurua",
"hide_translation": "Ezkutatu itzulpenak",
"hide_username_emojis": "Ezkutatu emojiak erabiltzaile izenetan",
"hide_username_emojis_description": "Denbora-lerroetan erabiltzaile izenetako emojiak ezkutatzen ditu. Emojiak ikusgai egoten jarraituko dute euren profiletan.",
"label": "Hobespenak",
"title": "Ezaugarri esperimentalak",
"user_picker": "Erabiltzaile hautatzailea",
"virtual_scroll": "Korritze birtuala",
"wellbeing": "Ongizatea"
},
"profile": {
"appearance": {
"bio": "Bio",
"description": "Editatu abatarra, erabiltzaile izena, profila, etab.",
"display_name": "Pantaila izena",
"label": "Itxura",
"profile_metadata": "Profileko metadatuak",
"profile_metadata_desc": "Gehienez {0} item erakuts ditzakezu taula moduan profilean",
"profile_metadata_label": "Etiketa",
"profile_metadata_value": "Edukia",
"title": "Editatu profila"
},
"featured_tags": {
"description": "Jendeak traola hauek dituzten zure bidalketa publikoak ikus ditzazke.",
"label": "Nabarmendutako traolak"
},
"label": "Profila"
},
"select_a_settings": "Hautatu ezarpena",
"users": {
"export": "Esportatu erabiltzaile-tokenak",
"import": "Inportatu erabiltzaile-tokenak",
"label": "Saioa hasitako erabiltzaileak"
}
},
"share-target": {
"description": "Elk beste aplikazioetako edukia partekatu ahal izateko konfiguratu daiteke; Elk zure gailuan instalatu eta saioa hasi behar duzu, besterik ez.",
"hint": "Elk-ekin edukia partekatu nahi izatekotan, Elk instalatuta egon behar da eta saioa hasita.",
"title": "Partekatu Elk-ekin"
},
"state": {
"attachments_exceed_server_limit": "Erantsitakoen kopuruak bidalketaren muga gainditu du.",
"attachments_limit_error": "Bidalketaren muga gainditu da",
"edited": "(Editatua)",
"editing": "Editatzen",
"loading": "Kargatzen…",
"publish_failed": "Argitaratzeak huts egin du",
"publishing": "Argitaratzen",
"upload_failed": "Igotzeak huts egin du",
"uploading": "Igotzen…"
},
"status": {
"boosted_by": "Bultzatu dute:",
"edited": "Azken edizioa: {0}",
"favourited_by": "Gogoko egin dute:",
"filter_hidden_phrase": "Iragazia:",
"filter_removed_phrase": "Iragazki honek kendu du:",
"filter_show_anyway": "Erakutsi edonola ere",
"img_alt": {
"ALT": "ALT",
"desc": "Deskribapena",
"dismiss": "Baztertu",
"read": "Irakurri {0} deskribapena"
},
"poll": {
"count": "{0} boto|boto {0}|{0} boto",
"ends": "epemuga: {0}",
"finished": "amaiera: {0}"
},
"reblogged": "{0}(e)k bultzatua",
"replying_to": "{0}(r)i erantzunez",
"show_full_thread": "Erakutsi hari osoa",
"someone": "norbait",
"spoiler_show_less": "Erakutsi gutxiago",
"spoiler_show_more": "Erakutsi gehiago",
"thread": "Haria",
"try_original_site": "Probatu jatorrizko orrialdea"
},
"status_history": {
"created": "{0} sortua",
"edited": "{0} editatua"
},
"tab": {
"accounts": "Kontuak",
"for_you": "Zuretzat",
"hashtags": "Traolak",
"list": "Zerrendak",
"media": "Multimedia",
"news": "Albisteak",
"notifications_all": "Guztiak",
"notifications_mention": "Aipamenak",
"posts": "Bidalketak",
"posts_with_replies": "Bidalketak eta erantzunak"
},
"tag": {
"follow": "Jarraitu",
"follow_label": "Jarraitu {0} traola",
"unfollow": "Utzi jarraitzeari",
"unfollow_label": "Utzi {0} traola jarraitzeari"
},
"time_ago_options": {
"day_future": "0 egunetan|bihar|{n} egunetan",
"day_past": "duela 0 egun|atzo|duela {n} egun",
"hour_future": "0 ordutan|ordu batean|{n} ordutan",
"hour_past": "duela 0 ordu|duela ordubete|duela {n} ordu",
"just_now": "oraintxe bertan",
"minute_future": "0 minututan|minutu batean|{n} minututan",
"minute_past": "duela 0 minutu|duela minutu bat|duela {n} minutu",
"month_future": "0 hilabetetan|datorren hilabetean|{n} hilabetetan",
"month_past": "duela 0 hilabete|aurreko hilabetean|duela {n} hilabete",
"second_future": "oraintxe bertan|datorren segunduan|datozen {n} segundutan",
"second_past": "oraintxe bertan| duela segundu {n}|duela {n} segundu",
"short_day_future": "{n}e barru",
"short_day_past": "{n}e",
"short_hour_future": "{n}o barru",
"short_hour_past": "{n}o",
"short_minute_future": "{n}min barru",
"short_minute_past": "{n}min",
"short_month_future": "{n}h barru",
"short_month_past": "{n}h",
"short_second_future": "{n}s barru",
"short_second_past": "{n}s",
"short_week_future": "{n}a barru",
"short_week_past": "{n}a",
"short_year_future": "{n}u barru",
"short_year_past": "{n}u",
"week_future": "0 astetan|datorren astean|datozen {n} asteetan",
"week_past": "duela 0 aste|aurreko astean|duela {n} aste",
"year_future": "0 urtetan|datorren urtean|datozen {n} urteetan",
"year_past": "duela 0 urte|aurreko urtean|duela {n} urte"
},
"timeline": {
"show_new_items": "Erakutsi {v} elementu berri|Erakutsi elementu berri {v}|Erakutsi {v} elementu berri",
"view_older_posts": "Oso litekeena da beste instantziatako bidalketa zaharragoak ikusgai ez egotea."
},
"title": {
"federated_timeline": "Denbora-lerro federatua",
"local_timeline": "Denbora-lerro lokala"
},
"tooltip": {
"add_content_warning": "Gehitu edukiari buruzko oharra",
"add_emojis": "Gehitu emojiak",
"add_media": "Gehitu irudiak, bideoak edo audio fitxategi bat",
"add_publishable_content": "Gehitu argitaratzeko edukia",
"change_content_visibility": "Aldatu edukiaren ikusgaitasuna",
"change_language": "Aldatu hizkuntza",
"emoji": "Emojia",
"explore_links_intro": "Albiste hauei buruz ari dira hitz egiten sare deszentralizatutako zerbitzari honetan eta beste batzuetan.",
"explore_posts_intro": "Bidalketa hauek bogan daude deszentralizatutako zerbitzari honetan eta beste batzuetan.",
"explore_tags_intro": "Traola hauek joera dira deszentralizatutako zerbitzari honetan eta beste batzuetan.",
"open_editor_tools": "Editatzeko tresnak",
"pick_an_icon": "Hautatu ikonoa",
"publish_failed": "Itxi editorearen goikaldeko huts-egiteen mezuak bidalketa berrargitaratzeko",
"toggle_bold": "Lodia",
"toggle_code_block": "Kodea",
"toggle_italic": "Etzana"
},
"user": {
"add_existing": "Gehitu dagoeneko existitzen den kontu bat",
"server_address_label": "Mastodon zerbitzariaren helbidea",
"sign_in_desc": "Hasi saioa profil edo traolak jarraitzeko, eta bidalketak gogoko egiteko, partekatzeko, eta erantzuteko edo beste zerbitzari bateko kontuarekin elkarreragiteko.",
"sign_in_notice_title": "{0}(e)ko datu publikoak ikusten",
"sign_out_account": "Amaitu {0}(r)en saioa",
"single_instance_sign_in_desc": "Hasi saioa profil edo traolak jarraitzeko, eta bidalketak gogoko egiteko, partekatzeko, eta erantzuteko.",
"tip_no_account": "Oraindik Mastodon kontua ez badaukazu, {0}.",
"tip_register_account": "hautatu zerbitzaria eta eman izena"
},
"visibility": {
"direct": "Zuzena",
"direct_desc": "Aipatutako erabiltzaileek bakarrik ikusiko dute",
"private": "Jarraitzaileak bakarrik",
"private_desc": "Jarraitzen dizutenek bakarrik ikusiko dute",
"public": "Publikoa",
"public_desc": "Edonork ikusiko du",
"unlisted": "Zerrendatu gabea",
"unlisted_desc": "Edonork ikusiko du, baina ez da bilaketetan agertuko"
}
}

24
locales/zh-CN.json Normal file
View File

@ -0,0 +1,24 @@
{
"hint": {
"input": "请输入",
"refresh": "刷新",
"add": "添加"
},
"login": {
"text": "登录",
"user": "用户名",
"pwd": "密码",
"code": "验证码"
},
"register": {
"text": "注册"
},
"nav": {
"dashboard": "概览",
"server": "服务器",
"datacenter": "数据中心",
"filer": "文件网关",
"cdn": "CDN",
"management": "管理"
}
}

View File

@ -1,15 +1,21 @@
import { colors } from 'unocss/preset-mini'
import { pwa } from './config/pwa'
import { appDescription } from './constants/index'
import { hex2hsl } from './utils/colors'
export default defineNuxtConfig({
modules: [
'@vueuse/nuxt',
'@anu-vue/nuxt',
'@unocss/nuxt',
'@pinia/nuxt',
'@nuxtjs/i18n',
// '@nuxtjs/strapi',
'@vue-macros/nuxt',
'@nuxtjs/color-mode',
'@vite-pwa/nuxt',
'@nuxt/devtools',
],
experimental: {
// when using generate, payload js assets included in sw precache manifest
// but missing on offline, disabling extraction it until fixed
@ -17,15 +23,62 @@ export default defineNuxtConfig({
inlineSSRStyles: false,
renderJsonPayloads: true,
},
anu: {
// initialTheme: 'dark',
themes: {
// @ts-expect-error
light: {
colors: {
primary: hex2hsl(colors.indigo[500]).toString(),
success: hex2hsl(colors.green[500]).toString(),
warning: hex2hsl(colors.amber[500]).toString(),
danger: hex2hsl(colors.rose[500]).toString(),
info: hex2hsl(colors.blue[500]).toString(),
},
},
// @ts-expect-error
dark: {
colors: {
primary: hex2hsl(colors.indigo[500]).toString(),
success: hex2hsl(colors.green[500]).toString(),
warning: hex2hsl(colors.amber[500]).toString(),
danger: hex2hsl(colors.rose[500]).toString(),
info: hex2hsl(colors.blue[500]).toString(),
},
},
},
},
css: [
'@unocss/reset/tailwind.css',
// '@unocss/reset/tailwind.css',
'anu-vue/dist/style.css',
'@anu-vue/preset-theme-default/dist/style.css',
'~/styles/ui.css',
],
i18n: {
locales: [
{
code: 'en',
file: 'en-US.json',
},
{
code: 'zh',
file: 'zh-CN.json',
},
],
detectBrowserLanguage: {
useCookie: true,
cookieCrossOrigin: true,
},
lazy: true,
langDir: 'locales',
defaultLocale: 'zh',
},
colorMode: {
classSuffix: '',
},
// strapi: {
// devtools: true,
// },
nitro: {
esbuild: {
options: {
@ -44,7 +97,7 @@ export default defineNuxtConfig({
viewport: 'width=device-width,initial-scale=1',
link: [
{ rel: 'icon', href: '/favicon.ico', sizes: 'any' },
{ rel: 'icon', type: 'image/svg+xml', href: '/nuxt.svg' },
{ rel: 'icon', type: 'image/svg+xml', href: '/topverse.icon.svg' },
{ rel: 'apple-touch-icon', href: '/apple-touch-icon.png' },
],
meta: [

View File

@ -13,6 +13,9 @@
"start:generate": "npx serve .output/public"
},
"dependencies": {
"@anu-vue/nuxt": "^0.13.1",
"@jiaminghi/color": "^1.1.3",
"swiper": "^9.2.4",
"vue-tsc": "^1.2.0"
},
"devDependencies": {
@ -21,15 +24,21 @@
"@iconify-json/twemoji": "^1.1.11",
"@nuxt/devtools": "^0.4.0",
"@nuxtjs/color-mode": "^3.2.0",
"@nuxtjs/i18n": "8.0.0-beta.11",
"@nuxtjs/strapi": "^1.9.1",
"@pinia/nuxt": "^0.4.8",
"@unocss/eslint-config": "^0.51.4",
"@unocss/nuxt": "^0.51.4",
"@vite-pwa/nuxt": "^0.0.7",
"@vue-macros/nuxt": "^1.2.8",
"@vueuse/nuxt": "^9.13.0",
"consola": "^3.0.1",
"eslint": "^8.38.0",
"nuxt": "^3.4.0",
"pinia": "^2.0.34",
"typescript": "^4.9.5"
"typescript": "^4.9.5",
"unocss-preset-extra": "^0.5.2",
"unocss-preset-scrollbar": "^0.2.1",
"unocss-preset-scrollbar-hide": "^1.0.1"
}
}

View File

@ -8,7 +8,8 @@ const router = useRouter()
<div i-carbon-warning inline-block />
</div>
<div>Not found</div>
<div>
<div class="bg-primary">
<ABtn>test</ABtn>
<button text-sm btn m="3 t8" @click="router.back()">
Back
</button>

View File

@ -3,6 +3,8 @@ const online = useOnline()
</script>
<template>
<Carousel />
<Divider />
<div>
<Logos mb-6 />
<Suspense>

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 70 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.5 KiB

After

Width:  |  Height:  |  Size: 6.2 KiB

View File

@ -1,3 +0,0 @@
<svg width="900" height="900" viewBox="0 0 900 900" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M504.908 750H839.476C850.103 750.001 860.542 747.229 869.745 741.963C878.948 736.696 886.589 729.121 891.9 719.999C897.211 710.876 900.005 700.529 900 689.997C899.995 679.465 897.193 669.12 891.873 660.002L667.187 274.289C661.876 265.169 654.237 257.595 645.036 252.329C635.835 247.064 625.398 244.291 614.773 244.291C604.149 244.291 593.711 247.064 584.511 252.329C575.31 257.595 567.67 265.169 562.36 274.289L504.908 372.979L392.581 179.993C387.266 170.874 379.623 163.301 370.42 158.036C361.216 152.772 350.777 150 340.151 150C329.525 150 319.086 152.772 309.883 158.036C300.679 163.301 293.036 170.874 287.721 179.993L8.12649 660.002C2.80743 669.12 0.00462935 679.465 5.72978e-06 689.997C-0.00461789 700.529 2.78909 710.876 8.10015 719.999C13.4112 729.121 21.0523 736.696 30.255 741.963C39.4576 747.229 49.8973 750.001 60.524 750H270.538C353.748 750 415.112 713.775 457.336 643.101L559.849 467.145L614.757 372.979L779.547 655.834H559.849L504.908 750ZM267.114 655.737L120.551 655.704L340.249 278.586L449.87 467.145L376.474 593.175C348.433 639.03 316.577 655.737 267.114 655.737Z" fill="#00DC82"/>
</svg>

Before

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.2 KiB

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.0 KiB

After

Width:  |  Height:  |  Size: 6.2 KiB

30
public/topverse.icon.svg Normal file
View File

@ -0,0 +1,30 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
width="600.000000pt" height="600.000000pt" viewBox="0 0 600.000000 600.000000"
style="background:white" preserveAspectRatio="xMidYMid meet">
<g transform="translate(0.000000,600.000000) scale(0.100000,-0.100000)"
fill="#000000" stroke="none">
<path d="M0 3000 l0 -3000 3000 0 3000 0 0 3000 0 3000 -3000 0 -3000 0 0
-3000z m3524 173 c-1 -353 1 -463 10 -451 6 9 117 219 246 467 l235 451 823 2
c453 2 826 0 828 -3 3 -5 -30 -140 -87 -351 l-10 -38 -174 0 c-96 0 -175 3
-175 8 0 4 7 32 15 62 8 30 15 56 15 58 0 1 -83 2 -184 2 l-183 0 -32 -122
c-18 -68 -36 -135 -41 -150 -4 -14 -6 -29 -3 -32 4 -3 165 -6 360 -6 194 0
353 -3 353 -6 0 -6 -134 -526 -192 -746 l-20 -78 -577 0 c-318 0 -580 2 -582
5 -3 2 17 95 44 205 l49 200 203 0 203 0 -13 -42 c-6 -24 -15 -55 -19 -70 l-6
-28 219 0 219 0 11 33 c6 17 22 82 36 142 14 61 28 118 31 128 5 16 -19 17
-411 17 -392 0 -416 1 -411 18 16 54 136 524 136 532 0 6 -26 10 -58 10 l-57
0 -334 -575 -333 -575 -254 0 -254 0 0 33 c-1 104 -49 1039 -54 1044 -3 3 -29
2 -57 -3 l-52 -9 -74 -265 c-40 -146 -80 -289 -88 -317 l-16 -53 -132 0 c-73
0 -256 -3 -408 -7 l-276 -6 -48 -186 c-26 -102 -52 -196 -56 -208 -8 -23 -10
-23 -224 -23 -118 0 -215 3 -215 7 0 5 253 989 266 1036 5 16 -12 17 -255 17
-143 0 -262 -3 -264 -7 -3 -5 -60 -219 -127 -478 -66 -258 -128 -494 -136
-522 l-15 -53 -214 0 c-198 0 -215 1 -215 18 1 9 60 247 134 527 l133 510
-209 3 c-114 1 -208 5 -208 9 0 7 77 307 84 328 2 7 526 9 1552 8 l1549 -3 -1
-467z"/>
<path d="M2157 3293 c-3 -5 -19 -62 -36 -128 -18 -66 -34 -128 -37 -137 -5
-17 9 -18 198 -18 l204 0 40 145 41 145 -203 0 c-112 0 -205 -3 -207 -7z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.8 KiB

25
public/topverse.svg Normal file
View File

@ -0,0 +1,25 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 749.65 91.19">
<defs>
<style>
.cls-1 {
fill: #fff;
}
</style>
</defs>
<path class="cls-1" d="M80.84,7.07V22.23H48V72.75H32.84V22.23H0V7.07Z" />
<path class="cls-1"
d="M106.56,7.07H147q20.21,0,20.21,20.21V52.54q0,20.21-20.21,20.21H106.56q-20.22,0-20.21-20.21V27.28Q86.35,7.07,106.56,7.07ZM147,22.23H106.56q-5.06,0-5.06,5.05V52.54q0,5.06,5.06,5.05H147c3.36,0,5.05-1.68,5.05-5.05V27.28C152,23.91,150.34,22.23,147,22.23Z" />
<path class="cls-1"
d="M194.12,22.23V72.75H179V7.07h60.63q20.21,0,20.21,20.21T239.59,47.49H204.22V32.33h35.37q5.06,0,5-5t-5-5.05Z" />
<path class="cls-1" d="M261.11,7.07h16.68l26.77,51.84L331.34,7.07H348L304.56,91.19Z" />
<path class="cls-1"
d="M369.64,57.59h60.63V72.75H369.64q-20.2,0-20.21-20.21V27.28q0-20.21,20.21-20.21h60.63V22.23H369.64q-5.06,0-5.05,5.05V52.54Q364.59,57.6,369.64,57.59Zm40.42-25.26V47.49H374.69V32.33Z" />
<path class="cls-1"
d="M457.25,22.23V72.75H442.09V7.07h60.63q20.22,0,20.21,20.21T502.72,47.49h-3.84l25.26,25.26H502.72L462.3,32.33h40.42q5.05,0,5-5t-5-5.05Z" />
<path class="cls-1"
d="M592.2,72.75H531.57V57.59H592.2q5.06,0,5-5.05t-5-5H551.78q-20.21,0-20.21-20.21T551.78,7.07h60.63V22.23H551.78q-5.06,0-5,5.05t5,5H592.2q20.2,0,20.21,20.21T592.2,72.75Z" />
<path class="cls-1"
d="M642.73,57.59h60.63V72.75H642.73q-20.22,0-20.21-20.21V27.28q0-20.21,20.21-20.21h60.63V22.23H642.73q-5.06,0-5.06,5.05V52.54Q637.67,57.6,642.73,57.59Zm40.42-25.26V47.49H647.78V32.33Z" />
<path class="cls-1"
d="M730.5,38.29A18.44,18.44,0,0,1,717,32.68a18.45,18.45,0,0,1-5.62-13.53A18.45,18.45,0,0,1,717,5.61a19.13,19.13,0,0,1,27.07,0,18.45,18.45,0,0,1,5.61,13.54A18.44,18.44,0,0,1,744,32.68,18.48,18.48,0,0,1,730.5,38.29ZM729,8.84q9.72,0,9.72,7.36c0,3.06-1.26,5.18-3.77,6.33l4.83,6,.06-.06a12.76,12.76,0,0,0,3.89-9.36,12.77,12.77,0,0,0-3.89-9.37,13.23,13.23,0,0,0-18.74,0,12.76,12.76,0,0,0-3.88,9.37,12.75,12.75,0,0,0,3.88,9.36,13.26,13.26,0,0,0,17.71.95H734l-4.91-5.9H729v5.9h-5.89V8.84Zm0,5.89v2.94c2.55,0,3.83-.49,3.83-1.47S731.58,14.73,729,14.73Z" />
</svg>

After

Width:  |  Height:  |  Size: 2.1 KiB

8
styles/ui.css Normal file
View File

@ -0,0 +1,8 @@
:root{
--a-spacing:0.9
}
.a-btn{
--uno:'shadow-primary/80 ease-in-out transition-transform hover:scale-105 active:scale-98';
}

View File

@ -1,6 +1,7 @@
{
"extends": "./.nuxt/tsconfig.json",
"compilerOptions": {
"strict": true
"strict": true,
"types": ["anu-vue/volar"]
}
}

View File

@ -2,23 +2,41 @@ import {
defineConfig,
presetAttributify,
presetIcons,
presetMini,
presetTypography,
presetUno,
presetWebFonts,
presetWind,
transformerDirectives,
transformerVariantGroup,
} from 'unocss'
import { presetAnu, presetIconExtraProperties } from 'anu-vue'
import { presetExtra } from 'unocss-preset-extra'
import { presetScrollbar } from 'unocss-preset-scrollbar'
import { presetScrollbarHide } from 'unocss-preset-scrollbar-hide'
import { presetThemeDefault } from '@anu-vue/preset-theme-default'
export default defineConfig({
include: [/.*\/anu-vue\.js(.*)?$/, './**/*.vue', './**/*.md'],
shortcuts: [
['btn', 'px-4 py-1 rounded inline-block bg-teal-600 text-white cursor-pointer hover:bg-teal-700 disabled:cursor-default disabled:bg-gray-600 disabled:opacity-50'],
['icon-btn', 'inline-block cursor-pointer select-none opacity-75 transition duration-200 ease-in-out hover:opacity-100 hover:text-teal-600'],
],
presets: [
presetAnu(),
// default theme preset
presetThemeDefault({
shortcutOverrides: {
'a-btn': 'ring-3 ring-primary',
'a-base-input-root': 'ring-3',
},
}),
presetUno(),
presetMini(),
presetWind(),
presetAttributify(),
presetIcons({
scale: 1.2,
cdn: 'https://esm.sh/',
extraProperties: presetIconExtraProperties,
}),
presetTypography(),
presetWebFonts({
@ -28,6 +46,9 @@ export default defineConfig({
mono: 'DM Mono',
},
}),
presetExtra(),
presetScrollbar(),
presetScrollbarHide(),
],
transformers: [
transformerDirectives(),

43
utils/colors.ts Normal file
View File

@ -0,0 +1,43 @@
import { getRgbValue } from '@jiaminghi/color'
function rgb2hsl([r, g, b]: number[]): [h:number, s:string, l:string] {
r = r / 255 // [0, 1]
g = g / 255 // [0, 1]
b = b / 255 // [0, 1]
const max = Math.max(r, g, b)
const min = Math.min(r, g, b)
const d = max - min
const l = (max + min) / 2
const s = d === 0 ? 0 : l > 0.5 ? d / (2 - 2 * l) : d / (2 * l)
let h = 0
if (d !== 0) {
switch (max) {
case r:
h = (g - b) / d + (g < b ? 6 : 0)
break
case g:
h = (b - r) / d + 2
break
case b:
h = (r - g) / d + 4
break
default:
break
}
h = h / 6
}
return [h * 360, `${s * 100}%`, `${l * 100}%`]
}
function hex2hsl(hex: string): [h:number, s:string, l:string] {
const [r, g, b] = getRgbValue(hex)
return rgb2hsl([r, g, b])
}
export {
rgb2hsl, hex2hsl,
}