@hkyhy/marsun-components-core 0.1.52 → 0.1.53
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/README.md +23 -15
- package/dist/agent-hub.d.ts +11 -0
- package/dist/agent-hub.js +144 -0
- package/dist/agent-hub.js.map +1 -0
- package/dist/components/AgentHub/Chat/Action/CreateButton.js +3 -3
- package/dist/components/AgentHub/Chat/Action/ManageActionButtons.js +4 -4
- package/dist/components/AgentHub/Chat/Action/SessionActionButtons.js +4 -4
- package/dist/components/AgentHub/Chat/Detail/ChatFollowUpSuggestions/index.js +29 -27
- package/dist/components/AgentHub/Chat/Detail/ChatFollowUpSuggestions/index.js.map +1 -1
- package/dist/components/AgentHub/Chat/Detail/ChatInput/index.js +19 -18
- package/dist/components/AgentHub/Chat/Detail/ChatInput/index.js.map +1 -1
- package/dist/components/AgentHub/Chat/Detail/CitationPanel/index.js +18 -17
- package/dist/components/AgentHub/Chat/Detail/CitationPanel/index.js.map +1 -1
- package/dist/components/AgentHub/Chat/Detail/MessageActions/index.js +23 -19
- package/dist/components/AgentHub/Chat/Detail/MessageActions/index.js.map +1 -1
- package/dist/components/AgentHub/Chat/Detail/MessageItem/index.js +23 -21
- package/dist/components/AgentHub/Chat/Detail/MessageItem/index.js.map +1 -1
- package/dist/components/AgentHub/Chat/List/ChatCard/index.js +7 -7
- package/dist/components/AgentHub/Chat/List/SessionSidebar/index.js +19 -17
- package/dist/components/AgentHub/Chat/List/SessionSidebar/index.js.map +1 -1
- package/dist/components/AgentHub/KnowledgeBase/Action/CreateButton.js +3 -3
- package/dist/components/AgentHub/KnowledgeBase/Action/ManageActionButtons.js +1 -1
- package/dist/components/AgentHub/KnowledgeBase/Detail/DocumentTable/index.js +16 -15
- package/dist/components/AgentHub/KnowledgeBase/Detail/DocumentTable/index.js.map +1 -1
- package/dist/components/AgentHub/KnowledgeBase/Detail/ParseStatusTag/index.js +7 -7
- package/dist/components/AgentHub/KnowledgeBase/List/KnowledgeCard/index.js +8 -8
- package/dist/components/AgentHub/Report/Detail/ReportHtmlPreview/index.js +1 -1
- package/dist/components/Auth/UserProfileCard/UserProfileCard.js +7 -7
- package/dist/components/File/FileItem/index.js +22 -20
- package/dist/components/File/FileItem/index.js.map +1 -1
- package/dist/components/File/FilePreview/index.js +11 -11
- package/dist/components/File/fileDisplay.js +41 -36
- package/dist/components/File/fileDisplay.js.map +1 -1
- package/dist/components/Filter/CommonFilter/index.js +20 -18
- package/dist/components/Filter/CommonFilter/index.js.map +1 -1
- package/dist/components/Filter/FilterSelect/index.js +90 -89
- package/dist/components/Filter/FilterSelect/index.js.map +1 -1
- package/dist/components/Filter/FilterTreeSelect/index.js +51 -48
- package/dist/components/Filter/FilterTreeSelect/index.js.map +1 -1
- package/dist/components/Filter/FilterTrigger/index.js +13 -11
- package/dist/components/Filter/FilterTrigger/index.js.map +1 -1
- package/dist/components/Form/PersonOptionRow/index.js +4 -4
- package/dist/components/Icons/ArrowLeft.d.ts +1 -0
- package/dist/components/Icons/ArrowLeft.js +7 -0
- package/dist/components/Icons/ArrowLeft.js.map +1 -0
- package/dist/components/Icons/ArrowLeftRight.d.ts +1 -0
- package/dist/components/Icons/ArrowLeftRight.js +7 -0
- package/dist/components/Icons/ArrowLeftRight.js.map +1 -0
- package/dist/components/Icons/BarChart3.d.ts +1 -0
- package/dist/components/Icons/BarChart3.js +7 -0
- package/dist/components/Icons/BarChart3.js.map +1 -0
- package/dist/components/Icons/Bell.d.ts +1 -0
- package/dist/components/Icons/Bell.js +7 -0
- package/dist/components/Icons/Bell.js.map +1 -0
- package/dist/components/Icons/BookOpen.d.ts +1 -0
- package/dist/components/Icons/BookOpen.js +7 -0
- package/dist/components/Icons/BookOpen.js.map +1 -0
- package/dist/components/Icons/Bot.d.ts +1 -0
- package/dist/components/Icons/Bot.js +7 -0
- package/dist/components/Icons/Bot.js.map +1 -0
- package/dist/components/Icons/Check.d.ts +1 -0
- package/dist/components/Icons/Check.js +7 -0
- package/dist/components/Icons/Check.js.map +1 -0
- package/dist/components/Icons/ChevronDown.d.ts +1 -0
- package/dist/components/Icons/ChevronDown.js +7 -0
- package/dist/components/Icons/ChevronDown.js.map +1 -0
- package/dist/components/Icons/ChevronLeft.d.ts +1 -0
- package/dist/components/Icons/ChevronLeft.js +7 -0
- package/dist/components/Icons/ChevronLeft.js.map +1 -0
- package/dist/components/Icons/ChevronRight.d.ts +1 -0
- package/dist/components/Icons/ChevronRight.js +7 -0
- package/dist/components/Icons/ChevronRight.js.map +1 -0
- package/dist/components/Icons/ChevronUp.d.ts +1 -0
- package/dist/components/Icons/ChevronUp.js +7 -0
- package/dist/components/Icons/ChevronUp.js.map +1 -0
- package/dist/components/Icons/CircleAlert.d.ts +1 -0
- package/dist/components/Icons/CircleAlert.js +7 -0
- package/dist/components/Icons/CircleAlert.js.map +1 -0
- package/dist/components/Icons/CircleCheck.d.ts +1 -0
- package/dist/components/Icons/CircleCheck.js +7 -0
- package/dist/components/Icons/CircleCheck.js.map +1 -0
- package/dist/components/Icons/CircleHelp.d.ts +1 -0
- package/dist/components/Icons/CircleHelp.js +7 -0
- package/dist/components/Icons/CircleHelp.js.map +1 -0
- package/dist/components/Icons/CirclePlay.d.ts +1 -0
- package/dist/components/Icons/CirclePlay.js +7 -0
- package/dist/components/Icons/CirclePlay.js.map +1 -0
- package/dist/components/Icons/CircleX.d.ts +1 -0
- package/dist/components/Icons/CircleX.js +7 -0
- package/dist/components/Icons/CircleX.js.map +1 -0
- package/dist/components/Icons/ClipboardCheck.d.ts +1 -0
- package/dist/components/Icons/ClipboardCheck.js +7 -0
- package/dist/components/Icons/ClipboardCheck.js.map +1 -0
- package/dist/components/Icons/Clock.d.ts +1 -0
- package/dist/components/Icons/Clock.js +7 -0
- package/dist/components/Icons/Clock.js.map +1 -0
- package/dist/components/Icons/CloudDownload.d.ts +1 -0
- package/dist/components/Icons/CloudDownload.js +7 -0
- package/dist/components/Icons/CloudDownload.js.map +1 -0
- package/dist/components/Icons/CloudUpload.d.ts +1 -0
- package/dist/components/Icons/CloudUpload.js +7 -0
- package/dist/components/Icons/CloudUpload.js.map +1 -0
- package/dist/components/Icons/Code.d.ts +1 -0
- package/dist/components/Icons/Code.js +7 -0
- package/dist/components/Icons/Code.js.map +1 -0
- package/dist/components/Icons/Copy.d.ts +1 -0
- package/dist/components/Icons/Copy.js +7 -0
- package/dist/components/Icons/Copy.js.map +1 -0
- package/dist/components/Icons/Crown.d.ts +1 -0
- package/dist/components/Icons/Crown.js +7 -0
- package/dist/components/Icons/Crown.js.map +1 -0
- package/dist/components/Icons/Database.d.ts +1 -0
- package/dist/components/Icons/Database.js +7 -0
- package/dist/components/Icons/Database.js.map +1 -0
- package/dist/components/Icons/Download.d.ts +1 -0
- package/dist/components/Icons/Download.js +7 -0
- package/dist/components/Icons/Download.js.map +1 -0
- package/dist/components/Icons/Eye.d.ts +1 -0
- package/dist/components/Icons/Eye.js +7 -0
- package/dist/components/Icons/Eye.js.map +1 -0
- package/dist/components/Icons/EyeOff.d.ts +1 -0
- package/dist/components/Icons/EyeOff.js +7 -0
- package/dist/components/Icons/EyeOff.js.map +1 -0
- package/dist/components/Icons/File.d.ts +1 -0
- package/dist/components/Icons/File.js +7 -0
- package/dist/components/Icons/File.js.map +1 -0
- package/dist/components/Icons/FileArchive.d.ts +1 -0
- package/dist/components/Icons/FileArchive.js +7 -0
- package/dist/components/Icons/FileArchive.js.map +1 -0
- package/dist/components/Icons/FileImage.d.ts +1 -0
- package/dist/components/Icons/FileImage.js +7 -0
- package/dist/components/Icons/FileImage.js.map +1 -0
- package/dist/components/Icons/FileSpreadsheet.d.ts +1 -0
- package/dist/components/Icons/FileSpreadsheet.js +7 -0
- package/dist/components/Icons/FileSpreadsheet.js.map +1 -0
- package/dist/components/Icons/FileText.d.ts +1 -0
- package/dist/components/Icons/FileText.js +7 -0
- package/dist/components/Icons/FileText.js.map +1 -0
- package/dist/components/Icons/Flag.d.ts +1 -0
- package/dist/components/Icons/Flag.js +7 -0
- package/dist/components/Icons/Flag.js.map +1 -0
- package/dist/components/Icons/Flame.d.ts +1 -0
- package/dist/components/Icons/Flame.js +7 -0
- package/dist/components/Icons/Flame.js.map +1 -0
- package/dist/components/Icons/Folder.d.ts +1 -0
- package/dist/components/Icons/Folder.js +7 -0
- package/dist/components/Icons/Folder.js.map +1 -0
- package/dist/components/Icons/FolderOpen.d.ts +1 -0
- package/dist/components/Icons/FolderOpen.js +7 -0
- package/dist/components/Icons/FolderOpen.js.map +1 -0
- package/dist/components/Icons/Hash.d.ts +1 -0
- package/dist/components/Icons/Hash.js +7 -0
- package/dist/components/Icons/Hash.js.map +1 -0
- package/dist/components/Icons/House.d.ts +1 -0
- package/dist/components/Icons/House.js +7 -0
- package/dist/components/Icons/House.js.map +1 -0
- package/dist/components/Icons/Import.d.ts +1 -0
- package/dist/components/Icons/Import.js +7 -0
- package/dist/components/Icons/Import.js.map +1 -0
- package/dist/components/Icons/Inbox.d.ts +1 -0
- package/dist/components/Icons/Inbox.js +7 -0
- package/dist/components/Icons/Inbox.js.map +1 -0
- package/dist/components/Icons/Info.d.ts +1 -0
- package/dist/components/Icons/Info.js +7 -0
- package/dist/components/Icons/Info.js.map +1 -0
- package/dist/components/Icons/LayoutDashboard.d.ts +1 -0
- package/dist/components/Icons/LayoutDashboard.js +7 -0
- package/dist/components/Icons/LayoutDashboard.js.map +1 -0
- package/dist/components/Icons/LayoutGrid.d.ts +1 -0
- package/dist/components/Icons/LayoutGrid.js +7 -0
- package/dist/components/Icons/LayoutGrid.js.map +1 -0
- package/dist/components/Icons/ListTodo.d.ts +1 -0
- package/dist/components/Icons/ListTodo.js +7 -0
- package/dist/components/Icons/ListTodo.js.map +1 -0
- package/dist/components/Icons/Loader2.d.ts +1 -0
- package/dist/components/Icons/Loader2.js +7 -0
- package/dist/components/Icons/Loader2.js.map +1 -0
- package/dist/components/Icons/Lock.d.ts +1 -0
- package/dist/components/Icons/Lock.js +7 -0
- package/dist/components/Icons/Lock.js.map +1 -0
- package/dist/components/Icons/LogOut.d.ts +1 -0
- package/dist/components/Icons/LogOut.js +7 -0
- package/dist/components/Icons/LogOut.js.map +1 -0
- package/dist/components/Icons/Maximize2.d.ts +1 -0
- package/dist/components/Icons/Maximize2.js +7 -0
- package/dist/components/Icons/Maximize2.js.map +1 -0
- package/dist/components/Icons/MessageCircle.d.ts +1 -0
- package/dist/components/Icons/MessageCircle.js +7 -0
- package/dist/components/Icons/MessageCircle.js.map +1 -0
- package/dist/components/Icons/MessageSquare.d.ts +1 -0
- package/dist/components/Icons/MessageSquare.js +7 -0
- package/dist/components/Icons/MessageSquare.js.map +1 -0
- package/dist/components/Icons/Minimize2.d.ts +1 -0
- package/dist/components/Icons/Minimize2.js +7 -0
- package/dist/components/Icons/Minimize2.js.map +1 -0
- package/dist/components/Icons/PanelLeftClose.d.ts +1 -0
- package/dist/components/Icons/PanelLeftClose.js +7 -0
- package/dist/components/Icons/PanelLeftClose.js.map +1 -0
- package/dist/components/Icons/PanelLeftOpen.d.ts +1 -0
- package/dist/components/Icons/PanelLeftOpen.js +7 -0
- package/dist/components/Icons/PanelLeftOpen.js.map +1 -0
- package/dist/components/Icons/Pause.d.ts +1 -0
- package/dist/components/Icons/Pause.js +7 -0
- package/dist/components/Icons/Pause.js.map +1 -0
- package/dist/components/Icons/Pencil.d.ts +1 -0
- package/dist/components/Icons/Pencil.js +7 -0
- package/dist/components/Icons/Pencil.js.map +1 -0
- package/dist/components/Icons/Plus.d.ts +1 -0
- package/dist/components/Icons/Plus.js +7 -0
- package/dist/components/Icons/Plus.js.map +1 -0
- package/dist/components/Icons/Presentation.d.ts +1 -0
- package/dist/components/Icons/Presentation.js +7 -0
- package/dist/components/Icons/Presentation.js.map +1 -0
- package/dist/components/Icons/RefreshCw.d.ts +1 -0
- package/dist/components/Icons/RefreshCw.js +7 -0
- package/dist/components/Icons/RefreshCw.js.map +1 -0
- package/dist/components/Icons/RotateCw.d.ts +1 -0
- package/dist/components/Icons/RotateCw.js +7 -0
- package/dist/components/Icons/RotateCw.js.map +1 -0
- package/dist/components/Icons/Send.d.ts +1 -0
- package/dist/components/Icons/Send.js +7 -0
- package/dist/components/Icons/Send.js.map +1 -0
- package/dist/components/Icons/Settings.d.ts +1 -0
- package/dist/components/Icons/Settings.js +7 -0
- package/dist/components/Icons/Settings.js.map +1 -0
- package/dist/components/Icons/Shield.d.ts +1 -0
- package/dist/components/Icons/Shield.js +7 -0
- package/dist/components/Icons/Shield.js.map +1 -0
- package/dist/components/Icons/ShieldCheck.d.ts +1 -0
- package/dist/components/Icons/ShieldCheck.js +7 -0
- package/dist/components/Icons/ShieldCheck.js.map +1 -0
- package/dist/components/Icons/SlidersHorizontal.d.ts +1 -0
- package/dist/components/Icons/SlidersHorizontal.js +7 -0
- package/dist/components/Icons/SlidersHorizontal.js.map +1 -0
- package/dist/components/Icons/Square.d.ts +1 -0
- package/dist/components/Icons/Square.js +7 -0
- package/dist/components/Icons/Square.js.map +1 -0
- package/dist/components/Icons/Star.d.ts +1 -0
- package/dist/components/Icons/Star.js +7 -0
- package/dist/components/Icons/Star.js.map +1 -0
- package/dist/components/Icons/ThumbsDown.d.ts +1 -0
- package/dist/components/Icons/ThumbsDown.js +7 -0
- package/dist/components/Icons/ThumbsDown.js.map +1 -0
- package/dist/components/Icons/ThumbsUp.d.ts +1 -0
- package/dist/components/Icons/ThumbsUp.js +7 -0
- package/dist/components/Icons/ThumbsUp.js.map +1 -0
- package/dist/components/Icons/Trash2.d.ts +1 -0
- package/dist/components/Icons/Trash2.js +7 -0
- package/dist/components/Icons/Trash2.js.map +1 -0
- package/dist/components/Icons/Trophy.d.ts +1 -0
- package/dist/components/Icons/Trophy.js +7 -0
- package/dist/components/Icons/Trophy.js.map +1 -0
- package/dist/components/Icons/Undo2.d.ts +1 -0
- package/dist/components/Icons/Undo2.js +7 -0
- package/dist/components/Icons/Undo2.js.map +1 -0
- package/dist/components/Icons/Upload.d.ts +1 -0
- package/dist/components/Icons/Upload.js +7 -0
- package/dist/components/Icons/Upload.js.map +1 -0
- package/dist/components/Icons/User.d.ts +1 -0
- package/dist/components/Icons/User.js +7 -0
- package/dist/components/Icons/User.js.map +1 -0
- package/dist/components/Icons/UserPlus.d.ts +1 -0
- package/dist/components/Icons/UserPlus.js +7 -0
- package/dist/components/Icons/UserPlus.js.map +1 -0
- package/dist/components/Icons/UserRoundCog.d.ts +1 -0
- package/dist/components/Icons/UserRoundCog.js +7 -0
- package/dist/components/Icons/UserRoundCog.js.map +1 -0
- package/dist/components/Icons/Users.d.ts +1 -0
- package/dist/components/Icons/Users.js +7 -0
- package/dist/components/Icons/Users.js.map +1 -0
- package/dist/components/Icons/X.d.ts +1 -0
- package/dist/components/Icons/X.js +7 -0
- package/dist/components/Icons/X.js.map +1 -0
- package/dist/components/Icons/createIcon.d.ts +9 -0
- package/dist/components/Icons/createIcon.js +32 -0
- package/dist/components/Icons/createIcon.js.map +1 -0
- package/dist/components/Icons/index.d.ts +80 -90
- package/dist/components/Icons/registry.d.ts +6 -0
- package/dist/components/Icons/registry.js +239 -0
- package/dist/components/Icons/registry.js.map +1 -0
- package/dist/components/InteractiveBlock/InteractiveBlock.js +6 -6
- package/dist/components/Layout/AgentAppShell/AgentAppShell.js +24 -23
- package/dist/components/Layout/AgentAppShell/AgentAppShell.js.map +1 -1
- package/dist/components/Layout/PageHeaderLayout/index.js +7 -7
- package/dist/components/Modal/Modal/index.js +8 -8
- package/dist/components/Modal/StepModal/index.js +9 -9
- package/dist/components/OrgTree/OrgTree.js +41 -39
- package/dist/components/OrgTree/OrgTree.js.map +1 -1
- package/dist/components/StateBar/StateBar.js +4 -4
- package/dist/components/Table/ColumnConfigPanel.js +13 -10
- package/dist/components/Table/ColumnConfigPanel.js.map +1 -1
- package/dist/components/Table/Table.js +7 -7
- package/dist/components/Tour/AppTour/index.js +10 -10
- package/dist/components/Upload/index.js +76 -72
- package/dist/components/Upload/index.js.map +1 -1
- package/dist/file.d.ts +5 -0
- package/dist/file.js +24 -0
- package/dist/file.js.map +1 -0
- package/dist/index.d.ts +3 -1
- package/dist/index.js +615 -537
- package/dist/index.js.map +1 -1
- package/dist/llm.d.ts +5 -0
- package/dist/llm.js +8 -0
- package/dist/llm.js.map +1 -0
- package/dist/marsun-components-core.css +1 -1
- package/dist/styles/global.css +1 -1
- package/package.json +15 -5
- package/dist/components/Icons/index.js +0 -268
- package/dist/components/Icons/index.js.map +0 -1
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { jsxs as o, Fragment as y, jsx as i } from "react/jsx-runtime";
|
|
2
2
|
import { formatFileSize as F } from "../../../utils/format.js";
|
|
3
|
-
import
|
|
4
|
-
import g from "
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import
|
|
8
|
-
import k from "./FilePreviewContent.js";
|
|
3
|
+
import N from "../../Tag/SemanticTag.js";
|
|
4
|
+
import { Button as g } from "antd";
|
|
5
|
+
import { normalizeFileDisplayItem as T, getFileTypeName as b, getFileIcon as z } from "../fileDisplay.js";
|
|
6
|
+
import { getPreviewKind as C, getFileTypeTagColor as P } from "../previewKind.js";
|
|
7
|
+
import U from "./FilePreviewContent.js";
|
|
9
8
|
import r from "./style.module.scss.js";
|
|
10
9
|
import t from "classnames";
|
|
10
|
+
import { CloudDownload as k } from "../../Icons/CloudDownload.js";
|
|
11
11
|
function x(l, n) {
|
|
12
12
|
return n ?? l.url ?? l.thumbnailUrl;
|
|
13
13
|
}
|
|
@@ -20,7 +20,7 @@ const E = ({
|
|
|
20
20
|
title: d,
|
|
21
21
|
extra: f
|
|
22
22
|
}) => {
|
|
23
|
-
const e =
|
|
23
|
+
const e = T(l), s = x(e, n), m = p ?? s, v = !!(a || m), w = C(e), h = b(e.name, e.mimeType), u = () => {
|
|
24
24
|
if (a) {
|
|
25
25
|
a(e);
|
|
26
26
|
return;
|
|
@@ -31,17 +31,17 @@ const E = ({
|
|
|
31
31
|
/* @__PURE__ */ o("div", { className: t("file-preview-header", r["file-preview-header"]), children: [
|
|
32
32
|
d ?? /* @__PURE__ */ o(y, { children: [
|
|
33
33
|
/* @__PURE__ */ o("div", { className: r["file-preview-info"], children: [
|
|
34
|
-
/* @__PURE__ */ i("span", { className: r["file-preview-icon"], children:
|
|
34
|
+
/* @__PURE__ */ i("span", { className: r["file-preview-icon"], children: z(e.name, e.mimeType) }),
|
|
35
35
|
/* @__PURE__ */ i("span", { className: r["file-preview-name"], title: e.name, children: e.name }),
|
|
36
|
-
/* @__PURE__ */ i(
|
|
36
|
+
/* @__PURE__ */ i(N, { color: P(w), children: h }),
|
|
37
37
|
e.size != null && /* @__PURE__ */ i("span", { className: r["file-preview-size"], children: F(e.size) })
|
|
38
38
|
] }),
|
|
39
|
-
v && /* @__PURE__ */ i(
|
|
39
|
+
v && /* @__PURE__ */ i(g, { type: "link", icon: /* @__PURE__ */ i(k, {}), onClick: u, children: "下载" })
|
|
40
40
|
] }),
|
|
41
41
|
f
|
|
42
42
|
] }),
|
|
43
43
|
/* @__PURE__ */ i("div", { className: t("file-preview-body", r["file-preview-body"]), children: /* @__PURE__ */ i(
|
|
44
|
-
|
|
44
|
+
U,
|
|
45
45
|
{
|
|
46
46
|
file: e,
|
|
47
47
|
previewUrl: s,
|
|
@@ -1,71 +1,76 @@
|
|
|
1
|
-
import { jsx as
|
|
2
|
-
import { FileArchive as
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
1
|
+
import { jsx as d } from "react/jsx-runtime";
|
|
2
|
+
import { FileArchive as c } from "../Icons/FileArchive.js";
|
|
3
|
+
import { FileImage as r } from "../Icons/FileImage.js";
|
|
4
|
+
import { Presentation as l } from "../Icons/Presentation.js";
|
|
5
|
+
import { FileSpreadsheet as s } from "../Icons/FileSpreadsheet.js";
|
|
6
|
+
import { FileText as i } from "../Icons/FileText.js";
|
|
7
|
+
import { File as f } from "../Icons/File.js";
|
|
8
|
+
const u = {
|
|
9
|
+
pdf: i,
|
|
10
|
+
doc: i,
|
|
11
|
+
docx: i,
|
|
12
|
+
txt: i,
|
|
13
|
+
md: i,
|
|
9
14
|
xls: s,
|
|
10
15
|
xlsx: s,
|
|
11
16
|
csv: s,
|
|
12
|
-
ppt:
|
|
13
|
-
pptx:
|
|
17
|
+
ppt: l,
|
|
18
|
+
pptx: l,
|
|
14
19
|
png: r,
|
|
15
20
|
jpg: r,
|
|
16
21
|
jpeg: r,
|
|
17
22
|
gif: r,
|
|
18
23
|
webp: r,
|
|
19
|
-
zip:
|
|
20
|
-
rar:
|
|
21
|
-
"7z":
|
|
24
|
+
zip: c,
|
|
25
|
+
rar: c,
|
|
26
|
+
"7z": c
|
|
22
27
|
};
|
|
23
|
-
function
|
|
28
|
+
function m(e) {
|
|
24
29
|
const t = e.lastIndexOf(".");
|
|
25
30
|
return t >= 0 ? e.slice(t + 1).toLowerCase() : "";
|
|
26
31
|
}
|
|
27
|
-
function
|
|
32
|
+
function x(e) {
|
|
28
33
|
return e ? e.replace(/^\./, "").toLowerCase() : "";
|
|
29
34
|
}
|
|
30
35
|
function F(e) {
|
|
31
36
|
const t = e.trim();
|
|
32
37
|
if (!t) return "未命名文件";
|
|
33
38
|
try {
|
|
34
|
-
const
|
|
35
|
-
if (
|
|
39
|
+
const p = new URL(t, "http://placeholder.local").pathname.split("/").filter(Boolean).pop() ?? "", a = decodeURIComponent(p);
|
|
40
|
+
if (a) return a;
|
|
36
41
|
} catch {
|
|
37
42
|
}
|
|
38
|
-
const
|
|
43
|
+
const o = t.split(/[/?#]/).filter(Boolean).pop() ?? "";
|
|
39
44
|
try {
|
|
40
|
-
return decodeURIComponent(
|
|
45
|
+
return decodeURIComponent(o) || "未命名文件";
|
|
41
46
|
} catch {
|
|
42
|
-
return
|
|
47
|
+
return o || "未命名文件";
|
|
43
48
|
}
|
|
44
49
|
}
|
|
45
|
-
function
|
|
46
|
-
var
|
|
47
|
-
const t = ((
|
|
50
|
+
function L(e) {
|
|
51
|
+
var p;
|
|
52
|
+
const t = ((p = e.name) == null ? void 0 : p.trim()) || (e.url ? F(e.url) : "未命名文件"), o = e.extension ?? m(t), n = x(o) || void 0;
|
|
48
53
|
return {
|
|
49
54
|
...e,
|
|
50
55
|
name: t,
|
|
51
|
-
extension:
|
|
56
|
+
extension: n
|
|
52
57
|
};
|
|
53
58
|
}
|
|
54
|
-
function
|
|
55
|
-
const
|
|
56
|
-
return /* @__PURE__ */
|
|
59
|
+
function y(e, t) {
|
|
60
|
+
const o = m(e), n = u[o] ?? f;
|
|
61
|
+
return /* @__PURE__ */ d(n, {});
|
|
57
62
|
}
|
|
58
|
-
function
|
|
59
|
-
var
|
|
60
|
-
const
|
|
61
|
-
return
|
|
63
|
+
function z(e, t) {
|
|
64
|
+
var n;
|
|
65
|
+
const o = m(e);
|
|
66
|
+
return o ? o.toUpperCase() : t ? ((n = t.split("/").pop()) == null ? void 0 : n.toUpperCase()) ?? "FILE" : "FILE";
|
|
62
67
|
}
|
|
63
68
|
export {
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
+
m as getFileExtension,
|
|
70
|
+
y as getFileIcon,
|
|
71
|
+
z as getFileTypeName,
|
|
72
|
+
x as normalizeExtension,
|
|
73
|
+
L as normalizeFileDisplayItem,
|
|
69
74
|
F as parseFileNameFromUrl
|
|
70
75
|
};
|
|
71
76
|
//# sourceMappingURL=fileDisplay.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fileDisplay.js","sources":["../../../src/components/File/fileDisplay.tsx"],"sourcesContent":["import React from 'react';\nimport {\n File,\n FileArchive,\n FileImage,\n FileSpreadsheet,\n FileText,\n Presentation,\n} from '@/components/Icons';\nimport type { FileDisplayItem } from './types';\n\nconst EXT_ICON_MAP: Record<string, React.FC<{ className?: string }>> = {\n pdf: FileText,\n doc: FileText,\n docx: FileText,\n txt: FileText,\n md: FileText,\n xls: FileSpreadsheet,\n xlsx: FileSpreadsheet,\n csv: FileSpreadsheet,\n ppt: Presentation,\n pptx: Presentation,\n png: FileImage,\n jpg: FileImage,\n jpeg: FileImage,\n gif: FileImage,\n webp: FileImage,\n zip: FileArchive,\n rar: FileArchive,\n '7z': FileArchive,\n};\n\nexport function getFileExtension(name: string): string {\n const dot = name.lastIndexOf('.');\n return dot >= 0 ? name.slice(dot + 1).toLowerCase() : '';\n}\n\n/** 规范化扩展名:去除前导点并转小写(兼容 .xlsx 与 xlsx) */\nexport function normalizeExtension(extension?: string | null): string {\n if (!extension) return '';\n return extension.replace(/^\\./, '').toLowerCase();\n}\n\n/** 从 URL 路径解析文件名(decodeURIComponent,失败时回退为「未命名文件」) */\nexport function parseFileNameFromUrl(url: string): string {\n const trimmed = url.trim();\n if (!trimmed) return '未命名文件';\n\n try {\n const pathname = new URL(trimmed, 'http://placeholder.local').pathname;\n const segment = pathname.split('/').filter(Boolean).pop() ?? '';\n const decoded = decodeURIComponent(segment);\n if (decoded) return decoded;\n } catch {\n // fall through\n }\n\n const fallback = trimmed.split(/[/?#]/).filter(Boolean).pop() ?? '';\n try {\n const decoded = decodeURIComponent(fallback);\n return decoded || '未命名文件';\n } catch {\n return fallback || '未命名文件';\n }\n}\n\n/** 补全 name / extension:name 缺省时从 url 解析 */\nexport function normalizeFileDisplayItem(file: FileDisplayItem): FileDisplayItem & { name: string } {\n const name = file.name?.trim() || (file.url ? parseFileNameFromUrl(file.url) : '未命名文件');\n const rawExtension = file.extension ?? getFileExtension(name);\n const extension = normalizeExtension(rawExtension) || undefined;\n\n return {\n ...file,\n name,\n extension,\n };\n}\n\nexport function getFileIcon(name: string, _mimeType?: string): React.ReactNode {\n const ext = getFileExtension(name);\n const Icon = EXT_ICON_MAP[ext] ?? File;\n return <Icon />;\n}\n\nexport function getFileTypeName(name: string, mimeType?: string): string {\n const ext = getFileExtension(name);\n if (ext) return ext.toUpperCase();\n if (mimeType) return mimeType.split('/').pop()?.toUpperCase() ?? 'FILE';\n return 'FILE';\n}\n"],"names":["EXT_ICON_MAP","FileText","FileSpreadsheet","Presentation","FileImage","FileArchive","getFileExtension","name","dot","normalizeExtension","extension","parseFileNameFromUrl","url","trimmed","segment","decoded","fallback","normalizeFileDisplayItem","file","_a","rawExtension","getFileIcon","_mimeType","ext","Icon","File","getFileTypeName","mimeType"],"mappings":"
|
|
1
|
+
{"version":3,"file":"fileDisplay.js","sources":["../../../src/components/File/fileDisplay.tsx"],"sourcesContent":["import React from 'react';\nimport {\n File,\n FileArchive,\n FileImage,\n FileSpreadsheet,\n FileText,\n Presentation,\n} from '@/components/Icons';\nimport type { FileDisplayItem } from './types';\n\nconst EXT_ICON_MAP: Record<string, React.FC<{ className?: string }>> = {\n pdf: FileText,\n doc: FileText,\n docx: FileText,\n txt: FileText,\n md: FileText,\n xls: FileSpreadsheet,\n xlsx: FileSpreadsheet,\n csv: FileSpreadsheet,\n ppt: Presentation,\n pptx: Presentation,\n png: FileImage,\n jpg: FileImage,\n jpeg: FileImage,\n gif: FileImage,\n webp: FileImage,\n zip: FileArchive,\n rar: FileArchive,\n '7z': FileArchive,\n};\n\nexport function getFileExtension(name: string): string {\n const dot = name.lastIndexOf('.');\n return dot >= 0 ? name.slice(dot + 1).toLowerCase() : '';\n}\n\n/** 规范化扩展名:去除前导点并转小写(兼容 .xlsx 与 xlsx) */\nexport function normalizeExtension(extension?: string | null): string {\n if (!extension) return '';\n return extension.replace(/^\\./, '').toLowerCase();\n}\n\n/** 从 URL 路径解析文件名(decodeURIComponent,失败时回退为「未命名文件」) */\nexport function parseFileNameFromUrl(url: string): string {\n const trimmed = url.trim();\n if (!trimmed) return '未命名文件';\n\n try {\n const pathname = new URL(trimmed, 'http://placeholder.local').pathname;\n const segment = pathname.split('/').filter(Boolean).pop() ?? '';\n const decoded = decodeURIComponent(segment);\n if (decoded) return decoded;\n } catch {\n // fall through\n }\n\n const fallback = trimmed.split(/[/?#]/).filter(Boolean).pop() ?? '';\n try {\n const decoded = decodeURIComponent(fallback);\n return decoded || '未命名文件';\n } catch {\n return fallback || '未命名文件';\n }\n}\n\n/** 补全 name / extension:name 缺省时从 url 解析 */\nexport function normalizeFileDisplayItem(file: FileDisplayItem): FileDisplayItem & { name: string } {\n const name = file.name?.trim() || (file.url ? parseFileNameFromUrl(file.url) : '未命名文件');\n const rawExtension = file.extension ?? getFileExtension(name);\n const extension = normalizeExtension(rawExtension) || undefined;\n\n return {\n ...file,\n name,\n extension,\n };\n}\n\nexport function getFileIcon(name: string, _mimeType?: string): React.ReactNode {\n const ext = getFileExtension(name);\n const Icon = EXT_ICON_MAP[ext] ?? File;\n return <Icon />;\n}\n\nexport function getFileTypeName(name: string, mimeType?: string): string {\n const ext = getFileExtension(name);\n if (ext) return ext.toUpperCase();\n if (mimeType) return mimeType.split('/').pop()?.toUpperCase() ?? 'FILE';\n return 'FILE';\n}\n"],"names":["EXT_ICON_MAP","FileText","FileSpreadsheet","Presentation","FileImage","FileArchive","getFileExtension","name","dot","normalizeExtension","extension","parseFileNameFromUrl","url","trimmed","segment","decoded","fallback","normalizeFileDisplayItem","file","_a","rawExtension","getFileIcon","_mimeType","ext","Icon","File","getFileTypeName","mimeType"],"mappings":";;;;;;;AAWA,MAAMA,IAAiE;AAAA,EACrE,KAAKC;AAAA,EACL,KAAKA;AAAA,EACL,MAAMA;AAAA,EACN,KAAKA;AAAA,EACL,IAAIA;AAAA,EACJ,KAAKC;AAAA,EACL,MAAMA;AAAA,EACN,KAAKA;AAAA,EACL,KAAKC;AAAA,EACL,MAAMA;AAAA,EACN,KAAKC;AAAA,EACL,KAAKA;AAAA,EACL,MAAMA;AAAA,EACN,KAAKA;AAAA,EACL,MAAMA;AAAA,EACN,KAAKC;AAAA,EACL,KAAKA;AAAA,EACL,MAAMA;AACR;AAEO,SAASC,EAAiBC,GAAsB;AACrD,QAAMC,IAAMD,EAAK,YAAY,GAAG;AAChC,SAAOC,KAAO,IAAID,EAAK,MAAMC,IAAM,CAAC,EAAE,gBAAgB;AACxD;AAGO,SAASC,EAAmBC,GAAmC;AACpE,SAAKA,IACEA,EAAU,QAAQ,OAAO,EAAE,EAAE,YAAA,IADb;AAEzB;AAGO,SAASC,EAAqBC,GAAqB;AACxD,QAAMC,IAAUD,EAAI,KAAA;AACpB,MAAI,CAACC,EAAS,QAAO;AAErB,MAAI;AAEF,UAAMC,IADW,IAAI,IAAID,GAAS,0BAA0B,EAAE,SACrC,MAAM,GAAG,EAAE,OAAO,OAAO,EAAE,IAAA,KAAS,IACvDE,IAAU,mBAAmBD,CAAO;AAC1C,QAAIC,EAAS,QAAOA;AAAA,EACtB,QAAQ;AAAA,EAER;AAEA,QAAMC,IAAWH,EAAQ,MAAM,OAAO,EAAE,OAAO,OAAO,EAAE,IAAA,KAAS;AACjE,MAAI;AAEF,WADgB,mBAAmBG,CAAQ,KACzB;AAAA,EACpB,QAAQ;AACN,WAAOA,KAAY;AAAA,EACrB;AACF;AAGO,SAASC,EAAyBC,GAA2D;;AAClG,QAAMX,MAAOY,IAAAD,EAAK,SAAL,gBAAAC,EAAW,YAAWD,EAAK,MAAMP,EAAqBO,EAAK,GAAG,IAAI,UACzEE,IAAeF,EAAK,aAAaZ,EAAiBC,CAAI,GACtDG,IAAYD,EAAmBW,CAAY,KAAK;AAEtD,SAAO;AAAA,IACL,GAAGF;AAAA,IACH,MAAAX;AAAA,IACA,WAAAG;AAAA,EAAA;AAEJ;AAEO,SAASW,EAAYd,GAAce,GAAqC;AAC7E,QAAMC,IAAMjB,EAAiBC,CAAI,GAC3BiB,IAAOxB,EAAauB,CAAG,KAAKE;AAClC,2BAAQD,GAAA,EAAK;AACf;AAEO,SAASE,EAAgBnB,GAAcoB,GAA2B;;AACvE,QAAMJ,IAAMjB,EAAiBC,CAAI;AACjC,SAAIgB,IAAYA,EAAI,YAAA,IAChBI,MAAiBR,IAAAQ,EAAS,MAAM,GAAG,EAAE,IAAA,MAApB,gBAAAR,EAA2B,kBAAiB,SAC1D;AACT;"}
|
|
@@ -1,15 +1,17 @@
|
|
|
1
1
|
import { jsxs as m, jsx as l, Fragment as Q } from "react/jsx-runtime";
|
|
2
|
-
import {
|
|
3
|
-
import { Button as N, Space as ee, Tooltip as oe } from "antd";
|
|
2
|
+
import { Button as N, Space as W, Tooltip as Y } from "antd";
|
|
4
3
|
import o from "classnames";
|
|
5
4
|
import b, { useRef as g, useState as D, useMemo as h } from "react";
|
|
6
5
|
import e from "./style.module.scss.js";
|
|
7
|
-
import { FilterLayoutProvider as
|
|
8
|
-
import { resolveFilterVisible as
|
|
9
|
-
import { useFilterLayoutMode as
|
|
6
|
+
import { FilterLayoutProvider as Z } from "../FilterLayoutContext.js";
|
|
7
|
+
import { resolveFilterVisible as ee } from "../types.js";
|
|
8
|
+
import { useFilterLayoutMode as oe } from "../useFilterLayoutMode.js";
|
|
10
9
|
import { useHorizontalScrollShadows as P } from "../useHorizontalScrollShadows.js";
|
|
11
|
-
import { useFilterState as
|
|
12
|
-
import
|
|
10
|
+
import { useFilterState as le, FilterProvider as te } from "../useFilterState.js";
|
|
11
|
+
import { ChevronUp as re } from "../../Icons/ChevronUp.js";
|
|
12
|
+
import { ChevronDown as me } from "../../Icons/ChevronDown.js";
|
|
13
|
+
import se from "../../Tag/SemanticTag.js";
|
|
14
|
+
import { X as ce } from "../../Icons/X.js";
|
|
13
15
|
const ie = 20;
|
|
14
16
|
function ne(s, c) {
|
|
15
17
|
return s.length <= c ? { display: s, truncated: !1 } : { display: `${s.slice(0, c)}...`, truncated: !0 };
|
|
@@ -18,10 +20,10 @@ function ae(s, c) {
|
|
|
18
20
|
return s && s.filter((a) => {
|
|
19
21
|
if (!b.isValidElement(a)) return !0;
|
|
20
22
|
const i = a.props;
|
|
21
|
-
return
|
|
23
|
+
return ee({ display: i.display, hidden: i.hidden }, c);
|
|
22
24
|
});
|
|
23
25
|
}
|
|
24
|
-
const
|
|
26
|
+
const Fe = ({
|
|
25
27
|
children: s,
|
|
26
28
|
list: c,
|
|
27
29
|
extra: a,
|
|
@@ -33,10 +35,10 @@ const Se = ({
|
|
|
33
35
|
forceMobile: w,
|
|
34
36
|
measureContainer: H = !1
|
|
35
37
|
}) => {
|
|
36
|
-
const y = g(null), x = g(null), S = g(null), { isMobile: O } =
|
|
38
|
+
const y = g(null), x = g(null), S = g(null), { isMobile: O } = oe({
|
|
37
39
|
containerRef: y,
|
|
38
40
|
measureContainer: H
|
|
39
|
-
}), k = w === !0 ? "mobile" : w === !1 ? "desktop" : G, t = k === "mobile" || k === "auto" && O, [v, U] = D(!1), [n, X] = D(!1), { selectedItems: F, register: I, unregister: C, clearAll: E, values: f, setFieldValue: z, clearFieldValue: M } =
|
|
41
|
+
}), k = w === !0 ? "mobile" : w === !1 ? "desktop" : G, t = k === "mobile" || k === "auto" && O, [v, U] = D(!1), [n, X] = D(!1), { selectedItems: F, register: I, unregister: C, clearAll: E, values: f, setFieldValue: z, clearFieldValue: M } = le(), A = h(
|
|
40
42
|
() => ({ register: I, unregister: C, values: f, setFieldValue: z, clearFieldValue: M }),
|
|
41
43
|
[I, C, f, z, M]
|
|
42
44
|
), R = h(() => ae(c, f), [c, f]), p = h(() => {
|
|
@@ -61,7 +63,7 @@ const Se = ({
|
|
|
61
63
|
children: [
|
|
62
64
|
/* @__PURE__ */ m("div", { className: o("common-filter-container", e["common-filter-container"]), children: [
|
|
63
65
|
!t && /* @__PURE__ */ l("span", { className: o("common-filter-label", e["common-filter-label"]), children: _ }),
|
|
64
|
-
/* @__PURE__ */ l(
|
|
66
|
+
/* @__PURE__ */ l(Z, { isMobile: t, children: /* @__PURE__ */ l(te, { ctx: A, children: /* @__PURE__ */ m("div", { className: o("common-filter-content", e["common-filter-content"]), children: [
|
|
65
67
|
/* @__PURE__ */ m(
|
|
66
68
|
"div",
|
|
67
69
|
{
|
|
@@ -99,7 +101,7 @@ const Se = ({
|
|
|
99
101
|
onClick: () => U((r) => !r),
|
|
100
102
|
children: [
|
|
101
103
|
v ? "收起" : "更多",
|
|
102
|
-
v ? /* @__PURE__ */ l(
|
|
104
|
+
v ? /* @__PURE__ */ l(re, { size: 12 }) : /* @__PURE__ */ l(me, { size: 12 })
|
|
103
105
|
]
|
|
104
106
|
}
|
|
105
107
|
),
|
|
@@ -169,8 +171,8 @@ const Se = ({
|
|
|
169
171
|
t && !n && e["common-filter-selected-tags-scroll"],
|
|
170
172
|
t && n && e["common-filter-selected-tags-expand"]
|
|
171
173
|
),
|
|
172
|
-
children: /* @__PURE__ */ l(
|
|
173
|
-
const { display: u, truncated: q } = ne(r.valueLabel, j), J = q ? /* @__PURE__ */ l(
|
|
174
|
+
children: /* @__PURE__ */ l(W, { size: [8, 8], wrap: !t || n, children: F.map((r) => {
|
|
175
|
+
const { display: u, truncated: q } = ne(r.valueLabel, j), J = q ? /* @__PURE__ */ l(Y, { title: r.valueLabel, children: /* @__PURE__ */ l(
|
|
174
176
|
"span",
|
|
175
177
|
{
|
|
176
178
|
className: o(
|
|
@@ -189,7 +191,7 @@ const Se = ({
|
|
|
189
191
|
children: u
|
|
190
192
|
}
|
|
191
193
|
);
|
|
192
|
-
return /* @__PURE__ */ l(
|
|
194
|
+
return /* @__PURE__ */ l(se, { color: "primary", children: /* @__PURE__ */ m(
|
|
193
195
|
"span",
|
|
194
196
|
{
|
|
195
197
|
className: o("common-filter-tag", e["common-filter-tag"]),
|
|
@@ -210,7 +212,7 @@ const Se = ({
|
|
|
210
212
|
),
|
|
211
213
|
J,
|
|
212
214
|
/* @__PURE__ */ l(
|
|
213
|
-
|
|
215
|
+
ce,
|
|
214
216
|
{
|
|
215
217
|
className: o(
|
|
216
218
|
"common-filter-tag-close",
|
|
@@ -272,6 +274,6 @@ const Se = ({
|
|
|
272
274
|
);
|
|
273
275
|
};
|
|
274
276
|
export {
|
|
275
|
-
|
|
277
|
+
Fe as default
|
|
276
278
|
};
|
|
277
279
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../src/components/Filter/CommonFilter/index.tsx"],"sourcesContent":["import { SemanticTag } from '@/components/Tag';\nimport { ChevronDown, ChevronUp, X } from '@/components/Icons';\nimport { Button, Space, Tooltip } from 'antd';\nimport classNames from 'classnames';\nimport React, { useMemo, useRef, useState } from 'react';\nimport styles from './style.module.scss';\nimport { FilterLayoutProvider } from '../FilterLayoutContext';\nimport { resolveFilterVisible, type BaseFilterProps, type FilterVisibilityContext } from '../types';\nimport { useFilterLayoutMode } from '../useFilterLayoutMode';\nimport { useHorizontalScrollShadows } from '../useHorizontalScrollShadows';\nimport { FilterProvider, useFilterState } from '../useFilterState';\n\nconst DEFAULT_SELECTED_TAG_MAX_LENGTH = 20;\n\nfunction truncateText(text: string, maxLength: number) {\n if (text.length <= maxLength) {\n return { display: text, truncated: false };\n }\n return { display: `${text.slice(0, maxLength)}...`, truncated: true };\n}\n\n/** list 项:hidden===true 或 display===false 时不渲染;非 ReactElement 原样保留 */\nfunction filterVisibleListItems(\n items: React.ReactNode[] | undefined,\n ctx: FilterVisibilityContext,\n): React.ReactNode[] | undefined {\n if (!items) return items;\n return items.filter((item) => {\n if (!React.isValidElement(item)) return true;\n const props = item.props as Pick<BaseFilterProps, 'display' | 'hidden'>;\n return resolveFilterVisible({ display: props.display, hidden: props.hidden }, ctx);\n });\n}\n\ninterface CommonFilterProps {\n children?: React.ReactNode;\n /** 筛选项 JSX 数组,如 [<FilterInput .../>, <FilterSelect .../>];支持 props.hidden / props.display 控制是否渲染 */\n list?: React.ReactNode[];\n /** 右侧额外内容(与筛选项两端对齐) */\n extra?: React.ReactNode;\n /** 清空全部回调 */\n onClearAll?: () => void;\n /** 左侧标签文字;移动端默认隐藏 */\n label?: string;\n /** 已选标签 value 最大字符数,超出显示 ... 并在 hover 时展示完整内容 */\n selectedTagMaxLength?: number;\n /**\n * 默认展示的筛选项个数;超出收入「更多」。未传或 ≤0:全部展示。\n * 移动端布局下忽略(全部横滑)。\n */\n displayLine?: number;\n /**\n * 布局:`auto` 默认跟**视口**;`mobile` / `desktop` 强制。\n * 亦可用 `forceMobile`(true→mobile,false→desktop)。\n */\n layoutMode?: 'auto' | 'mobile' | 'desktop';\n /** @deprecated 使用 layoutMode;true→mobile,false→desktop */\n forceMobile?: boolean;\n /**\n * 为 true 时 `layoutMode=\"auto\"` 按根容器宽度判定(窄预览框)。\n * 默认 false,避免 showcase 半栏误判移动端导致弹出空白大面板。\n */\n measureContainer?: boolean;\n}\n\n/**\n * 通用筛选栏容器\n *\n * 内部通过 useFilterState 管理各子组件的注册状态,\n * 子组件(FilterInput / FilterSelect / FilterTreeSelect)自行通过 useFilterRegister 注册选中项。\n * 外部不再需要手动维护 selectedItems 数组。\n *\n * 双端:窄屏横滑 pill、visited 打开态、sheet 弹出(经 FilterPopover);见 SKILL #46 / filter §5.0。\n */\nconst CommonFilter: React.FC<CommonFilterProps> = ({\n children,\n list,\n extra,\n onClearAll,\n label = '筛选',\n selectedTagMaxLength = DEFAULT_SELECTED_TAG_MAX_LENGTH,\n displayLine,\n layoutMode = 'auto',\n forceMobile,\n measureContainer = false,\n}) => {\n const rootRef = useRef<HTMLDivElement>(null);\n const itemsScrollRef = useRef<HTMLDivElement>(null);\n const selectedScrollRef = useRef<HTMLDivElement>(null);\n const { isMobile: detectedMobile } = useFilterLayoutMode({\n containerRef: rootRef,\n measureContainer,\n });\n const resolvedMode: 'auto' | 'mobile' | 'desktop' =\n forceMobile === true ? 'mobile' : forceMobile === false ? 'desktop' : layoutMode;\n const isMobile = resolvedMode === 'mobile' || (resolvedMode === 'auto' && detectedMobile);\n const [moreOpen, setMoreOpen] = useState(false);\n const [selectedExpanded, setSelectedExpanded] = useState(false);\n\n const { selectedItems, register, unregister, clearAll, values, setFieldValue, clearFieldValue } =\n useFilterState();\n\n const filterCtx = useMemo(\n () => ({ register, unregister, values, setFieldValue, clearFieldValue }),\n [register, unregister, values, setFieldValue, clearFieldValue],\n );\n\n const visibleList = useMemo(() => filterVisibleListItems(list, values), [list, values]);\n\n const flatItems = useMemo(() => {\n const fromList = visibleList ?? [];\n const fromChildren = React.Children.toArray(children);\n return [...fromList, ...fromChildren];\n }, [visibleList, children]);\n\n const { primaryItems, moreItems } = useMemo(() => {\n if (!displayLine || displayLine <= 0 || isMobile) {\n return { primaryItems: flatItems, moreItems: [] as React.ReactNode[] };\n }\n return {\n primaryItems: flatItems.slice(0, displayLine),\n moreItems: flatItems.slice(displayLine),\n };\n }, [flatItems, displayLine, isMobile]);\n\n const itemsShadows = useHorizontalScrollShadows(itemsScrollRef);\n const selectedShadows = useHorizontalScrollShadows(selectedScrollRef);\n\n const handleClearAll = React.useCallback(() => {\n clearAll();\n onClearAll?.();\n }, [clearAll, onClearAll]);\n\n return (\n <div\n ref={rootRef}\n data-layout={isMobile ? 'mobile' : 'desktop'}\n className={classNames(\n 'common-filter-root',\n styles['common-filter-root'],\n isMobile && ['common-filter-is-mobile', styles['common-filter-is-mobile']],\n )}\n >\n <div className={classNames('common-filter-container', styles['common-filter-container'])}>\n {!isMobile && (\n <span className={classNames('common-filter-label', styles['common-filter-label'])}>\n {label}\n </span>\n )}\n <FilterLayoutProvider isMobile={isMobile}>\n <FilterProvider ctx={filterCtx}>\n <div className={classNames('common-filter-content', styles['common-filter-content'])}>\n <div\n className={classNames(\n 'common-filter-items-wrap',\n styles['common-filter-items-wrap'],\n )}\n >\n {isMobile && itemsShadows.showPrev && (\n <div\n className={classNames(\n 'common-filter-scroll-shadow-prev',\n styles['common-filter-scroll-shadow-prev'],\n )}\n />\n )}\n <div\n ref={itemsScrollRef}\n className={classNames('common-filter-items', styles['common-filter-items'])}\n >\n {primaryItems}\n {moreItems.length > 0 && (\n <>\n <Button\n type=\"link\"\n size=\"small\"\n className={classNames(\n 'common-filter-more-btn',\n styles['common-filter-more-btn'],\n )}\n onClick={() => setMoreOpen((v) => !v)}\n >\n {moreOpen ? '收起' : '更多'}\n {moreOpen ? <ChevronUp size={12} /> : <ChevronDown size={12} />}\n </Button>\n {moreOpen && moreItems}\n </>\n )}\n </div>\n {isMobile && itemsShadows.showNext && (\n <div\n className={classNames(\n 'common-filter-scroll-shadow-next',\n styles['common-filter-scroll-shadow-next'],\n )}\n />\n )}\n </div>\n {extra && (\n <div className={classNames('common-filter-extra', styles['common-filter-extra'])}>\n {extra}\n </div>\n )}\n </div>\n </FilterProvider>\n </FilterLayoutProvider>\n </div>\n\n {selectedItems.length > 0 && (\n <div className={classNames('common-filter-selected', styles['common-filter-selected'])}>\n <div\n className={classNames(\n 'common-filter-selected-main',\n styles['common-filter-selected-main'],\n )}\n >\n {!isMobile && (\n <span\n className={classNames(\n 'common-filter-selected-title',\n styles['common-filter-selected-title'],\n )}\n >\n 您已选择\n </span>\n )}\n <div\n className={classNames(\n 'common-filter-selected-tags-wrap',\n styles['common-filter-selected-tags-wrap'],\n )}\n >\n {isMobile && !selectedExpanded && selectedShadows.showPrev && (\n <div\n className={classNames(\n 'common-filter-scroll-shadow-prev',\n styles['common-filter-scroll-shadow-prev'],\n )}\n />\n )}\n <div\n ref={selectedScrollRef}\n className={classNames(\n 'common-filter-selected-tags',\n styles['common-filter-selected-tags'],\n isMobile && !selectedExpanded && styles['common-filter-selected-tags-scroll'],\n isMobile && selectedExpanded && styles['common-filter-selected-tags-expand'],\n )}\n >\n <Space size={[8, 8]} wrap={!isMobile || selectedExpanded}>\n {selectedItems.map((s) => {\n const { display, truncated } = truncateText(s.valueLabel, selectedTagMaxLength);\n const valueNode = truncated ? (\n <Tooltip title={s.valueLabel}>\n <span\n className={classNames(\n 'common-filter-tag-value',\n styles['common-filter-tag-value'],\n )}\n >\n {display}\n </span>\n </Tooltip>\n ) : (\n <span\n className={classNames(\n 'common-filter-tag-value',\n styles['common-filter-tag-value'],\n )}\n >\n {display}\n </span>\n );\n\n return (\n <SemanticTag key={s.key} color=\"primary\">\n <span\n className={classNames('common-filter-tag', styles['common-filter-tag'])}\n >\n <span\n className={classNames(\n 'common-filter-tag-label',\n styles['common-filter-tag-label'],\n )}\n style={{ color: 'var(--font-color)' }}\n >\n {s.label}:\n </span>\n {valueNode}\n <X\n className={classNames(\n 'common-filter-tag-close',\n styles['common-filter-tag-close'],\n s.removable === false && styles['common-filter-tag-close-disabled'],\n )}\n onClick={(e) => {\n e.preventDefault();\n if (s.removable === false) return;\n s.onRemove();\n }}\n />\n </span>\n </SemanticTag>\n );\n })}\n </Space>\n </div>\n {isMobile && !selectedExpanded && selectedShadows.showNext && (\n <div\n className={classNames(\n 'common-filter-scroll-shadow-next',\n styles['common-filter-scroll-shadow-next'],\n )}\n />\n )}\n </div>\n {isMobile && (\n <Button\n type=\"link\"\n size=\"small\"\n className={classNames(\n 'common-filter-selected-toggle',\n styles['common-filter-selected-toggle'],\n )}\n onClick={() => setSelectedExpanded((v) => !v)}\n >\n {selectedExpanded ? '收起' : '展开'}\n </Button>\n )}\n </div>\n <Button\n type=\"link\"\n size=\"small\"\n onClick={handleClearAll}\n className={classNames('common-filter-clear-btn', styles['common-filter-clear-btn'])}\n >\n 清空全部\n </Button>\n </div>\n )}\n </div>\n );\n};\n\nexport default CommonFilter;\nexport type { CommonFilterProps };\n"],"names":["DEFAULT_SELECTED_TAG_MAX_LENGTH","truncateText","text","maxLength","filterVisibleListItems","items","ctx","item","React","props","resolveFilterVisible","CommonFilter","children","list","extra","onClearAll","label","selectedTagMaxLength","displayLine","layoutMode","forceMobile","measureContainer","rootRef","useRef","itemsScrollRef","selectedScrollRef","detectedMobile","useFilterLayoutMode","resolvedMode","isMobile","moreOpen","setMoreOpen","useState","selectedExpanded","setSelectedExpanded","selectedItems","register","unregister","clearAll","values","setFieldValue","clearFieldValue","useFilterState","filterCtx","useMemo","visibleList","flatItems","fromList","fromChildren","primaryItems","moreItems","itemsShadows","useHorizontalScrollShadows","selectedShadows","handleClearAll","jsxs","classNames","styles","jsx","FilterLayoutProvider","FilterProvider","Fragment","Button","v","ChevronUp","ChevronDown","Space","s","display","truncated","valueNode","Tooltip","SemanticTag","X","e"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../src/components/Filter/CommonFilter/index.tsx"],"sourcesContent":["import { SemanticTag } from '@/components/Tag';\nimport { ChevronDown, ChevronUp, X } from '@/components/Icons';\nimport { Button, Space, Tooltip } from 'antd';\nimport classNames from 'classnames';\nimport React, { useMemo, useRef, useState } from 'react';\nimport styles from './style.module.scss';\nimport { FilterLayoutProvider } from '../FilterLayoutContext';\nimport { resolveFilterVisible, type BaseFilterProps, type FilterVisibilityContext } from '../types';\nimport { useFilterLayoutMode } from '../useFilterLayoutMode';\nimport { useHorizontalScrollShadows } from '../useHorizontalScrollShadows';\nimport { FilterProvider, useFilterState } from '../useFilterState';\n\nconst DEFAULT_SELECTED_TAG_MAX_LENGTH = 20;\n\nfunction truncateText(text: string, maxLength: number) {\n if (text.length <= maxLength) {\n return { display: text, truncated: false };\n }\n return { display: `${text.slice(0, maxLength)}...`, truncated: true };\n}\n\n/** list 项:hidden===true 或 display===false 时不渲染;非 ReactElement 原样保留 */\nfunction filterVisibleListItems(\n items: React.ReactNode[] | undefined,\n ctx: FilterVisibilityContext,\n): React.ReactNode[] | undefined {\n if (!items) return items;\n return items.filter((item) => {\n if (!React.isValidElement(item)) return true;\n const props = item.props as Pick<BaseFilterProps, 'display' | 'hidden'>;\n return resolveFilterVisible({ display: props.display, hidden: props.hidden }, ctx);\n });\n}\n\ninterface CommonFilterProps {\n children?: React.ReactNode;\n /** 筛选项 JSX 数组,如 [<FilterInput .../>, <FilterSelect .../>];支持 props.hidden / props.display 控制是否渲染 */\n list?: React.ReactNode[];\n /** 右侧额外内容(与筛选项两端对齐) */\n extra?: React.ReactNode;\n /** 清空全部回调 */\n onClearAll?: () => void;\n /** 左侧标签文字;移动端默认隐藏 */\n label?: string;\n /** 已选标签 value 最大字符数,超出显示 ... 并在 hover 时展示完整内容 */\n selectedTagMaxLength?: number;\n /**\n * 默认展示的筛选项个数;超出收入「更多」。未传或 ≤0:全部展示。\n * 移动端布局下忽略(全部横滑)。\n */\n displayLine?: number;\n /**\n * 布局:`auto` 默认跟**视口**;`mobile` / `desktop` 强制。\n * 亦可用 `forceMobile`(true→mobile,false→desktop)。\n */\n layoutMode?: 'auto' | 'mobile' | 'desktop';\n /** @deprecated 使用 layoutMode;true→mobile,false→desktop */\n forceMobile?: boolean;\n /**\n * 为 true 时 `layoutMode=\"auto\"` 按根容器宽度判定(窄预览框)。\n * 默认 false,避免 showcase 半栏误判移动端导致弹出空白大面板。\n */\n measureContainer?: boolean;\n}\n\n/**\n * 通用筛选栏容器\n *\n * 内部通过 useFilterState 管理各子组件的注册状态,\n * 子组件(FilterInput / FilterSelect / FilterTreeSelect)自行通过 useFilterRegister 注册选中项。\n * 外部不再需要手动维护 selectedItems 数组。\n *\n * 双端:窄屏横滑 pill、visited 打开态、sheet 弹出(经 FilterPopover);见 SKILL #46 / filter §5.0。\n */\nconst CommonFilter: React.FC<CommonFilterProps> = ({\n children,\n list,\n extra,\n onClearAll,\n label = '筛选',\n selectedTagMaxLength = DEFAULT_SELECTED_TAG_MAX_LENGTH,\n displayLine,\n layoutMode = 'auto',\n forceMobile,\n measureContainer = false,\n}) => {\n const rootRef = useRef<HTMLDivElement>(null);\n const itemsScrollRef = useRef<HTMLDivElement>(null);\n const selectedScrollRef = useRef<HTMLDivElement>(null);\n const { isMobile: detectedMobile } = useFilterLayoutMode({\n containerRef: rootRef,\n measureContainer,\n });\n const resolvedMode: 'auto' | 'mobile' | 'desktop' =\n forceMobile === true ? 'mobile' : forceMobile === false ? 'desktop' : layoutMode;\n const isMobile = resolvedMode === 'mobile' || (resolvedMode === 'auto' && detectedMobile);\n const [moreOpen, setMoreOpen] = useState(false);\n const [selectedExpanded, setSelectedExpanded] = useState(false);\n\n const { selectedItems, register, unregister, clearAll, values, setFieldValue, clearFieldValue } =\n useFilterState();\n\n const filterCtx = useMemo(\n () => ({ register, unregister, values, setFieldValue, clearFieldValue }),\n [register, unregister, values, setFieldValue, clearFieldValue],\n );\n\n const visibleList = useMemo(() => filterVisibleListItems(list, values), [list, values]);\n\n const flatItems = useMemo(() => {\n const fromList = visibleList ?? [];\n const fromChildren = React.Children.toArray(children);\n return [...fromList, ...fromChildren];\n }, [visibleList, children]);\n\n const { primaryItems, moreItems } = useMemo(() => {\n if (!displayLine || displayLine <= 0 || isMobile) {\n return { primaryItems: flatItems, moreItems: [] as React.ReactNode[] };\n }\n return {\n primaryItems: flatItems.slice(0, displayLine),\n moreItems: flatItems.slice(displayLine),\n };\n }, [flatItems, displayLine, isMobile]);\n\n const itemsShadows = useHorizontalScrollShadows(itemsScrollRef);\n const selectedShadows = useHorizontalScrollShadows(selectedScrollRef);\n\n const handleClearAll = React.useCallback(() => {\n clearAll();\n onClearAll?.();\n }, [clearAll, onClearAll]);\n\n return (\n <div\n ref={rootRef}\n data-layout={isMobile ? 'mobile' : 'desktop'}\n className={classNames(\n 'common-filter-root',\n styles['common-filter-root'],\n isMobile && ['common-filter-is-mobile', styles['common-filter-is-mobile']],\n )}\n >\n <div className={classNames('common-filter-container', styles['common-filter-container'])}>\n {!isMobile && (\n <span className={classNames('common-filter-label', styles['common-filter-label'])}>\n {label}\n </span>\n )}\n <FilterLayoutProvider isMobile={isMobile}>\n <FilterProvider ctx={filterCtx}>\n <div className={classNames('common-filter-content', styles['common-filter-content'])}>\n <div\n className={classNames(\n 'common-filter-items-wrap',\n styles['common-filter-items-wrap'],\n )}\n >\n {isMobile && itemsShadows.showPrev && (\n <div\n className={classNames(\n 'common-filter-scroll-shadow-prev',\n styles['common-filter-scroll-shadow-prev'],\n )}\n />\n )}\n <div\n ref={itemsScrollRef}\n className={classNames('common-filter-items', styles['common-filter-items'])}\n >\n {primaryItems}\n {moreItems.length > 0 && (\n <>\n <Button\n type=\"link\"\n size=\"small\"\n className={classNames(\n 'common-filter-more-btn',\n styles['common-filter-more-btn'],\n )}\n onClick={() => setMoreOpen((v) => !v)}\n >\n {moreOpen ? '收起' : '更多'}\n {moreOpen ? <ChevronUp size={12} /> : <ChevronDown size={12} />}\n </Button>\n {moreOpen && moreItems}\n </>\n )}\n </div>\n {isMobile && itemsShadows.showNext && (\n <div\n className={classNames(\n 'common-filter-scroll-shadow-next',\n styles['common-filter-scroll-shadow-next'],\n )}\n />\n )}\n </div>\n {extra && (\n <div className={classNames('common-filter-extra', styles['common-filter-extra'])}>\n {extra}\n </div>\n )}\n </div>\n </FilterProvider>\n </FilterLayoutProvider>\n </div>\n\n {selectedItems.length > 0 && (\n <div className={classNames('common-filter-selected', styles['common-filter-selected'])}>\n <div\n className={classNames(\n 'common-filter-selected-main',\n styles['common-filter-selected-main'],\n )}\n >\n {!isMobile && (\n <span\n className={classNames(\n 'common-filter-selected-title',\n styles['common-filter-selected-title'],\n )}\n >\n 您已选择\n </span>\n )}\n <div\n className={classNames(\n 'common-filter-selected-tags-wrap',\n styles['common-filter-selected-tags-wrap'],\n )}\n >\n {isMobile && !selectedExpanded && selectedShadows.showPrev && (\n <div\n className={classNames(\n 'common-filter-scroll-shadow-prev',\n styles['common-filter-scroll-shadow-prev'],\n )}\n />\n )}\n <div\n ref={selectedScrollRef}\n className={classNames(\n 'common-filter-selected-tags',\n styles['common-filter-selected-tags'],\n isMobile && !selectedExpanded && styles['common-filter-selected-tags-scroll'],\n isMobile && selectedExpanded && styles['common-filter-selected-tags-expand'],\n )}\n >\n <Space size={[8, 8]} wrap={!isMobile || selectedExpanded}>\n {selectedItems.map((s) => {\n const { display, truncated } = truncateText(s.valueLabel, selectedTagMaxLength);\n const valueNode = truncated ? (\n <Tooltip title={s.valueLabel}>\n <span\n className={classNames(\n 'common-filter-tag-value',\n styles['common-filter-tag-value'],\n )}\n >\n {display}\n </span>\n </Tooltip>\n ) : (\n <span\n className={classNames(\n 'common-filter-tag-value',\n styles['common-filter-tag-value'],\n )}\n >\n {display}\n </span>\n );\n\n return (\n <SemanticTag key={s.key} color=\"primary\">\n <span\n className={classNames('common-filter-tag', styles['common-filter-tag'])}\n >\n <span\n className={classNames(\n 'common-filter-tag-label',\n styles['common-filter-tag-label'],\n )}\n style={{ color: 'var(--font-color)' }}\n >\n {s.label}:\n </span>\n {valueNode}\n <X\n className={classNames(\n 'common-filter-tag-close',\n styles['common-filter-tag-close'],\n s.removable === false && styles['common-filter-tag-close-disabled'],\n )}\n onClick={(e) => {\n e.preventDefault();\n if (s.removable === false) return;\n s.onRemove();\n }}\n />\n </span>\n </SemanticTag>\n );\n })}\n </Space>\n </div>\n {isMobile && !selectedExpanded && selectedShadows.showNext && (\n <div\n className={classNames(\n 'common-filter-scroll-shadow-next',\n styles['common-filter-scroll-shadow-next'],\n )}\n />\n )}\n </div>\n {isMobile && (\n <Button\n type=\"link\"\n size=\"small\"\n className={classNames(\n 'common-filter-selected-toggle',\n styles['common-filter-selected-toggle'],\n )}\n onClick={() => setSelectedExpanded((v) => !v)}\n >\n {selectedExpanded ? '收起' : '展开'}\n </Button>\n )}\n </div>\n <Button\n type=\"link\"\n size=\"small\"\n onClick={handleClearAll}\n className={classNames('common-filter-clear-btn', styles['common-filter-clear-btn'])}\n >\n 清空全部\n </Button>\n </div>\n )}\n </div>\n );\n};\n\nexport default CommonFilter;\nexport type { CommonFilterProps };\n"],"names":["DEFAULT_SELECTED_TAG_MAX_LENGTH","truncateText","text","maxLength","filterVisibleListItems","items","ctx","item","React","props","resolveFilterVisible","CommonFilter","children","list","extra","onClearAll","label","selectedTagMaxLength","displayLine","layoutMode","forceMobile","measureContainer","rootRef","useRef","itemsScrollRef","selectedScrollRef","detectedMobile","useFilterLayoutMode","resolvedMode","isMobile","moreOpen","setMoreOpen","useState","selectedExpanded","setSelectedExpanded","selectedItems","register","unregister","clearAll","values","setFieldValue","clearFieldValue","useFilterState","filterCtx","useMemo","visibleList","flatItems","fromList","fromChildren","primaryItems","moreItems","itemsShadows","useHorizontalScrollShadows","selectedShadows","handleClearAll","jsxs","classNames","styles","jsx","FilterLayoutProvider","FilterProvider","Fragment","Button","v","ChevronUp","ChevronDown","Space","s","display","truncated","valueNode","Tooltip","SemanticTag","X","e"],"mappings":";;;;;;;;;;;;;;AAYA,MAAMA,KAAkC;AAExC,SAASC,GAAaC,GAAcC,GAAmB;AACrD,SAAID,EAAK,UAAUC,IACV,EAAE,SAASD,GAAM,WAAW,GAAA,IAE9B,EAAE,SAAS,GAAGA,EAAK,MAAM,GAAGC,CAAS,CAAC,OAAO,WAAW,GAAA;AACjE;AAGA,SAASC,GACPC,GACAC,GAC+B;AAC/B,SAAKD,KACEA,EAAM,OAAO,CAACE,MAAS;AAC5B,QAAI,CAACC,EAAM,eAAeD,CAAI,EAAG,QAAO;AACxC,UAAME,IAAQF,EAAK;AACnB,WAAOG,GAAqB,EAAE,SAASD,EAAM,SAAS,QAAQA,EAAM,OAAA,GAAUH,CAAG;AAAA,EACnF,CAAC;AACH;AA0CA,MAAMK,KAA4C,CAAC;AAAA,EACjD,UAAAC;AAAA,EACA,MAAAC;AAAA,EACA,OAAAC;AAAA,EACA,YAAAC;AAAA,EACA,OAAAC,IAAQ;AAAA,EACR,sBAAAC,IAAuBjB;AAAA,EACvB,aAAAkB;AAAA,EACA,YAAAC,IAAa;AAAA,EACb,aAAAC;AAAA,EACA,kBAAAC,IAAmB;AACrB,MAAM;AACJ,QAAMC,IAAUC,EAAuB,IAAI,GACrCC,IAAiBD,EAAuB,IAAI,GAC5CE,IAAoBF,EAAuB,IAAI,GAC/C,EAAE,UAAUG,EAAA,IAAmBC,GAAoB;AAAA,IACvD,cAAcL;AAAA,IACd,kBAAAD;AAAA,EAAA,CACD,GACKO,IACJR,MAAgB,KAAO,WAAWA,MAAgB,KAAQ,YAAYD,GAClEU,IAAWD,MAAiB,YAAaA,MAAiB,UAAUF,GACpE,CAACI,GAAUC,CAAW,IAAIC,EAAS,EAAK,GACxC,CAACC,GAAkBC,CAAmB,IAAIF,EAAS,EAAK,GAExD,EAAE,eAAAG,GAAe,UAAAC,GAAU,YAAAC,GAAY,UAAAC,GAAU,QAAAC,GAAQ,eAAAC,GAAe,iBAAAC,EAAA,IAC5EC,GAAA,GAEIC,IAAYC;AAAA,IAChB,OAAO,EAAE,UAAAR,GAAU,YAAAC,GAAY,QAAAE,GAAQ,eAAAC,GAAe,iBAAAC,EAAA;AAAA,IACtD,CAACL,GAAUC,GAAYE,GAAQC,GAAeC,CAAe;AAAA,EAAA,GAGzDI,IAAcD,EAAQ,MAAMxC,GAAuBS,GAAM0B,CAAM,GAAG,CAAC1B,GAAM0B,CAAM,CAAC,GAEhFO,IAAYF,EAAQ,MAAM;AAC9B,UAAMG,IAAWF,KAAe,CAAA,GAC1BG,IAAexC,EAAM,SAAS,QAAQI,CAAQ;AACpD,WAAO,CAAC,GAAGmC,GAAU,GAAGC,CAAY;AAAA,EACtC,GAAG,CAACH,GAAajC,CAAQ,CAAC,GAEpB,EAAE,cAAAqC,GAAc,WAAAC,EAAA,IAAcN,EAAQ,MACtC,CAAC1B,KAAeA,KAAe,KAAKW,IAC/B,EAAE,cAAciB,GAAW,WAAW,CAAA,EAAC,IAEzC;AAAA,IACL,cAAcA,EAAU,MAAM,GAAG5B,CAAW;AAAA,IAC5C,WAAW4B,EAAU,MAAM5B,CAAW;AAAA,EAAA,GAEvC,CAAC4B,GAAW5B,GAAaW,CAAQ,CAAC,GAE/BsB,IAAeC,EAA2B5B,CAAc,GACxD6B,IAAkBD,EAA2B3B,CAAiB,GAE9D6B,IAAiB9C,EAAM,YAAY,MAAM;AAC7C,IAAA8B,EAAA,GACAvB,KAAA,QAAAA;AAAA,EACF,GAAG,CAACuB,GAAUvB,CAAU,CAAC;AAEzB,SACE,gBAAAwC;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAKjC;AAAA,MACL,eAAaO,IAAW,WAAW;AAAA,MACnC,WAAW2B;AAAA,QACT;AAAA,QACAC,EAAO,oBAAoB;AAAA,QAC3B5B,KAAY,CAAC,2BAA2B4B,EAAO,yBAAyB,CAAC;AAAA,MAAA;AAAA,MAG3E,UAAA;AAAA,QAAA,gBAAAF,EAAC,SAAI,WAAWC,EAAW,2BAA2BC,EAAO,yBAAyB,CAAC,GACpF,UAAA;AAAA,UAAA,CAAC5B,KACA,gBAAA6B,EAAC,QAAA,EAAK,WAAWF,EAAW,uBAAuBC,EAAO,qBAAqB,CAAC,GAC7E,UAAAzC,EAAA,CACH;AAAA,UAEF,gBAAA0C,EAACC,GAAA,EAAqB,UAAA9B,GACpB,UAAA,gBAAA6B,EAACE,MAAe,KAAKjB,GACnB,UAAA,gBAAAY,EAAC,OAAA,EAAI,WAAWC,EAAW,yBAAyBC,EAAO,uBAAuB,CAAC,GACjF,UAAA;AAAA,YAAA,gBAAAF;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,WAAWC;AAAA,kBACT;AAAA,kBACAC,EAAO,0BAA0B;AAAA,gBAAA;AAAA,gBAGlC,UAAA;AAAA,kBAAA5B,KAAYsB,EAAa,YACxB,gBAAAO;AAAA,oBAAC;AAAA,oBAAA;AAAA,sBACC,WAAWF;AAAA,wBACT;AAAA,wBACAC,EAAO,kCAAkC;AAAA,sBAAA;AAAA,oBAC3C;AAAA,kBAAA;AAAA,kBAGJ,gBAAAF;AAAA,oBAAC;AAAA,oBAAA;AAAA,sBACC,KAAK/B;AAAA,sBACL,WAAWgC,EAAW,uBAAuBC,EAAO,qBAAqB,CAAC;AAAA,sBAEzE,UAAA;AAAA,wBAAAR;AAAA,wBACAC,EAAU,SAAS,KAClB,gBAAAK,EAAAM,GAAA,EACE,UAAA;AAAA,0BAAA,gBAAAN;AAAA,4BAACO;AAAA,4BAAA;AAAA,8BACC,MAAK;AAAA,8BACL,MAAK;AAAA,8BACL,WAAWN;AAAA,gCACT;AAAA,gCACAC,EAAO,wBAAwB;AAAA,8BAAA;AAAA,8BAEjC,SAAS,MAAM1B,EAAY,CAACgC,MAAM,CAACA,CAAC;AAAA,8BAEnC,UAAA;AAAA,gCAAAjC,IAAW,OAAO;AAAA,gCAClBA,sBAAYkC,IAAA,EAAU,MAAM,IAAI,IAAK,gBAAAN,EAACO,IAAA,EAAY,MAAM,GAAA,CAAI;AAAA,8BAAA;AAAA,4BAAA;AAAA,0BAAA;AAAA,0BAE9DnC,KAAYoB;AAAA,wBAAA,EAAA,CACf;AAAA,sBAAA;AAAA,oBAAA;AAAA,kBAAA;AAAA,kBAGHrB,KAAYsB,EAAa,YACxB,gBAAAO;AAAA,oBAAC;AAAA,oBAAA;AAAA,sBACC,WAAWF;AAAA,wBACT;AAAA,wBACAC,EAAO,kCAAkC;AAAA,sBAAA;AAAA,oBAC3C;AAAA,kBAAA;AAAA,gBACF;AAAA,cAAA;AAAA,YAAA;AAAA,YAGH3C,KACC,gBAAA4C,EAAC,OAAA,EAAI,WAAWF,EAAW,uBAAuBC,EAAO,qBAAqB,CAAC,GAC5E,UAAA3C,EAAA,CACH;AAAA,UAAA,EAAA,CAEJ,GACF,EAAA,CACF;AAAA,QAAA,GACF;AAAA,QAECqB,EAAc,SAAS,KACtB,gBAAAoB,EAAC,OAAA,EAAI,WAAWC,EAAW,0BAA0BC,EAAO,wBAAwB,CAAC,GACnF,UAAA;AAAA,UAAA,gBAAAF;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,WAAWC;AAAA,gBACT;AAAA,gBACAC,EAAO,6BAA6B;AAAA,cAAA;AAAA,cAGrC,UAAA;AAAA,gBAAA,CAAC5B,KACA,gBAAA6B;AAAA,kBAAC;AAAA,kBAAA;AAAA,oBACC,WAAWF;AAAA,sBACT;AAAA,sBACAC,EAAO,8BAA8B;AAAA,oBAAA;AAAA,oBAExC,UAAA;AAAA,kBAAA;AAAA,gBAAA;AAAA,gBAIH,gBAAAF;AAAA,kBAAC;AAAA,kBAAA;AAAA,oBACC,WAAWC;AAAA,sBACT;AAAA,sBACAC,EAAO,kCAAkC;AAAA,oBAAA;AAAA,oBAG1C,UAAA;AAAA,sBAAA5B,KAAY,CAACI,KAAoBoB,EAAgB,YAChD,gBAAAK;AAAA,wBAAC;AAAA,wBAAA;AAAA,0BACC,WAAWF;AAAA,4BACT;AAAA,4BACAC,EAAO,kCAAkC;AAAA,0BAAA;AAAA,wBAC3C;AAAA,sBAAA;AAAA,sBAGJ,gBAAAC;AAAA,wBAAC;AAAA,wBAAA;AAAA,0BACC,KAAKjC;AAAA,0BACL,WAAW+B;AAAA,4BACT;AAAA,4BACAC,EAAO,6BAA6B;AAAA,4BACpC5B,KAAY,CAACI,KAAoBwB,EAAO,oCAAoC;AAAA,4BAC5E5B,KAAYI,KAAoBwB,EAAO,oCAAoC;AAAA,0BAAA;AAAA,0BAG7E,UAAA,gBAAAC,EAACQ,GAAA,EAAM,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAACrC,KAAYI,GACrC,UAAAE,EAAc,IAAI,CAACgC,MAAM;AACxB,kCAAM,EAAE,SAAAC,GAAS,WAAAC,EAAA,IAAcpE,GAAakE,EAAE,YAAYlD,CAAoB,GACxEqD,IAAYD,IAChB,gBAAAX,EAACa,GAAA,EAAQ,OAAOJ,EAAE,YAChB,UAAA,gBAAAT;AAAA,8BAAC;AAAA,8BAAA;AAAA,gCACC,WAAWF;AAAA,kCACT;AAAA,kCACAC,EAAO,yBAAyB;AAAA,gCAAA;AAAA,gCAGjC,UAAAW;AAAA,8BAAA;AAAA,4BAAA,GAEL,IAEA,gBAAAV;AAAA,8BAAC;AAAA,8BAAA;AAAA,gCACC,WAAWF;AAAA,kCACT;AAAA,kCACAC,EAAO,yBAAyB;AAAA,gCAAA;AAAA,gCAGjC,UAAAW;AAAA,8BAAA;AAAA,4BAAA;AAIL,mCACE,gBAAAV,EAACc,IAAA,EAAwB,OAAM,WAC7B,UAAA,gBAAAjB;AAAA,8BAAC;AAAA,8BAAA;AAAA,gCACC,WAAWC,EAAW,qBAAqBC,EAAO,mBAAmB,CAAC;AAAA,gCAEtE,UAAA;AAAA,kCAAA,gBAAAF;AAAA,oCAAC;AAAA,oCAAA;AAAA,sCACC,WAAWC;AAAA,wCACT;AAAA,wCACAC,EAAO,yBAAyB;AAAA,sCAAA;AAAA,sCAElC,OAAO,EAAE,OAAO,oBAAA;AAAA,sCAEf,UAAA;AAAA,wCAAAU,EAAE;AAAA,wCAAM;AAAA,sCAAA;AAAA,oCAAA;AAAA,kCAAA;AAAA,kCAEVG;AAAA,kCACD,gBAAAZ;AAAA,oCAACe;AAAA,oCAAA;AAAA,sCACC,WAAWjB;AAAA,wCACT;AAAA,wCACAC,EAAO,yBAAyB;AAAA,wCAChCU,EAAE,cAAc,MAASV,EAAO,kCAAkC;AAAA,sCAAA;AAAA,sCAEpE,SAAS,CAACiB,MAAM;AAEd,wCADAA,EAAE,eAAA,GACEP,EAAE,cAAc,MACpBA,EAAE,SAAA;AAAA,sCACJ;AAAA,oCAAA;AAAA,kCAAA;AAAA,gCACF;AAAA,8BAAA;AAAA,4BAAA,EACF,GA1BgBA,EAAE,GA2BpB;AAAA,0BAEJ,CAAC,EAAA,CACH;AAAA,wBAAA;AAAA,sBAAA;AAAA,sBAEDtC,KAAY,CAACI,KAAoBoB,EAAgB,YAChD,gBAAAK;AAAA,wBAAC;AAAA,wBAAA;AAAA,0BACC,WAAWF;AAAA,4BACT;AAAA,4BACAC,EAAO,kCAAkC;AAAA,0BAAA;AAAA,wBAC3C;AAAA,sBAAA;AAAA,oBACF;AAAA,kBAAA;AAAA,gBAAA;AAAA,gBAGH5B,KACC,gBAAA6B;AAAA,kBAACI;AAAA,kBAAA;AAAA,oBACC,MAAK;AAAA,oBACL,MAAK;AAAA,oBACL,WAAWN;AAAA,sBACT;AAAA,sBACAC,EAAO,+BAA+B;AAAA,oBAAA;AAAA,oBAExC,SAAS,MAAMvB,EAAoB,CAAC6B,MAAM,CAACA,CAAC;AAAA,oBAE3C,cAAmB,OAAO;AAAA,kBAAA;AAAA,gBAAA;AAAA,cAC7B;AAAA,YAAA;AAAA,UAAA;AAAA,UAGJ,gBAAAL;AAAA,YAACI;AAAA,YAAA;AAAA,cACC,MAAK;AAAA,cACL,MAAK;AAAA,cACL,SAASR;AAAA,cACT,WAAWE,EAAW,2BAA2BC,EAAO,yBAAyB,CAAC;AAAA,cACnF,UAAA;AAAA,YAAA;AAAA,UAAA;AAAA,QAED,EAAA,CACF;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAIR;"}
|