style💄: update style
parent
83b23b2ca2
commit
87e022afc8
|
@ -1,87 +1,226 @@
|
|||
/*
|
||||
* @LastEditTime: 2023-11-01 14:10:24
|
||||
* @LastEditTime: 2024-06-04 17:53:48
|
||||
* @Description: ...
|
||||
* @Date: 2023-09-19 19:04:57
|
||||
* @Author: isboyjc
|
||||
* @LastEditors: isboyjc
|
||||
*/
|
||||
import path from 'path'
|
||||
import { fileURLToPath } from 'url';
|
||||
import { defineConfig } from 'vitepress'
|
||||
import {logo, description, title, me, keywords, ico, site, icp, publicSecurityFiling, mail} from './meta'
|
||||
|
||||
// 原子CSS UnoCSS
|
||||
import UnoCSS from "unocss/vite";
|
||||
|
||||
// 组件自动引入
|
||||
import Components from 'unplugin-vue-components/vite'
|
||||
|
||||
// Iconify 解析插件
|
||||
import Icons from 'unplugin-icons/vite'
|
||||
// Iconify 自动引入解析器
|
||||
import IconsResolver from 'unplugin-icons/resolver'
|
||||
// icon 加载 loader
|
||||
import { FileSystemIconLoader } from 'unplugin-icons/loaders'
|
||||
|
||||
import {description, title, titleEn, descriptionEn, keywords, ico, site, icp, publicSecurityFiling, mail} from './meta'
|
||||
import {icons} from "./icon"
|
||||
|
||||
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
||||
const resolve = (dir) => dir ? path.resolve(__dirname, '../', dir) : __dirname
|
||||
|
||||
// https://vitepress.dev/reference/site-config
|
||||
export default defineConfig({
|
||||
title,
|
||||
description,
|
||||
lang: 'zh',
|
||||
locales: {
|
||||
root: { label: '简体中文', lang: 'zh-CN' },
|
||||
root: {
|
||||
label: '简体中文',
|
||||
lang: 'zh',
|
||||
title,
|
||||
description,
|
||||
link: '/',
|
||||
head: [
|
||||
['meta', { name: 'referrer', content: 'no-referrer-when-downgrade' }],
|
||||
['meta', { name: 'keywords', content: keywords }],
|
||||
['meta', { name: 'author', content: 'isboyjc' }],
|
||||
['meta', { name: 'application-name', content: title }],
|
||||
['meta', { name: 'apple-mobile-web-app-title', content: title }],
|
||||
['meta', { name: 'apple-mobile-web-app-status-bar-style', content: 'default' }],
|
||||
|
||||
['link', { rel: 'shortcut icon', href: ico }],
|
||||
['link', { rel: 'icon', type: 'image/x-icon', href: ico }],
|
||||
// ['link', { rel: 'mask-icon', href: '.svg', color: '#06f' }],
|
||||
// ['meta', { name: 'theme-color', content: '#06f' }],
|
||||
|
||||
// webfont
|
||||
['link', { rel: 'dns-prefetch', href: 'https://fonts.googleapis.com' }],
|
||||
['link', { rel: 'dns-prefetch', href: 'https://fonts.gstatic.com' }],
|
||||
['link', { rel: 'preconnect', crossorigin: 'anonymous', href: 'https://fonts.googleapis.com' }],
|
||||
['link', { rel: 'preconnect', crossorigin: 'anonymous', href: 'https://fonts.gstatic.com' }],
|
||||
|
||||
// og
|
||||
['meta', { property: 'og:type', content: 'website' }],
|
||||
['meta', { property: 'og:description', content: description }],
|
||||
['meta', { property: 'og:url', content: site }],
|
||||
['meta', { property: 'og:locale', content: 'zh_CN' }],
|
||||
],
|
||||
themeConfig: {
|
||||
outline: 'deep',
|
||||
outlineTitle: '目录...',
|
||||
returnToTopLabel: '返回顶部',
|
||||
darkModeSwitchLabel: '模式',
|
||||
sidebarMenuLabel: '归档',
|
||||
lastUpdatedText:"最后更新时间",
|
||||
docFooter: {
|
||||
prev: '上一页',
|
||||
next: '下一页',
|
||||
},
|
||||
nav: [
|
||||
{ text: '快速了解', link: '/docs/guide' },
|
||||
{ text: '特色', link: '/#features' },
|
||||
{ text: '订阅', link: '/#subscribe' },
|
||||
{ text: '在线支持', link: '/docs/support' }
|
||||
],
|
||||
sidebar: {
|
||||
'/docs': [
|
||||
{
|
||||
text: '测试通告',
|
||||
link: '/docs/testing'
|
||||
},
|
||||
{
|
||||
text: '快速了解',
|
||||
link: '/docs/guide'
|
||||
},
|
||||
{
|
||||
text: '关于我们',
|
||||
link: '/docs/about'
|
||||
},
|
||||
{
|
||||
text: '联系我们',
|
||||
link: '/docs/support'
|
||||
}
|
||||
]
|
||||
},
|
||||
},
|
||||
},
|
||||
en: {
|
||||
label: 'English',
|
||||
lang: 'en',
|
||||
title: titleEn,
|
||||
description: descriptionEn,
|
||||
link: '/en/',
|
||||
head: [
|
||||
['meta', { name: 'referrer', content: 'no-referrer-when-downgrade' }],
|
||||
['meta', { name: 'keywords', content: keywords }],
|
||||
['meta', { name: 'author', content: 'isboyjc' }],
|
||||
['meta', { name: 'application-name', content: titleEn }],
|
||||
['meta', { name: 'apple-mobile-web-app-title', content: titleEn }],
|
||||
['meta', { name: 'apple-mobile-web-app-status-bar-style', content: 'default' }],
|
||||
|
||||
['link', { rel: 'shortcut icon', href: ico }],
|
||||
['link', { rel: 'icon', type: 'image/x-icon', href: ico }],
|
||||
// ['link', { rel: 'mask-icon', href: '.svg', color: '#06f' }],
|
||||
// ['meta', { name: 'theme-color', content: '#06f' }],
|
||||
|
||||
// webfont
|
||||
['link', { rel: 'dns-prefetch', href: 'https://fonts.googleapis.com' }],
|
||||
['link', { rel: 'dns-prefetch', href: 'https://fonts.gstatic.com' }],
|
||||
['link', { rel: 'preconnect', crossorigin: 'anonymous', href: 'https://fonts.googleapis.com' }],
|
||||
['link', { rel: 'preconnect', crossorigin: 'anonymous', href: 'https://fonts.gstatic.com' }],
|
||||
|
||||
// og
|
||||
['meta', { property: 'og:type', content: 'website' }],
|
||||
['meta', { property: 'og:description', content: descriptionEn }],
|
||||
['meta', { property: 'og:url', content: site }],
|
||||
['meta', { property: 'og:locale', content: 'zh_CN' }],
|
||||
],
|
||||
themeConfig: {
|
||||
nav: [
|
||||
{ text: 'Guide', link: '/docs/guide' },
|
||||
{ text: 'Features', link: '/#features' },
|
||||
{ text: 'Subscribe', link: '/#subscribe' },
|
||||
{ text: 'Online Support', link: '/docs/support' }
|
||||
],
|
||||
sidebar: {
|
||||
'/en/docs': [
|
||||
{
|
||||
text: 'Test Notice',
|
||||
link: '/en/docs/testing'
|
||||
},
|
||||
{
|
||||
text: 'Get Guide',
|
||||
link: '/en/docs/guide'
|
||||
},
|
||||
{
|
||||
text: 'About Us',
|
||||
link: '/en/docs/about'
|
||||
},
|
||||
{
|
||||
text: 'Contact Us',
|
||||
link: '/en/docs/support'
|
||||
}
|
||||
]
|
||||
},
|
||||
},
|
||||
}
|
||||
},
|
||||
themeConfig: {
|
||||
socialLinks: [
|
||||
{ icon: icons.mail, link: `Mailto:${mail}` }
|
||||
],
|
||||
footer: {
|
||||
psf: publicSecurityFiling,
|
||||
icp: icp,
|
||||
},
|
||||
},
|
||||
markdown: {
|
||||
lineNumbers: true,
|
||||
},
|
||||
head: [
|
||||
['meta', { name: 'referrer', content: 'no-referrer-when-downgrade' }],
|
||||
['meta', { name: 'keywords', content: keywords }],
|
||||
['meta', { name: 'author', content: me.name }],
|
||||
['meta', { name: 'application-name', content: title }],
|
||||
['meta', { name: 'apple-mobile-web-app-title', content: title }],
|
||||
['meta', { name: 'apple-mobile-web-app-status-bar-style', content: 'default' }],
|
||||
|
||||
['link', { rel: 'shortcut icon', href: ico }],
|
||||
['link', { rel: 'icon', type: 'image/x-icon', href: ico }],
|
||||
// ['link', { rel: 'mask-icon', href: '.svg', color: '#06f' }],
|
||||
// ['meta', { name: 'theme-color', content: '#06f' }],
|
||||
|
||||
// webfont
|
||||
['link', { rel: 'dns-prefetch', href: 'https://fonts.googleapis.com' }],
|
||||
['link', { rel: 'dns-prefetch', href: 'https://fonts.gstatic.com' }],
|
||||
['link', { rel: 'preconnect', crossorigin: 'anonymous', href: 'https://fonts.googleapis.com' }],
|
||||
['link', { rel: 'preconnect', crossorigin: 'anonymous', href: 'https://fonts.gstatic.com' }],
|
||||
|
||||
// og
|
||||
['meta', { property: 'og:type', content: 'website' }],
|
||||
['meta', { property: 'og:description', content: description }],
|
||||
['meta', { property: 'og:url', content: site }],
|
||||
['meta', { property: 'og:locale', content: 'zh_CN' }],
|
||||
],
|
||||
themeConfig: {
|
||||
logo,
|
||||
outline: 'deep',
|
||||
outlineTitle: '目录...',
|
||||
returnToTopLabel: '返回顶部',
|
||||
darkModeSwitchLabel: '模式',
|
||||
sidebarMenuLabel: '归档',
|
||||
lastUpdatedText:"最后更新时间",
|
||||
docFooter: {
|
||||
prev: '上一页',
|
||||
next: '下一页',
|
||||
},
|
||||
|
||||
nav: [
|
||||
// { text: '首页', link: '/' },
|
||||
{ text: '关于我们', link: '/about' },
|
||||
{ text: '岛屿文档', link: '/docs' },
|
||||
{ text: '在线支持', link: '/support' }
|
||||
// vite配置
|
||||
vite: {
|
||||
plugins: [
|
||||
// 插件
|
||||
Components({
|
||||
// dirs 指定自动引入组件所在目录位置
|
||||
dirs: [resolve('.vitepress/theme/components')],
|
||||
include: [/\.vue$/, /\.vue\?vue/, /\.md$/],
|
||||
resolvers: [
|
||||
IconsResolver({
|
||||
prefix: 'icon',
|
||||
// 默认 iconify 集合别名
|
||||
// alias: {
|
||||
// vsci: 'vscode-icons'
|
||||
// },
|
||||
customCollections: ['custom']
|
||||
})
|
||||
]
|
||||
}),
|
||||
Icons({
|
||||
compiler: 'vue3',
|
||||
customCollections: {
|
||||
// custom 图标集, 给svg文件设置fill="currentColor"属性,使图标的颜色具有适应性
|
||||
custom: FileSystemIconLoader('public/svg/custom', svg => svg.replace(/^<svg /, '<svg fill="currentColor" '))
|
||||
},
|
||||
autoInstall: true
|
||||
}),
|
||||
UnoCSS({
|
||||
// 详见 unocss.config.js
|
||||
})
|
||||
],
|
||||
|
||||
// sidebar: [
|
||||
// {
|
||||
// text: 'Examples',
|
||||
// items: [
|
||||
// { text: 'Markdown Examples', link: '/markdown-examples' },
|
||||
// { text: 'Runtime API Examples', link: '/api-examples' }
|
||||
// ]
|
||||
// }
|
||||
// ],
|
||||
socialLinks: [
|
||||
{ icon: icons.mail, link: `Mailto:${mail}` }
|
||||
],
|
||||
|
||||
footer: {
|
||||
message: `<a target="_blank" href="http://www.beian.gov.cn/portal/registerSystemInfo?recordcode=${publicSecurityFiling}" style="display:inline-block;text-decoration:none;height:20px;line-height:20px;color: var(--vp-c-brand);">
|
||||
<img src="/img/site/psf.png" style="float:left;"/><span> 京公网安备 ${publicSecurityFiling}号</span>
|
||||
</a> <a target="_blank" href="https://beian.miit.gov.cn/#/Integrated/index" style="color: var(--vp-c-brand);">${icp}</a>`,
|
||||
copyright: `© 2023-${new Date().getFullYear()} ${title}`
|
||||
resolve: {
|
||||
// 替换 Vitepress 内部组件
|
||||
alias: [
|
||||
{
|
||||
find: /^.*\/VPFooter\.vue$/,
|
||||
replacement: resolve('.vitepress/theme/components/CustomFooter.vue')
|
||||
}
|
||||
]
|
||||
},
|
||||
}
|
||||
},
|
||||
|
||||
// 构建完成钩子
|
||||
async buildEnd(siteConfig) {
|
||||
// console.log(siteConfig)
|
||||
// TODO RSS订阅
|
||||
},
|
||||
})
|
||||
|
|
|
@ -1,31 +1,24 @@
|
|||
/*
|
||||
* @LastEditTime: 2023-11-15 18:20:43
|
||||
* @LastEditTime: 2024-06-03 14:15:35
|
||||
* @Description: ...
|
||||
* @Date: 2023-06-26 00:39:07
|
||||
* @Author: isboyjc
|
||||
* @LastEditors: isboyjc
|
||||
*/
|
||||
import { version, author, keywords as ks, description as desc } from '../package.json'
|
||||
import { version, keywords as ks } from '../package.json'
|
||||
|
||||
// base
|
||||
export const title = 'ISLENOTE 岛屿笔记'
|
||||
export const title = '岛屿笔记'
|
||||
export const titleEn = 'ISLENOTE'
|
||||
export const description = "记录灵感,编排灵感~"
|
||||
export const descriptionEn = "Record inspiration, arrange inspiration~"
|
||||
export const site = 'https://sentenceend.com/'
|
||||
export const logo = '/img/site/logo_blue.png'
|
||||
export const ico = '/img/site/logo_blue.png'
|
||||
export const keywords = ks.join("、")
|
||||
export const description = "记录灵感,编排灵感"
|
||||
export const icp = "京ICP备2023022756号-2"
|
||||
export const publicSecurityFiling = "11011402053556"
|
||||
export const mail = "islenote@sentenceend.com"
|
||||
export const me = {
|
||||
avatar: '/img/me/avatar.jpeg',
|
||||
name: author,
|
||||
desc: '不正经的前端,很正经的摄影!',
|
||||
wx: '/img/me/wx.jpeg',
|
||||
github: 'https://github.com/isboyjc',
|
||||
twitter: 'https://twitter.com/isboyjc',
|
||||
juejin: 'https://juejin.cn/user/2999123452373735',
|
||||
}
|
||||
|
||||
// link
|
||||
|
||||
|
|
|
@ -0,0 +1,110 @@
|
|||
<script setup>
|
||||
import { useData } from 'vitepress'
|
||||
import {t} from '../locale'
|
||||
|
||||
const { theme, frontmatter, lang } = useData()
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<footer class="w-100% h-20px"></footer>
|
||||
<footer v-if="theme.footer && frontmatter.footer !== false">
|
||||
|
||||
<div className="w-full text-sm px-6 sm:px-8 md:px-28 lg:px-20 xl:px-0 max-w-screen-lg mx-auto border-t border-t-solid border-t-[var(--vp-c-gray-3)] pt-6">
|
||||
<div className="grid grid-cols-12 gap-8 py-12 text-[var(--vp-c-text-2)] transition-colors duration-150 border-b lt-sm:grid-cols-1 border-border">
|
||||
<div className="col-span-4 lt-sm:col-span-1">
|
||||
<div className="flex flex-col items-start lt-sm:items-center h-10">
|
||||
<div class="flex items-center">
|
||||
<CustomLogo />
|
||||
<span class="font-bold text-[var(--vp-c-text-1)] text-16px">{{ t(lang, 'title') }}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div className="col-span-2 lt-sm:col-span-1">
|
||||
<ul className="flex flex-col flex-initial md:flex-1">
|
||||
<li className="py-3 md:py-0 md:pb-4 lt-sm:text-center">
|
||||
<p className="font-bold text-[var(--vp-c-text-2)] transition duration-150 ease-in-out">
|
||||
{{ t(lang, 'footer.product') }}
|
||||
</p>
|
||||
</li>
|
||||
<li className="py-3 md:py-0 md:pb-4 lt-sm:text-center">{{ t(lang, 'footer.product.web') }}</li>
|
||||
<li className="py-3 md:py-0 md:pb-4 lt-sm:text-center">{{ t(lang, 'footer.product.desktop') }}</li>
|
||||
<li className="py-3 md:py-0 md:pb-4 lt-sm:text-center">{{ t(lang, 'footer.product.mobile') }}</li>
|
||||
<li className="py-3 md:py-0 md:pb-4 lt-sm:text-center">{{ t(lang, 'footer.product.webplugin') }}</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div className="col-span-2 lt-sm:col-span-1">
|
||||
<ul className="flex flex-col flex-initial md:flex-1">
|
||||
<li className="py-3 md:py-0 md:pb-4 lt-sm:text-center">
|
||||
<p className="font-bold text-[var(--vp-c-text-2)] transition duration-150 ease-in-out">
|
||||
{{ t(lang, 'footer.resource') }}
|
||||
</p>
|
||||
</li>
|
||||
<li className="py-3 md:py-0 md:pb-4 lt-sm:text-center">{{ t(lang, 'footer.resource.guide') }}</li>
|
||||
<li className="py-3 md:py-0 md:pb-4 lt-sm:text-center">{{ t(lang, 'footer.resource.faq') }}</li>
|
||||
<li className="py-3 md:py-0 md:pb-4 lt-sm:text-center">{{ t(lang, 'footer.resource.extend') }}</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div className="col-span-2 lt-sm:col-span-1">
|
||||
<ul className="flex flex-col flex-initial md:flex-1">
|
||||
<li className="py-3 md:py-0 md:pb-4 lt-sm:text-center">
|
||||
<p className="font-bold text-[var(--vp-c-text-2)] transition duration-150 ease-in-out">
|
||||
{{ t(lang, 'footer.team') }}
|
||||
</p>
|
||||
</li>
|
||||
<li className="py-3 md:py-0 md:pb-4 lt-sm:text-center">{{ t(lang, 'footer.team.aboutus') }}</li>
|
||||
<li className="py-3 md:py-0 md:pb-4 lt-sm:text-center">{{ t(lang, 'footer.team.origin') }}</li>
|
||||
<li className="py-3 md:py-0 md:pb-4 lt-sm:text-center">{{ t(lang, 'footer.team.contactus') }}</li>
|
||||
<li className="py-3 md:py-0 md:pb-4 lt-sm:text-center">{{ t(lang, 'footer.team.support') }}</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div className="col-span-2 lt-sm:col-span-1">
|
||||
<ul className="flex flex-col flex-initial md:flex-1">
|
||||
<li className="py-3 md:py-0 md:pb-4 lt-sm:text-center">
|
||||
<p className="font-bold text-[var(--vp-c-text-2)] transition duration-150 ease-in-out">
|
||||
{{ t(lang, 'footer.other') }}
|
||||
</p>
|
||||
</li>
|
||||
<li className="py-3 md:py-0 md:pb-4 lt-sm:text-center">{{ t(lang, 'footer.other.ua') }}</li>
|
||||
<li className="py-3 md:py-0 md:pb-4 lt-sm:text-center">{{ t(lang, 'footer.other.pa') }}</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div className="flex justify-start items-center flex-wrap lt-sm:justify-center py-4">
|
||||
<span class="text-[var(--vp-c-text-2)] text-sm">{{ t(lang, 'footer.desc1') }}</span>
|
||||
<a
|
||||
class="text-sm [var(--vp-c-text-2)] mx-4px"
|
||||
uno-hover="text-primary underline"
|
||||
href="https://github.com/vuejs/vitepress"
|
||||
target="_blank"
|
||||
>
|
||||
VitePress
|
||||
</a>
|
||||
<span class="mr-6px text-[var(--vp-c-text-2)] text-sm">{{ t(lang, 'footer.desc2') }}.</span>
|
||||
<span className="text-[var(--vp-c-text-2)] text-sm">
|
||||
{{ `© 2023-${new Date().getFullYear()} ${t(lang, 'title')} - ${t(lang, 'company')} ${t(lang, 'footer.desc3')}. ` }}
|
||||
</span>
|
||||
<span class="inline-flex items-center">
|
||||
<img src="/img/site/psf.png" class="inline-block h-14px" />
|
||||
<a
|
||||
class="text-sm [var(--vp-c-text-2)] mx-4px"
|
||||
uno-hover="text-primary underline"
|
||||
:href="`http://www.beian.gov.cn/portal/registerSystemInfo?recordcode=${theme.footer.psf}`"
|
||||
target="_blank"
|
||||
>
|
||||
京公安{{ theme.footer.psf }}
|
||||
</a>
|
||||
</span>
|
||||
<a
|
||||
class="text-sm [var(--vp-c-text-2)] mx-4px"
|
||||
uno-hover="text-primary underline"
|
||||
href="https://beian.miit.gov.cn/#/Integrated/index"
|
||||
target="_blank"
|
||||
>
|
||||
{{ theme.footer.icp }}
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
</template>
|
||||
|
||||
<style scoped></style>
|
|
@ -0,0 +1,347 @@
|
|||
<script setup>
|
||||
import { useData } from 'vitepress'
|
||||
import { ref } from 'vue'
|
||||
import {t, routerPath} from '../locale'
|
||||
|
||||
const { lang, isDark } = useData()
|
||||
|
||||
const subDate = ref('month')
|
||||
const price = ref({
|
||||
month: {
|
||||
oldPrice: '15',
|
||||
price: '10',
|
||||
discount: '6.6'
|
||||
},
|
||||
year: {
|
||||
oldPrice: '180',
|
||||
price: '100',
|
||||
discount: '5.5'
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<div class="custom-home">
|
||||
|
||||
<section>
|
||||
<div class="mx-auto w-full lg:px-24 max-w-7xl md:px-12 items-center px-8 py-24">
|
||||
<div>
|
||||
<div class="text-center max-w-4xl mx-auto">
|
||||
<div class="sm:flex sm:justify-center">
|
||||
<a
|
||||
v-motion
|
||||
:initial="{ opacity: 0, y: 100 }"
|
||||
:enter="{ opacity: 1, y: 0, scale: 1 }"
|
||||
:delay="0"
|
||||
:duration="400"
|
||||
href="https://islenote.com"
|
||||
target="_blank"
|
||||
class="h-34px font-semibold text-primary rounded-full px-5 text-sm leading-6 border-2 border-solid border-primary flex-center duration-200 no-underline!"
|
||||
uno-hover="bg-primary text-[var(--vp-c-neutral-inverse)]!"
|
||||
>
|
||||
<icon-custom-islenote class="text-16px mr-6px" />
|
||||
<span class="block lg:inline"> {{t(lang, 'notify.test')}} <span aria-hidden="true">→</span> </span>
|
||||
</a>
|
||||
</div>
|
||||
<h1
|
||||
v-motion
|
||||
:initial="{ opacity: 0, y: 100 }"
|
||||
:enter="{ opacity: 1, y: 0, scale: 1 }"
|
||||
:delay="50"
|
||||
:duration="400"
|
||||
class="text-4xl! tracking-tight font-medium text-primary md:text-5xl font-display mt-12"
|
||||
>
|
||||
{{ t(lang, 'desc') }}
|
||||
</h1>
|
||||
<div
|
||||
v-motion
|
||||
:initial="{ opacity: 0, y: 100 }"
|
||||
:enter="{ opacity: 1, y: 0, scale: 1 }"
|
||||
:delay="100"
|
||||
:duration="400"
|
||||
class="text-[var(--vp-c-text-3)] lg:text-xl max-w-2xl mt-4 mx-auto text-base"
|
||||
>
|
||||
{{ t(lang, 'desc.secondary') }}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="flex justify-center gap-3 mt-10 mb-5 flex-col sm:flex-row">
|
||||
<a
|
||||
v-motion
|
||||
:initial="{ opacity: 0, y: 100 }"
|
||||
:enter="{ opacity: 1, y: 0, scale: 1 }"
|
||||
:delay="200"
|
||||
:duration="400"
|
||||
target="_blank"
|
||||
class="items-center justify-center h-12 font-medium rounded-xl inline-flex duration-200 lg:w-auto px-6 py-3 text-center text-[var(--vp-c-text-1)]! w-full border-2 border-solid border-[var(--vp-c-gray-soft)] no-underline!"
|
||||
uno-hover="text-primary! border-primary"
|
||||
href="https://v.islenote.com/register"
|
||||
>
|
||||
{{ t(lang, 'register') }}
|
||||
</a>
|
||||
<a
|
||||
v-motion
|
||||
:initial="{ opacity: 0, y: 100 }"
|
||||
:enter="{ opacity: 1, y: 0, scale: 1 }"
|
||||
:delay="300"
|
||||
:duration="400"
|
||||
class="items-center justify-center h-12 font-medium rounded-xl inline-flex bg-primary border-solid border-2 border-primary duration-200 lg:w-auto px-6 py-3 text-center text-[var(--vp-c-neutral-inverse)]! w-full no-underline!"
|
||||
uno-hover="bg-transparent border-primary text-primary!"
|
||||
:href="routerPath(lang, '/guide/quick')"
|
||||
>
|
||||
{{ t(lang, 'guide') }} →
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div class="sm:flex sm:justify-center">
|
||||
<a
|
||||
v-motion
|
||||
:initial="{ opacity: 0, y: 100 }"
|
||||
:enter="{ opacity: 1, y: 0, scale: 1 }"
|
||||
:delay="400"
|
||||
:duration="400"
|
||||
href="https://v.islenote.com"
|
||||
target="_blank"
|
||||
class="h-34px font-semibold text-primary rounded-full px-5 text-sm leading-6 flex-center duration-200 no-underline!"
|
||||
uno-hover="underline!"
|
||||
>
|
||||
<span class="block lg:inline">{{ t(lang, 'account') }} {{ t(lang, 'login') }}<span aria-hidden="true">→</span> </span>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div
|
||||
v-motion
|
||||
:initial="{ opacity: 0, y: 100 }"
|
||||
:enter="{ opacity: 1, y: 0, scale: 1 }"
|
||||
:delay="500"
|
||||
:duration="400"
|
||||
class="mt-20 mb-10"
|
||||
>
|
||||
<img v-if="!isDark" src="/img/site/home_light.png" class="rounded-2 shadow-[var(--vp-c-shadow)]"lt="">
|
||||
<img v-else src="/img/site/home_dark.png" class="rounded-2 shadow-[var(--vp-c-shadow)]"lt="">
|
||||
</div>
|
||||
|
||||
<div
|
||||
v-motion
|
||||
:initial="{ opacity: 0, y: 100 }"
|
||||
:enter="{ opacity: 1, y: 0, scale: 1 }"
|
||||
:delay="500"
|
||||
:duration="400"
|
||||
id="features"
|
||||
class="my-40"
|
||||
>
|
||||
<div class="sm:flex sm:flex-col sm:align-center">
|
||||
<h1 class="text-4xl font-700 text-center">{{ t(lang, 'features') }}</h1>
|
||||
<div
|
||||
class="text-[var(--vp-c-text-3)] mt-4 text-base text-center"
|
||||
>
|
||||
{{ t(lang, 'features.desc') }}
|
||||
</div>
|
||||
<a
|
||||
target="_blank"
|
||||
class="h-34px font-semibold text-primary rounded-full px-5 mt-4 text-sm leading-6 flex-center duration-200 no-underline!"
|
||||
uno-hover="underline!"
|
||||
>
|
||||
{{ t(lang, 'features.more') }}->
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div class="lg:gap-x-8 lg:grid-cols-3 max-w-4xl mt-14 mx-auto sm:gap-x-6 sm:gap-y-12 sm:grid sm:grid-cols-2 sm:space-y-0 space-y-6 text-center text-sm items-start">
|
||||
<div class="text-[var(--vp-c-text-3)]">
|
||||
<strong class="text-[var(--vp-c-text-2)]">
|
||||
{{t(lang, 'features.faster')}}
|
||||
</strong>
|
||||
– {{t(lang, 'features.faster.desc')}}
|
||||
</div>
|
||||
<div class="text-[var(--vp-c-text-3)]">
|
||||
<strong class="text-[var(--vp-c-text-2)]">
|
||||
{{t(lang, 'features.style')}}
|
||||
</strong>
|
||||
– {{t(lang, 'features.style.desc')}}
|
||||
</div>
|
||||
<div class="text-[var(--vp-c-text-3)]">
|
||||
<strong class="text-[var(--vp-c-text-2)]">
|
||||
{{t(lang, 'features.review')}}
|
||||
</strong>
|
||||
– {{t(lang, 'features.review.desc')}}
|
||||
</div>
|
||||
<div class="text-[var(--vp-c-text-3)]">
|
||||
<strong class="text-[var(--vp-c-text-2)]">
|
||||
{{t(lang, 'features.extend')}}
|
||||
</strong>
|
||||
– {{t(lang, 'features.extend.desc')}}
|
||||
</div>
|
||||
<div class="text-[var(--vp-c-text-3)]">
|
||||
<strong class="text-[var(--vp-c-text-2)]">
|
||||
{{t(lang, 'features.privacy')}}
|
||||
</strong>
|
||||
– {{t(lang, 'features.privacy.desc')}}
|
||||
</div>
|
||||
<div class="text-[var(--vp-c-text-3)]">
|
||||
<strong class="text-[var(--vp-c-text-2)]">
|
||||
{{t(lang, 'features.unlimited')}}
|
||||
</strong>
|
||||
– {{t(lang, 'features.unlimited.desc')}}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div
|
||||
v-motion
|
||||
:initial="{ opacity: 0, y: 100 }"
|
||||
:enter="{ opacity: 1, y: 0, scale: 1 }"
|
||||
:delay="600"
|
||||
:duration="400"
|
||||
id="subscribe"
|
||||
class="my-40"
|
||||
>
|
||||
<div class="sm:flex sm:flex-col sm:align-center">
|
||||
<h1
|
||||
class="text-4xl font-700 text-center"
|
||||
>
|
||||
{{ t(lang, 'subscribe') }}
|
||||
</h1>
|
||||
<div
|
||||
class="text-[var(--vp-c-text-3)] mt-4 text-base text-center"
|
||||
>
|
||||
{{ t(lang, 'subscribe.desc') }}
|
||||
</div>
|
||||
<a
|
||||
target="_blank"
|
||||
class="h-34px font-semibold text-primary rounded-full px-5 mt-4 text-sm leading-6 flex-center duration-200 no-underline!"
|
||||
uno-hover="underline!"
|
||||
>
|
||||
{{ t(lang, 'subscribe.more') }}->
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div class="w-auto font-medium flex-center mt-12">
|
||||
<div class="h-12 bg-[var(--vp-c-gray-soft)] rounded-xl box-border">
|
||||
<div
|
||||
class="w-auto h-full inline-flex justify-center items-center cursor-pointer rounded-xl duration-200 px-5 text-14px box-border"
|
||||
:class="{'bg-primary text-[var(--vp-c-neutral-inverse)]': subDate == 'month'}"
|
||||
@click="subDate = 'month'"
|
||||
>
|
||||
{{ t(lang, 'subscribe.monthly') }}
|
||||
</div>
|
||||
<div
|
||||
class="w-auto h-full inline-flex justify-center items-center cursor-pointer rounded-xl duration-200 px-5 text-14px box-border"
|
||||
:class="{'bg-primary text-[var(--vp-c-neutral-inverse)]': subDate == 'year'}"
|
||||
@click="subDate = 'year'"
|
||||
>
|
||||
{{ t(lang, 'subscribe.yearly') }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="w-full grid grid-cols-2 lt-sm:grid-cols-1 gap-6 mt-12">
|
||||
<div class="w-full flex justify-end lt-sm:justify-center">
|
||||
<div
|
||||
class="w-full text-sm flex flex-col justify-between flex-1 flex-shrink-0 max-w-xs p-6 border border-solid border-[var(--vp-c-divider)] rounded-xl box-border"
|
||||
>
|
||||
<div class="w-full leading-6 font-700">{{ t(lang, 'subscribe.pu') }}</div>
|
||||
<div class="h-full flex-1">
|
||||
<div class="mt-4">{{t(lang, 'subscribe.free.desc')}}1</div>
|
||||
<div class="mt-4">{{t(lang, 'subscribe.free.desc')}}2</div>
|
||||
<div class="mt-4">{{t(lang, 'subscribe.free.desc')}}3</div>
|
||||
<div class="mt-4">{{t(lang, 'subscribe.free.desc')}}4</div>
|
||||
<div class="mt-4">{{t(lang, 'subscribe.free.desc')}}5</div>
|
||||
</div>
|
||||
<div class="w-full flex flex-col mt-8">
|
||||
<div class="">
|
||||
<span class="text-xl font-extrabold white">{{t(lang, 'subscribe.free')}}</span>
|
||||
<span class="text-base font-medium ml-1">¥/{{ subDate == 'year' ? t(lang, 'subscribe.year') : t(lang, 'subscribe.month') }}</span>
|
||||
</div>
|
||||
<a
|
||||
class="mt-4 items-center justify-center h-12 font-medium rounded-xl inline-flex duration-200 lg:w-auto px-6 py-3 text-center text-[var(--vp-c-text-1)]! w-full border-2 border-solid border-[var(--vp-c-gray-soft)] no-underline! cursor-pointer"
|
||||
uno-hover="text-primary! border-primary"
|
||||
target="_blank"
|
||||
href="https://v.islenote.com/register"
|
||||
>
|
||||
{{ t(lang, 'register') }}
|
||||
</a>
|
||||
<a
|
||||
href="https://v.islenote.com"
|
||||
target="_blank"
|
||||
class="h-34px font-semibold text-primary rounded-full px-5 text-sm leading-6 flex-center duration-200 no-underline!"
|
||||
uno-hover="underline!"
|
||||
>
|
||||
<span class="block lg:inline">{{ t(lang, 'account') }} {{ t(lang, 'login') }}<span aria-hidden="true">→</span> </span>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="w-full flex justify-start lt-sm:justify-center">
|
||||
<div
|
||||
class="w-full text-sm flex flex-col justify-between flex-1 flex-shrink-0 max-w-xs p-6 border border-solid border-[var(--vp-c-divider)] rounded-xl box-border"
|
||||
>
|
||||
<div class="w-full leading-6">
|
||||
<span class="font-700">{{ t(lang, 'subscribe.su') }}</span>
|
||||
<span class="ml-4px font-400">
|
||||
· {{ t(lang, 'subscribe.su.desc1') }}{{ price[subDate].discount
|
||||
}}{{ t(lang, 'subscribe.su.desc2') }}
|
||||
</span>
|
||||
</div>
|
||||
<div class="h-full flex-1">
|
||||
<div class="mt-4">{{t(lang, 'subscribe.sub.desc')}}1</div>
|
||||
<div class="mt-4">{{t(lang, 'subscribe.sub.desc')}}2</div>
|
||||
<div class="mt-4">{{t(lang, 'subscribe.sub.desc')}}3</div>
|
||||
<div class="mt-4">{{t(lang, 'subscribe.sub.desc')}}4</div>
|
||||
<div class="mt-4">{{t(lang, 'subscribe.sub.desc')}}5</div>
|
||||
</div>
|
||||
<div class="w-full flex flex-col mt-8">
|
||||
<div class="">
|
||||
<span class="text-xl line-through">{{ price[subDate].oldPrice }}</span>
|
||||
<span class="text-xl font-extrabold ml-4px text-primary"
|
||||
>{{ price[subDate].price }}
|
||||
</span>
|
||||
<span class="text-base font-medium ml-1">¥/{{ subDate == 'year' ? t(lang, 'subscribe.year') : t(lang, 'subscribe.month') }}</span>
|
||||
</div>
|
||||
<a
|
||||
class="mt-4 items-center justify-center h-12 font-medium rounded-xl inline-flex duration-200 lg:w-auto px-6 py-3 text-center text-[var(--vp-c-text-1)]! w-full border-2 border-solid border-[var(--vp-c-gray-soft)] no-underline! cursor-pointer"
|
||||
uno-hover="text-primary! border-primary"
|
||||
target="_blank"
|
||||
href="https://v.islenote.com/register"
|
||||
>
|
||||
{{ t(lang, 'register') }}
|
||||
</a>
|
||||
<a
|
||||
href="https://v.islenote.com"
|
||||
target="_blank"
|
||||
class="h-34px font-semibold text-primary rounded-full px-5 text-sm leading-6 flex-center duration-200 no-underline!"
|
||||
uno-hover="underline!"
|
||||
>
|
||||
<span class="block lg:inline">{{ t(lang, 'account') }} {{ t(lang, 'login') }}<span aria-hidden="true">→</span> </span>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<style scoped>
|
||||
.custom-home{
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
|
||||
@media screen and (min-width: 640px) and (max-width: 960px) {
|
||||
.custom-home-banner__top-image{
|
||||
width: 280px;
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (max-width: 640px) {
|
||||
.custom-home-banner__top-image{
|
||||
width: 200px;
|
||||
}
|
||||
}
|
||||
</style>
|
|
@ -0,0 +1,83 @@
|
|||
<script setup>
|
||||
import { useData } from 'vitepress'
|
||||
import DefaultTheme from 'vitepress/theme'
|
||||
import { nextTick, provide } from 'vue'
|
||||
|
||||
const { Layout } = DefaultTheme
|
||||
|
||||
const { isDark } = useData()
|
||||
|
||||
const enableTransitions = () =>
|
||||
'startViewTransition' in document &&
|
||||
window.matchMedia('(prefers-reduced-motion: no-preference)').matches
|
||||
|
||||
provide('toggle-appearance', async ({ clientX: x, clientY: y }) => {
|
||||
if (!enableTransitions()) {
|
||||
isDark.value = !isDark.value
|
||||
return
|
||||
}
|
||||
|
||||
const clipPath = [
|
||||
`circle(0px at ${x}px ${y}px)`,
|
||||
`circle(${Math.hypot(
|
||||
Math.max(x, innerWidth - x),
|
||||
Math.max(y, innerHeight - y)
|
||||
)}px at ${x}px ${y}px)`
|
||||
]
|
||||
|
||||
await document.startViewTransition(async () => {
|
||||
isDark.value = !isDark.value
|
||||
await nextTick()
|
||||
}).ready
|
||||
|
||||
document.documentElement.animate(
|
||||
{ clipPath: isDark.value ? clipPath.reverse() : clipPath },
|
||||
{
|
||||
duration: 500,
|
||||
easing: 'ease-in',
|
||||
pseudoElement: `::view-transition-${isDark.value ? 'old' : 'new'}(root)`
|
||||
}
|
||||
)
|
||||
})
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<Layout>
|
||||
<template #nav-bar-title-before>
|
||||
<CustomLogo />
|
||||
</template>
|
||||
<template #not-found>
|
||||
<CustomNotFound />
|
||||
</template>
|
||||
</Layout>
|
||||
</template>
|
||||
|
||||
<style>
|
||||
.VPHome{
|
||||
padding-bottom: 0!important;
|
||||
}
|
||||
|
||||
::view-transition-old(root),
|
||||
::view-transition-new(root) {
|
||||
animation: none;
|
||||
mix-blend-mode: normal;
|
||||
}
|
||||
|
||||
::view-transition-old(root),
|
||||
.dark::view-transition-new(root) {
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
::view-transition-new(root),
|
||||
.dark::view-transition-old(root) {
|
||||
z-index: 9999;
|
||||
}
|
||||
|
||||
.VPSwitchAppearance {
|
||||
width: 22px !important;
|
||||
}
|
||||
|
||||
.VPSwitchAppearance .check {
|
||||
transform: none !important;
|
||||
}
|
||||
</style>
|
|
@ -0,0 +1,12 @@
|
|||
<template>
|
||||
<div class="w-28px h-28px rounded-2 flex-center mr-6px bg-[#ffffff] border-solid border border-[var(--vp-c-border)] ">
|
||||
<icon-custom-islenote class="text-16px text-primary" />
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
|
||||
</script>
|
||||
<style scoped>
|
||||
|
||||
</style>
|
|
@ -0,0 +1,75 @@
|
|||
<script setup>
|
||||
import { useData } from 'vitepress'
|
||||
import {t, routerPath} from '../locale'
|
||||
|
||||
const { site,theme,lang } = useData()
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<div class="NotFound">
|
||||
<p class="code">404</p>
|
||||
<h1 class="title">{{ t(lang, 'nofound.nopage') }}</h1>
|
||||
<div class="divider" />
|
||||
<p class="message">
|
||||
{{ t(lang, 'nofound.follow1') }} <span class="text-primary font-bold">ISLENOTE岛屿笔记</span> {{ t(lang, 'nofound.follow2') }}
|
||||
</p>
|
||||
<div class="action">
|
||||
<a class="link" :href="routerPath(lang, site.base)" aria-label="go to home">
|
||||
{{ t(lang, 'nofound.gohome') }}
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<style scoped>
|
||||
.message{
|
||||
margin: 10px auto;
|
||||
width:300px;
|
||||
text-align: center;
|
||||
}
|
||||
.NotFound {
|
||||
padding: 64px 24px 96px;
|
||||
text-align: center;
|
||||
}
|
||||
@media (min-width: 768px) {
|
||||
.NotFound {
|
||||
padding: 96px 32px 168px;
|
||||
}
|
||||
}
|
||||
.code {
|
||||
line-height: 64px;
|
||||
font-size: 64px;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.title {
|
||||
padding-top: 12px;
|
||||
letter-spacing: 2px;
|
||||
line-height: 20px;
|
||||
font-size: 20px;
|
||||
font-weight: 700;
|
||||
}
|
||||
.divider {
|
||||
margin: 24px auto 18px;
|
||||
width: 64px;
|
||||
height: 1px;
|
||||
background-color: var(--vp-c-divider)
|
||||
}
|
||||
.action {
|
||||
padding-top: 20px;
|
||||
}
|
||||
.link {
|
||||
display: inline-block;
|
||||
border: 1px solid var(--vp-c-brand);
|
||||
border-radius: 16px;
|
||||
padding: 3px 16px;
|
||||
font-size: 14px;
|
||||
font-weight: 500;
|
||||
color: var(--vp-c-brand);
|
||||
transition: border-color 0.25s, color .25s;
|
||||
}
|
||||
.link:hover {
|
||||
border-color: var(--vp-c-brand-dark);
|
||||
color: var(--vp-c-brand-dark);
|
||||
}
|
||||
</style>
|
|
@ -1,18 +1,18 @@
|
|||
// https://vitepress.dev/guide/custom-theme
|
||||
import { h } from 'vue'
|
||||
import Theme from 'vitepress/theme'
|
||||
import DefaultTheme from 'vitepress/theme'
|
||||
import CustomLayout from './components/CustomLayout.vue'
|
||||
|
||||
import { MotionPlugin } from '@vueuse/motion'
|
||||
|
||||
import './styles/vars.css'
|
||||
import './styles/main.css'
|
||||
import 'uno.css'
|
||||
|
||||
export default {
|
||||
extends: Theme,
|
||||
Layout: () => {
|
||||
return h(Theme.Layout, null, {
|
||||
// https://vitepress.dev/guide/extending-default-theme#layout-slots
|
||||
})
|
||||
},
|
||||
extends: DefaultTheme,
|
||||
// 使用包装组件重写布局
|
||||
Layout: CustomLayout,
|
||||
enhanceApp({ app, router, siteData }) {
|
||||
// ...
|
||||
app.use(MotionPlugin)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,70 @@
|
|||
export default {
|
||||
"company": '北京句末科技有限公司',
|
||||
"title": 'ISLENOTE',
|
||||
"desc": 'Record inspiration, arrange inspiration~',
|
||||
"desc.secondary": 'Continuously record and build a private knowledge base anytime, anywhere, in multiple ways',
|
||||
|
||||
"notify.test": 'Test notice',
|
||||
"register": 'Free registration',
|
||||
"guide": 'Get guide',
|
||||
"login": 'Log in now',
|
||||
"account": 'Existing account?',
|
||||
|
||||
"features": 'Features',
|
||||
"features.desc": 'From now on, record inspiration',
|
||||
"features.more": 'View more',
|
||||
"features.faster": 'Faster recording',
|
||||
"features.faster.desc": 'You can easily and quickly capture your inspiration anytime, anywhere through WeChat, apps, web pages, WPA, plugins, custom API extensions, and other means, and synchronize across multiple platforms',
|
||||
"features.style": 'More styles',
|
||||
"features.style.desc": 'Feel free to edit styles, our editing portal supports most rich text editor styles and styles, just like using an online editor, and we also support Markdown format',
|
||||
"features.review": 'Better review',
|
||||
"features.review.desc": 'A concise labeling system, better management of records and inspiration, customized reviews, and diverse push notifications make your records and inspiration truly valuable“',
|
||||
"features.extend": 'Support extension',
|
||||
"features.extend.desc": 'Provide API extensions for more convenient and efficient data import, and discover more recording methods that are essential for hands-on players',
|
||||
"features.privacy": 'Data privacy',
|
||||
"features.privacy.desc": 'Protecting data privacy is our focus, and we will not profit from selling private data. Therefore, your subscription will support us to do better',
|
||||
"features.unlimited": 'No limits set at all',
|
||||
"features.unlimited.desc": 'Island is a platform that only provides users with more convenient and efficient data recording and storage, but data always belongs to individuals, and you can export and migrate it anytime, anywhere',
|
||||
|
||||
|
||||
"subscribe": 'Subscribe',
|
||||
"subscribe.desc": 'You can use it for free, but subscribing will give you a better experience!',
|
||||
"subscribe.more": 'View more',
|
||||
"subscribe.yearly": 'Yearly (more favorable)',
|
||||
"subscribe.monthly": 'Monthly',
|
||||
"subscribe.year": 'Year',
|
||||
"subscribe.month": 'Month',
|
||||
"subscribe.pu": 'Regular users',
|
||||
"subscribe.su": 'Subscription Users',
|
||||
"subscribe.su.desc1": 'No automatic renewal, limited time',
|
||||
"subscribe.su.desc2": 'fracture',
|
||||
"subscribe.free": 'Free',
|
||||
"subscribe.free.desc": 'General equity statement',
|
||||
"subscribe.sub.desc": 'Subscription Benefits Description',
|
||||
|
||||
"footer.desc1": 'This site is built based on the open-source project',
|
||||
"footer.desc2": '',
|
||||
"footer.desc3": 'All rights reserved',
|
||||
"footer.product": 'Product',
|
||||
"footer.product.web": 'Web',
|
||||
"footer.product.desktop": 'Desktop - PWA',
|
||||
"footer.product.mobile": 'Mobile',
|
||||
"footer.product.webplugin": 'Web Plugin',
|
||||
"footer.resource": 'Resource',
|
||||
"footer.resource.guide": 'Get Guide',
|
||||
"footer.resource.faq": 'FAQ',
|
||||
"footer.resource.extend": 'Extend API',
|
||||
"footer.team": 'Team',
|
||||
"footer.team.aboutus": 'About Us',
|
||||
"footer.team.origin": 'Product Origin',
|
||||
"footer.team.contactus": 'Contact Us',
|
||||
"footer.team.support": 'Online support',
|
||||
"footer.other": 'Other',
|
||||
"footer.other.ua": 'User Agreement',
|
||||
"footer.other.pa": 'Privacy Agreement',
|
||||
|
||||
"nofound.gohome": 'Go Home',
|
||||
"nofound.nopage": 'This page has flown away',
|
||||
"nofound.follow1": 'Follow WeChat official account',
|
||||
"nofound.follow2": 'Get the latest updates',
|
||||
}
|
|
@ -0,0 +1,14 @@
|
|||
import en from './en.js'
|
||||
import zh from './zh.js'
|
||||
|
||||
const hash = {
|
||||
en,zh
|
||||
}
|
||||
|
||||
export function t(loacle, key){
|
||||
return hash[loacle][key] || ''
|
||||
}
|
||||
|
||||
export function routerPath(locale, path){
|
||||
return (locale == 'en' ? '/en' : '') + path
|
||||
}
|
|
@ -0,0 +1,69 @@
|
|||
export default {
|
||||
"company": '北京句末科技有限公司',
|
||||
"title": '岛屿笔记',
|
||||
"desc": '记录灵感,编排灵感~',
|
||||
"desc.secondary": '随时随地、多种方式,持续记录,打造私人知识库',
|
||||
|
||||
"notify.test": '测试通告',
|
||||
"register": '免费注册',
|
||||
"guide": '快速了解',
|
||||
"login": '立即登录',
|
||||
"account": '已有帐号?',
|
||||
|
||||
"features": '特色',
|
||||
"features.desc": '从现在开始,记录灵感',
|
||||
"features.more": '查看更多',
|
||||
"features.faster": '更快记录',
|
||||
"features.faster.desc": '可以通过微信、APP、网页、WPA、插件、自定义 API 扩展等方式,随时随地更方便更快捷的抓住您的灵感,多平台同步',
|
||||
"features.style": '更多样式',
|
||||
"features.style.desc": '随心编辑样式,我们的编辑入口支持大多数富文本编辑器样式及风格,就像在使用一款在线编辑器,同时,我们也支持 Markdown 格式',
|
||||
"features.review": '更好回顾',
|
||||
"features.review.desc": '简洁的标签体系,更好的管理记录与灵感,自定义的回顾与多种多样的推送,让你的记录与灵感真正变得 ”有价值“',
|
||||
"features.extend": '支持扩展',
|
||||
"features.extend.desc": '提供 API 扩展,更方便快捷的导入数据,更多的记录方式等你发现,动手玩家必备',
|
||||
"features.privacy": '数据隐私',
|
||||
"features.privacy.desc": '保护数据隐私是我们的重心,我们不会通过贩卖隐私数据获得利润。因此,您的订阅将支持我们做得更好',
|
||||
"features.unlimited": '终不设限',
|
||||
"features.unlimited.desc": '岛屿是个平台,只为用户提供更方便快捷的数据记录与存储,但数据始终属于个人,您可以随时随地导出与迁移',
|
||||
|
||||
"subscribe": '订阅',
|
||||
"subscribe.desc": '您可以免费使用它,但订阅后将会获得更好地体验!',
|
||||
"subscribe.more": '查看更多',
|
||||
"subscribe.yearly": '按年(更优惠)',
|
||||
"subscribe.monthly": '按月',
|
||||
"subscribe.year": '年',
|
||||
"subscribe.month": '月',
|
||||
"subscribe.pu": '普通用户',
|
||||
"subscribe.su": '订阅用户',
|
||||
"subscribe.su.desc1": '无自动续费,限时',
|
||||
"subscribe.su.desc2": '折',
|
||||
"subscribe.free": '免费',
|
||||
"subscribe.free.desc": '普通权益说明',
|
||||
"subscribe.sub.desc": '订阅权益说明',
|
||||
|
||||
"footer.desc1": '本站基于开源项目',
|
||||
"footer.desc2": '构建',
|
||||
"footer.desc3": '版权所有',
|
||||
"footer.product": '产品',
|
||||
"footer.product.web": 'Web 端',
|
||||
"footer.product.desktop": '桌面端 - PWA',
|
||||
"footer.product.mobile": '移动端',
|
||||
"footer.product.webplugin": '网页插件',
|
||||
"footer.resource": '资源',
|
||||
"footer.resource.guide": '快速了解',
|
||||
"footer.resource.faq": '常见问题',
|
||||
"footer.resource.extend": '扩展API',
|
||||
"footer.team": '团队',
|
||||
"footer.team.aboutus": '关于我们',
|
||||
"footer.team.origin": '产品起源',
|
||||
"footer.team.contactus": '联系我们',
|
||||
"footer.team.support": '在线支持',
|
||||
"footer.other": '其他',
|
||||
"footer.other.ua": '用户协议',
|
||||
"footer.other.pa": '隐私协议',
|
||||
|
||||
"nofound.gohome": '回首页',
|
||||
"nofound.nopage": '这个页面飞走了',
|
||||
"nofound.follow1": '关注微信公众号',
|
||||
"nofound.follow2": '获取最新动态',
|
||||
}
|
|
@ -1,3 +1,21 @@
|
|||
.VPButton.brand{
|
||||
color: rgba(255, 255, 245, 0.86)!important;
|
||||
body{
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
/* font-family: "Serif-Medium"; */
|
||||
}
|
||||
|
||||
.VPLink.VPNavBarMenuLink{
|
||||
color: var(--vp-c-text-2);
|
||||
}
|
||||
|
||||
.VPLocalNav .outline{
|
||||
outline-style: none;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
@media ((min-width: 960px)) {
|
||||
.VPNavBar.top .divider-line{
|
||||
background: transparent!important;
|
||||
}
|
||||
} */
|
|
@ -1,28 +1,329 @@
|
|||
/**
|
||||
* Colors
|
||||
* Colors: Solid
|
||||
* -------------------------------------------------------------------------- */
|
||||
|
||||
:root {
|
||||
--vp-c-accent: #9bbaff;
|
||||
--vp-c-brand: #165dff;
|
||||
--vp-c-brand-dark: #165dff;
|
||||
--vp-c-text-code: #5d6f5d;
|
||||
/* --vp-code-block-bg: rgba(125, 125, 125, 0.04); */
|
||||
--vp-c-disabled-bg: rgba(125, 125, 125, 0.2);
|
||||
/* fix contrast on gray cards: used by --vp-c-text-2 */
|
||||
--vp-c-brand-light: #3774ff;
|
||||
--vp-c-text-light-2: rgba(56 56 56 / 70%);
|
||||
--cho-code-block-bg: rgba(125, 125, 125, 0.04);
|
||||
--vp-c-indigo-1: #598bff;
|
||||
--vp-c-indigo-2: #598bff;
|
||||
--vp-c-indigo-3: #9bbaff;
|
||||
--vp-c-white: #ffffff;
|
||||
--vp-c-black: #000000;
|
||||
|
||||
--vp-c-neutral: var(--vp-c-black);
|
||||
--vp-c-neutral-inverse: var(--vp-c-white);
|
||||
|
||||
--vp-c-shadow: 0 0 50px 0.5px rgba(0,0,0,0.2);
|
||||
}
|
||||
|
||||
.dark {
|
||||
--vp-code-block-bg: rgba(0, 0, 0, 0.2);
|
||||
--vp-c-text-code: #c0cec0;
|
||||
/* fix contrast on gray cards: check the same above (this is the default) */
|
||||
--vp-c-text-dark-2: rgba(235, 235, 235, 0.6);
|
||||
--vp-c-neutral: var(--vp-c-white);
|
||||
--vp-c-neutral-inverse: var(--vp-c-black);
|
||||
|
||||
--vp-c-shadow: 0 0 50px 0.5px rgba(255,255,255,0.1);
|
||||
}
|
||||
|
||||
/**
|
||||
* Colors: Palette
|
||||
*
|
||||
* The primitive colors used for accent colors. These colors are referenced
|
||||
* by functional colors such as "Text", "Background", or "Brand".
|
||||
*
|
||||
* Each colors have exact same color scale system with 3 levels of solid
|
||||
* colors with different brightness, and 1 soft color.
|
||||
*
|
||||
* - `XXX-1`: The most solid color used mainly for colored text. It must
|
||||
* satisfy the contrast ratio against when used on top of `XXX-soft`.
|
||||
*
|
||||
* - `XXX-2`: The color used mainly for hover state of the button.
|
||||
*
|
||||
* - `XXX-3`: The color for solid background, such as bg color of the button.
|
||||
* It must satisfy the contrast ratio with pure white (#ffffff) text on
|
||||
* top of it.
|
||||
*
|
||||
* - `XXX-soft`: The color used for subtle background such as custom container
|
||||
* or badges. It must satisfy the contrast ratio when putting `XXX-1` colors
|
||||
* on top of it.
|
||||
*
|
||||
* The soft color must be semi transparent alpha channel. This is crucial
|
||||
* because it allows adding multiple "soft" colors on top of each other
|
||||
* to create a accent, such as when having inline code block inside
|
||||
* custom containers.
|
||||
* -------------------------------------------------------------------------- */
|
||||
|
||||
:root {
|
||||
--vp-c-gray-1: #dddde3;
|
||||
--vp-c-gray-2: #e4e4e9;
|
||||
--vp-c-gray-3: #ebebef;
|
||||
--vp-c-gray-soft: rgba(142, 150, 170, 0.14);
|
||||
|
||||
--vp-c-indigo-1: rgb(37, 99, 235);
|
||||
--vp-c-indigo-2: #4479ee;
|
||||
--vp-c-indigo-3: #6390f1;
|
||||
--vp-c-indigo-soft: rgba(100, 108, 255, 0.14);
|
||||
|
||||
--vp-c-purple-1: #6f42c1;
|
||||
--vp-c-purple-2: #7e4cc9;
|
||||
--vp-c-purple-3: #8e5cd9;
|
||||
--vp-c-purple-soft: rgba(159, 122, 234, 0.14);
|
||||
|
||||
--vp-c-green-1: #18794e;
|
||||
--vp-c-green-2: #299764;
|
||||
--vp-c-green-3: #30a46c;
|
||||
--vp-c-green-soft: rgba(16, 185, 129, 0.14);
|
||||
|
||||
--vp-c-yellow-1: #915930;
|
||||
--vp-c-yellow-2: #946300;
|
||||
--vp-c-yellow-3: #9f6a00;
|
||||
--vp-c-yellow-soft: rgba(234, 179, 8, 0.14);
|
||||
|
||||
--vp-c-red-1: #b8272c;
|
||||
--vp-c-red-2: #d5393e;
|
||||
--vp-c-red-3: #e0575b;
|
||||
--vp-c-red-soft: rgba(244, 63, 94, 0.14);
|
||||
|
||||
--vp-c-sponsor: #db2777;
|
||||
}
|
||||
|
||||
.dark {
|
||||
--vp-c-gray-1: #515c67;
|
||||
--vp-c-gray-2: #414853;
|
||||
--vp-c-gray-3: #32363f;
|
||||
--vp-c-gray-soft: rgba(101, 117, 133, 0.16);
|
||||
|
||||
--vp-c-indigo-1: rgb(59, 130, 246);
|
||||
--vp-c-indigo-2: #5794f7;
|
||||
--vp-c-indigo-3: #73a6f9;
|
||||
--vp-c-indigo-soft: rgba(100, 108, 255, 0.16);
|
||||
|
||||
--vp-c-purple-1: #c8abfa;
|
||||
--vp-c-purple-2: #a879e6;
|
||||
--vp-c-purple-3: #8e5cd9;
|
||||
--vp-c-purple-soft: rgba(159, 122, 234, 0.16);
|
||||
|
||||
--vp-c-green-1: #3dd68c;
|
||||
--vp-c-green-2: #30a46c;
|
||||
--vp-c-green-3: #298459;
|
||||
--vp-c-green-soft: rgba(16, 185, 129, 0.16);
|
||||
|
||||
--vp-c-yellow-1: #f9b44e;
|
||||
--vp-c-yellow-2: #da8b17;
|
||||
--vp-c-yellow-3: #a46a0a;
|
||||
--vp-c-yellow-soft: rgba(234, 179, 8, 0.16);
|
||||
|
||||
--vp-c-red-1: #f66f81;
|
||||
--vp-c-red-2: #f14158;
|
||||
--vp-c-red-3: #b62a3c;
|
||||
--vp-c-red-soft: rgba(244, 63, 94, 0.16);
|
||||
}
|
||||
|
||||
/**
|
||||
* Colors: Background
|
||||
*
|
||||
* - `bg`: The bg color used for main screen.
|
||||
*
|
||||
* - `bg-alt`: The alternative bg color used in places such as "sidebar",
|
||||
* or "code block".
|
||||
*
|
||||
* - `bg-elv`: The elevated bg color. This is used at parts where it "floats",
|
||||
* such as "dialog".
|
||||
*
|
||||
* - `bg-soft`: The bg color to slightly distinguish some components from
|
||||
* the page. Used for things like "carbon ads" or "table".
|
||||
* -------------------------------------------------------------------------- */
|
||||
|
||||
:root {
|
||||
--vp-c-bg: rgb(250,250,250);
|
||||
--vp-c-bg-alt: #f6f6f7;
|
||||
--vp-c-bg-elv: #ffffff;
|
||||
--vp-c-bg-soft: #f6f6f7;
|
||||
}
|
||||
|
||||
.dark {
|
||||
--vp-c-bg: rgb(10,10,10);
|
||||
--vp-c-bg-alt: #161618;
|
||||
--vp-c-bg-elv: #202127;
|
||||
--vp-c-bg-soft: #202127;
|
||||
}
|
||||
|
||||
/**
|
||||
* Colors: Borders
|
||||
*
|
||||
* - `divider`: This is used for separators. This is used to divide sections
|
||||
* within the same components, such as having separator on "h2" heading.
|
||||
*
|
||||
* - `border`: This is designed for borders on interactive components.
|
||||
* For example this should be used for a button outline.
|
||||
*
|
||||
* - `gutter`: This is used to divide components in the page. For example
|
||||
* the header and the lest of the page.
|
||||
* -------------------------------------------------------------------------- */
|
||||
|
||||
:root {
|
||||
--vp-c-border: #c2c2c4;
|
||||
--vp-c-divider: #e2e2e3;
|
||||
--vp-c-gutter: #e2e2e3;
|
||||
}
|
||||
|
||||
.dark {
|
||||
--vp-c-border: #3c3f44;
|
||||
--vp-c-divider: #2e2e32;
|
||||
--vp-c-gutter: #000000;
|
||||
}
|
||||
|
||||
/**
|
||||
* Colors: Text
|
||||
*
|
||||
* - `text-1`: Used for primary text.
|
||||
*
|
||||
* - `text-2`: Used for muted texts, such as "inactive menu" or "info texts".
|
||||
*
|
||||
* - `text-3`: Used for subtle texts, such as "placeholders" or "caret icon".
|
||||
* -------------------------------------------------------------------------- */
|
||||
|
||||
:root {
|
||||
--vp-c-text-1: rgba(60, 60, 67);
|
||||
--vp-c-text-2: rgba(60, 60, 67, 0.78);
|
||||
--vp-c-text-3: rgba(60, 60, 67, 0.56);
|
||||
}
|
||||
|
||||
.dark {
|
||||
--vp-c-text-1: rgba(255, 255, 245, 0.86);
|
||||
--vp-c-text-2: rgba(235, 235, 245, 0.6);
|
||||
--vp-c-text-3: rgba(235, 235, 245, 0.38);
|
||||
}
|
||||
|
||||
/**
|
||||
* Colors: Function
|
||||
*
|
||||
* - `default`: The color used purely for subtle indication without any
|
||||
* special meanings attached to it such as bg color for menu hover state.
|
||||
*
|
||||
* - `brand`: Used for primary brand colors, such as link text, button with
|
||||
* brand theme, etc.
|
||||
*
|
||||
* - `tip`: Used to indicate useful information. The default theme uses the
|
||||
* brand color for this by default.
|
||||
*
|
||||
* - `warning`: Used to indicate warning to the users. Used in custom
|
||||
* container, badges, etc.
|
||||
*
|
||||
* - `danger`: Used to show error, or dangerous message to the users. Used
|
||||
* in custom container, badges, etc.
|
||||
*
|
||||
* To understand the scaling system, refer to "Colors: Palette" section.
|
||||
* -------------------------------------------------------------------------- */
|
||||
|
||||
:root {
|
||||
--vp-c-default-1: var(--vp-c-gray-1);
|
||||
--vp-c-default-2: var(--vp-c-gray-2);
|
||||
--vp-c-default-3: var(--vp-c-gray-3);
|
||||
--vp-c-default-soft: var(--vp-c-gray-soft);
|
||||
|
||||
--vp-c-brand-1: var(--vp-c-indigo-1);
|
||||
--vp-c-brand-2: var(--vp-c-indigo-2);
|
||||
--vp-c-brand-3: var(--vp-c-indigo-3);
|
||||
--vp-c-brand-soft: var(--vp-c-indigo-soft);
|
||||
|
||||
/* DEPRECATED: Use `--vp-c-brand-1` instead. */
|
||||
--vp-c-brand: var(--vp-c-brand-1);
|
||||
|
||||
--vp-c-tip-1: var(--vp-c-brand-1);
|
||||
--vp-c-tip-2: var(--vp-c-brand-2);
|
||||
--vp-c-tip-3: var(--vp-c-brand-3);
|
||||
--vp-c-tip-soft: var(--vp-c-brand-soft);
|
||||
|
||||
--vp-c-note-1: var(--vp-c-brand-1);
|
||||
--vp-c-note-2: var(--vp-c-brand-2);
|
||||
--vp-c-note-3: var(--vp-c-brand-3);
|
||||
--vp-c-note-soft: var(--vp-c-brand-soft);
|
||||
|
||||
--vp-c-success-1: var(--vp-c-green-1);
|
||||
--vp-c-success-2: var(--vp-c-green-2);
|
||||
--vp-c-success-3: var(--vp-c-green-3);
|
||||
--vp-c-success-soft: var(--vp-c-green-soft);
|
||||
|
||||
--vp-c-important-1: var(--vp-c-purple-1);
|
||||
--vp-c-important-2: var(--vp-c-purple-2);
|
||||
--vp-c-important-3: var(--vp-c-purple-3);
|
||||
--vp-c-important-soft: var(--vp-c-purple-soft);
|
||||
|
||||
--vp-c-warning-1: var(--vp-c-yellow-1);
|
||||
--vp-c-warning-2: var(--vp-c-yellow-2);
|
||||
--vp-c-warning-3: var(--vp-c-yellow-3);
|
||||
--vp-c-warning-soft: var(--vp-c-yellow-soft);
|
||||
|
||||
--vp-c-danger-1: var(--vp-c-red-1);
|
||||
--vp-c-danger-2: var(--vp-c-red-2);
|
||||
--vp-c-danger-3: var(--vp-c-red-3);
|
||||
--vp-c-danger-soft: var(--vp-c-red-soft);
|
||||
|
||||
--vp-c-caution-1: var(--vp-c-red-1);
|
||||
--vp-c-caution-2: var(--vp-c-red-2);
|
||||
--vp-c-caution-3: var(--vp-c-red-3);
|
||||
--vp-c-caution-soft: var(--vp-c-red-soft);
|
||||
}
|
||||
|
||||
/**
|
||||
* Typography
|
||||
* -------------------------------------------------------------------------- */
|
||||
|
||||
:root {
|
||||
--vp-font-family-base: 'Inter', ui-sans-serif, system-ui, sans-serif,
|
||||
'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji';
|
||||
--vp-font-family-mono: ui-monospace, 'Menlo', 'Monaco', 'Consolas',
|
||||
'Liberation Mono', 'Courier New', monospace;
|
||||
font-optical-sizing: auto;
|
||||
}
|
||||
|
||||
:root:where(:lang(zh)) {
|
||||
--vp-font-family-base: 'Punctuation SC', 'Inter', ui-sans-serif, system-ui,
|
||||
'PingFang SC', 'Noto Sans CJK SC', 'Noto Sans SC', 'Heiti SC',
|
||||
'Microsoft YaHei', 'DengXian', sans-serif, 'Apple Color Emoji',
|
||||
'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji';
|
||||
}
|
||||
|
||||
/**
|
||||
* Shadows
|
||||
* -------------------------------------------------------------------------- */
|
||||
|
||||
:root {
|
||||
--vp-shadow-1: 0 1px 2px rgba(0, 0, 0, 0.04), 0 1px 2px rgba(0, 0, 0, 0.06);
|
||||
--vp-shadow-2: 0 3px 12px rgba(0, 0, 0, 0.07), 0 1px 4px rgba(0, 0, 0, 0.07);
|
||||
--vp-shadow-3: 0 12px 32px rgba(0, 0, 0, 0.1), 0 2px 6px rgba(0, 0, 0, 0.08);
|
||||
--vp-shadow-4: 0 14px 44px rgba(0, 0, 0, 0.12), 0 3px 9px rgba(0, 0, 0, 0.12);
|
||||
--vp-shadow-5: 0 18px 56px rgba(0, 0, 0, 0.16), 0 4px 12px rgba(0, 0, 0, 0.16);
|
||||
}
|
||||
|
||||
/**
|
||||
* Z-indexes
|
||||
* -------------------------------------------------------------------------- */
|
||||
|
||||
:root {
|
||||
--vp-z-index-footer: 10;
|
||||
--vp-z-index-local-nav: 20;
|
||||
--vp-z-index-nav: 30;
|
||||
--vp-z-index-layout-top: 40;
|
||||
--vp-z-index-backdrop: 50;
|
||||
--vp-z-index-sidebar: 60;
|
||||
}
|
||||
|
||||
@media (min-width: 960px) {
|
||||
:root {
|
||||
--vp-z-index-sidebar: 25;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Layouts
|
||||
* -------------------------------------------------------------------------- */
|
||||
|
||||
:root {
|
||||
--vp-layout-max-width: 1440px;
|
||||
}
|
||||
|
||||
/**
|
||||
* Component: Header Anchor
|
||||
* -------------------------------------------------------------------------- */
|
||||
|
||||
:root {
|
||||
--vp-header-anchor-symbol: '#';
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -30,11 +331,44 @@
|
|||
* -------------------------------------------------------------------------- */
|
||||
|
||||
:root {
|
||||
--vp-code-line-highlight-color: rgba(125, 125, 125, 0.2);
|
||||
}
|
||||
--vp-code-line-height: 1.7;
|
||||
--vp-code-font-size: 0.875em;
|
||||
--vp-code-color: var(--vp-c-brand-1);
|
||||
--vp-code-link-color: var(--vp-c-brand-1);
|
||||
--vp-code-link-hover-color: var(--vp-c-brand-2);
|
||||
--vp-code-bg: var(--vp-c-default-soft);
|
||||
|
||||
.dark {
|
||||
--vp-code-line-highlight-color: rgba(0, 0, 0, 0.5);
|
||||
--vp-code-block-color: var(--vp-c-text-2);
|
||||
--vp-code-block-bg: var(--vp-c-bg-alt);
|
||||
--vp-code-block-divider-color: var(--vp-c-gutter);
|
||||
|
||||
--vp-code-lang-color: var(--vp-c-text-3);
|
||||
|
||||
--vp-code-line-highlight-color: var(--vp-c-default-soft);
|
||||
--vp-code-line-number-color: var(--vp-c-text-3);
|
||||
|
||||
--vp-code-line-diff-add-color: var(--vp-c-success-soft);
|
||||
--vp-code-line-diff-add-symbol-color: var(--vp-c-success-1);
|
||||
|
||||
--vp-code-line-diff-remove-color: var(--vp-c-danger-soft);
|
||||
--vp-code-line-diff-remove-symbol-color: var(--vp-c-danger-1);
|
||||
|
||||
--vp-code-line-warning-color: var(--vp-c-warning-soft);
|
||||
--vp-code-line-error-color: var(--vp-c-danger-soft);
|
||||
|
||||
--vp-code-copy-code-border-color: var(--vp-c-divider);
|
||||
--vp-code-copy-code-bg: var(--vp-c-bg-soft);
|
||||
--vp-code-copy-code-hover-border-color: var(--vp-c-divider);
|
||||
--vp-code-copy-code-hover-bg: var(--vp-c-bg);
|
||||
--vp-code-copy-code-active-text: var(--vp-c-text-2);
|
||||
--vp-code-copy-copied-text-content: 'Copied';
|
||||
|
||||
--vp-code-tab-divider: var(--vp-code-block-divider-color);
|
||||
--vp-code-tab-text-color: var(--vp-c-text-2);
|
||||
--vp-code-tab-bg: var(--vp-code-block-bg);
|
||||
--vp-code-tab-hover-text-color: var(--vp-c-text-1);
|
||||
--vp-code-tab-active-text-color: var(--vp-c-text-1);
|
||||
--vp-code-tab-active-bar-color: var(--vp-c-brand-1);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -42,15 +376,139 @@
|
|||
* -------------------------------------------------------------------------- */
|
||||
|
||||
:root {
|
||||
--vp-button-brand-border: var(--vp-c-brand-light);
|
||||
--vp-button-brand-text: var(--vp-c-text-dark-1);
|
||||
--vp-button-brand-bg: var(--vp-c-brand);
|
||||
--vp-button-brand-hover-border: var(--vp-c-brand-light);
|
||||
--vp-button-brand-hover-text: var(--vp-c-text-dark-1);
|
||||
--vp-button-brand-hover-bg: var(--vp-c-brand-light);
|
||||
--vp-button-brand-active-border: var(--vp-c-brand-light);
|
||||
--vp-button-brand-active-text: var(--vp-c-text-dark-1);
|
||||
--vp-button-brand-active-bg: var(--vp-button-brand-bg);
|
||||
--vp-button-brand-border: transparent;
|
||||
--vp-button-brand-text: var(--vp-c-white);
|
||||
--vp-button-brand-bg: var(--vp-c-brand-3);
|
||||
--vp-button-brand-hover-border: transparent;
|
||||
--vp-button-brand-hover-text: var(--vp-c-white);
|
||||
--vp-button-brand-hover-bg: var(--vp-c-brand-2);
|
||||
--vp-button-brand-active-border: transparent;
|
||||
--vp-button-brand-active-text: var(--vp-c-white);
|
||||
--vp-button-brand-active-bg: var(--vp-c-brand-1);
|
||||
|
||||
--vp-button-alt-border: transparent;
|
||||
--vp-button-alt-text: var(--vp-c-text-1);
|
||||
--vp-button-alt-bg: var(--vp-c-default-3);
|
||||
--vp-button-alt-hover-border: transparent;
|
||||
--vp-button-alt-hover-text: var(--vp-c-text-1);
|
||||
--vp-button-alt-hover-bg: var(--vp-c-default-2);
|
||||
--vp-button-alt-active-border: transparent;
|
||||
--vp-button-alt-active-text: var(--vp-c-text-1);
|
||||
--vp-button-alt-active-bg: var(--vp-c-default-1);
|
||||
|
||||
--vp-button-sponsor-border: var(--vp-c-text-2);
|
||||
--vp-button-sponsor-text: var(--vp-c-text-2);
|
||||
--vp-button-sponsor-bg: transparent;
|
||||
--vp-button-sponsor-hover-border: var(--vp-c-sponsor);
|
||||
--vp-button-sponsor-hover-text: var(--vp-c-sponsor);
|
||||
--vp-button-sponsor-hover-bg: transparent;
|
||||
--vp-button-sponsor-active-border: var(--vp-c-sponsor);
|
||||
--vp-button-sponsor-active-text: var(--vp-c-sponsor);
|
||||
--vp-button-sponsor-active-bg: transparent;
|
||||
}
|
||||
|
||||
/**
|
||||
* Component: Custom Block
|
||||
* -------------------------------------------------------------------------- */
|
||||
|
||||
:root {
|
||||
--vp-custom-block-font-size: 14px;
|
||||
--vp-custom-block-code-font-size: 13px;
|
||||
|
||||
--vp-custom-block-info-border: transparent;
|
||||
--vp-custom-block-info-text: var(--vp-c-text-1);
|
||||
--vp-custom-block-info-bg: var(--vp-c-default-soft);
|
||||
--vp-custom-block-info-code-bg: var(--vp-c-default-soft);
|
||||
|
||||
--vp-custom-block-note-border: transparent;
|
||||
--vp-custom-block-note-text: var(--vp-c-text-1);
|
||||
--vp-custom-block-note-bg: var(--vp-c-default-soft);
|
||||
--vp-custom-block-note-code-bg: var(--vp-c-default-soft);
|
||||
|
||||
--vp-custom-block-tip-border: transparent;
|
||||
--vp-custom-block-tip-text: var(--vp-c-text-1);
|
||||
--vp-custom-block-tip-bg: var(--vp-c-tip-soft);
|
||||
--vp-custom-block-tip-code-bg: var(--vp-c-tip-soft);
|
||||
|
||||
--vp-custom-block-important-border: transparent;
|
||||
--vp-custom-block-important-text: var(--vp-c-text-1);
|
||||
--vp-custom-block-important-bg: var(--vp-c-important-soft);
|
||||
--vp-custom-block-important-code-bg: var(--vp-c-important-soft);
|
||||
|
||||
--vp-custom-block-warning-border: transparent;
|
||||
--vp-custom-block-warning-text: var(--vp-c-text-1);
|
||||
--vp-custom-block-warning-bg: var(--vp-c-warning-soft);
|
||||
--vp-custom-block-warning-code-bg: var(--vp-c-warning-soft);
|
||||
|
||||
--vp-custom-block-danger-border: transparent;
|
||||
--vp-custom-block-danger-text: var(--vp-c-text-1);
|
||||
--vp-custom-block-danger-bg: var(--vp-c-danger-soft);
|
||||
--vp-custom-block-danger-code-bg: var(--vp-c-danger-soft);
|
||||
|
||||
--vp-custom-block-caution-border: transparent;
|
||||
--vp-custom-block-caution-text: var(--vp-c-text-1);
|
||||
--vp-custom-block-caution-bg: var(--vp-c-caution-soft);
|
||||
--vp-custom-block-caution-code-bg: var(--vp-c-caution-soft);
|
||||
|
||||
--vp-custom-block-details-border: var(--vp-custom-block-info-border);
|
||||
--vp-custom-block-details-text: var(--vp-custom-block-info-text);
|
||||
--vp-custom-block-details-bg: var(--vp-custom-block-info-bg);
|
||||
--vp-custom-block-details-code-bg: var(--vp-custom-block-info-code-bg);
|
||||
}
|
||||
|
||||
/**
|
||||
* Component: Input
|
||||
* -------------------------------------------------------------------------- */
|
||||
|
||||
:root {
|
||||
--vp-input-border-color: var(--vp-c-border);
|
||||
--vp-input-bg-color: var(--vp-c-bg-alt);
|
||||
|
||||
--vp-input-switch-bg-color: var(--vp-c-default-soft);
|
||||
}
|
||||
|
||||
/**
|
||||
* Component: Nav
|
||||
* -------------------------------------------------------------------------- */
|
||||
|
||||
:root {
|
||||
--vp-nav-height: 64px;
|
||||
--vp-nav-bg-color: var(--vp-c-bg);
|
||||
--vp-nav-screen-bg-color: var(--vp-c-bg);
|
||||
--vp-nav-logo-height: 24px;
|
||||
}
|
||||
|
||||
.hide-nav {
|
||||
--vp-nav-height: 0px;
|
||||
}
|
||||
|
||||
.hide-nav .VPSidebar {
|
||||
--vp-nav-height: 22px;
|
||||
}
|
||||
|
||||
/**
|
||||
* Component: Local Nav
|
||||
* -------------------------------------------------------------------------- */
|
||||
|
||||
:root {
|
||||
--vp-local-nav-bg-color: var(--vp-c-bg);
|
||||
}
|
||||
|
||||
/**
|
||||
* Component: Sidebar
|
||||
* -------------------------------------------------------------------------- */
|
||||
|
||||
:root {
|
||||
--vp-sidebar-width: 272px;
|
||||
--vp-sidebar-bg-color: var(--vp-c-bg-alt);
|
||||
}
|
||||
|
||||
/**
|
||||
* Colors Backdrop
|
||||
* -------------------------------------------------------------------------- */
|
||||
|
||||
:root {
|
||||
--vp-backdrop-bg-color: rgba(0, 0, 0, 0.6);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -58,36 +516,57 @@
|
|||
* -------------------------------------------------------------------------- */
|
||||
|
||||
:root {
|
||||
--vp-home-hero-name-color: transparent;
|
||||
--vp-home-hero-name-background: -webkit-linear-gradient(
|
||||
120deg,
|
||||
#9bbaff -80%,
|
||||
#3774ff
|
||||
);
|
||||
--vp-home-hero-image-background-image: linear-gradient(
|
||||
-45deg,
|
||||
#3774ff 30%,
|
||||
#9bbaff80
|
||||
);
|
||||
--vp-home-hero-image-filter: blur(30px);
|
||||
}
|
||||
--vp-home-hero-name-color: var(--vp-c-brand-1);
|
||||
--vp-home-hero-name-background: transparent;
|
||||
|
||||
@media (min-width: 640px) {
|
||||
:root {
|
||||
--vp-home-hero-image-filter: blur(56px);
|
||||
}
|
||||
}
|
||||
|
||||
@media (min-width: 960px) {
|
||||
:root {
|
||||
--vp-home-hero-image-filter: blur(72px);
|
||||
}
|
||||
--vp-home-hero-image-background-image: none;
|
||||
--vp-home-hero-image-filter: none;
|
||||
}
|
||||
|
||||
/**
|
||||
* Component: Algolia
|
||||
* Component: Badge
|
||||
* -------------------------------------------------------------------------- */
|
||||
|
||||
.DocSearch {
|
||||
--docsearch-primary-color: var(--vp-c-brand) !important;
|
||||
:root {
|
||||
--vp-badge-info-border: transparent;
|
||||
--vp-badge-info-text: var(--vp-c-text-2);
|
||||
--vp-badge-info-bg: var(--vp-c-default-soft);
|
||||
|
||||
--vp-badge-tip-border: transparent;
|
||||
--vp-badge-tip-text: var(--vp-c-tip-1);
|
||||
--vp-badge-tip-bg: var(--vp-c-tip-soft);
|
||||
|
||||
--vp-badge-warning-border: transparent;
|
||||
--vp-badge-warning-text: var(--vp-c-warning-1);
|
||||
--vp-badge-warning-bg: var(--vp-c-warning-soft);
|
||||
|
||||
--vp-badge-danger-border: transparent;
|
||||
--vp-badge-danger-text: var(--vp-c-danger-1);
|
||||
--vp-badge-danger-bg: var(--vp-c-danger-soft);
|
||||
}
|
||||
|
||||
/**
|
||||
* Component: Carbon Ads
|
||||
* -------------------------------------------------------------------------- */
|
||||
|
||||
:root {
|
||||
--vp-carbon-ads-text-color: var(--vp-c-text-1);
|
||||
--vp-carbon-ads-poweredby-color: var(--vp-c-text-2);
|
||||
--vp-carbon-ads-bg-color: var(--vp-c-bg-soft);
|
||||
--vp-carbon-ads-hover-text-color: var(--vp-c-brand-1);
|
||||
--vp-carbon-ads-hover-poweredby-color: var(--vp-c-text-1);
|
||||
}
|
||||
|
||||
/**
|
||||
* Component: Local Search
|
||||
* -------------------------------------------------------------------------- */
|
||||
|
||||
:root {
|
||||
--vp-local-search-bg: var(--vp-c-bg);
|
||||
--vp-local-search-result-bg: var(--vp-c-bg);
|
||||
--vp-local-search-result-border: var(--vp-c-divider);
|
||||
--vp-local-search-result-selected-bg: var(--vp-c-bg);
|
||||
--vp-local-search-result-selected-border: var(--vp-c-brand-1);
|
||||
--vp-local-search-highlight-bg: var(--vp-c-brand-1);
|
||||
--vp-local-search-highlight-text: var(--vp-c-neutral-inverse);
|
||||
}
|
23
about.md
23
about.md
|
@ -1,23 +0,0 @@
|
|||
---
|
||||
outline: deep
|
||||
---
|
||||
|
||||
# 关于我们
|
||||
|
||||
`ISLENOTE 岛屿笔记` 是 [句末科技](https://sentenceend.com) 旗下的一款工具类产品。
|
||||
|
||||
和美式英语中岛屿的 `island` 不同,`isle` 是英式英语中岛屿的意思,`note` 则是笔记,所以岛屿笔记的英文以及域名都是 `islenote`。
|
||||
|
||||
你知道什么是岛屿吗?
|
||||
|
||||
`岛` 通常是指一个相对较大、有人居住或有明显地理特征的陆地,它被水体(通常是海洋)所包围。
|
||||
|
||||
`屿` 通常是指相对较小、不太有人居住或没有明显地理特征的陆地,它也被水体包围,但可能没有像岛那么大或重要。
|
||||
|
||||
所以我们的产品取 `岛屿` 二字,当然,它分为两个模块,`屿灵` 用来记录那些琐碎的灵感,`岛记` 用来编排我们记录的这些灵感。So,这也是岛屿笔记 `Slogan` 的来源: 记录灵感,编排灵感!
|
||||
|
||||
为了达到良好的用户体验,我们自始至终都在为产品做减法。岛屿专注于记&录,不同与市面上功能繁杂的笔记产品,岛屿的功能很简单,它的核心始终围绕在记录上。`屿灵` 让我们随时随地的记下那些虚无缥缈的灵感片段,我们做的是让用户可以能更便捷的记录下那些碎片化灵感;`岛记` 用最朴实的 `Markdown` 语法去编辑、去连接接我们的想法,你并不能看到一个功能复杂的笔记产品,我们做的只是在还原一款最基础的 `Markdown` 笔记的同时让灵感得以在笔记中填充。
|
||||
|
||||
可以再简单一点,其实我们做的只是让数据同步、让碎片连接,仅此而已!
|
||||
|
||||
哦,对,我想你应该知道 `Markdown`,否则,,,岛屿将帮不了你!
|
21
docs.md
21
docs.md
|
@ -1,21 +0,0 @@
|
|||
---
|
||||
outline: deep
|
||||
---
|
||||
|
||||
# 文档
|
||||
|
||||
<!-- info 普通 warning 重要 tip 提示 danger 危险 details 组合 -->
|
||||
|
||||
TODO
|
||||
|
||||
<!-- ::: info 2023-09-20
|
||||
句末科技官网上线!
|
||||
:::
|
||||
|
||||
::: info 2023-09-04
|
||||
句末科技网站备案成功!
|
||||
:::
|
||||
|
||||
::: warning 2023-08-24
|
||||
句末科技成立了!
|
||||
::: -->
|
|
@ -0,0 +1,9 @@
|
|||
---
|
||||
outline: deep
|
||||
footer: false
|
||||
---
|
||||
|
||||
# 关于我们
|
||||
|
||||
|
||||
和美式英语中岛屿的 `island` 不同,`isle` 是英式英语中岛屿的意思,所以岛屿笔记的英文是 `islenote`。
|
|
@ -0,0 +1,8 @@
|
|||
---
|
||||
outline: deep
|
||||
footer: false
|
||||
---
|
||||
|
||||
# 快速了解
|
||||
|
||||
TODO
|
|
@ -0,0 +1,28 @@
|
|||
---
|
||||
outline: deep
|
||||
footer: false
|
||||
---
|
||||
|
||||
# 联系我们
|
||||
|
||||
## 发送邮件
|
||||
|
||||
请发邮件至:
|
||||
|
||||
```
|
||||
islenote@sentenceend.com
|
||||
```
|
||||
|
||||
24 小时内无回复,请联系:
|
||||
|
||||
```
|
||||
lijianchao@sentenceend.com
|
||||
```
|
||||
|
||||
## 在线支持
|
||||
|
||||
请添加微信并备注 `岛屿笔记`:
|
||||
|
||||
```
|
||||
isboyjc_
|
||||
```
|
|
@ -0,0 +1,8 @@
|
|||
---
|
||||
outline: deep
|
||||
footer: false
|
||||
---
|
||||
|
||||
# 测试通告
|
||||
|
||||
TODO
|
|
@ -0,0 +1,9 @@
|
|||
---
|
||||
outline: deep
|
||||
footer: false
|
||||
---
|
||||
|
||||
# About Us
|
||||
|
||||
|
||||
Unlike the `island` in American English, `isle` means island in British English, so the English word for island notes is `islenote`.
|
|
@ -0,0 +1,8 @@
|
|||
---
|
||||
outline: deep
|
||||
footer: false
|
||||
---
|
||||
|
||||
# Guide
|
||||
|
||||
TODO
|
|
@ -0,0 +1,28 @@
|
|||
---
|
||||
outline: deep
|
||||
footer: false
|
||||
---
|
||||
|
||||
# Contact Us
|
||||
|
||||
## Send email
|
||||
|
||||
Please send an email to:
|
||||
|
||||
```
|
||||
islenote@sentenceend.com
|
||||
```
|
||||
|
||||
No response within 24 hours, please contact:
|
||||
|
||||
```
|
||||
lijianchao@sentenceend.com
|
||||
```
|
||||
|
||||
## Online Support
|
||||
|
||||
Please add WeChat and note 'islenote':
|
||||
|
||||
```
|
||||
isboyjc_
|
||||
```
|
|
@ -0,0 +1,8 @@
|
|||
---
|
||||
outline: deep
|
||||
footer: false
|
||||
---
|
||||
|
||||
# Test Notice
|
||||
|
||||
TODO
|
|
@ -0,0 +1,10 @@
|
|||
---
|
||||
# https://vitepress.dev/reference/default-theme-home-page
|
||||
layout: home
|
||||
sidebar: false
|
||||
title: ISLENOTE
|
||||
titleTemplate: "Record inspiration, arrange inspiration~"
|
||||
|
||||
---
|
||||
|
||||
<CustomHome />
|
30
index.md
30
index.md
|
@ -2,33 +2,9 @@
|
|||
# https://vitepress.dev/reference/default-theme-home-page
|
||||
layout: home
|
||||
sidebar: false
|
||||
title: 岛屿笔记 | ISLENOTE
|
||||
titleTemplate: "记录灵感,编排灵感"
|
||||
title: 岛屿笔记
|
||||
titleTemplate: "记录灵感,编排灵感~"
|
||||
|
||||
hero:
|
||||
name: "\n屿灵 · 记录灵感"
|
||||
text: " 岛记 · 编排灵感"
|
||||
tagline: " "
|
||||
image:
|
||||
src: /svg/undraw_inspiration_re_ivlv.svg
|
||||
alt: "图片未加载..."
|
||||
actions:
|
||||
- theme: brand
|
||||
text: "立即登录"
|
||||
link: https://v.islenote.com/login
|
||||
- theme: alt
|
||||
text: "免费注册"
|
||||
link: https://v.islenote.com/register
|
||||
|
||||
# features:
|
||||
# - title: 创新
|
||||
# icon: 💡
|
||||
# details: 创新驱动发展,致力于推动产研创新,让体验更好。
|
||||
# - title: 生活
|
||||
# icon: 🌟
|
||||
# details: 凭借先进的技术和持续的创新,不断为生活带来惊喜。
|
||||
# - title: 技术
|
||||
# icon: 🖥️
|
||||
# details: 以创新为动力,以技术为支撑,让生活更加智能化、便捷化。
|
||||
---
|
||||
|
||||
<CustomHome />
|
28
package.json
28
package.json
|
@ -5,13 +5,37 @@
|
|||
"private": true,
|
||||
"author": "isboyjc",
|
||||
"type": "module",
|
||||
"keywords": [],
|
||||
"keywords": [
|
||||
"islenote",
|
||||
"ISLENOTE",
|
||||
"岛屿",
|
||||
"岛屿笔记",
|
||||
"editor",
|
||||
"note",
|
||||
"isboyjc",
|
||||
"记录灵感",
|
||||
"record inspiration",
|
||||
"编排灵感",
|
||||
"arrange inspiration"
|
||||
],
|
||||
"devDependencies": {
|
||||
"vitepress": "^1.0.0-rc.14"
|
||||
"@iconify-json/lucide": "^1.1.188",
|
||||
"@iconify-json/material-symbols": "^1.1.81",
|
||||
"@unocss/transformer-directives": "^0.60.4",
|
||||
"@unocss/transformer-variant-group": "^0.60.4",
|
||||
"unocss": "^0.60.4",
|
||||
"unplugin-icons": "^0.19.0",
|
||||
"unplugin-vue-components": "^0.27.0",
|
||||
"vitepress": "^1.2.2",
|
||||
"vue": "^3.4.27"
|
||||
},
|
||||
"scripts": {
|
||||
"docs:dev": "vitepress dev",
|
||||
"docs:build": "vitepress build",
|
||||
"docs:preview": "vitepress preview"
|
||||
},
|
||||
"dependencies": {
|
||||
"@vueuse/motion": "^2.2.3",
|
||||
"vite": "^5.2.12"
|
||||
}
|
||||
}
|
2753
pnpm-lock.yaml
2753
pnpm-lock.yaml
File diff suppressed because it is too large
Load Diff
Binary file not shown.
After Width: | Height: | Size: 427 KiB |
Binary file not shown.
After Width: | Height: | Size: 431 KiB |
|
@ -0,0 +1 @@
|
|||
<svg t="1697221162679" class="icon" viewBox="0 0 1216 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="15246"><path d="M393.536 278.272c32.736-64.704 61.728-117.12 110.784-154.848 57.792-44.48 113.984-44.48 172.032 0.48 48.8 37.888 77.856 90.304 105.408 145.056 3.552-1.152 6.656-2.752 9.408-4.8l-0.096 0.064c77.152-78.496 148.736-74.656 212.416 13.888 53.632 74.4 72.736 161.504 85.984 250.304 1.92 12.768-3.36 17.024-15.008 16.704h-24.096c-307.456 0-614.88-0.48-922.336 0.736-34.592 0-42.624-8.032-35.488-42.304 13.728-66.72 28.896-132.448 61.888-192.736a252.48 252.48 0 0 1 48.064-63.744l0.096-0.096c55.552-51.68 115.424-51.68 170.016 0.8 7.456 8.96 14.4 18.944 20.416 29.504l0.544 1.024z m3.776 477.312c-24.096 0.64-57.792-16.928-88.288-42.4-51.456-42.784-72.256-41.728-126.816-2.336-12.608 9.056-24.96 40.128-46.144 16.608-30.272-33.312-28.576-65.664-1.376-87.168 77.696-61.568 146.656-60.928 224.032 2.08 42.304 34.528 67.904 36.352 109.568 2.656 71.776-57.952 152.512-75.552 235.776 4.576 26.816 25.76 57.952 24.096 88.288 5.696 13.632-8.032 25.376-19.424 38.528-28.512 73.536-50.88 185.344-34.048 230.784 39.648 13.408 21.664-9.536 49.6-22.4 71.136-10.848 18.144-25.76-0.64-32.096-7.392-57.568-61.088-109.344-53.952-172.096-1.696-56.192 46.464-129.312 34.912-186.944-13.568-52.672-44.32-69.984-44.544-125.152-1.92-42.048 32.672-68.704 43.36-125.632 42.56z m339.712 176.608c-21.824 0-54.016-16.704-83.232-41.728-48.8-41.888-69.984-42.24-118.72-3.776-80.288 63.168-144.48 62.944-222.688-0.896-21.024-17.024-42.208-32.096-72.256-26.016-13.472 2.72-61.664-45.28-61.664-59.168s11.552-12.288 19.584-15.584c59.168-24.096 112.384-10.528 160.544 27.52 59.072 46.304 70.72 46.56 131.744 0.8 73.696-55.232 142.72-54.176 210.784 3.2 47.52 40.128 68.64 41.088 118.976 2.496 45.12-34.592 92.384-57.152 151.392-40.704 27.36 8.032 40.128 17.408 16.064 43.264-17.728 18.88-30.496 40.864-64.224 38.848-23.36-1.376-42.784 19.104-61.664 34.112-31.616 24.736-66.72 38.944-124.672 37.568z" p-id="15247"></path></svg>
|
After Width: | Height: | Size: 2.0 KiB |
13
support.md
13
support.md
|
@ -1,13 +0,0 @@
|
|||
# 在线支持
|
||||
|
||||
请发邮件至:
|
||||
|
||||
```
|
||||
islenote@sentenceend.com
|
||||
```
|
||||
|
||||
24 小时内无回复,请联系我:
|
||||
|
||||
```
|
||||
lijianchao@sentenceend.com
|
||||
```
|
|
@ -0,0 +1,46 @@
|
|||
/*
|
||||
* @LastEditTime: 2024-06-03 16:00:11
|
||||
* @Description: unocss 配置
|
||||
* @Date: 2023-06-26 04:22:50
|
||||
* @Author: isboyjc
|
||||
* @LastEditors: isboyjc
|
||||
*/
|
||||
import { presetAttributify, presetUno, defineConfig } from "unocss";
|
||||
// Unocss 指令插件
|
||||
import transformerDirectives from '@unocss/transformer-directives'
|
||||
// 变体组 指令插件
|
||||
// 使用: <div class="hover:(bg-gray-400 font-medium) font-(light mono)"/>
|
||||
// 转化: <div class="hover:bg-gray-400 hover:font-medium font-light font-mono"/>
|
||||
import transformerVariantGroup from '@unocss/transformer-variant-group'
|
||||
|
||||
export default defineConfig({
|
||||
// 快捷方式
|
||||
shortcuts: {
|
||||
'flex-center': 'flex justify-center items-center',
|
||||
'flex-justify-center': 'flex justify-center',
|
||||
'flex-items-center': 'flex items-center'
|
||||
// 'border-main': 'border-gray-400 border-opacity-30',
|
||||
// 'bg-main': 'bg-gray-400',
|
||||
// 'bg-base': 'bg-white dark:bg-hex-1a1a1a',
|
||||
},
|
||||
presets: [
|
||||
presetUno(),
|
||||
presetAttributify({
|
||||
prefix: 'uno-',
|
||||
prefixedOnly: true, // <--
|
||||
})
|
||||
],
|
||||
// 主题
|
||||
theme: {
|
||||
colors: {
|
||||
primary: 'var(--vp-c-indigo-1)',
|
||||
},
|
||||
fontFamily: {
|
||||
mono: 'var(--vt-font-family-mono)',
|
||||
},
|
||||
},
|
||||
transformers: [
|
||||
transformerDirectives(),
|
||||
transformerVariantGroup(),
|
||||
],
|
||||
})
|
Loading…
Reference in New Issue