初始化
6
.env.development
Normal file
@@ -0,0 +1,6 @@
|
||||
# 基础环境变量示例
|
||||
VITE_API_BASE_URL=http://www.yishi.com
|
||||
VITE_API_BASE_URL2=https://s2.siyuguanli.com:9991
|
||||
VITE_API_WS_URL=wss://s2.siyuguanli.com:9993
|
||||
# VITE_API_BASE_URL=https://ckbapi.quwanzhi.com
|
||||
VITE_APP_TITLE=存客宝
|
||||
6
.env.production
Normal file
@@ -0,0 +1,6 @@
|
||||
# 基础环境变量示例
|
||||
VITE_API_BASE_URL=https://ckbapi.quwanzhi.com
|
||||
VITE_API_BASE_URL2=https://s2.siyuguanli.com:9991
|
||||
VITE_API_WS_URL=wss://s2.siyuguanli.com:9993
|
||||
# VITE_API_BASE_URL=http://www.yishi.com
|
||||
VITE_APP_TITLE=存客宝
|
||||
64
.eslintrc.js
Normal file
@@ -0,0 +1,64 @@
|
||||
module.exports = {
|
||||
root: true,
|
||||
env: {
|
||||
browser: true,
|
||||
es2021: true,
|
||||
node: true,
|
||||
},
|
||||
extends: [
|
||||
"eslint:recommended",
|
||||
"plugin:react/recommended",
|
||||
"plugin:react-hooks/recommended",
|
||||
"plugin:@typescript-eslint/recommended",
|
||||
"plugin:prettier/recommended", // 这个配置会自动处理大部分冲突
|
||||
],
|
||||
parser: "@typescript-eslint/parser",
|
||||
parserOptions: {
|
||||
ecmaFeatures: {
|
||||
jsx: true,
|
||||
},
|
||||
ecmaVersion: 12,
|
||||
sourceType: "module",
|
||||
},
|
||||
plugins: ["react", "react-hooks", "@typescript-eslint", "prettier"],
|
||||
rules: {
|
||||
"prettier/prettier": "error",
|
||||
"react/react-in-jsx-scope": "off",
|
||||
"@typescript-eslint/no-unused-vars": "warn",
|
||||
"@typescript-eslint/no-explicit-any": "off",
|
||||
"@typescript-eslint/no-unnecessary-type-constraint": "warn",
|
||||
"react/prop-types": "off",
|
||||
"linebreak-style": "off",
|
||||
"eol-last": "off",
|
||||
"no-empty": "warn",
|
||||
"prefer-const": "warn",
|
||||
// 确保与 Prettier 完全兼容
|
||||
"comma-dangle": "off",
|
||||
"comma-spacing": "off",
|
||||
"comma-style": "off",
|
||||
"object-curly-spacing": "off",
|
||||
"array-bracket-spacing": "off",
|
||||
indent: "off",
|
||||
quotes: "off",
|
||||
semi: "off",
|
||||
"arrow-parens": "off",
|
||||
"no-multiple-empty-lines": "off",
|
||||
"max-len": "off",
|
||||
"space-before-function-paren": "off",
|
||||
"space-before-blocks": "off",
|
||||
"keyword-spacing": "off",
|
||||
"space-infix-ops": "off",
|
||||
"space-in-parens": "off",
|
||||
"space-in-brackets": "off",
|
||||
"object-property-newline": "off",
|
||||
"array-element-newline": "off",
|
||||
"function-paren-newline": "off",
|
||||
"object-curly-newline": "off",
|
||||
"array-bracket-newline": "off",
|
||||
},
|
||||
settings: {
|
||||
react: {
|
||||
version: "detect",
|
||||
},
|
||||
},
|
||||
};
|
||||
27
.gitattributes
vendored
Normal file
@@ -0,0 +1,27 @@
|
||||
# 设置默认行为,如果core.autocrlf没有设置,Git会自动处理行尾符
|
||||
* text=auto
|
||||
|
||||
# 明确指定文本文件使用LF
|
||||
*.js text eol=lf
|
||||
*.jsx text eol=lf
|
||||
*.ts text eol=lf
|
||||
*.tsx text eol=lf
|
||||
*.json text eol=lf
|
||||
*.css text eol=lf
|
||||
*.scss text eol=lf
|
||||
*.html text eol=lf
|
||||
*.md text eol=lf
|
||||
*.yml text eol=lf
|
||||
*.yaml text eol=lf
|
||||
|
||||
# 二进制文件
|
||||
*.png binary
|
||||
*.jpg binary
|
||||
*.jpeg binary
|
||||
*.gif binary
|
||||
*.ico binary
|
||||
*.svg binary
|
||||
*.woff binary
|
||||
*.woff2 binary
|
||||
*.ttf binary
|
||||
*.eot binary
|
||||
6
.gitignore
vendored
Normal file
@@ -0,0 +1,6 @@
|
||||
node_modules/
|
||||
dist/
|
||||
build/
|
||||
yarn.lock
|
||||
.env
|
||||
.DS_Store
|
||||
13
.prettierrc
Normal file
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"semi": true,
|
||||
"trailingComma": "all",
|
||||
"singleQuote": false,
|
||||
"printWidth": 80,
|
||||
"tabWidth": 2,
|
||||
"useTabs": false,
|
||||
"endOfLine": "lf",
|
||||
"bracketSpacing": true,
|
||||
"arrowParens": "avoid",
|
||||
"jsxSingleQuote": false,
|
||||
"quoteProps": "as-needed"
|
||||
}
|
||||
8
.vite/deps/_metadata.json
Normal file
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"hash": "45625a3b",
|
||||
"configHash": "151db3de",
|
||||
"lockfileHash": "e3b0c442",
|
||||
"browserHash": "7201c060",
|
||||
"optimized": {},
|
||||
"chunks": {}
|
||||
}
|
||||
3
.vite/deps/package.json
Normal file
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"type": "module"
|
||||
}
|
||||
11
.vscode/extensions.json
vendored
Normal file
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"recommendations": [
|
||||
"esbenp.prettier-vscode",
|
||||
"dbaeumer.vscode-eslint",
|
||||
"bradlc.vscode-tailwindcss",
|
||||
"ms-vscode.vscode-typescript-next",
|
||||
"formulahendry.auto-rename-tag",
|
||||
"christian-kohler.path-intellisense",
|
||||
"ms-vscode.vscode-json"
|
||||
]
|
||||
}
|
||||
45
.vscode/settings.json
vendored
Normal file
@@ -0,0 +1,45 @@
|
||||
{
|
||||
"files.eol": "\n",
|
||||
"files.insertFinalNewline": true,
|
||||
"files.trimFinalNewlines": true,
|
||||
"files.trimTrailingWhitespace": true,
|
||||
"editor.formatOnSave": true,
|
||||
"editor.defaultFormatter": "esbenp.prettier-vscode",
|
||||
"editor.codeActionsOnSave": {
|
||||
"source.fixAll.eslint": "explicit",
|
||||
"source.organizeImports": "never"
|
||||
},
|
||||
"eslint.validate": [
|
||||
"javascript",
|
||||
"javascriptreact",
|
||||
"typescript",
|
||||
"typescriptreact"
|
||||
],
|
||||
"eslint.format.enable": false,
|
||||
"[javascript]": {
|
||||
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
||||
},
|
||||
"[typescript]": {
|
||||
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
||||
},
|
||||
"[javascriptreact]": {
|
||||
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
||||
},
|
||||
"[typescriptreact]": {
|
||||
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
||||
},
|
||||
"[json]": {
|
||||
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
||||
},
|
||||
"[scss]": {
|
||||
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
||||
},
|
||||
"[css]": {
|
||||
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
||||
},
|
||||
"typescript.preferences.importModuleSpecifier": "relative",
|
||||
"typescript.suggest.autoImports": true,
|
||||
"editor.tabSize": 2,
|
||||
"editor.insertSpaces": true,
|
||||
"editor.detectIndentation": false
|
||||
}
|
||||
134
devlop.py
Normal file
@@ -0,0 +1,134 @@
|
||||
import os
|
||||
import zipfile
|
||||
import paramiko
|
||||
|
||||
# 配置
|
||||
local_dir = './dist' # 本地要打包的目录
|
||||
zip_name = 'dist.zip'
|
||||
# 上传到服务器的 zip 路径
|
||||
remote_path = '/www/wwwroot/auto-devlop/tkb-wechat/dist.zip' # 服务器上的临时zip路径
|
||||
server_ip = '42.194.245.239'
|
||||
server_port = 6523
|
||||
server_user = 'yongpxu'
|
||||
server_pwd = 'Aa123456789.'
|
||||
# 服务器 dist 相关目录
|
||||
remote_base_dir = '/www/wwwroot/auto-devlop/tkb-wechat'
|
||||
dist_dir = f'{remote_base_dir}/dist'
|
||||
dist1_dir = f'{remote_base_dir}/dist1'
|
||||
dist2_dir = f'{remote_base_dir}/dist2'
|
||||
|
||||
# 美化输出用的函数
|
||||
from datetime import datetime
|
||||
|
||||
def info(msg):
|
||||
print(f"\033[36m[INFO {datetime.now().strftime('%H:%M:%S')}] {msg}\033[0m")
|
||||
|
||||
def success(msg):
|
||||
print(f"\033[32m[SUCCESS] {msg}\033[0m")
|
||||
|
||||
def error(msg):
|
||||
print(f"\033[31m[ERROR] {msg}\033[0m")
|
||||
|
||||
def step(msg):
|
||||
print(f"\n\033[35m==== {msg} ====" + "\033[0m")
|
||||
|
||||
# 1. 先运行 pnpm build
|
||||
step('Step 1: 构建项目 (pnpm build)')
|
||||
info('开始执行 pnpm build...')
|
||||
ret = os.system('pnpm build')
|
||||
if ret != 0:
|
||||
error('pnpm build 失败,终止部署!')
|
||||
exit(1)
|
||||
success('pnpm build 完成')
|
||||
|
||||
# 2. 打包
|
||||
step('Step 2: 打包 dist 目录为 zip')
|
||||
info('开始打包 dist 目录...')
|
||||
with zipfile.ZipFile(zip_name, 'w', zipfile.ZIP_DEFLATED) as zipf:
|
||||
for root, dirs, files in os.walk(local_dir):
|
||||
for file in files:
|
||||
filepath = os.path.join(root, file)
|
||||
arcname = os.path.relpath(filepath, local_dir)
|
||||
zipf.write(filepath, arcname)
|
||||
success('本地打包完成')
|
||||
|
||||
# 3. 上传
|
||||
step('Step 3: 上传 zip 包到服务器')
|
||||
info('开始上传 zip 包...')
|
||||
|
||||
# 获取本地文件大小
|
||||
local_size = os.path.getsize(zip_name)
|
||||
info(f'本地文件大小: {local_size / 1024 / 1024:.2f} MB')
|
||||
|
||||
transport = paramiko.Transport((server_ip, server_port))
|
||||
transport.connect(username=server_user, password=server_pwd)
|
||||
sftp = paramiko.SFTPClient.from_transport(transport)
|
||||
|
||||
try:
|
||||
# 如果远程文件已存在,先删除
|
||||
try:
|
||||
sftp.remove(remote_path)
|
||||
info('已删除远程旧文件')
|
||||
except:
|
||||
pass # 文件不存在,忽略
|
||||
|
||||
# 确保远程目录存在
|
||||
remote_dir = os.path.dirname(remote_path)
|
||||
try:
|
||||
sftp.stat(remote_dir)
|
||||
except:
|
||||
error(f'远程目录不存在: {remote_dir}')
|
||||
raise
|
||||
|
||||
# 上传进度回调
|
||||
def progress_callback(transferred, total):
|
||||
percent = (transferred / total) * 100
|
||||
if transferred % (1024 * 1024) == 0 or transferred == total: # 每MB或完成时显示
|
||||
info(f'上传进度: {transferred / 1024 / 1024:.2f}MB / {total / 1024 / 1024:.2f}MB ({percent:.1f}%)')
|
||||
|
||||
# 上传文件
|
||||
sftp.put(zip_name, remote_path, callback=progress_callback, confirm=True)
|
||||
|
||||
# 验证远程文件大小
|
||||
remote_size = sftp.stat(remote_path).st_size
|
||||
info(f'远程文件大小: {remote_size / 1024 / 1024:.2f} MB')
|
||||
|
||||
if remote_size != local_size:
|
||||
raise IOError(f'文件大小不匹配!本地: {local_size}, 远程: {remote_size}')
|
||||
|
||||
success('上传到服务器完成')
|
||||
|
||||
finally:
|
||||
sftp.close()
|
||||
transport.close()
|
||||
|
||||
# 删除本地 dist.zip
|
||||
try:
|
||||
os.remove(zip_name)
|
||||
success('本地 dist.zip 已删除')
|
||||
except Exception as e:
|
||||
error(f'本地 dist.zip 删除失败: {e}')
|
||||
|
||||
# 4. 远程解压并覆盖
|
||||
step('Step 4: 服务器端解压、切换目录')
|
||||
ssh = paramiko.SSHClient()
|
||||
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
|
||||
ssh.connect(server_ip, server_port, server_user, server_pwd)
|
||||
commands = [
|
||||
f'unzip -oq {remote_path} -d {dist2_dir}', # 静默解压
|
||||
f'rm {remote_path}',
|
||||
f'if [ -d {dist_dir} ]; then mv {dist_dir} {dist1_dir}; fi',
|
||||
f'mv {dist2_dir} {dist_dir}',
|
||||
f'rm -rf {dist1_dir}'
|
||||
]
|
||||
for i, cmd in enumerate(commands, 1):
|
||||
info(f'执行第{i}步: {cmd}')
|
||||
stdin, stdout, stderr = ssh.exec_command(cmd)
|
||||
out, err = stdout.read().decode(), stderr.read().decode()
|
||||
# 只打印非 unzip 命令的输出
|
||||
if i != 1 and out.strip():
|
||||
print(out.strip())
|
||||
if err.strip():
|
||||
error(err.strip())
|
||||
ssh.close()
|
||||
success('服务器解压并覆盖完成,部署成功!')
|
||||
121
emoji-mapping.json
Normal file
@@ -0,0 +1,121 @@
|
||||
{
|
||||
"face": {
|
||||
"微笑": "smile",
|
||||
"撇嘴": "pout",
|
||||
"色": "lust",
|
||||
"发呆": "daze",
|
||||
"得意": "proud",
|
||||
"流泪": "cry",
|
||||
"害羞": "shy",
|
||||
"闭嘴": "shut-up",
|
||||
"睡": "sleep",
|
||||
"大哭": "sob",
|
||||
"尴尬": "awkward",
|
||||
"发怒": "angry",
|
||||
"调皮": "naughty",
|
||||
"呲牙": "grin",
|
||||
"惊讶": "surprised",
|
||||
"难过": "sad",
|
||||
"囧": "embarrassed",
|
||||
"抓狂": "crazy",
|
||||
"吐": "vomit",
|
||||
"偷笑": "snicker",
|
||||
"愉快": "happy",
|
||||
"白眼": "roll-eyes",
|
||||
"傲慢": "arrogant",
|
||||
"困": "sleepy",
|
||||
"惊恐": "panic",
|
||||
"憨笑": "silly-smile",
|
||||
"悠闲": "relaxed",
|
||||
"咒骂": "curse",
|
||||
"疑问": "question",
|
||||
"嘘": "shush",
|
||||
"晕": "dizzy",
|
||||
"衰": "unlucky",
|
||||
"骷髅": "skull",
|
||||
"敲打": "knock",
|
||||
"再见": "goodbye",
|
||||
"擦汗": "wipe-sweat",
|
||||
"抠鼻": "pick-nose",
|
||||
"鼓掌": "clap",
|
||||
"坏笑": "evil-smile",
|
||||
"右哼哼": "right-hum",
|
||||
"鄙视": "despise",
|
||||
"委屈": "wronged",
|
||||
"快哭了": "about-to-cry",
|
||||
"阴险": "sinister",
|
||||
"亲亲": "kiss",
|
||||
"可怜": "pitiful",
|
||||
"笑脸": "smiley",
|
||||
"生病": "sick",
|
||||
"脸红": "blush",
|
||||
"破涕为笑": "smile-through-tears",
|
||||
"恐惧": "fear",
|
||||
"失望": "disappointed",
|
||||
"无语": "speechless",
|
||||
"嘿哈": "hey-ha",
|
||||
"捂脸": "facepalm",
|
||||
"机智": "smart",
|
||||
"皱眉": "frown",
|
||||
"耶": "yeah",
|
||||
"吃瓜": "eat-melon",
|
||||
"加油": "cheer-up",
|
||||
"汗": "sweat",
|
||||
"天啊": "oh-my-god",
|
||||
"Emm": "emm",
|
||||
"社会社会": "social",
|
||||
"旺柴": "doge",
|
||||
"好的": "ok",
|
||||
"打脸": "slap-face",
|
||||
"哇": "wow",
|
||||
"翻白眼": "eye-roll",
|
||||
"666": "666",
|
||||
"让我看看": "let-me-see",
|
||||
"叹气": "sigh",
|
||||
"苦涩": "bitter",
|
||||
"裂开": "crack",
|
||||
"奸笑": "wicked-smile"
|
||||
},
|
||||
"gesture": {
|
||||
"握手": "handshake",
|
||||
"胜利": "victory",
|
||||
"抱拳": "fist-salute",
|
||||
"勾引": "beckon",
|
||||
"拳头": "fist",
|
||||
"OK": "ok",
|
||||
"合十": "pray",
|
||||
"强": "strong",
|
||||
"拥抱": "hug",
|
||||
"弱": "weak"
|
||||
},
|
||||
"animal": {
|
||||
"猪头": "pig-head",
|
||||
"跳跳": "jump",
|
||||
"发抖": "shiver",
|
||||
"转圈": "spin"
|
||||
},
|
||||
"blessing": {
|
||||
"庆祝": "celebrate",
|
||||
"礼物": "gift",
|
||||
"红包": "red-envelope",
|
||||
"發": "fortune",
|
||||
"福": "blessing",
|
||||
"烟花": "fireworks",
|
||||
"爆竹": "firecrackers"
|
||||
},
|
||||
"other": {
|
||||
"嘴唇": "lips",
|
||||
"爱心": "heart",
|
||||
"心碎": "broken-heart",
|
||||
"啤酒": "beer",
|
||||
"咖啡": "coffee",
|
||||
"蛋糕": "cake",
|
||||
"凋谢": "wither",
|
||||
"菜刀": "knife",
|
||||
"炸弹": "bomb",
|
||||
"便便": "poop",
|
||||
"太阳": "sun",
|
||||
"月亮": "moon",
|
||||
"玫瑰": "rose"
|
||||
}
|
||||
}
|
||||
BIN
favicon.ico
Normal file
|
After Width: | Height: | Size: 3.8 KiB |
23
index.html
Normal file
@@ -0,0 +1,23 @@
|
||||
<!doctype html>
|
||||
<html lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>触客宝</title>
|
||||
<style>
|
||||
html {
|
||||
font-size: 16px;
|
||||
}
|
||||
</style>
|
||||
<!-- 引入 uni-app web-view SDK(必须) -->
|
||||
<script type="text/javascript" src="/websdk.js"></script>
|
||||
<script
|
||||
charset="utf-8"
|
||||
src="https://map.qq.com/api/gljs?v=1.exp&libraries=service&key=7DZBZ-ZSRK3-QJN3W-O5VTV-4E2P6-7GFYX"
|
||||
></script>
|
||||
</head>
|
||||
<body>
|
||||
<div id="root"></div>
|
||||
<script type="module" src="/src/main.tsx"></script>
|
||||
</body>
|
||||
</html>
|
||||
7769
package-lock.json
generated
Normal file
56
package.json
Normal file
@@ -0,0 +1,56 @@
|
||||
{
|
||||
"name": "cunkebao",
|
||||
"version": "3.0.0",
|
||||
"license": "MIT",
|
||||
"private": true,
|
||||
"type": "module",
|
||||
"dependencies": {
|
||||
"@ant-design/icons": "^5.6.1",
|
||||
"@sentry/react": "^10.29.0",
|
||||
"@tanstack/react-query": "^5.90.12",
|
||||
"antd": "^5.13.1",
|
||||
"antd-mobile": "^5.39.1",
|
||||
"antd-mobile-icons": "^0.3.0",
|
||||
"axios": "^1.6.7",
|
||||
"dayjs": "^1.11.13",
|
||||
"dexie": "^4.2.0",
|
||||
"echarts": "^5.6.0",
|
||||
"echarts-for-react": "^3.0.2",
|
||||
"react": "^18.2.0",
|
||||
"react-dom": "^18.2.0",
|
||||
"react-router-dom": "^6.20.0",
|
||||
"react-window": "^1.8.11",
|
||||
"vconsole": "^3.15.1",
|
||||
"xmldom": "^0.6.0",
|
||||
"zustand": "^5.0.6"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/node": "^24.0.14",
|
||||
"@types/react": "^19.1.8",
|
||||
"@types/react-dom": "^19.1.6",
|
||||
"@typescript-eslint/eslint-plugin": "^7.7.0",
|
||||
"@typescript-eslint/parser": "^7.7.0",
|
||||
"@vitejs/plugin-react": "^4.6.0",
|
||||
"eslint": "^8.57.0",
|
||||
"eslint-config-prettier": "^9.1.0",
|
||||
"eslint-plugin-prettier": "^5.1.3",
|
||||
"eslint-plugin-react": "^7.34.1",
|
||||
"eslint-plugin-react-hooks": "^5.2.0",
|
||||
"postcss": "^8.4.38",
|
||||
"postcss-pxtorem": "^6.0.0",
|
||||
"prettier": "^3.2.5",
|
||||
"sass": "^1.75.0",
|
||||
"typescript": "^5.4.5",
|
||||
"vite": "^7.0.5"
|
||||
},
|
||||
"scripts": {
|
||||
"dev": "pnpm vite",
|
||||
"build": "pnpm vite build",
|
||||
"build:check": "tsc && pnpm vite build",
|
||||
"preview": "pnpm vite preview",
|
||||
"lint": "eslint src --ext .js,.jsx,.ts,.tsx --fix",
|
||||
"format": "prettier --write \"src/**/*.{js,jsx,ts,tsx,json,scss,css}\"",
|
||||
"lint:check": "eslint src --ext .js,.jsx,.ts,.tsx",
|
||||
"format:check": "prettier --check \"src/**/*.{js,jsx,ts,tsx,json,scss,css}\""
|
||||
}
|
||||
}
|
||||
5144
pnpm-lock.yaml
generated
Normal file
8
postcss.config.js
Normal file
@@ -0,0 +1,8 @@
|
||||
export default {
|
||||
plugins: {
|
||||
"postcss-pxtorem": {
|
||||
rootValue: 16,
|
||||
propList: ["*"],
|
||||
},
|
||||
},
|
||||
};
|
||||
BIN
public/assets/animal/jump.png
Normal file
|
After Width: | Height: | Size: 11 KiB |
BIN
public/assets/animal/pig-head.png
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
public/assets/animal/shiver.png
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
public/assets/animal/spin.png
Normal file
|
After Width: | Height: | Size: 10 KiB |
BIN
public/assets/blessing/blessing.png
Normal file
|
After Width: | Height: | Size: 4.8 KiB |
BIN
public/assets/blessing/celebrate.png
Normal file
|
After Width: | Height: | Size: 4.1 KiB |
BIN
public/assets/blessing/firecrackers.png
Normal file
|
After Width: | Height: | Size: 9.8 KiB |
BIN
public/assets/blessing/fireworks.png
Normal file
|
After Width: | Height: | Size: 4.7 KiB |
BIN
public/assets/blessing/fortune.png
Normal file
|
After Width: | Height: | Size: 5.4 KiB |
BIN
public/assets/blessing/gift.png
Normal file
|
After Width: | Height: | Size: 5.4 KiB |
BIN
public/assets/blessing/red-envelope.png
Normal file
|
After Width: | Height: | Size: 3.7 KiB |
BIN
public/assets/face/666.png
Normal file
|
After Width: | Height: | Size: 5.7 KiB |
BIN
public/assets/face/Emm.png
Normal file
|
After Width: | Height: | Size: 5.1 KiB |
BIN
public/assets/face/about-to-cry.png
Normal file
|
After Width: | Height: | Size: 5.4 KiB |
BIN
public/assets/face/angry.png
Normal file
|
After Width: | Height: | Size: 5.6 KiB |
BIN
public/assets/face/arrogant.png
Normal file
|
After Width: | Height: | Size: 5.4 KiB |
BIN
public/assets/face/awkward.png
Normal file
|
After Width: | Height: | Size: 5.2 KiB |
BIN
public/assets/face/bitter.png
Normal file
|
After Width: | Height: | Size: 4.9 KiB |
BIN
public/assets/face/blush.png
Normal file
|
After Width: | Height: | Size: 5.2 KiB |
BIN
public/assets/face/cheer-up.png
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
public/assets/face/clap.png
Normal file
|
After Width: | Height: | Size: 5.8 KiB |
BIN
public/assets/face/crack.png
Normal file
|
After Width: | Height: | Size: 5.6 KiB |
BIN
public/assets/face/crazy.png
Normal file
|
After Width: | Height: | Size: 5.6 KiB |
BIN
public/assets/face/crying.png
Normal file
|
After Width: | Height: | Size: 4.7 KiB |
BIN
public/assets/face/curse.png
Normal file
|
After Width: | Height: | Size: 5.4 KiB |
BIN
public/assets/face/daze.png
Normal file
|
After Width: | Height: | Size: 5.2 KiB |
BIN
public/assets/face/despise.png
Normal file
|
After Width: | Height: | Size: 5.7 KiB |
BIN
public/assets/face/disappointed.png
Normal file
|
After Width: | Height: | Size: 5.2 KiB |
BIN
public/assets/face/dizzy.png
Normal file
|
After Width: | Height: | Size: 5.7 KiB |
BIN
public/assets/face/doge.png
Normal file
|
After Width: | Height: | Size: 5.0 KiB |
BIN
public/assets/face/eat-melon.png
Normal file
|
After Width: | Height: | Size: 5.1 KiB |
BIN
public/assets/face/embarrassed.png
Normal file
|
After Width: | Height: | Size: 5.2 KiB |
BIN
public/assets/face/evil-smile.png
Normal file
|
After Width: | Height: | Size: 5.4 KiB |
BIN
public/assets/face/eye-roll.png
Normal file
|
After Width: | Height: | Size: 4.7 KiB |
BIN
public/assets/face/facepalm.png
Normal file
|
After Width: | Height: | Size: 5.3 KiB |
BIN
public/assets/face/fear.png
Normal file
|
After Width: | Height: | Size: 5.0 KiB |
BIN
public/assets/face/frown.png
Normal file
|
After Width: | Height: | Size: 5.2 KiB |
BIN
public/assets/face/good.png
Normal file
|
After Width: | Height: | Size: 5.6 KiB |
BIN
public/assets/face/goodbye.png
Normal file
|
After Width: | Height: | Size: 5.7 KiB |
BIN
public/assets/face/grin.png
Normal file
|
After Width: | Height: | Size: 5.5 KiB |
BIN
public/assets/face/happy.png
Normal file
|
After Width: | Height: | Size: 5.2 KiB |
BIN
public/assets/face/hey-ha.png
Normal file
|
After Width: | Height: | Size: 5.9 KiB |
BIN
public/assets/face/kiss.png
Normal file
|
After Width: | Height: | Size: 5.4 KiB |
BIN
public/assets/face/knock.png
Normal file
|
After Width: | Height: | Size: 5.0 KiB |
BIN
public/assets/face/leisurely.png
Normal file
|
After Width: | Height: | Size: 4.9 KiB |
BIN
public/assets/face/let-me-see.png
Normal file
|
After Width: | Height: | Size: 5.3 KiB |
BIN
public/assets/face/lustful.png
Normal file
|
After Width: | Height: | Size: 5.0 KiB |
BIN
public/assets/face/naughty.png
Normal file
|
After Width: | Height: | Size: 5.0 KiB |
BIN
public/assets/face/oh-my.png
Normal file
|
After Width: | Height: | Size: 5.3 KiB |
BIN
public/assets/face/panic.png
Normal file
|
After Width: | Height: | Size: 5.5 KiB |
BIN
public/assets/face/pick-nose.png
Normal file
|
After Width: | Height: | Size: 5.6 KiB |
BIN
public/assets/face/pitiful.png
Normal file
|
After Width: | Height: | Size: 5.7 KiB |
BIN
public/assets/face/pout.png
Normal file
|
After Width: | Height: | Size: 5.5 KiB |
BIN
public/assets/face/question.png
Normal file
|
After Width: | Height: | Size: 5.6 KiB |
BIN
public/assets/face/right-hum.png
Normal file
|
After Width: | Height: | Size: 5.0 KiB |
BIN
public/assets/face/roll-eyes.png
Normal file
|
After Width: | Height: | Size: 5.2 KiB |
BIN
public/assets/face/sad.png
Normal file
|
After Width: | Height: | Size: 5.3 KiB |
BIN
public/assets/face/shush.png
Normal file
|
After Width: | Height: | Size: 5.5 KiB |
BIN
public/assets/face/shut-up.png
Normal file
|
After Width: | Height: | Size: 5.8 KiB |
BIN
public/assets/face/shy.png
Normal file
|
After Width: | Height: | Size: 5.3 KiB |
BIN
public/assets/face/sick.png
Normal file
|
After Width: | Height: | Size: 4.9 KiB |
BIN
public/assets/face/sigh.png
Normal file
|
After Width: | Height: | Size: 5.2 KiB |
BIN
public/assets/face/silly-smile.png
Normal file
|
After Width: | Height: | Size: 5.1 KiB |
BIN
public/assets/face/sinister.png
Normal file
|
After Width: | Height: | Size: 5.4 KiB |
BIN
public/assets/face/skull.png
Normal file
|
After Width: | Height: | Size: 4.8 KiB |
BIN
public/assets/face/slap-face.png
Normal file
|
After Width: | Height: | Size: 5.3 KiB |
BIN
public/assets/face/sleep.png
Normal file
|
After Width: | Height: | Size: 5.3 KiB |
BIN
public/assets/face/sleepy.png
Normal file
|
After Width: | Height: | Size: 5.1 KiB |
BIN
public/assets/face/sly-smile.png
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
public/assets/face/smart.png
Normal file
|
After Width: | Height: | Size: 5.5 KiB |
BIN
public/assets/face/smile.png
Normal file
|
After Width: | Height: | Size: 5.3 KiB |
BIN
public/assets/face/smiley.png
Normal file
|
After Width: | Height: | Size: 5.0 KiB |
BIN
public/assets/face/smug.png
Normal file
|
After Width: | Height: | Size: 4.7 KiB |
BIN
public/assets/face/snicker.png
Normal file
|
After Width: | Height: | Size: 5.6 KiB |
BIN
public/assets/face/social.png
Normal file
|
After Width: | Height: | Size: 5.6 KiB |
BIN
public/assets/face/speechless.png
Normal file
|
After Width: | Height: | Size: 5.3 KiB |
BIN
public/assets/face/surprised.png
Normal file
|
After Width: | Height: | Size: 5.1 KiB |
BIN
public/assets/face/sweat.png
Normal file
|
After Width: | Height: | Size: 4.5 KiB |
BIN
public/assets/face/tears-to-smile.png
Normal file
|
After Width: | Height: | Size: 5.0 KiB |
BIN
public/assets/face/unlucky.png
Normal file
|
After Width: | Height: | Size: 5.4 KiB |
BIN
public/assets/face/vomit.png
Normal file
|
After Width: | Height: | Size: 5.4 KiB |
BIN
public/assets/face/wail.png
Normal file
|
After Width: | Height: | Size: 4.9 KiB |