@glodon-aiot/react-components 3.11.1-shapshot.1765331459 → 3.13.0-alpha.28
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/es/ImageMap/index.mjs +2 -3
- package/dist/es/index.mjs +38 -41
- package/dist/lib/index.js +2 -10
- package/dist/src/index.d.ts +0 -1
- package/package.json +12 -24
- package/dist/aiot-react-components.js +0 -20191
- package/dist/aiot-react-components.umd.cjs +0 -183
- package/dist/es/components/DocumentViewer/components/DownloadButton.mjs +0 -18
- package/dist/es/components/DocumentViewer/components/ErrorAlert.mjs +0 -28
- package/dist/es/components/DocumentViewer/components/FileRenderers.mjs +0 -486
- package/dist/es/components/DocumentViewer/components/MediaRenderers.mjs +0 -46
- package/dist/es/components/DocumentViewer/components/PDFViewer/index.mjs +0 -62
- package/dist/es/components/DocumentViewer/components/PDFViewer/style.less.mjs +0 -4
- package/dist/es/components/DocumentViewer/components/ZipRenderer.mjs +0 -154
- package/dist/es/components/DocumentViewer/constants.mjs +0 -21
- package/dist/es/components/DocumentViewer/hooks/useZipViewer.mjs +0 -153
- package/dist/es/components/DocumentViewer/index.mjs +0 -367
- package/dist/es/components/DocumentViewer/style.less.mjs +0 -4
- package/dist/es/components/DocumentViewer/utils.mjs +0 -96
- package/dist/es/node_modules/@react-pdf-viewer/open/lib/styles/index.css.mjs +0 -4
- package/dist/es/node_modules/@react-pdf-viewer/toolbar/lib/styles/index.css.mjs +0 -4
- package/dist/es/utils/file.mjs +0 -17
- package/dist/src/components/DocumentViewer/components/DownloadButton.d.ts +0 -7
- package/dist/src/components/DocumentViewer/components/ErrorAlert.d.ts +0 -10
- package/dist/src/components/DocumentViewer/components/FileRenderers.d.ts +0 -23
- package/dist/src/components/DocumentViewer/components/MediaRenderers.d.ts +0 -9
- package/dist/src/components/DocumentViewer/components/PDFViewer/index.d.ts +0 -7
- package/dist/src/components/DocumentViewer/components/PdfRenderer.d.ts +0 -11
- package/dist/src/components/DocumentViewer/components/ZipRenderer.d.ts +0 -22
- package/dist/src/components/DocumentViewer/components/index.d.ts +0 -9
- package/dist/src/components/DocumentViewer/constants.d.ts +0 -21
- package/dist/src/components/DocumentViewer/hooks/index.d.ts +0 -5
- package/dist/src/components/DocumentViewer/hooks/usePdfViewer.d.ts +0 -7
- package/dist/src/components/DocumentViewer/hooks/useZipViewer.d.ts +0 -21
- package/dist/src/components/DocumentViewer/index.d.ts +0 -11
- package/dist/src/components/DocumentViewer/utils.d.ts +0 -23
- package/dist/src/utils/file.d.ts +0 -16
- package/dist/style.css +0 -1
|
@@ -1,96 +0,0 @@
|
|
|
1
|
-
var u = (e, s, t) => new Promise((n, c) => {
|
|
2
|
-
var a = (r) => {
|
|
3
|
-
try {
|
|
4
|
-
o(t.next(r));
|
|
5
|
-
} catch (h) {
|
|
6
|
-
c(h);
|
|
7
|
-
}
|
|
8
|
-
}, i = (r) => {
|
|
9
|
-
try {
|
|
10
|
-
o(t.throw(r));
|
|
11
|
-
} catch (h) {
|
|
12
|
-
c(h);
|
|
13
|
-
}
|
|
14
|
-
}, o = (r) => r.done ? n(r.value) : Promise.resolve(r.value).then(a, i);
|
|
15
|
-
o((t = t.apply(e, s)).next());
|
|
16
|
-
});
|
|
17
|
-
const m = (e) => {
|
|
18
|
-
if (e === 0)
|
|
19
|
-
return "0 B";
|
|
20
|
-
const s = 1024, t = ["B", "KB", "MB", "GB"], n = Math.floor(Math.log(e) / Math.log(s));
|
|
21
|
-
return Math.round(e / Math.pow(s, n) * 100) / 100 + " " + t[n];
|
|
22
|
-
}, S = (e) => u(void 0, null, function* () {
|
|
23
|
-
let s = !1, t = 0;
|
|
24
|
-
try {
|
|
25
|
-
const n = yield fetch(e, {
|
|
26
|
-
method: "HEAD",
|
|
27
|
-
headers: {
|
|
28
|
-
Range: "bytes=0-0"
|
|
29
|
-
}
|
|
30
|
-
}), c = n.headers.get("Accept-Ranges"), a = n.headers.get("Content-Range"), i = n.headers.get("Content-Length");
|
|
31
|
-
if (a) {
|
|
32
|
-
const o = a.match(/bytes \d+-\d+\/(\d+)/);
|
|
33
|
-
o && (t = parseInt(o[1], 10));
|
|
34
|
-
} else
|
|
35
|
-
i && (t = parseInt(i, 10));
|
|
36
|
-
return s = n.status === 206 || c === "bytes" || a !== null && a.startsWith("bytes"), {
|
|
37
|
-
supportsRange: s,
|
|
38
|
-
fileSize: t
|
|
39
|
-
};
|
|
40
|
-
} catch (n) {
|
|
41
|
-
return console.warn("Range 支持检测失败:", n), {
|
|
42
|
-
supportsRange: !1,
|
|
43
|
-
fileSize: 0
|
|
44
|
-
};
|
|
45
|
-
}
|
|
46
|
-
}), x = (e) => u(void 0, null, function* () {
|
|
47
|
-
try {
|
|
48
|
-
const t = (yield fetch(e, {
|
|
49
|
-
method: "HEAD"
|
|
50
|
-
})).headers.get("Content-Length");
|
|
51
|
-
return t ? parseInt(t, 10) : 0;
|
|
52
|
-
} catch (s) {
|
|
53
|
-
return console.warn("无法获取文件大小:", s), 0;
|
|
54
|
-
}
|
|
55
|
-
}), z = (e) => {
|
|
56
|
-
if (!e || e.startsWith("blob:") || e.startsWith("data:"))
|
|
57
|
-
return e;
|
|
58
|
-
const s = e.startsWith("http%3A%2F%2F") || e.startsWith("https%3A%2F%2F");
|
|
59
|
-
let t = e;
|
|
60
|
-
if (s)
|
|
61
|
-
try {
|
|
62
|
-
t = decodeURIComponent(e);
|
|
63
|
-
} catch (n) {
|
|
64
|
-
t = e;
|
|
65
|
-
}
|
|
66
|
-
try {
|
|
67
|
-
return new URL(t).toString();
|
|
68
|
-
} catch (n) {
|
|
69
|
-
try {
|
|
70
|
-
const c = t.indexOf("://");
|
|
71
|
-
if (c === -1)
|
|
72
|
-
return t;
|
|
73
|
-
const a = t.substring(0, c + 3), i = t.substring(c + 3), o = i.indexOf("/");
|
|
74
|
-
if (o === -1)
|
|
75
|
-
return t;
|
|
76
|
-
const r = i.substring(0, o), h = i.substring(o + 1), p = h.indexOf("?"), f = p === -1 ? h : h.substring(0, p), g = p === -1 ? "" : h.substring(p + 1), l = f.split("/").map((d) => {
|
|
77
|
-
if (!d)
|
|
78
|
-
return d;
|
|
79
|
-
try {
|
|
80
|
-
return decodeURIComponent(d) !== d ? d : encodeURIComponent(d);
|
|
81
|
-
} catch (R) {
|
|
82
|
-
return encodeURIComponent(d);
|
|
83
|
-
}
|
|
84
|
-
}).join("/");
|
|
85
|
-
return g ? `${a}${r}/${l}?${g}` : `${a}${r}/${l}`;
|
|
86
|
-
} catch (c) {
|
|
87
|
-
return t;
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
};
|
|
91
|
-
export {
|
|
92
|
-
S as checkRangeSupport,
|
|
93
|
-
m as formatFileSize,
|
|
94
|
-
x as getFileSize,
|
|
95
|
-
z as normalizeUrl
|
|
96
|
-
};
|
package/dist/es/utils/file.mjs
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
const r = (t) => {
|
|
2
|
-
var e;
|
|
3
|
-
if (!t)
|
|
4
|
-
return;
|
|
5
|
-
const s = t.split(/[?#]/)[0], n = (s.split("/").pop() || s).split(".");
|
|
6
|
-
if (!(n.length < 2))
|
|
7
|
-
return (e = n.pop()) == null ? void 0 : e.toLowerCase();
|
|
8
|
-
}, o = (t) => {
|
|
9
|
-
if (!t)
|
|
10
|
-
return "unknown";
|
|
11
|
-
const s = t.toLowerCase();
|
|
12
|
-
return ["svg", "png", "gif", "jpg", "jpeg", "tiff", "tif", "bmp"].includes(s) ? "image" : s === "mp4" ? "video" : s === "mp3" ? "audio" : s === "pdf" ? "pdf" : s === "markdown" || s === "md" ? "markdown" : s === "json" ? "json" : s === "jsonl" || s === "josnl" ? "jsonl" : s === "csv" ? "csv" : s === "tsv" ? "tsv" : s === "html" || s === "htm" ? "html" : s === "xml" ? "xml" : ["doc", "docx", "ppt", "pptx", "xls", "xlsx", "wps", "odt", "rtf", "ods", "pps", "ppsx", "odp", "key"].includes(s) ? "office" : ["js", "jsx", "ts", "tsx", "py", "java", "cpp", "c", "cc", "cxx", "h", "hpp", "hxx", "css", "less", "scss", "sass", "vue", "go", "rs", "rb", "php", "swift", "kt", "scala", "sh", "bash", "zsh", "fish", "ps1", "bat", "cmd", "yml", "yaml", "toml", "ini", "conf", "config", "json", "xml", "sql", "r", "m", "mm", "pl", "pm", "lua", "dart", "elm", "clj", "cljs", "ex", "exs", "erl", "hrl", "hs", "ml", "mli", "fs", "fsx", "vb", "cs", "d", "nim", "zig", "v", "odin"].includes(s) ? "code" : s === "txt" ? "text" : s === "zip" ? "zip" : s === "tex" || s === "latex" ? "text" : "unknown";
|
|
13
|
-
};
|
|
14
|
-
export {
|
|
15
|
-
r as getFileExtension,
|
|
16
|
-
o as getFileType
|
|
17
|
-
};
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import { default as React, ReactNode } from 'react';
|
|
2
|
-
interface ErrorAlertProps {
|
|
3
|
-
message: string;
|
|
4
|
-
description?: string;
|
|
5
|
-
action?: ReactNode;
|
|
6
|
-
url?: string;
|
|
7
|
-
fileName?: string;
|
|
8
|
-
}
|
|
9
|
-
export declare const ErrorAlert: React.FC<ErrorAlertProps>;
|
|
10
|
-
export {};
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import { default as React } from 'react';
|
|
2
|
-
interface FileContent {
|
|
3
|
-
content: string;
|
|
4
|
-
error?: string;
|
|
5
|
-
}
|
|
6
|
-
interface BaseRendererProps {
|
|
7
|
-
fileContent: FileContent | null;
|
|
8
|
-
fileSize: number;
|
|
9
|
-
url: string;
|
|
10
|
-
fileName?: string;
|
|
11
|
-
}
|
|
12
|
-
export declare const TextRenderer: React.FC<BaseRendererProps>;
|
|
13
|
-
export declare const JsonRenderer: React.FC<BaseRendererProps>;
|
|
14
|
-
export declare const CsvRenderer: React.FC<BaseRendererProps>;
|
|
15
|
-
export declare const TsvRenderer: React.FC<BaseRendererProps>;
|
|
16
|
-
export declare const JsonlRenderer: React.FC<BaseRendererProps>;
|
|
17
|
-
export declare const MarkdownRenderer: React.FC<BaseRendererProps>;
|
|
18
|
-
export declare const HtmlRenderer: React.FC<BaseRendererProps>;
|
|
19
|
-
export declare const XmlRenderer: React.FC<BaseRendererProps>;
|
|
20
|
-
export declare const CodeRenderer: React.FC<BaseRendererProps & {
|
|
21
|
-
url: string;
|
|
22
|
-
}>;
|
|
23
|
-
export {};
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { default as React } from 'react';
|
|
2
|
-
interface MediaRendererProps {
|
|
3
|
-
url: string;
|
|
4
|
-
fileName?: string;
|
|
5
|
-
}
|
|
6
|
-
export declare const ImageRenderer: React.FC<MediaRendererProps>;
|
|
7
|
-
export declare const VideoRenderer: React.FC<MediaRendererProps>;
|
|
8
|
-
export declare const AudioRenderer: React.FC<MediaRendererProps>;
|
|
9
|
-
export {};
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import { default as React } from 'react';
|
|
2
|
-
interface PdfRendererProps {
|
|
3
|
-
pdfBlobUrl: string | null;
|
|
4
|
-
pdfLoading: boolean;
|
|
5
|
-
pdfError: string | null;
|
|
6
|
-
url: string;
|
|
7
|
-
fileName?: string;
|
|
8
|
-
page?: number;
|
|
9
|
-
}
|
|
10
|
-
export declare const PdfRenderer: React.FC<PdfRendererProps>;
|
|
11
|
-
export {};
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import { default as React } from 'react';
|
|
2
|
-
interface ZipFile {
|
|
3
|
-
name: string;
|
|
4
|
-
size: number;
|
|
5
|
-
isDirectory: boolean;
|
|
6
|
-
}
|
|
7
|
-
interface ZipFileContent {
|
|
8
|
-
name: string;
|
|
9
|
-
blobUrl: string;
|
|
10
|
-
type: string;
|
|
11
|
-
}
|
|
12
|
-
interface ZipRendererProps {
|
|
13
|
-
zipFiles: ZipFile[];
|
|
14
|
-
zipLoading: boolean;
|
|
15
|
-
zipError: string | null;
|
|
16
|
-
selectedZipFile: string | null;
|
|
17
|
-
zipFileContent: ZipFileContent | null;
|
|
18
|
-
onFileClick: (fileName: string) => Promise<void>;
|
|
19
|
-
url: string;
|
|
20
|
-
}
|
|
21
|
-
export declare const ZipRenderer: React.FC<ZipRendererProps>;
|
|
22
|
-
export {};
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* DocumentViewer 子组件导出
|
|
3
|
-
*/
|
|
4
|
-
export { ErrorAlert } from './ErrorAlert';
|
|
5
|
-
export { DownloadButton } from './DownloadButton';
|
|
6
|
-
export { TextRenderer, JsonRenderer, CsvRenderer, TsvRenderer, JsonlRenderer, MarkdownRenderer, HtmlRenderer, XmlRenderer, CodeRenderer, } from './FileRenderers';
|
|
7
|
-
export { ImageRenderer, VideoRenderer, AudioRenderer, } from './MediaRenderers';
|
|
8
|
-
export { ZipRenderer } from './ZipRenderer';
|
|
9
|
-
export { default as PDFViewer } from './PDFViewer';
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* DocumentViewer 组件常量配置
|
|
3
|
-
*/
|
|
4
|
-
export declare const MAX_FILE_SIZE: number;
|
|
5
|
-
export declare const MAX_DISPLAY_SIZE: number;
|
|
6
|
-
export declare const MAX_JSON_SIZE: number;
|
|
7
|
-
export declare const MAX_CSV_SIZE: number;
|
|
8
|
-
export declare const MAX_TSV_SIZE: number;
|
|
9
|
-
export declare const MAX_JSONL_SIZE: number;
|
|
10
|
-
export declare const MAX_MARKDOWN_SIZE: number;
|
|
11
|
-
export declare const MAX_XML_SIZE: number;
|
|
12
|
-
export declare const MAX_HIGHLIGHT_SIZE: number;
|
|
13
|
-
export declare const MAX_FALLBACK_SIZE: number;
|
|
14
|
-
export declare const MAX_ZIP_FILE_SIZE: number;
|
|
15
|
-
export declare const MAX_DISPLAY_LINES = 10000;
|
|
16
|
-
export declare const MAX_CSV_ROWS = 10000;
|
|
17
|
-
export declare const MAX_JSONL_LINES = 5000;
|
|
18
|
-
export declare const MAX_ZIP_FILES = 1000;
|
|
19
|
-
export declare const ZIP_CHUNK_SIZE: number;
|
|
20
|
-
export declare const ZIP_ENTRIES_TIMEOUT = 30000;
|
|
21
|
-
export declare const SAFE_FILE_TYPES: readonly ["text", "json", "csv", "tsv", "markdown", "html", "xml", "jsonl", "image", "pdf", "code"];
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
interface ZipFile {
|
|
2
|
-
name: string;
|
|
3
|
-
size: number;
|
|
4
|
-
isDirectory: boolean;
|
|
5
|
-
}
|
|
6
|
-
interface ZipFileContent {
|
|
7
|
-
name: string;
|
|
8
|
-
blobUrl: string;
|
|
9
|
-
type: string;
|
|
10
|
-
}
|
|
11
|
-
interface UseZipViewerResult {
|
|
12
|
-
zipFiles: ZipFile[];
|
|
13
|
-
zipLoading: boolean;
|
|
14
|
-
zipError: string | null;
|
|
15
|
-
selectedZipFile: string | null;
|
|
16
|
-
zipFileContent: ZipFileContent | null;
|
|
17
|
-
handleFileClick: (fileName: string) => Promise<void>;
|
|
18
|
-
setSelectedZipFile: (fileName: string | null) => void;
|
|
19
|
-
}
|
|
20
|
-
export declare const useZipViewer: (url: string) => UseZipViewerResult;
|
|
21
|
-
export {};
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import { CSSProperties, FC } from 'react';
|
|
2
|
-
export interface DocumentViewerProps {
|
|
3
|
-
url: string;
|
|
4
|
-
fileName?: string;
|
|
5
|
-
className?: string;
|
|
6
|
-
style?: CSSProperties;
|
|
7
|
-
showToolbar?: boolean;
|
|
8
|
-
page?: number;
|
|
9
|
-
}
|
|
10
|
-
declare const DocumentViewer: FC<DocumentViewerProps>;
|
|
11
|
-
export default DocumentViewer;
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* DocumentViewer 工具函数
|
|
3
|
-
*/
|
|
4
|
-
/**
|
|
5
|
-
* 格式化文件大小
|
|
6
|
-
*/
|
|
7
|
-
export declare const formatFileSize: (bytes: number) => string;
|
|
8
|
-
/**
|
|
9
|
-
* 检查服务器是否支持 HTTP Range 请求
|
|
10
|
-
*/
|
|
11
|
-
export declare const checkRangeSupport: (url: string) => Promise<{
|
|
12
|
-
supportsRange: boolean;
|
|
13
|
-
fileSize: number;
|
|
14
|
-
}>;
|
|
15
|
-
/**
|
|
16
|
-
* 获取文件大小
|
|
17
|
-
*/
|
|
18
|
-
export declare const getFileSize: (url: string) => Promise<number>;
|
|
19
|
-
/**
|
|
20
|
-
* 规范化 URL,兼容已编码和未编码的 URL
|
|
21
|
-
* 确保 URL 始终是正确编码的格式
|
|
22
|
-
*/
|
|
23
|
-
export declare const normalizeUrl: (url: string) => string;
|
package/dist/src/utils/file.d.ts
DELETED
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* 获取文件扩展名
|
|
3
|
-
* @param fileName 文件名
|
|
4
|
-
* @returns 文件扩展名(小写,不含点号)
|
|
5
|
-
*/
|
|
6
|
-
export declare const getFileExtension: (fileName: string) => string | undefined;
|
|
7
|
-
/**
|
|
8
|
-
* 文件类型枚举
|
|
9
|
-
*/
|
|
10
|
-
export type FileType = 'text' | 'json' | 'csv' | 'tsv' | 'markdown' | 'image' | 'video' | 'audio' | 'pdf' | 'office' | 'code' | 'html' | 'xml' | 'jsonl' | 'zip' | 'unknown';
|
|
11
|
-
/**
|
|
12
|
-
* 根据文件扩展名判断文件类型
|
|
13
|
-
* @param extension 文件扩展名(小写,不含点号)
|
|
14
|
-
* @returns 文件类型
|
|
15
|
-
*/
|
|
16
|
-
export declare const getFileType: (extension: string | undefined) => FileType;
|
package/dist/style.css
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
.storybook-button{font-family:Nunito Sans,Helvetica Neue,Helvetica,Arial,sans-serif;font-weight:700;border:0;border-radius:3em;cursor:pointer;display:inline-block;line-height:1}.storybook-button--primary{color:#fff;background-color:#027bf4}.storybook-button--secondary{color:#333;background-color:transparent;box-shadow:#00000026 0 0 0 1px inset}.storybook-button--small{font-size:12px;padding:10px 16px}.storybook-button--medium{font-size:14px;padding:11px 20px}.storybook-button--large{font-size:16px;padding:12px 24px}.g-expandable-pannel-wrap{top:0;right:0;bottom:0;left:0;z-index:999}.g-expandable-pannel-wrap .g-expandable-pannel-expand-bar{position:absolute;right:0;top:0;background-color:#222836;z-index:9999}.g-expandable-pannel-wrap .g-expandable-pannel-expand-bar.collapsed{position:absolute;top:0;right:0;z-index:9;width:40px;height:40px;display:flex;align-items:center;justify-content:center}.g-expandable-pannel-wrap .g-expandable-pannel-expand-bar.expaned{padding:0}.g-expandable-pannel-wrap .g-expandable-pannel-expand-bar.expaned .g-icon-btn{background-color:#0000}.g-expandable-pannel-wrap .g-expandable-pannel{width:100%;height:100%;border:.5px solid #313A4D}.g-expandable-pannel-wrap .g-expandable-pannel-header{position:absolute;right:0;top:0;z-index:9;padding-right:28px;height:28px;display:flex;flex-direction:row-reverse}.g-expandable-pannel-wrap .g-expandable-pannel-body{opacity:.85;width:100%;height:100%}.g-expandable-pannel-wrap .g-expandable-pannel-body .icon{width:16px;height:16px}.g-expandable-pannel-wrap .g-expandable-pannel.full{width:100%!important;height:100%!important;top:0;bottom:0;left:55px;right:55px;z-index:9}.g-expandable-pannel-wrap .g-expandable-pannel.hidden{top:0;right:-20000px;bottom:0;left:-20000px}.g-expandable-pannel-wrap .g-expandable-pannel.hidden+.bar-btn{position:absolute;right:0!important;background:rgba(58,63,76,.5);border-radius:20px 0 0 20px}.g-expandable-pannel-wrap .g-expandable-pannel.normal{height:250px;overflow:hidden;padding:0}.g-expandable-pannel-wrap .g-expandable-pannel.full+.bar-btn{top:0;right:55px;z-index:99}.g-expandable-pannel-wrap .g-expandable-pannel.full~.cover{display:block;position:absolute;width:100vw;height:100vh;top:0;left:0;background:#00000066}.g-expandable-pannel-wrap .g-expandable-pannel.hiddern~.cover{display:none}.g-expandable-pannel-wrap .g-expandable-pannel .minimap-menu-pannel{width:134px;background:#ffffff;border:1px solid #ececec;box-shadow:2px 2px 6px #c0c0c040;border-radius:4px;padding:6px 12px}.g-expandable-pannel-wrap .g-expandable-pannel .minimap-menu-pannel .item-row{width:100%;display:flex;height:32px;align-items:center}.g-expandable-pannel-wrap .g-expandable-pannel .minimap-menu-pannel .item-row img{width:16px;height:16px;margin:0 8px}.g-expandable-pannel-wrap .g-expandable-pannel .status{display:block}.g-expandable-pannel-wrap .g-expandable-pannel .status.success:before{display:inline-block;content:"";width:12px;height:12px;background-color:#52c41a}.g-expandable-pannel-wrap .g-expandable-pannel .status.error:before{display:inline-block;content:"";width:12px;height:12px;background-color:#ff4d4f}.g-expandable-pannel-wrap .g-expandable-pannel .pass-confirm-wrap{position:absolute}.g-icon-btn{height:28px;width:28px;line-height:28px;background-color:#222836;color:#b8c1d0;cursor:pointer;text-align:center;padding:0;border:none;font-size:16px;display:block}.g-icon-btn:hover{color:#fff;background:linear-gradient(180deg,#4e5b73 0%,#222836 100%);border-image:linear-gradient(180deg,#4e5b73 0%,#222836 100%),linear-gradient(180deg,#ffffff 16.67%,#d2d2d2 49.48%,#000000 73.44%,#e4e4e4 92.71%)}.g-icon-btn:disabled{color:#68707e;cursor:not-allowed;background:linear-gradient(180deg,#0a111d 0%,#222836 100%)}*{box-sizing:border-box}.image-map{position:relative;width:100%;height:100%;overflow:hidden;-webkit-user-select:none;user-select:none;display:flex;justify-content:center}.image-map .image-map-pannel{width:100%;height:100%;-webkit-user-select:none;user-select:none;display:flex;justify-content:center;align-items:center}.image-map .image-map-toolbar{position:absolute;width:auto;height:auto;bottom:12px;z-index:99;display:flex;align-items:center;gap:12px;background-color:#393939;padding:10px;border-radius:6px}.image-map .image-map-toolbar .zoom-controller{display:flex;height:100%;align-items:center;gap:12px;color:#fff}.image-map .image-map-toolbar .zoom-controller .g-icon-btn,.image-map .image-map-toolbar .zoom-controller .g-icon-btn button{background-color:unset;font-size:16px;border:.5px solid #6f6f6f;border-radius:2px;font-size:14px}.image-map .image-map-toolbar .zoom-controller .g-icon-btn .anticon,.image-map .image-map-toolbar .zoom-controller .g-icon-btn button .anticon{font-size:14px}.image-map .image-map-toolbar .zoom-controller.vertical{flex-direction:column}.image-map .image-map-toolbar .zoom-controller.vertical .g-icon-btn{background-color:red;margin-top:6px;border:none}.image-map .image-map-toolbar .zoom-controller.vertical .g-icon-btn .anticon{font-size:16px}.image-map .image-map-toolbar .zoom-controller.horizontal{flex-direction:row}.image-map .image-map-toolbar .line{width:1px;height:12px;border:.5px solid #e0e0e0}.image-map .image-map-toolbar .moveable-controller{background-color:unset;height:100%;border:.5px solid #6f6f6f;border-radius:2px}.image-map .image-map-toolbar .moveable-controller .moveable-controller-btn{position:relative;border:none;border-radius:2px;background-color:unset;padding:0;display:flex;height:100%}.image-map .image-map-toolbar .moveable-controller .moveable-controller-btn .btn-change{display:flex;align-items:center;color:#fff;gap:10px;height:100%;margin-inline-end:unset;padding:4px 8px}.image-map .image-map-toolbar .moveable-controller .moveable-controller-btn .btn-change svg{font-size:16px}.image-map .image-map-toolbar .moveable-controller .moveable-controller-btn .anticon{font-size:24px}.image-map .image-map-toolbar .moveable-controller .moveable-controller-btn.active{color:#fff}.image-map .image-map-toolbar .moveable-controller .moveable-controller-btn:hover{background:linear-gradient(180deg,#4e5b73 0%,#222836 100%)}.image-map .image-map-toolbar .editing-controller{display:flex;gap:12px;align-items:center;font-size:14px;font-weight:400;line-height:20px;letter-spacing:0px;text-align:left}.image-map .image-map-toolbar .editing-controller .ant-btn-default{border:.5px solid #6f6f6f;border-radius:2px;background-color:unset;color:#fff;padding:4px 8px}.image-map .image-map-toolbar .editing-controller .ant-btn-default:hover{background:linear-gradient(180deg,#4e5b73 0%,#222836 100%)}.image-map .image-map-toolbar .editing-controller .ant-btn-primary{border-radius:2px;background-color:#0532a6;border:.5px solid #6f6f6f;color:#fff;padding:4px 8px}.image-map .image-map-toolbar .editing-controller .ant-btn-primary:hover{background:#0949d2}.image-map .image-map-toolbar .editing-controller .ant-btn-primary .save-detail{display:flex;align-items:center;color:#fff;gap:10px;height:100%}.image-map .image-map-toolbar .editing-controller .ant-btn-primary .save-detail svg{font-size:16px}.pass-map{background:transparent}.pass-map .pass-area{position:absolute;background:rgba(255,77,79,.21);border:1px solid #00000000;z-index:1}.pass-map .pass-area-circle{border-radius:50%}.pass-map .pass-area__active{background:rgba(255,77,79,.25);border:1px solid #ff4d4f}.track-map{z-index:10;position:relative}.track-map .point{cursor:pointer}.track-map .bottom-action{position:fixed;left:50%;bottom:10px;transform:translate(-50%);z-index:1000;display:flex;justify-content:center;align-items:flex-end;padding-bottom:12px}.track-map .bottom-action .bottom-pannel{background:white;height:48px;background:rgba(255,255,255,.9);border:1px solid #f8f8f8;box-shadow:2px 2px 4px #c0c0c040;border-radius:4px;padding:0 12px}:where(.css-ed5zg0)[class^=ant-popconfirm],:where(.css-ed5zg0)[class*=" ant-popconfirm"]{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-size:14px;box-sizing:border-box}:where(.css-ed5zg0)[class^=ant-popconfirm]:before,:where(.css-ed5zg0)[class*=" ant-popconfirm"]:before,:where(.css-ed5zg0)[class^=ant-popconfirm]:after,:where(.css-ed5zg0)[class*=" ant-popconfirm"]:after{box-sizing:border-box}:where(.css-ed5zg0)[class^=ant-popconfirm] [class^=ant-popconfirm],:where(.css-ed5zg0)[class*=" ant-popconfirm"] [class^=ant-popconfirm],:where(.css-ed5zg0)[class^=ant-popconfirm] [class*=" ant-popconfirm"],:where(.css-ed5zg0)[class*=" ant-popconfirm"] [class*=" ant-popconfirm"]{box-sizing:border-box}:where(.css-ed5zg0)[class^=ant-popconfirm] [class^=ant-popconfirm]:before,:where(.css-ed5zg0)[class*=" ant-popconfirm"] [class^=ant-popconfirm]:before,:where(.css-ed5zg0)[class^=ant-popconfirm] [class*=" ant-popconfirm"]:before,:where(.css-ed5zg0)[class*=" ant-popconfirm"] [class*=" ant-popconfirm"]:before,:where(.css-ed5zg0)[class^=ant-popconfirm] [class^=ant-popconfirm]:after,:where(.css-ed5zg0)[class*=" ant-popconfirm"] [class^=ant-popconfirm]:after,:where(.css-ed5zg0)[class^=ant-popconfirm] [class*=" ant-popconfirm"]:after,:where(.css-ed5zg0)[class*=" ant-popconfirm"] [class*=" ant-popconfirm"]:after{box-sizing:border-box}:where(.css-ed5zg0).ant-popconfirm{z-index:1060}:where(.css-ed5zg0).ant-popconfirm .ant-popconfirm-inner-content{color:#000000e0}:where(.css-ed5zg0).ant-popconfirm .ant-popconfirm-message{position:relative;margin-bottom:8px;color:#000000e0;font-size:14px;display:flex;flex-wrap:nowrap;align-items:start}:where(.css-ed5zg0).ant-popconfirm .ant-popconfirm-message>.ant-popconfirm-message-icon .anticon{color:#faad14;font-size:14px;flex:none;line-height:1;padding-top:4px}:where(.css-ed5zg0).ant-popconfirm .ant-popconfirm-message-title{flex:auto;margin-inline-start:8px}:where(.css-ed5zg0).ant-popconfirm .ant-popconfirm-message-title-only{font-weight:600}:where(.css-ed5zg0).ant-popconfirm .ant-popconfirm-description{position:relative;margin-inline-start:22px;margin-bottom:8px;color:#000000e0;font-size:14px}:where(.css-ed5zg0).ant-popconfirm .ant-popconfirm-buttons{text-align:end}:where(.css-ed5zg0).ant-popconfirm .ant-popconfirm-buttons button{margin-inline-start:8px}:where(.css-ed5zg0)[class^=ant-popover],:where(.css-ed5zg0)[class*=" ant-popover"]{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-size:14px;box-sizing:border-box}:where(.css-ed5zg0)[class^=ant-popover]:before,:where(.css-ed5zg0)[class*=" ant-popover"]:before,:where(.css-ed5zg0)[class^=ant-popover]:after,:where(.css-ed5zg0)[class*=" ant-popover"]:after{box-sizing:border-box}:where(.css-ed5zg0)[class^=ant-popover] [class^=ant-popover],:where(.css-ed5zg0)[class*=" ant-popover"] [class^=ant-popover],:where(.css-ed5zg0)[class^=ant-popover] [class*=" ant-popover"],:where(.css-ed5zg0)[class*=" ant-popover"] [class*=" ant-popover"]{box-sizing:border-box}:where(.css-ed5zg0)[class^=ant-popover] [class^=ant-popover]:before,:where(.css-ed5zg0)[class*=" ant-popover"] [class^=ant-popover]:before,:where(.css-ed5zg0)[class^=ant-popover] [class*=" ant-popover"]:before,:where(.css-ed5zg0)[class*=" ant-popover"] [class*=" ant-popover"]:before,:where(.css-ed5zg0)[class^=ant-popover] [class^=ant-popover]:after,:where(.css-ed5zg0)[class*=" ant-popover"] [class^=ant-popover]:after,:where(.css-ed5zg0)[class^=ant-popover] [class*=" ant-popover"]:after,:where(.css-ed5zg0)[class*=" ant-popover"] [class*=" ant-popover"]:after{box-sizing:border-box}:where(.css-ed5zg0).ant-popover{box-sizing:border-box;margin:0;padding:0;color:#000000e0;font-size:14px;line-height:1.57142857;list-style:none;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";position:absolute;top:0;left:0;z-index:1030;font-weight:400;white-space:normal;text-align:start;cursor:auto;-webkit-user-select:text;user-select:text;--antd-arrow-background-color: #ffffff}:where(.css-ed5zg0).ant-popover-rtl{direction:rtl}:where(.css-ed5zg0).ant-popover-hidden{display:none}:where(.css-ed5zg0).ant-popover .ant-popover-content{position:relative}:where(.css-ed5zg0).ant-popover .ant-popover-inner{background-color:#fff;background-clip:padding-box;border-radius:8px;box-shadow:0 6px 16px #00000014,0 3px 6px -4px #0000001f,0 9px 28px 8px #0000000d;padding:12px}:where(.css-ed5zg0).ant-popover .ant-popover-title{min-width:177px;margin-bottom:8px;color:#000000e0;font-weight:600}:where(.css-ed5zg0).ant-popover .ant-popover-inner-content{color:#000000e0;padding:0}:where(.css-ed5zg0).ant-popover .ant-popover-arrow{position:absolute;z-index:1;display:block;pointer-events:none;width:16px;height:16px;overflow:hidden;border:0}:where(.css-ed5zg0).ant-popover .ant-popover-arrow:before{position:absolute;bottom:0;inset-inline-start:0;width:16px;height:8px;background:var(--antd-arrow-background-color);clip-path:polygon(1.65685425px 100%,50% 1.65685425px,14.34314575px 100%,1.65685425px 100%);clip-path:path("M 0 8 A 4 4 0 0 0 2.82842712474619 6.82842712474619 L 6.585786437626905 3.0710678118654755 A 2 2 0 0 1 9.414213562373096 3.0710678118654755 L 13.17157287525381 6.82842712474619 A 4 4 0 0 0 16 8 Z");content:""}:where(.css-ed5zg0).ant-popover .ant-popover-arrow:after{content:"";position:absolute;width:8.97056275px;height:8.97056275px;bottom:0;inset-inline:0;margin:auto;border-radius:0 0 2px;transform:translateY(50%) rotate(-135deg);box-shadow:2px 2px 5px #0000000d;z-index:0;background:transparent}:where(.css-ed5zg0).ant-popover .ant-popover-arrow:before{background:var(--antd-arrow-background-color)}:where(.css-ed5zg0).ant-popover-placement-top .ant-popover-arrow,:where(.css-ed5zg0).ant-popover-placement-topLeft .ant-popover-arrow,:where(.css-ed5zg0).ant-popover-placement-topRight .ant-popover-arrow{bottom:0;transform:translateY(100%) rotate(180deg)}:where(.css-ed5zg0).ant-popover-placement-top .ant-popover-arrow{left:50%;transform:translate(-50%) translateY(100%) rotate(180deg)}:where(.css-ed5zg0).ant-popover-placement-topLeft .ant-popover-arrow{left:12px}:where(.css-ed5zg0).ant-popover-placement-topRight .ant-popover-arrow{right:12px}:where(.css-ed5zg0).ant-popover-placement-bottom .ant-popover-arrow,:where(.css-ed5zg0).ant-popover-placement-bottomLeft .ant-popover-arrow,:where(.css-ed5zg0).ant-popover-placement-bottomRight .ant-popover-arrow{top:0;transform:translateY(-100%)}:where(.css-ed5zg0).ant-popover-placement-bottom .ant-popover-arrow{left:50%;transform:translate(-50%) translateY(-100%)}:where(.css-ed5zg0).ant-popover-placement-bottomLeft .ant-popover-arrow{left:12px}:where(.css-ed5zg0).ant-popover-placement-bottomRight .ant-popover-arrow{right:12px}:where(.css-ed5zg0).ant-popover-placement-left .ant-popover-arrow,:where(.css-ed5zg0).ant-popover-placement-leftTop .ant-popover-arrow,:where(.css-ed5zg0).ant-popover-placement-leftBottom .ant-popover-arrow{right:0;transform:translate(100%) rotate(90deg)}:where(.css-ed5zg0).ant-popover-placement-left .ant-popover-arrow{top:50%;transform:translateY(-50%) translate(100%) rotate(90deg)}:where(.css-ed5zg0).ant-popover-placement-leftTop .ant-popover-arrow{top:12px}:where(.css-ed5zg0).ant-popover-placement-leftBottom .ant-popover-arrow{bottom:12px}:where(.css-ed5zg0).ant-popover-placement-right .ant-popover-arrow,:where(.css-ed5zg0).ant-popover-placement-rightTop .ant-popover-arrow,:where(.css-ed5zg0).ant-popover-placement-rightBottom .ant-popover-arrow{left:0;transform:translate(-100%) rotate(-90deg)}:where(.css-ed5zg0).ant-popover-placement-right .ant-popover-arrow{top:50%;transform:translateY(-50%) translate(-100%) rotate(-90deg)}:where(.css-ed5zg0).ant-popover-placement-rightTop .ant-popover-arrow{top:12px}:where(.css-ed5zg0).ant-popover-placement-rightBottom .ant-popover-arrow{bottom:12px}:where(.css-ed5zg0).ant-popover-pure{position:relative;max-width:none;margin:16px;display:inline-block}:where(.css-ed5zg0).ant-popover-pure .ant-popover-content{display:inline-block}:where(.css-ed5zg0).ant-popover.ant-popover-blue{--antd-arrow-background-color: #1677ff}:where(.css-ed5zg0).ant-popover.ant-popover-blue .ant-popover-inner{background-color:#1677ff}:where(.css-ed5zg0).ant-popover.ant-popover-blue .ant-popover-arrow{background:transparent}:where(.css-ed5zg0).ant-popover.ant-popover-purple{--antd-arrow-background-color: #722ed1}:where(.css-ed5zg0).ant-popover.ant-popover-purple .ant-popover-inner{background-color:#722ed1}:where(.css-ed5zg0).ant-popover.ant-popover-purple .ant-popover-arrow{background:transparent}:where(.css-ed5zg0).ant-popover.ant-popover-cyan{--antd-arrow-background-color: #13c2c2}:where(.css-ed5zg0).ant-popover.ant-popover-cyan .ant-popover-inner{background-color:#13c2c2}:where(.css-ed5zg0).ant-popover.ant-popover-cyan .ant-popover-arrow{background:transparent}:where(.css-ed5zg0).ant-popover.ant-popover-green{--antd-arrow-background-color: #52c41a}:where(.css-ed5zg0).ant-popover.ant-popover-green .ant-popover-inner{background-color:#52c41a}:where(.css-ed5zg0).ant-popover.ant-popover-green .ant-popover-arrow{background:transparent}:where(.css-ed5zg0).ant-popover.ant-popover-magenta{--antd-arrow-background-color: #eb2f96}:where(.css-ed5zg0).ant-popover.ant-popover-magenta .ant-popover-inner{background-color:#eb2f96}:where(.css-ed5zg0).ant-popover.ant-popover-magenta .ant-popover-arrow{background:transparent}:where(.css-ed5zg0).ant-popover.ant-popover-pink{--antd-arrow-background-color: #eb2f96}:where(.css-ed5zg0).ant-popover.ant-popover-pink .ant-popover-inner{background-color:#eb2f96}:where(.css-ed5zg0).ant-popover.ant-popover-pink .ant-popover-arrow{background:transparent}:where(.css-ed5zg0).ant-popover.ant-popover-red{--antd-arrow-background-color: #f5222d}:where(.css-ed5zg0).ant-popover.ant-popover-red .ant-popover-inner{background-color:#f5222d}:where(.css-ed5zg0).ant-popover.ant-popover-red .ant-popover-arrow{background:transparent}:where(.css-ed5zg0).ant-popover.ant-popover-orange{--antd-arrow-background-color: #fa8c16}:where(.css-ed5zg0).ant-popover.ant-popover-orange .ant-popover-inner{background-color:#fa8c16}:where(.css-ed5zg0).ant-popover.ant-popover-orange .ant-popover-arrow{background:transparent}:where(.css-ed5zg0).ant-popover.ant-popover-yellow{--antd-arrow-background-color: #fadb14}:where(.css-ed5zg0).ant-popover.ant-popover-yellow .ant-popover-inner{background-color:#fadb14}:where(.css-ed5zg0).ant-popover.ant-popover-yellow .ant-popover-arrow{background:transparent}:where(.css-ed5zg0).ant-popover.ant-popover-volcano{--antd-arrow-background-color: #fa541c}:where(.css-ed5zg0).ant-popover.ant-popover-volcano .ant-popover-inner{background-color:#fa541c}:where(.css-ed5zg0).ant-popover.ant-popover-volcano .ant-popover-arrow{background:transparent}:where(.css-ed5zg0).ant-popover.ant-popover-geekblue{--antd-arrow-background-color: #2f54eb}:where(.css-ed5zg0).ant-popover.ant-popover-geekblue .ant-popover-inner{background-color:#2f54eb}:where(.css-ed5zg0).ant-popover.ant-popover-geekblue .ant-popover-arrow{background:transparent}:where(.css-ed5zg0).ant-popover.ant-popover-lime{--antd-arrow-background-color: #a0d911}:where(.css-ed5zg0).ant-popover.ant-popover-lime .ant-popover-inner{background-color:#a0d911}:where(.css-ed5zg0).ant-popover.ant-popover-lime .ant-popover-arrow{background:transparent}:where(.css-ed5zg0).ant-popover.ant-popover-gold{--antd-arrow-background-color: #faad14}:where(.css-ed5zg0).ant-popover.ant-popover-gold .ant-popover-inner{background-color:#faad14}:where(.css-ed5zg0).ant-popover.ant-popover-gold .ant-popover-arrow{background:transparent}:where(.css-ed5zg0).ant-zoom-big-enter,:where(.css-ed5zg0).ant-zoom-big-appear{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}:where(.css-ed5zg0).ant-zoom-big-leave{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}:where(.css-ed5zg0).ant-zoom-big-enter.ant-zoom-big-enter-active,:where(.css-ed5zg0).ant-zoom-big-appear.ant-zoom-big-appear-active{animation-name:css-ed5zg0-antZoomBigIn;animation-play-state:running}:where(.css-ed5zg0).ant-zoom-big-leave.ant-zoom-big-leave-active{animation-name:css-ed5zg0-antZoomBigOut;animation-play-state:running;pointer-events:none}:where(.css-ed5zg0).ant-zoom-big-enter,:where(.css-ed5zg0).ant-zoom-big-appear{transform:scale(0);opacity:0;animation-timing-function:cubic-bezier(.08,.82,.17,1)}:where(.css-ed5zg0).ant-zoom-big-enter-prepare,:where(.css-ed5zg0).ant-zoom-big-appear-prepare{transform:none}:where(.css-ed5zg0).ant-zoom-big-leave{animation-timing-function:cubic-bezier(.78,.14,.15,.86)}.track-map .tooltip-container{pointer-events:none!important}.track-map .tooltip-container>*{pointer-events:initial}.g-expandable-pannel-wrap.collapsed .tooltip-container{display:none}.g-rc-tooltip{position:absolute!important}.g-rc-tooltip .g-rc-tooltip-arrow{height:10px}.g-mouse-tip{display:inline-flex;justify-content:center;align-items:center;gap:4px;box-shadow:0 1px 10px #0000000d,0 4px 5px #00000014,0 2px 4px -1px #0000001f;border-radius:4px;background:#000;position:fixed;z-index:2000;padding:8px 12px}.g-mouse-tip-content{font-size:12px;font-style:normal;font-weight:400;color:#fff}
|