add 0127-1240
This commit is contained in:
parent
955d8e61ed
commit
c6b608cb6c
10
Dockerfile
10
Dockerfile
|
@ -1,5 +1,5 @@
|
|||
# 基础镜像
|
||||
FROM node:20-alpine as base
|
||||
FROM node:18.17-alpine as base
|
||||
# 更改 apk 镜像源为阿里云
|
||||
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories
|
||||
# 设置 npm 镜像源
|
||||
|
@ -24,17 +24,22 @@ COPY tsconfig.base.json .
|
|||
FROM base As server-build
|
||||
WORKDIR /app
|
||||
COPY packages/common /app/packages/common
|
||||
COPY packages/tus /app/packages/tus
|
||||
COPY apps/server /app/apps/server
|
||||
RUN pnpm install --filter server
|
||||
RUN pnpm install --filter common
|
||||
RUN pnpm install --filter tus
|
||||
RUN pnpm install --filter server
|
||||
RUN pnpm --filter common generate && pnpm --filter common build:cjs
|
||||
RUN pnpm --filter tus build
|
||||
RUN pnpm --filter server build
|
||||
|
||||
FROM base As server-prod-dep
|
||||
WORKDIR /app
|
||||
COPY packages/common /app/packages/common
|
||||
COPY packages/tus /app/packages/tus
|
||||
COPY apps/server /app/apps/server
|
||||
RUN pnpm install --filter common --prod
|
||||
RUN pnpm install --filter tus --prod
|
||||
RUN pnpm install --filter server --prod
|
||||
|
||||
|
||||
|
@ -43,6 +48,7 @@ FROM server-prod-dep as server
|
|||
WORKDIR /app
|
||||
ENV NODE_ENV production
|
||||
COPY --from=server-build /app/packages/common/dist ./packages/common/dist
|
||||
COPY --from=server-build /app/packages/tus/dist ./packages/tus/dist
|
||||
COPY --from=server-build /app/apps/server/dist ./apps/server/dist
|
||||
COPY apps/server/entrypoint.sh ./apps/server/entrypoint.sh
|
||||
|
||||
|
|
|
@ -31,6 +31,7 @@
|
|||
"@nestjs/websockets": "^10.3.10",
|
||||
"@nice/common": "workspace:*",
|
||||
"@nice/tus": "workspace:*",
|
||||
"@prisma/client": "5.17.0",
|
||||
"@trpc/server": "11.0.0-rc.456",
|
||||
"argon2": "^0.41.1",
|
||||
"axios": "^1.7.2",
|
||||
|
@ -70,11 +71,13 @@
|
|||
"@nestjs/testing": "^10.0.0",
|
||||
"@types/exceljs": "^1.3.0",
|
||||
"@types/express": "^4.17.21",
|
||||
"@types/express-serve-static-core": "4.17.41",
|
||||
"@types/fluent-ffmpeg": "^2.1.27",
|
||||
"@types/jest": "^29.5.2",
|
||||
"@types/mime-types": "^2.1.4",
|
||||
"@types/multer": "^1.4.12",
|
||||
"@types/node": "^20.3.1",
|
||||
"@types/qs": "6.9.17",
|
||||
"@types/supertest": "^6.0.0",
|
||||
"@types/uuid": "^10.0.0",
|
||||
"@types/ws": "^8.5.13",
|
||||
|
|
|
@ -9,8 +9,15 @@ import { DepartmentModule } from '@server/models/department/department.module';
|
|||
import { TermModule } from '@server/models/term/term.module';
|
||||
|
||||
@Module({
|
||||
imports: [MinioModule, AuthModule, AppConfigModule, StaffModule, DepartmentModule, TermModule],
|
||||
imports: [
|
||||
MinioModule,
|
||||
AuthModule,
|
||||
AppConfigModule,
|
||||
StaffModule,
|
||||
DepartmentModule,
|
||||
TermModule,
|
||||
],
|
||||
providers: [InitService, GenDevService],
|
||||
exports: [InitService]
|
||||
exports: [InitService],
|
||||
})
|
||||
export class InitModule { }
|
||||
export class InitModule {}
|
||||
|
|
|
@ -23,7 +23,7 @@ export class TusService implements OnModuleInit {
|
|||
constructor(
|
||||
private readonly resourceService: ResourceService,
|
||||
@InjectQueue('file-queue') private fileQueue: Queue,
|
||||
) { }
|
||||
) {}
|
||||
onModuleInit() {
|
||||
this.initializeTusServer();
|
||||
this.setupTusEventHandlers();
|
||||
|
|
|
@ -3,6 +3,6 @@ import { MinioService } from './minio.service';
|
|||
|
||||
@Module({
|
||||
providers: [MinioService],
|
||||
exports: [MinioService]
|
||||
exports: [MinioService],
|
||||
})
|
||||
export class MinioModule {}
|
||||
|
|
|
@ -1,2 +1,5 @@
|
|||
VITE_APP_TUS_URL=http://localhost:8080
|
||||
VITE_APP_API_URL=http://localhost:3000
|
||||
VITE_APP_SERVER_IP=192.168.112.239
|
||||
VITE_APP_UOLOAD_PORT=80
|
||||
VITE_APP_SERVER_PORT=3000
|
||||
VITE_APP_VERSION=0.3.0
|
||||
VITE_APP_APP_NAME=信箱
|
|
@ -1,24 +1,23 @@
|
|||
<!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" />
|
||||
<script>
|
||||
window.env = {
|
||||
VITE_APP_SERVER_IP: "$VITE_APP_SERVER_IP",
|
||||
VITE_APP_SERVER_PORT: "$VITE_APP_SERVER_PORT",
|
||||
VITE_APP_UOLOAD_PORT: "$VITE_APP_UOLOAD_PORT",
|
||||
VITE_APP_APP_NAME: "$VITE_APP_APP_NAME",
|
||||
VITE_APP_VERSION: "$VITE_APP_VERSION",
|
||||
};
|
||||
</script>
|
||||
<title>信箱</title>
|
||||
</head>
|
||||
|
||||
<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" />
|
||||
<script>
|
||||
window.env = {
|
||||
VITE_APP_SERVER_IP: "$VITE_APP_SERVER_IP",
|
||||
VITE_APP_UOLOAD_IP: "$VITE_APP_UOLOAD_IP",
|
||||
VITE_APP_APP_NAME: "$VITE_APP_APP_NAME",
|
||||
VITE_APP_VERSION: "$VITE_APP_VERSION",
|
||||
};
|
||||
</script>
|
||||
<title>信箱</title>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div id="root"></div>
|
||||
<script type="module" src="/src/main.tsx"></script>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
<body>
|
||||
<div id="root"></div>
|
||||
<script type="module" src="/src/main.tsx"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
@ -120,13 +120,13 @@ export default function StaffForm() {
|
|||
<AvatarUploader
|
||||
placeholder="点击上传头像"
|
||||
className="rounded-lg"
|
||||
|
||||
style={{
|
||||
width: "120px",
|
||||
height: "150px",
|
||||
}}></AvatarUploader>
|
||||
</Form.Item>
|
||||
</div>
|
||||
|
||||
<div className="grid grid-cols-1 gap-2 flex-1">
|
||||
<Form.Item
|
||||
noStyle
|
||||
|
|
|
@ -3,10 +3,9 @@ import { Image, Button, Row, Col, Tooltip } from "antd";
|
|||
import { PostDto } from "@nice/common";
|
||||
import { env } from "@web/src/env";
|
||||
import { getFileIcon } from "./utils";
|
||||
import { formatFileSize, getCompressedImageUrl } from '@nice/utils';
|
||||
import { formatFileSize, getCompressedImageUrl } from "@nice/utils";
|
||||
import { useNavigate } from "react-router-dom";
|
||||
|
||||
|
||||
export default function PostResources({ post }: { post: PostDto }) {
|
||||
const { resources } = useMemo(() => {
|
||||
if (!post?.resources) return { resources: [] };
|
||||
|
@ -14,16 +13,18 @@ export default function PostResources({ post }: { post: PostDto }) {
|
|||
const isImage = (url: string) =>
|
||||
/\.(png|jpg|jpeg|gif|webp)$/i.test(url);
|
||||
|
||||
const sortedResources = post.resources.map(resource => {
|
||||
const original = `http://${env.UOLOAD_IP}/uploads/${resource.url}`
|
||||
const isImg = isImage(resource.url)
|
||||
return {
|
||||
...resource,
|
||||
url: isImg ? getCompressedImageUrl(original) : original,
|
||||
originalUrl: original,
|
||||
isImage: isImg
|
||||
}
|
||||
}).sort((a, b) => a.isImage === b.isImage ? 0 : a.isImage ? -1 : 1)
|
||||
const sortedResources = post.resources
|
||||
.map((resource) => {
|
||||
const original = `http://${env.SERVER_IP}:${env.UOLOAD_PORT}/uploads/${resource.url}`;
|
||||
const isImg = isImage(resource.url);
|
||||
return {
|
||||
...resource,
|
||||
url: isImg ? getCompressedImageUrl(original) : original,
|
||||
originalUrl: original,
|
||||
isImage: isImg,
|
||||
};
|
||||
})
|
||||
.sort((a, b) => (a.isImage === b.isImage ? 0 : a.isImage ? -1 : 1));
|
||||
|
||||
return { resources: sortedResources };
|
||||
}, [post]);
|
||||
|
@ -89,8 +90,7 @@ export default function PostResources({ post }: { post: PostDto }) {
|
|||
href={resource.originalUrl}
|
||||
target="_blank"
|
||||
download={true}
|
||||
title="点击下载文件"
|
||||
>
|
||||
title="点击下载文件">
|
||||
{/* 超紧凑卡片容器 */}
|
||||
<div className="w-[120px] h-[80px] p-2 flex flex-col items-center justify-between rounded-xl hover:bg-primary-50/40 cursor-pointer">
|
||||
{/* 微型文件图标 */}
|
||||
|
@ -101,14 +101,22 @@ export default function PostResources({ post }: { post: PostDto }) {
|
|||
{/* 压缩信息展示 */}
|
||||
<div className="w-full text-center space-y-0.5">
|
||||
<p className="text-xs font-medium text-gray-800 truncate">
|
||||
{resource.title?.slice(0, 12) || "未命名"}
|
||||
{resource.title?.slice(0, 12) ||
|
||||
"未命名"}
|
||||
</p>
|
||||
<div className="flex items-center justify-between text-xs text-gray-500">
|
||||
<span className="bg-gray-100 px-0.5 rounded-sm">
|
||||
{resource.url.split(".").pop()?.slice(0, 4).toUpperCase()}
|
||||
{resource.url
|
||||
.split(".")
|
||||
.pop()
|
||||
?.slice(0, 4)
|
||||
.toUpperCase()}
|
||||
</span>
|
||||
<span>
|
||||
{resource.meta.size && formatFileSize(resource.meta.size)}
|
||||
{resource.meta.size &&
|
||||
formatFileSize(
|
||||
resource.meta.size
|
||||
)}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -2,7 +2,8 @@ export const env: {
|
|||
APP_NAME: string;
|
||||
SERVER_IP: string;
|
||||
VERSION: string;
|
||||
UOLOAD_IP: string;
|
||||
UOLOAD_PORT: string;
|
||||
SERVER_PORT: string;
|
||||
} = {
|
||||
APP_NAME: import.meta.env.PROD
|
||||
? (window as any).env.VITE_APP_APP_NAME
|
||||
|
@ -10,9 +11,12 @@ export const env: {
|
|||
SERVER_IP: import.meta.env.PROD
|
||||
? (window as any).env.VITE_APP_SERVER_IP
|
||||
: import.meta.env.VITE_APP_SERVER_IP,
|
||||
UOLOAD_IP: import.meta.env.PROD
|
||||
? (window as any).env.VITE_APP_UOLOAD_IP
|
||||
: import.meta.env.VITE_APP_UOLOAD_IP,
|
||||
UOLOAD_PORT: import.meta.env.PROD
|
||||
? (window as any).env.VITE_APP_UOLOAD_PORT
|
||||
: import.meta.env.VITE_APP_UOLOAD_PORT,
|
||||
SERVER_PORT: import.meta.env.PROD
|
||||
? (window as any).env.VITE_APP_SERVER_PORT
|
||||
: import.meta.env.VITE_APP_SERVER_PORT,
|
||||
VERSION: import.meta.env.PROD
|
||||
? (window as any).env.VITE_APP_VERSION
|
||||
: import.meta.env.VITE_APP_VERSION,
|
||||
|
|
|
@ -1,17 +1,31 @@
|
|||
|
||||
import { useCallback, useMemo } from "react";
|
||||
import { env } from "../env";
|
||||
export function useLocalSettings() {
|
||||
const getBaseUrl = useCallback((protocol: string, port: number) => {
|
||||
return `${protocol}://${env.SERVER_IP}:${port}`;
|
||||
}, []);
|
||||
const tusUrl = useMemo(() => getBaseUrl('http', 8080), [getBaseUrl]);
|
||||
const apiUrl = useMemo(() => getBaseUrl('http', 3000), [getBaseUrl]);
|
||||
const websocketUrl = useMemo(() => getBaseUrl('ws', 3000), [getBaseUrl]);
|
||||
const checkIsTusUrl = useCallback((url: string) => {
|
||||
return url.startsWith(tusUrl)
|
||||
}, [tusUrl])
|
||||
return {
|
||||
apiUrl, websocketUrl, checkIsTusUrl, tusUrl
|
||||
}
|
||||
}
|
||||
const getBaseUrl = useCallback(
|
||||
(protocol: string, port: number | string) => {
|
||||
return `${protocol}://${env.SERVER_IP}:${port}`;
|
||||
},
|
||||
[]
|
||||
);
|
||||
const tusUrl = useMemo(() => getBaseUrl("http", 8080), [getBaseUrl]);
|
||||
const apiUrl = useMemo(
|
||||
() => getBaseUrl("http", env.SERVER_PORT),
|
||||
[getBaseUrl]
|
||||
);
|
||||
const websocketUrl = useMemo(
|
||||
() => getBaseUrl("ws", env.SERVER_PORT),
|
||||
[getBaseUrl]
|
||||
);
|
||||
const checkIsTusUrl = useCallback(
|
||||
(url: string) => {
|
||||
return url.startsWith(tusUrl);
|
||||
},
|
||||
[tusUrl]
|
||||
);
|
||||
return {
|
||||
apiUrl,
|
||||
websocketUrl,
|
||||
checkIsTusUrl,
|
||||
tusUrl,
|
||||
};
|
||||
}
|
||||
|
|
|
@ -35,7 +35,7 @@ export function useTusUpload() {
|
|||
if (uploadIndex === -1 || uploadIndex + 4 >= parts.length) {
|
||||
throw new Error("Invalid upload URL format");
|
||||
}
|
||||
const resUrl = `http://${env.UOLOAD_IP}/uploads/${parts.slice(uploadIndex + 1, uploadIndex + 6).join("/")}`;
|
||||
const resUrl = `http://${env.SERVER_IP}:${env.UOLOAD_PORT}/uploads/${parts.slice(uploadIndex + 1, uploadIndex + 6).join("/")}`;
|
||||
|
||||
return resUrl;
|
||||
};
|
||||
|
@ -58,7 +58,7 @@ export function useTusUpload() {
|
|||
|
||||
try {
|
||||
const upload = new tus.Upload(file, {
|
||||
endpoint: "http://localhost:3000/upload",
|
||||
endpoint: `http://${env.SERVER_IP}:${env.SERVER_PORT}/upload`,
|
||||
retryDelays: [0, 1000, 3000, 5000],
|
||||
metadata: {
|
||||
filename: file.name,
|
||||
|
@ -75,7 +75,6 @@ export function useTusUpload() {
|
|||
}));
|
||||
},
|
||||
onSuccess: async (payload) => {
|
||||
|
||||
try {
|
||||
if (upload.url) {
|
||||
const fileId = getFileId(upload.url);
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
import axios from 'axios';
|
||||
import { env } from '../env';
|
||||
const BASE_URL = `http://${env.SERVER_IP}:3000`
|
||||
const BASE_URL = `http://${env.SERVER_IP}:${env.SERVER_PORT}`
|
||||
const apiClient = axios.create({
|
||||
baseURL: BASE_URL,
|
||||
// withCredentials: true,
|
||||
|
|
|
@ -101,7 +101,7 @@ server {
|
|||
# 仅供内部使用
|
||||
internal;
|
||||
# 代理到认证服务
|
||||
proxy_pass http://${SERVER_IP}:3000/auth/file;
|
||||
proxy_pass http://${SERVER_IP}:${SERVER_PORT}/auth/file;
|
||||
# 请求优化:不传递请求体
|
||||
proxy_pass_request_body off;
|
||||
proxy_set_header Content-Length "";
|
||||
|
|
|
@ -5,7 +5,7 @@ for template in /etc/nginx/conf.d/*.template; do
|
|||
# 将输出文件名改为 .conf 结尾
|
||||
conf="${template%.template}.conf"
|
||||
echo "Processing $template"
|
||||
if envsubst '$SERVER_IP' < "$template" > "$conf"; then
|
||||
if envsubst '$SERVER_IP $SERVER_PORT' < "$template" > "$conf"; then
|
||||
echo "Replaced $conf successfully"
|
||||
else
|
||||
echo "Failed to replace $conf"
|
||||
|
|
|
@ -9,5 +9,9 @@
|
|||
},
|
||||
"keywords": [],
|
||||
"author": "insiinc",
|
||||
"license": "ISC"
|
||||
"license": "ISC",
|
||||
"devDependencies": {
|
||||
"@prisma/client": "5.17.0",
|
||||
"runtime@5.17.0": "link:@prisma/client/runtime@5.17.0"
|
||||
}
|
||||
}
|
|
@ -1,452 +1,519 @@
|
|||
import http from 'node:http'
|
||||
import { EventEmitter } from 'node:events'
|
||||
import debug from 'debug'
|
||||
import { GetHandler } from './handlers/GetHandler'
|
||||
import { HeadHandler } from './handlers/HeadHandler'
|
||||
import { OptionsHandler } from './handlers/OptionsHandler'
|
||||
import { PatchHandler } from './handlers/PatchHandler'
|
||||
import { PostHandler } from './handlers/PostHandler'
|
||||
import { DeleteHandler } from './handlers/DeleteHandler'
|
||||
import { validateHeader } from './validators/HeaderValidator'
|
||||
import type stream from 'node:stream'
|
||||
import type { ServerOptions, RouteHandler, WithOptional } from './types'
|
||||
import { MemoryLocker } from './lockers'
|
||||
import { EVENTS, Upload, DataStore, REQUEST_METHODS, ERRORS, TUS_RESUMABLE, EXPOSED_HEADERS, CancellationContext } from './utils'
|
||||
import { message } from 'antd';
|
||||
import http from "node:http";
|
||||
import { EventEmitter } from "node:events";
|
||||
import debug from "debug";
|
||||
import { GetHandler } from "./handlers/GetHandler";
|
||||
import { HeadHandler } from "./handlers/HeadHandler";
|
||||
import { OptionsHandler } from "./handlers/OptionsHandler";
|
||||
import { PatchHandler } from "./handlers/PatchHandler";
|
||||
import { PostHandler } from "./handlers/PostHandler";
|
||||
import { DeleteHandler } from "./handlers/DeleteHandler";
|
||||
import { validateHeader } from "./validators/HeaderValidator";
|
||||
import type stream from "node:stream";
|
||||
import type { ServerOptions, RouteHandler, WithOptional } from "./types";
|
||||
import { MemoryLocker } from "./lockers";
|
||||
import {
|
||||
EVENTS,
|
||||
Upload,
|
||||
DataStore,
|
||||
REQUEST_METHODS,
|
||||
ERRORS,
|
||||
TUS_RESUMABLE,
|
||||
EXPOSED_HEADERS,
|
||||
CancellationContext,
|
||||
} from "./utils";
|
||||
|
||||
/**
|
||||
* 处理器类型映射
|
||||
* 定义了TUS服务器支持的各种HTTP方法对应的处理器实例类型
|
||||
*/
|
||||
type Handlers = {
|
||||
GET: InstanceType<typeof GetHandler> // GET请求处理器
|
||||
HEAD: InstanceType<typeof HeadHandler> // HEAD请求处理器
|
||||
OPTIONS: InstanceType<typeof OptionsHandler> // OPTIONS请求处理器
|
||||
PATCH: InstanceType<typeof PatchHandler> // PATCH请求处理器
|
||||
POST: InstanceType<typeof PostHandler> // POST请求处理器
|
||||
DELETE: InstanceType<typeof DeleteHandler> // DELETE请求处理器
|
||||
}
|
||||
GET: InstanceType<typeof GetHandler>; // GET请求处理器
|
||||
HEAD: InstanceType<typeof HeadHandler>; // HEAD请求处理器
|
||||
OPTIONS: InstanceType<typeof OptionsHandler>; // OPTIONS请求处理器
|
||||
PATCH: InstanceType<typeof PatchHandler>; // PATCH请求处理器
|
||||
POST: InstanceType<typeof PostHandler>; // POST请求处理器
|
||||
DELETE: InstanceType<typeof DeleteHandler>; // DELETE请求处理器
|
||||
};
|
||||
|
||||
/**
|
||||
* TUS服务器事件接口定义
|
||||
* 描述了服务器在不同阶段触发的事件及其处理函数签名
|
||||
*/
|
||||
interface TusEvents {
|
||||
/**
|
||||
* 文件创建后触发
|
||||
* @param req HTTP请求对象
|
||||
* @param res HTTP响应对象
|
||||
* @param upload 上传对象实例
|
||||
* @param url 生成的文件URL
|
||||
*/
|
||||
[EVENTS.POST_CREATE]: (
|
||||
req: http.IncomingMessage,
|
||||
res: http.ServerResponse,
|
||||
upload: Upload,
|
||||
url: string
|
||||
) => void
|
||||
/**
|
||||
* 文件创建后触发
|
||||
* @param req HTTP请求对象
|
||||
* @param res HTTP响应对象
|
||||
* @param upload 上传对象实例
|
||||
* @param url 生成的文件URL
|
||||
*/
|
||||
[EVENTS.POST_CREATE]: (
|
||||
req: http.IncomingMessage,
|
||||
res: http.ServerResponse,
|
||||
upload: Upload,
|
||||
url: string
|
||||
) => void;
|
||||
|
||||
/**
|
||||
* @deprecated 文件接收事件(已废弃)
|
||||
* 建议使用 POST_RECEIVE_V2 替代
|
||||
*/
|
||||
[EVENTS.POST_RECEIVE]: (
|
||||
req: http.IncomingMessage,
|
||||
res: http.ServerResponse,
|
||||
upload: Upload
|
||||
) => void
|
||||
/**
|
||||
* @deprecated 文件接收事件(已废弃)
|
||||
* 建议使用 POST_RECEIVE_V2 替代
|
||||
*/
|
||||
[EVENTS.POST_RECEIVE]: (
|
||||
req: http.IncomingMessage,
|
||||
res: http.ServerResponse,
|
||||
upload: Upload
|
||||
) => void;
|
||||
|
||||
/**
|
||||
* 文件接收事件V2版本
|
||||
* @param req HTTP请求对象
|
||||
* @param upload 上传对象实例
|
||||
*/
|
||||
[EVENTS.POST_RECEIVE_V2]: (req: http.IncomingMessage, upload: Upload) => void
|
||||
/**
|
||||
* 文件接收事件V2版本
|
||||
* @param req HTTP请求对象
|
||||
* @param upload 上传对象实例
|
||||
*/
|
||||
[EVENTS.POST_RECEIVE_V2]: (
|
||||
req: http.IncomingMessage,
|
||||
upload: Upload
|
||||
) => void;
|
||||
|
||||
/**
|
||||
* 文件上传完成事件
|
||||
* @param req HTTP请求对象
|
||||
* @param res HTTP响应对象
|
||||
* @param upload 上传对象实例
|
||||
*/
|
||||
[EVENTS.POST_FINISH]: (
|
||||
req: http.IncomingMessage,
|
||||
res: http.ServerResponse,
|
||||
upload: Upload
|
||||
) => void
|
||||
/**
|
||||
* 文件上传完成事件
|
||||
* @param req HTTP请求对象
|
||||
* @param res HTTP响应对象
|
||||
* @param upload 上传对象实例
|
||||
*/
|
||||
[EVENTS.POST_FINISH]: (
|
||||
req: http.IncomingMessage,
|
||||
res: http.ServerResponse,
|
||||
upload: Upload
|
||||
) => void;
|
||||
|
||||
/**
|
||||
* 文件终止上传事件
|
||||
* @param req HTTP请求对象
|
||||
* @param res HTTP响应对象
|
||||
* @param id 文件唯一标识符
|
||||
*/
|
||||
[EVENTS.POST_TERMINATE]: (
|
||||
req: http.IncomingMessage,
|
||||
res: http.ServerResponse,
|
||||
id: string
|
||||
) => void
|
||||
/**
|
||||
* 文件终止上传事件
|
||||
* @param req HTTP请求对象
|
||||
* @param res HTTP响应对象
|
||||
* @param id 文件唯一标识符
|
||||
*/
|
||||
[EVENTS.POST_TERMINATE]: (
|
||||
req: http.IncomingMessage,
|
||||
res: http.ServerResponse,
|
||||
id: string
|
||||
) => void;
|
||||
}
|
||||
|
||||
/**
|
||||
* EventEmitter事件处理器类型别名
|
||||
*/
|
||||
type on = EventEmitter['on']
|
||||
type emit = EventEmitter['emit']
|
||||
type on = EventEmitter["on"];
|
||||
type emit = EventEmitter["emit"];
|
||||
|
||||
/**
|
||||
* TUS服务器接口声明
|
||||
* 继承EventEmitter,支持事件监听和触发
|
||||
*/
|
||||
export declare interface Server {
|
||||
/**
|
||||
* 为指定事件注册监听器
|
||||
* @param event 事件名称,必须是TusEvents的键之一
|
||||
* @param listener 事件触发时执行的回调函数
|
||||
* @returns 返回Server实例以支持链式调用
|
||||
*/
|
||||
on<Event extends keyof TusEvents>(event: Event, listener: TusEvents[Event]): this
|
||||
/**
|
||||
* 为指定事件注册监听器(通用版本)
|
||||
* @param eventName 事件名称
|
||||
* @param listener 事件触发时执行的回调函数
|
||||
* @returns 返回Server实例以支持链式调用
|
||||
*/
|
||||
on(eventName: Parameters<on>[0], listener: Parameters<on>[1]): this
|
||||
/**
|
||||
* 触发指定事件
|
||||
* @param event 事件名称,必须是TusEvents的键之一
|
||||
* @param listener 事件触发时执行的回调函数
|
||||
* @returns 返回emit函数的返回值
|
||||
*/
|
||||
emit<Event extends keyof TusEvents>(
|
||||
event: Event,
|
||||
listener: TusEvents[Event]
|
||||
): ReturnType<emit>
|
||||
/**
|
||||
* 触发指定事件(通用版本)
|
||||
* @param eventName 事件名称
|
||||
* @param listener 事件触发时执行的回调函数
|
||||
* @returns 返回emit函数的返回值
|
||||
*/
|
||||
emit(eventName: Parameters<emit>[0], listener: Parameters<emit>[1]): ReturnType<emit>
|
||||
/**
|
||||
* 为指定事件注册监听器
|
||||
* @param event 事件名称,必须是TusEvents的键之一
|
||||
* @param listener 事件触发时执行的回调函数
|
||||
* @returns 返回Server实例以支持链式调用
|
||||
*/
|
||||
on<Event extends keyof TusEvents>(
|
||||
event: Event,
|
||||
listener: TusEvents[Event]
|
||||
): this;
|
||||
/**
|
||||
* 为指定事件注册监听器(通用版本)
|
||||
* @param eventName 事件名称
|
||||
* @param listener 事件触发时执行的回调函数
|
||||
* @returns 返回Server实例以支持链式调用
|
||||
*/
|
||||
on(eventName: Parameters<on>[0], listener: Parameters<on>[1]): this;
|
||||
/**
|
||||
* 触发指定事件
|
||||
* @param event 事件名称,必须是TusEvents的键之一
|
||||
* @param listener 事件触发时执行的回调函数
|
||||
* @returns 返回emit函数的返回值
|
||||
*/
|
||||
emit<Event extends keyof TusEvents>(
|
||||
event: Event,
|
||||
listener: TusEvents[Event]
|
||||
): ReturnType<emit>;
|
||||
/**
|
||||
* 触发指定事件(通用版本)
|
||||
* @param eventName 事件名称
|
||||
* @param listener 事件触发时执行的回调函数
|
||||
* @returns 返回emit函数的返回值
|
||||
*/
|
||||
emit(
|
||||
eventName: Parameters<emit>[0],
|
||||
listener: Parameters<emit>[1]
|
||||
): ReturnType<emit>;
|
||||
}
|
||||
/**
|
||||
* 调试日志工具实例
|
||||
*/
|
||||
const log = debug('tus-node-server')
|
||||
const log = debug("tus-node-server");
|
||||
|
||||
// biome-ignore lint/suspicious/noUnsafeDeclarationMerging: it's fine
|
||||
export class Server extends EventEmitter {
|
||||
datastore: DataStore
|
||||
handlers: Handlers
|
||||
options: ServerOptions
|
||||
datastore: DataStore;
|
||||
handlers: Handlers;
|
||||
options: ServerOptions;
|
||||
|
||||
/**
|
||||
* Server 构造函数
|
||||
* @param options - 服务器配置选项,包含数据存储和可选配置
|
||||
* @throws 如果未提供 options、path 或 datastore,将抛出错误
|
||||
*/
|
||||
constructor(options: WithOptional<ServerOptions, 'locker'> & { datastore: DataStore }) {
|
||||
super()
|
||||
/**
|
||||
* Server 构造函数
|
||||
* @param options - 服务器配置选项,包含数据存储和可选配置
|
||||
* @throws 如果未提供 options、path 或 datastore,将抛出错误
|
||||
*/
|
||||
constructor(
|
||||
options: WithOptional<ServerOptions, "locker"> & {
|
||||
datastore: DataStore;
|
||||
}
|
||||
) {
|
||||
super();
|
||||
|
||||
if (!options) {
|
||||
throw new Error("'options' must be defined")
|
||||
}
|
||||
if (!options) {
|
||||
throw new Error("'options' must be defined");
|
||||
}
|
||||
|
||||
if (!options.path) {
|
||||
throw new Error("'path' is not defined; must have a path")
|
||||
}
|
||||
if (!options.path) {
|
||||
throw new Error("'path' is not defined; must have a path");
|
||||
}
|
||||
|
||||
if (!options.datastore) {
|
||||
throw new Error("'datastore' is not defined; must have a datastore")
|
||||
}
|
||||
if (!options.datastore) {
|
||||
throw new Error(
|
||||
"'datastore' is not defined; must have a datastore"
|
||||
);
|
||||
}
|
||||
|
||||
if (!options.locker) {
|
||||
options.locker = new MemoryLocker()
|
||||
}
|
||||
if (!options.locker) {
|
||||
options.locker = new MemoryLocker();
|
||||
}
|
||||
|
||||
if (!options.lockDrainTimeout) {
|
||||
options.lockDrainTimeout = 3000
|
||||
}
|
||||
if (!options.lockDrainTimeout) {
|
||||
options.lockDrainTimeout = 3000;
|
||||
}
|
||||
|
||||
if (!options.postReceiveInterval) {
|
||||
options.postReceiveInterval = 1000
|
||||
}
|
||||
if (!options.postReceiveInterval) {
|
||||
options.postReceiveInterval = 1000;
|
||||
}
|
||||
|
||||
const { datastore, ...rest } = options
|
||||
this.options = rest as ServerOptions
|
||||
this.datastore = datastore
|
||||
this.handlers = {
|
||||
// GET 请求处理器应在具体实现中编写
|
||||
GET: new GetHandler(this.datastore, this.options),
|
||||
// 这些方法按照 tus 协议处理
|
||||
HEAD: new HeadHandler(this.datastore, this.options),
|
||||
OPTIONS: new OptionsHandler(this.datastore, this.options),
|
||||
PATCH: new PatchHandler(this.datastore, this.options),
|
||||
POST: new PostHandler(this.datastore, this.options),
|
||||
DELETE: new DeleteHandler(this.datastore, this.options),
|
||||
}
|
||||
// 任何以方法为键分配给此对象的处理器将用于响应这些请求。
|
||||
// 当数据存储分配给服务器时,它们会被设置/重置。
|
||||
// 从服务器中移除任何事件监听器时,必须先从每个处理器中移除监听器。
|
||||
// 这必须在添加 'newListener' 监听器之前完成,以避免为所有请求处理器添加 'removeListener' 事件监听器。
|
||||
this.on('removeListener', (event: string, listener) => {
|
||||
this.datastore.removeListener(event, listener)
|
||||
for (const method of REQUEST_METHODS) {
|
||||
this.handlers[method].removeListener(event, listener)
|
||||
}
|
||||
})
|
||||
// 当事件监听器被添加到服务器时,确保它们从请求处理器冒泡到服务器级别。
|
||||
this.on('newListener', (event: string, listener) => {
|
||||
this.datastore.on(event, listener)
|
||||
for (const method of REQUEST_METHODS) {
|
||||
this.handlers[method].on(event, listener)
|
||||
}
|
||||
})
|
||||
}
|
||||
const { datastore, ...rest } = options;
|
||||
this.options = rest as ServerOptions;
|
||||
this.datastore = datastore;
|
||||
this.handlers = {
|
||||
// GET 请求处理器应在具体实现中编写
|
||||
GET: new GetHandler(this.datastore, this.options),
|
||||
// 这些方法按照 tus 协议处理
|
||||
HEAD: new HeadHandler(this.datastore, this.options),
|
||||
OPTIONS: new OptionsHandler(this.datastore, this.options),
|
||||
PATCH: new PatchHandler(this.datastore, this.options),
|
||||
POST: new PostHandler(this.datastore, this.options),
|
||||
DELETE: new DeleteHandler(this.datastore, this.options),
|
||||
};
|
||||
// 任何以方法为键分配给此对象的处理器将用于响应这些请求。
|
||||
// 当数据存储分配给服务器时,它们会被设置/重置。
|
||||
// 从服务器中移除任何事件监听器时,必须先从每个处理器中移除监听器。
|
||||
// 这必须在添加 'newListener' 监听器之前完成,以避免为所有请求处理器添加 'removeListener' 事件监听器。
|
||||
this.on("removeListener", (event: string, listener) => {
|
||||
this.datastore.removeListener(event, listener);
|
||||
for (const method of REQUEST_METHODS) {
|
||||
this.handlers[method].removeListener(event, listener);
|
||||
}
|
||||
});
|
||||
// 当事件监听器被添加到服务器时,确保它们从请求处理器冒泡到服务器级别。
|
||||
this.on("newListener", (event: string, listener) => {
|
||||
this.datastore.on(event, listener);
|
||||
for (const method of REQUEST_METHODS) {
|
||||
this.handlers[method].on(event, listener);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 注册 GET 请求处理器
|
||||
* @param path - 请求路径
|
||||
* @param handler - 请求处理器
|
||||
*/
|
||||
get(path: string, handler: RouteHandler) {
|
||||
this.handlers.GET.registerPath(path, handler)
|
||||
}
|
||||
/**
|
||||
* 注册 GET 请求处理器
|
||||
* @param path - 请求路径
|
||||
* @param handler - 请求处理器
|
||||
*/
|
||||
get(path: string, handler: RouteHandler) {
|
||||
this.handlers.GET.registerPath(path, handler);
|
||||
}
|
||||
|
||||
/**
|
||||
* 主服务器请求监听器,在每个 'request' 事件上调用
|
||||
* @param req - HTTP 请求对象
|
||||
* @param res - HTTP 响应对象
|
||||
* @returns 返回 HTTP 响应对象或流
|
||||
*/
|
||||
async handle(
|
||||
req: http.IncomingMessage,
|
||||
res: http.ServerResponse
|
||||
// biome-ignore lint/suspicious/noConfusingVoidType: it's fine
|
||||
): Promise<http.ServerResponse | stream.Writable | void> {
|
||||
/**
|
||||
* 主服务器请求监听器,在每个 'request' 事件上调用
|
||||
* @param req - HTTP 请求对象
|
||||
* @param res - HTTP 响应对象
|
||||
* @returns 返回 HTTP 响应对象或流
|
||||
*/
|
||||
async handle(
|
||||
req: http.IncomingMessage,
|
||||
res: http.ServerResponse
|
||||
// biome-ignore lint/suspicious/noConfusingVoidType: it's fine
|
||||
): Promise<http.ServerResponse | stream.Writable | void> {
|
||||
const context = this.createContext(req);
|
||||
log(`[TusServer] handle: ${req.method} ${req.url}`);
|
||||
// 允许覆盖 HTTP 方法。这样做的原因是某些库/环境不支持 PATCH 和 DELETE 请求,例如浏览器中的 Flash 和 Java 部分环境
|
||||
if (req.headers["x-http-method-override"]) {
|
||||
req.method = (
|
||||
req.headers["x-http-method-override"] as string
|
||||
).toUpperCase();
|
||||
}
|
||||
const onError = async (error: {
|
||||
status_code?: number;
|
||||
body?: string;
|
||||
message: string;
|
||||
}) => {
|
||||
let status_code =
|
||||
error.status_code || ERRORS.UNKNOWN_ERROR.status_code;
|
||||
let body =
|
||||
error.body ||
|
||||
`${ERRORS.UNKNOWN_ERROR.body}${error.message || ""}\n`;
|
||||
if (this.options.onResponseError) {
|
||||
const errorMapping = await this.options.onResponseError(
|
||||
req,
|
||||
res,
|
||||
error as Error
|
||||
);
|
||||
if (errorMapping) {
|
||||
status_code = errorMapping.status_code;
|
||||
body = errorMapping.body;
|
||||
}
|
||||
}
|
||||
return this.write(context, req, res, status_code, body);
|
||||
};
|
||||
if (req.method === "GET") {
|
||||
const handler = this.handlers.GET;
|
||||
return handler.send(req, res).catch(onError);
|
||||
}
|
||||
|
||||
const context = this.createContext(req)
|
||||
log(`[TusServer] handle: ${req.method} ${req.url}`)
|
||||
// 允许覆盖 HTTP 方法。这样做的原因是某些库/环境不支持 PATCH 和 DELETE 请求,例如浏览器中的 Flash 和 Java 部分环境
|
||||
if (req.headers['x-http-method-override']) {
|
||||
req.method = (req.headers['x-http-method-override'] as string).toUpperCase()
|
||||
}
|
||||
const onError = async (error: {
|
||||
status_code?: number
|
||||
body?: string
|
||||
message: string
|
||||
}) => {
|
||||
// Tus-Resumable 头部必须包含在每个请求和响应中,除了 OPTIONS 请求。其值必须是客户端或服务器使用的协议版本。
|
||||
res.setHeader("Tus-Resumable", TUS_RESUMABLE);
|
||||
if (
|
||||
req.method !== "OPTIONS" &&
|
||||
req.headers["tus-resumable"] === undefined
|
||||
) {
|
||||
return this.write(
|
||||
context,
|
||||
req,
|
||||
res,
|
||||
412,
|
||||
"Tus-Resumable Required\n"
|
||||
);
|
||||
}
|
||||
// 验证所有必需的头部以符合 tus 协议
|
||||
const invalid_headers = [];
|
||||
for (const header_name in req.headers) {
|
||||
if (req.method === "OPTIONS") {
|
||||
continue;
|
||||
}
|
||||
// 内容类型仅对 PATCH 请求进行检查。对于所有其他请求方法,它将被忽略并视为未设置内容类型,
|
||||
// 因为某些 HTTP 客户端可能会为此头部强制执行默认值。
|
||||
// 参见 https://github.com/tus/tus-node-server/pull/116
|
||||
if (
|
||||
header_name.toLowerCase() === "content-type" &&
|
||||
req.method !== "PATCH"
|
||||
) {
|
||||
continue;
|
||||
}
|
||||
if (
|
||||
!validateHeader(
|
||||
header_name,
|
||||
req.headers[header_name] as string | undefined
|
||||
)
|
||||
) {
|
||||
log(
|
||||
`Invalid ${header_name} header: ${req.headers[header_name]}`
|
||||
);
|
||||
invalid_headers.push(header_name);
|
||||
}
|
||||
}
|
||||
|
||||
let status_code = error.status_code || ERRORS.UNKNOWN_ERROR.status_code
|
||||
let body = error.body || `${ERRORS.UNKNOWN_ERROR.body}${error.message || ''}\n`
|
||||
if (this.options.onResponseError) {
|
||||
const errorMapping = await this.options.onResponseError(req, res, error as Error)
|
||||
if (errorMapping) {
|
||||
status_code = errorMapping.status_code
|
||||
body = errorMapping.body
|
||||
}
|
||||
}
|
||||
return this.write(context, req, res, status_code, body)
|
||||
}
|
||||
if (req.method === 'GET') {
|
||||
const handler = this.handlers.GET
|
||||
return handler.send(req, res).catch(onError)
|
||||
}
|
||||
if (invalid_headers.length > 0) {
|
||||
return this.write(
|
||||
context,
|
||||
req,
|
||||
res,
|
||||
400,
|
||||
`Invalid ${invalid_headers.join(" ")}\n`
|
||||
);
|
||||
}
|
||||
// 启用 CORS
|
||||
res.setHeader("Access-Control-Allow-Origin", this.getCorsOrigin(req));
|
||||
res.setHeader("Access-Control-Expose-Headers", EXPOSED_HEADERS);
|
||||
if (this.options.allowedCredentials === true) {
|
||||
res.setHeader("Access-Control-Allow-Credentials", "true");
|
||||
}
|
||||
|
||||
// Tus-Resumable 头部必须包含在每个请求和响应中,除了 OPTIONS 请求。其值必须是客户端或服务器使用的协议版本。
|
||||
res.setHeader('Tus-Resumable', TUS_RESUMABLE)
|
||||
if (req.method !== 'OPTIONS' && req.headers['tus-resumable'] === undefined) {
|
||||
return this.write(context, req, res, 412, 'Tus-Resumable Required\n')
|
||||
}
|
||||
// 验证所有必需的头部以符合 tus 协议
|
||||
const invalid_headers = []
|
||||
for (const header_name in req.headers) {
|
||||
if (req.method === 'OPTIONS') {
|
||||
continue
|
||||
}
|
||||
// 内容类型仅对 PATCH 请求进行检查。对于所有其他请求方法,它将被忽略并视为未设置内容类型,
|
||||
// 因为某些 HTTP 客户端可能会为此头部强制执行默认值。
|
||||
// 参见 https://github.com/tus/tus-node-server/pull/116
|
||||
if (header_name.toLowerCase() === 'content-type' && req.method !== 'PATCH') {
|
||||
continue
|
||||
}
|
||||
if (!validateHeader(header_name, req.headers[header_name] as string | undefined)) {
|
||||
log(`Invalid ${header_name} header: ${req.headers[header_name]}`)
|
||||
invalid_headers.push(header_name)
|
||||
}
|
||||
}
|
||||
// 调用请求方法的处理器
|
||||
const handler = this.handlers[req.method as keyof Handlers];
|
||||
if (handler) {
|
||||
return handler.send(req, res, context).catch(onError);
|
||||
}
|
||||
|
||||
if (invalid_headers.length > 0) {
|
||||
return this.write(context, req, res, 400, `Invalid ${invalid_headers.join(' ')}\n`)
|
||||
}
|
||||
// 启用 CORS
|
||||
res.setHeader('Access-Control-Allow-Origin', this.getCorsOrigin(req))
|
||||
res.setHeader('Access-Control-Expose-Headers', EXPOSED_HEADERS)
|
||||
if (this.options.allowedCredentials === true) {
|
||||
res.setHeader('Access-Control-Allow-Credentials', 'true')
|
||||
}
|
||||
return this.write(context, req, res, 404, "Not found\n");
|
||||
}
|
||||
|
||||
// 调用请求方法的处理器
|
||||
const handler = this.handlers[req.method as keyof Handlers]
|
||||
if (handler) {
|
||||
/**
|
||||
* 获取CORS(跨域资源共享)允许的源地址
|
||||
*
|
||||
* 该方法用于确定并返回允许的CORS源地址。首先检查请求头中的`origin`是否在允许的源列表中,
|
||||
* 如果在则返回该`origin`;如果不在但允许的源列表不为空,则返回列表中的第一个源地址;
|
||||
* 如果允许的源列表为空,则返回通配符`*`,表示允许所有源地址。
|
||||
*
|
||||
* @param req HTTP请求对象,包含请求头等信息
|
||||
* @returns 返回允许的CORS源地址,可能是请求头中的`origin`、允许的源列表中的第一个源地址或通配符`*`
|
||||
*
|
||||
* 设计考量:
|
||||
* - 该方法考虑了CORS策略的灵活性,允许通过配置动态指定允许的源地址。
|
||||
* - 通过返回通配符`*`,简化了默认情况下的CORS配置,但需要注意这可能带来安全风险。
|
||||
*/
|
||||
private getCorsOrigin(req: http.IncomingMessage): string {
|
||||
const origin = req.headers.origin;
|
||||
// 检查请求头中的`origin`是否在允许的源列表中
|
||||
const isOriginAllowed =
|
||||
this.options.allowedOrigins?.some(
|
||||
(allowedOrigin) => allowedOrigin === origin
|
||||
) ?? true;
|
||||
// 如果`origin`存在且在允许的源列表中,则返回该`origin`
|
||||
if (origin && isOriginAllowed) {
|
||||
return origin;
|
||||
}
|
||||
// 如果允许的源列表不为空,则返回列表中的第一个源地址
|
||||
if (
|
||||
this.options.allowedOrigins &&
|
||||
this.options.allowedOrigins.length > 0
|
||||
) {
|
||||
return this.options.allowedOrigins[0];
|
||||
}
|
||||
|
||||
return handler.send(req, res, context).catch(onError)
|
||||
}
|
||||
// 如果允许的源列表为空,则返回通配符`*`,表示允许所有源地址
|
||||
return "*";
|
||||
}
|
||||
|
||||
return this.write(context, req, res, 404, 'Not found\n')
|
||||
}
|
||||
/**
|
||||
* 写入响应
|
||||
* @param context - 取消上下文
|
||||
* @param req - HTTP 请求对象
|
||||
* @param res - HTTP 响应对象
|
||||
* @param status - HTTP 状态码
|
||||
* @param body - 响应体
|
||||
* @param headers - 响应头部
|
||||
* @returns 返回 HTTP 响应对象
|
||||
*/
|
||||
write(
|
||||
context: CancellationContext,
|
||||
req: http.IncomingMessage,
|
||||
res: http.ServerResponse,
|
||||
status: number,
|
||||
body = "",
|
||||
headers = {}
|
||||
) {
|
||||
const isAborted = context.signal.aborted;
|
||||
|
||||
/**
|
||||
* 获取CORS(跨域资源共享)允许的源地址
|
||||
*
|
||||
* 该方法用于确定并返回允许的CORS源地址。首先检查请求头中的`origin`是否在允许的源列表中,
|
||||
* 如果在则返回该`origin`;如果不在但允许的源列表不为空,则返回列表中的第一个源地址;
|
||||
* 如果允许的源列表为空,则返回通配符`*`,表示允许所有源地址。
|
||||
*
|
||||
* @param req HTTP请求对象,包含请求头等信息
|
||||
* @returns 返回允许的CORS源地址,可能是请求头中的`origin`、允许的源列表中的第一个源地址或通配符`*`
|
||||
*
|
||||
* 设计考量:
|
||||
* - 该方法考虑了CORS策略的灵活性,允许通过配置动态指定允许的源地址。
|
||||
* - 通过返回通配符`*`,简化了默认情况下的CORS配置,但需要注意这可能带来安全风险。
|
||||
*/
|
||||
private getCorsOrigin(req: http.IncomingMessage): string {
|
||||
const origin = req.headers.origin
|
||||
// 检查请求头中的`origin`是否在允许的源列表中
|
||||
const isOriginAllowed =
|
||||
this.options.allowedOrigins?.some((allowedOrigin) => allowedOrigin === origin) ??
|
||||
true
|
||||
// 如果`origin`存在且在允许的源列表中,则返回该`origin`
|
||||
if (origin && isOriginAllowed) {
|
||||
return origin
|
||||
}
|
||||
// 如果允许的源列表不为空,则返回列表中的第一个源地址
|
||||
if (this.options.allowedOrigins && this.options.allowedOrigins.length > 0) {
|
||||
return this.options.allowedOrigins[0]
|
||||
}
|
||||
if (status !== 204) {
|
||||
// @ts-expect-error not explicitly typed but possible
|
||||
headers["Content-Length"] = Buffer.byteLength(body, "utf8");
|
||||
}
|
||||
|
||||
// 如果允许的源列表为空,则返回通配符`*`,表示允许所有源地址
|
||||
return '*'
|
||||
}
|
||||
if (isAborted) {
|
||||
// 此条件处理请求被标记为中止的情况。
|
||||
// 在这种情况下,服务器通知客户端连接将被关闭。
|
||||
// 这是通过在响应中设置 'Connection' 头部为 'close' 来传达的。
|
||||
// 这一步对于防止服务器继续处理不再需要的请求至关重要,从而节省资源。
|
||||
|
||||
/**
|
||||
* 写入响应
|
||||
* @param context - 取消上下文
|
||||
* @param req - HTTP 请求对象
|
||||
* @param res - HTTP 响应对象
|
||||
* @param status - HTTP 状态码
|
||||
* @param body - 响应体
|
||||
* @param headers - 响应头部
|
||||
* @returns 返回 HTTP 响应对象
|
||||
*/
|
||||
write(
|
||||
context: CancellationContext,
|
||||
req: http.IncomingMessage,
|
||||
res: http.ServerResponse,
|
||||
status: number,
|
||||
body = '',
|
||||
headers = {}
|
||||
) {
|
||||
const isAborted = context.signal.aborted
|
||||
// @ts-expect-error not explicitly typed but possible
|
||||
headers.Connection = "close";
|
||||
|
||||
if (status !== 204) {
|
||||
// @ts-expect-error not explicitly typed but possible
|
||||
headers['Content-Length'] = Buffer.byteLength(body, 'utf8')
|
||||
}
|
||||
// 为响应 ('res') 添加 'finish' 事件的事件监听器。
|
||||
// 'finish' 事件在响应已发送给客户端时触发。
|
||||
// 一旦响应完成,请求 ('req') 对象将被销毁。
|
||||
// 销毁请求对象是释放与此请求相关的任何资源的关键步骤,因为它已经被中止。
|
||||
res.on("finish", () => {
|
||||
req.destroy();
|
||||
});
|
||||
}
|
||||
|
||||
if (isAborted) {
|
||||
// 此条件处理请求被标记为中止的情况。
|
||||
// 在这种情况下,服务器通知客户端连接将被关闭。
|
||||
// 这是通过在响应中设置 'Connection' 头部为 'close' 来传达的。
|
||||
// 这一步对于防止服务器继续处理不再需要的请求至关重要,从而节省资源。
|
||||
res.writeHead(status, headers);
|
||||
res.write(body);
|
||||
return res.end();
|
||||
}
|
||||
|
||||
// @ts-expect-error not explicitly typed but possible
|
||||
headers.Connection = 'close'
|
||||
/**
|
||||
* 启动服务器监听
|
||||
* @param args - 监听参数
|
||||
* @returns 返回 HTTP 服务器实例
|
||||
*/
|
||||
// biome-ignore lint/suspicious/noExplicitAny: todo
|
||||
listen(...args: any[]): http.Server {
|
||||
return http.createServer(this.handle.bind(this)).listen(...args);
|
||||
}
|
||||
|
||||
// 为响应 ('res') 添加 'finish' 事件的事件监听器。
|
||||
// 'finish' 事件在响应已发送给客户端时触发。
|
||||
// 一旦响应完成,请求 ('req') 对象将被销毁。
|
||||
// 销毁请求对象是释放与此请求相关的任何资源的关键步骤,因为它已经被中止。
|
||||
res.on('finish', () => {
|
||||
req.destroy()
|
||||
})
|
||||
}
|
||||
/**
|
||||
* 清理过期的上传
|
||||
* @returns 返回删除的过期上传数量
|
||||
* @throws 如果数据存储不支持过期扩展,将抛出错误
|
||||
*/
|
||||
cleanUpExpiredUploads(): Promise<number> {
|
||||
if (!this.datastore.hasExtension("expiration")) {
|
||||
throw ERRORS.UNSUPPORTED_EXPIRATION_EXTENSION;
|
||||
}
|
||||
|
||||
res.writeHead(status, headers)
|
||||
res.write(body)
|
||||
return res.end()
|
||||
}
|
||||
return this.datastore.deleteExpired();
|
||||
}
|
||||
|
||||
/**
|
||||
* 启动服务器监听
|
||||
* @param args - 监听参数
|
||||
* @returns 返回 HTTP 服务器实例
|
||||
*/
|
||||
// biome-ignore lint/suspicious/noExplicitAny: todo
|
||||
listen(...args: any[]): http.Server {
|
||||
return http.createServer(this.handle.bind(this)).listen(...args)
|
||||
}
|
||||
/**
|
||||
* 创建取消上下文
|
||||
* @param req - HTTP 请求对象
|
||||
* @returns 返回取消上下文
|
||||
*/
|
||||
protected createContext(req: http.IncomingMessage) {
|
||||
// 初始化两个 AbortController:
|
||||
// 1. `requestAbortController` 用于即时请求终止,特别适用于在发生错误时停止客户端上传。
|
||||
// 2. `abortWithDelayController` 用于在终止前引入延迟,允许服务器有时间完成正在进行的操作。
|
||||
// 这在未来的请求可能需要获取当前请求持有的锁时特别有用。
|
||||
const requestAbortController = new AbortController();
|
||||
const abortWithDelayController = new AbortController();
|
||||
|
||||
/**
|
||||
* 清理过期的上传
|
||||
* @returns 返回删除的过期上传数量
|
||||
* @throws 如果数据存储不支持过期扩展,将抛出错误
|
||||
*/
|
||||
cleanUpExpiredUploads(): Promise<number> {
|
||||
if (!this.datastore.hasExtension('expiration')) {
|
||||
throw ERRORS.UNSUPPORTED_EXPIRATION_EXTENSION
|
||||
}
|
||||
// 当 `abortWithDelayController` 被触发时调用此函数,以在指定延迟后中止请求。
|
||||
const onDelayedAbort = (err: unknown) => {
|
||||
abortWithDelayController.signal.removeEventListener(
|
||||
"abort",
|
||||
onDelayedAbort
|
||||
);
|
||||
setTimeout(() => {
|
||||
requestAbortController.abort(err);
|
||||
}, this.options.lockDrainTimeout);
|
||||
};
|
||||
abortWithDelayController.signal.addEventListener(
|
||||
"abort",
|
||||
onDelayedAbort
|
||||
);
|
||||
|
||||
return this.datastore.deleteExpired()
|
||||
}
|
||||
// 当请求关闭时,移除监听器以避免内存泄漏。
|
||||
req.on("close", () => {
|
||||
abortWithDelayController.signal.removeEventListener(
|
||||
"abort",
|
||||
onDelayedAbort
|
||||
);
|
||||
});
|
||||
|
||||
/**
|
||||
* 创建取消上下文
|
||||
* @param req - HTTP 请求对象
|
||||
* @returns 返回取消上下文
|
||||
*/
|
||||
protected createContext(req: http.IncomingMessage) {
|
||||
// 初始化两个 AbortController:
|
||||
// 1. `requestAbortController` 用于即时请求终止,特别适用于在发生错误时停止客户端上传。
|
||||
// 2. `abortWithDelayController` 用于在终止前引入延迟,允许服务器有时间完成正在进行的操作。
|
||||
// 这在未来的请求可能需要获取当前请求持有的锁时特别有用。
|
||||
const requestAbortController = new AbortController()
|
||||
const abortWithDelayController = new AbortController()
|
||||
|
||||
// 当 `abortWithDelayController` 被触发时调用此函数,以在指定延迟后中止请求。
|
||||
const onDelayedAbort = (err: unknown) => {
|
||||
abortWithDelayController.signal.removeEventListener('abort', onDelayedAbort)
|
||||
setTimeout(() => {
|
||||
requestAbortController.abort(err)
|
||||
}, this.options.lockDrainTimeout)
|
||||
}
|
||||
abortWithDelayController.signal.addEventListener('abort', onDelayedAbort)
|
||||
|
||||
// 当请求关闭时,移除监听器以避免内存泄漏。
|
||||
req.on('close', () => {
|
||||
abortWithDelayController.signal.removeEventListener('abort', onDelayedAbort)
|
||||
})
|
||||
|
||||
// 返回一个对象,包含信号和两个中止请求的方法。
|
||||
// `signal` 用于监听请求中止事件。
|
||||
// `abort` 方法用于立即中止请求。
|
||||
// `cancel` 方法用于启动延迟中止序列。
|
||||
return {
|
||||
signal: requestAbortController.signal,
|
||||
abort: () => {
|
||||
// 立即中止请求
|
||||
if (!requestAbortController.signal.aborted) {
|
||||
requestAbortController.abort(ERRORS.ABORTED)
|
||||
}
|
||||
},
|
||||
cancel: () => {
|
||||
// 启动延迟中止序列,除非它已经在进行中。
|
||||
if (!abortWithDelayController.signal.aborted) {
|
||||
abortWithDelayController.abort(ERRORS.ABORTED)
|
||||
}
|
||||
},
|
||||
}
|
||||
}
|
||||
}
|
||||
// 返回一个对象,包含信号和两个中止请求的方法。
|
||||
// `signal` 用于监听请求中止事件。
|
||||
// `abort` 方法用于立即中止请求。
|
||||
// `cancel` 方法用于启动延迟中止序列。
|
||||
return {
|
||||
signal: requestAbortController.signal,
|
||||
abort: () => {
|
||||
// 立即中止请求
|
||||
if (!requestAbortController.signal.aborted) {
|
||||
requestAbortController.abort(ERRORS.ABORTED);
|
||||
}
|
||||
},
|
||||
cancel: () => {
|
||||
// 启动延迟中止序列,除非它已经在进行中。
|
||||
if (!abortWithDelayController.signal.aborted) {
|
||||
abortWithDelayController.abort(ERRORS.ABORTED);
|
||||
}
|
||||
},
|
||||
};
|
||||
}
|
||||
}
|
||||
|
|
|
@ -6,7 +6,14 @@ settings:
|
|||
|
||||
importers:
|
||||
|
||||
.: {}
|
||||
.:
|
||||
devDependencies:
|
||||
'@prisma/client':
|
||||
specifier: 5.17.0
|
||||
version: 5.17.0(prisma@5.17.0)
|
||||
runtime@5.17.0:
|
||||
specifier: link:@prisma/client/runtime@5.17.0
|
||||
version: link:@prisma/client/runtime@5.17.0
|
||||
|
||||
apps/server:
|
||||
dependencies:
|
||||
|
@ -43,6 +50,9 @@ importers:
|
|||
'@nice/tus':
|
||||
specifier: workspace:*
|
||||
version: link:../../packages/tus
|
||||
'@prisma/client':
|
||||
specifier: 5.17.0
|
||||
version: 5.17.0(prisma@5.17.0)
|
||||
'@trpc/server':
|
||||
specifier: 11.0.0-rc.456
|
||||
version: 11.0.0-rc.456
|
||||
|
@ -155,6 +165,9 @@ importers:
|
|||
'@types/express':
|
||||
specifier: ^4.17.21
|
||||
version: 4.17.21
|
||||
'@types/express-serve-static-core':
|
||||
specifier: 4.17.41
|
||||
version: 4.17.41
|
||||
'@types/fluent-ffmpeg':
|
||||
specifier: ^2.1.27
|
||||
version: 2.1.27
|
||||
|
@ -170,6 +183,9 @@ importers:
|
|||
'@types/node':
|
||||
specifier: ^20.3.1
|
||||
version: 20.17.12
|
||||
'@types/qs':
|
||||
specifier: 6.9.17
|
||||
version: 6.9.17
|
||||
'@types/supertest':
|
||||
specifier: ^6.0.0
|
||||
version: 6.0.2
|
||||
|
@ -2831,8 +2847,8 @@ packages:
|
|||
resolution: {integrity: sha512-etq4LpmL5vZKzf29U5u7cWjoCWGc67hTc2WrvwmcBUyRiHydUPg5ZXGFwBHcEkTLinyT6fRmJiVSRwf4RdnjUA==}
|
||||
deprecated: This is a stub types definition. exceljs provides its own type definitions, so you do not need this installed.
|
||||
|
||||
'@types/express-serve-static-core@4.19.6':
|
||||
resolution: {integrity: sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A==}
|
||||
'@types/express-serve-static-core@4.17.41':
|
||||
resolution: {integrity: sha512-OaJ7XLaelTgrvlZD8/aa0vvvxZdUmlCn6MtWeB7TkiKW70BQLc9XEPpDLPdbo52ZhXUCrznlWdCHWxJWtdyajA==}
|
||||
|
||||
'@types/express@4.17.21':
|
||||
resolution: {integrity: sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==}
|
||||
|
@ -9598,7 +9614,7 @@ snapshots:
|
|||
dependencies:
|
||||
exceljs: 4.4.0
|
||||
|
||||
'@types/express-serve-static-core@4.19.6':
|
||||
'@types/express-serve-static-core@4.17.41':
|
||||
dependencies:
|
||||
'@types/node': 20.17.12
|
||||
'@types/qs': 6.9.17
|
||||
|
@ -9608,7 +9624,7 @@ snapshots:
|
|||
'@types/express@4.17.21':
|
||||
dependencies:
|
||||
'@types/body-parser': 1.19.5
|
||||
'@types/express-serve-static-core': 4.19.6
|
||||
'@types/express-serve-static-core': 4.17.41
|
||||
'@types/qs': 6.9.17
|
||||
'@types/serve-static': 1.15.7
|
||||
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
import{r as t}from"./index-draOeoCt.js";const r=e=>t.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:40,height:40,viewBox:"0 0 24 24",...e},t.createElement("path",{fill:"currentColor",d:"M20 2H4a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h4l4 4l4-4h4a2 2 0 0 0 2-2V4a2 2 0 0 0-2-2m-8 2.3c1.5 0 2.7 1.2 2.7 2.7S13.5 9.7 12 9.7S9.3 8.5 9.3 7s1.2-2.7 2.7-2.7M18 15H6v-.9c0-2 4-3.1 6-3.1s6 1.1 6 3.1z"}));export{r as default};
|
|
@ -0,0 +1 @@
|
|||
import{r as e}from"./index-draOeoCt.js";const h=t=>e.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"1em",height:"1em",viewBox:"0 0 24 24",...t},e.createElement("path",{fill:"currentColor",d:"M11 13H5v-2h6V5h2v6h6v2h-6v6h-2z"}));export{h as default};
|
|
@ -0,0 +1 @@
|
|||
import{r as e}from"./index-draOeoCt.js";const l=t=>e.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"1em",height:"1em",viewBox:"0 0 24 24",...t},e.createElement("path",{fill:"currentColor",d:"M12 23C6.443 21.765 2 16.522 2 11V5l10-4l10 4v6c0 5.524-4.443 10.765-10 12M4 6v5a10.58 10.58 0 0 0 8 10a10.58 10.58 0 0 0 8-10V6l-8-3Z"}),e.createElement("circle",{cx:12,cy:8.5,r:2.5,fill:"currentColor"}),e.createElement("path",{fill:"currentColor",d:"M7 15a5.78 5.78 0 0 0 5 3a5.78 5.78 0 0 0 5-3c-.025-1.896-3.342-3-5-3c-1.667 0-4.975 1.104-5 3"}));export{l as default};
|
|
@ -0,0 +1 @@
|
|||
import{r as l}from"./index-draOeoCt.js";const h=t=>l.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"1em",height:"1em",viewBox:"0 0 24 24",...t},l.createElement("path",{fill:"currentColor",d:"m6.923 13.442l1.848-4.75H5.038l-1.267 1.904H3.02l.827-2.865l-.827-2.885h.752L5.04 6.75h3.73L6.923 2h1l3.335 4.75h3.146q.413 0 .697.284q.284.283.284.697t-.284.687q-.284.274-.697.274h-3.146l-3.335 4.75zM16.096 22l-3.335-4.75H9.617q-.414 0-.698-.284q-.283-.283-.283-.697t.283-.697t.698-.284h3.146l3.334-4.73h1l-1.848 4.73h3.733l1.267-1.884H21l-.827 2.865l.827 2.885h-.752l-1.267-1.904h-3.733L17.096 22z"}));export{h as default};
|
|
@ -0,0 +1 @@
|
|||
import{r as t}from"./index-draOeoCt.js";const h=e=>t.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"1em",height:"1em",viewBox:"0 0 24 24",...e},t.createElement("path",{fill:"currentColor",d:"M4.5 20q-.213 0-.356-.144T4 19.499t.144-.356T4.5 19h15q.213 0 .356.144t.144.357t-.144.356T19.5 20zm4-3.75q-.213 0-.356-.144T8 15.749t.144-.356t.356-.143h7q.213 0 .356.144t.144.357t-.144.356t-.356.143zm-4-3.75q-.213 0-.356-.144T4 11.999t.144-.356t.356-.143h15q.213 0 .356.144t.144.357t-.144.356t-.356.143zm4-3.75q-.213 0-.356-.144T8 8.249t.144-.356t.356-.143h7q.213 0 .356.144t.144.357t-.144.356t-.356.143zM4.5 5q-.213 0-.356-.144T4 4.499t.144-.356T4.5 4h15q.213 0 .356.144t.144.357t-.144.356T19.5 5z"}));export{h as default};
|
|
@ -0,0 +1 @@
|
|||
import{r as t}from"./index-draOeoCt.js";const h=e=>t.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"1em",height:"1em",viewBox:"0 0 24 24",...e},t.createElement("path",{fill:"currentColor",d:"M4.5 20q-.213 0-.356-.144T4 19.499t.144-.356T4.5 19h15q.213 0 .356.144t.144.357t-.144.356T19.5 20zm0-3.75q-.213 0-.356-.144T4 15.749t.144-.356t.356-.143h15q.213 0 .356.144t.144.357t-.144.356t-.356.143zm0-3.75q-.213 0-.356-.144T4 11.999t.144-.356t.356-.143h15q.213 0 .356.144t.144.357t-.144.356t-.356.143zm0-3.75q-.213 0-.356-.144T4 8.249t.144-.356t.356-.143h15q.213 0 .356.144t.144.357t-.144.356t-.356.143zM4.5 5q-.213 0-.356-.144T4 4.499t.144-.356T4.5 4h15q.213 0 .356.144t.144.357t-.144.356T19.5 5z"}));export{h as default};
|
|
@ -0,0 +1 @@
|
|||
import{r as t}from"./index-draOeoCt.js";const h=e=>t.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"1em",height:"1em",viewBox:"0 0 24 24",...e},t.createElement("path",{fill:"currentColor",d:"M4.5 20q-.213 0-.356-.144T4 19.499t.144-.356T4.5 19h15q.213 0 .356.144t.144.357t-.144.356T19.5 20zm0-3.75q-.213 0-.356-.144T4 15.749t.144-.356t.356-.143h9q.213 0 .356.144t.144.357t-.144.356t-.356.143zm0-3.75q-.213 0-.356-.144T4 11.999t.144-.356t.356-.143h15q.213 0 .356.144t.144.357t-.144.356t-.356.143zm0-3.75q-.213 0-.356-.144T4 8.249t.144-.356t.356-.143h9q.213 0 .356.144t.144.357t-.144.356t-.356.143zM4.5 5q-.213 0-.356-.144T4 4.499t.144-.356T4.5 4h15q.213 0 .356.144t.144.357t-.144.356T19.5 5z"}));export{h as default};
|
|
@ -0,0 +1 @@
|
|||
import{r as t}from"./index-draOeoCt.js";const h=e=>t.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"1em",height:"1em",viewBox:"0 0 24 24",...e},t.createElement("path",{fill:"currentColor",d:"M4.5 5q-.213 0-.356-.144T4 4.499t.144-.356T4.5 4h15q.213 0 .356.144t.144.357t-.144.356T19.5 5zm6 3.75q-.213 0-.356-.144T10 8.249t.144-.356t.356-.143h9q.213 0 .356.144t.144.357t-.144.356t-.356.143zm-6 3.75q-.213 0-.356-.144T4 11.999t.144-.356t.356-.143h15q.213 0 .356.144t.144.357t-.144.356t-.356.143zm6 3.75q-.213 0-.356-.144T10 15.749t.144-.356t.356-.143h9q.213 0 .356.144t.144.357t-.144.356t-.356.143zM4.5 20q-.213 0-.356-.144T4 19.499t.144-.356T4.5 19h15q.213 0 .356.144t.144.357t-.144.356T19.5 20z"}));export{h as default};
|
|
@ -0,0 +1 @@
|
|||
import{r as l}from"./index-draOeoCt.js";const r=t=>l.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"1em",height:"1em",viewBox:"0 0 24 24",...t},l.createElement("path",{fill:"currentColor",d:"m23 12l-2.44-2.78l.34-3.68l-3.61-.82l-1.89-3.18L12 3L8.6 1.54L6.71 4.72l-3.61.81l.34 3.68L1 12l2.44 2.78l-.34 3.69l3.61.82l1.89 3.18L12 21l3.4 1.46l1.89-3.18l3.61-.82l-.34-3.68zm-13 5l-4-4l1.41-1.41L10 14.17l6.59-6.59L18 9z"}));export{r as default};
|
|
@ -0,0 +1 @@
|
|||
import{r as t}from"./index-draOeoCt.js";const l=e=>t.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"1em",height:"1em",viewBox:"0 0 24 24",...e},t.createElement("path",{fill:"currentColor",d:"m11.565 13.873l-2.677-2.677q-.055-.055-.093-.129q-.037-.073-.037-.157q0-.168.11-.289q.112-.121.294-.121h5.677q.181 0 .292.124t.111.288q0 .042-.13.284l-2.677 2.677q-.093.093-.2.143t-.235.05t-.235-.05t-.2-.143"}));export{l as default};
|
|
@ -0,0 +1 @@
|
|||
import{r as l}from"./index-draOeoCt.js";const t=a=>l.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:40,height:40,viewBox:"0 0 36 36",...a},l.createElement("path",{fill:"currentColor",d:"m33.53 18.76l-6.93-3.19V6.43a1 1 0 0 0-.6-.9l-7.5-3.45a1 1 0 0 0-.84 0l-7.5 3.45a1 1 0 0 0-.58.91v9.14l-6.9 3.18a1 1 0 0 0-.58.91v9.78a1 1 0 0 0 .58.91l7.5 3.45a1 1 0 0 0 .84 0l7.08-3.26l7.08 3.26a1 1 0 0 0 .84 0l7.5-3.45a1 1 0 0 0 .58-.91v-9.78a1 1 0 0 0-.57-.91M25.61 22l-5.11-2.33l5.11-2.35l5.11 2.35Zm-1-6.44l-6.44 3v-7.69a1 1 0 0 0 .35-.08L24.6 8v7.58ZM18.1 4.08l5.11 2.35l-5.11 2.35L13 6.43Zm-7.5 13.23l5.11 2.35L10.6 22l-5.11-2.33Zm6.5 11.49l-6.5 3v-7.69A1 1 0 0 0 11 24l6.08-2.8Zm15 0l-6.46 3v-7.69A1 1 0 0 0 26 24l6.08-2.8Z",className:"clr-i-solid clr-i-solid-path-1"}),l.createElement("path",{fill:"none",d:"M0 0h36v36H0z"}));export{t as default};
|
|
@ -0,0 +1 @@
|
|||
import{r as t}from"./index-draOeoCt.js";const r=e=>t.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"1em",height:"1em",viewBox:"0 0 24 24",...e},t.createElement("path",{fill:"currentColor",d:"M8.916 18.25q-.441 0-.74-.299t-.299-.74V6.79q0-.441.299-.74t.74-.299h3.159q1.433 0 2.529.904T15.7 9.006q0 .967-.508 1.693t-1.257 1.065q.913.255 1.55 1.073t.638 1.97q0 1.61-1.202 2.527q-1.202.916-2.646.916zm.236-1.184h3.062q1.161 0 1.875-.7q.715-.699.715-1.627q0-.93-.714-1.629q-.715-.698-1.894-.698H9.152zm0-5.816h2.864q.997 0 1.69-.617t.692-1.546q0-.947-.704-1.553q-.704-.605-1.667-.605H9.152z"}));export{r as default};
|
|
@ -0,0 +1 @@
|
|||
import{r as e}from"./index-draOeoCt.js";const l=t=>e.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"1em",height:"1em",viewBox:"0 0 16 16",...t},e.createElement("path",{fill:"currentColor",fillRule:"evenodd",d:"M6.705 11.823a.73.73 0 0 1-1.205-.552V4.729a.73.73 0 0 1 1.205-.552L10.214 7.2a1 1 0 0 1 .347.757v.084a1 1 0 0 1-.347.757z",clipRule:"evenodd"}));export{l as default};
|
|
@ -0,0 +1 @@
|
|||
import{r as e}from"./index-draOeoCt.js";const r=t=>e.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"1em",height:"1em",viewBox:"0 0 24 24",...t},e.createElement("path",{fill:"currentColor",d:"M11 13.5v8H3v-8zm-2 2H5v4h4zM12 2l5.5 9h-11zm0 3.86L10.08 9h3.84zM17.5 13c2.5 0 4.5 2 4.5 4.5S20 22 17.5 22S13 20 13 17.5s2-4.5 4.5-4.5m0 2a2.5 2.5 0 0 0-2.5 2.5a2.5 2.5 0 0 0 2.5 2.5a2.5 2.5 0 0 0 2.5-2.5a2.5 2.5 0 0 0-2.5-2.5"}));export{r as default};
|
|
@ -0,0 +1 @@
|
|||
import{r as e}from"./index-draOeoCt.js";const l=t=>e.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"1em",height:"1em",viewBox:"0 0 24 24",...t},e.createElement("path",{fill:"currentColor",d:"m9.55 18l-5.7-5.7l1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"}));export{l as default};
|
|
@ -0,0 +1 @@
|
|||
import{r as e}from"./index-draOeoCt.js";const o=t=>e.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"1em",height:"1em",viewBox:"0 0 48 48",...t},e.createElement("g",{fill:"none",stroke:"currentColor",strokeLinejoin:"round",strokeWidth:4},e.createElement("path",{d:"M24 44a19.94 19.94 0 0 0 14.142-5.858A19.94 19.94 0 0 0 44 24a19.94 19.94 0 0 0-5.858-14.142A19.94 19.94 0 0 0 24 4A19.94 19.94 0 0 0 9.858 9.858A19.94 19.94 0 0 0 4 24a19.94 19.94 0 0 0 5.858 14.142A19.94 19.94 0 0 0 24 44Z"}),e.createElement("path",{strokeLinecap:"round",d:"m16 24l6 6l12-12"})));export{o as default};
|
|
@ -0,0 +1 @@
|
|||
import{r as a}from"./index-draOeoCt.js";const h=t=>a.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:40,height:40,viewBox:"0 0 24 24",...t},a.createElement("path",{fill:"currentColor",d:"M13.75 2.25a.75.75 0 0 1 .75.75v4A.75.75 0 0 1 13 7V5.75H3a.75.75 0 0 1 0-1.5h10V3a.75.75 0 0 1 .75-.75M17.25 5a.75.75 0 0 1 .75-.75h3a.75.75 0 0 1 0 1.5h-3a.75.75 0 0 1-.75-.75m-6.5 4.25a.75.75 0 0 1 .75.75v1.25H21a.75.75 0 0 1 0 1.5h-9.5V14a.75.75 0 0 1-1.5 0v-4a.75.75 0 0 1 .75-.75M2.25 12a.75.75 0 0 1 .75-.75h4a.75.75 0 0 1 0 1.5H3a.75.75 0 0 1-.75-.75m11.5 4.25a.75.75 0 0 1 .75.75v4a.75.75 0 0 1-1.5 0v-1.25H3a.75.75 0 0 1 0-1.5h10V17a.75.75 0 0 1 .75-.75m3.5 2.75a.75.75 0 0 1 .75-.75h3a.75.75 0 0 1 0 1.5h-3a.75.75 0 0 1-.75-.75"}));export{h as default};
|
|
@ -0,0 +1 @@
|
|||
import{r as t}from"./index-draOeoCt.js";const h=e=>t.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"1em",height:"1em",viewBox:"0 0 24 24",...e},t.createElement("path",{fill:"currentColor",d:"M5.73 15.885h12.54v-1H5.73zm0-3.385h12.54v-1H5.73zm0-3.384h8.77v-1H5.73zM4.616 19q-.69 0-1.153-.462T3 17.384V6.616q0-.691.463-1.153T4.615 5h14.77q.69 0 1.152.463T21 6.616v10.769q0 .69-.463 1.153T19.385 19zm0-1h14.77q.23 0 .423-.192t.192-.424V6.616q0-.231-.192-.424T19.385 6H4.615q-.23 0-.423.192T4 6.616v10.769q0 .23.192.423t.423.192M4 18V6z"}));export{h as default};
|
|
@ -0,0 +1 @@
|
|||
import{r as t}from"./index-draOeoCt.js";const q=e=>t.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"1em",height:"1em",viewBox:"0 0 24 24",...e},t.createElement("path",{fill:"currentColor",d:"M9.116 17q-.691 0-1.153-.462T7.5 15.385V4.615q0-.69.463-1.153T9.116 3h7.769q.69 0 1.153.462t.462 1.153v10.77q0 .69-.462 1.152T16.884 17zm0-1h7.769q.23 0 .423-.192t.192-.423V4.615q0-.23-.192-.423T16.884 4H9.116q-.231 0-.424.192t-.192.423v10.77q0 .23.192.423t.423.192m-3 4q-.69 0-1.153-.462T4.5 18.385V6.615h1v11.77q0 .23.192.423t.423.192h8.77v1zM8.5 16V4z"}));export{q as default};
|
|
@ -0,0 +1 @@
|
|||
import{r as e}from"./index-draOeoCt.js";const l=t=>e.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"1em",height:"1em",viewBox:"0 0 256 256",...t},e.createElement("g",{fill:"currentColor"},e.createElement("path",{d:"M128 129.09V232a8 8 0 0 1-3.84-1l-88-48.16a8 8 0 0 1-4.16-7V80.2a8 8 0 0 1 .7-3.27Z",opacity:.2}),e.createElement("path",{d:"m223.68 66.15l-88-48.15a15.88 15.88 0 0 0-15.36 0l-88 48.17a16 16 0 0 0-8.32 14v95.64a16 16 0 0 0 8.32 14l88 48.17a15.88 15.88 0 0 0 15.36 0l88-48.17a16 16 0 0 0 8.32-14V80.18a16 16 0 0 0-8.32-14.03M128 32l80.34 44L128 120L47.66 76ZM40 90l80 43.78v85.79l-80-43.75Zm96 129.57v-85.75L216 90v85.78Z"})));export{l as default};
|
|
@ -0,0 +1 @@
|
|||
import{r as t}from"./index-draOeoCt.js";const m=h=>t.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"1em",height:"1em",viewBox:"0 0 2048 2048",...h},t.createElement("path",{fill:"currentColor",d:"M1792 993q60 41 107 93t81 114t50 131t18 141q0 119-45 224t-124 183t-183 123t-224 46q-91 0-176-27t-156-78t-126-122t-85-157H128V128h256V0h128v128h896V0h128v128h256zM256 256v256h1408V256h-128v128h-128V256H512v128H384V256zm643 1280q-3-31-3-64q0-86 24-167t73-153h-97v-128h128v86q41-51 91-90t108-67t121-42t128-15q100 0 192 33V640H256v896zm573 384q93 0 174-35t142-96t96-142t36-175q0-93-35-174t-96-142t-142-96t-175-36q-93 0-174 35t-142 96t-96 142t-36 175q0 93 35 174t96 142t142 96t175 36m64-512h192v128h-320v-384h128zM384 1024h128v128H384zm256 0h128v128H640zm0-256h128v128H640zm-256 512h128v128H384zm256 0h128v128H640zm384-384H896V768h128zm256 0h-128V768h128zm256 0h-128V768h128z"}));export{m as default};
|
|
@ -0,0 +1 @@
|
|||
import{r as t}from"./index-draOeoCt.js";const r=e=>t.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:40,height:40,viewBox:"0 0 24 24",...e},t.createElement("path",{fill:"currentColor",d:"M7 21q-.825 0-1.412-.587T5 19V6H4V4h5V3h6v1h5v2h-1v13q0 .825-.587 1.413T17 21zM17 6H7v13h10zM9 17h2V8H9zm4 0h2V8h-2zM7 6v13z"}));export{r as default};
|
|
@ -0,0 +1 @@
|
|||
import{r as e}from"./index-draOeoCt.js";const o=t=>e.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"1em",height:"1em",viewBox:"0 0 24 24",...t},e.createElement("path",{fill:"currentColor",d:"M3 21v-4.25L17.625 2.175L21.8 6.45L7.25 21zM17.6 7.8L19 6.4L17.6 5l-1.4 1.4z"}));export{o as default};
|
|
@ -0,0 +1 @@
|
|||
import{r as e}from"./index-draOeoCt.js";const h=t=>e.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"1em",height:"1em",viewBox:"0 0 24 24",...t},e.createElement("path",{fill:"currentColor",d:"M12 4c-4.42 0-8 3.58-8 8s3.58 8 8 8s8-3.58 8-8s-3.58-8-8-8m1 13h-2v-2h2zm0-4h-2V7h2z",opacity:.3}),e.createElement("path",{fill:"currentColor",d:"M11.99 2C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 22 17.52 22 12S17.52 2 11.99 2M12 20c-4.42 0-8-3.58-8-8s3.58-8 8-8s8 3.58 8 8s-3.58 8-8 8m-1-5h2v2h-2zm0-8h2v6h-2z"}));export{h as default};
|
|
@ -0,0 +1 @@
|
|||
import{r as t}from"./index-draOeoCt.js";const r=T=>t.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"1em",height:"1em",viewBox:"0 0 24 24",...T},t.createElement("path",{fill:"currentColor",d:"M12 17q.425 0 .713-.288T13 16t-.288-.712T12 15t-.712.288T11 16t.288.713T12 17m-1-4h2V7h-2zm1 9q-2.075 0-3.9-.788t-3.175-2.137T2.788 15.9T2 12t.788-3.9t2.137-3.175T8.1 2.788T12 2t3.9.788t3.175 2.137T21.213 8.1T22 12t-.788 3.9t-2.137 3.175t-3.175 2.138T12 22m0-2q3.35 0 5.675-2.325T20 12t-2.325-5.675T12 4T6.325 6.325T4 12t2.325 5.675T12 20m0-8"}));export{r as default};
|
|
@ -0,0 +1 @@
|
|||
import{r as e}from"./index-draOeoCt.js";const l=t=>e.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"1em",height:"1em",viewBox:"0 0 16 16",...t},e.createElement("path",{fill:"currentColor",d:"M12 10V8H7V6h5V4l3 3zm-1-1v4H6v3l-6-3V0h11v5h-1V1H2l4 2v9h4V9z"}));export{l as default};
|
|
@ -0,0 +1 @@
|
|||
import{r as e}from"./index-draOeoCt.js";const r=t=>e.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"1em",height:"1em",viewBox:"0 0 512 512",...t},e.createElement("path",{fill:"currentColor",d:"M472 168H40a24 24 0 0 1 0-48h432a24 24 0 0 1 0 48m-80 112H120a24 24 0 0 1 0-48h272a24 24 0 0 1 0 48m-96 112h-80a24 24 0 0 1 0-48h80a24 24 0 0 1 0 48"}));export{r as default};
|
|
@ -0,0 +1 @@
|
|||
import{r as e}from"./index-draOeoCt.js";const a=t=>e.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"1em",height:"1em",viewBox:"0 0 28 28",...t},e.createElement("path",{fill:"currentColor",d:"M13 20.5c0 2.098.862 3.995 2.25 5.357q-1.077.142-2.25.143c-5.79 0-10-2.567-10-6.285V19a3 3 0 0 1 3-3h8.5a7.47 7.47 0 0 0-1.5 4.5M13 2a6 6 0 1 1 0 12a6 6 0 0 1 0-12m14 18.5a6.5 6.5 0 1 1-13 0a6.5 6.5 0 0 1 13 0m-5.786-3.96a.742.742 0 0 0-1.428 0l-.716 2.298h-2.318c-.727 0-1.03.97-.441 1.416l1.875 1.42l-.716 2.298c-.225.721.567 1.32 1.155.875l1.875-1.42l1.875 1.42c.588.446 1.38-.154 1.155-.875l-.716-2.298l1.875-1.42c.588-.445.286-1.416-.441-1.416H21.93z"}));export{a as default};
|
|
@ -0,0 +1 @@
|
|||
import{r as h}from"./index-draOeoCt.js";const v=e=>h.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"1em",height:"1em",viewBox:"0 0 24 24",...e},h.createElement("path",{fill:"currentColor",d:"M11.5 16V9h-3V8h7v1h-3v7zm-9.115 5.616v-4.232H4V6.616H2.385V2.385h4.23V4h10.77V2.385h4.23v4.23H20v10.77h1.616v4.23h-4.232V20H6.616v1.616zM6.615 19h10.77v-1.616H19V6.616h-1.616V5H6.616v1.616H5v10.769h1.616z"}));export{v as default};
|
|
@ -0,0 +1 @@
|
|||
import{r as e}from"./index-draOeoCt.js";const t=r=>e.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"1em",height:"1em",viewBox:"0 0 24 24",...r},e.createElement("path",{fill:"currentColor",d:"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10s10-4.48 10-10S17.52 2 12 2m0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8s8 3.59 8 8s-3.59 8-8 8"}),e.createElement("circle",{cx:8,cy:14,r:2,fill:"currentColor"}),e.createElement("circle",{cx:12,cy:8,r:2,fill:"currentColor"}),e.createElement("circle",{cx:16,cy:14,r:2,fill:"currentColor"}));export{t as default};
|
|
@ -0,0 +1 @@
|
|||
import{r as e}from"./index-draOeoCt.js";const o=t=>e.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"1em",height:"1em",viewBox:"0 0 24 24",...t},e.createElement("g",{fill:"none",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:1.5},e.createElement("path",{d:"M2.5 12.89H7l3-5l4 9l3-5h4.43"}),e.createElement("path",{d:"M12 21.5a9.5 9.5 0 1 0 0-19a9.5 9.5 0 0 0 0 19"})));export{o as default};
|
|
@ -0,0 +1 @@
|
|||
import{r as t}from"./index-draOeoCt.js";const o=e=>t.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"1em",height:"1em",viewBox:"0 0 24 24",...e},t.createElement("path",{fill:"currentColor",d:"M12 21q-3.45 0-6.012-2.287T3.05 13H5.1q.35 2.6 2.313 4.3T12 19q2.925 0 4.963-2.037T19 12t-2.037-4.962T12 5q-1.725 0-3.225.8T6.25 8H9v2H3V4h2v2.35q1.275-1.6 3.113-2.475T12 3q1.875 0 3.513.713t2.85 1.924t1.925 2.85T21 12t-.712 3.513t-1.925 2.85t-2.85 1.925T12 21m2.8-4.8L11 12.4V7h2v4.6l3.2 3.2z"}));export{o as default};
|
|
@ -0,0 +1 @@
|
|||
import{r as t}from"./index-draOeoCt.js";const r=e=>t.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:40,height:40,viewBox:"0 0 24 24",...e},t.createElement("path",{fill:"currentColor",d:"M12 3L2 12h3v8h6v-6h2v6h6v-8h3zm5 15h-2v-6H9v6H7v-7.81l5-4.5l5 4.5z"}),t.createElement("path",{fill:"currentColor",d:"M7 10.19V18h2v-6h6v6h2v-7.81l-5-4.5z",opacity:.3}));export{r as default};
|
|
@ -0,0 +1 @@
|
|||
import{r as t}from"./index-draOeoCt.js";const o=e=>t.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"1em",height:"1em",viewBox:"0 0 24 24",...e},t.createElement("path",{fill:"currentColor",d:"M5.5 12.5q-.213 0-.356-.144T5 11.999t.144-.356t.356-.143h13q.213 0 .356.144t.144.357t-.144.356t-.356.143z"}));export{o as default};
|
|
@ -0,0 +1 @@
|
|||
import{r as e}from"./index-draOeoCt.js";const r=t=>e.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"1em",height:"1em",viewBox:"0 0 50 50",...t},e.createElement("path",{fill:"currentColor",d:"M39 38H11c-1.7 0-3-1.3-3-3V15c0-1.7 1.3-3 3-3h28c1.7 0 3 1.3 3 3v20c0 1.7-1.3 3-3 3M11 14c-.6 0-1 .4-1 1v20c0 .6.4 1 1 1h28c.6 0 1-.4 1-1V15c0-.6-.4-1-1-1z"}),e.createElement("path",{fill:"currentColor",d:"M30 24c-2.2 0-4-1.8-4-4s1.8-4 4-4s4 1.8 4 4s-1.8 4-4 4m0-6c-1.1 0-2 .9-2 2s.9 2 2 2s2-.9 2-2s-.9-2-2-2m5.3 19.7L19 22.4L9.7 31l-1.4-1.4l10.7-10l17.7 16.7z"}),e.createElement("path",{fill:"currentColor",d:"M40.4 32.7L35 28.3L30.5 32l-1.3-1.6l5.8-4.7l6.6 5.4z"}));export{r as default};
|
|
@ -0,0 +1 @@
|
|||
import{r as l}from"./index-draOeoCt.js";const a=e=>l.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"1em",height:"1em",viewBox:"0 0 24 24",...e},l.createElement("g",{fill:"none",fillRule:"evenodd"},l.createElement("path",{d:"m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"}),l.createElement("path",{fill:"currentColor",d:"M5.83 5.106A2 2 0 0 1 7.617 4h8.764a2 2 0 0 1 1.789 1.106l3.512 7.025a3 3 0 0 1 .318 1.34V19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2v-5.528a3 3 0 0 1 .317-1.341zM16.381 6H7.618L4.12 13H7.5A1.5 1.5 0 0 1 9 14.5v1a.5.5 0 0 0 .5.5h5a.5.5 0 0 0 .5-.5v-1a1.5 1.5 0 0 1 1.5-1.5h3.38z"})));export{a as default};
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -0,0 +1 @@
|
|||
import{r as t}from"./index-draOeoCt.js";const l=e=>t.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"1em",height:"1em",viewBox:"0 0 24 24",...e},t.createElement("path",{fill:"currentColor",d:"M6.346 18.25q-.234 0-.396-.162t-.161-.397t.161-.396t.396-.16h3.077l3.48-10.27H9.828q-.234 0-.396-.162t-.162-.397t.162-.395t.396-.161h7.192q.235 0 .396.162t.162.397t-.162.396q-.161.16-.396.16h-2.961l-3.481 10.27h2.962q.234 0 .395.162t.162.397t-.162.396t-.395.16z"}));export{l as default};
|
|
@ -0,0 +1 @@
|
|||
import{r as t}from"./index-draOeoCt.js";const h=q=>t.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"1em",height:"1em",viewBox:"0 0 24 24",...q},t.createElement("path",{fill:"currentColor",d:"M17.077 16.077h-2.448q-.194 0-.335-.144q-.14-.143-.14-.356q0-.194.144-.347q.143-.153.356-.153h2.423v-2.423q0-.213.144-.356q.144-.144.357-.144t.356.144t.143.356v2.423H20.5q.213 0 .356.144q.144.144.144.357t-.144.356t-.356.143h-2.423V18.5q0 .213-.144.356t-.357.144t-.356-.144t-.143-.356zm-6.961 0H7.077q-1.692 0-2.884-1.192T3 12t1.193-2.885t2.884-1.193h3.039q.194 0 .347.153t.153.357t-.153.347t-.347.143H7.075q-1.267 0-2.171.904T4 12t.904 2.173t2.17.904h3.042q.194 0 .347.153t.153.356t-.153.348t-.347.143M9 12.5q-.213 0-.356-.144t-.144-.357t.144-.356T9 11.5h6q.213 0 .356.144t.144.357t-.144.356T15 12.5zm12-.5h-1q0-1.27-.904-2.173q-.904-.904-2.17-.904H13.86q-.194 0-.335-.144t-.14-.356q0-.194.143-.347q.144-.153.357-.153h3.038q1.692 0 2.885 1.193T21 12"}));export{h as default};
|
|
@ -0,0 +1 @@
|
|||
import{r as t}from"./index-draOeoCt.js";const r=e=>t.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"1em",height:"1em",viewBox:"0 0 24 24",...e},t.createElement("path",{fill:"currentColor",d:"m18.52 15.758l-.77-.781q1.02-.275 1.635-1.101T20 12q0-1.27-.894-2.173q-.895-.904-2.145-.904h-3.615v-1h3.616q1.67 0 2.854 1.193T21 12q0 1.233-.69 2.23q-.689.999-1.79 1.528M15.311 12.5l-1-1h1.15v1zm5.18 9.408l-18.4-18.4L2.8 2.8l18.4 18.4zm-9.838-5.831H7.077q-1.69 0-2.884-1.193T3 12q0-1.61 1.098-2.777t2.69-1.265h.462l.966.965H7.077q-1.27 0-2.173.904Q4 10.731 4 12t.904 2.173t2.173.904h3.577zM8.539 12.5v-1h2.259l.975 1z"}));export{r as default};
|
|
@ -0,0 +1 @@
|
|||
import{r as e}from"./index-draOeoCt.js";const r=t=>e.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"1em",height:"1em",viewBox:"0 0 24 24",...t},e.createElement("path",{fill:"none",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M9 6h11M9 12h11M9 18h11M5 6v.01M5 12v.01M5 18v.01"}));export{r as default};
|
Binary file not shown.
After Width: | Height: | Size: 109 KiB |
|
@ -0,0 +1 @@
|
|||
import{r as t}from"./index-draOeoCt.js";const r=e=>t.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"1em",height:"1em",viewBox:"0 0 24 24",...e},t.createElement("path",{fill:"currentColor",d:"M5.616 20q-.691 0-1.153-.462T4 18.384V5.616q0-.691.463-1.153T5.616 4h6.403v1H5.616q-.231 0-.424.192T5 5.616v12.769q0 .23.192.423t.423.192h6.404v1zm10.846-4.461l-.702-.72l2.319-2.319H9.192v-1h8.887l-2.32-2.32l.702-.718L20 12z"}));export{r as default};
|
|
@ -0,0 +1 @@
|
|||
import{r as c}from"./index-draOeoCt.js";const l=a=>c.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:40,height:40,viewBox:"0 0 14 14",...a},c.createElement("path",{fill:"currentColor",fillRule:"evenodd",d:"M3.564 4.884a1.91 1.91 0 0 0-1.523.542a1.9 1.9 0 0 0-.442.691a2.5 2.5 0 0 0-.08.511c-.02.255-.02.49 0 .744c.02.241.052.434.08.51A1.87 1.87 0 0 0 2.74 9.015c.263.094.545.129.824.102l.07-.003c.373 0 .78-.2 1.271-.68c.392-.384.77-.879 1.172-1.433c-.401-.554-.78-1.049-1.172-1.432c-.491-.482-.898-.681-1.27-.681l-.071-.003ZM7 8.277a11 11 0 0 1-1.045 1.227c-.598.585-1.352 1.096-2.284 1.109a3.41 3.41 0 0 1-2.687-.974a3.4 3.4 0 0 1-.796-1.246c-.104-.287-.144-.664-.163-.9A6 6 0 0 1 0 7q.001-.247.024-.493c.02-.236.06-.613.163-.9a3.37 3.37 0 0 1 2.048-2.034c.46-.164.95-.227 1.435-.186c.932.013 1.686.524 2.284 1.109c.368.36.716.789 1.045 1.227a11 11 0 0 1 1.045-1.227c.598-.585 1.352-1.096 2.284-1.109a3.41 3.41 0 0 1 2.687.974c.354.352.626.777.796 1.246c.104.287.144.664.163.9q.022.246.025.493q-.002.247-.025.493c-.02.236-.06.613-.163.9a3.37 3.37 0 0 1-2.048 2.034c-.46.164-.95.227-1.435.186c-.932-.013-1.686-.524-2.284-1.109a11 11 0 0 1-1.045-1.227Zm5.48-.905c-.02.241-.051.434-.079.51a1.87 1.87 0 0 1-1.141 1.132a1.9 1.9 0 0 1-.823.102l-.072-.003c-.372 0-.779-.2-1.27-.68c-.392-.384-.77-.879-1.172-1.433c.401-.554.78-1.049 1.172-1.432c.491-.482.898-.681 1.27-.681l.072-.003a1.91 1.91 0 0 1 1.522.542c.197.196.348.432.442.691c.028.077.06.27.08.511c.02.255.02.49 0 .744Z",clipRule:"evenodd"}));export{l as default};
|
|
@ -0,0 +1 @@
|
|||
import{r as e}from"./index-draOeoCt.js";const r=t=>e.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"1em",height:"1em",viewBox:"0 0 24 24",...t},e.createElement("path",{fill:"currentColor",d:"M4.5 10.5c-.825 0-1.5.675-1.5 1.5s.675 1.5 1.5 1.5S6 12.825 6 12s-.675-1.5-1.5-1.5m15 0c-.825 0-1.5.675-1.5 1.5s.675 1.5 1.5 1.5S21 12.825 21 12s-.675-1.5-1.5-1.5m-7.5 0c-.825 0-1.5.675-1.5 1.5s.675 1.5 1.5 1.5s1.5-.675 1.5-1.5s-.675-1.5-1.5-1.5"}));export{r as default};
|
|
@ -0,0 +1 @@
|
|||
import{r as e}from"./index-draOeoCt.js";const o=t=>e.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"1em",height:"1em",viewBox:"0 0 24 24",...t},e.createElement("g",{fill:"none",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:1.5,color:"currentColor"},e.createElement("path",{d:"m12.88 7.017l4.774 1.271m-5.796 2.525l2.386.636m-2.267 6.517l.954.255c2.7.72 4.05 1.079 5.114.468c1.063-.61 1.425-1.953 2.148-4.637l1.023-3.797c.724-2.685 1.085-4.027.471-5.085s-1.963-1.417-4.664-2.136l-.954-.255c-2.7-.72-4.05-1.079-5.113-.468c-1.064.61-1.426 1.953-2.15 4.637l-1.022 3.797c-.724 2.685-1.086 4.027-.471 5.085c.614 1.057 1.964 1.417 4.664 2.136"}),e.createElement("path",{d:"m12 20.946l-.952.26c-2.694.733-4.04 1.1-5.102.477c-1.06-.622-1.422-1.99-2.143-4.728l-1.021-3.872c-.722-2.737-1.083-4.106-.47-5.184C2.842 6.966 4 7 5.5 7"})));export{o as default};
|
|
@ -0,0 +1 @@
|
|||
import{r as l}from"./index-draOeoCt.js";const h=t=>l.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"1em",height:"1em",viewBox:"0 0 2048 2048",...t},l.createElement("path",{fill:"currentColor",d:"M1685 768h-326l-80 384h351l-32 128h-333l-113 512H989l111-512H778l-109 512H508l108-512H298l24-128h330l79-384H384l25-128h340l107-512h161L910 640h320l110-512h157l-107 512h323zm-559 384l82-384H886l-85 384z"}));export{h as default};
|
|
@ -0,0 +1 @@
|
|||
import{r as a}from"./index-draOeoCt.js";const r=t=>a.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"1em",height:"1em",viewBox:"0 0 24 24",...t},a.createElement("path",{fill:"currentColor",d:"M12 3a2 2 0 1 0 0 4a2 2 0 0 0 0-4m-1 5.874A4.002 4.002 0 0 1 12 1a4 4 0 0 1 1 7.874V11h4a3 3 0 0 1 3 3v1.126A4.002 4.002 0 0 1 19 23a4 4 0 0 1-1-7.874V14a1 1 0 0 0-1-1H7a1 1 0 0 0-1 1v1.126A4.002 4.002 0 0 1 5 23a4 4 0 0 1-1-7.874V14a3 3 0 0 1 3-3h4zM19.003 17h-.006a2 2 0 1 0 .006 0M5 17a2 2 0 1 0 0 4a2 2 0 0 0 0-4"}));export{r as default};
|
|
@ -0,0 +1 @@
|
|||
import{r as e}from"./index-draOeoCt.js";const o=t=>e.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"1em",height:"1em",viewBox:"0 0 32 32",...t},e.createElement("g",{fill:"none"},e.createElement("path",{fill:"url(#fluentColorPeople320)",d:"M27.593 18A2.406 2.406 0 0 1 30 20.406S30 25 23 25h.002c-7 0-7-4.594-7-4.594A2.406 2.406 0 0 1 18.408 18z"}),e.createElement("path",{fill:"url(#fluentColorPeople325)",fillOpacity:.5,d:"M27.593 18A2.406 2.406 0 0 1 30 20.406S30 25 23 25h.002c-7 0-7-4.594-7-4.594A2.406 2.406 0 0 1 18.408 18z"}),e.createElement("path",{fill:"url(#fluentColorPeople321)",d:"M5 18a3 3 0 0 0-3 3v.15S2 27 10.5 27s8.5-5.85 8.5-5.85V21a3 3 0 0 0-3-3z"}),e.createElement("path",{fill:"url(#fluentColorPeople322)",d:"M5 18a3 3 0 0 0-3 3v.15S2 27 10.5 27s8.5-5.85 8.5-5.85V21a3 3 0 0 0-3-3z"}),e.createElement("path",{fill:"url(#fluentColorPeople323)",d:"M23 16a4 4 0 1 0 0-8a4 4 0 0 0 0 8"}),e.createElement("path",{fill:"url(#fluentColorPeople324)",d:"M10.5 16a5.5 5.5 0 1 0 0-11a5.5 5.5 0 0 0 0 11"}),e.createElement("defs",null,e.createElement("linearGradient",{id:"fluentColorPeople320",x1:19.331,x2:21.593,y1:18.93,y2:26.153,gradientUnits:"userSpaceOnUse"},e.createElement("stop",{offset:.125,stopColor:"#9c6cfe"}),e.createElement("stop",{offset:1,stopColor:"#7a41dc"})),e.createElement("linearGradient",{id:"fluentColorPeople321",x1:6.043,x2:9.088,y1:19.196,y2:28.383,gradientUnits:"userSpaceOnUse"},e.createElement("stop",{offset:.125,stopColor:"#bd96ff"}),e.createElement("stop",{offset:1,stopColor:"#9c6cfe"})),e.createElement("linearGradient",{id:"fluentColorPeople322",x1:10.5,x2:14.776,y1:16.929,y2:32.021,gradientUnits:"userSpaceOnUse"},e.createElement("stop",{stopColor:"#885edb",stopOpacity:0}),e.createElement("stop",{offset:1,stopColor:"#e362f8"})),e.createElement("linearGradient",{id:"fluentColorPeople323",x1:20.902,x2:24.98,y1:9.063,y2:15.574,gradientUnits:"userSpaceOnUse"},e.createElement("stop",{offset:.125,stopColor:"#9c6cfe"}),e.createElement("stop",{offset:1,stopColor:"#7a41dc"})),e.createElement("linearGradient",{id:"fluentColorPeople324",x1:7.616,x2:13.222,y1:6.462,y2:15.414,gradientUnits:"userSpaceOnUse"},e.createElement("stop",{offset:.125,stopColor:"#bd96ff"}),e.createElement("stop",{offset:1,stopColor:"#9c6cfe"})),e.createElement("radialGradient",{id:"fluentColorPeople325",cx:0,cy:0,r:1,gradientTransform:"matrix(9.21155 -1.02083 .91051 8.21605 14.227 21.5)",gradientUnits:"userSpaceOnUse"},e.createElement("stop",{offset:.392,stopColor:"#3b148a"}),e.createElement("stop",{offset:1,stopColor:"#3b148a",stopOpacity:0})))));export{o as default};
|
|
@ -0,0 +1 @@
|
|||
import{r as e}from"./index-draOeoCt.js";const t=a=>e.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:40,height:40,viewBox:"0 0 20 20",...a},e.createElement("g",{fill:"currentColor"},e.createElement("g",{opacity:.2},e.createElement("path",{d:"M9.75 7.75a3 3 0 1 1-6 0a3 3 0 0 1 6 0"}),e.createElement("path",{fillRule:"evenodd",d:"M6.75 8.75a1 1 0 1 0 0-2a1 1 0 0 0 0 2m0 2a3 3 0 1 0 0-6a3 3 0 0 0 0 6",clipRule:"evenodd"}),e.createElement("path",{fillRule:"evenodd",d:"M6.8 11.5A1.5 1.5 0 0 0 5.3 13v1.5a1 1 0 0 1-2 0V13a3.5 3.5 0 0 1 7 0v.5a1 1 0 1 1-2 0V13a1.5 1.5 0 0 0-1.5-1.5",clipRule:"evenodd"}),e.createElement("path",{d:"M12.75 7.75a3 3 0 1 0 6 0a3 3 0 0 0-6 0"}),e.createElement("path",{fillRule:"evenodd",d:"M15.75 8.75a1 1 0 1 1 0-2a1 1 0 0 1 0 2m0 2a3 3 0 1 1 0-6a3 3 0 0 1 0 6",clipRule:"evenodd"}),e.createElement("path",{fillRule:"evenodd",d:"M15.7 11.5a1.5 1.5 0 0 1 1.5 1.5v1.5a1 1 0 1 0 2 0V13a3.5 3.5 0 0 0-7 0v.5a1 1 0 1 0 2 0V13a1.5 1.5 0 0 1 1.5-1.5",clipRule:"evenodd"}),e.createElement("path",{fillRule:"evenodd",d:"M11.3 14.25a1.5 1.5 0 0 0-1.5 1.5v1.5a1 1 0 0 1-2 0v-1.5a3.5 3.5 0 0 1 7 0v1.5a1 1 0 1 1-2 0v-1.5a1.5 1.5 0 0 0-1.5-1.5",clipRule:"evenodd"}),e.createElement("path",{d:"M14.25 10.5a3 3 0 1 1-6 0a3 3 0 0 1 6 0"}),e.createElement("path",{fillRule:"evenodd",d:"M11.25 11.5a1 1 0 1 0 0-2a1 1 0 0 0 0 2m0 2a3 3 0 1 0 0-6a3 3 0 0 0 0 6",clipRule:"evenodd"}),e.createElement("path",{d:"M4.25 11.5h5v4h-5zm9 0h5v4h-5z"}),e.createElement("path",{d:"M9.25 13.5h4l.5 4.75h-5z"})),e.createElement("path",{fillRule:"evenodd",d:"M5 9a2 2 0 1 0 0-4a2 2 0 0 0 0 4m0 1a3 3 0 1 0 0-6a3 3 0 0 0 0 6",clipRule:"evenodd"}),e.createElement("path",{fillRule:"evenodd",d:"M3.854 8.896a.5.5 0 0 1 0 .708l-.338.337A3.47 3.47 0 0 0 2.5 12.394v1.856a.5.5 0 1 1-1 0v-1.856a4.47 4.47 0 0 1 1.309-3.16l.337-.338a.5.5 0 0 1 .708 0m11.792-.3a.5.5 0 0 0 0 .708l.338.337A3.47 3.47 0 0 1 17 12.094v2.156a.5.5 0 0 0 1 0v-2.156a4.47 4.47 0 0 0-1.309-3.16l-.337-.338a.5.5 0 0 0-.708 0",clipRule:"evenodd"}),e.createElement("path",{fillRule:"evenodd",d:"M14 9a2 2 0 1 1 0-4a2 2 0 0 1 0 4m0 1a3 3 0 1 1 0-6a3 3 0 0 1 0 6m-4.5 3.25a2.5 2.5 0 0 0-2.5 2.5v1.3a.5.5 0 0 1-1 0v-1.3a3.5 3.5 0 0 1 7 0v1.3a.5.5 0 1 1-1 0v-1.3a2.5 2.5 0 0 0-2.5-2.5",clipRule:"evenodd"}),e.createElement("path",{fillRule:"evenodd",d:"M9.5 11.75a2 2 0 1 0 0-4a2 2 0 0 0 0 4m0 1a3 3 0 1 0 0-6a3 3 0 0 0 0 6",clipRule:"evenodd"})));export{t as default};
|
|
@ -0,0 +1 @@
|
|||
import{r as e}from"./index-draOeoCt.js";const c=r=>e.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"1em",height:"1em",viewBox:"0 0 24 24",...r},e.createElement("g",{fill:"none",stroke:"currentColor",strokeWidth:2},e.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"m16.719 19.752l-.64-5.124A3 3 0 0 0 13.101 12h-2.204a3 3 0 0 0-2.976 2.628l-.641 5.124A2 2 0 0 0 9.266 22h5.468a2 2 0 0 0 1.985-2.248"}),e.createElement("circle",{cx:12,cy:5,r:3}),e.createElement("circle",{cx:4,cy:9,r:2}),e.createElement("circle",{cx:20,cy:9,r:2}),e.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M4 14h-.306a2 2 0 0 0-1.973 1.671l-.333 2A2 2 0 0 0 3.361 20H7m13-6h.306a2 2 0 0 1 1.973 1.671l.333 2A2 2 0 0 1 20.639 20H17"})));export{c as default};
|
|
@ -0,0 +1 @@
|
|||
import{r as e}from"./index-draOeoCt.js";const o=r=>e.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"1em",height:"1em",viewBox:"0 0 48 48",...r},e.createElement("g",{fill:"none"},e.createElement("path",{fill:"currentColor",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:4,d:"M19 20a7 7 0 1 0 0-14a7 7 0 0 0 0 14M4 40.8V42h30v-1.2c0-4.48 0-6.72-.872-8.432a8 8 0 0 0-3.496-3.496C27.92 28 25.68 28 21.2 28h-4.4c-4.48 0-6.72 0-8.432.872a8 8 0 0 0-3.496 3.496C4 34.08 4 36.32 4 40.8"}),e.createElement("path",{fill:"currentColor",fillRule:"evenodd",d:"M38 13v12zm-6 6h12z",clipRule:"evenodd"}),e.createElement("path",{stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:4,d:"M38 13v12m-6-6h12"})));export{o as default};
|
|
@ -0,0 +1 @@
|
|||
import{r as t}from"./index-draOeoCt.js";const r=a=>t.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:40,height:40,viewBox:"0 0 32 32",...a},t.createElement("path",{fill:"currentColor",d:"M7.5 3A4.5 4.5 0 0 0 3 7.5v13A4.5 4.5 0 0 0 7.5 25h13a4.5 4.5 0 0 0 4.5-4.5v-13A4.5 4.5 0 0 0 20.5 3zm2.125 12h8.75c1.174 0 2.125.951 2.125 2.125c0 1.561-.888 2.7-2.118 3.396c-1.196.678-2.759.979-4.382.979s-3.186-.3-4.382-.979c-1.23-.697-2.118-1.835-2.118-3.396C7.5 15.951 8.451 15 9.625 15m.875-5.5a3.5 3.5 0 1 1 7 0a3.5 3.5 0 0 1-7 0m.5 19a4.5 4.5 0 0 1-3.746-2.005q.122.005.245.005h14a5 5 0 0 0 5-5v-14q0-.123-.005-.246A4.5 4.5 0 0 1 28.5 11v10.5a7 7 0 0 1-7 7z"}));export{r as default};
|
|
@ -0,0 +1 @@
|
|||
import{r as t}from"./index-draOeoCt.js";const r=q=>t.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"1em",height:"1em",viewBox:"0 0 24 24",...q},t.createElement("path",{fill:"currentColor",d:"M12 12.385q-1.246 0-2.123-.877T9 9.385v-2.75q0-.471.322-.803t.794-.332q.298 0 .539.137q.241.136.403.365q.161-.229.403-.365q.241-.137.539-.137t.54.137t.402.365q.162-.229.403-.365q.241-.137.54-.137q.47 0 .793.332q.322.332.322.803v2.75q0 1.246-.877 2.123T12 12.385m-7 6.192v-.608q0-.619.36-1.159q.361-.539.97-.837q1.416-.679 2.834-1.018q1.417-.34 2.836-.34t2.837.34t2.832 1.018q.61.298.97.837q.361.54.361 1.16v.607q0 .44-.299.74q-.299.298-.74.298H6.04q-.441 0-.74-.299t-.3-.739"}));export{r as default};
|
|
@ -0,0 +1 @@
|
|||
import{r as t}from"./index-draOeoCt.js";const a=c=>t.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"1em",height:"1em",viewBox:"0 0 48 48",...c},t.createElement("path",{fill:"currentColor",d:"M8.25 30.5h19.082l2.941-2.5H8.25A4.25 4.25 0 0 0 4 32.249V33c0 3.755 1.942 6.567 4.92 8.38C11.849 43.163 15.786 44 20 44c1.373 0 2.711-.099 4-.28v-2.521a26 26 0 0 1-4 .302c-3.932 0-7.37-.788-9.78-2.255c-2.36-1.437-3.72-3.5-3.72-6.245v-.751c0-.966.783-1.75 1.75-1.75M20 24c5.523 0 10-4.477 10-10S25.523 4 20 4S10 8.477 10 14s4.477 10 10 10m0-17.5a7.5 7.5 0 1 1 0 15a7.5 7.5 0 0 1 0-15m13.543 21.345a2.25 2.25 0 0 1 2.914 0l6.75 5.737c.503.427.793 1.054.793 1.714v8.972c0 .956-.775 1.731-1.731 1.731h-2.538A1.73 1.73 0 0 1 38 44.268v-4.885c0-.763-.617-1.381-1.379-1.385h-3.243a1.385 1.385 0 0 0-1.379 1.385v4.885c0 .956-.775 1.731-1.731 1.731H27.73a1.73 1.73 0 0 1-1.731-1.731v-8.972c0-.66.29-1.287.793-1.714z"}));export{a as default};
|
|
@ -0,0 +1 @@
|
|||
import{r as e}from"./index-draOeoCt.js";const r=t=>e.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"1em",height:"1em",viewBox:"0 0 24 24",...t},e.createElement("path",{fill:"none",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M16 10h4a2 2 0 0 1 0 4h-4l-4 7H9l2-7H7l-2 2H2l2-4l-2-4h3l2 2h4L9 3h3z"}));export{r as default};
|
|
@ -0,0 +1 @@
|
|||
import{r as e}from"./index-draOeoCt.js";const o=t=>e.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"1em",height:"1em",viewBox:"0 0 24 24",...t},e.createElement("path",{fill:"none",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M2 22h20M6.36 17.4L4 17l-2-4l1.1-.55a2 2 0 0 1 1.8 0l.17.1a2 2 0 0 0 1.8 0L8 12L5 6l.9-.45a2 2 0 0 1 2.09.2l4.02 3a2 2 0 0 0 2.1.2l4.19-2.06a2.4 2.4 0 0 1 1.73-.17L21 7a1.4 1.4 0 0 1 .87 1.99l-.38.76c-.23.46-.6.84-1.07 1.08L7.58 17.2a2 2 0 0 1-1.22.18Z"}));export{o as default};
|
|
@ -0,0 +1 @@
|
|||
import{r as e}from"./index-draOeoCt.js";const r=t=>e.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"1em",height:"1em",viewBox:"0 0 24 24",...t},e.createElement("path",{fill:"none",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M10 20.777a9 9 0 0 1-2.48-.969M14 3.223a9.003 9.003 0 0 1 0 17.554m-9.421-3.684a9 9 0 0 1-1.227-2.592M3.124 10.5c.16-.95.468-1.85.9-2.675l.169-.305m2.714-2.941A9 9 0 0 1 10 3.223"}));export{r as default};
|
|
@ -0,0 +1 @@
|
|||
import{r as e}from"./index-draOeoCt.js";const r=t=>e.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"1em",height:"1em",viewBox:"0 0 48 48",...t},e.createElement("g",{fill:"none",stroke:"currentColor",strokeLinejoin:"round",strokeWidth:4},e.createElement("path",{d:"m24 3l21.874 15.893L38 45H10L2.125 18.893z"}),e.createElement("path",{strokeLinecap:"round",d:"m38 45l-7-8m-21 8l7-8M2 19l10 3m34-3l-10 3M24 3v10"}),e.createElement("path",{d:"m24 13l6.007 4.57L36 22l-5 15H17l-5-15l5.993-4.43zM7.594 14.92l-5.469 3.973l1.97 6.526m3.936 13.054L10 45h7m14 0h7l1.968-6.527m.437-23.553l5.469 3.973l-1.969 6.526M29.468 6.973L24 3l-5.47 3.973"})));export{r as default};
|
|
@ -0,0 +1 @@
|
|||
import{r as c}from"./index-draOeoCt.js";const t=a=>c.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",xmlnsXlink:"http://www.w3.org/1999/xlink","aria-hidden":"true",role:"img",className:"iconify iconify--logos",width:35.93,height:32,preserveAspectRatio:"xMidYMid meet",viewBox:"0 0 256 228",...a},c.createElement("path",{fill:"#00D8FF",d:"M210.483 73.824a171.49 171.49 0 0 0-8.24-2.597c.465-1.9.893-3.777 1.273-5.621c6.238-30.281 2.16-54.676-11.769-62.708c-13.355-7.7-35.196.329-57.254 19.526a171.23 171.23 0 0 0-6.375 5.848a155.866 155.866 0 0 0-4.241-3.917C100.759 3.829 77.587-4.822 63.673 3.233C50.33 10.957 46.379 33.89 51.995 62.588a170.974 170.974 0 0 0 1.892 8.48c-3.28.932-6.445 1.924-9.474 2.98C17.309 83.498 0 98.307 0 113.668c0 15.865 18.582 31.778 46.812 41.427a145.52 145.52 0 0 0 6.921 2.165a167.467 167.467 0 0 0-2.01 9.138c-5.354 28.2-1.173 50.591 12.134 58.266c13.744 7.926 36.812-.22 59.273-19.855a145.567 145.567 0 0 0 5.342-4.923a168.064 168.064 0 0 0 6.92 6.314c21.758 18.722 43.246 26.282 56.54 18.586c13.731-7.949 18.194-32.003 12.4-61.268a145.016 145.016 0 0 0-1.535-6.842c1.62-.48 3.21-.974 4.76-1.488c29.348-9.723 48.443-25.443 48.443-41.52c0-15.417-17.868-30.326-45.517-39.844Zm-6.365 70.984c-1.4.463-2.836.91-4.3 1.345c-3.24-10.257-7.612-21.163-12.963-32.432c5.106-11 9.31-21.767 12.459-31.957c2.619.758 5.16 1.557 7.61 2.4c23.69 8.156 38.14 20.213 38.14 29.504c0 9.896-15.606 22.743-40.946 31.14Zm-10.514 20.834c2.562 12.94 2.927 24.64 1.23 33.787c-1.524 8.219-4.59 13.698-8.382 15.893c-8.067 4.67-25.32-1.4-43.927-17.412a156.726 156.726 0 0 1-6.437-5.87c7.214-7.889 14.423-17.06 21.459-27.246c12.376-1.098 24.068-2.894 34.671-5.345a134.17 134.17 0 0 1 1.386 6.193ZM87.276 214.515c-7.882 2.783-14.16 2.863-17.955.675c-8.075-4.657-11.432-22.636-6.853-46.752a156.923 156.923 0 0 1 1.869-8.499c10.486 2.32 22.093 3.988 34.498 4.994c7.084 9.967 14.501 19.128 21.976 27.15a134.668 134.668 0 0 1-4.877 4.492c-9.933 8.682-19.886 14.842-28.658 17.94ZM50.35 144.747c-12.483-4.267-22.792-9.812-29.858-15.863c-6.35-5.437-9.555-10.836-9.555-15.216c0-9.322 13.897-21.212 37.076-29.293c2.813-.98 5.757-1.905 8.812-2.773c3.204 10.42 7.406 21.315 12.477 32.332c-5.137 11.18-9.399 22.249-12.634 32.792a134.718 134.718 0 0 1-6.318-1.979Zm12.378-84.26c-4.811-24.587-1.616-43.134 6.425-47.789c8.564-4.958 27.502 2.111 47.463 19.835a144.318 144.318 0 0 1 3.841 3.545c-7.438 7.987-14.787 17.08-21.808 26.988c-12.04 1.116-23.565 2.908-34.161 5.309a160.342 160.342 0 0 1-1.76-7.887Zm110.427 27.268a347.8 347.8 0 0 0-7.785-12.803c8.168 1.033 15.994 2.404 23.343 4.08c-2.206 7.072-4.956 14.465-8.193 22.045a381.151 381.151 0 0 0-7.365-13.322Zm-45.032-43.861c5.044 5.465 10.096 11.566 15.065 18.186a322.04 322.04 0 0 0-30.257-.006c4.974-6.559 10.069-12.652 15.192-18.18ZM82.802 87.83a323.167 323.167 0 0 0-7.227 13.238c-3.184-7.553-5.909-14.98-8.134-22.152c7.304-1.634 15.093-2.97 23.209-3.984a321.524 321.524 0 0 0-7.848 12.897Zm8.081 65.352c-8.385-.936-16.291-2.203-23.593-3.793c2.26-7.3 5.045-14.885 8.298-22.6a321.187 321.187 0 0 0 7.257 13.246c2.594 4.48 5.28 8.868 8.038 13.147Zm37.542 31.03c-5.184-5.592-10.354-11.779-15.403-18.433c4.902.192 9.899.29 14.978.29c5.218 0 10.376-.117 15.453-.343c-4.985 6.774-10.018 12.97-15.028 18.486Zm52.198-57.817c3.422 7.8 6.306 15.345 8.596 22.52c-7.422 1.694-15.436 3.058-23.88 4.071a382.417 382.417 0 0 0 7.859-13.026a347.403 347.403 0 0 0 7.425-13.565Zm-16.898 8.101a358.557 358.557 0 0 1-12.281 19.815a329.4 329.4 0 0 1-23.444.823c-7.967 0-15.716-.248-23.178-.732a310.202 310.202 0 0 1-12.513-19.846h.001a307.41 307.41 0 0 1-10.923-20.627a310.278 310.278 0 0 1 10.89-20.637l-.001.001a307.318 307.318 0 0 1 12.413-19.761c7.613-.576 15.42-.876 23.31-.876H128c7.926 0 15.743.303 23.354.883a329.357 329.357 0 0 1 12.335 19.695a358.489 358.489 0 0 1 11.036 20.54a329.472 329.472 0 0 1-11 20.722Zm22.56-122.124c8.572 4.944 11.906 24.881 6.52 51.026c-.344 1.668-.73 3.367-1.15 5.09c-10.622-2.452-22.155-4.275-34.23-5.408c-7.034-10.017-14.323-19.124-21.64-27.008a160.789 160.789 0 0 1 5.888-5.4c18.9-16.447 36.564-22.941 44.612-18.3ZM128 90.808c12.625 0 22.86 10.235 22.86 22.86s-10.235 22.86-22.86 22.86s-22.86-10.235-22.86-22.86s10.235-22.86 22.86-22.86Z"}));export{t as default};
|
|
@ -0,0 +1 @@
|
|||
import{r as t}from"./index-draOeoCt.js";const l=e=>t.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"1em",height:"1em",viewBox:"0 0 24 24",...e},t.createElement("path",{fill:"currentColor",d:"M17.085 9.673H9.342q-1.556 0-2.65 1.058q-1.096 1.058-1.096 2.596t1.095 2.606Q7.787 17 9.342 17h6.754q.214 0 .357.143t.143.357t-.143.357t-.357.143H9.342q-1.963 0-3.355-1.364t-1.39-3.309t1.39-3.3Q7.38 8.673 9.343 8.673h7.743l-2.612-2.611q-.14-.14-.15-.345q-.01-.203.15-.363t.354-.16t.354.16l3.253 3.254q.131.13.184.267t.053.298t-.053.298q-.052.137-.183.268l-3.254 3.253q-.14.14-.344.15t-.364-.15t-.16-.353t.16-.354z"}));export{l as default};
|
|
@ -0,0 +1 @@
|
|||
import{r as l}from"./index-draOeoCt.js";const a=e=>l.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"1em",height:"1em",viewBox:"0 0 24 24",...e},l.createElement("g",{fill:"none",fillRule:"evenodd"},l.createElement("path",{d:"M24 0v24H0V0zM12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.019-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"}),l.createElement("path",{fill:"currentColor",d:"M15.707 11.293a1 1 0 0 1 0 1.414l-5.657 5.657a1 1 0 1 1-1.414-1.414l4.95-4.95l-4.95-4.95a1 1 0 0 1 1.414-1.414z"})));export{a as default};
|
|
@ -0,0 +1 @@
|
|||
import{r as c}from"./index-draOeoCt.js";const t=s=>c.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"1em",height:"1em",viewBox:"0 0 256 256",...s},c.createElement("path",{fill:"currentColor",d:"M225.86 102.82c-3.77-3.94-7.67-8-9.14-11.57c-1.36-3.27-1.44-8.69-1.52-13.94c-.15-9.76-.31-20.82-8-28.51s-18.75-7.85-28.51-8c-5.25-.08-10.67-.16-13.94-1.52c-3.56-1.47-7.63-5.37-11.57-9.14C146.28 23.51 138.44 16 128 16s-18.27 7.51-25.18 14.14c-3.94 3.77-8 7.67-11.57 9.14c-3.25 1.36-8.69 1.44-13.94 1.52c-9.76.15-20.82.31-28.51 8s-7.8 18.75-8 28.51c-.08 5.25-.16 10.67-1.52 13.94c-1.47 3.56-5.37 7.63-9.14 11.57C23.51 109.72 16 117.56 16 128s7.51 18.27 14.14 25.18c3.77 3.94 7.67 8 9.14 11.57c1.36 3.27 1.44 8.69 1.52 13.94c.15 9.76.31 20.82 8 28.51s18.75 7.85 28.51 8c5.25.08 10.67.16 13.94 1.52c3.56 1.47 7.63 5.37 11.57 9.14c6.9 6.63 14.74 14.14 25.18 14.14s18.27-7.51 25.18-14.14c3.94-3.77 8-7.67 11.57-9.14c3.27-1.36 8.69-1.44 13.94-1.52c9.76-.15 20.82-.31 28.51-8s7.85-18.75 8-28.51c.08-5.25.16-10.67 1.52-13.94c1.47-3.56 5.37-7.63 9.14-11.57c6.63-6.9 14.14-14.74 14.14-25.18s-7.51-18.27-14.14-25.18m-11.55 39.29c-4.79 5-9.75 10.17-12.38 16.52c-2.52 6.1-2.63 13.07-2.73 19.82c-.1 7-.21 14.33-3.32 17.43s-10.39 3.22-17.43 3.32c-6.75.1-13.72.21-19.82 2.73c-6.35 2.63-11.52 7.59-16.52 12.38S132 224 128 224s-9.15-4.92-14.11-9.69s-10.17-9.75-16.52-12.38c-6.1-2.52-13.07-2.63-19.82-2.73c-7-.1-14.33-.21-17.43-3.32s-3.22-10.39-3.32-17.43c-.1-6.75-.21-13.72-2.73-19.82c-2.63-6.35-7.59-11.52-12.38-16.52S32 132 32 128s4.92-9.15 9.69-14.11s9.75-10.17 12.38-16.52c2.52-6.1 2.63-13.07 2.73-19.82c.1-7 .21-14.33 3.32-17.43s10.39-3.22 17.43-3.32c6.75-.1 13.72-.21 19.82-2.73c6.35-2.63 11.52-7.59 16.52-12.38S124 32 128 32s9.15 4.92 14.11 9.69s10.17 9.75 16.52 12.38c6.1 2.52 13.07 2.63 19.82 2.73c7 .1 14.33.21 17.43 3.32s3.22 10.39 3.32 17.43c.1 6.75.21 13.72 2.73 19.82c2.63 6.35 7.59 11.52 12.38 16.52S224 124 224 128s-4.92 9.15-9.69 14.11m-40.65-43.77a8 8 0 0 1 0 11.32l-56 56a8 8 0 0 1-11.32 0l-24-24a8 8 0 0 1 11.32-11.32L112 148.69l50.34-50.35a8 8 0 0 1 11.32 0"}));export{t as default};
|
|
@ -0,0 +1 @@
|
|||
import{r as t}from"./index-draOeoCt.js";const T=e=>t.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"1em",height:"1em",viewBox:"0 0 24 24",...e},t.createElement("path",{fill:"currentColor",d:"m19.6 21l-6.3-6.3q-.75.6-1.725.95T9.5 16q-2.725 0-4.612-1.888T3 9.5t1.888-4.612T9.5 3t4.613 1.888T16 9.5q0 1.1-.35 2.075T14.7 13.3l6.3 6.3zM9.5 14q1.875 0 3.188-1.312T14 9.5t-1.312-3.187T9.5 5T6.313 6.313T5 9.5t1.313 3.188T9.5 14"}));export{T as default};
|
|
@ -0,0 +1 @@
|
|||
import{r as e}from"./index-draOeoCt.js";const l=t=>e.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:40,height:40,viewBox:"0 0 48 48",...t},e.createElement("defs",null,e.createElement("mask",{id:"ipTSettingOne0"},e.createElement("g",{fill:"#555",stroke:"#fff",strokeLinejoin:"round",strokeWidth:4},e.createElement("path",{d:"m34 41l10-17L34 7H14L4 24l10 17z"}),e.createElement("path",{d:"M24 29a5 5 0 1 0 0-10a5 5 0 0 0 0 10Z"})))),e.createElement("path",{fill:"currentColor",d:"M0 0h48v48H0z",mask:"url(#ipTSettingOne0)"}));export{l as default};
|
|
@ -0,0 +1 @@
|
|||
import{r as t}from"./index-draOeoCt.js";const r=e=>t.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"1em",height:"1em",viewBox:"0 0 24 24",...e},t.createElement("path",{fill:"currentColor",d:"M8 14.5q-.213 0-.357-.143T7.5 14V9.116q0-.672.472-1.144T9.116 7.5h8.957l-2.721-2.721q-.146-.146-.156-.347t.156-.367t.357-.165t.357.166l3.369 3.369q.242.242.242.565t-.242.566l-3.37 3.388q-.14.16-.341.162t-.366-.162q-.166-.166-.159-.357t.153-.357l2.721-2.74H9.115q-.269 0-.442.173t-.173.443V14q0 .214-.143.357T8 14.5M5.616 20q-.672 0-1.144-.472T4 18.385V5.115q0-.213.143-.356t.357-.143t.357.143t.143.357v13.269q0 .269.173.442t.443.173h10.769q.269 0 .442-.173t.173-.442V15q0-.213.143-.357t.357-.143t.357.143T18 15v3.385q0 .67-.472 1.143q-.472.472-1.143.472z"}));export{r as default};
|
|
@ -0,0 +1 @@
|
|||
import{r as t}from"./index-draOeoCt.js";const r=q=>t.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"1em",height:"1em",viewBox:"0 0 24 24",...q},t.createElement("path",{fill:"currentColor",d:"M12.15 19.385q-1.421 0-2.624-.751t-1.882-2.017q-.09-.188-.014-.395t.27-.297q.2-.096.418-.02t.34.276q.546.98 1.472 1.546q.926.565 2.031.565q1.389 0 2.451-.79t1.063-2.071q0-.327-.058-.654t-.23-.615q-.058-.212.061-.389q.12-.177.33-.235q.212-.057.402.062q.19.12.247.33q.212.345.279.756t.067.814q0 1.725-1.399 2.805t-3.224 1.08M3 11.5q-.213 0-.357-.143T2.5 11t.143-.357T3 10.5h18q.214 0 .357.143T21.5 11t-.143.357T21 11.5zm5.296-3.029q-.213-.058-.325-.247q-.111-.19-.054-.403q.106-1.463 1.33-2.371q1.222-.908 2.803-.908q1.066 0 2.003.452t1.566 1.287q.122.177.089.386t-.216.331q-.194.127-.412.09t-.376-.225q-.471-.617-1.163-.923t-1.48-.306q-1.194 0-2.117.67t-.998 1.782q-.057.22-.247.331t-.403.054"}));export{r as default};
|
|
@ -0,0 +1 @@
|
|||
import{r as t}from"./index-draOeoCt.js";const r=e=>t.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"1em",height:"1em",viewBox:"0 0 24 24",...e},t.createElement("path",{fill:"currentColor",d:"M5.616 18.212q-.262 0-.439-.171T5 17.617t.177-.435t.439-.182H12.5q.213 0 .356.15t.144.37q0 .212-.143.356t-.338.143zM5.5 14.327q-.213 0-.356-.144T5 13.826t.144-.356t.356-.143h13q.213 0 .356.144q.144.144.144.357t-.144.356t-.356.143zm0-3.654q-.213 0-.356-.144Q5 10.385 5 10.173q0-.213.144-.357t.356-.143h13q.213 0 .356.144t.144.357t-.144.356t-.356.143zM5.616 7q-.262 0-.439-.177T5 6.385t.177-.439t.439-.177h12.769q.261 0 .438.177t.177.439t-.177.438t-.438.177z"}));export{r as default};
|
|
@ -0,0 +1 @@
|
|||
import{r as e}from"./index-draOeoCt.js";const r=t=>e.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"1em",height:"1em",viewBox:"0 0 20 20",...t},e.createElement("path",{fill:"currentColor",d:"M3.81 3.706a.75.75 0 0 1 .69-.456h11a.75.75 0 0 1 0 1.5H6.262l4.146 4.308a.75.75 0 0 1 .035 1.001L6.104 15.25H15.5a.75.75 0 0 1 0 1.5h-11a.75.75 0 0 1-.575-1.231L8.86 9.613L3.96 4.52a.75.75 0 0 1-.15-.814"}));export{r as default};
|
|
@ -0,0 +1 @@
|
|||
import{r as l}from"./index-draOeoCt.js";const t=e=>l.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:40,height:40,viewBox:"0 0 24 24",...e},l.createElement("g",{fill:"none"},l.createElement("path",{d:"m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"}),l.createElement("path",{fill:"currentColor",d:"M12 2c.896 0 1.764.118 2.59.339l-2.126 2.125A3 3 0 0 0 12.04 5H12a7 7 0 1 0 7 7v-.04q.29-.18.535-.425l2.126-2.125c.221.826.339 1.694.339 2.59c0 5.523-4.477 10-10 10S2 17.523 2 12S6.477 2 12 2m-.414 5.017c0 .851-.042 1.714.004 2.564l-.54.54a2 2 0 1 0 2.829 2.829l.54-.54c.85.046 1.712.004 2.564.004a5 5 0 1 1-5.397-5.397m6.918-4.89a1 1 0 0 1 .617.923v1.83h1.829a1 1 0 0 1 .707 1.707L18.12 10.12a1 1 0 0 1-.707.293H15l-1.828 1.829a1 1 0 0 1-1.415-1.415L13.586 9V6.586a1 1 0 0 1 .293-.708l3.535-3.535a1 1 0 0 1 1.09-.217"})));export{t as default};
|
|
@ -0,0 +1 @@
|
|||
import{r as t}from"./index-draOeoCt.js";const r=e=>t.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"1em",height:"1em",viewBox:"0 0 24 24",...e},t.createElement("path",{fill:"currentColor",d:"M4.5 20q-.213 0-.356-.144T4 19.499t.144-.356T4.5 19h15q.213 0 .356.144t.144.357t-.144.356T19.5 20zm8-3.75q-.213 0-.356-.144T12 15.749t.144-.356t.356-.143h7q.213 0 .356.144t.144.357t-.144.356t-.356.143zm0-3.75q-.213 0-.356-.144T12 11.999t.144-.356t.356-.143h7q.213 0 .356.144t.144.357t-.144.356t-.356.143zm0-3.75q-.213 0-.356-.144T12 8.249t.144-.356t.356-.143h7q.213 0 .356.144t.144.357t-.144.356t-.356.143zM4.5 5q-.213 0-.356-.144T4 4.499t.144-.356T4.5 4h15q.213 0 .356.144t.144.357t-.144.356T19.5 5zm.196 9.112q-.192.192-.444.095T4 13.838v-3.676q0-.272.252-.369t.444.096l1.82 1.819q.13.123.13.288t-.13.296z"}));export{r as default};
|
|
@ -0,0 +1 @@
|
|||
import{r as t}from"./index-draOeoCt.js";const r=e=>t.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"1em",height:"1em",viewBox:"0 0 24 24",...e},t.createElement("path",{fill:"currentColor",d:"M4.5 20q-.213 0-.356-.144T4 19.499t.144-.356T4.5 19h15q.213 0 .356.144t.144.357t-.144.356T19.5 20zm8-3.75q-.213 0-.356-.144T12 15.749t.144-.356t.356-.143h7q.213 0 .356.144t.144.357t-.144.356t-.356.143zm0-3.75q-.213 0-.356-.144T12 11.999t.144-.356t.356-.143h7q.213 0 .356.144t.144.357t-.144.356t-.356.143zm0-3.75q-.213 0-.356-.144T12 8.249t.144-.356t.356-.143h7q.213 0 .356.144t.144.357t-.144.356t-.356.143zM4.5 5q-.213 0-.356-.144T4 4.499t.144-.356T4.5 4h15q.213 0 .356.144t.144.357t-.144.356T19.5 5zm1.612 9.112l-1.82-1.82q-.13-.124-.13-.289t.13-.295l1.82-1.82q.192-.192.444-.095t.252.369v3.677q0 .271-.252.368t-.445-.095"}));export{r as default};
|
|
@ -0,0 +1 @@
|
|||
import{r as e}from"./index-draOeoCt.js";const s=t=>e.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"1em",height:"1em",viewBox:"0 0 24 24",...t},e.createElement("path",{fill:"currentColor",d:"M12 2C6.486 2 2 6.486 2 12s4.486 10 10 10s10-4.486 10-10S17.514 2 12 2m0 18c-4.411 0-8-3.589-8-8s3.589-8 8-8s8 3.589 8 8s-3.589 8-8 8"}),e.createElement("path",{fill:"currentColor",d:"M13 7h-2v6h6v-2h-4z"}));export{s as default};
|
|
@ -0,0 +1 @@
|
|||
import{r as t}from"./index-draOeoCt.js";const q=e=>t.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"1em",height:"1em",viewBox:"0 0 24 24",...e},t.createElement("path",{fill:"currentColor",d:"M6.192 19.25q-.212 0-.356-.144t-.144-.357t.144-.356t.356-.143h11.616q.212 0 .356.144t.144.357t-.144.356t-.356.143zM12 16.058q-2.14 0-3.358-1.258t-1.217-3.415V4.39q0-.233.171-.398q.171-.166.403-.166t.395.166t.164.398v7.028q0 1.631.911 2.583q.912.952 2.531.952t2.53-.952t.912-2.583V4.391q0-.233.172-.398q.17-.166.402-.166t.396.166t.163.398v6.994q0 2.157-1.217 3.415T12 16.058"}));export{q as default};
|
|
@ -0,0 +1 @@
|
|||
import{r as t}from"./index-draOeoCt.js";const r=e=>t.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"1em",height:"1em",viewBox:"0 0 24 24",...e},t.createElement("path",{fill:"currentColor",d:"M7.904 18q-.214 0-.357-.143t-.143-.357t.143-.357t.357-.143h6.754q1.556 0 2.65-1.067q1.096-1.067 1.096-2.606t-1.095-2.596q-1.096-1.058-2.651-1.058H6.916l2.611 2.611q.16.16.16.354t-.16.354t-.363.15q-.204-.01-.345-.15L5.565 9.74q-.13-.131-.183-.268q-.053-.136-.053-.298t.053-.298t.184-.267l3.253-3.254q.16-.16.354-.16t.354.16t.15.363t-.15.345l-2.611 2.61h7.742q1.963 0 3.355 1.354q1.39 1.354 1.39 3.3t-1.39 3.31T14.657 18z"}));export{r as default};
|
|
@ -0,0 +1 @@
|
|||
import{r as e}from"./index-draOeoCt.js";const a=t=>e.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:40,height:40,viewBox:"0 0 48 48",...t},e.createElement("g",{fill:"none",stroke:"currentColor",strokeLinejoin:"round",strokeWidth:4},e.createElement("path",{d:"M42 8H6a2 2 0 0 0-2 2v28a2 2 0 0 0 2 2h36a2 2 0 0 0 2-2V10a2 2 0 0 0-2-2Z"}),e.createElement("path",{d:"M36 16h-8v8h8z"}),e.createElement("path",{strokeLinecap:"round",d:"M12 32h24M12 16h6m-6 8h6"})));export{a as default};
|
|
@ -0,0 +1 @@
|
|||
import{r as t}from"./index-draOeoCt.js";const T=q=>t.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"1em",height:"1em",viewBox:"0 0 24 24",...q},t.createElement("path",{fill:"currentColor",d:"M18 20.423q.2 0 .33-.13t.132-.331t-.131-.331T18 19.5t-.33.13t-.132.332t.131.33t.331.131m-.385-1.846h.77v-3h-.77zM4 18.384V19V8zM4.615 20q-.69 0-1.153-.462T3 18.384V8.616q0-.691.463-1.153T4.615 7H9V5.615q0-.69.463-1.153T10.616 4h2.769q.69 0 1.153.462T15 5.615V7h4.385q.69 0 1.152.463T21 8.616v4.198q-.239-.152-.479-.265q-.24-.112-.521-.21V8.616q0-.27-.173-.443T19.385 8H4.615q-.269 0-.442.173T4 8.616v9.769q0 .269.173.442t.443.173h7.459q.056.275.12.516q.063.24.153.484zM10 7h4V5.615q0-.269-.173-.442T13.385 5h-2.77q-.269 0-.442.173T10 5.615zm8 15q-1.671 0-2.835-1.164Q14 19.67 14 18t1.165-2.835T18 14t2.836 1.165T22 18t-1.164 2.836T18 22"}));export{T as default};
|
|
@ -0,0 +1 @@
|
|||
import{r as t}from"./index-draOeoCt.js";const r=e=>t.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"1em",height:"1em",viewBox:"0 0 24 24",...e},t.createElement("path",{fill:"currentColor",d:"M9.039 10H7.654q-.213 0-.356-.144t-.144-.357t.144-.356T7.654 9h1.385V7.616q0-.213.144-.357q.143-.144.356-.144t.356.144t.144.356V9h1.384q.213 0 .356.144t.144.357t-.144.356t-.356.143h-1.384v1.385q0 .212-.144.356t-.357.143t-.356-.143t-.143-.357zm.5 5.23q-2.403 0-4.067-1.662q-1.664-1.664-1.664-4.065T5.47 5.436t4.064-1.667q2.402 0 4.068 1.664q1.666 1.665 1.666 4.067q0 1.042-.369 2.017t-.97 1.668l5.909 5.907q.14.14.15.345q.009.203-.15.363q-.16.16-.354.16t-.354-.16l-5.908-5.908q-.75.639-1.725.989t-1.96.35m0-1q1.99 0 3.361-1.37q1.37-1.37 1.37-3.361T12.9 6.14T9.54 4.77q-1.991 0-3.361 1.37T4.808 9.5t1.37 3.36t3.36 1.37"}));export{r as default};
|
|
@ -0,0 +1 @@
|
|||
import{r as t}from"./index-draOeoCt.js";const o=e=>t.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"1em",height:"1em",viewBox:"0 0 24 24",...e},t.createElement("path",{fill:"currentColor",d:"m19.485 20.154l-6.262-6.262q-.75.639-1.725.989t-1.96.35q-2.402 0-4.066-1.663T3.808 9.503T5.47 5.436t4.064-1.667t4.068 1.664T15.268 9.5q0 1.042-.369 2.017t-.97 1.668l6.262 6.261zM9.539 14.23q1.99 0 3.36-1.37t1.37-3.361t-1.37-3.36t-3.36-1.37t-3.361 1.37t-1.37 3.36t1.37 3.36t3.36 1.37M7.27 10V9h4.539v1z"}));export{o as default};
|
|
@ -1 +0,0 @@
|
|||
<h1>error</h1>
|
|
@ -1 +1,27 @@
|
|||
<h1>test1</h1>
|
||||
<!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" />
|
||||
<script>
|
||||
window.env = {
|
||||
VITE_APP_SERVER_IP: "192.168.112.239",
|
||||
VITE_APP_SERVER_PORT: "3002",
|
||||
VITE_APP_UOLOAD_PORT: "8090",
|
||||
VITE_APP_APP_NAME: "222",
|
||||
VITE_APP_VERSION: "111",
|
||||
};
|
||||
</script>
|
||||
<title>信箱</title>
|
||||
<script
|
||||
type="module"
|
||||
crossorigin
|
||||
src="/assets/index-draOeoCt.js"></script>
|
||||
<link rel="stylesheet" crossorigin href="/assets/index-zcprBytj.css" />
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div id="root"></div>
|
||||
</body>
|
||||
</html>
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue