@hkyhy/marsun-components-core 0.1.12 → 0.1.17

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 (160) hide show
  1. package/README.md +31 -6
  2. package/dist/components/AgentHub/Chat/Action/CreateButton.js +8 -0
  3. package/dist/components/AgentHub/Chat/Action/CreateButton.js.map +1 -0
  4. package/dist/components/AgentHub/Chat/Action/ManageActionButtons.js +20 -0
  5. package/dist/components/AgentHub/Chat/Action/ManageActionButtons.js.map +1 -0
  6. package/dist/components/AgentHub/Chat/Action/SessionActionButtons.js +24 -0
  7. package/dist/components/AgentHub/Chat/Action/SessionActionButtons.js.map +1 -0
  8. package/dist/components/AgentHub/Chat/Action/handlers.d.ts +0 -5
  9. package/dist/components/AgentHub/Chat/Detail/ChatInput/index.js +65 -0
  10. package/dist/components/AgentHub/Chat/Detail/ChatInput/index.js.map +1 -0
  11. package/dist/components/AgentHub/Chat/Detail/ChatInput/style.module.scss.js +12 -0
  12. package/dist/components/AgentHub/Chat/Detail/ChatInput/style.module.scss.js.map +1 -0
  13. package/dist/components/AgentHub/Chat/Detail/ChatPanel/index.d.ts +31 -0
  14. package/dist/components/AgentHub/Chat/Detail/ChatPanel/index.js +85 -0
  15. package/dist/components/AgentHub/Chat/Detail/ChatPanel/index.js.map +1 -0
  16. package/dist/components/AgentHub/Chat/Detail/ChatPanel/style.module.scss.js +14 -0
  17. package/dist/components/AgentHub/Chat/Detail/ChatPanel/style.module.scss.js.map +1 -0
  18. package/dist/components/AgentHub/Chat/Detail/ChatSuggestionRow/index.d.ts +9 -0
  19. package/dist/components/AgentHub/Chat/Detail/ChatSuggestionRow/index.js +22 -0
  20. package/dist/components/AgentHub/Chat/Detail/ChatSuggestionRow/index.js.map +1 -0
  21. package/dist/components/AgentHub/Chat/Detail/ChatSuggestionRow/style.module.scss.js +8 -0
  22. package/dist/components/AgentHub/Chat/Detail/ChatSuggestionRow/style.module.scss.js.map +1 -0
  23. package/dist/components/AgentHub/Chat/Detail/CitationContent/index.js +21 -0
  24. package/dist/components/AgentHub/Chat/Detail/CitationContent/index.js.map +1 -0
  25. package/dist/components/AgentHub/Chat/Detail/CitationContent/style.module.scss.js +8 -0
  26. package/dist/components/AgentHub/Chat/Detail/CitationContent/style.module.scss.js.map +1 -0
  27. package/dist/components/AgentHub/Chat/Detail/CitationInlineBadge/index.js +17 -0
  28. package/dist/components/AgentHub/Chat/Detail/CitationInlineBadge/index.js.map +1 -0
  29. package/dist/components/AgentHub/Chat/Detail/CitationInlineBadge/style.module.scss.js +7 -0
  30. package/dist/components/AgentHub/Chat/Detail/CitationInlineBadge/style.module.scss.js.map +1 -0
  31. package/dist/components/AgentHub/Chat/Detail/CitationMarkdownContent/index.js +68 -0
  32. package/dist/components/AgentHub/Chat/Detail/CitationMarkdownContent/index.js.map +1 -0
  33. package/dist/components/AgentHub/Chat/Detail/CitationMarkdownContent/style.module.scss.js +7 -0
  34. package/dist/components/AgentHub/Chat/Detail/CitationMarkdownContent/style.module.scss.js.map +1 -0
  35. package/dist/components/AgentHub/Chat/Detail/CitationPanel/index.js +247 -0
  36. package/dist/components/AgentHub/Chat/Detail/CitationPanel/index.js.map +1 -0
  37. package/dist/components/AgentHub/Chat/Detail/CitationPanel/style.module.scss.js +31 -0
  38. package/dist/components/AgentHub/Chat/Detail/CitationPanel/style.module.scss.js.map +1 -0
  39. package/dist/components/AgentHub/Chat/Detail/MermaidBlock/index.js +43 -0
  40. package/dist/components/AgentHub/Chat/Detail/MermaidBlock/index.js.map +1 -0
  41. package/dist/components/AgentHub/Chat/Detail/MermaidBlock/style.module.scss.js +8 -0
  42. package/dist/components/AgentHub/Chat/Detail/MermaidBlock/style.module.scss.js.map +1 -0
  43. package/dist/components/AgentHub/Chat/Detail/MessageActions/index.js +103 -0
  44. package/dist/components/AgentHub/Chat/Detail/MessageActions/index.js.map +1 -0
  45. package/dist/components/AgentHub/Chat/Detail/MessageActions/style.module.scss.js +14 -0
  46. package/dist/components/AgentHub/Chat/Detail/MessageActions/style.module.scss.js.map +1 -0
  47. package/dist/components/AgentHub/Chat/Detail/MessageEditPopover/index.js +58 -0
  48. package/dist/components/AgentHub/Chat/Detail/MessageEditPopover/index.js.map +1 -0
  49. package/dist/components/AgentHub/Chat/Detail/MessageEditPopover/style.module.scss.js +9 -0
  50. package/dist/components/AgentHub/Chat/Detail/MessageEditPopover/style.module.scss.js.map +1 -0
  51. package/dist/components/AgentHub/Chat/Detail/MessageItem/index.js +309 -0
  52. package/dist/components/AgentHub/Chat/Detail/MessageItem/index.js.map +1 -0
  53. package/dist/components/AgentHub/Chat/Detail/MessageItem/style.module.scss.js +24 -0
  54. package/dist/components/AgentHub/Chat/Detail/MessageItem/style.module.scss.js.map +1 -0
  55. package/dist/components/AgentHub/Chat/Detail/ThinkingSection/index.js +122 -0
  56. package/dist/components/AgentHub/Chat/Detail/ThinkingSection/index.js.map +1 -0
  57. package/dist/components/AgentHub/Chat/Detail/ThinkingSection/style.module.scss.js +25 -0
  58. package/dist/components/AgentHub/Chat/Detail/ThinkingSection/style.module.scss.js.map +1 -0
  59. package/dist/components/AgentHub/Chat/Detail/index.d.ts +12 -0
  60. package/dist/components/AgentHub/Chat/Form/Form.js +37 -0
  61. package/dist/components/AgentHub/Chat/Form/Form.js.map +1 -0
  62. package/dist/components/AgentHub/Chat/List/ChatCard/index.js +86 -0
  63. package/dist/components/AgentHub/Chat/List/ChatCard/index.js.map +1 -0
  64. package/dist/components/AgentHub/Chat/List/ChatCard/style.module.scss.js +25 -0
  65. package/dist/components/AgentHub/Chat/List/ChatCard/style.module.scss.js.map +1 -0
  66. package/dist/components/AgentHub/Chat/List/FilterBar.js +17 -0
  67. package/dist/components/AgentHub/Chat/List/FilterBar.js.map +1 -0
  68. package/dist/components/AgentHub/Chat/List/SessionSidebar/index.js +156 -0
  69. package/dist/components/AgentHub/Chat/List/SessionSidebar/index.js.map +1 -0
  70. package/dist/components/AgentHub/Chat/List/SessionSidebar/style.module.scss.js +28 -0
  71. package/dist/components/AgentHub/Chat/List/SessionSidebar/style.module.scss.js.map +1 -0
  72. package/dist/components/AgentHub/Chat/Modal/FormModal.js +58 -0
  73. package/dist/components/AgentHub/Chat/Modal/FormModal.js.map +1 -0
  74. package/dist/components/AgentHub/Chat/hooks/useAutoScrollToBottom.js +35 -0
  75. package/dist/components/AgentHub/Chat/hooks/useAutoScrollToBottom.js.map +1 -0
  76. package/dist/components/AgentHub/Chat/hooks/useChat.js +51 -0
  77. package/dist/components/AgentHub/Chat/hooks/useChat.js.map +1 -0
  78. package/dist/components/AgentHub/Chat/hooks/useChatSessions.js +60 -0
  79. package/dist/components/AgentHub/Chat/hooks/useChatSessions.js.map +1 -0
  80. package/dist/components/AgentHub/Chat/hooks/useSSECompletion.js +69 -0
  81. package/dist/components/AgentHub/Chat/hooks/useSSECompletion.js.map +1 -0
  82. package/dist/components/AgentHub/Chat/hooks/useTypewriter.js +39 -0
  83. package/dist/components/AgentHub/Chat/hooks/useTypewriter.js.map +1 -0
  84. package/dist/components/AgentHub/Chat/index.d.ts +1 -0
  85. package/dist/components/AgentHub/Chat/utils/citationContent.js +169 -0
  86. package/dist/components/AgentHub/Chat/utils/citationContent.js.map +1 -0
  87. package/dist/components/AgentHub/Chat/utils/messageContent.js +85 -0
  88. package/dist/components/AgentHub/Chat/utils/messageContent.js.map +1 -0
  89. package/dist/components/AgentHub/Chat/utils/sanitizeMermaidChart.js +22 -0
  90. package/dist/components/AgentHub/Chat/utils/sanitizeMermaidChart.js.map +1 -0
  91. package/dist/components/AgentHub/Chat/utils/sessionMessages.js +151 -0
  92. package/dist/components/AgentHub/Chat/utils/sessionMessages.js.map +1 -0
  93. package/dist/components/AgentHub/KnowledgeBase/Action/CreateButton.js +8 -0
  94. package/dist/components/AgentHub/KnowledgeBase/Action/CreateButton.js.map +1 -0
  95. package/dist/components/AgentHub/KnowledgeBase/Action/ManageActionButtons.js +20 -0
  96. package/dist/components/AgentHub/KnowledgeBase/Action/ManageActionButtons.js.map +1 -0
  97. package/dist/components/AgentHub/KnowledgeBase/Detail/DocumentTable/index.js +110 -0
  98. package/dist/components/AgentHub/KnowledgeBase/Detail/DocumentTable/index.js.map +1 -0
  99. package/dist/components/AgentHub/KnowledgeBase/Detail/DocumentTable/style.module.scss.js +7 -0
  100. package/dist/components/AgentHub/KnowledgeBase/Detail/DocumentTable/style.module.scss.js.map +1 -0
  101. package/dist/components/AgentHub/KnowledgeBase/Detail/ParseStatusTag/index.js +18 -0
  102. package/dist/components/AgentHub/KnowledgeBase/Detail/ParseStatusTag/index.js.map +1 -0
  103. package/dist/components/AgentHub/KnowledgeBase/Detail/ParseStatusTag/style.module.scss.js +7 -0
  104. package/dist/components/AgentHub/KnowledgeBase/Detail/ParseStatusTag/style.module.scss.js.map +1 -0
  105. package/dist/components/AgentHub/KnowledgeBase/Form/Form.js +31 -0
  106. package/dist/components/AgentHub/KnowledgeBase/Form/Form.js.map +1 -0
  107. package/dist/components/AgentHub/KnowledgeBase/List/FilterBar.js +17 -0
  108. package/dist/components/AgentHub/KnowledgeBase/List/FilterBar.js.map +1 -0
  109. package/dist/components/AgentHub/KnowledgeBase/List/KnowledgeCard/index.js +118 -0
  110. package/dist/components/AgentHub/KnowledgeBase/List/KnowledgeCard/index.js.map +1 -0
  111. package/dist/components/AgentHub/KnowledgeBase/List/KnowledgeCard/style.module.scss.js +23 -0
  112. package/dist/components/AgentHub/KnowledgeBase/List/KnowledgeCard/style.module.scss.js.map +1 -0
  113. package/dist/components/AgentHub/KnowledgeBase/Modal/FormModal.js +47 -0
  114. package/dist/components/AgentHub/KnowledgeBase/Modal/FormModal.js.map +1 -0
  115. package/dist/components/AgentHub/KnowledgeBase/constants/types.js +28 -0
  116. package/dist/components/AgentHub/KnowledgeBase/constants/types.js.map +1 -0
  117. package/dist/components/AgentHub/KnowledgeBase/hooks/useKBDocuments.js +21 -0
  118. package/dist/components/AgentHub/KnowledgeBase/hooks/useKBDocuments.js.map +1 -0
  119. package/dist/components/AgentHub/KnowledgeBase/hooks/useKnowledgeBase.js +32 -0
  120. package/dist/components/AgentHub/KnowledgeBase/hooks/useKnowledgeBase.js.map +1 -0
  121. package/dist/components/Filter/CommonFilter/index.js +34 -30
  122. package/dist/components/Filter/CommonFilter/index.js.map +1 -1
  123. package/dist/components/Filter/CommonFilter/style.module.scss.js +17 -16
  124. package/dist/components/Filter/CommonFilter/style.module.scss.js.map +1 -1
  125. package/dist/components/Filter/FilterDateRange/index.d.ts +2 -0
  126. package/dist/components/Filter/FilterDateRange/index.js +62 -51
  127. package/dist/components/Filter/FilterDateRange/index.js.map +1 -1
  128. package/dist/components/Filter/FilterSelect/index.d.ts +8 -2
  129. package/dist/components/Filter/FilterSelect/index.js +163 -116
  130. package/dist/components/Filter/FilterSelect/index.js.map +1 -1
  131. package/dist/components/Filter/FilterSelect/style.module.scss.js +12 -10
  132. package/dist/components/Filter/FilterSelect/style.module.scss.js.map +1 -1
  133. package/dist/components/Filter/FilterTrigger/index.d.ts +2 -2
  134. package/dist/components/Filter/FilterTrigger/index.js.map +1 -1
  135. package/dist/components/Filter/FilterTrigger/style.module.scss.js +4 -4
  136. package/dist/components/Filter/index.d.ts +1 -1
  137. package/dist/components/Filter/types.d.ts +2 -0
  138. package/dist/components/Filter/types.js.map +1 -1
  139. package/dist/components/Filter/useFilterState.d.ts +2 -0
  140. package/dist/components/Filter/useFilterState.js +27 -26
  141. package/dist/components/Filter/useFilterState.js.map +1 -1
  142. package/dist/components/Icons/index.js +153 -145
  143. package/dist/components/Icons/index.js.map +1 -1
  144. package/dist/components/TooltipInfo/TooltipInfo.js +29 -20
  145. package/dist/components/TooltipInfo/TooltipInfo.js.map +1 -1
  146. package/dist/index.d.ts +3 -1
  147. package/dist/index.js +295 -186
  148. package/dist/index.js.map +1 -1
  149. package/dist/marsun-components-core.css +1 -1
  150. package/dist/styles/global.css +1 -1
  151. package/dist/theme/constants.d.ts +47 -1
  152. package/dist/theme/constants.js +50 -5
  153. package/dist/theme/constants.js.map +1 -1
  154. package/dist/theme/index.d.ts +2 -2
  155. package/dist/theme/index.js +8 -6
  156. package/dist/theme/theme.d.ts +10 -0
  157. package/dist/theme/theme.js +24 -34
  158. package/dist/theme/theme.js.map +1 -1
  159. package/dist/theme/tokens.css +139 -0
  160. package/package.json +7 -3
@@ -1,149 +1,196 @@
1
- import { jsxs as h, jsx as d } from "react/jsx-runtime";
2
- import { Check as H, X as J } from "../../Icons/index.js";
3
- import { Input as Q, Checkbox as U, Space as W } from "antd";
4
- import { useState as y, useRef as Y, useMemo as P, useEffect as j } from "react";
5
- import Z from "../../Form/PersonOptionRow/index.js";
6
- import _ from "../FilterPopover/index.js";
7
- import { resolveFilterVisible as A } from "../types.js";
8
- import { useFilterRegister as C } from "../useFilterState.js";
9
- import a from "./style.module.scss.js";
10
- import f from "classnames";
11
- const { Search: K } = Q;
12
- function V(t) {
13
- const i = [t.label];
14
- return t.departmentName && i.push(t.departmentName), i.join(" · ");
1
+ import { jsxs as N, jsx as v } from "react/jsx-runtime";
2
+ import { Check as W, X as Y } from "../../Icons/index.js";
3
+ import { Input as Z, Checkbox as _, Space as K } from "antd";
4
+ import { useState as D, useRef as V, useMemo as z, useEffect as B } from "react";
5
+ import ee from "../../Form/PersonOptionRow/index.js";
6
+ import re from "../FilterPopover/index.js";
7
+ import { resolveFilterVisible as E } from "../types.js";
8
+ import { useFilterRegister as te } from "../useFilterState.js";
9
+ import m from "./style.module.scss.js";
10
+ import h from "classnames";
11
+ const { Search: se } = Z;
12
+ function ne(r) {
13
+ const t = [r.label];
14
+ return r.departmentName && t.push(r.departmentName), t.join(" · ");
15
15
  }
16
- function ee(t, i) {
17
- const o = i.toLowerCase();
18
- return [t.label, t.departmentName, t.email, t.phone, t.employeeId].filter(Boolean).some((m) => String(m).toLowerCase().includes(o));
16
+ function ce(r, t) {
17
+ const o = t.toLowerCase();
18
+ return [r.label, r.departmentName, r.email, r.phone, r.employeeId].filter(Boolean).some((l) => String(l).toLowerCase().includes(o));
19
19
  }
20
- function D(t, i, o) {
21
- if (o) return t ?? [];
22
- if (!(i !== void 0 && t === i))
23
- return t;
20
+ function ie(r, t) {
21
+ if (!(r != null && r.length) && !(t != null && t.length)) return !0;
22
+ if (!r || !t || r.length !== t.length) return !1;
23
+ const o = [...r].map(String).sort(), l = [...t].map(String).sort();
24
+ return o.every((c, d) => c === l[d]);
24
25
  }
25
- const me = ({
26
- filterKey: t,
27
- label: i,
26
+ function I(r, t, o, l) {
27
+ if (l) {
28
+ const c = Array.isArray(r) ? r : r != null && r !== "" ? [r] : [];
29
+ return o != null && o.length && ie(c, o) ? [] : c;
30
+ }
31
+ if (!(t !== void 0 && r === t))
32
+ return r;
33
+ }
34
+ function oe(r, t, o, l) {
35
+ if (o) {
36
+ const d = r || [];
37
+ return d.length > 0 ? d.map((u) => {
38
+ var S;
39
+ return ((S = t.find((s) => String(s.value) === String(u))) == null ? void 0 : S.label) ?? String(u);
40
+ }).join("、") : "";
41
+ }
42
+ if (r == null) return "";
43
+ const c = t.find((d) => String(d.value) === String(r));
44
+ return c ? l ? ne(c) : c.label : String(r);
45
+ }
46
+ const Ne = ({
47
+ filterKey: r,
48
+ label: t,
28
49
  options: o = [],
29
- value: m,
30
- onChange: n,
31
- defaultValue: v,
32
- searchable: T = !1,
50
+ value: l,
51
+ onChange: c,
52
+ defaultValue: d,
53
+ defaultValues: u,
54
+ searchable: S = !1,
33
55
  multiple: s = !1,
34
- variant: z = "default",
35
- active: I,
36
- hidden: w,
37
- display: L
56
+ minSelection: g,
57
+ variant: M = "default",
58
+ active: q,
59
+ hidden: C,
60
+ display: O
38
61
  }) => {
39
- const u = z === "person", [M, x] = y(!1), [N, O] = y(""), B = D(m, v, s), [r, b] = y(
40
- B ?? (s ? [] : void 0)
41
- ), S = C(), p = Y(n);
42
- p.current = n;
43
- const R = P(
44
- () => () => {
45
- var e;
46
- (e = p.current) == null || e.call(p, void 0);
47
- },
48
- []
62
+ const x = M === "person", [X, b] = D(!1), [y, R] = D(""), n = I(l, d, u, s), [a, k] = D(
63
+ n ?? (s ? [] : void 0)
64
+ ), L = te(), w = V(c);
65
+ w.current = c;
66
+ const F = z(() => {
67
+ const e = Array.isArray(n) ? n : n != null && n !== "" ? [n] : [], i = !s || g == null || e.length > g;
68
+ return () => {
69
+ var f;
70
+ i && ((f = w.current) == null || f.call(w, void 0));
71
+ };
72
+ }, [n, g, s]), j = () => {
73
+ k(n ?? (s ? [] : void 0)), R("");
74
+ };
75
+ B(() => {
76
+ const e = I(l, d, u, s);
77
+ k(e ?? (s ? [] : void 0)), (e == null || Array.isArray(e) && e.length === 0) && R("");
78
+ }, [l, d, u, s]);
79
+ const P = z(
80
+ () => oe(n, o, s, x),
81
+ [o, n, s, x]
49
82
  );
50
- j(() => {
51
- const e = D(m, v, s);
52
- b(e ?? (s ? [] : void 0)), (e == null || Array.isArray(e) && e.length === 0) && O("");
53
- }, [m, v, s]);
54
- const g = P(() => {
55
- if (s) {
56
- const c = r || [];
57
- return c.length > 0 ? c.map((l) => {
58
- var k;
59
- return ((k = o.find((G) => G.value === l)) == null ? void 0 : k.label) ?? String(l);
60
- }).join("、") : "";
61
- }
62
- if (r == null) return "";
63
- const e = o.find((c) => c.value === r);
64
- return e ? u ? V(e) : e.label : String(r);
65
- }, [o, r, s, u]);
66
- if (j(() => {
67
- if (!S) return;
68
- if (!A({ display: L, hidden: w }, { filterKey: t, label: i, value: m })) {
69
- S.unregister(t);
83
+ if (B(() => {
84
+ if (!L) return;
85
+ if (!E({ display: O, hidden: C }, { filterKey: r, label: t, value: l })) {
86
+ L.unregister(r);
70
87
  return;
71
88
  }
72
- g && !s ? S.register(t, {
73
- label: i,
74
- valueLabel: g,
75
- onRemove: R
76
- }) : S.unregister(t);
77
- }, [g, t, i, w, L, s, R]), !A({ display: L, hidden: w }, { filterKey: t, label: i, value: m })) return null;
78
- const F = N ? o.filter(
79
- (e) => u ? ee(e, N) : e.label.toLowerCase().includes(N.toLowerCase())
80
- ) : o, E = () => {
81
- n == null || n(r), x(!1);
82
- }, X = () => {
83
- b(s ? [] : void 0), O(""), n == null || n(void 0), x(!1);
84
- }, $ = (e) => {
89
+ if (P) {
90
+ const i = Array.isArray(n) ? n : n != null && n !== "" ? [n] : [], f = !s || g == null || i.length > g;
91
+ L.register(r, {
92
+ label: t,
93
+ valueLabel: P,
94
+ onRemove: F,
95
+ removable: f
96
+ });
97
+ } else
98
+ L.unregister(r);
99
+ }, [P, r, t, C, O, F]), !E({ display: O, hidden: C }, { filterKey: r, label: t, value: l })) return null;
100
+ const T = y ? o.filter(
101
+ (e) => x ? ce(e, y) : e.label.toLowerCase().includes(y.toLowerCase())
102
+ ) : o, $ = () => {
103
+ c == null || c(a), b(!1);
104
+ }, G = () => {
105
+ j(), b(!1);
106
+ }, H = (e) => {
107
+ !e && s && j(), b(e);
108
+ }, J = (e) => {
85
109
  if (!s) {
86
- const c = v !== void 0 && e === v;
87
- let l;
88
- r === e || c ? l = void 0 : l = e, b(l), n == null || n(l), x(!1);
110
+ const i = d !== void 0 && e === d;
111
+ let f;
112
+ a === e || i ? f = void 0 : f = e, k(f), c == null || c(f), b(!1);
89
113
  }
90
- }, q = (e) => {
91
- const c = r || [], l = c.includes(e) ? c.filter((k) => k !== e) : [...c, e];
92
- b(l);
93
- };
94
- return /* @__PURE__ */ h(
95
- _,
114
+ }, p = (e) => {
115
+ const i = a || [];
116
+ if (i.includes(e) && g != null && i.length <= g)
117
+ return;
118
+ const f = i.includes(e) ? i.filter((A) => A !== e) : [...i, e];
119
+ k(f);
120
+ }, Q = s ? Array.isArray(n) && n.length > 0 : n != null && n !== "";
121
+ return /* @__PURE__ */ N(
122
+ re,
96
123
  {
97
- label: i,
98
- active: I || (s ? Array.isArray(r) && r.length > 0 : r != null && r !== ""),
99
- open: M,
100
- onOpenChange: x,
101
- onConfirm: s ? E : void 0,
102
- onReset: s ? X : void 0,
124
+ label: t,
125
+ active: q || Q,
126
+ open: X,
127
+ onOpenChange: H,
128
+ onConfirm: s ? $ : void 0,
129
+ onReset: s ? G : void 0,
103
130
  children: [
104
- T && /* @__PURE__ */ d(
105
- K,
131
+ S && /* @__PURE__ */ v(
132
+ se,
106
133
  {
107
- placeholder: `搜索${i}`,
134
+ placeholder: `搜索${t}`,
108
135
  allowClear: !0,
109
136
  size: "middle",
110
- className: f("filter-select-search", a["filter-select-search"]),
111
- value: N,
112
- onChange: (e) => O(e.target.value)
137
+ className: h("filter-select-search", m["filter-select-search"]),
138
+ value: y,
139
+ onChange: (e) => R(e.target.value)
113
140
  }
114
141
  ),
115
- /* @__PURE__ */ h("div", { className: f("filter-select-options", a["filter-select-options"]), children: [
116
- F.map((e) => /* @__PURE__ */ h(
142
+ /* @__PURE__ */ N("div", { className: h("filter-select-options", m["filter-select-options"]), children: [
143
+ T.map((e) => /* @__PURE__ */ N(
117
144
  "div",
118
145
  {
119
- className: f(
146
+ className: h(
120
147
  "filter-select-option",
121
- a["filter-select-option"],
122
- !s && r === e.value && f("filter-select-option-selected", a["filter-select-option-selected"])
148
+ m["filter-select-option"],
149
+ !s && a === e.value && h("filter-select-option-selected", m["filter-select-option-selected"])
123
150
  ),
124
- onClick: () => $(e.value),
151
+ onClick: () => s ? p(e.value) : J(e.value),
125
152
  children: [
126
- s && /* @__PURE__ */ d(U, { checked: r == null ? void 0 : r.includes(e.value) }),
127
- u ? /* @__PURE__ */ d(Z, { option: e }) : /* @__PURE__ */ d("span", { children: e.label }),
128
- !s && !u && r === e.value && /* @__PURE__ */ d(H, { className: f("filter-select-option-check", a["filter-select-option-check"]) })
153
+ s && /* @__PURE__ */ v(
154
+ _,
155
+ {
156
+ checked: a == null ? void 0 : a.includes(e.value),
157
+ onChange: () => p(e.value),
158
+ onClick: (i) => i.stopPropagation()
159
+ }
160
+ ),
161
+ x ? /* @__PURE__ */ v(ee, { option: e }) : /* @__PURE__ */ v("span", { children: e.label }),
162
+ !s && !x && a === e.value && /* @__PURE__ */ v(W, { className: h("filter-select-option-check", m["filter-select-option-check"]) })
129
163
  ]
130
164
  },
131
165
  String(e.value)
132
166
  )),
133
- F.length === 0 && /* @__PURE__ */ d("div", { className: f("filter-select-empty", a["filter-select-empty"]), children: "暂无数据" })
167
+ T.length === 0 && /* @__PURE__ */ v("div", { className: h("filter-select-empty", m["filter-select-empty"]), children: "暂无数据" })
134
168
  ] }),
135
- s && (r == null ? void 0 : r.length) > 0 && /* @__PURE__ */ h("div", { className: f("filter-select-selected-bar", a["filter-select-selected-bar"]), children: [
136
- /* @__PURE__ */ d("div", { className: f("filter-select-selected-label", a["filter-select-selected-label"]), children: "已选:" }),
137
- /* @__PURE__ */ d(W, { size: [4, 4], wrap: !0, children: r.map((e) => {
138
- const c = o.find((l) => l.value === e);
139
- return /* @__PURE__ */ h(
169
+ s && (a == null ? void 0 : a.length) > 0 && /* @__PURE__ */ N("div", { className: h("filter-select-selected-bar", m["filter-select-selected-bar"]), children: [
170
+ /* @__PURE__ */ v("div", { className: h("filter-select-selected-label", m["filter-select-selected-label"]), children: "已选:" }),
171
+ /* @__PURE__ */ v(K, { size: [4, 4], wrap: !0, children: a.map((e) => {
172
+ const i = o.find((U) => String(U.value) === String(e)), f = a || [], A = g == null || f.length > g;
173
+ return /* @__PURE__ */ N(
140
174
  "span",
141
175
  {
142
- className: f("filter-select-selected-tag", a["filter-select-selected-tag"]),
143
- onClick: () => q(e),
176
+ className: h(
177
+ "filter-select-selected-tag",
178
+ m["filter-select-selected-tag"],
179
+ !A && m["filter-select-selected-tag-disabled"]
180
+ ),
181
+ onClick: () => A && p(e),
144
182
  children: [
145
- (c == null ? void 0 : c.label) ?? String(e),
146
- /* @__PURE__ */ d(J, { className: f("filter-select-selected-remove", a["filter-select-selected-remove"]) })
183
+ (i == null ? void 0 : i.label) ?? String(e),
184
+ /* @__PURE__ */ v(
185
+ Y,
186
+ {
187
+ className: h(
188
+ "filter-select-selected-remove",
189
+ m["filter-select-selected-remove"],
190
+ !A && m["filter-select-selected-remove-disabled"]
191
+ )
192
+ }
193
+ )
147
194
  ]
148
195
  },
149
196
  String(e)
@@ -155,6 +202,6 @@ const me = ({
155
202
  );
156
203
  };
157
204
  export {
158
- me as default
205
+ Ne as default
159
206
  };
160
207
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../src/components/Filter/FilterSelect/index.tsx"],"sourcesContent":["import { Check, X } from '@/components/Icons';\nimport { Checkbox, Input, Space } from 'antd';\nimport React, { useEffect, useMemo, useRef, useState } from 'react';\nimport PersonOptionRow from '../../Form/PersonOptionRow';\nimport FilterPopover from '../FilterPopover';\nimport type { BaseFilterProps, FilterOption, PersonOption } from '../types';\nimport { resolveFilterVisible } from '../types';\nimport { useFilterRegister } from '../useFilterState';\nimport styles from './style.module.scss';\nimport classNames from 'classnames';\n\nconst { Search } = Input;\n\nfunction formatPersonValueLabel(opt: PersonOption): string {\n const parts = [opt.label];\n if (opt.departmentName) parts.push(opt.departmentName);\n return parts.join(' · ');\n}\n\nfunction matchPersonOptionSearch(opt: PersonOption, keyword: string): boolean {\n const lower = keyword.toLowerCase();\n return [opt.label, opt.departmentName, opt.email, opt.phone, opt.employeeId]\n .filter(Boolean)\n .some((s) => String(s).toLowerCase().includes(lower));\n}\n\ninterface FilterSelectProps extends BaseFilterProps {\n options: FilterOption[];\n value?: string | number | undefined;\n onChange?: (value: string | number | undefined) => void;\n /** 默认值:与默认值相同时视为未筛选(不展示已选标签与选中态) */\n defaultValue?: string | number;\n placeholder?: string;\n searchable?: boolean;\n /** 是否多选 */\n multiple?: boolean;\n /** 人员选项:展示部门与联系方式 */\n variant?: 'default' | 'person';\n}\n\nfunction toDisplayValue(\n value: string | number | undefined,\n defaultValue: string | number | undefined,\n multiple: boolean,\n): string | number | (string | number)[] | undefined {\n if (multiple) return value ?? [];\n if (defaultValue !== undefined && value === defaultValue) return undefined;\n return value;\n}\n\nconst FilterSelect: React.FC<FilterSelectProps> = ({\n filterKey,\n label,\n options = [],\n value,\n onChange,\n defaultValue,\n searchable = false,\n multiple = false,\n variant = 'default',\n active,\n hidden,\n display,\n}) => {\n const isPersonVariant = variant === 'person';\n const [open, setOpen] = useState(false);\n const [searchText, setSearchText] = useState('');\n const displayValue = toDisplayValue(value, defaultValue, multiple);\n const [localValue, setLocalValue] = useState<string | number | (string | number)[] | undefined>(\n displayValue ?? (multiple ? [] : undefined),\n );\n\n // ── 自动注册到 CommonFilter ──\n const registerFn = useFilterRegister();\n const onChangeRef = useRef(onChange);\n onChangeRef.current = onChange;\n\n const handleRemove = useMemo(\n () => () => {\n onChangeRef.current?.(undefined);\n },\n [],\n );\n\n // 同步外部 value 到内部 localValue\n useEffect(() => {\n const nextDisplayValue = toDisplayValue(value, defaultValue, multiple);\n setLocalValue(nextDisplayValue ?? (multiple ? [] : undefined));\n // 外部清空时同时清空搜索文本\n if (\n nextDisplayValue === undefined ||\n nextDisplayValue === null ||\n (Array.isArray(nextDisplayValue) && nextDisplayValue.length === 0)\n ) {\n setSearchText('');\n }\n }, [value, defaultValue, multiple]);\n\n // 从 options 反查 valueLabel\n const valueLabel = useMemo(() => {\n if (multiple) {\n const arr = (localValue as (string | number)[]) || [];\n return arr.length > 0\n ? arr.map((v) => options.find((o) => o.value === v)?.label ?? String(v)).join('、')\n : '';\n }\n if (localValue == null) return '';\n const opt = options.find((o) => o.value === localValue);\n if (!opt) return String(localValue);\n return isPersonVariant ? formatPersonValueLabel(opt as PersonOption) : opt.label;\n }, [options, localValue, multiple, isPersonVariant]);\n\n useEffect(() => {\n if (!registerFn) return;\n const ctx = { filterKey, label, value };\n if (!resolveFilterVisible({ display, hidden }, ctx)) {\n registerFn.unregister(filterKey);\n return;\n }\n if (valueLabel && !multiple) {\n // 多选由 CommonFilter 的 clearAll 统一处理,单选直接注册\n registerFn.register(filterKey, {\n label,\n valueLabel,\n onRemove: handleRemove,\n });\n } else {\n registerFn.unregister(filterKey);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [valueLabel, filterKey, label, hidden, display, multiple, handleRemove]);\n\n const visibilityCtx = { filterKey, label, value };\n if (!resolveFilterVisible({ display, hidden }, visibilityCtx)) return null;\n\n const filteredOptions = searchText\n ? options.filter((opt) =>\n isPersonVariant\n ? matchPersonOptionSearch(opt as PersonOption, searchText)\n : opt.label.toLowerCase().includes(searchText.toLowerCase()),\n )\n : options;\n\n const handleConfirm = () => {\n onChange?.(localValue as string | number | undefined);\n setOpen(false);\n };\n\n const handleReset = () => {\n setLocalValue(multiple ? [] : undefined);\n setSearchText('');\n onChange?.(undefined);\n setOpen(false);\n };\n\n const handleClickOption = (optVal: string | number) => {\n if (!multiple) {\n const isDefaultOption = defaultValue !== undefined && optVal === defaultValue;\n let next: string | number | undefined;\n if (localValue === optVal || isDefaultOption) {\n next = undefined;\n } else {\n next = optVal;\n }\n setLocalValue(next);\n onChange?.(next);\n setOpen(false); // 单选自动收起\n }\n };\n\n const handleToggleMulti = (optVal: string | number) => {\n const arr = (localValue as (string | number)[]) || [];\n const next = arr.includes(optVal) ? arr.filter((v) => v !== optVal) : [...arr, optVal];\n setLocalValue(next);\n };\n\n return (\n <FilterPopover\n label={label}\n active={\n active ||\n (multiple\n ? Array.isArray(localValue) && localValue.length > 0\n : localValue != null && localValue !== '')\n }\n open={open}\n onOpenChange={setOpen}\n onConfirm={multiple ? handleConfirm : undefined}\n onReset={multiple ? handleReset : undefined}\n >\n {/* 搜索框 */}\n {searchable && (\n <Search\n placeholder={`搜索${label}`}\n allowClear\n size=\"middle\"\n className={classNames('filter-select-search', styles['filter-select-search'])}\n value={searchText}\n onChange={(e) => setSearchText(e.target.value)}\n />\n )}\n\n {/* 选项列表 */}\n <div className={classNames('filter-select-options', styles['filter-select-options'])}>\n {filteredOptions.map((opt) => (\n <div\n key={String(opt.value)}\n className={classNames('filter-select-option', styles['filter-select-option'],\n !multiple &&\n localValue === opt.value &&\n classNames('filter-select-option-selected', styles['filter-select-option-selected']),\n )}\n onClick={() => handleClickOption(opt.value)}\n >\n {multiple && (\n <Checkbox checked={(localValue as (string | number)[])?.includes(opt.value)} />\n )}\n {isPersonVariant ? (\n <PersonOptionRow option={opt as PersonOption} />\n ) : (\n <span>{opt.label}</span>\n )}\n {!multiple && !isPersonVariant && localValue === opt.value && (\n <Check className={classNames('filter-select-option-check', styles['filter-select-option-check'])} />\n )}\n </div>\n ))}\n {filteredOptions.length === 0 && (\n <div className={classNames('filter-select-empty', styles['filter-select-empty'])}>暂无数据</div>\n )}\n </div>\n\n {/* 多选已选 */}\n {multiple && (localValue as (string | number)[])?.length > 0 && (\n <div className={classNames('filter-select-selected-bar', styles['filter-select-selected-bar'])}>\n <div className={classNames('filter-select-selected-label', styles['filter-select-selected-label'])}>已选:</div>\n <Space size={[4, 4]} wrap>\n {(localValue as (string | number)[]).map((v) => {\n const opt = options.find((o) => o.value === v);\n return (\n <span\n key={String(v)}\n className={classNames('filter-select-selected-tag', styles['filter-select-selected-tag'])}\n onClick={() => handleToggleMulti(v)}\n >\n {opt?.label ?? String(v)}\n <X className={classNames('filter-select-selected-remove', styles['filter-select-selected-remove'])} />\n </span>\n );\n })}\n </Space>\n </div>\n )}\n </FilterPopover>\n );\n};\n\nexport default FilterSelect;\nexport type { FilterSelectProps };\n"],"names":["Search","Input","formatPersonValueLabel","opt","parts","matchPersonOptionSearch","keyword","lower","s","toDisplayValue","value","defaultValue","multiple","FilterSelect","filterKey","label","options","onChange","searchable","variant","active","hidden","display","isPersonVariant","open","setOpen","useState","searchText","setSearchText","displayValue","localValue","setLocalValue","registerFn","useFilterRegister","onChangeRef","useRef","handleRemove","useMemo","_a","useEffect","nextDisplayValue","valueLabel","arr","v","o","resolveFilterVisible","filteredOptions","handleConfirm","handleReset","handleClickOption","optVal","isDefaultOption","next","handleToggleMulti","jsxs","FilterPopover","jsx","classNames","styles","Checkbox","PersonOptionRow","Check","Space","X"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../../src/components/Filter/FilterSelect/index.tsx"],"sourcesContent":["import { Check, X } from '@/components/Icons';\nimport { Checkbox, Input, Space } from 'antd';\nimport React, { useEffect, useMemo, useRef, useState } from 'react';\nimport PersonOptionRow from '../../Form/PersonOptionRow';\nimport FilterPopover from '../FilterPopover';\nimport type { BaseFilterProps, FilterOption, PersonOption } from '../types';\nimport { resolveFilterVisible } from '../types';\nimport { useFilterRegister } from '../useFilterState';\nimport styles from './style.module.scss';\nimport classNames from 'classnames';\n\nconst { Search } = Input;\n\nfunction formatPersonValueLabel(opt: PersonOption): string {\n const parts = [opt.label];\n if (opt.departmentName) parts.push(opt.departmentName);\n return parts.join(' · ');\n}\n\nfunction matchPersonOptionSearch(opt: PersonOption, keyword: string): boolean {\n const lower = keyword.toLowerCase();\n return [opt.label, opt.departmentName, opt.email, opt.phone, opt.employeeId]\n .filter(Boolean)\n .some((s) => String(s).toLowerCase().includes(lower));\n}\n\ntype FilterSelectValue = string | number | (string | number)[] | undefined;\n\nexport type { FilterSelectValue };\n\nfunction arraysEqual(\n a?: (string | number)[],\n b?: (string | number)[],\n): boolean {\n if (!a?.length && !b?.length) return true;\n if (!a || !b || a.length !== b.length) return false;\n const sortedA = [...a].map(String).sort();\n const sortedB = [...b].map(String).sort();\n return sortedA.every((v, i) => v === sortedB[i]);\n}\n\ninterface FilterSelectProps extends BaseFilterProps {\n options: FilterOption[];\n value?: FilterSelectValue;\n onChange?: (value: FilterSelectValue) => void;\n /** 默认值:与默认值相同时视为未筛选(不展示已选标签与选中态) */\n defaultValue?: string | number;\n /** 多选默认值:与默认集合相同时视为未筛选 */\n defaultValues?: (string | number)[];\n placeholder?: string;\n searchable?: boolean;\n /** 是否多选 */\n multiple?: boolean;\n /** 多选至少保留项数;达到下限时不允许移除已选标签 */\n minSelection?: number;\n /** 人员选项:展示部门与联系方式 */\n variant?: 'default' | 'person';\n}\n\nfunction toDisplayValue(\n value: FilterSelectValue,\n defaultValue: string | number | undefined,\n defaultValues: (string | number)[] | undefined,\n multiple: boolean,\n): string | number | (string | number)[] | undefined {\n if (multiple) {\n const arr = Array.isArray(value) ? value : value != null && value !== '' ? [value] : [];\n if (defaultValues?.length && arraysEqual(arr, defaultValues)) {\n return [];\n }\n return arr;\n }\n if (defaultValue !== undefined && value === defaultValue) return undefined;\n return value;\n}\n\nfunction formatValueLabel(\n displayVal: string | number | (string | number)[] | undefined,\n options: FilterOption[],\n multiple: boolean,\n isPersonVariant: boolean,\n): string {\n if (multiple) {\n const arr = (displayVal as (string | number)[]) || [];\n return arr.length > 0\n ? arr.map((v) => options.find((o) => String(o.value) === String(v))?.label ?? String(v)).join('、')\n : '';\n }\n if (displayVal == null) return '';\n const opt = options.find((o) => String(o.value) === String(displayVal));\n if (!opt) return String(displayVal);\n return isPersonVariant ? formatPersonValueLabel(opt as PersonOption) : opt.label;\n}\n\nconst FilterSelect: React.FC<FilterSelectProps> = ({\n filterKey,\n label,\n options = [],\n value,\n onChange,\n defaultValue,\n defaultValues,\n searchable = false,\n multiple = false,\n minSelection,\n variant = 'default',\n active,\n hidden,\n display,\n}) => {\n const isPersonVariant = variant === 'person';\n const [open, setOpen] = useState(false);\n const [searchText, setSearchText] = useState('');\n const displayValue = toDisplayValue(value, defaultValue, defaultValues, multiple);\n const [localValue, setLocalValue] = useState<string | number | (string | number)[] | undefined>(\n displayValue ?? (multiple ? [] : undefined),\n );\n\n // ── 自动注册到 CommonFilter ──\n const registerFn = useFilterRegister();\n const onChangeRef = useRef(onChange);\n onChangeRef.current = onChange;\n\n const handleRemove = useMemo(() => {\n const selectedArr = Array.isArray(displayValue)\n ? displayValue\n : displayValue != null && displayValue !== ''\n ? [displayValue]\n : [];\n const canRemove =\n !multiple ||\n minSelection == null ||\n selectedArr.length > minSelection;\n return () => {\n if (!canRemove) return;\n onChangeRef.current?.(undefined);\n };\n }, [displayValue, minSelection, multiple]);\n\n const revertToCommitted = () => {\n const next = displayValue ?? (multiple ? [] : undefined);\n setLocalValue(next);\n setSearchText('');\n };\n\n // 同步外部 value 到内部 localValue\n useEffect(() => {\n const nextDisplayValue = toDisplayValue(value, defaultValue, defaultValues, multiple);\n setLocalValue(nextDisplayValue ?? (multiple ? [] : undefined));\n if (\n nextDisplayValue === undefined ||\n nextDisplayValue === null ||\n (Array.isArray(nextDisplayValue) && nextDisplayValue.length === 0)\n ) {\n setSearchText('');\n }\n }, [value, defaultValue, defaultValues, multiple]);\n\n const committedValueLabel = useMemo(\n () => formatValueLabel(displayValue, options, multiple, isPersonVariant),\n [options, displayValue, multiple, isPersonVariant],\n );\n\n useEffect(() => {\n if (!registerFn) return;\n const ctx = { filterKey, label, value };\n if (!resolveFilterVisible({ display, hidden }, ctx)) {\n registerFn.unregister(filterKey);\n return;\n }\n if (committedValueLabel) {\n const selectedArr = Array.isArray(displayValue)\n ? displayValue\n : displayValue != null && displayValue !== ''\n ? [displayValue]\n : [];\n const removable =\n !multiple || minSelection == null || selectedArr.length > minSelection;\n registerFn.register(filterKey, {\n label,\n valueLabel: committedValueLabel,\n onRemove: handleRemove,\n removable,\n });\n } else {\n registerFn.unregister(filterKey);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [committedValueLabel, filterKey, label, hidden, display, handleRemove]);\n\n const visibilityCtx = { filterKey, label, value };\n if (!resolveFilterVisible({ display, hidden }, visibilityCtx)) return null;\n\n const filteredOptions = searchText\n ? options.filter((opt) =>\n isPersonVariant\n ? matchPersonOptionSearch(opt as PersonOption, searchText)\n : opt.label.toLowerCase().includes(searchText.toLowerCase()),\n )\n : options;\n\n const handleConfirm = () => {\n onChange?.(localValue as FilterSelectValue);\n setOpen(false);\n };\n\n const handleDiscardDraft = () => {\n revertToCommitted();\n setOpen(false);\n };\n\n const handleOpenChange = (nextOpen: boolean) => {\n if (!nextOpen && multiple) {\n revertToCommitted();\n }\n setOpen(nextOpen);\n };\n\n const handleClickOption = (optVal: string | number) => {\n if (!multiple) {\n const isDefaultOption = defaultValue !== undefined && optVal === defaultValue;\n let next: string | number | undefined;\n if (localValue === optVal || isDefaultOption) {\n next = undefined;\n } else {\n next = optVal;\n }\n setLocalValue(next);\n onChange?.(next);\n setOpen(false);\n }\n };\n\n const handleToggleMulti = (optVal: string | number) => {\n const arr = (localValue as (string | number)[]) || [];\n if (arr.includes(optVal) && minSelection != null && arr.length <= minSelection) {\n return;\n }\n const next = arr.includes(optVal) ? arr.filter((v) => v !== optVal) : [...arr, optVal];\n setLocalValue(next);\n };\n\n const isActive = multiple\n ? Array.isArray(displayValue) && displayValue.length > 0\n : displayValue != null && displayValue !== '';\n\n return (\n <FilterPopover\n label={label}\n active={active || isActive}\n open={open}\n onOpenChange={handleOpenChange}\n onConfirm={multiple ? handleConfirm : undefined}\n onReset={multiple ? handleDiscardDraft : undefined}\n >\n {searchable && (\n <Search\n placeholder={`搜索${label}`}\n allowClear\n size=\"middle\"\n className={classNames('filter-select-search', styles['filter-select-search'])}\n value={searchText}\n onChange={(e) => setSearchText(e.target.value)}\n />\n )}\n\n <div className={classNames('filter-select-options', styles['filter-select-options'])}>\n {filteredOptions.map((opt) => (\n <div\n key={String(opt.value)}\n className={classNames('filter-select-option', styles['filter-select-option'],\n !multiple &&\n localValue === opt.value &&\n classNames('filter-select-option-selected', styles['filter-select-option-selected']),\n )}\n onClick={() =>\n multiple ? handleToggleMulti(opt.value) : handleClickOption(opt.value)\n }\n >\n {multiple && (\n <Checkbox\n checked={(localValue as (string | number)[])?.includes(opt.value)}\n onChange={() => handleToggleMulti(opt.value)}\n onClick={(e) => e.stopPropagation()}\n />\n )}\n {isPersonVariant ? (\n <PersonOptionRow option={opt as PersonOption} />\n ) : (\n <span>{opt.label}</span>\n )}\n {!multiple && !isPersonVariant && localValue === opt.value && (\n <Check className={classNames('filter-select-option-check', styles['filter-select-option-check'])} />\n )}\n </div>\n ))}\n {filteredOptions.length === 0 && (\n <div className={classNames('filter-select-empty', styles['filter-select-empty'])}>暂无数据</div>\n )}\n </div>\n\n {multiple && (localValue as (string | number)[])?.length > 0 && (\n <div className={classNames('filter-select-selected-bar', styles['filter-select-selected-bar'])}>\n <div className={classNames('filter-select-selected-label', styles['filter-select-selected-label'])}>已选:</div>\n <Space size={[4, 4]} wrap>\n {(localValue as (string | number)[]).map((v) => {\n const opt = options.find((o) => String(o.value) === String(v));\n const arr = (localValue as (string | number)[]) || [];\n const tagRemovable = minSelection == null || arr.length > minSelection;\n return (\n <span\n key={String(v)}\n className={classNames(\n 'filter-select-selected-tag',\n styles['filter-select-selected-tag'],\n !tagRemovable && styles['filter-select-selected-tag-disabled'],\n )}\n onClick={() => tagRemovable && handleToggleMulti(v)}\n >\n {opt?.label ?? String(v)}\n <X\n className={classNames(\n 'filter-select-selected-remove',\n styles['filter-select-selected-remove'],\n !tagRemovable && styles['filter-select-selected-remove-disabled'],\n )}\n />\n </span>\n );\n })}\n </Space>\n </div>\n )}\n </FilterPopover>\n );\n};\n\nexport default FilterSelect;\nexport type { FilterSelectProps };\n"],"names":["Search","Input","formatPersonValueLabel","opt","parts","matchPersonOptionSearch","keyword","lower","s","arraysEqual","a","b","sortedA","sortedB","v","i","toDisplayValue","value","defaultValue","defaultValues","multiple","arr","formatValueLabel","displayVal","options","isPersonVariant","_a","o","FilterSelect","filterKey","label","onChange","searchable","minSelection","variant","active","hidden","display","open","setOpen","useState","searchText","setSearchText","displayValue","localValue","setLocalValue","registerFn","useFilterRegister","onChangeRef","useRef","handleRemove","useMemo","selectedArr","canRemove","revertToCommitted","useEffect","nextDisplayValue","committedValueLabel","resolveFilterVisible","removable","filteredOptions","handleConfirm","handleDiscardDraft","handleOpenChange","nextOpen","handleClickOption","optVal","isDefaultOption","next","handleToggleMulti","isActive","jsxs","FilterPopover","jsx","classNames","styles","Checkbox","e","PersonOptionRow","Check","Space","tagRemovable","X"],"mappings":"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"}
@@ -1,14 +1,16 @@
1
1
  const e = {
2
- "filter-select-search": "_filter-select-search_1esgk_1",
3
- "filter-select-options": "_filter-select-options_1esgk_5",
4
- "filter-select-option": "_filter-select-option_1esgk_5",
5
- "filter-select-option-selected": "_filter-select-option-selected_1esgk_23",
6
- "filter-select-option-check": "_filter-select-option-check_1esgk_28",
7
- "filter-select-empty": "_filter-select-empty_1esgk_34",
8
- "filter-select-selected-bar": "_filter-select-selected-bar_1esgk_42",
9
- "filter-select-selected-label": "_filter-select-selected-label_1esgk_49",
10
- "filter-select-selected-tag": "_filter-select-selected-tag_1esgk_55",
11
- "filter-select-selected-remove": "_filter-select-selected-remove_1esgk_68"
2
+ "filter-select-search": "_filter-select-search_11rsz_1",
3
+ "filter-select-options": "_filter-select-options_11rsz_5",
4
+ "filter-select-option": "_filter-select-option_11rsz_5",
5
+ "filter-select-option-selected": "_filter-select-option-selected_11rsz_23",
6
+ "filter-select-option-check": "_filter-select-option-check_11rsz_28",
7
+ "filter-select-empty": "_filter-select-empty_11rsz_34",
8
+ "filter-select-selected-bar": "_filter-select-selected-bar_11rsz_42",
9
+ "filter-select-selected-label": "_filter-select-selected-label_11rsz_49",
10
+ "filter-select-selected-tag": "_filter-select-selected-tag_11rsz_55",
11
+ "filter-select-selected-tag-disabled": "_filter-select-selected-tag-disabled_11rsz_68",
12
+ "filter-select-selected-remove": "_filter-select-selected-remove_11rsz_73",
13
+ "filter-select-selected-remove-disabled": "_filter-select-selected-remove-disabled_11rsz_77"
12
14
  };
13
15
  export {
14
16
  e as default
@@ -1 +1 @@
1
- {"version":3,"file":"style.module.scss.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;"}
1
+ {"version":3,"file":"style.module.scss.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;"}
@@ -8,8 +8,8 @@ interface FilterTriggerProps extends Omit<BaseFilterProps, 'filterKey'> {
8
8
  }
9
9
  /**
10
10
  * 筛选触发按钮
11
- * 未选中:文字 + 下箭头
12
- * 选中:主题色背景 + 白字 + 上箭头
11
+ * 未选中:灰色文字 + 下箭头
12
+ * 已选:主题色文字 + 浅底 + 上箭头
13
13
  */
14
14
  declare const FilterTrigger: React.FC<FilterTriggerProps>;
15
15
  export default FilterTrigger;
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../src/components/Filter/FilterTrigger/index.tsx"],"sourcesContent":["import { ChevronDown, ChevronUp } from '@/components/Icons';\nimport classNames from 'classnames';\nimport React from 'react';\nimport type { BaseFilterProps } from '../types';\nimport styles from './style.module.scss';\n\ninterface FilterTriggerProps extends Omit<BaseFilterProps, 'filterKey'> {\n onClick?: (e: React.MouseEvent) => void;\n open?: boolean;\n className?: string;\n children?: React.ReactNode;\n}\n\n/**\n * 筛选触发按钮\n * 未选中:文字 + 下箭头\n * 选中:主题色背景 + 白字 + 上箭头\n */\nconst FilterTrigger: React.FC<FilterTriggerProps> = ({\n label,\n active,\n onClick,\n open,\n className = '',\n children,\n}) => (\n <span\n className={classNames('filter-trigger-root', styles['filter-trigger-root'],\n active\n ? ['filter-trigger-active', styles['filter-trigger-active']]\n : ['filter-trigger-inactive', styles['filter-trigger-inactive']],\n className,\n )}\n onClick={onClick}\n >\n {children ?? label}\n {open !== undefined ? (\n open ? (\n <ChevronUp className={classNames('filter-trigger-chevron', styles['filter-trigger-chevron'])} />\n ) : (\n <ChevronDown className={classNames('filter-trigger-chevron', styles['filter-trigger-chevron'])} />\n )\n ) : !active ? (\n <ChevronDown className={classNames('filter-trigger-chevron', styles['filter-trigger-chevron'])} />\n ) : (\n <ChevronUp className={classNames('filter-trigger-chevron', styles['filter-trigger-chevron'])} />\n )}\n </span>\n);\n\nexport default FilterTrigger;\nexport type { FilterTriggerProps };\n"],"names":["FilterTrigger","label","active","onClick","open","className","children","jsxs","classNames","styles","ChevronUp","jsx","ChevronDown"],"mappings":";;;;AAkBA,MAAMA,IAA8C,CAAC;AAAA,EACnD,OAAAC;AAAA,EACA,QAAAC;AAAA,EACA,SAAAC;AAAA,EACA,MAAAC;AAAA,EACA,WAAAC,IAAY;AAAA,EACZ,UAAAC;AACF,MACE,gBAAAC;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,WAAWC;AAAA,MAAW;AAAA,MAAuBC,EAAO,qBAAqB;AAAA,MACvEP,IACI,CAAC,yBAAyBO,EAAO,uBAAuB,CAAC,IACzD,CAAC,2BAA2BA,EAAO,yBAAyB,CAAC;AAAA,MACjEJ;AAAA,IAAA;AAAA,IAEF,SAAAF;AAAA,IAEC,UAAA;AAAA,MAAAG,KAAYL;AAAA,MACZG,MAAS,SACRA,sBACGM,GAAA,EAAU,WAAWF,EAAW,0BAA0BC,EAAO,wBAAwB,CAAC,EAAA,CAAG,IAE9F,gBAAAE,EAACC,GAAA,EAAY,WAAWJ,EAAW,0BAA0BC,EAAO,wBAAwB,CAAC,GAAG,IAE/FP,IAGH,gBAAAS,EAACD,KAAU,WAAWF,EAAW,0BAA0BC,EAAO,wBAAwB,CAAC,EAAA,CAAG,IAF9F,gBAAAE,EAACC,GAAA,EAAY,WAAWJ,EAAW,0BAA0BC,EAAO,wBAAwB,CAAC,GAAG;AAAA,IAEF;AAAA,EAAA;AAElG;"}
1
+ {"version":3,"file":"index.js","sources":["../../../../src/components/Filter/FilterTrigger/index.tsx"],"sourcesContent":["import { ChevronDown, ChevronUp } from '@/components/Icons';\nimport classNames from 'classnames';\nimport React from 'react';\nimport type { BaseFilterProps } from '../types';\nimport styles from './style.module.scss';\n\ninterface FilterTriggerProps extends Omit<BaseFilterProps, 'filterKey'> {\n onClick?: (e: React.MouseEvent) => void;\n open?: boolean;\n className?: string;\n children?: React.ReactNode;\n}\n\n/**\n * 筛选触发按钮\n * 未选中:灰色文字 + 下箭头\n * 已选:主题色文字 + 浅底 + 上箭头\n */\nconst FilterTrigger: React.FC<FilterTriggerProps> = ({\n label,\n active,\n onClick,\n open,\n className = '',\n children,\n}) => (\n <span\n className={classNames('filter-trigger-root', styles['filter-trigger-root'],\n active\n ? ['filter-trigger-active', styles['filter-trigger-active']]\n : ['filter-trigger-inactive', styles['filter-trigger-inactive']],\n className,\n )}\n onClick={onClick}\n >\n {children ?? label}\n {open !== undefined ? (\n open ? (\n <ChevronUp className={classNames('filter-trigger-chevron', styles['filter-trigger-chevron'])} />\n ) : (\n <ChevronDown className={classNames('filter-trigger-chevron', styles['filter-trigger-chevron'])} />\n )\n ) : !active ? (\n <ChevronDown className={classNames('filter-trigger-chevron', styles['filter-trigger-chevron'])} />\n ) : (\n <ChevronUp className={classNames('filter-trigger-chevron', styles['filter-trigger-chevron'])} />\n )}\n </span>\n);\n\nexport default FilterTrigger;\nexport type { FilterTriggerProps };\n"],"names":["FilterTrigger","label","active","onClick","open","className","children","jsxs","classNames","styles","ChevronUp","jsx","ChevronDown"],"mappings":";;;;AAkBA,MAAMA,IAA8C,CAAC;AAAA,EACnD,OAAAC;AAAA,EACA,QAAAC;AAAA,EACA,SAAAC;AAAA,EACA,MAAAC;AAAA,EACA,WAAAC,IAAY;AAAA,EACZ,UAAAC;AACF,MACE,gBAAAC;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,WAAWC;AAAA,MAAW;AAAA,MAAuBC,EAAO,qBAAqB;AAAA,MACvEP,IACI,CAAC,yBAAyBO,EAAO,uBAAuB,CAAC,IACzD,CAAC,2BAA2BA,EAAO,yBAAyB,CAAC;AAAA,MACjEJ;AAAA,IAAA;AAAA,IAEF,SAAAF;AAAA,IAEC,UAAA;AAAA,MAAAG,KAAYL;AAAA,MACZG,MAAS,SACRA,sBACGM,GAAA,EAAU,WAAWF,EAAW,0BAA0BC,EAAO,wBAAwB,CAAC,EAAA,CAAG,IAE9F,gBAAAE,EAACC,GAAA,EAAY,WAAWJ,EAAW,0BAA0BC,EAAO,wBAAwB,CAAC,GAAG,IAE/FP,IAGH,gBAAAS,EAACD,KAAU,WAAWF,EAAW,0BAA0BC,EAAO,wBAAwB,CAAC,EAAA,CAAG,IAF9F,gBAAAE,EAACC,GAAA,EAAY,WAAWJ,EAAW,0BAA0BC,EAAO,wBAAwB,CAAC,GAAG;AAAA,IAEF;AAAA,EAAA;AAElG;"}
@@ -1,8 +1,8 @@
1
1
  const r = {
2
- "filter-trigger-root": "_filter-trigger-root_115kh_1",
3
- "filter-trigger-active": "_filter-trigger-active_115kh_12",
4
- "filter-trigger-inactive": "_filter-trigger-inactive_115kh_17",
5
- "filter-trigger-chevron": "_filter-trigger-chevron_115kh_25"
2
+ "filter-trigger-root": "_filter-trigger-root_nbyh1_1",
3
+ "filter-trigger-active": "_filter-trigger-active_nbyh1_12",
4
+ "filter-trigger-inactive": "_filter-trigger-inactive_nbyh1_18",
5
+ "filter-trigger-chevron": "_filter-trigger-chevron_nbyh1_26"
6
6
  };
7
7
  export {
8
8
  r as default
@@ -17,7 +17,7 @@ export type { FilterPanelProps } from './FilterPanel';
17
17
  export { FilterPanel };
18
18
  export type { FilterPopoverProps } from './FilterPopover';
19
19
  export { FilterPopover };
20
- export type { FilterSelectProps } from './FilterSelect';
20
+ export type { FilterSelectProps, FilterSelectValue } from './FilterSelect';
21
21
  export { FilterSelect };
22
22
  export type { FilterInputProps } from './FilterInput';
23
23
  export { FilterInput };
@@ -17,6 +17,8 @@ export interface SelectedItem {
17
17
  label: string;
18
18
  valueLabel: string;
19
19
  onRemove: () => void;
20
+ /** 为 false 时不允许移除(如多选至少保留一项) */
21
+ removable?: boolean;
20
22
  }
21
23
  /** 所有筛选组件共用的 Props */
22
24
  export interface BaseFilterProps {
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sources":["../../../src/components/Filter/types.ts"],"sourcesContent":["import type { MaybeFn, Visibility } from '@/utils/resolveMaybeFn';\nimport { resolveMaybeFn } from '@/utils/resolveMaybeFn';\n\n/** 筛选选项基础类型 */\nexport interface FilterOption {\n label: string;\n value: string | number;\n}\n\n/** 人员展示选项(仅 UI 字段,数据由消费方提供) */\nexport interface PersonOption extends FilterOption {\n departmentName?: string;\n email?: string;\n phone?: string;\n employeeId?: string;\n}\n\n/** 已选项 */\nexport interface SelectedItem {\n key: string;\n label: string;\n valueLabel: string;\n onRemove: () => void;\n}\n\n/** 所有筛选组件共用的 Props */\nexport interface BaseFilterProps {\n filterKey: string;\n label: string;\n active?: boolean;\n /** 隐藏;支持 boolean 或 (ctx) => boolean */\n hidden?: Visibility;\n /** 展示;与 hidden 二选一,display 优先 */\n display?: Visibility;\n}\n\nexport type FilterVisibilityContext = Record<string, unknown>;\n\n/** 解析 hidden(兼容旧 API,支持 MaybeFn) */\nexport function resolveHidden(\n hidden: MaybeFn<boolean, FilterVisibilityContext> | undefined,\n ctx: FilterVisibilityContext = {},\n): boolean {\n if (hidden === undefined) return false;\n return resolveMaybeFn(hidden, ctx, false);\n}\n\n/** 根据 display / hidden 计算筛选项是否可见 */\nexport function resolveFilterVisible(\n props: Pick<BaseFilterProps, 'display' | 'hidden'>,\n ctx: FilterVisibilityContext = {},\n): boolean {\n if (props.display !== undefined) {\n return resolveMaybeFn(props.display, ctx, true);\n }\n return !resolveHidden(props.hidden, ctx);\n}\n"],"names":["resolveHidden","hidden","ctx","resolveMaybeFn","resolveFilterVisible","props"],"mappings":";AAuCO,SAASA,EACdC,GACAC,IAA+B,IACtB;AACT,SAAID,MAAW,SAAkB,KAC1BE,EAAeF,GAAQC,GAAK,EAAK;AAC1C;AAGO,SAASE,EACdC,GACAH,IAA+B,IACtB;AACT,SAAIG,EAAM,YAAY,SACbF,EAAeE,EAAM,SAASH,GAAK,EAAI,IAEzC,CAACF,EAAcK,EAAM,QAAQH,CAAG;AACzC;"}
1
+ {"version":3,"file":"types.js","sources":["../../../src/components/Filter/types.ts"],"sourcesContent":["import type { MaybeFn, Visibility } from '@/utils/resolveMaybeFn';\nimport { resolveMaybeFn } from '@/utils/resolveMaybeFn';\n\n/** 筛选选项基础类型 */\nexport interface FilterOption {\n label: string;\n value: string | number;\n}\n\n/** 人员展示选项(仅 UI 字段,数据由消费方提供) */\nexport interface PersonOption extends FilterOption {\n departmentName?: string;\n email?: string;\n phone?: string;\n employeeId?: string;\n}\n\n/** 已选项 */\nexport interface SelectedItem {\n key: string;\n label: string;\n valueLabel: string;\n onRemove: () => void;\n /** 为 false 时不允许移除(如多选至少保留一项) */\n removable?: boolean;\n}\n\n/** 所有筛选组件共用的 Props */\nexport interface BaseFilterProps {\n filterKey: string;\n label: string;\n active?: boolean;\n /** 隐藏;支持 boolean 或 (ctx) => boolean */\n hidden?: Visibility;\n /** 展示;与 hidden 二选一,display 优先 */\n display?: Visibility;\n}\n\nexport type FilterVisibilityContext = Record<string, unknown>;\n\n/** 解析 hidden(兼容旧 API,支持 MaybeFn) */\nexport function resolveHidden(\n hidden: MaybeFn<boolean, FilterVisibilityContext> | undefined,\n ctx: FilterVisibilityContext = {},\n): boolean {\n if (hidden === undefined) return false;\n return resolveMaybeFn(hidden, ctx, false);\n}\n\n/** 根据 display / hidden 计算筛选项是否可见 */\nexport function resolveFilterVisible(\n props: Pick<BaseFilterProps, 'display' | 'hidden'>,\n ctx: FilterVisibilityContext = {},\n): boolean {\n if (props.display !== undefined) {\n return resolveMaybeFn(props.display, ctx, true);\n }\n return !resolveHidden(props.hidden, ctx);\n}\n"],"names":["resolveHidden","hidden","ctx","resolveMaybeFn","resolveFilterVisible","props"],"mappings":";AAyCO,SAASA,EACdC,GACAC,IAA+B,IACtB;AACT,SAAID,MAAW,SAAkB,KAC1BE,EAAeF,GAAQC,GAAK,EAAK;AAC1C;AAGO,SAASE,EACdC,GACAH,IAA+B,IACtB;AACT,SAAIG,EAAM,YAAY,SACbF,EAAeE,EAAM,SAASH,GAAK,EAAI,IAEzC,CAACF,EAAcK,EAAM,QAAQH,CAAG;AACzC;"}
@@ -10,6 +10,8 @@ interface FilterRegistration {
10
10
  valueLabel: string;
11
11
  /** 移除回调 */
12
12
  onRemove: () => void;
13
+ /** 是否允许移除标签,默认 true */
14
+ removable?: boolean;
13
15
  }
14
16
  /** Context 类型 */
15
17
  interface FilterContextValue {
@@ -1,35 +1,36 @@
1
1
  import { jsx as m } from "react/jsx-runtime";
2
- import { useContext as f, useState as v, useCallback as a, useMemo as L, createContext as R } from "react";
2
+ import { useContext as v, useState as f, useCallback as a, useMemo as x, createContext as R } from "react";
3
3
  const s = R(null);
4
- function F() {
5
- return f(s);
4
+ function C() {
5
+ return v(s);
6
6
  }
7
- function j() {
8
- const [l, n] = v({}), u = a((e, t) => {
9
- n((r) => {
10
- const o = r[e];
11
- return (o == null ? void 0 : o.label) === t.label && (o == null ? void 0 : o.valueLabel) === t.valueLabel ? r : { ...r, [e]: t };
7
+ function F() {
8
+ const [o, n] = f({}), u = a((t, e) => {
9
+ n((l) => {
10
+ const r = l[t];
11
+ return r && r.label === e.label && r.valueLabel === e.valueLabel && (r.removable ?? !0) === (e.removable ?? !0) && r.onRemove === e.onRemove ? l : { ...l, [t]: e };
12
12
  });
13
- }, []), c = a((e) => {
14
- n((t) => {
15
- if (!(e in t)) return t;
16
- const r = { ...t };
17
- return delete r[e], r;
13
+ }, []), i = a((t) => {
14
+ n((e) => {
15
+ if (!(t in e)) return e;
16
+ const l = { ...e };
17
+ return delete l[t], l;
18
18
  });
19
- }, []), i = a(() => {
20
- Object.values(l).forEach((e) => e.onRemove()), n({});
21
- }, [l]), b = L(() => Object.entries(l).filter(([, e]) => !!e.valueLabel).map(([e, t]) => ({
22
- key: e,
23
- label: t.label,
24
- valueLabel: t.valueLabel,
25
- onRemove: t.onRemove
26
- })), [l]);
27
- return { registrations: l, selectedItems: b, register: u, unregister: c, clearAll: i };
19
+ }, []), c = a(() => {
20
+ Object.values(o).forEach((t) => t.onRemove()), n({});
21
+ }, [o]), b = x(() => Object.entries(o).filter(([, t]) => !!t.valueLabel).map(([t, e]) => ({
22
+ key: t,
23
+ label: e.label,
24
+ valueLabel: e.valueLabel,
25
+ onRemove: e.onRemove,
26
+ removable: e.removable ?? !0
27
+ })), [o]);
28
+ return { registrations: o, selectedItems: b, register: u, unregister: i, clearAll: c };
28
29
  }
29
- const x = ({ children: l, ctx: n }) => /* @__PURE__ */ m(s.Provider, { value: n, children: l });
30
+ const j = ({ children: o, ctx: n }) => /* @__PURE__ */ m(s.Provider, { value: n, children: o });
30
31
  export {
31
- x as FilterProvider,
32
- F as useFilterRegister,
33
- j as useFilterState
32
+ j as FilterProvider,
33
+ C as useFilterRegister,
34
+ F as useFilterState
34
35
  };
35
36
  //# sourceMappingURL=useFilterState.js.map