@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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useKBDocuments.js","sources":["../../../../../src/components/AgentHub/KnowledgeBase/hooks/useKBDocuments.ts"],"sourcesContent":["import type { KBDocument } from '@/components/AgentHub/types';\nimport { useMarsunFetch } from '@/provider';\nimport { useFetchData } from '@/hooks/useFetchData';\n\nexport type UseKBDocumentsOptions = {\n listUrl?: string;\n transformList?: (raw: unknown) => KBDocument[];\n};\n\nexport const useKBDocuments = (datasetId: string | undefined, options: UseKBDocumentsOptions = {}) => {\n const fetchCtx = useMarsunFetch();\n const url = options.listUrl?.replace('{datasetId}', datasetId ?? '');\n\n const { data, loading, reload } = useFetchData<KBDocument[]>({\n fetchUrl: url,\n transformData:\n options.transformList ??\n ((raw) => {\n const r = raw as { data?: KBDocument[] };\n return Array.isArray(r?.data) ? r.data : [];\n }),\n enabled: !!url && !!datasetId,\n baseUrl: fetchCtx.baseUrl,\n defaultHeaders: fetchCtx.headers,\n timeoutMs: fetchCtx.timeoutMs,\n });\n\n return { data: data ?? [], loading, fetchData: reload };\n};\n"],"names":["useKBDocuments","datasetId","options","fetchCtx","useMarsunFetch","url","_a","data","loading","reload","useFetchData","raw","r"],"mappings":";;AASO,MAAMA,IAAiB,CAACC,GAA+BC,IAAiC,OAAO;;AACpG,QAAMC,IAAWC,EAAA,GACXC,KAAMC,IAAAJ,EAAQ,YAAR,gBAAAI,EAAiB,QAAQ,eAAeL,KAAa,KAE3D,EAAE,MAAAM,GAAM,SAAAC,GAAS,QAAAC,EAAA,IAAWC,EAA2B;AAAA,IAC3D,UAAUL;AAAA,IACV,eACEH,EAAQ,kBACP,CAACS,MAAQ;AACR,YAAMC,IAAID;AACV,aAAO,MAAM,QAAQC,KAAA,gBAAAA,EAAG,IAAI,IAAIA,EAAE,OAAO,CAAA;AAAA,IAC3C;AAAA,IACF,SAAS,CAAC,CAACP,KAAO,CAAC,CAACJ;AAAA,IACpB,SAASE,EAAS;AAAA,IAClB,gBAAgBA,EAAS;AAAA,IACzB,WAAWA,EAAS;AAAA,EAAA,CACrB;AAED,SAAO,EAAE,MAAMI,KAAQ,CAAA,GAAI,SAAAC,GAAS,WAAWC,EAAA;AACjD;"}
@@ -0,0 +1,32 @@
1
+ import { useFetchData as f } from "../../../../hooks/useFetchData.js";
2
+ import { useCallback as m } from "react";
3
+ import { useMarsunFetch as h } from "../../../../provider/context.js";
4
+ const b = (e = {}) => {
5
+ const a = h(), { data: d, loading: c, reload: t } = f({
6
+ fetchUrl: e.listUrl,
7
+ transformData: e.transformList ?? ((l) => {
8
+ const r = l;
9
+ return Array.isArray(r == null ? void 0 : r.data) ? r.data : [];
10
+ }),
11
+ enabled: !!e.listUrl,
12
+ baseUrl: a.baseUrl,
13
+ defaultHeaders: a.headers,
14
+ timeoutMs: a.timeoutMs
15
+ }), u = m(
16
+ async (l) => {
17
+ var s;
18
+ if (!e.deleteUrl) return;
19
+ const r = e.deleteUrl.replace("{id}", l);
20
+ await fetch(`${a.baseUrl ?? ""}${r}`, {
21
+ method: "DELETE",
22
+ headers: a.headers
23
+ }), (s = e.onDeleteSuccess) == null || s.call(e), t();
24
+ },
25
+ [e, a, t]
26
+ );
27
+ return { data: d ?? [], loading: c, fetchData: t, deleteDataset: u };
28
+ };
29
+ export {
30
+ b as useKnowledgeBase
31
+ };
32
+ //# sourceMappingURL=useKnowledgeBase.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useKnowledgeBase.js","sources":["../../../../../src/components/AgentHub/KnowledgeBase/hooks/useKnowledgeBase.ts"],"sourcesContent":["import type { Dataset } from '@/components/AgentHub/types';\nimport { useMarsunFetch } from '@/provider';\nimport { useFetchData } from '@/hooks/useFetchData';\nimport { useCallback } from 'react';\n\nexport type UseKnowledgeBaseOptions = {\n listUrl?: string;\n transformList?: (raw: unknown) => Dataset[];\n deleteUrl?: string;\n onDeleteSuccess?: () => void;\n};\n\nexport const useKnowledgeBase = (options: UseKnowledgeBaseOptions = {}) => {\n const fetchCtx = useMarsunFetch();\n const { data, loading, reload } = useFetchData<Dataset[]>({\n fetchUrl: options.listUrl,\n transformData:\n options.transformList ??\n ((raw) => {\n const r = raw as { data?: Dataset[] };\n return Array.isArray(r?.data) ? r.data : [];\n }),\n enabled: !!options.listUrl,\n baseUrl: fetchCtx.baseUrl,\n defaultHeaders: fetchCtx.headers,\n timeoutMs: fetchCtx.timeoutMs,\n });\n\n const deleteDataset = useCallback(\n async (id: string) => {\n if (!options.deleteUrl) return;\n const url = options.deleteUrl.replace('{id}', id);\n await fetch(`${fetchCtx.baseUrl ?? ''}${url}`, {\n method: 'DELETE',\n headers: fetchCtx.headers,\n });\n options.onDeleteSuccess?.();\n reload();\n },\n [options, fetchCtx, reload],\n );\n\n return { data: data ?? [], loading, fetchData: reload, deleteDataset };\n};\n"],"names":["useKnowledgeBase","options","fetchCtx","useMarsunFetch","data","loading","reload","useFetchData","raw","deleteDataset","useCallback","id","url","_a"],"mappings":";;;AAYO,MAAMA,IAAmB,CAACC,IAAmC,OAAO;AACzE,QAAMC,IAAWC,EAAA,GACX,EAAE,MAAAC,GAAM,SAAAC,GAAS,QAAAC,EAAA,IAAWC,EAAwB;AAAA,IACxD,UAAUN,EAAQ;AAAA,IAClB,eACEA,EAAQ,kBACP,CAACO,MAAQ;AACR,YAAM,IAAIA;AACV,aAAO,MAAM,QAAQ,uBAAG,IAAI,IAAI,EAAE,OAAO,CAAA;AAAA,IAC3C;AAAA,IACF,SAAS,CAAC,CAACP,EAAQ;AAAA,IACnB,SAASC,EAAS;AAAA,IAClB,gBAAgBA,EAAS;AAAA,IACzB,WAAWA,EAAS;AAAA,EAAA,CACrB,GAEKO,IAAgBC;AAAA,IACpB,OAAOC,MAAe;;AACpB,UAAI,CAACV,EAAQ,UAAW;AACxB,YAAMW,IAAMX,EAAQ,UAAU,QAAQ,QAAQU,CAAE;AAChD,YAAM,MAAM,GAAGT,EAAS,WAAW,EAAE,GAAGU,CAAG,IAAI;AAAA,QAC7C,QAAQ;AAAA,QACR,SAASV,EAAS;AAAA,MAAA,CACnB,IACDW,IAAAZ,EAAQ,oBAAR,QAAAY,EAAA,KAAAZ,IACAK,EAAA;AAAA,IACF;AAAA,IACA,CAACL,GAASC,GAAUI,CAAM;AAAA,EAAA;AAG5B,SAAO,EAAE,MAAMF,KAAQ,CAAA,GAAI,SAAAC,GAAS,WAAWC,GAAQ,eAAAG,EAAA;AACzD;"}
@@ -1,65 +1,69 @@
1
1
  import { jsxs as o, jsx as l } from "react/jsx-runtime";
2
2
  import { X as T } from "../../Icons/index.js";
3
3
  import { Space as k, Tooltip as E, Button as x } from "antd";
4
- import e from "classnames";
4
+ import t from "classnames";
5
5
  import F, { useMemo as L } from "react";
6
- import t from "./style.module.scss.js";
6
+ import e from "./style.module.scss.js";
7
7
  import { useFilterState as S, FilterProvider as _ } from "../useFilterState.js";
8
8
  import D from "../../Tag/SemanticTag.js";
9
9
  const j = 20;
10
- function z(c, r) {
11
- return c.length <= r ? { display: c, truncated: !1 } : { display: `${c.slice(0, r)}...`, truncated: !0 };
10
+ function z(r, m) {
11
+ return r.length <= m ? { display: r, truncated: !1 } : { display: `${r.slice(0, m)}...`, truncated: !0 };
12
12
  }
13
13
  const I = ({
14
- children: c,
15
- list: r,
14
+ children: r,
15
+ list: m,
16
16
  extra: n,
17
17
  onClearAll: i,
18
18
  label: u = "筛选",
19
19
  selectedTagMaxLength: h = j
20
20
  }) => {
21
- const { selectedItems: a, register: s, unregister: d, clearAll: f } = S(), N = L(() => ({ register: s, unregister: d }), [s, d]), v = F.useCallback(() => {
22
- f(), i == null || i();
23
- }, [f, i]);
24
- return /* @__PURE__ */ o("div", { className: e("common-filter-root", t["common-filter-root"]), children: [
25
- /* @__PURE__ */ o("div", { className: e("common-filter-container", t["common-filter-container"]), children: [
26
- /* @__PURE__ */ l("span", { className: e("common-filter-label", t["common-filter-label"]), children: u }),
27
- /* @__PURE__ */ l(_, { ctx: N, children: /* @__PURE__ */ o("div", { className: e("common-filter-content", t["common-filter-content"]), children: [
28
- /* @__PURE__ */ o("div", { className: e("common-filter-items", t["common-filter-items"]), children: [
29
- r,
30
- c
21
+ const { selectedItems: a, register: s, unregister: f, clearAll: d } = S(), N = L(() => ({ register: s, unregister: f }), [s, f]), v = F.useCallback(() => {
22
+ d(), i == null || i();
23
+ }, [d, i]);
24
+ return /* @__PURE__ */ o("div", { className: t("common-filter-root", e["common-filter-root"]), children: [
25
+ /* @__PURE__ */ o("div", { className: t("common-filter-container", e["common-filter-container"]), children: [
26
+ /* @__PURE__ */ l("span", { className: t("common-filter-label", e["common-filter-label"]), children: u }),
27
+ /* @__PURE__ */ l(_, { ctx: N, children: /* @__PURE__ */ o("div", { className: t("common-filter-content", e["common-filter-content"]), children: [
28
+ /* @__PURE__ */ o("div", { className: t("common-filter-items", e["common-filter-items"]), children: [
29
+ m,
30
+ r
31
31
  ] }),
32
- n && /* @__PURE__ */ l("div", { className: e("common-filter-extra", t["common-filter-extra"]), children: n })
32
+ n && /* @__PURE__ */ l("div", { className: t("common-filter-extra", e["common-filter-extra"]), children: n })
33
33
  ] }) })
34
34
  ] }),
35
- a.length > 0 && /* @__PURE__ */ o("div", { className: e("common-filter-selected", t["common-filter-selected"]), children: [
36
- /* @__PURE__ */ o("div", { className: e("common-filter-selected-main", t["common-filter-selected-main"]), children: [
37
- /* @__PURE__ */ l("span", { className: e("common-filter-selected-title", t["common-filter-selected-title"]), children: "您已选择" }),
38
- /* @__PURE__ */ l(k, { size: [8, 8], wrap: !0, className: e("common-filter-selected-tags", t["common-filter-selected-tags"]), children: a.map((m) => {
39
- const { display: p, truncated: g } = z(m.valueLabel, h), b = g ? /* @__PURE__ */ l(E, { title: m.valueLabel, children: /* @__PURE__ */ l("span", { children: p }) }) : /* @__PURE__ */ l("span", { children: p });
40
- return /* @__PURE__ */ l(D, { color: "primary", children: /* @__PURE__ */ o("span", { className: e("common-filter-tag", t["common-filter-tag"]), children: [
35
+ a.length > 0 && /* @__PURE__ */ o("div", { className: t("common-filter-selected", e["common-filter-selected"]), children: [
36
+ /* @__PURE__ */ o("div", { className: t("common-filter-selected-main", e["common-filter-selected-main"]), children: [
37
+ /* @__PURE__ */ l("span", { className: t("common-filter-selected-title", e["common-filter-selected-title"]), children: "您已选择" }),
38
+ /* @__PURE__ */ l(k, { size: [8, 8], wrap: !0, className: t("common-filter-selected-tags", e["common-filter-selected-tags"]), children: a.map((c) => {
39
+ const { display: p, truncated: b } = z(c.valueLabel, h), g = b ? /* @__PURE__ */ l(E, { title: c.valueLabel, children: /* @__PURE__ */ l("span", { children: p }) }) : /* @__PURE__ */ l("span", { children: p });
40
+ return /* @__PURE__ */ l(D, { color: "primary", children: /* @__PURE__ */ o("span", { className: t("common-filter-tag", e["common-filter-tag"]), children: [
41
41
  /* @__PURE__ */ o(
42
42
  "span",
43
43
  {
44
- className: e("common-filter-tag-label", t["common-filter-tag-label"]),
44
+ className: t("common-filter-tag-label", e["common-filter-tag-label"]),
45
45
  style: { color: "var(--font-color)" },
46
46
  children: [
47
- m.label,
47
+ c.label,
48
48
  ":"
49
49
  ]
50
50
  }
51
51
  ),
52
- b,
52
+ g,
53
53
  /* @__PURE__ */ l(
54
54
  T,
55
55
  {
56
- className: e("common-filter-tag-close", t["common-filter-tag-close"]),
56
+ className: t(
57
+ "common-filter-tag-close",
58
+ e["common-filter-tag-close"],
59
+ c.removable === !1 && e["common-filter-tag-close-disabled"]
60
+ ),
57
61
  onClick: (y) => {
58
- y.preventDefault(), m.onRemove();
62
+ y.preventDefault(), c.removable !== !1 && c.onRemove();
59
63
  }
60
64
  }
61
65
  )
62
- ] }) }, m.key);
66
+ ] }) }, c.key);
63
67
  }) })
64
68
  ] }),
65
69
  /* @__PURE__ */ l(
@@ -68,7 +72,7 @@ const I = ({
68
72
  type: "link",
69
73
  size: "small",
70
74
  onClick: v,
71
- className: e("common-filter-clear-btn", t["common-filter-clear-btn"]),
75
+ className: t("common-filter-clear-btn", e["common-filter-clear-btn"]),
72
76
  children: "清空全部"
73
77
  }
74
78
  )
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../src/components/Filter/CommonFilter/index.tsx"],"sourcesContent":["import { SemanticTag } from '@/components/Tag';\nimport { X } from '@/components/Icons';\nimport { Button, Space, Tooltip } from 'antd';\nimport classNames from 'classnames';\nimport React, { useMemo } from 'react';\nimport styles from './style.module.scss';\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\ninterface CommonFilterProps {\n children?: React.ReactNode;\n /** 筛选项 JSX 数组,如 [<FilterInput .../>, <FilterSelect .../>] */\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\n/**\n * 通用筛选栏容器\n *\n * 内部通过 useFilterState 管理各子组件的注册状态,\n * 子组件(FilterInput / FilterSelect / FilterTreeSelect)自行通过 useFilterRegister 注册选中项。\n * 外部不再需要手动维护 selectedItems 数组。\n *\n * 用法一(children 模式):\n * ```tsx\n * <CommonFilter label=\"筛选\">\n * <FilterInput filterKey=\"keyword\" label=\"关键词\" value={keyword} onChange={setKeyword} />\n * <FilterSelect filterKey=\"status\" label=\"状态\" options={options} value={status} onChange={setStatus} />\n * </CommonFilter>\n * ```\n *\n * 用法二(list 模式):\n * ```tsx\n * const filterList = [\n * <FilterInput key=\"keyword\" filterKey=\"keyword\" label=\"关键词\" value={keyword} onChange={setKeyword} />,\n * <FilterSelect key=\"status\" filterKey=\"status\" label=\"状态\" options={options} value={status} onChange={setStatus} />,\n * ];\n * <CommonFilter label=\"筛选\" list={filterList} extra={<Button>导出</Button>} />\n * ```\n */\nconst CommonFilter: React.FC<CommonFilterProps> = ({\n children,\n list,\n extra,\n onClearAll,\n label = '筛选',\n selectedTagMaxLength = DEFAULT_SELECTED_TAG_MAX_LENGTH,\n}) => {\n const { selectedItems, register, unregister, clearAll } = useFilterState();\n\n const filterCtx = useMemo(() => ({ register, unregister }), [register, unregister]);\n\n // 合并外部 onClearAll 和内部的 clearAll\n const handleClearAll = React.useCallback(() => {\n clearAll();\n onClearAll?.();\n }, [clearAll, onClearAll]);\n\n return (\n <div className={classNames('common-filter-root', styles['common-filter-root'])}>\n {/* 筛选行 */}\n <div className={classNames('common-filter-container', styles['common-filter-container'])}>\n <span className={classNames('common-filter-label', styles['common-filter-label'])}>{label}</span>\n <FilterProvider ctx={filterCtx}>\n <div className={classNames('common-filter-content', styles['common-filter-content'])}>\n <div className={classNames('common-filter-items', styles['common-filter-items'])}>\n {list}\n {children}\n </div>\n {extra && (\n <div className={classNames('common-filter-extra', styles['common-filter-extra'])}>{extra}</div>\n )}\n </div>\n </FilterProvider>\n </div>\n\n {/* 已选择行 */}\n {selectedItems.length > 0 && (\n <div className={classNames('common-filter-selected', styles['common-filter-selected'])}>\n <div className={classNames('common-filter-selected-main', styles['common-filter-selected-main'])}>\n <span className={classNames('common-filter-selected-title', styles['common-filter-selected-title'])}>\n 您已选择\n </span>\n <Space size={[8, 8]} wrap className={classNames('common-filter-selected-tags', styles['common-filter-selected-tags'])}>\n {selectedItems.map((s) => {\n const { display, truncated } = truncateText(s.valueLabel, selectedTagMaxLength);\n const valueNode = truncated ? (\n <Tooltip title={s.valueLabel}>\n <span>{display}</span>\n </Tooltip>\n ) : (\n <span>{display}</span>\n );\n\n return (\n <SemanticTag key={s.key} color=\"primary\">\n <span className={classNames('common-filter-tag', styles['common-filter-tag'])}>\n <span\n className={classNames('common-filter-tag-label', styles['common-filter-tag-label'])}\n style={{ color: 'var(--font-color)' }}\n >\n {s.label}:\n </span>\n {valueNode}\n <X\n className={classNames('common-filter-tag-close', styles['common-filter-tag-close'])}\n onClick={(e) => {\n e.preventDefault();\n s.onRemove();\n }}\n />\n </span>\n </SemanticTag>\n );\n })}\n </Space>\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","CommonFilter","children","list","extra","onClearAll","label","selectedTagMaxLength","selectedItems","register","unregister","clearAll","useFilterState","filterCtx","useMemo","handleClearAll","React","jsxs","classNames","styles","jsx","FilterProvider","Space","s","display","truncated","valueNode","Tooltip","SemanticTag","X","e","Button"],"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 { X } from '@/components/Icons';\nimport { Button, Space, Tooltip } from 'antd';\nimport classNames from 'classnames';\nimport React, { useMemo } from 'react';\nimport styles from './style.module.scss';\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\ninterface CommonFilterProps {\n children?: React.ReactNode;\n /** 筛选项 JSX 数组,如 [<FilterInput .../>, <FilterSelect .../>] */\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\n/**\n * 通用筛选栏容器\n *\n * 内部通过 useFilterState 管理各子组件的注册状态,\n * 子组件(FilterInput / FilterSelect / FilterTreeSelect)自行通过 useFilterRegister 注册选中项。\n * 外部不再需要手动维护 selectedItems 数组。\n *\n * 用法一(children 模式):\n * ```tsx\n * <CommonFilter label=\"筛选\">\n * <FilterInput filterKey=\"keyword\" label=\"关键词\" value={keyword} onChange={setKeyword} />\n * <FilterSelect filterKey=\"status\" label=\"状态\" options={options} value={status} onChange={setStatus} />\n * </CommonFilter>\n * ```\n *\n * 用法二(list 模式):\n * ```tsx\n * const filterList = [\n * <FilterInput key=\"keyword\" filterKey=\"keyword\" label=\"关键词\" value={keyword} onChange={setKeyword} />,\n * <FilterSelect key=\"status\" filterKey=\"status\" label=\"状态\" options={options} value={status} onChange={setStatus} />,\n * ];\n * <CommonFilter label=\"筛选\" list={filterList} extra={<Button>导出</Button>} />\n * ```\n */\nconst CommonFilter: React.FC<CommonFilterProps> = ({\n children,\n list,\n extra,\n onClearAll,\n label = '筛选',\n selectedTagMaxLength = DEFAULT_SELECTED_TAG_MAX_LENGTH,\n}) => {\n const { selectedItems, register, unregister, clearAll } = useFilterState();\n\n const filterCtx = useMemo(() => ({ register, unregister }), [register, unregister]);\n\n // 合并外部 onClearAll 和内部的 clearAll\n const handleClearAll = React.useCallback(() => {\n clearAll();\n onClearAll?.();\n }, [clearAll, onClearAll]);\n\n return (\n <div className={classNames('common-filter-root', styles['common-filter-root'])}>\n {/* 筛选行 */}\n <div className={classNames('common-filter-container', styles['common-filter-container'])}>\n <span className={classNames('common-filter-label', styles['common-filter-label'])}>{label}</span>\n <FilterProvider ctx={filterCtx}>\n <div className={classNames('common-filter-content', styles['common-filter-content'])}>\n <div className={classNames('common-filter-items', styles['common-filter-items'])}>\n {list}\n {children}\n </div>\n {extra && (\n <div className={classNames('common-filter-extra', styles['common-filter-extra'])}>{extra}</div>\n )}\n </div>\n </FilterProvider>\n </div>\n\n {/* 已选择行 */}\n {selectedItems.length > 0 && (\n <div className={classNames('common-filter-selected', styles['common-filter-selected'])}>\n <div className={classNames('common-filter-selected-main', styles['common-filter-selected-main'])}>\n <span className={classNames('common-filter-selected-title', styles['common-filter-selected-title'])}>\n 您已选择\n </span>\n <Space size={[8, 8]} wrap className={classNames('common-filter-selected-tags', styles['common-filter-selected-tags'])}>\n {selectedItems.map((s) => {\n const { display, truncated } = truncateText(s.valueLabel, selectedTagMaxLength);\n const valueNode = truncated ? (\n <Tooltip title={s.valueLabel}>\n <span>{display}</span>\n </Tooltip>\n ) : (\n <span>{display}</span>\n );\n\n return (\n <SemanticTag key={s.key} color=\"primary\">\n <span className={classNames('common-filter-tag', styles['common-filter-tag'])}>\n <span\n className={classNames('common-filter-tag-label', styles['common-filter-tag-label'])}\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 <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","CommonFilter","children","list","extra","onClearAll","label","selectedTagMaxLength","selectedItems","register","unregister","clearAll","useFilterState","filterCtx","useMemo","handleClearAll","React","jsxs","classNames","styles","jsx","FilterProvider","Space","s","display","truncated","valueNode","Tooltip","SemanticTag","X","e","Button"],"mappings":"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"}
@@ -1,20 +1,21 @@
1
- const o = {
2
- "common-filter-root": "_common-filter-root_kdoz3_1",
3
- "common-filter-container": "_common-filter-container_kdoz3_6",
4
- "common-filter-label": "_common-filter-label_kdoz3_12",
5
- "common-filter-content": "_common-filter-content_kdoz3_19",
6
- "common-filter-items": "_common-filter-items_kdoz3_26",
7
- "common-filter-extra": "_common-filter-extra_kdoz3_34",
8
- "common-filter-selected": "_common-filter-selected_kdoz3_39",
9
- "common-filter-selected-main": "_common-filter-selected-main_kdoz3_46",
10
- "common-filter-selected-title": "_common-filter-selected-title_kdoz3_52",
11
- "common-filter-selected-tags": "_common-filter-selected-tags_kdoz3_58",
12
- "common-filter-tag": "_common-filter-tag_kdoz3_62",
13
- "common-filter-tag-label": "_common-filter-tag-label_kdoz3_68",
14
- "common-filter-tag-close": "_common-filter-tag-close_kdoz3_72",
15
- "common-filter-clear-btn": "_common-filter-clear-btn_kdoz3_82"
1
+ const e = {
2
+ "common-filter-root": "_common-filter-root_16e7m_1",
3
+ "common-filter-container": "_common-filter-container_16e7m_6",
4
+ "common-filter-label": "_common-filter-label_16e7m_12",
5
+ "common-filter-content": "_common-filter-content_16e7m_19",
6
+ "common-filter-items": "_common-filter-items_16e7m_26",
7
+ "common-filter-extra": "_common-filter-extra_16e7m_34",
8
+ "common-filter-selected": "_common-filter-selected_16e7m_39",
9
+ "common-filter-selected-main": "_common-filter-selected-main_16e7m_46",
10
+ "common-filter-selected-title": "_common-filter-selected-title_16e7m_52",
11
+ "common-filter-selected-tags": "_common-filter-selected-tags_16e7m_58",
12
+ "common-filter-tag": "_common-filter-tag_16e7m_62",
13
+ "common-filter-tag-label": "_common-filter-tag-label_16e7m_68",
14
+ "common-filter-tag-close": "_common-filter-tag-close_16e7m_72",
15
+ "common-filter-tag-close-disabled": "_common-filter-tag-close-disabled_16e7m_82",
16
+ "common-filter-clear-btn": "_common-filter-clear-btn_16e7m_88"
16
17
  };
17
18
  export {
18
- o as default
19
+ e as default
19
20
  };
20
21
  //# sourceMappingURL=style.module.scss.js.map
@@ -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":";;;;;;;;;;;;;;;;;"}
@@ -10,6 +10,8 @@ interface QuickOption {
10
10
  interface FilterDateRangeProps extends BaseFilterProps {
11
11
  value?: [string, string] | null;
12
12
  onChange?: (value: [string, string] | null) => void;
13
+ /** 默认区间:与默认相同时视为未筛选 */
14
+ defaultValue?: [string, string];
13
15
  showQuickOptions?: boolean;
14
16
  quickOptions?: QuickOption[];
15
17
  }
@@ -1,13 +1,13 @@
1
- import { jsxs as F, jsx as u } from "react/jsx-runtime";
2
- import { DatePicker as P } from "antd";
1
+ import { jsxs as L, jsx as g } from "react/jsx-runtime";
2
+ import { DatePicker as Q } from "antd";
3
3
  import s from "dayjs";
4
- import { useState as D, useEffect as q, useMemo as j } from "react";
5
- import x from "../FilterPopover/index.js";
6
- import { resolveHidden as w } from "../types.js";
7
- import { useFilterRegister as I } from "../useFilterState.js";
8
- import l from "./style.module.scss.js";
9
- import d from "classnames";
10
- const { RangePicker: V } = P, L = [
4
+ import { useState as O, useEffect as R, useMemo as W } from "react";
5
+ import _ from "../FilterPopover/index.js";
6
+ import { resolveHidden as M } from "../types.js";
7
+ import { useFilterRegister as $ } from "../useFilterState.js";
8
+ import m from "./style.module.scss.js";
9
+ import Y from "classnames";
10
+ const { RangePicker: A } = Q, B = [
11
11
  {
12
12
  key: "lastWeek",
13
13
  label: "上周",
@@ -21,69 +21,80 @@ const { RangePicker: V } = P, L = [
21
21
  label: "本周",
22
22
  getValue: () => [s().startOf("week"), s().endOf("week")]
23
23
  }
24
- ], E = ({
25
- filterKey: f,
26
- label: m,
24
+ ];
25
+ function E(e, r) {
26
+ return !(e != null && e[0]) || !(e != null && e[1]) ? !(r != null && r[0]) || !(r != null && r[1]) : !(r != null && r[0]) || !(r != null && r[1]) ? !1 : e[0] === r[0] && e[1] === r[1];
27
+ }
28
+ const a = ({
29
+ filterKey: e,
30
+ label: r,
27
31
  value: t,
28
- onChange: e,
29
- showQuickOptions: N = !0,
30
- quickOptions: O,
31
- active: R,
32
+ onChange: n,
33
+ defaultValue: F,
34
+ showQuickOptions: P = !0,
35
+ quickOptions: V,
36
+ active: j,
32
37
  hidden: k
33
38
  }) => {
34
- const [r, c] = D(
39
+ const [I, p] = O(!1), [o, c] = O(
35
40
  t ? [s(t[0]), s(t[1])] : null
36
- ), [a, n] = D(null), o = I();
37
- q(() => {
38
- c(t ? [s(t[0]), s(t[1])] : null);
41
+ ), [y, d] = O(null), f = $(), N = () => {
42
+ t != null && t[0] && (t != null && t[1]) ? c([s(t[0]), s(t[1])]) : c(null), d(null);
43
+ };
44
+ R(() => {
45
+ t != null && t[0] && (t != null && t[1]) ? c([s(t[0]), s(t[1])]) : c(null);
39
46
  }, [t]);
40
- const p = j(() => !(t != null && t[0]) || !(t != null && t[1]) ? "" : `${t[0]} ~ ${t[1]}`, [t]);
41
- if (q(() => {
42
- if (o) {
43
- if (w(k)) {
44
- o.unregister(f);
47
+ const l = !!(t != null && t[0]) && !E(t, F), D = W(() => !l || !(t != null && t[0]) || !(t != null && t[1]) ? "" : `${t[0]} ~ ${t[1]}`, [l, t]);
48
+ if (R(() => {
49
+ if (f) {
50
+ if (M(k)) {
51
+ f.unregister(e);
45
52
  return;
46
53
  }
47
- p ? o.register(f, { label: m, valueLabel: p, onRemove: () => e == null ? void 0 : e(null) }) : o.unregister(f);
54
+ D ? f.register(e, { label: r, valueLabel: D, onRemove: () => n == null ? void 0 : n(null) }) : f.unregister(e);
48
55
  }
49
- }, [p, f, m, k]), w(k)) return null;
50
- const M = () => {
51
- r != null && r[0] && (r != null && r[1]) ? e == null || e([r[0].format("YYYY-MM-DD"), r[1].format("YYYY-MM-DD")]) : e == null || e(null);
52
- }, b = () => {
53
- c(null), n(null), e == null || e(null);
54
- }, Y = O ?? (N ? L : []);
55
- return /* @__PURE__ */ F(
56
- x,
56
+ }, [D, e, r, k]), M(k)) return null;
57
+ const S = () => {
58
+ o != null && o[0] && (o != null && o[1]) ? n == null || n([o[0].format("YYYY-MM-DD"), o[1].format("YYYY-MM-DD")]) : n == null || n(null), p(!1);
59
+ }, T = () => {
60
+ N(), p(!1);
61
+ }, x = (i) => {
62
+ i || N(), p(i);
63
+ }, q = V ?? (P ? B : []);
64
+ return /* @__PURE__ */ L(
65
+ _,
57
66
  {
58
- label: m,
59
- active: R || !!(t != null && t[0]),
60
- onConfirm: M,
61
- onReset: b,
67
+ label: r,
68
+ active: j || l,
69
+ open: I,
70
+ onOpenChange: x,
71
+ onConfirm: S,
72
+ onReset: T,
62
73
  children: [
63
- Y.length > 0 && /* @__PURE__ */ u("div", { className: d("filter-date-range-quick-options", l["filter-date-range-quick-options"]), children: Y.map((i) => /* @__PURE__ */ u(
74
+ q.length > 0 && /* @__PURE__ */ g("div", { className: Y("filter-date-range-quick-options", m["filter-date-range-quick-options"]), children: q.map((i) => /* @__PURE__ */ g(
64
75
  "span",
65
76
  {
66
- className: d(
77
+ className: Y(
67
78
  "filter-date-range-quick-option",
68
- l["filter-date-range-quick-option"],
69
- a === i.key && "filter-date-range-quick-option-active",
70
- a === i.key && l["filter-date-range-quick-option-active"]
79
+ m["filter-date-range-quick-option"],
80
+ y === i.key && "filter-date-range-quick-option-active",
81
+ y === i.key && m["filter-date-range-quick-option-active"]
71
82
  ),
72
83
  onClick: () => {
73
- const y = i.getValue();
74
- y && (c(y), n(i.key));
84
+ const w = i.getValue();
85
+ w && (c(w), d(i.key));
75
86
  },
76
87
  children: i.label
77
88
  },
78
89
  i.key
79
90
  )) }),
80
- /* @__PURE__ */ u(
81
- V,
91
+ /* @__PURE__ */ g(
92
+ A,
82
93
  {
83
- className: d("filter-date-range-picker", l["filter-date-range-picker"]),
84
- value: r,
94
+ className: Y("filter-date-range-picker", m["filter-date-range-picker"]),
95
+ value: o,
85
96
  onChange: (i) => {
86
- c(i), n(null);
97
+ c(i), d(null);
87
98
  }
88
99
  }
89
100
  )
@@ -92,6 +103,6 @@ const { RangePicker: V } = P, L = [
92
103
  );
93
104
  };
94
105
  export {
95
- E as default
106
+ a as default
96
107
  };
97
108
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../src/components/Filter/FilterDateRange/index.tsx"],"sourcesContent":["import { DatePicker } from 'antd';\nimport dayjs, { Dayjs } from 'dayjs';\nimport React, { useEffect, useMemo, useState } from 'react';\nimport FilterPopover from '../FilterPopover';\nimport type { BaseFilterProps } from '../types';\nimport { resolveHidden } from '../types';\nimport { useFilterRegister } from '../useFilterState';\nimport styles from './style.module.scss';\nimport classNames from 'classnames';\n\nconst { RangePicker } = DatePicker;\n\n/** 快捷选项配置类型 */\ninterface QuickOption {\n key: string;\n label: string;\n getValue: () => [Dayjs, Dayjs] | null;\n}\n\n/** 内置快捷选项 */\nconst BUILT_IN_OPTIONS: QuickOption[] = [\n {\n key: 'lastWeek',\n label: '上周',\n getValue: () => [\n dayjs().subtract(1, 'week').startOf('week'),\n dayjs().subtract(1, 'week').endOf('week'),\n ],\n },\n {\n key: 'thisWeek',\n label: '本周',\n getValue: () => [dayjs().startOf('week'), dayjs().endOf('week')],\n },\n];\n\ninterface FilterDateRangeProps extends BaseFilterProps {\n value?: [string, string] | null;\n onChange?: (value: [string, string] | null) => void;\n showQuickOptions?: boolean;\n quickOptions?: QuickOption[];\n}\n\nconst FilterDateRange: React.FC<FilterDateRangeProps> = ({\n filterKey,\n label,\n value,\n onChange,\n showQuickOptions = true,\n quickOptions,\n active,\n hidden,\n}) => {\n const [dates, setDates] = useState<[Dayjs | null, Dayjs | null] | null>(\n value ? [dayjs(value[0]), dayjs(value[1])] : null,\n );\n const [activeQuickKey, setActiveQuickKey] = useState<string | null>(null);\n\n // ── 自动注册到 CommonFilter ──\n const registerFn = useFilterRegister();\n\n // 同步外部 value 到内部 dates\n useEffect(() => {\n if (value) {\n setDates([dayjs(value[0]), dayjs(value[1])]);\n } else {\n setDates(null);\n }\n }, [value]);\n\n const valueLabel = useMemo(() => {\n if (!value?.[0] || !value?.[1]) return '';\n return `${value[0]} ~ ${value[1]}`;\n }, [value]);\n\n useEffect(() => {\n if (!registerFn) return;\n if (resolveHidden(hidden)) {\n registerFn.unregister(filterKey);\n return;\n }\n if (valueLabel) {\n registerFn.register(filterKey, { label, valueLabel, onRemove: () => onChange?.(null) });\n } else {\n registerFn.unregister(filterKey);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [valueLabel, filterKey, label, hidden]);\n\n // hidden 处理 - 必须在所有 hooks 之后\n if (resolveHidden(hidden)) return null;\n\n const handleConfirm = () => {\n if (dates?.[0] && dates?.[1]) {\n onChange?.([dates[0].format('YYYY-MM-DD'), dates[1].format('YYYY-MM-DD')]);\n } else {\n onChange?.(null);\n }\n };\n\n const handleReset = () => {\n setDates(null);\n setActiveQuickKey(null);\n onChange?.(null);\n };\n\n const opts = quickOptions ?? (showQuickOptions ? BUILT_IN_OPTIONS : []);\n\n return (\n <FilterPopover\n label={label}\n active={active || !!value?.[0]}\n onConfirm={handleConfirm}\n onReset={handleReset}\n >\n {/* 快捷选项 */}\n {opts.length > 0 && (\n <div className={classNames('filter-date-range-quick-options', styles['filter-date-range-quick-options'])}>\n {opts.map((opt) => (\n <span\n key={opt.key}\n className={classNames('filter-date-range-quick-option', styles['filter-date-range-quick-option'],\n activeQuickKey === opt.key && 'filter-date-range-quick-option-active',\n activeQuickKey === opt.key && styles['filter-date-range-quick-option-active'],\n )}\n onClick={() => {\n const v = opt.getValue();\n if (v) {\n setDates(v);\n setActiveQuickKey(opt.key);\n }\n }}\n >\n {opt.label}\n </span>\n ))}\n </div>\n )}\n <RangePicker\n className={classNames('filter-date-range-picker', styles['filter-date-range-picker'])}\n value={dates}\n onChange={(vals) => {\n setDates(vals as [Dayjs | null, Dayjs | null] | null);\n setActiveQuickKey(null);\n }}\n />\n </FilterPopover>\n );\n};\n\nexport default FilterDateRange;\nexport type { FilterDateRangeProps, QuickOption };\n"],"names":["RangePicker","DatePicker","BUILT_IN_OPTIONS","dayjs","FilterDateRange","filterKey","label","value","onChange","showQuickOptions","quickOptions","active","hidden","dates","setDates","useState","activeQuickKey","setActiveQuickKey","registerFn","useFilterRegister","useEffect","valueLabel","useMemo","resolveHidden","handleConfirm","handleReset","opts","jsxs","FilterPopover","jsx","classNames","styles","opt","v","vals"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../../src/components/Filter/FilterDateRange/index.tsx"],"sourcesContent":["import { DatePicker } from 'antd';\nimport dayjs, { Dayjs } from 'dayjs';\nimport React, { useEffect, useMemo, useState } from 'react';\nimport FilterPopover from '../FilterPopover';\nimport type { BaseFilterProps } from '../types';\nimport { resolveHidden } from '../types';\nimport { useFilterRegister } from '../useFilterState';\nimport styles from './style.module.scss';\nimport classNames from 'classnames';\n\nconst { RangePicker } = DatePicker;\n\n/** 快捷选项配置类型 */\ninterface QuickOption {\n key: string;\n label: string;\n getValue: () => [Dayjs, Dayjs] | null;\n}\n\n/** 内置快捷选项 */\nconst BUILT_IN_OPTIONS: QuickOption[] = [\n {\n key: 'lastWeek',\n label: '上周',\n getValue: () => [\n dayjs().subtract(1, 'week').startOf('week'),\n dayjs().subtract(1, 'week').endOf('week'),\n ],\n },\n {\n key: 'thisWeek',\n label: '本周',\n getValue: () => [dayjs().startOf('week'), dayjs().endOf('week')],\n },\n];\n\ninterface FilterDateRangeProps extends BaseFilterProps {\n value?: [string, string] | null;\n onChange?: (value: [string, string] | null) => void;\n /** 默认区间:与默认相同时视为未筛选 */\n defaultValue?: [string, string];\n showQuickOptions?: boolean;\n quickOptions?: QuickOption[];\n}\n\nfunction isSameRange(a?: [string, string] | null, b?: [string, string]): boolean {\n if (!a?.[0] || !a?.[1]) return !b?.[0] || !b?.[1];\n if (!b?.[0] || !b?.[1]) return false;\n return a[0] === b[0] && a[1] === b[1];\n}\n\nconst FilterDateRange: React.FC<FilterDateRangeProps> = ({\n filterKey,\n label,\n value,\n onChange,\n defaultValue,\n showQuickOptions = true,\n quickOptions,\n active,\n hidden,\n}) => {\n const [open, setOpen] = useState(false);\n const [dates, setDates] = useState<[Dayjs | null, Dayjs | null] | null>(\n value ? [dayjs(value[0]), dayjs(value[1])] : null,\n );\n const [activeQuickKey, setActiveQuickKey] = useState<string | null>(null);\n\n const registerFn = useFilterRegister();\n\n const revertToCommitted = () => {\n if (value?.[0] && value?.[1]) {\n setDates([dayjs(value[0]), dayjs(value[1])]);\n } else {\n setDates(null);\n }\n setActiveQuickKey(null);\n };\n\n useEffect(() => {\n if (value?.[0] && value?.[1]) {\n setDates([dayjs(value[0]), dayjs(value[1])]);\n } else {\n setDates(null);\n }\n }, [value]);\n\n const hasNonDefaultValue = !!value?.[0] && !isSameRange(value, defaultValue);\n\n const valueLabel = useMemo(() => {\n if (!hasNonDefaultValue || !value?.[0] || !value?.[1]) return '';\n return `${value[0]} ~ ${value[1]}`;\n }, [hasNonDefaultValue, value]);\n\n useEffect(() => {\n if (!registerFn) return;\n if (resolveHidden(hidden)) {\n registerFn.unregister(filterKey);\n return;\n }\n if (valueLabel) {\n registerFn.register(filterKey, { label, valueLabel, onRemove: () => onChange?.(null) });\n } else {\n registerFn.unregister(filterKey);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [valueLabel, filterKey, label, hidden]);\n\n if (resolveHidden(hidden)) return null;\n\n const handleConfirm = () => {\n if (dates?.[0] && dates?.[1]) {\n onChange?.([dates[0].format('YYYY-MM-DD'), dates[1].format('YYYY-MM-DD')]);\n } else {\n onChange?.(null);\n }\n setOpen(false);\n };\n\n const handleDiscardDraft = () => {\n revertToCommitted();\n setOpen(false);\n };\n\n const handleOpenChange = (nextOpen: boolean) => {\n if (!nextOpen) {\n revertToCommitted();\n }\n setOpen(nextOpen);\n };\n\n const opts = quickOptions ?? (showQuickOptions ? BUILT_IN_OPTIONS : []);\n\n return (\n <FilterPopover\n label={label}\n active={active || hasNonDefaultValue}\n open={open}\n onOpenChange={handleOpenChange}\n onConfirm={handleConfirm}\n onReset={handleDiscardDraft}\n >\n {opts.length > 0 && (\n <div className={classNames('filter-date-range-quick-options', styles['filter-date-range-quick-options'])}>\n {opts.map((opt) => (\n <span\n key={opt.key}\n className={classNames('filter-date-range-quick-option', styles['filter-date-range-quick-option'],\n activeQuickKey === opt.key && 'filter-date-range-quick-option-active',\n activeQuickKey === opt.key && styles['filter-date-range-quick-option-active'],\n )}\n onClick={() => {\n const v = opt.getValue();\n if (v) {\n setDates(v);\n setActiveQuickKey(opt.key);\n }\n }}\n >\n {opt.label}\n </span>\n ))}\n </div>\n )}\n <RangePicker\n className={classNames('filter-date-range-picker', styles['filter-date-range-picker'])}\n value={dates}\n onChange={(vals) => {\n setDates(vals as [Dayjs | null, Dayjs | null] | null);\n setActiveQuickKey(null);\n }}\n />\n </FilterPopover>\n );\n};\n\nexport default FilterDateRange;\nexport type { FilterDateRangeProps, QuickOption };\n"],"names":["RangePicker","DatePicker","BUILT_IN_OPTIONS","dayjs","isSameRange","a","b","FilterDateRange","filterKey","label","value","onChange","defaultValue","showQuickOptions","quickOptions","active","hidden","open","setOpen","useState","dates","setDates","activeQuickKey","setActiveQuickKey","registerFn","useFilterRegister","revertToCommitted","useEffect","hasNonDefaultValue","valueLabel","useMemo","resolveHidden","handleConfirm","handleDiscardDraft","handleOpenChange","nextOpen","opts","jsxs","FilterPopover","jsx","classNames","styles","opt","v","vals"],"mappings":"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"}
@@ -1,15 +1,21 @@
1
1
  import { default as React } from 'react';
2
2
  import { BaseFilterProps, FilterOption } from '../types';
3
+ type FilterSelectValue = string | number | (string | number)[] | undefined;
4
+ export type { FilterSelectValue };
3
5
  interface FilterSelectProps extends BaseFilterProps {
4
6
  options: FilterOption[];
5
- value?: string | number | undefined;
6
- onChange?: (value: string | number | undefined) => void;
7
+ value?: FilterSelectValue;
8
+ onChange?: (value: FilterSelectValue) => void;
7
9
  /** 默认值:与默认值相同时视为未筛选(不展示已选标签与选中态) */
8
10
  defaultValue?: string | number;
11
+ /** 多选默认值:与默认集合相同时视为未筛选 */
12
+ defaultValues?: (string | number)[];
9
13
  placeholder?: string;
10
14
  searchable?: boolean;
11
15
  /** 是否多选 */
12
16
  multiple?: boolean;
17
+ /** 多选至少保留项数;达到下限时不允许移除已选标签 */
18
+ minSelection?: number;
13
19
  /** 人员选项:展示部门与联系方式 */
14
20
  variant?: 'default' | 'person';
15
21
  }