@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.
Files changed (309) hide show
  1. package/README.md +23 -15
  2. package/dist/agent-hub.d.ts +11 -0
  3. package/dist/agent-hub.js +144 -0
  4. package/dist/agent-hub.js.map +1 -0
  5. package/dist/components/AgentHub/Chat/Action/CreateButton.js +3 -3
  6. package/dist/components/AgentHub/Chat/Action/ManageActionButtons.js +4 -4
  7. package/dist/components/AgentHub/Chat/Action/SessionActionButtons.js +4 -4
  8. package/dist/components/AgentHub/Chat/Detail/ChatFollowUpSuggestions/index.js +29 -27
  9. package/dist/components/AgentHub/Chat/Detail/ChatFollowUpSuggestions/index.js.map +1 -1
  10. package/dist/components/AgentHub/Chat/Detail/ChatInput/index.js +19 -18
  11. package/dist/components/AgentHub/Chat/Detail/ChatInput/index.js.map +1 -1
  12. package/dist/components/AgentHub/Chat/Detail/CitationPanel/index.js +18 -17
  13. package/dist/components/AgentHub/Chat/Detail/CitationPanel/index.js.map +1 -1
  14. package/dist/components/AgentHub/Chat/Detail/MessageActions/index.js +23 -19
  15. package/dist/components/AgentHub/Chat/Detail/MessageActions/index.js.map +1 -1
  16. package/dist/components/AgentHub/Chat/Detail/MessageItem/index.js +23 -21
  17. package/dist/components/AgentHub/Chat/Detail/MessageItem/index.js.map +1 -1
  18. package/dist/components/AgentHub/Chat/List/ChatCard/index.js +7 -7
  19. package/dist/components/AgentHub/Chat/List/SessionSidebar/index.js +19 -17
  20. package/dist/components/AgentHub/Chat/List/SessionSidebar/index.js.map +1 -1
  21. package/dist/components/AgentHub/KnowledgeBase/Action/CreateButton.js +3 -3
  22. package/dist/components/AgentHub/KnowledgeBase/Action/ManageActionButtons.js +1 -1
  23. package/dist/components/AgentHub/KnowledgeBase/Detail/DocumentTable/index.js +16 -15
  24. package/dist/components/AgentHub/KnowledgeBase/Detail/DocumentTable/index.js.map +1 -1
  25. package/dist/components/AgentHub/KnowledgeBase/Detail/ParseStatusTag/index.js +7 -7
  26. package/dist/components/AgentHub/KnowledgeBase/List/KnowledgeCard/index.js +8 -8
  27. package/dist/components/AgentHub/Report/Detail/ReportHtmlPreview/index.js +1 -1
  28. package/dist/components/Auth/UserProfileCard/UserProfileCard.js +7 -7
  29. package/dist/components/File/FileItem/index.js +22 -20
  30. package/dist/components/File/FileItem/index.js.map +1 -1
  31. package/dist/components/File/FilePreview/index.js +11 -11
  32. package/dist/components/File/fileDisplay.js +41 -36
  33. package/dist/components/File/fileDisplay.js.map +1 -1
  34. package/dist/components/Filter/CommonFilter/index.js +20 -18
  35. package/dist/components/Filter/CommonFilter/index.js.map +1 -1
  36. package/dist/components/Filter/FilterSelect/index.js +90 -89
  37. package/dist/components/Filter/FilterSelect/index.js.map +1 -1
  38. package/dist/components/Filter/FilterTreeSelect/index.js +51 -48
  39. package/dist/components/Filter/FilterTreeSelect/index.js.map +1 -1
  40. package/dist/components/Filter/FilterTrigger/index.js +13 -11
  41. package/dist/components/Filter/FilterTrigger/index.js.map +1 -1
  42. package/dist/components/Form/PersonOptionRow/index.js +4 -4
  43. package/dist/components/Icons/ArrowLeft.d.ts +1 -0
  44. package/dist/components/Icons/ArrowLeft.js +7 -0
  45. package/dist/components/Icons/ArrowLeft.js.map +1 -0
  46. package/dist/components/Icons/ArrowLeftRight.d.ts +1 -0
  47. package/dist/components/Icons/ArrowLeftRight.js +7 -0
  48. package/dist/components/Icons/ArrowLeftRight.js.map +1 -0
  49. package/dist/components/Icons/BarChart3.d.ts +1 -0
  50. package/dist/components/Icons/BarChart3.js +7 -0
  51. package/dist/components/Icons/BarChart3.js.map +1 -0
  52. package/dist/components/Icons/Bell.d.ts +1 -0
  53. package/dist/components/Icons/Bell.js +7 -0
  54. package/dist/components/Icons/Bell.js.map +1 -0
  55. package/dist/components/Icons/BookOpen.d.ts +1 -0
  56. package/dist/components/Icons/BookOpen.js +7 -0
  57. package/dist/components/Icons/BookOpen.js.map +1 -0
  58. package/dist/components/Icons/Bot.d.ts +1 -0
  59. package/dist/components/Icons/Bot.js +7 -0
  60. package/dist/components/Icons/Bot.js.map +1 -0
  61. package/dist/components/Icons/Check.d.ts +1 -0
  62. package/dist/components/Icons/Check.js +7 -0
  63. package/dist/components/Icons/Check.js.map +1 -0
  64. package/dist/components/Icons/ChevronDown.d.ts +1 -0
  65. package/dist/components/Icons/ChevronDown.js +7 -0
  66. package/dist/components/Icons/ChevronDown.js.map +1 -0
  67. package/dist/components/Icons/ChevronLeft.d.ts +1 -0
  68. package/dist/components/Icons/ChevronLeft.js +7 -0
  69. package/dist/components/Icons/ChevronLeft.js.map +1 -0
  70. package/dist/components/Icons/ChevronRight.d.ts +1 -0
  71. package/dist/components/Icons/ChevronRight.js +7 -0
  72. package/dist/components/Icons/ChevronRight.js.map +1 -0
  73. package/dist/components/Icons/ChevronUp.d.ts +1 -0
  74. package/dist/components/Icons/ChevronUp.js +7 -0
  75. package/dist/components/Icons/ChevronUp.js.map +1 -0
  76. package/dist/components/Icons/CircleAlert.d.ts +1 -0
  77. package/dist/components/Icons/CircleAlert.js +7 -0
  78. package/dist/components/Icons/CircleAlert.js.map +1 -0
  79. package/dist/components/Icons/CircleCheck.d.ts +1 -0
  80. package/dist/components/Icons/CircleCheck.js +7 -0
  81. package/dist/components/Icons/CircleCheck.js.map +1 -0
  82. package/dist/components/Icons/CircleHelp.d.ts +1 -0
  83. package/dist/components/Icons/CircleHelp.js +7 -0
  84. package/dist/components/Icons/CircleHelp.js.map +1 -0
  85. package/dist/components/Icons/CirclePlay.d.ts +1 -0
  86. package/dist/components/Icons/CirclePlay.js +7 -0
  87. package/dist/components/Icons/CirclePlay.js.map +1 -0
  88. package/dist/components/Icons/CircleX.d.ts +1 -0
  89. package/dist/components/Icons/CircleX.js +7 -0
  90. package/dist/components/Icons/CircleX.js.map +1 -0
  91. package/dist/components/Icons/ClipboardCheck.d.ts +1 -0
  92. package/dist/components/Icons/ClipboardCheck.js +7 -0
  93. package/dist/components/Icons/ClipboardCheck.js.map +1 -0
  94. package/dist/components/Icons/Clock.d.ts +1 -0
  95. package/dist/components/Icons/Clock.js +7 -0
  96. package/dist/components/Icons/Clock.js.map +1 -0
  97. package/dist/components/Icons/CloudDownload.d.ts +1 -0
  98. package/dist/components/Icons/CloudDownload.js +7 -0
  99. package/dist/components/Icons/CloudDownload.js.map +1 -0
  100. package/dist/components/Icons/CloudUpload.d.ts +1 -0
  101. package/dist/components/Icons/CloudUpload.js +7 -0
  102. package/dist/components/Icons/CloudUpload.js.map +1 -0
  103. package/dist/components/Icons/Code.d.ts +1 -0
  104. package/dist/components/Icons/Code.js +7 -0
  105. package/dist/components/Icons/Code.js.map +1 -0
  106. package/dist/components/Icons/Copy.d.ts +1 -0
  107. package/dist/components/Icons/Copy.js +7 -0
  108. package/dist/components/Icons/Copy.js.map +1 -0
  109. package/dist/components/Icons/Crown.d.ts +1 -0
  110. package/dist/components/Icons/Crown.js +7 -0
  111. package/dist/components/Icons/Crown.js.map +1 -0
  112. package/dist/components/Icons/Database.d.ts +1 -0
  113. package/dist/components/Icons/Database.js +7 -0
  114. package/dist/components/Icons/Database.js.map +1 -0
  115. package/dist/components/Icons/Download.d.ts +1 -0
  116. package/dist/components/Icons/Download.js +7 -0
  117. package/dist/components/Icons/Download.js.map +1 -0
  118. package/dist/components/Icons/Eye.d.ts +1 -0
  119. package/dist/components/Icons/Eye.js +7 -0
  120. package/dist/components/Icons/Eye.js.map +1 -0
  121. package/dist/components/Icons/EyeOff.d.ts +1 -0
  122. package/dist/components/Icons/EyeOff.js +7 -0
  123. package/dist/components/Icons/EyeOff.js.map +1 -0
  124. package/dist/components/Icons/File.d.ts +1 -0
  125. package/dist/components/Icons/File.js +7 -0
  126. package/dist/components/Icons/File.js.map +1 -0
  127. package/dist/components/Icons/FileArchive.d.ts +1 -0
  128. package/dist/components/Icons/FileArchive.js +7 -0
  129. package/dist/components/Icons/FileArchive.js.map +1 -0
  130. package/dist/components/Icons/FileImage.d.ts +1 -0
  131. package/dist/components/Icons/FileImage.js +7 -0
  132. package/dist/components/Icons/FileImage.js.map +1 -0
  133. package/dist/components/Icons/FileSpreadsheet.d.ts +1 -0
  134. package/dist/components/Icons/FileSpreadsheet.js +7 -0
  135. package/dist/components/Icons/FileSpreadsheet.js.map +1 -0
  136. package/dist/components/Icons/FileText.d.ts +1 -0
  137. package/dist/components/Icons/FileText.js +7 -0
  138. package/dist/components/Icons/FileText.js.map +1 -0
  139. package/dist/components/Icons/Flag.d.ts +1 -0
  140. package/dist/components/Icons/Flag.js +7 -0
  141. package/dist/components/Icons/Flag.js.map +1 -0
  142. package/dist/components/Icons/Flame.d.ts +1 -0
  143. package/dist/components/Icons/Flame.js +7 -0
  144. package/dist/components/Icons/Flame.js.map +1 -0
  145. package/dist/components/Icons/Folder.d.ts +1 -0
  146. package/dist/components/Icons/Folder.js +7 -0
  147. package/dist/components/Icons/Folder.js.map +1 -0
  148. package/dist/components/Icons/FolderOpen.d.ts +1 -0
  149. package/dist/components/Icons/FolderOpen.js +7 -0
  150. package/dist/components/Icons/FolderOpen.js.map +1 -0
  151. package/dist/components/Icons/Hash.d.ts +1 -0
  152. package/dist/components/Icons/Hash.js +7 -0
  153. package/dist/components/Icons/Hash.js.map +1 -0
  154. package/dist/components/Icons/House.d.ts +1 -0
  155. package/dist/components/Icons/House.js +7 -0
  156. package/dist/components/Icons/House.js.map +1 -0
  157. package/dist/components/Icons/Import.d.ts +1 -0
  158. package/dist/components/Icons/Import.js +7 -0
  159. package/dist/components/Icons/Import.js.map +1 -0
  160. package/dist/components/Icons/Inbox.d.ts +1 -0
  161. package/dist/components/Icons/Inbox.js +7 -0
  162. package/dist/components/Icons/Inbox.js.map +1 -0
  163. package/dist/components/Icons/Info.d.ts +1 -0
  164. package/dist/components/Icons/Info.js +7 -0
  165. package/dist/components/Icons/Info.js.map +1 -0
  166. package/dist/components/Icons/LayoutDashboard.d.ts +1 -0
  167. package/dist/components/Icons/LayoutDashboard.js +7 -0
  168. package/dist/components/Icons/LayoutDashboard.js.map +1 -0
  169. package/dist/components/Icons/LayoutGrid.d.ts +1 -0
  170. package/dist/components/Icons/LayoutGrid.js +7 -0
  171. package/dist/components/Icons/LayoutGrid.js.map +1 -0
  172. package/dist/components/Icons/ListTodo.d.ts +1 -0
  173. package/dist/components/Icons/ListTodo.js +7 -0
  174. package/dist/components/Icons/ListTodo.js.map +1 -0
  175. package/dist/components/Icons/Loader2.d.ts +1 -0
  176. package/dist/components/Icons/Loader2.js +7 -0
  177. package/dist/components/Icons/Loader2.js.map +1 -0
  178. package/dist/components/Icons/Lock.d.ts +1 -0
  179. package/dist/components/Icons/Lock.js +7 -0
  180. package/dist/components/Icons/Lock.js.map +1 -0
  181. package/dist/components/Icons/LogOut.d.ts +1 -0
  182. package/dist/components/Icons/LogOut.js +7 -0
  183. package/dist/components/Icons/LogOut.js.map +1 -0
  184. package/dist/components/Icons/Maximize2.d.ts +1 -0
  185. package/dist/components/Icons/Maximize2.js +7 -0
  186. package/dist/components/Icons/Maximize2.js.map +1 -0
  187. package/dist/components/Icons/MessageCircle.d.ts +1 -0
  188. package/dist/components/Icons/MessageCircle.js +7 -0
  189. package/dist/components/Icons/MessageCircle.js.map +1 -0
  190. package/dist/components/Icons/MessageSquare.d.ts +1 -0
  191. package/dist/components/Icons/MessageSquare.js +7 -0
  192. package/dist/components/Icons/MessageSquare.js.map +1 -0
  193. package/dist/components/Icons/Minimize2.d.ts +1 -0
  194. package/dist/components/Icons/Minimize2.js +7 -0
  195. package/dist/components/Icons/Minimize2.js.map +1 -0
  196. package/dist/components/Icons/PanelLeftClose.d.ts +1 -0
  197. package/dist/components/Icons/PanelLeftClose.js +7 -0
  198. package/dist/components/Icons/PanelLeftClose.js.map +1 -0
  199. package/dist/components/Icons/PanelLeftOpen.d.ts +1 -0
  200. package/dist/components/Icons/PanelLeftOpen.js +7 -0
  201. package/dist/components/Icons/PanelLeftOpen.js.map +1 -0
  202. package/dist/components/Icons/Pause.d.ts +1 -0
  203. package/dist/components/Icons/Pause.js +7 -0
  204. package/dist/components/Icons/Pause.js.map +1 -0
  205. package/dist/components/Icons/Pencil.d.ts +1 -0
  206. package/dist/components/Icons/Pencil.js +7 -0
  207. package/dist/components/Icons/Pencil.js.map +1 -0
  208. package/dist/components/Icons/Plus.d.ts +1 -0
  209. package/dist/components/Icons/Plus.js +7 -0
  210. package/dist/components/Icons/Plus.js.map +1 -0
  211. package/dist/components/Icons/Presentation.d.ts +1 -0
  212. package/dist/components/Icons/Presentation.js +7 -0
  213. package/dist/components/Icons/Presentation.js.map +1 -0
  214. package/dist/components/Icons/RefreshCw.d.ts +1 -0
  215. package/dist/components/Icons/RefreshCw.js +7 -0
  216. package/dist/components/Icons/RefreshCw.js.map +1 -0
  217. package/dist/components/Icons/RotateCw.d.ts +1 -0
  218. package/dist/components/Icons/RotateCw.js +7 -0
  219. package/dist/components/Icons/RotateCw.js.map +1 -0
  220. package/dist/components/Icons/Send.d.ts +1 -0
  221. package/dist/components/Icons/Send.js +7 -0
  222. package/dist/components/Icons/Send.js.map +1 -0
  223. package/dist/components/Icons/Settings.d.ts +1 -0
  224. package/dist/components/Icons/Settings.js +7 -0
  225. package/dist/components/Icons/Settings.js.map +1 -0
  226. package/dist/components/Icons/Shield.d.ts +1 -0
  227. package/dist/components/Icons/Shield.js +7 -0
  228. package/dist/components/Icons/Shield.js.map +1 -0
  229. package/dist/components/Icons/ShieldCheck.d.ts +1 -0
  230. package/dist/components/Icons/ShieldCheck.js +7 -0
  231. package/dist/components/Icons/ShieldCheck.js.map +1 -0
  232. package/dist/components/Icons/SlidersHorizontal.d.ts +1 -0
  233. package/dist/components/Icons/SlidersHorizontal.js +7 -0
  234. package/dist/components/Icons/SlidersHorizontal.js.map +1 -0
  235. package/dist/components/Icons/Square.d.ts +1 -0
  236. package/dist/components/Icons/Square.js +7 -0
  237. package/dist/components/Icons/Square.js.map +1 -0
  238. package/dist/components/Icons/Star.d.ts +1 -0
  239. package/dist/components/Icons/Star.js +7 -0
  240. package/dist/components/Icons/Star.js.map +1 -0
  241. package/dist/components/Icons/ThumbsDown.d.ts +1 -0
  242. package/dist/components/Icons/ThumbsDown.js +7 -0
  243. package/dist/components/Icons/ThumbsDown.js.map +1 -0
  244. package/dist/components/Icons/ThumbsUp.d.ts +1 -0
  245. package/dist/components/Icons/ThumbsUp.js +7 -0
  246. package/dist/components/Icons/ThumbsUp.js.map +1 -0
  247. package/dist/components/Icons/Trash2.d.ts +1 -0
  248. package/dist/components/Icons/Trash2.js +7 -0
  249. package/dist/components/Icons/Trash2.js.map +1 -0
  250. package/dist/components/Icons/Trophy.d.ts +1 -0
  251. package/dist/components/Icons/Trophy.js +7 -0
  252. package/dist/components/Icons/Trophy.js.map +1 -0
  253. package/dist/components/Icons/Undo2.d.ts +1 -0
  254. package/dist/components/Icons/Undo2.js +7 -0
  255. package/dist/components/Icons/Undo2.js.map +1 -0
  256. package/dist/components/Icons/Upload.d.ts +1 -0
  257. package/dist/components/Icons/Upload.js +7 -0
  258. package/dist/components/Icons/Upload.js.map +1 -0
  259. package/dist/components/Icons/User.d.ts +1 -0
  260. package/dist/components/Icons/User.js +7 -0
  261. package/dist/components/Icons/User.js.map +1 -0
  262. package/dist/components/Icons/UserPlus.d.ts +1 -0
  263. package/dist/components/Icons/UserPlus.js +7 -0
  264. package/dist/components/Icons/UserPlus.js.map +1 -0
  265. package/dist/components/Icons/UserRoundCog.d.ts +1 -0
  266. package/dist/components/Icons/UserRoundCog.js +7 -0
  267. package/dist/components/Icons/UserRoundCog.js.map +1 -0
  268. package/dist/components/Icons/Users.d.ts +1 -0
  269. package/dist/components/Icons/Users.js +7 -0
  270. package/dist/components/Icons/Users.js.map +1 -0
  271. package/dist/components/Icons/X.d.ts +1 -0
  272. package/dist/components/Icons/X.js +7 -0
  273. package/dist/components/Icons/X.js.map +1 -0
  274. package/dist/components/Icons/createIcon.d.ts +9 -0
  275. package/dist/components/Icons/createIcon.js +32 -0
  276. package/dist/components/Icons/createIcon.js.map +1 -0
  277. package/dist/components/Icons/index.d.ts +80 -90
  278. package/dist/components/Icons/registry.d.ts +6 -0
  279. package/dist/components/Icons/registry.js +239 -0
  280. package/dist/components/Icons/registry.js.map +1 -0
  281. package/dist/components/InteractiveBlock/InteractiveBlock.js +6 -6
  282. package/dist/components/Layout/AgentAppShell/AgentAppShell.js +24 -23
  283. package/dist/components/Layout/AgentAppShell/AgentAppShell.js.map +1 -1
  284. package/dist/components/Layout/PageHeaderLayout/index.js +7 -7
  285. package/dist/components/Modal/Modal/index.js +8 -8
  286. package/dist/components/Modal/StepModal/index.js +9 -9
  287. package/dist/components/OrgTree/OrgTree.js +41 -39
  288. package/dist/components/OrgTree/OrgTree.js.map +1 -1
  289. package/dist/components/StateBar/StateBar.js +4 -4
  290. package/dist/components/Table/ColumnConfigPanel.js +13 -10
  291. package/dist/components/Table/ColumnConfigPanel.js.map +1 -1
  292. package/dist/components/Table/Table.js +7 -7
  293. package/dist/components/Tour/AppTour/index.js +10 -10
  294. package/dist/components/Upload/index.js +76 -72
  295. package/dist/components/Upload/index.js.map +1 -1
  296. package/dist/file.d.ts +5 -0
  297. package/dist/file.js +24 -0
  298. package/dist/file.js.map +1 -0
  299. package/dist/index.d.ts +3 -1
  300. package/dist/index.js +615 -537
  301. package/dist/index.js.map +1 -1
  302. package/dist/llm.d.ts +5 -0
  303. package/dist/llm.js +8 -0
  304. package/dist/llm.js.map +1 -0
  305. package/dist/marsun-components-core.css +1 -1
  306. package/dist/styles/global.css +1 -1
  307. package/package.json +15 -5
  308. package/dist/components/Icons/index.js +0 -268
  309. 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 { CloudDownload as N } from "../../Icons/index.js";
4
- import g from "../../Tag/SemanticTag.js";
5
- import { Button as T } from "antd";
6
- import { normalizeFileDisplayItem as b, getFileTypeName as z, getFileIcon as C } from "../fileDisplay.js";
7
- import { getPreviewKind as P, getFileTypeTagColor as U } from "../previewKind.js";
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 = b(l), s = x(e, n), m = p ?? s, v = !!(a || m), w = P(e), h = z(e.name, e.mimeType), u = () => {
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: C(e.name, e.mimeType) }),
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(g, { color: U(w), children: h }),
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(T, { type: "link", icon: /* @__PURE__ */ i(N, {}), onClick: u, children: "下载" })
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
- k,
44
+ U,
45
45
  {
46
46
  file: e,
47
47
  previewUrl: s,
@@ -1,71 +1,76 @@
1
- import { jsx as m } from "react/jsx-runtime";
2
- import { FileArchive as p, FileImage as r, Presentation as d, FileSpreadsheet as s, FileText as c, File as u } from "../Icons/index.js";
3
- const x = {
4
- pdf: c,
5
- doc: c,
6
- docx: c,
7
- txt: c,
8
- md: c,
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: d,
13
- pptx: d,
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: p,
20
- rar: p,
21
- "7z": p
24
+ zip: c,
25
+ rar: c,
26
+ "7z": c
22
27
  };
23
- function a(e) {
28
+ function m(e) {
24
29
  const t = e.lastIndexOf(".");
25
30
  return t >= 0 ? e.slice(t + 1).toLowerCase() : "";
26
31
  }
27
- function f(e) {
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 i = new URL(t, "http://placeholder.local").pathname.split("/").filter(Boolean).pop() ?? "", l = decodeURIComponent(i);
35
- if (l) return l;
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 n = t.split(/[/?#]/).filter(Boolean).pop() ?? "";
43
+ const o = t.split(/[/?#]/).filter(Boolean).pop() ?? "";
39
44
  try {
40
- return decodeURIComponent(n) || "未命名文件";
45
+ return decodeURIComponent(o) || "未命名文件";
41
46
  } catch {
42
- return n || "未命名文件";
47
+ return o || "未命名文件";
43
48
  }
44
49
  }
45
- function h(e) {
46
- var i;
47
- const t = ((i = e.name) == null ? void 0 : i.trim()) || (e.url ? F(e.url) : "未命名文件"), n = e.extension ?? a(t), o = f(n) || void 0;
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: o
56
+ extension: n
52
57
  };
53
58
  }
54
- function C(e, t) {
55
- const n = a(e), o = x[n] ?? u;
56
- return /* @__PURE__ */ m(o, {});
59
+ function y(e, t) {
60
+ const o = m(e), n = u[o] ?? f;
61
+ return /* @__PURE__ */ d(n, {});
57
62
  }
58
- function E(e, t) {
59
- var o;
60
- const n = a(e);
61
- return n ? n.toUpperCase() : t ? ((o = t.split("/").pop()) == null ? void 0 : o.toUpperCase()) ?? "FILE" : "FILE";
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
- a as getFileExtension,
65
- C as getFileIcon,
66
- E as getFileTypeName,
67
- f as normalizeExtension,
68
- h as normalizeFileDisplayItem,
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":";;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
+ {"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 { ChevronUp as W, ChevronDown as Y, X as Z } from "../../Icons/index.js";
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 le } from "../FilterLayoutContext.js";
8
- import { resolveFilterVisible as te } from "../types.js";
9
- import { useFilterLayoutMode as re } from "../useFilterLayoutMode.js";
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 me, FilterProvider as se } from "../useFilterState.js";
12
- import ce from "../../Tag/SemanticTag.js";
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 te({ display: i.display, hidden: i.hidden }, c);
23
+ return ee({ display: i.display, hidden: i.hidden }, c);
22
24
  });
23
25
  }
24
- const Se = ({
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 } = re({
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 } = me(), A = h(
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(le, { isMobile: t, children: /* @__PURE__ */ l(se, { ctx: A, children: /* @__PURE__ */ m("div", { className: o("common-filter-content", e["common-filter-content"]), children: [
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(W, { size: 12 }) : /* @__PURE__ */ l(Y, { size: 12 })
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(ee, { size: [8, 8], wrap: !t || n, children: F.map((r) => {
173
- const { display: u, truncated: q } = ne(r.valueLabel, j), J = q ? /* @__PURE__ */ l(oe, { title: r.valueLabel, children: /* @__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(ce, { color: "primary", children: /* @__PURE__ */ m(
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
- Z,
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
- Se as default
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":"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"}