This commit is contained in:
Greyson 2024-05-27 19:21:15 +08:00
commit dcf2660672
27 changed files with 313 additions and 162 deletions

View File

@ -1,9 +0,0 @@
{
"extends": [
"@antfu",
"@unocss"
],
"rules": {
"@typescript-eslint/ban-ts-comment":"off"
}
}

View File

@ -0,0 +1,71 @@
name: Gitea Actions Demo
run-name: ${{ gitea.actor }} is testing out Gitea Actions 🚀
on: [push]
jobs:
Explore-Gitea-Actions:
runs-on: linux
# container: node:21
# container:
# image: ghcr.nju.edu.cn/catthehacker/ubuntu:act-latest
# volumes:
# - /run/docker.sock:/run/docker.sock
# env:
# DOCKER_ORG: gitea
# DOCKER_LATEST: latest
steps:
# - run: echo "testseetsetsetstse"
# - name: To Main
# run:
# - name: Git
# run: git clone http://www.topverse.world:3000/huxin/TOPVERSE_Official /opt/workspace/website
- name: Install
run: cd /opt/workspace/TOPVERSE_Official && ./deploy.sh
# - name: Build
# run: cd /opt/workspace/TOPVERSE_Official && pnpm build
# - name: Build
# run:
# - name: Deploy
# run: |
# - name: Checkout
# uses: actions/checkout@v4
# with:
# fetch-depth: 0 # all history for all branches and tags
# - name: Set up QEMU
# uses: docker/setup-qemu-action@v3
# - name: Set up Docker BuildX
# uses: docker/setup-buildx-action@v3
# - name: Login to DockerHub
# uses: docker/login-action@v3
# with:
# username: ${{ secrets.DOCKER_USERNAME }}
# password: ${{ secrets.DOCKER_PASSWORD }}
# - name: Get Meta
# id: meta
# run: |
# echo REPO_NAME=$(echo ${GITHUB_REPOSITORY} | awk -F"/" '{print $2}') >> $GITHUB_OUTPUT
# echo REPO_VERSION=$(git describe --tags --always | sed 's/^v//') >> $GITHUB_OUTPUT
# - name: Build and push
# uses: docker/build-push-action@v5
# with:
# context: .
# file: ./Dockerfile
# platforms: |
# linux/amd64
# linux/arm64
# push: true
# tags: |
# ${{ env.DOCKER_ORG }}/${{ steps.meta.outputs.REPO_NAME }}:${{ env.DOCKER_LATEST }}
# - run: docker build -t website-v1:latest "."
# - run: docker rm -f website-v1 || true
# - run: docker run -d -p 19555:80 --restart=unless-stopped --name website-v1 website-v1
# - run: docker rmi $(docker images -f "dangling=true" -q) || true
# - run: docker ps

51
.vscode/settings.json vendored
View File

@ -7,5 +7,54 @@
"*.css": "postcss"
},
"editor.formatOnSave": false,
"typescript.tsdk": "node_modules/typescript/lib"
"typescript.tsdk": "node_modules/typescript/lib",
"i18n-ally.localesPaths": [
"locales"
],
// Enable the ESlint flat config support
// (remove this if your ESLint extension above v3.0.5)
"eslint.experimental.useFlatConfig": true,
// Disable the default formatter, use eslint instead
"prettier.enable": false,
"editor.formatOnSave": false,
// Auto fix
"editor.codeActionsOnSave": {
"source.fixAll.eslint": "explicit",
"source.organizeImports": "never"
},
// Silent the stylistic rules in you IDE, but still auto fix them
"eslint.rules.customizations": [
{ "rule": "style/*", "severity": "off" },
{ "rule": "format/*", "severity": "off" },
{ "rule": "*-indent", "severity": "off" },
{ "rule": "*-spacing", "severity": "off" },
{ "rule": "*-spaces", "severity": "off" },
{ "rule": "*-order", "severity": "off" },
{ "rule": "*-dangle", "severity": "off" },
{ "rule": "*-newline", "severity": "off" },
{ "rule": "*quotes", "severity": "off" },
{ "rule": "*semi", "severity": "off" }
],
// Enable eslint for all supported languages
"eslint.validate": [
"javascript",
"javascriptreact",
"typescript",
"typescriptreact",
"vue",
"html",
"markdown",
"json",
"jsonc",
"yaml",
"toml",
"xml",
"gql",
"graphql",
"astro"
]
}

View File

@ -1,20 +1,37 @@
FROM node:lts-alpine3.17
FROM node:21 AS build
# 容器内的目录通常我们会使用 app 目录
WORKDIR /app
# 拷贝项目文件到容器/app下
COPY . .
RUN mkdir -p /web
# ARG env_file
COPY . /web
WORKDIR /web
RUN npm config set registry https://registry.npm.taobao.org
RUN npm config set registry https://registry.npmmirror.com
RUN npm install -g pnpm
RUN pnpm config set registry https://registry.npmmirror.com
# 下载编译
RUN pnpm i
RUN pnpm build
# RUN rm -rf node_module
# RUN pnpm build
RUN pnpm generate
# RUN yarn config set registry https://registry.npmmirror.com
# RUN yarn
# RUN yarn build
# RUN yarn generate
ENV HOST 0.0.0.0
ENV PORT 3000
EXPOSE 3000
CMD ["pnpm", "start"]
# nginx默认暴露80端口
FROM nginx
# 更换工作目录到nginx服务目录下
WORKDIR /usr/share/nginx/html
# 删除服务下可能存在的无用项目
RUN rm -rf ./*
# 复制自定义的 Nginx 配置文件
COPY nginx.conf /etc/nginx/nginx.conf
# 拷贝打包的文件
COPY --from=build /app/dist .

View File

@ -6,7 +6,7 @@ const footer = useFoot()
<template>
<!-- <Divider /> -->
<div class="grid-row grid-cols-2 p-20 pt-30 lg:(grid-cols-3) md:(px-30) xl:px-60">
<div class="grid grid-cols-2 p-20 pt-30 lg:(grid-cols-3) md:(px-30) xl:px-60">
<div
v-for="(col, i) in footer.links"
:key="i"

View File

@ -4,7 +4,7 @@ $defineProps<{
topic: string
description?: string
href: string
imgClass: string
imgClass?: string
}>()
</script>

View File

@ -45,7 +45,7 @@ const flag: any = {
{{ $t(nav.title) }}
</div>
<div class="grid-row gap-1 sm:grid-cols-2">
<div class="grid gap-1 sm:grid-cols-2">
<LocaleNuxtLink v-for="(item, index) in nav.child" :key="index" :href="item.href" class="w-full overflow-hidden rounded py-1 hover:(bg-primary/20)" active-class="bg-primary/20">
<AListItem
class="[--a-spacing:1] max-w-300px"

View File

@ -21,7 +21,7 @@ const colors = [
<template>
<Section>
<Typography :topic="$t(topic)" />
<div class="grid-row gap-10 pt-20 md:(grid-cols-2)" :class="`lg:grid-cols-${content.length}`">
<div class="grid gap-10 pt-20 md:(grid-cols-2)" :class="`lg:grid-cols-${content.length}`">
<div
v-for="(col, i) in content"
:key="i"

View File

@ -1,16 +0,0 @@
export function useCount() {
const count = useState('count', () => Math.round(Math.random() * 20))
function inc() {
count.value += 1
}
function dec() {
count.value -= 1
}
return {
count,
inc,
dec,
}
}

View File

@ -1,34 +0,0 @@
import { acceptHMRUpdate, defineStore } from 'pinia'
export const useUserStore = defineStore('user', () => {
/**
* Current named of the user.
*/
const savedName = ref('')
const previousNames = ref(new Set<string>())
const usedNames = computed(() => Array.from(previousNames.value))
const otherNames = computed(() => usedNames.value.filter(name => name !== savedName.value))
/**
* Changes the current name of the user and saves the one that was used
* before.
*
* @param name - new name to set
*/
function setNewName(name: string) {
if (savedName.value)
previousNames.value.add(savedName.value)
savedName.value = name
}
return {
setNewName,
otherNames,
savedName,
}
})
if (import.meta.hot)
import.meta.hot.accept(acceptHMRUpdate(useUserStore, import.meta.hot))

10
deploy.sh Executable file
View File

@ -0,0 +1,10 @@
#!/bin/bash
docker build -t website-v1:latest "."
docker rm -f website-v1 || true
docker run -d -p 19555:80 --restart=unless-stopped --name website-v1 website-v1
docker rmi $(docker images -f "dangling=true" -q) || true
docker ps

6
eslint.config.mjs Normal file
View File

@ -0,0 +1,6 @@
import antfu from '@antfu/eslint-config'
export default antfu({
unocss: true,
vue: true,
})

64
nginx.conf Normal file
View File

@ -0,0 +1,64 @@
# 设置运行 Nginx 的用户
user nginx;
# 启动的 worker 进程数量,一般设置为 autoNginx 会自动根据 CPU 数量设置合适的数量
worker_processes auto;
# 错误日志路径和级别
error_log /var/log/nginx/error.log warn;
# PID 文件路径
pid /var/run/nginx.pid;
# 定义全局事件
events {
# 最大连接数
worker_connections 1024;
}
# 定义 HTTP 服务器
http {
# 包含 MIME 类型的文件
include /etc/nginx/mime.types;
# 默认 MIME 类型
default_type application/octet-stream;
# 自定义的 Nginx 配置
server {
# 监听的端口
listen 80;
# 服务器名称
server_name localhost;
location / {
# 网站根目录,此处使用容器内的路径
root /usr/share/nginx/html;
# 默认首页
index index.html;
# 尝试从磁盘找到请求的文件,如果不存在则跳转到 index.html
try_files $uri $uri/ /index.html;
}
# location ^~ /api/ {
# proxy_set_header Host $host;
# proxy_set_header X-Real-IP $remote_addr;
# proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# proxy_set_header X-NginX-Proxy true;
# #下面两个必须设置请求头设置为ws请求方式
# proxy_set_header Upgrade $http_upgrade;
# proxy_set_header Connection "upgrade";
# proxy_pass http://192.168.41.101:28003/;
# }
# location /api/login/ {
# # rewrite ^/wsUrl/(.*)$ /$1 break; #拦截标识去除
# proxy_pass http://192.168.41.101:28003/; #这里是http不是ws不用怀疑代理的ip和port写ws访问的实际地址
# proxy_http_version 1.1; #这里必须使用http 1.1
# #下面两个必须设置请求头设置为ws请求方式
# proxy_set_header Upgrade $http_upgrade;
# proxy_set_header Connection "upgrade";
# }
}
}

View File

@ -9,17 +9,11 @@ export default defineNuxtConfig({
modules: [
'@vueuse/nuxt',
'@anu-vue/nuxt',
'@unocss/nuxt',
'@pinia/nuxt',
'@nuxtjs/i18n',
// '@nuxtjs/strapi',
'@unocss/nuxt',
'@nuxtjs/i18n',
'@vue-macros/nuxt',
'@nuxt/content',
'@nuxtjs/color-mode',
'@vite-pwa/nuxt',
// '@aceforth/nuxt-optimized-images',
// '@vueuse/components',
// '@nuxt/image',
'@nuxtjs/color-mode',
'@nuxt/devtools',
],
@ -28,19 +22,19 @@ export default defineNuxtConfig({
// clientDB: true
// }
// },
image: {
// provider:"static"
},
// image: {
// // provider:"static"
// },
// optimizedImages: {
// optimizeImages: true
// },
experimental: {
// when using generate, payload js assets included in sw precache manifest
// but missing on offline, disabling extraction it until fixed
payloadExtraction: false,
inlineSSRStyles: false,
renderJsonPayloads: true,
},
// experimental: {
// // when using generate, payload js assets included in sw precache manifest
// // but missing on offline, disabling extraction it until fixed
// payloadExtraction: false,
// inlineSSRStyles: false,
// renderJsonPayloads: true,
// },
components: [{
path: '~/components',
@ -160,7 +154,7 @@ export default defineNuxtConfig({
},
},
pwa,
// pwa,
devtools: {
enabled: true,

View File

@ -1,51 +1,50 @@
{
"private": true,
"packageManager": "pnpm@8.2.0",
"scripts": {
"build": "nuxi build",
"dev": "nuxi dev",
"dev:pwa": "VITE_PLUGIN_PWA=true nuxi dev",
"start": "node .output/server/index.mjs",
"typecheck": "vue-tsc --noEmit",
"lint": "eslint .",
"postinstall": "nuxi prepare",
"generate": "nuxi generate",
"start:generate": "serve .output/public"
"generate": "nuxi generate"
},
"type": "module",
"main": "./nuxt.config.ts",
"dependencies": {
"@anu-vue/nuxt": "^0.13.1",
"@antfu/eslint-config": "^2.18.1",
"@anu-vue/nuxt": "^0.15.2",
"@iconify-json/akar-icons": "^1.1.24",
"@iconify-json/carbon": "^1.1.16",
"@iconify-json/file-icons": "^1.1.8",
"@iconify-json/heroicons-solid": "^1.1.11",
"@iconify-json/icon-park-solid": "^1.1.14",
"@iconify-json/material-symbols": "^1.1.80",
"@iconify-json/solar": "^1.1.9",
"@iconify-json/twemoji": "^1.1.11",
"@jiaminghi/color": "^1.1.3",
"@vueuse/components": "^10.1.2",
"@nuxt/content": "^2.11.0",
"@nuxt/image": "1.3.0",
"@nuxtjs/color-mode": "^3.4.0",
"@nuxtjs/i18n": "8.3.1",
"@unocss/nuxt": "0.60.3",
"@vue-macros/nuxt": "^1.9.33",
"@vueuse/components": "^10.4.1",
"@vueuse/integrations": "^10.4.1",
"@vueuse/nuxt": "^10.4.1",
"icons": "link:@iconify-json/ri/icons",
"lingo3d-vue": "1.0.118",
"sass": "^1.62.1",
"swiper": "^9.2.4",
"nuxt": "3.11.2",
"swiper": "^11.1.3",
"typescript": "^5.4.5",
"unity-webgl": "^3.4.2",
"vue-tsc": "^1.2.0",
"unocss-preset-extra": "^0.5.3",
"unocss-preset-scrollbar": "^0.3.1",
"unocss-preset-scrollbar-hide": "^1.0.1",
"vue": "^3.4.27",
"vue-unity-webgl": "^1.2.0"
},
"devDependencies": {
"@antfu/eslint-config": "^0.38.4",
"@iconify-json/carbon": "^1.1.16",
"@iconify-json/twemoji": "^1.1.11",
"@nuxt/content": "^2.6.0",
"@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.52.4",
"@unocss/nuxt": "0.52.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",
"serve": "14.2.0",
"typescript": "^4.9.5",
"unocss-preset-extra": "^0.5.2",
"unocss-preset-scrollbar": "^0.2.1",
"unocss-preset-scrollbar-hide": "^1.0.1"
"@unocss/eslint-plugin": "^0.60.2",
"eslint": "9.2.0",
"sass": "^1.77.2"
}
}

View File

@ -46,7 +46,7 @@ const status = [
> -->
<div class="a-card-body divide-y-1 divide-dark-50/10 a-card-spacer">
<div class="grid grid-rows-2 gap-y-3">
<div class="grid grids-2 gap-y-3">
<ACheckbox
v-for="tag in tags"
:key="tag.value"
@ -88,7 +88,7 @@ const status = [
> -->
<div class="a-card-body divide-y-1 divide-dark-50/10 a-card-spacer">
<div class="grid grid-rows-2 gap-y-3">
<div class="grid grids-2 gap-y-3">
<ACheckbox
v-for="tag in tags"
:key="tag.value"
@ -115,7 +115,7 @@ const status = [
</ACard>
</div>
<div class="3xl:grid-cols-4 grid-row w-full pb-10 2xl:grid-cols-3 lg:grid-cols-2">
<div class="3xl:grid-cols-4 gap-4 grid w-full pb-10 2xl:grid-cols-3 lg:grid-cols-2">
<!-- 👉 2nd card -->
<Card
v-for="(item, i) in list"

View File

@ -23,7 +23,7 @@ const { data } = await useAsyncData(`content-${path}`, () => {
> -->
<div class="a-card-body divide-y-1 divide-dark-50/10 a-card-spacer">
<div class="grid grid-rows-2 gap-y-3">
<div class="grid grids-2 gap-y-3">
<ACheckbox
v-for="tag in tags"
:key="tag.value"
@ -64,7 +64,7 @@ const { data } = await useAsyncData(`content-${path}`, () => {
> -->
<div class="a-card-body divide-y-1 divide-dark-50/10 a-card-spacer">
<div class="grid grid-rows-2 gap-y-3">
<div class="grid grids-2 gap-y-3">
<ACheckbox
v-for="tag in tags"
:key="tag.value"

View File

@ -91,7 +91,7 @@ const status = [
</ACard>
</div>
<div class="3xl:grid-cols-4 grid-row w-full pb-10 2xl:grid-cols-3 lg:grid-cols-2">
<div class="3xl:grid-cols-4 grid w-full gap-4 pb-10 2xl:grid-cols-3 lg:grid-cols-2">
<!-- 👉 2nd card -->
<Card
v-for="(item, i) in list"

View File

@ -23,7 +23,7 @@ const { data } = await useAsyncData(`content-${path}`, () => {
> -->
<div class="a-card-body divide-y-1 divide-dark-50/10 a-card-spacer">
<div class="grid grid-rows-2 gap-y-3">
<div class="grid grids-2 gap-y-3">
<ACheckbox
v-for="tag in tags"
:key="tag.value"
@ -64,7 +64,7 @@ const { data } = await useAsyncData(`content-${path}`, () => {
> -->
<div class="a-card-body divide-y-1 divide-dark-50/10 a-card-spacer">
<div class="grid grid-rows-2 gap-y-3">
<div class="grid grids-2 gap-y-3">
<ACheckbox
v-for="tag in tags"
:key="tag.value"

View File

@ -62,7 +62,7 @@ const sectionNine = useSectionNine()
<div ref="sectionThreeEl">
<div
class="grid-row py-10 md:(grid-cols-2)" :class="`lg:grid-cols-${sectionThree.contentPrimary.length}`"
class="grid py-10 gap-4 md:(grid-cols-2)" :class="`lg:grid-cols-${sectionThree.contentPrimary.length}`"
>
<ImageHover
v-for="(content, i) in sectionThree.contentPrimary"
@ -74,7 +74,7 @@ const sectionNine = useSectionNine()
}]"
/>
</div>
<div class="grid-row pb-10 md:(grid-cols-2)" :class="`lg:grid-cols-${sectionThree.contentSecondary.length}`">
<div class="grid gap-4 pb-10 md:(grid-cols-2)" :class="`lg:grid-cols-${sectionThree.contentSecondary.length}`">
<ImageHover
v-for="(content, i) in sectionThree.contentSecondary"
:key="i"
@ -85,7 +85,7 @@ const sectionNine = useSectionNine()
}]"
/>
</div>
<div class="grid-row pb-20 md:(grid-cols-2)" :class="`lg:grid-cols-${sectionThree.contentThird.length}`">
<div class="grid gap-4 pb-20 md:(grid-cols-2)" :class="`lg:grid-cols-${sectionThree.contentThird.length}`">
<ImageHover
v-for="(content, i) in sectionThree.contentThird"
:key="i"
@ -115,7 +115,7 @@ const sectionNine = useSectionNine()
<!-- Section Five -->
<Section class="bg-gradient-blue text-white">
<Typography :title=" $t(sectionFive.title) " :topic=" $t(sectionFive.topic) " :description=" $t(sectionFive.description) " class="pb-20 text-start" />
<div class="grid-row gap-26 pb-10 lg:(grid-cols-3) md:(grid-cols-2)">
<div class="grid gap-26 pb-10 lg:(grid-cols-3) md:(grid-cols-2)">
<div
v-for="(content, i) in sectionFive.content"
:key="i"
@ -171,7 +171,7 @@ const sectionNine = useSectionNine()
<!-- Section Eight -->
<Section>
<div class="grid-row grid-cols-2 gap-20 pb-20 lg:(grid-cols-4)">
<div class="grid grid-cols-2 gap-20 pb-20 lg:(grid-cols-4)">
<div
v-for="(content, i) in sectionEight.content"
:key="i"
@ -187,7 +187,7 @@ const sectionNine = useSectionNine()
</div>
</div>
<!-- <div class="grid-row rounded-lg from-violet-500 to-fuchsia-500 bg-gradient-to-r p-5 text-white shadow-lg lg:(grid-cols-2)">
<!-- <div class="grid rounded-lg from-violet-500 to-fuchsia-500 bg-gradient-to-r p-5 text-white shadow-lg lg:(grid-cols-2)">
<ATypography
class="text-white"
title="Awesome mobile"

View File

@ -33,7 +33,7 @@ const list = computed(() => {
> -->
<div class="a-card-body a-card-spacer">
<div class="grid grid-rows-2 gap-y-3">
<div class="grid grids-2 gap-y-3">
<ACheckbox
v-for="tag in tags"
:key="tag.value"
@ -63,7 +63,7 @@ const list = computed(() => {
> -->
<div class="a-card-body a-card-spacer">
<div class="grid grid-rows-2 gap-y-3">
<div class="grid grids-2 gap-y-3">
<ACheckbox
v-for="tag in tags"
:key="tag.value"
@ -78,7 +78,7 @@ const list = computed(() => {
</ACard>
</div>
<div class="3xl:grid-cols-4 grid-row w-full pb-10 2xl:grid-cols-3 lg:grid-cols-2">
<div class="3xl:grid-cols-4 grid gap-4 w-full pb-10 2xl:grid-cols-3 lg:grid-cols-2">
<!-- 👉 2nd card -->
<Card
v-for="(item, i) in list"

View File

@ -2,7 +2,7 @@
<NuxtPage />
<!-- <Section>
<div class="grid-row rounded-lg from-violet-500 to-fuchsia-500 bg-gradient-to-r p-5 text-white shadow-lg lg:(grid-cols-2)">
<div class="grid rounded-lg from-violet-500 to-fuchsia-500 bg-gradient-to-r p-5 text-white shadow-lg lg:(grid-cols-2)">
<ATypography
class="text-white"
title="联系我们"

View File

@ -9,7 +9,7 @@ const content = useAIGC()
<!-- <SectionGradientCard :content="content.feature.content" :topic="content.feature.topic" /> -->
<Section>
<div class="grid-row grid-cols-2 gap-20 pb-20 lg:(grid-cols-4)">
<div class="grid grid-cols-2 gap-20 pb-20 lg:(grid-cols-4)">
<div
v-for="(item, i) in content.feature.content"
:key="i"
@ -41,7 +41,7 @@ const content = useAIGC()
</div>
</div>
<div class="3xl:grid-cols-4 grid-row flex-grow pb-10 2xl:grid-cols-3 lg:grid-cols-2">
<div class="3xl:grid-cols-4 grid flex-grow pb-10 2xl:grid-cols-3 lg:grid-cols-2">
<!-- 👉 2nd card -->
<Card
v-for="(item, i) in content.solutions.content"

View File

@ -9,7 +9,7 @@ const content = useDigitalTwin()
<!-- <SectionGradientCard :content="content.feature.content" :topic="content.feature.topic" /> -->
<Section>
<div class="grid-row grid-cols-2 gap-20 pb-20 lg:(grid-cols-4)">
<div class="grid grid-cols-2 gap-20 pb-20 lg:(grid-cols-4)">
<div
v-for="(item, i) in content.feature.content"
:key="i"
@ -41,7 +41,7 @@ const content = useDigitalTwin()
</div>
</div>
<div class="3xl:grid-cols-4 grid-row flex-grow pb-10 2xl:grid-cols-3 lg:grid-cols-2">
<div class="3xl:grid-cols-4 grid flex-grow pb-10 2xl:grid-cols-3 lg:grid-cols-2">
<!-- 👉 2nd card -->
<Card
v-for="(item, i) in content.solutions.content"

View File

@ -9,7 +9,7 @@ const content = useMixedReality()
<!-- <SectionGradientCard :content="content.feature.content" :topic="content.feature.topic" /> -->
<Section>
<div class="grid-row grid-cols-2 gap-20 pb-20 lg:(grid-cols-4)">
<div class="grid grid-cols-2 gap-20 pb-20 lg:(grid-cols-4)">
<div
v-for="(item, i) in content.feature.content"
:key="i"
@ -41,7 +41,7 @@ const content = useMixedReality()
</div>
</div>
<div class="3xl:grid-cols-4 grid-row flex-grow pb-10 2xl:grid-cols-3 lg:grid-cols-2">
<div class="3xl:grid-cols-4 grid flex-grow pb-10 2xl:grid-cols-3 lg:grid-cols-2">
<!-- 👉 2nd card -->
<Card
v-for="(item, i) in content.solutions.content"

View File

@ -9,7 +9,7 @@ const content = useWeb3()
<!-- <SectionGradientCard :content="content.feature.content" :topic="content.feature.topic" /> -->
<Section>
<div class="grid-row grid-cols-2 gap-20 pb-20 lg:(grid-cols-4)">
<div class="grid grid-cols-2 gap-20 pb-20 lg:(grid-cols-4)">
<div
v-for="(item, i) in content.feature.content"
:key="i"
@ -41,7 +41,7 @@ const content = useWeb3()
</div>
</div>
<div class="3xl:grid-cols-4 grid-row flex-grow pb-10 2xl:grid-cols-3 lg:grid-cols-2">
<div class="3xl:grid-cols-4 grid flex-grow pb-10 2xl:grid-cols-3 lg:grid-cols-2">
<!-- 👉 2nd card -->
<Card
v-for="(item, i) in content.solutions.content"

View File

@ -10,7 +10,7 @@ import {
transformerDirectives,
transformerVariantGroup,
} from 'unocss'
import { presetAnu, presetIconExtraProperties } from 'anu-vue'
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'
@ -104,10 +104,10 @@ export default defineConfig({
presetAnu(),
// default theme preset
presetThemeDefault({
shortcutOverrides: {
'a-btn': 'ring-3 ring-primary',
'a-base-input-root': 'ring-3',
},
// shortcutOverrides: {
// 'a-btn': 'ring-3 ring-primary',
// 'a-base-input-root': 'ring-3',
// },
}),
presetUno(),
presetMini(),
@ -115,7 +115,7 @@ export default defineConfig({
presetAttributify(),
presetIcons({
scale: 1.2,
cdn: 'https://esm.sh/',
// cdn: 'https://esm.sh/',
// cdn:'https://cdn.skypack.dev/',
// cdn:'https://api.iconify.design/',
extraProperties: presetIconExtraProperties,