refactor: 将工具类文件迁移到 tools/ 目录
- 移动 10 个 Python 字体工具脚本到 tools/ - 移动 5 个 C 字体测试文件到 tools/ - 更新脚本路径引用适配新目录结构 - 清理 vue/vue3 前端模板文件
This commit is contained in:
@@ -1,6 +1,8 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
import re, os
|
||||
|
||||
project_root = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
||||
|
||||
def analyze_font(filepath):
|
||||
with open(filepath, 'r', encoding='utf-8') as f:
|
||||
content = f.read()
|
||||
@@ -50,7 +52,6 @@ def analyze_font(filepath):
|
||||
total_bitmap_size = len(byte_vals)
|
||||
print(f" Total bitmap data: {total_bitmap_size} bytes")
|
||||
|
||||
# Verify bitmap_index consistency
|
||||
warnings = []
|
||||
for i, g in enumerate(glyphs):
|
||||
if i == 0:
|
||||
@@ -78,11 +79,10 @@ def analyze_font(filepath):
|
||||
else:
|
||||
print(f" No bitmap inconsistencies found")
|
||||
|
||||
# Print sample glyph data
|
||||
for idx in [1, 2]:
|
||||
if idx < len(glyphs):
|
||||
g = glyphs[idx]
|
||||
print(f" Glyph {idx}: bitmap_index={g.get('bitmap_index')}, adv_w={g.get('adv_w')}, box_w={g.get('box_w')}, box_h={g.get('box_h')}")
|
||||
|
||||
for f in ['app/tasks/custom_cjk_16.c', 'app/tasks/custom_cjk_20.c', 'app/tasks/custom_cjk_30.c', 'app/tasks/custom_cjk_40.c']:
|
||||
analyze_font(f)
|
||||
for f in ['custom_cjk_16.c', 'custom_cjk_20.c', 'custom_cjk_30.c', 'custom_cjk_40.c']:
|
||||
analyze_font(os.path.join(project_root, 'app/tasks', f))
|
||||
@@ -1,5 +1,8 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
import re
|
||||
import os
|
||||
|
||||
project_root = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
||||
|
||||
def check_bitmap(filepath):
|
||||
with open(filepath, 'r', encoding='utf-8') as f:
|
||||
@@ -19,11 +22,10 @@ def check_bitmap(filepath):
|
||||
bytes_vals.append(int(x))
|
||||
except:
|
||||
pass
|
||||
# 4bpp: each byte has 2 pixels (high nibble, low nibble)
|
||||
pixels = []
|
||||
for b in bytes_vals:
|
||||
pixels.append((b >> 4) & 0x0F) # high nibble
|
||||
pixels.append(b & 0x0F) # low nibble
|
||||
pixels.append((b >> 4) & 0x0F)
|
||||
pixels.append(b & 0x0F)
|
||||
max_val = max(pixels)
|
||||
nonzero = [v for v in pixels if v > 0]
|
||||
min_nonzero = min(nonzero) if nonzero else 0
|
||||
@@ -32,7 +34,7 @@ def check_bitmap(filepath):
|
||||
else:
|
||||
print(f'{filepath}: no match')
|
||||
|
||||
check_bitmap('app/tasks/custom_cjk_40.c')
|
||||
check_bitmap('app/tasks/custom_cjk_30.c')
|
||||
check_bitmap('app/tasks/custom_cjk_20.c')
|
||||
check_bitmap('app/tasks/custom_cjk_16.c')
|
||||
check_bitmap(os.path.join(project_root, 'app/tasks/custom_cjk_40.c'))
|
||||
check_bitmap(os.path.join(project_root, 'app/tasks/custom_cjk_30.c'))
|
||||
check_bitmap(os.path.join(project_root, 'app/tasks/custom_cjk_20.c'))
|
||||
check_bitmap(os.path.join(project_root, 'app/tasks/custom_cjk_16.c'))
|
||||
@@ -1,6 +1,8 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
import re, os, glob
|
||||
|
||||
project_root = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
||||
|
||||
def pg(fp):
|
||||
with open(fp, encoding='utf-8') as f:
|
||||
c = f.read()
|
||||
@@ -19,7 +21,7 @@ def pg(fp):
|
||||
tests = [[0x8bbe,0x7f6e,0x91cd,0x91cf],[0x6309,0x6b64,0x542f,0x52a8],[0x5f53,0x524d,0x91cd,0x91cf],[0x5305,0x88c5,0x8ba1,0x6570],[0x8fd0,0x884c,0x72b6,0x6001],[0x5df2,0x505c,0x6b62],[0x542f,0x52a8],[0x505c,0x6b62],[0x8fd0,0x884c,0x4e2d]]
|
||||
ts = [''.join(chr(u) for u in t) for t in tests]
|
||||
|
||||
for fp in sorted(glob.glob('app/tasks/custom_cjk_*.c')):
|
||||
for fp in sorted(glob.glob(os.path.join(project_root, 'app/tasks/custom_cjk_*.c'))):
|
||||
bs = os.path.basename(fp)
|
||||
fs = int(re.search(r'_(\d+)\.c$', fp).group(1))
|
||||
gs, us = pg(fp)
|
||||
@@ -1,6 +1,8 @@
|
||||
import re, os, glob
|
||||
|
||||
font_files = glob.glob('app/tasks/custom_cjk_*.c')
|
||||
project_root = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
||||
|
||||
font_files = glob.glob(os.path.join(project_root, 'app/tasks/custom_cjk_*.c'))
|
||||
|
||||
for filepath in font_files:
|
||||
with open(filepath, 'r', encoding='utf-8') as f:
|
||||
@@ -16,7 +18,6 @@ for filepath in font_files:
|
||||
return full_line.replace(f'adv_w = {adv_w}', f'adv_w = {new_adv_w}')
|
||||
return full_line
|
||||
|
||||
# Match adv_w, box_w, and optionally box_h and ofs_x in any order
|
||||
pattern = r'\.adv_w = (\d+), \.box_w = (\d+)(?:, \.box_h = \d+)?(?:, \.ofs_x = (\d+))?'
|
||||
fixed_content = re.sub(pattern, fix_adv_w, content)
|
||||
|
||||
@@ -24,7 +25,6 @@ for filepath in font_files:
|
||||
f.write(fixed_content)
|
||||
|
||||
print(f"=== {os.path.basename(filepath)} ===")
|
||||
# Show changed values
|
||||
original = content
|
||||
changed_lines = []
|
||||
for line_num, (orig_line, fix_line) in enumerate(zip(original.split('\n'), fixed_content.split('\n')), 1):
|
||||
@@ -3,7 +3,8 @@ from fontTools.varLib import instancer
|
||||
import os
|
||||
|
||||
src = r"vue/vue3/src/assets/fonts/NotoSansSC-VariableFont_wght_2.ttf"
|
||||
src = os.path.join(os.path.dirname(os.path.abspath(__file__)), src)
|
||||
project_root = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
||||
src = os.path.join(project_root, src)
|
||||
|
||||
for weight, name in [(500, "Medium"), (700, "Bold")]:
|
||||
dst = src.replace(".ttf", f"_{name}.ttf")
|
||||
@@ -4,7 +4,8 @@ from PIL import Image, ImageDraw
|
||||
import os
|
||||
import sys
|
||||
|
||||
os.chdir(r'D:\20_AI\LSPi')
|
||||
project_root = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
||||
os.chdir(project_root)
|
||||
|
||||
def render_glyph_to_bitmap(font_path, char, size, bpp=4):
|
||||
from PIL import ImageFont
|
||||
@@ -183,7 +184,7 @@ def write_lvgl_font(filename, size, bpp, glyph_bitmaps, glyph_dscs, unicode_list
|
||||
f.write("#endif\n")
|
||||
|
||||
def main():
|
||||
font_path = "vue/vue3/src/assets/fonts/NotoSansSC-VariableFont_wght_2.ttf"
|
||||
font_path = os.path.join(project_root, "vue/vue3/src/assets/fonts/NotoSansSC-VariableFont_wght_2.ttf")
|
||||
|
||||
chars_16 = list("0123456789.-+ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz")
|
||||
chars_16.extend([0x5F53, 0x524D, 0x91CD, 0x91CF, 0x603B, 0x5305, 0x6570, 0x8BBE,
|
||||
@@ -203,16 +204,16 @@ def main():
|
||||
chars_40 = list("0123456789.")
|
||||
|
||||
print("Generating custom_cjk_16.c...")
|
||||
generate_font(font_path, chars_16, 16, "app/tasks/custom_cjk_16.c")
|
||||
generate_font(font_path, chars_16, 16, os.path.join(project_root, "app/tasks/custom_cjk_16.c"))
|
||||
|
||||
print("Generating custom_cjk_20.c...")
|
||||
generate_font(font_path, chars_20, 20, "app/tasks/custom_cjk_20.c")
|
||||
generate_font(font_path, chars_20, 20, os.path.join(project_root, "app/tasks/custom_cjk_20.c"))
|
||||
|
||||
print("Generating custom_cjk_30.c...")
|
||||
generate_font(font_path, chars_30, 30, "app/tasks/custom_cjk_30.c")
|
||||
generate_font(font_path, chars_30, 30, os.path.join(project_root, "app/tasks/custom_cjk_30.c"))
|
||||
|
||||
print("Generating custom_cjk_40.c...")
|
||||
generate_font(font_path, chars_40, 40, "app/tasks/custom_cjk_40.c")
|
||||
generate_font(font_path, chars_40, 40, os.path.join(project_root, "app/tasks/custom_cjk_40.c"))
|
||||
|
||||
print("Done!")
|
||||
|
||||
@@ -8,6 +8,9 @@ from fontTools.ttLib import TTFont
|
||||
from PIL import Image, ImageDraw, ImageFont
|
||||
import struct
|
||||
import sys
|
||||
import os
|
||||
|
||||
project_root = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
||||
|
||||
class FontGenerator:
|
||||
def __init__(self, font_path, size):
|
||||
@@ -182,7 +185,7 @@ class FontGenerator:
|
||||
|
||||
|
||||
def main():
|
||||
font_path = "./vue/vue3/src/assets/fonts/NotoSansSC-VariableFont_wght_2_medium.ttf"
|
||||
font_path = os.path.join(project_root, "vue/vue3/src/assets/fonts/NotoSansSC-VariableFont_wght_2_medium.ttf")
|
||||
sizes = [16, 20, 30, 40]
|
||||
|
||||
ascii_codes = [0x2B, 0x2D, 0x2E] + list(range(0x30, 0x3A))
|
||||
@@ -207,7 +210,7 @@ def main():
|
||||
|
||||
print(f" {success}/{len(all_codes)} characters added")
|
||||
|
||||
output = f"app/tasks/custom_cjk_{size}.c"
|
||||
output = os.path.join(project_root, f"app/tasks/custom_cjk_{size}.c")
|
||||
gen.generate_lvgl_font(output)
|
||||
print(f" Written to {output}")
|
||||
|
||||
@@ -2,7 +2,8 @@ import struct
|
||||
import os
|
||||
|
||||
ttf_path = "vue/vue3/src/assets/fonts/NotoSansSC-VariableFont_wght_2.ttf"
|
||||
ttf_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), ttf_path)
|
||||
project_root = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
||||
ttf_path = os.path.join(project_root, ttf_path)
|
||||
|
||||
with open(ttf_path, "rb") as f:
|
||||
data = bytearray(f.read())
|
||||
@@ -3,7 +3,8 @@ import subprocess
|
||||
import sys
|
||||
import os
|
||||
|
||||
os.chdir(r'D:\20_AI\LSPi')
|
||||
project_root = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
||||
os.chdir(project_root)
|
||||
|
||||
def run_cmd(cmd):
|
||||
cmd_str = ' '.join(cmd)
|
||||
@@ -4,8 +4,10 @@
|
||||
import subprocess
|
||||
import os
|
||||
|
||||
project_root = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
||||
|
||||
lv_font_conv_path = "C:\\Users\\gxms0\\AppData\\Roaming\\npm\\lv_font_conv.cmd"
|
||||
font_path = "./vue/vue3/src/assets/fonts/simhei.ttf"
|
||||
font_path = os.path.join(project_root, "vue/vue3/src/assets/fonts/simhei.ttf")
|
||||
|
||||
codes = [
|
||||
0x2B, 0x2D, 0x2E, 0x2F, 0x30, 0x31, 0x32, 0x33, 0x34,
|
||||
@@ -28,7 +30,7 @@ for size in sizes:
|
||||
"--format=lvgl",
|
||||
"--bpp=4",
|
||||
"--no-compress",
|
||||
"-o", f"app/tasks/custom_cjk_{size}.c",
|
||||
"-o", os.path.join(project_root, f"app/tasks/custom_cjk_{size}.c"),
|
||||
]
|
||||
|
||||
for code in codes:
|
||||
@@ -1,24 +0,0 @@
|
||||
# Logs
|
||||
logs
|
||||
*.log
|
||||
npm-debug.log*
|
||||
yarn-debug.log*
|
||||
yarn-error.log*
|
||||
pnpm-debug.log*
|
||||
lerna-debug.log*
|
||||
|
||||
node_modules
|
||||
dist
|
||||
dist-ssr
|
||||
*.local
|
||||
|
||||
# Editor directories and files
|
||||
.vscode/*
|
||||
!.vscode/extensions.json
|
||||
.idea
|
||||
.DS_Store
|
||||
*.suo
|
||||
*.ntvs*
|
||||
*.njsproj
|
||||
*.sln
|
||||
*.sw?
|
||||
@@ -1,5 +0,0 @@
|
||||
# Vue 3 + TypeScript + Vite
|
||||
|
||||
This template should help get you started developing with Vue 3 and TypeScript in Vite. The template uses Vue 3 `<script setup>` SFCs, check out the [script setup docs](https://v3.vuejs.org/api/sfc-script-setup.html#sfc-script-setup) to learn more.
|
||||
|
||||
Learn more about the recommended Project Setup and IDE Support in the [Vue Docs TypeScript Guide](https://vuejs.org/guide/typescript/overview.html#project-setup).
|
||||
@@ -1,13 +0,0 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<link rel="icon" type="image/svg+xml" href="/vite.svg" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>Vite + Vue + TS</title>
|
||||
</head>
|
||||
<body>
|
||||
<div id="app"></div>
|
||||
<script type="module" src="/src/main.ts"></script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -1,20 +0,0 @@
|
||||
{
|
||||
"name": "pixso-vue-template",
|
||||
"private": true,
|
||||
"version": "0.0.0",
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"dev": "vite",
|
||||
"build": "vite build",
|
||||
"preview": "vite preview"
|
||||
},
|
||||
"dependencies": {
|
||||
"vue": "^3.5.17",
|
||||
"vue-router": "^4.5.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@vitejs/plugin-vue": "^6.0.0",
|
||||
"@vue/tsconfig": "^0.7.0",
|
||||
"typescript": "~5.8.3"
|
||||
}
|
||||
}
|
||||
@@ -1,9 +0,0 @@
|
||||
|
||||
<template>
|
||||
<router-view></router-view>
|
||||
</template>
|
||||
<script lang="ts" setup>
|
||||
import { getCurrentInstance } from 'vue';
|
||||
|
||||
window.app = getCurrentInstance();
|
||||
</script>
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1,3 +0,0 @@
|
||||
@font-face {
|
||||
font-family: "Noto Sans SC-Regular"; font-style: normal; src: url('@/assets/fonts/NotoSansSC-VariableFont_wght_2.ttf')
|
||||
}
|
||||
@@ -1,26 +0,0 @@
|
||||
* {
|
||||
box-sizing: border-box;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
ol,ul,menu {
|
||||
padding-inline-start: 0;
|
||||
list-style: none;
|
||||
}
|
||||
|
||||
ol li::marker, ul li::before {
|
||||
letter-spacing: 0;
|
||||
}
|
||||
|
||||
.scroll-container > div {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.container > div {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.Pixso-canvas-0_1 > div {
|
||||
width: 100%;
|
||||
}
|
||||
@@ -1,16 +0,0 @@
|
||||
import './assets/styles/font.css';
|
||||
import './assets/styles/global.css'
|
||||
import { createApp } from 'vue'
|
||||
import './styles.css'
|
||||
import './assets/styles/font.css'
|
||||
import App from './App.vue'
|
||||
import { router } from './router'
|
||||
|
||||
createApp(App).use(router).mount('#app')
|
||||
|
||||
|
||||
declare global {
|
||||
interface Window {
|
||||
app: any;
|
||||
}
|
||||
}
|
||||
@@ -1,22 +0,0 @@
|
||||
|
||||
import { createRouter, createWebHistory , type RouteRecordRaw } from "vue-router";
|
||||
|
||||
const routes: RouteRecordRaw[] = [{path: "/", name: "Frame21", component: () => import("@/views/Frame21.vue"), meta: { guid: "2:1" }},];
|
||||
|
||||
const routePathMap = new Map<string, string>();
|
||||
|
||||
export const getRoutePathByGuid = (guid: string) => {
|
||||
if (!guid) return;
|
||||
if (routePathMap.has(guid)) return routePathMap.get(guid);
|
||||
|
||||
const route = routes.find((item) => item.meta?.guid === guid);
|
||||
if (!route) return;
|
||||
routePathMap.set(guid, route.path);
|
||||
|
||||
return route.path;
|
||||
}
|
||||
|
||||
export const router = createRouter({
|
||||
history: createWebHistory(),
|
||||
routes,
|
||||
});
|
||||
@@ -1,16 +0,0 @@
|
||||
* {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
body {
|
||||
height: 100vh;
|
||||
width: 100vw;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
#app {
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
}
|
||||
@@ -1,18 +0,0 @@
|
||||
|
||||
* {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
box-sizing: border-box;
|
||||
word-break: break-word;
|
||||
}
|
||||
|
||||
body {
|
||||
height: 100vh;
|
||||
width: 100vw;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
#app {
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
}
|
||||
@@ -1,317 +0,0 @@
|
||||
<template>
|
||||
<div class="scroll-container">
|
||||
<div id="2_1" class="Pixso-frame-2_1">
|
||||
<div id="2_2" class="Pixso-rectangle-2_2"></div>
|
||||
<div id="2_3" class="Pixso-rectangle-2_3"></div>
|
||||
<div id="2_4" class="stroke-wrapper-2_4">
|
||||
<div class="Pixso-rectangle-2_4"></div>
|
||||
<div class="stroke-2_4"></div>
|
||||
</div>
|
||||
<div id="2_5" class="stroke-wrapper-2_5">
|
||||
<div class="Pixso-rectangle-2_5"></div>
|
||||
<div class="stroke-2_5"></div>
|
||||
</div>
|
||||
<div id="2_6" class="Pixso-rectangle-2_6"></div>
|
||||
<p id="2_7" class="Pixso-paragraph-2_7">{{ "包装计数" }}</p>
|
||||
<p id="2_8" class="Pixso-paragraph-2_8">{{ "200" }}</p>
|
||||
<p id="2_10" class="Pixso-paragraph-2_10">{{ "当前重量" }}</p>
|
||||
<p id="2_12" class="Pixso-paragraph-2_12">{{ "0.0g" }}</p>
|
||||
<p id="2_14" class="Pixso-paragraph-2_14">{{ "运行状态" }}</p>
|
||||
<p id="2_16" class="Pixso-paragraph-2_16">{{ "已停止" }}</p>
|
||||
<p id="2_17" class="Pixso-paragraph-2_17">{{ "启动" }}</p>
|
||||
<p id="2_18" class="Pixso-paragraph-2_18">{{ "点击启动" }}</p>
|
||||
<div id="3_1" class="Pixso-rectangle-3_1"></div>
|
||||
<div id="3_2" class="Pixso-rectangle-3_2"></div>
|
||||
<div id="5_3" class="Pixso-rectangle-5_3"></div>
|
||||
<div id="5_4" class="Pixso-rectangle-5_4"></div>
|
||||
<p id="3_3" class="Pixso-paragraph-3_3">{{ "设置重量" }}</p>
|
||||
<p id="3_5" class="Pixso-paragraph-3_5">{{ "20g" }}</p>
|
||||
<div id="3_7" class="Pixso-text-3_7">
|
||||
<p id="3_7_0" class="Pixso-paragraph-3_7_0">{{ " " }}</p>
|
||||
</div>
|
||||
<div id="5_1" class="Pixso-rectangle-5_1"></div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<script lang="ts" setup></script>
|
||||
<style>
|
||||
.scroll-container {
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
overflow: auto;
|
||||
}
|
||||
.Pixso-frame-2_1 {
|
||||
width: 100%;
|
||||
height: 480px;
|
||||
overflow: hidden;
|
||||
position: relative;
|
||||
flex-shrink: 0;
|
||||
background-color: rgba(13, 17, 23, 1);
|
||||
}
|
||||
.Pixso-rectangle-2_2 {
|
||||
width: 800px;
|
||||
height: 480px;
|
||||
position: absolute;
|
||||
left: 0px;
|
||||
top: 0px;
|
||||
background-color: rgba(13, 17, 23, 1);
|
||||
}
|
||||
.Pixso-rectangle-2_3 {
|
||||
width: 800px;
|
||||
height: 60px;
|
||||
position: absolute;
|
||||
left: 0px;
|
||||
top: 0px;
|
||||
background-color: rgba(21, 57, 98, 1);
|
||||
}
|
||||
.Pixso-rectangle-2_4 {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
position: relative;
|
||||
border-radius: 10px 10px 10px 10px;
|
||||
background-color: rgba(22, 27, 34, 1);
|
||||
}
|
||||
.stroke-wrapper-2_4 {
|
||||
position: absolute;
|
||||
left: 10px;
|
||||
top: 70px;
|
||||
width: 560px;
|
||||
height: 400px;
|
||||
}
|
||||
.stroke-2_4 {
|
||||
position: absolute;
|
||||
inset: 0px;
|
||||
border-radius: 10px 10px 10px 10px;
|
||||
pointer-events: none;
|
||||
border-width: 2px 2px 2px 2px;
|
||||
border-style: solid;
|
||||
box-sizing: border-box;
|
||||
border-color: rgba(48, 54, 61, 1);
|
||||
}
|
||||
.Pixso-rectangle-2_5 {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
position: relative;
|
||||
border-radius: 10px 10px 10px 10px;
|
||||
background-color: rgba(22, 27, 34, 1);
|
||||
}
|
||||
.stroke-wrapper-2_5 {
|
||||
position: absolute;
|
||||
left: 590px;
|
||||
top: 70px;
|
||||
width: 200px;
|
||||
height: 400px;
|
||||
}
|
||||
.stroke-2_5 {
|
||||
position: absolute;
|
||||
inset: 0px;
|
||||
border-radius: 10px 10px 10px 10px;
|
||||
pointer-events: none;
|
||||
border-width: 2px 2px 2px 2px;
|
||||
border-style: solid;
|
||||
box-sizing: border-box;
|
||||
border-color: rgba(48, 54, 61, 1);
|
||||
}
|
||||
.Pixso-rectangle-2_6 {
|
||||
width: 159px;
|
||||
height: 190px;
|
||||
position: absolute;
|
||||
left: 610px;
|
||||
top: 90px;
|
||||
border-radius: 20px 20px 20px 20px;
|
||||
background-color: rgba(63, 185, 80, 1);
|
||||
}
|
||||
.Pixso-paragraph-2_7 {
|
||||
font-size: 14px;
|
||||
font-family: "Noto Sans SC-Regular";
|
||||
font-weight: 400;
|
||||
color: rgba(255, 255, 255, 1);
|
||||
width: auto;
|
||||
height: auto;
|
||||
position: absolute;
|
||||
left: 620px;
|
||||
top: 350px;
|
||||
white-space: pre;
|
||||
flex-grow: 0;
|
||||
}
|
||||
.Pixso-paragraph-2_8 {
|
||||
font-size: 20px;
|
||||
font-family: "Noto Sans SC-Regular";
|
||||
font-weight: 400;
|
||||
color: rgba(63, 185, 80, 1);
|
||||
width: auto;
|
||||
height: auto;
|
||||
position: absolute;
|
||||
left: 620px;
|
||||
top: 370px;
|
||||
white-space: pre;
|
||||
flex-grow: 0;
|
||||
}
|
||||
.Pixso-paragraph-2_10 {
|
||||
font-size: 14px;
|
||||
font-family: "Noto Sans SC-Regular";
|
||||
font-weight: 400;
|
||||
color: rgba(255, 255, 255, 1);
|
||||
width: auto;
|
||||
height: auto;
|
||||
position: absolute;
|
||||
left: 620px;
|
||||
top: 288px;
|
||||
white-space: pre;
|
||||
flex-grow: 0;
|
||||
}
|
||||
.Pixso-paragraph-2_12 {
|
||||
font-size: 20px;
|
||||
font-family: "Noto Sans SC-Regular";
|
||||
font-weight: 400;
|
||||
color: rgba(63, 185, 80, 1);
|
||||
width: auto;
|
||||
height: auto;
|
||||
position: absolute;
|
||||
left: 620px;
|
||||
top: 314px;
|
||||
white-space: pre;
|
||||
flex-grow: 0;
|
||||
}
|
||||
.Pixso-paragraph-2_14 {
|
||||
font-size: 14px;
|
||||
font-family: "Noto Sans SC-Regular";
|
||||
font-weight: 400;
|
||||
color: rgba(255, 255, 255, 1);
|
||||
width: auto;
|
||||
height: auto;
|
||||
position: absolute;
|
||||
left: 620px;
|
||||
top: 405px;
|
||||
white-space: pre;
|
||||
flex-grow: 0;
|
||||
}
|
||||
.Pixso-paragraph-2_16 {
|
||||
font-size: 20px;
|
||||
font-family: "Noto Sans SC-Regular";
|
||||
font-weight: 400;
|
||||
color: rgba(247, 111, 74, 1);
|
||||
width: auto;
|
||||
height: auto;
|
||||
position: absolute;
|
||||
left: 618px;
|
||||
top: 431px;
|
||||
white-space: pre;
|
||||
flex-grow: 0;
|
||||
}
|
||||
.Pixso-paragraph-2_17 {
|
||||
font-size: 30px;
|
||||
font-family: "Noto Sans SC-Regular";
|
||||
font-weight: 400;
|
||||
color: rgba(255, 255, 255, 1);
|
||||
width: auto;
|
||||
height: auto;
|
||||
position: absolute;
|
||||
left: 659px;
|
||||
top: 163px;
|
||||
white-space: pre;
|
||||
flex-grow: 0;
|
||||
}
|
||||
.Pixso-paragraph-2_18 {
|
||||
font-size: 14px;
|
||||
font-family: "Noto Sans SC-Regular";
|
||||
font-weight: 400;
|
||||
color: rgba(255, 255, 255, 1);
|
||||
width: auto;
|
||||
height: auto;
|
||||
position: absolute;
|
||||
left: 663px;
|
||||
top: 250px;
|
||||
white-space: pre;
|
||||
flex-grow: 0;
|
||||
}
|
||||
.Pixso-rectangle-3_1 {
|
||||
width: 80px;
|
||||
height: 80px;
|
||||
position: absolute;
|
||||
left: 350px;
|
||||
top: 89px;
|
||||
border-radius: 20px 20px 20px 20px;
|
||||
background-color: rgba(42, 40, 40, 1);
|
||||
}
|
||||
.Pixso-rectangle-3_2 {
|
||||
width: 80px;
|
||||
height: 80px;
|
||||
position: absolute;
|
||||
left: 470px;
|
||||
top: 90px;
|
||||
border-radius: 20px 20px 20px 20px;
|
||||
background-color: rgba(42, 40, 40, 1);
|
||||
}
|
||||
.Pixso-rectangle-5_3 {
|
||||
width: 40px;
|
||||
height: 5px;
|
||||
position: absolute;
|
||||
left: 50%;
|
||||
top: 50%;
|
||||
transform: translateX(calc(-50% + 110px)) translateY(calc(-50% + -110.5px));
|
||||
background-color: rgba(255, 255, 255, 1);
|
||||
}
|
||||
.Pixso-rectangle-5_4 {
|
||||
width: 5px;
|
||||
height: 40px;
|
||||
position: absolute;
|
||||
left: 50%;
|
||||
top: 50%;
|
||||
transform: translateX(calc(-50% + 109.5px)) translateY(calc(-50% + -110px));
|
||||
background-color: rgba(255, 255, 255, 1);
|
||||
}
|
||||
.Pixso-paragraph-3_3 {
|
||||
font-size: 40px;
|
||||
font-family: "Noto Sans SC-Regular";
|
||||
font-weight: 400;
|
||||
color: rgba(255, 255, 255, 1);
|
||||
width: auto;
|
||||
height: auto;
|
||||
position: absolute;
|
||||
left: 39px;
|
||||
top: 101px;
|
||||
white-space: pre;
|
||||
flex-grow: 0;
|
||||
}
|
||||
.Pixso-paragraph-3_5 {
|
||||
font-size: 40px;
|
||||
font-family: "Noto Sans SC-Regular";
|
||||
font-weight: 400;
|
||||
color: rgba(1, 234, 155, 1);
|
||||
width: auto;
|
||||
height: auto;
|
||||
position: absolute;
|
||||
left: 239px;
|
||||
top: 101px;
|
||||
white-space: pre;
|
||||
flex-grow: 0;
|
||||
}
|
||||
.Pixso-text-3_7 {
|
||||
font-size: 14px;
|
||||
font-family: "Noto Sans SC-Regular";
|
||||
font-weight: Regular;
|
||||
color: rgba(255, 255, 255, 1);
|
||||
width: auto;
|
||||
height: auto;
|
||||
position: absolute;
|
||||
left: 61px;
|
||||
top: 247px;
|
||||
white-space: nowrap;
|
||||
flex-grow: 0;
|
||||
}
|
||||
.Pixso-paragraph-3_7_0 {
|
||||
line-height: 20.27199935913086px;
|
||||
position: relative;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
.Pixso-rectangle-5_1 {
|
||||
width: 40px;
|
||||
height: 5px;
|
||||
position: absolute;
|
||||
left: 50%;
|
||||
top: 50%;
|
||||
transform: translateX(calc(-50% + -10px)) translateY(calc(-50% + -110.5px));
|
||||
background-color: rgba(255, 255, 255, 1);
|
||||
}
|
||||
</style>
|
||||
Vendored
-8
@@ -1,8 +0,0 @@
|
||||
/// <reference types="vite/client" />
|
||||
|
||||
declare module "*.vue" {
|
||||
import { defineComponent } from "vue";
|
||||
|
||||
const component: ReturnType<typeof defineComponent>;
|
||||
export default component;
|
||||
}
|
||||
@@ -1,15 +0,0 @@
|
||||
{
|
||||
"extends": "@vue/tsconfig/tsconfig.dom.json",
|
||||
"compilerOptions": {
|
||||
"tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo",
|
||||
|
||||
/* Linting */
|
||||
"strict": true,
|
||||
"noUnusedLocals": true,
|
||||
"noUnusedParameters": true,
|
||||
"erasableSyntaxOnly": true,
|
||||
"noFallthroughCasesInSwitch": true,
|
||||
"noUncheckedSideEffectImports": true,
|
||||
},
|
||||
"include": ["src/**/*.ts", "src/**/*.tsx", "src/**/*.vue"]
|
||||
}
|
||||
@@ -1,7 +0,0 @@
|
||||
{
|
||||
"files": [],
|
||||
"references": [
|
||||
{ "path": "./tsconfig.app.json" },
|
||||
{ "path": "./tsconfig.node.json" }
|
||||
]
|
||||
}
|
||||
@@ -1,29 +0,0 @@
|
||||
{
|
||||
"compilerOptions": {
|
||||
"tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo",
|
||||
"target": "ES2023",
|
||||
"lib": ["ES2023"],
|
||||
"module": "ESNext",
|
||||
"skipLibCheck": true,
|
||||
|
||||
/* Bundler mode */
|
||||
"moduleResolution": "bundler",
|
||||
"allowImportingTsExtensions": true,
|
||||
"verbatimModuleSyntax": true,
|
||||
"moduleDetection": "force",
|
||||
"noEmit": true,
|
||||
|
||||
/* Linting */
|
||||
"strict": true,
|
||||
"noUnusedLocals": true,
|
||||
"noUnusedParameters": true,
|
||||
"erasableSyntaxOnly": true,
|
||||
"noFallthroughCasesInSwitch": true,
|
||||
"noUncheckedSideEffectImports": true,
|
||||
"baseUrl": ".",
|
||||
"paths": {
|
||||
"@/*": ["src/*"],
|
||||
},
|
||||
},
|
||||
"include": ["vite.config.ts"]
|
||||
}
|
||||
@@ -1,12 +0,0 @@
|
||||
import { defineConfig } from 'vite'
|
||||
import vue from '@vitejs/plugin-vue'
|
||||
|
||||
// https://vite.dev/config/
|
||||
export default defineConfig({
|
||||
plugins: [vue()],
|
||||
resolve: {
|
||||
alias: {
|
||||
'@': '/src',
|
||||
},
|
||||
},
|
||||
})
|
||||
Reference in New Issue
Block a user