@hkyhy/marsun-components-core 0.1.29 → 0.1.31

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 (63) hide show
  1. package/dist/components/Auth/UserProfileCard/UserProfileCard.d.ts +7 -1
  2. package/dist/components/Auth/UserProfileCard/UserProfileCard.js +59 -28
  3. package/dist/components/Auth/UserProfileCard/UserProfileCard.js.map +1 -1
  4. package/dist/components/Auth/UserProfileCard/style.module.scss.js +16 -10
  5. package/dist/components/Auth/UserProfileCard/style.module.scss.js.map +1 -1
  6. package/dist/components/Filter/CommonFilter/index.js +88 -53
  7. package/dist/components/Filter/CommonFilter/index.js.map +1 -1
  8. package/dist/components/Filter/FilterCascader/index.d.ts +40 -0
  9. package/dist/components/Filter/FilterCascader/index.js +318 -0
  10. package/dist/components/Filter/FilterCascader/index.js.map +1 -0
  11. package/dist/components/Filter/FilterCascader/style.module.scss.js +14 -0
  12. package/dist/components/Filter/FilterCascader/style.module.scss.js.map +1 -0
  13. package/dist/components/Filter/FilterDatePicker/index.js +102 -84
  14. package/dist/components/Filter/FilterDatePicker/index.js.map +1 -1
  15. package/dist/components/Filter/FilterDateRange/index.js +84 -66
  16. package/dist/components/Filter/FilterDateRange/index.js.map +1 -1
  17. package/dist/components/Filter/FilterInput/index.js +51 -33
  18. package/dist/components/Filter/FilterInput/index.js.map +1 -1
  19. package/dist/components/Filter/FilterNumberRange/index.js +87 -69
  20. package/dist/components/Filter/FilterNumberRange/index.js.map +1 -1
  21. package/dist/components/Filter/FilterPopover/index.d.ts +2 -0
  22. package/dist/components/Filter/FilterPopover/index.js +22 -21
  23. package/dist/components/Filter/FilterPopover/index.js.map +1 -1
  24. package/dist/components/Filter/FilterSelect/index.d.ts +20 -2
  25. package/dist/components/Filter/FilterSelect/index.js +237 -194
  26. package/dist/components/Filter/FilterSelect/index.js.map +1 -1
  27. package/dist/components/Filter/FilterSelect/style.module.scss.js +16 -14
  28. package/dist/components/Filter/FilterSelect/style.module.scss.js.map +1 -1
  29. package/dist/components/Filter/FilterTreeSelect/index.d.ts +18 -1
  30. package/dist/components/Filter/FilterTreeSelect/index.js +278 -218
  31. package/dist/components/Filter/FilterTreeSelect/index.js.map +1 -1
  32. package/dist/components/Filter/FilterTreeSelect/style.module.scss.js +15 -13
  33. package/dist/components/Filter/FilterTreeSelect/style.module.scss.js.map +1 -1
  34. package/dist/components/Filter/FilterTrigger/index.d.ts +3 -0
  35. package/dist/components/Filter/FilterTrigger/index.js +59 -26
  36. package/dist/components/Filter/FilterTrigger/index.js.map +1 -1
  37. package/dist/components/Filter/FilterTrigger/style.module.scss.js +5 -4
  38. package/dist/components/Filter/FilterTrigger/style.module.scss.js.map +1 -1
  39. package/dist/components/Filter/index.d.ts +7 -3
  40. package/dist/components/Filter/types.d.ts +27 -1
  41. package/dist/components/Filter/types.js +24 -7
  42. package/dist/components/Filter/types.js.map +1 -1
  43. package/dist/components/Filter/useFilterState.d.ts +37 -5
  44. package/dist/components/Filter/useFilterState.js +74 -23
  45. package/dist/components/Filter/useFilterState.js.map +1 -1
  46. package/dist/components/Table/ColumnConfigPanel.d.ts +13 -0
  47. package/dist/components/Table/ColumnConfigPanel.js +260 -0
  48. package/dist/components/Table/ColumnConfigPanel.js.map +1 -0
  49. package/dist/components/Table/Table.d.ts +16 -2
  50. package/dist/components/Table/Table.js +106 -28
  51. package/dist/components/Table/Table.js.map +1 -1
  52. package/dist/components/Table/columnConfig.module.scss.js +38 -0
  53. package/dist/components/Table/columnConfig.module.scss.js.map +1 -0
  54. package/dist/components/Table/columnConfigTypes.d.ts +22 -0
  55. package/dist/components/Table/columnConfigUtils.d.ts +25 -0
  56. package/dist/components/Table/columnConfigUtils.js +141 -0
  57. package/dist/components/Table/columnConfigUtils.js.map +1 -0
  58. package/dist/components/Table/index.d.ts +2 -1
  59. package/dist/index.js +289 -276
  60. package/dist/index.js.map +1 -1
  61. package/dist/marsun-components-core.css +1 -1
  62. package/dist/styles/global.css +1 -1
  63. package/package.json +1 -1
@@ -13,10 +13,16 @@ export type UserProfileCardProps = {
13
13
  menuItems?: MenuProps['items'];
14
14
  /** 点击默认「退出登录」时回调 */
15
15
  onLogout?: () => void;
16
+ /**
17
+ * 右侧扩展区(如站内信铃铛);在 Dropdown 触发器之外,
18
+ * 点击不会打开用户菜单。不传则不展示扩展区。
19
+ */
20
+ extra?: React.ReactNode;
16
21
  className?: string;
17
22
  };
18
23
  /**
19
- * 侧栏底部用户卡片:整卡点击向上展开菜单(默认退出登录)。
24
+ * 侧栏底部用户卡片:主区域点击向上展开菜单(默认退出登录);
25
+ * 可选 `extra` 槽承载独立操作(如站内信),与主区同处视觉壳内。
20
26
  * 纯 UI;是否挂载由业务根据登录态决定。
21
27
  */
22
28
  declare const UserProfileCard: React.FC<UserProfileCardProps>;
@@ -1,57 +1,88 @@
1
- import { jsx as e, jsxs as n } from "react/jsx-runtime";
2
- import { LogOut as u } from "../../Icons/index.js";
3
- import { Avatar as h, Dropdown as N } from "antd";
4
- import p from "classnames";
5
- import { useMemo as v } from "react";
1
+ import { jsx as e, jsxs as f } from "react/jsx-runtime";
2
+ import { LogOut as v } from "../../Icons/index.js";
3
+ import { Avatar as g, Dropdown as w } from "antd";
4
+ import i from "classnames";
5
+ import { useMemo as k } from "react";
6
6
  import r from "./style.module.scss.js";
7
- const C = ({
8
- name: l,
9
- sub: t,
10
- avatarText: f,
11
- collapsed: i = !1,
7
+ const j = ({
8
+ name: s,
9
+ sub: o,
10
+ avatarText: u,
11
+ collapsed: l = !1,
12
12
  menuItems: a,
13
- onLogout: s,
14
- className: m
13
+ onLogout: t,
14
+ extra: n,
15
+ className: d
15
16
  }) => {
16
- const d = (f || l).trim().charAt(0).toUpperCase() || "U", o = v(() => a || (s ? [
17
+ const h = (u || s).trim().charAt(0).toUpperCase() || "U", c = k(() => a || (t ? [
17
18
  {
18
19
  key: "logout",
19
20
  danger: !0,
20
21
  label: "退出登录",
21
- icon: /* @__PURE__ */ e(u, { size: 14 }),
22
- onClick: s
22
+ icon: /* @__PURE__ */ e(v, { size: 14 }),
23
+ onClick: t
23
24
  }
24
- ] : []), [a, s]), c = /* @__PURE__ */ n(
25
+ ] : []), [a, t]), m = /* @__PURE__ */ f(
25
26
  "button",
26
27
  {
27
28
  type: "button",
28
- className: p(
29
+ className: i(
29
30
  r["user-profile-card"],
30
- i && r["user-profile-card--collapsed"],
31
- m
31
+ l && r["user-profile-card--collapsed"]
32
32
  ),
33
33
  "aria-label": "用户菜单",
34
34
  children: [
35
- /* @__PURE__ */ e(h, { className: r["user-profile-avatar"], size: i ? 32 : 40, children: d }),
36
- i ? null : /* @__PURE__ */ n("div", { className: r["user-profile-meta"], children: [
37
- /* @__PURE__ */ e("div", { className: r["user-profile-name"], title: l, children: l }),
38
- t ? /* @__PURE__ */ e("div", { className: r["user-profile-sub"], title: t, children: t }) : null
35
+ /* @__PURE__ */ e(g, { className: r["user-profile-avatar"], size: l ? 32 : 40, children: h }),
36
+ l ? null : /* @__PURE__ */ f("div", { className: r["user-profile-meta"], children: [
37
+ /* @__PURE__ */ e("div", { className: r["user-profile-name"], title: s, children: s }),
38
+ o ? /* @__PURE__ */ e("div", { className: r["user-profile-sub"], title: o, children: o }) : null
39
39
  ] })
40
40
  ]
41
41
  }
42
- );
42
+ ), N = c && c.length > 0 ? /* @__PURE__ */ e(w, { menu: { items: c }, trigger: ["click"], placement: "topLeft", children: m }) : m;
43
43
  return /* @__PURE__ */ e(
44
44
  "div",
45
45
  {
46
- className: p(
46
+ className: i(
47
47
  r["user-profile-wrap"],
48
- i && r["user-profile-wrap--collapsed"]
48
+ l && r["user-profile-wrap--collapsed"]
49
49
  ),
50
- children: o && o.length > 0 ? /* @__PURE__ */ e(N, { menu: { items: o }, trigger: ["click"], placement: "topLeft", children: c }) : c
50
+ children: /* @__PURE__ */ e(
51
+ "div",
52
+ {
53
+ className: i(
54
+ r["user-profile-shell"],
55
+ l && r["user-profile-shell--collapsed"],
56
+ !!n && r["user-profile-shell--with-extra"],
57
+ d
58
+ ),
59
+ children: /* @__PURE__ */ f(
60
+ "div",
61
+ {
62
+ className: i(
63
+ r["user-profile-row"],
64
+ l && r["user-profile-row--collapsed"]
65
+ ),
66
+ children: [
67
+ /* @__PURE__ */ e("div", { className: r["user-profile-main"], children: N }),
68
+ n ? /* @__PURE__ */ e(
69
+ "div",
70
+ {
71
+ className: r["user-profile-extra"],
72
+ onClick: (p) => p.stopPropagation(),
73
+ onKeyDown: (p) => p.stopPropagation(),
74
+ children: n
75
+ }
76
+ ) : null
77
+ ]
78
+ }
79
+ )
80
+ }
81
+ )
51
82
  }
52
83
  );
53
84
  };
54
85
  export {
55
- C as default
86
+ j as default
56
87
  };
57
88
  //# sourceMappingURL=UserProfileCard.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"UserProfileCard.js","sources":["../../../../src/components/Auth/UserProfileCard/UserProfileCard.tsx"],"sourcesContent":["import { LogOut } from '../../Icons';\nimport { Avatar, Dropdown } from 'antd';\nimport type { MenuProps } from 'antd';\nimport classNames from 'classnames';\nimport React, { useMemo } from 'react';\nimport styles from './style.module.scss';\n\nexport type UserProfileCardProps = {\n /** 主文案(姓名 / 展示名) */\n name: string;\n /** 副文案(邮箱 / 工号等) */\n sub?: string;\n /** 头像文字,默认 name 首字 */\n avatarText?: string;\n /** 侧栏折叠时仅显示头像 */\n collapsed?: boolean;\n /** 自定义下拉菜单;不传则在提供 onLogout 时生成「退出登录」 */\n menuItems?: MenuProps['items'];\n /** 点击默认「退出登录」时回调 */\n onLogout?: () => void;\n className?: string;\n};\n\n/**\n * 侧栏底部用户卡片:整卡点击向上展开菜单(默认退出登录)。\n * 纯 UI;是否挂载由业务根据登录态决定。\n */\nconst UserProfileCard: React.FC<UserProfileCardProps> = ({\n name,\n sub,\n avatarText,\n collapsed = false,\n menuItems,\n onLogout,\n className,\n}) => {\n const initial = (avatarText || name).trim().charAt(0).toUpperCase() || 'U';\n\n const items = useMemo<MenuProps['items']>(() => {\n if (menuItems) return menuItems;\n if (!onLogout) return [];\n return [\n {\n key: 'logout',\n danger: true,\n label: '退出登录',\n icon: <LogOut size={14} />,\n onClick: onLogout,\n },\n ];\n }, [menuItems, onLogout]);\n\n const card = (\n <button\n type=\"button\"\n className={classNames(\n styles['user-profile-card'],\n collapsed && styles['user-profile-card--collapsed'],\n className,\n )}\n aria-label=\"用户菜单\"\n >\n <Avatar className={styles['user-profile-avatar']} size={collapsed ? 32 : 40}>\n {initial}\n </Avatar>\n {!collapsed ? (\n <div className={styles['user-profile-meta']}>\n <div className={styles['user-profile-name']} title={name}>\n {name}\n </div>\n {sub ? (\n <div className={styles['user-profile-sub']} title={sub}>\n {sub}\n </div>\n ) : null}\n </div>\n ) : null}\n </button>\n );\n\n return (\n <div\n className={classNames(\n styles['user-profile-wrap'],\n collapsed && styles['user-profile-wrap--collapsed'],\n )}\n >\n {items && items.length > 0 ? (\n <Dropdown menu={{ items }} trigger={['click']} placement=\"topLeft\">\n {card}\n </Dropdown>\n ) : (\n card\n )}\n </div>\n );\n};\n\nexport default UserProfileCard;\n"],"names":["UserProfileCard","name","sub","avatarText","collapsed","menuItems","onLogout","className","initial","items","useMemo","jsx","LogOut","card","jsxs","classNames","styles","Avatar","Dropdown"],"mappings":";;;;;;AA2BA,MAAMA,IAAkD,CAAC;AAAA,EACvD,MAAAC;AAAA,EACA,KAAAC;AAAA,EACA,YAAAC;AAAA,EACA,WAAAC,IAAY;AAAA,EACZ,WAAAC;AAAA,EACA,UAAAC;AAAA,EACA,WAAAC;AACF,MAAM;AACJ,QAAMC,KAAWL,KAAcF,GAAM,OAAO,OAAO,CAAC,EAAE,YAAA,KAAiB,KAEjEQ,IAAQC,EAA4B,MACpCL,MACCC,IACE;AAAA,IACL;AAAA,MACE,KAAK;AAAA,MACL,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,MAAM,gBAAAK,EAACC,GAAA,EAAO,MAAM,GAAA,CAAI;AAAA,MACxB,SAASN;AAAA,IAAA;AAAA,EACX,IARoB,CAAA,IAUrB,CAACD,GAAWC,CAAQ,CAAC,GAElBO,IACJ,gBAAAC;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,MAAK;AAAA,MACL,WAAWC;AAAA,QACTC,EAAO,mBAAmB;AAAA,QAC1BZ,KAAaY,EAAO,8BAA8B;AAAA,QAClDT;AAAA,MAAA;AAAA,MAEF,cAAW;AAAA,MAEX,UAAA;AAAA,QAAA,gBAAAI,EAACM,GAAA,EAAO,WAAWD,EAAO,qBAAqB,GAAG,MAAMZ,IAAY,KAAK,IACtE,UAAAI,EAAA,CACH;AAAA,QACEJ,IAWE,OAVF,gBAAAU,EAAC,SAAI,WAAWE,EAAO,mBAAmB,GACxC,UAAA;AAAA,UAAA,gBAAAL,EAAC,SAAI,WAAWK,EAAO,mBAAmB,GAAG,OAAOf,GACjD,UAAAA,GACH;AAAA,UACCC,IACC,gBAAAS,EAAC,OAAA,EAAI,WAAWK,EAAO,kBAAkB,GAAG,OAAOd,GAChD,UAAAA,EAAA,CACH,IACE;AAAA,QAAA,EAAA,CACN;AAAA,MACE;AAAA,IAAA;AAAA,EAAA;AAIR,SACE,gBAAAS;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAWI;AAAA,QACTC,EAAO,mBAAmB;AAAA,QAC1BZ,KAAaY,EAAO,8BAA8B;AAAA,MAAA;AAAA,MAGnD,eAASP,EAAM,SAAS,IACvB,gBAAAE,EAACO,KAAS,MAAM,EAAE,OAAAT,EAAA,GAAS,SAAS,CAAC,OAAO,GAAG,WAAU,WACtD,aACH,IAEAI;AAAA,IAAA;AAAA,EAAA;AAIR;"}
1
+ {"version":3,"file":"UserProfileCard.js","sources":["../../../../src/components/Auth/UserProfileCard/UserProfileCard.tsx"],"sourcesContent":["import { LogOut } from '../../Icons';\nimport { Avatar, Dropdown } from 'antd';\nimport type { MenuProps } from 'antd';\nimport classNames from 'classnames';\nimport React, { useMemo } from 'react';\nimport styles from './style.module.scss';\n\nexport type UserProfileCardProps = {\n /** 主文案(姓名 / 展示名) */\n name: string;\n /** 副文案(邮箱 / 工号等) */\n sub?: string;\n /** 头像文字,默认 name 首字 */\n avatarText?: string;\n /** 侧栏折叠时仅显示头像 */\n collapsed?: boolean;\n /** 自定义下拉菜单;不传则在提供 onLogout 时生成「退出登录」 */\n menuItems?: MenuProps['items'];\n /** 点击默认「退出登录」时回调 */\n onLogout?: () => void;\n /**\n * 右侧扩展区(如站内信铃铛);在 Dropdown 触发器之外,\n * 点击不会打开用户菜单。不传则不展示扩展区。\n */\n extra?: React.ReactNode;\n className?: string;\n};\n\n/**\n * 侧栏底部用户卡片:主区域点击向上展开菜单(默认退出登录);\n * 可选 `extra` 槽承载独立操作(如站内信),与主区同处视觉壳内。\n * 纯 UI;是否挂载由业务根据登录态决定。\n */\nconst UserProfileCard: React.FC<UserProfileCardProps> = ({\n name,\n sub,\n avatarText,\n collapsed = false,\n menuItems,\n onLogout,\n extra,\n className,\n}) => {\n const initial = (avatarText || name).trim().charAt(0).toUpperCase() || 'U';\n\n const items = useMemo<MenuProps['items']>(() => {\n if (menuItems) return menuItems;\n if (!onLogout) return [];\n return [\n {\n key: 'logout',\n danger: true,\n label: '退出登录',\n icon: <LogOut size={14} />,\n onClick: onLogout,\n },\n ];\n }, [menuItems, onLogout]);\n\n const trigger = (\n <button\n type=\"button\"\n className={classNames(\n styles['user-profile-card'],\n collapsed && styles['user-profile-card--collapsed'],\n )}\n aria-label=\"用户菜单\"\n >\n <Avatar className={styles['user-profile-avatar']} size={collapsed ? 32 : 40}>\n {initial}\n </Avatar>\n {!collapsed ? (\n <div className={styles['user-profile-meta']}>\n <div className={styles['user-profile-name']} title={name}>\n {name}\n </div>\n {sub ? (\n <div className={styles['user-profile-sub']} title={sub}>\n {sub}\n </div>\n ) : null}\n </div>\n ) : null}\n </button>\n );\n\n const main =\n items && items.length > 0 ? (\n <Dropdown menu={{ items }} trigger={['click']} placement=\"topLeft\">\n {trigger}\n </Dropdown>\n ) : (\n trigger\n );\n\n return (\n <div\n className={classNames(\n styles['user-profile-wrap'],\n collapsed && styles['user-profile-wrap--collapsed'],\n )}\n >\n <div\n className={classNames(\n styles['user-profile-shell'],\n collapsed && styles['user-profile-shell--collapsed'],\n Boolean(extra) && styles['user-profile-shell--with-extra'],\n className,\n )}\n >\n <div\n className={classNames(\n styles['user-profile-row'],\n collapsed && styles['user-profile-row--collapsed'],\n )}\n >\n <div className={styles['user-profile-main']}>{main}</div>\n {extra ? (\n <div\n className={styles['user-profile-extra']}\n onClick={(e) => e.stopPropagation()}\n onKeyDown={(e) => e.stopPropagation()}\n >\n {extra}\n </div>\n ) : null}\n </div>\n </div>\n </div>\n );\n};\n\nexport default UserProfileCard;\n"],"names":["UserProfileCard","name","sub","avatarText","collapsed","menuItems","onLogout","extra","className","initial","items","useMemo","jsx","LogOut","trigger","jsxs","classNames","styles","Avatar","main","Dropdown","e"],"mappings":";;;;;;AAiCA,MAAMA,IAAkD,CAAC;AAAA,EACvD,MAAAC;AAAA,EACA,KAAAC;AAAA,EACA,YAAAC;AAAA,EACA,WAAAC,IAAY;AAAA,EACZ,WAAAC;AAAA,EACA,UAAAC;AAAA,EACA,OAAAC;AAAA,EACA,WAAAC;AACF,MAAM;AACJ,QAAMC,KAAWN,KAAcF,GAAM,OAAO,OAAO,CAAC,EAAE,YAAA,KAAiB,KAEjES,IAAQC,EAA4B,MACpCN,MACCC,IACE;AAAA,IACL;AAAA,MACE,KAAK;AAAA,MACL,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,MAAM,gBAAAM,EAACC,GAAA,EAAO,MAAM,GAAA,CAAI;AAAA,MACxB,SAASP;AAAA,IAAA;AAAA,EACX,IARoB,CAAA,IAUrB,CAACD,GAAWC,CAAQ,CAAC,GAElBQ,IACJ,gBAAAC;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,MAAK;AAAA,MACL,WAAWC;AAAA,QACTC,EAAO,mBAAmB;AAAA,QAC1Bb,KAAaa,EAAO,8BAA8B;AAAA,MAAA;AAAA,MAEpD,cAAW;AAAA,MAEX,UAAA;AAAA,QAAA,gBAAAL,EAACM,GAAA,EAAO,WAAWD,EAAO,qBAAqB,GAAG,MAAMb,IAAY,KAAK,IACtE,UAAAK,EAAA,CACH;AAAA,QACEL,IAWE,OAVF,gBAAAW,EAAC,SAAI,WAAWE,EAAO,mBAAmB,GACxC,UAAA;AAAA,UAAA,gBAAAL,EAAC,SAAI,WAAWK,EAAO,mBAAmB,GAAG,OAAOhB,GACjD,UAAAA,GACH;AAAA,UACCC,IACC,gBAAAU,EAAC,OAAA,EAAI,WAAWK,EAAO,kBAAkB,GAAG,OAAOf,GAChD,UAAAA,EAAA,CACH,IACE;AAAA,QAAA,EAAA,CACN;AAAA,MACE;AAAA,IAAA;AAAA,EAAA,GAIFiB,IACJT,KAASA,EAAM,SAAS,IACtB,gBAAAE,EAACQ,KAAS,MAAM,EAAE,OAAAV,EAAA,GAAS,SAAS,CAAC,OAAO,GAAG,WAAU,WACtD,aACH,IAEAI;AAGJ,SACE,gBAAAF;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAWI;AAAA,QACTC,EAAO,mBAAmB;AAAA,QAC1Bb,KAAaa,EAAO,8BAA8B;AAAA,MAAA;AAAA,MAGpD,UAAA,gBAAAL;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,WAAWI;AAAA,YACTC,EAAO,oBAAoB;AAAA,YAC3Bb,KAAaa,EAAO,+BAA+B;AAAA,YACnD,EAAQV,KAAUU,EAAO,gCAAgC;AAAA,YACzDT;AAAA,UAAA;AAAA,UAGF,UAAA,gBAAAO;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,WAAWC;AAAA,gBACTC,EAAO,kBAAkB;AAAA,gBACzBb,KAAaa,EAAO,6BAA6B;AAAA,cAAA;AAAA,cAGnD,UAAA;AAAA,gBAAA,gBAAAL,EAAC,OAAA,EAAI,WAAWK,EAAO,mBAAmB,GAAI,UAAAE,GAAK;AAAA,gBAClDZ,IACC,gBAAAK;AAAA,kBAAC;AAAA,kBAAA;AAAA,oBACC,WAAWK,EAAO,oBAAoB;AAAA,oBACtC,SAAS,CAACI,MAAMA,EAAE,gBAAA;AAAA,oBAClB,WAAW,CAACA,MAAMA,EAAE,gBAAA;AAAA,oBAEnB,UAAAd;AAAA,kBAAA;AAAA,gBAAA,IAED;AAAA,cAAA;AAAA,YAAA;AAAA,UAAA;AAAA,QACN;AAAA,MAAA;AAAA,IACF;AAAA,EAAA;AAGN;"}
@@ -1,14 +1,20 @@
1
- const r = {
2
- "user-profile-wrap": "_user-profile-wrap_1rbrn_1",
3
- "user-profile-wrap--collapsed": "_user-profile-wrap--collapsed_1rbrn_6",
4
- "user-profile-card": "_user-profile-card_1rbrn_12",
5
- "user-profile-card--collapsed": "_user-profile-card--collapsed_1rbrn_30",
6
- "user-profile-avatar": "_user-profile-avatar_1rbrn_36",
7
- "user-profile-meta": "_user-profile-meta_1rbrn_43",
8
- "user-profile-name": "_user-profile-name_1rbrn_48",
9
- "user-profile-sub": "_user-profile-sub_1rbrn_58"
1
+ const e = {
2
+ "user-profile-wrap": "_user-profile-wrap_1n23e_2",
3
+ "user-profile-wrap--collapsed": "_user-profile-wrap--collapsed_1n23e_9",
4
+ "user-profile-shell": "_user-profile-shell_1n23e_14",
5
+ "user-profile-shell--collapsed": "_user-profile-shell--collapsed_1n23e_27",
6
+ "user-profile-row": "_user-profile-row_1n23e_32",
7
+ "user-profile-row--collapsed": "_user-profile-row--collapsed_1n23e_40",
8
+ "user-profile-main": "_user-profile-main_1n23e_47",
9
+ "user-profile-extra": "_user-profile-extra_1n23e_66",
10
+ "user-profile-card": "_user-profile-card_1n23e_99",
11
+ "user-profile-card--collapsed": "_user-profile-card--collapsed_1n23e_113",
12
+ "user-profile-avatar": "_user-profile-avatar_1n23e_118",
13
+ "user-profile-meta": "_user-profile-meta_1n23e_125",
14
+ "user-profile-name": "_user-profile-name_1n23e_130",
15
+ "user-profile-sub": "_user-profile-sub_1n23e_140"
10
16
  };
11
17
  export {
12
- r as default
18
+ e as default
13
19
  };
14
20
  //# 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":";;;;;;;;;;;;;;;;"}
@@ -1,78 +1,113 @@
1
- import { jsxs as o, jsx as l } from "react/jsx-runtime";
2
- import { X as T } from "../../Icons/index.js";
3
- import { Space as k, Tooltip as E, Button as x } from "antd";
4
- import t from "classnames";
5
- import F, { useMemo as L } from "react";
1
+ import { jsxs as o, jsx as t } from "react/jsx-runtime";
2
+ import { X as E } from "../../Icons/index.js";
3
+ import { Space as x, Tooltip as L, Button as S } from "antd";
4
+ import l from "classnames";
5
+ import _, { useMemo as D } from "react";
6
6
  import e from "./style.module.scss.js";
7
- import { useFilterState as S, FilterProvider as _ } from "../useFilterState.js";
8
- import D from "../../Tag/SemanticTag.js";
9
- const j = 20;
10
- function z(r, m) {
7
+ import { useFilterState as j, FilterProvider as z } from "../useFilterState.js";
8
+ import C from "../../Tag/SemanticTag.js";
9
+ const G = 20;
10
+ function M(r, m) {
11
11
  return r.length <= m ? { display: r, truncated: !1 } : { display: `${r.slice(0, m)}...`, truncated: !0 };
12
12
  }
13
- const I = ({
13
+ const U = ({
14
14
  children: r,
15
15
  list: m,
16
- extra: n,
16
+ extra: a,
17
17
  onClearAll: i,
18
- label: u = "筛选",
19
- selectedTagMaxLength: h = j
18
+ label: N = "筛选",
19
+ selectedTagMaxLength: b = G
20
20
  }) => {
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: [
21
+ const { selectedItems: n, register: s, unregister: d, clearAll: f, values: p, setFieldValue: u, clearFieldValue: h } = j(), g = D(
22
+ () => ({ register: s, unregister: d, values: p, setFieldValue: u, clearFieldValue: h }),
23
+ [s, d, p, u, h]
24
+ ), y = _.useCallback(() => {
25
+ f(), i == null || i();
26
+ }, [f, i]);
27
+ return /* @__PURE__ */ o("div", { className: l("common-filter-root", e["common-filter-root"]), children: [
28
+ /* @__PURE__ */ o("div", { className: l("common-filter-container", e["common-filter-container"]), children: [
29
+ /* @__PURE__ */ t("span", { className: l("common-filter-label", e["common-filter-label"]), children: N }),
30
+ /* @__PURE__ */ t(z, { ctx: g, children: /* @__PURE__ */ o("div", { className: l("common-filter-content", e["common-filter-content"]), children: [
31
+ /* @__PURE__ */ o("div", { className: l("common-filter-items", e["common-filter-items"]), children: [
29
32
  m,
30
33
  r
31
34
  ] }),
32
- n && /* @__PURE__ */ l("div", { className: t("common-filter-extra", e["common-filter-extra"]), children: n })
35
+ a && /* @__PURE__ */ t("div", { className: l("common-filter-extra", e["common-filter-extra"]), children: a })
33
36
  ] }) })
34
37
  ] }),
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
- /* @__PURE__ */ o(
38
+ n.length > 0 && /* @__PURE__ */ o("div", { className: l("common-filter-selected", e["common-filter-selected"]), children: [
39
+ /* @__PURE__ */ o(
40
+ "div",
41
+ {
42
+ className: l(
43
+ "common-filter-selected-main",
44
+ e["common-filter-selected-main"]
45
+ ),
46
+ children: [
47
+ /* @__PURE__ */ t(
42
48
  "span",
43
49
  {
44
- className: t("common-filter-tag-label", e["common-filter-tag-label"]),
45
- style: { color: "var(--font-color)" },
46
- children: [
47
- c.label,
48
- ":"
49
- ]
50
+ className: l(
51
+ "common-filter-selected-title",
52
+ e["common-filter-selected-title"]
53
+ ),
54
+ children: "您已选择"
50
55
  }
51
56
  ),
52
- g,
53
- /* @__PURE__ */ l(
54
- T,
57
+ /* @__PURE__ */ t(
58
+ x,
55
59
  {
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
+ size: [8, 8],
61
+ wrap: !0,
62
+ className: l(
63
+ "common-filter-selected-tags",
64
+ e["common-filter-selected-tags"]
60
65
  ),
61
- onClick: (y) => {
62
- y.preventDefault(), c.removable !== !1 && c.onRemove();
63
- }
66
+ children: n.map((c) => {
67
+ const { display: v, truncated: T } = M(c.valueLabel, b), F = T ? /* @__PURE__ */ t(L, { title: c.valueLabel, children: /* @__PURE__ */ t("span", { children: v }) }) : /* @__PURE__ */ t("span", { children: v });
68
+ return /* @__PURE__ */ t(C, { color: "primary", children: /* @__PURE__ */ o("span", { className: l("common-filter-tag", e["common-filter-tag"]), children: [
69
+ /* @__PURE__ */ o(
70
+ "span",
71
+ {
72
+ className: l(
73
+ "common-filter-tag-label",
74
+ e["common-filter-tag-label"]
75
+ ),
76
+ style: { color: "var(--font-color)" },
77
+ children: [
78
+ c.label,
79
+ ":"
80
+ ]
81
+ }
82
+ ),
83
+ F,
84
+ /* @__PURE__ */ t(
85
+ E,
86
+ {
87
+ className: l(
88
+ "common-filter-tag-close",
89
+ e["common-filter-tag-close"],
90
+ c.removable === !1 && e["common-filter-tag-close-disabled"]
91
+ ),
92
+ onClick: (k) => {
93
+ k.preventDefault(), c.removable !== !1 && c.onRemove();
94
+ }
95
+ }
96
+ )
97
+ ] }) }, c.key);
98
+ })
64
99
  }
65
100
  )
66
- ] }) }, c.key);
67
- }) })
68
- ] }),
69
- /* @__PURE__ */ l(
70
- x,
101
+ ]
102
+ }
103
+ ),
104
+ /* @__PURE__ */ t(
105
+ S,
71
106
  {
72
107
  type: "link",
73
108
  size: "small",
74
- onClick: v,
75
- className: t("common-filter-clear-btn", e["common-filter-clear-btn"]),
109
+ onClick: y,
110
+ className: l("common-filter-clear-btn", e["common-filter-clear-btn"]),
76
111
  children: "清空全部"
77
112
  }
78
113
  )
@@ -80,6 +115,6 @@ const I = ({
80
115
  ] });
81
116
  };
82
117
  export {
83
- I as default
118
+ U as default
84
119
  };
85
120
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../src/components/Filter/CommonFilter/index.tsx"],"sourcesContent":["import { SemanticTag } from '@/components/Tag';\nimport { 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
+ {"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, values, setFieldValue, clearFieldValue } =\n useFilterState();\n\n const filterCtx = useMemo(\n () => ({ register, unregister, values, setFieldValue, clearFieldValue }),\n [register, unregister, values, setFieldValue, clearFieldValue],\n );\n\n // 合并外部 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'])}>\n {label}\n </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'])}>\n {extra}\n </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\n className={classNames(\n 'common-filter-selected-main',\n styles['common-filter-selected-main'],\n )}\n >\n <span\n className={classNames(\n 'common-filter-selected-title',\n styles['common-filter-selected-title'],\n )}\n >\n 您已选择\n </span>\n <Space\n size={[8, 8]}\n wrap\n className={classNames(\n 'common-filter-selected-tags',\n styles['common-filter-selected-tags'],\n )}\n >\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(\n 'common-filter-tag-label',\n styles['common-filter-tag-label'],\n )}\n style={{ color: 'var(--font-color)' }}\n >\n {s.label}:\n </span>\n {valueNode}\n <X\n className={classNames(\n 'common-filter-tag-close',\n styles['common-filter-tag-close'],\n s.removable === false && styles['common-filter-tag-close-disabled'],\n )}\n onClick={(e) => {\n e.preventDefault();\n if (s.removable === false) return;\n s.onRemove();\n }}\n />\n </span>\n </SemanticTag>\n );\n })}\n </Space>\n </div>\n <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","values","setFieldValue","clearFieldValue","useFilterState","filterCtx","useMemo","handleClearAll","React","jsxs","classNames","styles","jsx","FilterProvider","Space","s","display","truncated","valueNode","Tooltip","SemanticTag","X","e","Button"],"mappings":";;;;;;;;AAQA,MAAMA,IAAkC;AAExC,SAASC,EAAaC,GAAcC,GAAmB;AACrD,SAAID,EAAK,UAAUC,IACV,EAAE,SAASD,GAAM,WAAW,GAAA,IAE9B,EAAE,SAAS,GAAGA,EAAK,MAAM,GAAGC,CAAS,CAAC,OAAO,WAAW,GAAA;AACjE;AAwCA,MAAMC,IAA4C,CAAC;AAAA,EACjD,UAAAC;AAAA,EACA,MAAAC;AAAA,EACA,OAAAC;AAAA,EACA,YAAAC;AAAA,EACA,OAAAC,IAAQ;AAAA,EACR,sBAAAC,IAAuBV;AACzB,MAAM;AACJ,QAAM,EAAE,eAAAW,GAAe,UAAAC,GAAU,YAAAC,GAAY,UAAAC,GAAU,QAAAC,GAAQ,eAAAC,GAAe,iBAAAC,EAAA,IAC5EC,EAAA,GAEIC,IAAYC;AAAA,IAChB,OAAO,EAAE,UAAAR,GAAU,YAAAC,GAAY,QAAAE,GAAQ,eAAAC,GAAe,iBAAAC,EAAA;AAAA,IACtD,CAACL,GAAUC,GAAYE,GAAQC,GAAeC,CAAe;AAAA,EAAA,GAIzDI,IAAiBC,EAAM,YAAY,MAAM;AAC7C,IAAAR,EAAA,GACAN,KAAA,QAAAA;AAAA,EACF,GAAG,CAACM,GAAUN,CAAU,CAAC;AAEzB,SACE,gBAAAe,EAAC,SAAI,WAAWC,EAAW,sBAAsBC,EAAO,oBAAoB,CAAC,GAE3E,UAAA;AAAA,IAAA,gBAAAF,EAAC,SAAI,WAAWC,EAAW,2BAA2BC,EAAO,yBAAyB,CAAC,GACrF,UAAA;AAAA,MAAA,gBAAAC,EAAC,QAAA,EAAK,WAAWF,EAAW,uBAAuBC,EAAO,qBAAqB,CAAC,GAC7E,UAAAhB,EAAA,CACH;AAAA,MACA,gBAAAiB,EAACC,GAAA,EAAe,KAAKR,GACnB,UAAA,gBAAAI,EAAC,OAAA,EAAI,WAAWC,EAAW,yBAAyBC,EAAO,uBAAuB,CAAC,GACjF,UAAA;AAAA,QAAA,gBAAAF,EAAC,SAAI,WAAWC,EAAW,uBAAuBC,EAAO,qBAAqB,CAAC,GAC5E,UAAA;AAAA,UAAAnB;AAAA,UACAD;AAAA,QAAA,GACH;AAAA,QACCE,KACC,gBAAAmB,EAAC,OAAA,EAAI,WAAWF,EAAW,uBAAuBC,EAAO,qBAAqB,CAAC,GAC5E,UAAAlB,EAAA,CACH;AAAA,MAAA,EAAA,CAEJ,EAAA,CACF;AAAA,IAAA,GACF;AAAA,IAGCI,EAAc,SAAS,KACtB,gBAAAY,EAAC,OAAA,EAAI,WAAWC,EAAW,0BAA0BC,EAAO,wBAAwB,CAAC,GACnF,UAAA;AAAA,MAAA,gBAAAF;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,WAAWC;AAAA,YACT;AAAA,YACAC,EAAO,6BAA6B;AAAA,UAAA;AAAA,UAGtC,UAAA;AAAA,YAAA,gBAAAC;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,WAAWF;AAAA,kBACT;AAAA,kBACAC,EAAO,8BAA8B;AAAA,gBAAA;AAAA,gBAExC,UAAA;AAAA,cAAA;AAAA,YAAA;AAAA,YAGD,gBAAAC;AAAA,cAACE;AAAA,cAAA;AAAA,gBACC,MAAM,CAAC,GAAG,CAAC;AAAA,gBACX,MAAI;AAAA,gBACJ,WAAWJ;AAAA,kBACT;AAAA,kBACAC,EAAO,6BAA6B;AAAA,gBAAA;AAAA,gBAGrC,UAAAd,EAAc,IAAI,CAACkB,MAAM;AACxB,wBAAM,EAAE,SAAAC,GAAS,WAAAC,EAAA,IAAc9B,EAAa4B,EAAE,YAAYnB,CAAoB,GACxEsB,IAAYD,IAChB,gBAAAL,EAACO,GAAA,EAAQ,OAAOJ,EAAE,YAChB,UAAA,gBAAAH,EAAC,QAAA,EAAM,UAAAI,EAAA,CAAQ,GACjB,IAEA,gBAAAJ,EAAC,UAAM,UAAAI,GAAQ;AAGjB,yBACE,gBAAAJ,EAACQ,GAAA,EAAwB,OAAM,WAC7B,UAAA,gBAAAX,EAAC,QAAA,EAAK,WAAWC,EAAW,qBAAqBC,EAAO,mBAAmB,CAAC,GAC1E,UAAA;AAAA,oBAAA,gBAAAF;AAAA,sBAAC;AAAA,sBAAA;AAAA,wBACC,WAAWC;AAAA,0BACT;AAAA,0BACAC,EAAO,yBAAyB;AAAA,wBAAA;AAAA,wBAElC,OAAO,EAAE,OAAO,oBAAA;AAAA,wBAEf,UAAA;AAAA,0BAAAI,EAAE;AAAA,0BAAM;AAAA,wBAAA;AAAA,sBAAA;AAAA,oBAAA;AAAA,oBAEVG;AAAA,oBACD,gBAAAN;AAAA,sBAACS;AAAA,sBAAA;AAAA,wBACC,WAAWX;AAAA,0BACT;AAAA,0BACAC,EAAO,yBAAyB;AAAA,0BAChCI,EAAE,cAAc,MAASJ,EAAO,kCAAkC;AAAA,wBAAA;AAAA,wBAEpE,SAAS,CAACW,MAAM;AAEd,0BADAA,EAAE,eAAA,GACEP,EAAE,cAAc,MACpBA,EAAE,SAAA;AAAA,wBACJ;AAAA,sBAAA;AAAA,oBAAA;AAAA,kBACF,GACF,EAAA,GAxBgBA,EAAE,GAyBpB;AAAA,gBAEJ,CAAC;AAAA,cAAA;AAAA,YAAA;AAAA,UACH;AAAA,QAAA;AAAA,MAAA;AAAA,MAEF,gBAAAH;AAAA,QAACW;AAAA,QAAA;AAAA,UACC,MAAK;AAAA,UACL,MAAK;AAAA,UACL,SAAShB;AAAA,UACT,WAAWG,EAAW,2BAA2BC,EAAO,yBAAyB,CAAC;AAAA,UACnF,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,IAED,EAAA,CACF;AAAA,EAAA,GAEJ;AAEJ;"}
@@ -0,0 +1,40 @@
1
+ import { DefaultOptionType } from 'antd/es/cascader';
2
+ import { default as React } from 'react';
3
+ import { TreeFilterNode } from '../FilterTreeSelect';
4
+ import { BaseFilterProps, FilterLoadDataContext } from '../types';
5
+ export type { TreeFilterNode };
6
+ export type CascaderPath = string[];
7
+ export interface FilterCascaderProps extends BaseFilterProps {
8
+ /** 树数据(与 FilterTreeSelect 同构);优先于 loadData */
9
+ treeData?: TreeFilterNode[];
10
+ /** 已转换的 Cascader options;与 treeData 二选一(同时存在以 options 为准) */
11
+ options?: DefaultOptionType[];
12
+ loadData?: (ctx: FilterLoadDataContext) => Promise<TreeFilterNode[]>;
13
+ enabled?: boolean;
14
+ /** leafOnly 时为叶子 id;多选为叶子 id 数组 */
15
+ value?: string | string[] | undefined;
16
+ onChange?: (value: string | string[] | undefined) => void;
17
+ /** 完整路径变更(单选 string[];多选 string[][]) */
18
+ onChangePath?: (paths: CascaderPath | CascaderPath[] | undefined) => void;
19
+ showSearch?: boolean;
20
+ multiple?: boolean;
21
+ /**
22
+ * 仅叶子写入最终值(默认 true)。
23
+ * Cascader changeOnSelect=false,父级不可单独作为已选值。
24
+ */
25
+ leafOnly?: boolean;
26
+ getNodeLabel?: (node: TreeFilterNode) => string;
27
+ panelExtra?: React.ReactNode;
28
+ panelWidth?: number;
29
+ loading?: boolean;
30
+ }
31
+ type CascaderOption = DefaultOptionType & {
32
+ value: string;
33
+ label: React.ReactNode;
34
+ children?: CascaderOption[];
35
+ isLeaf?: boolean;
36
+ };
37
+ /** TreeFilterNode → antd Cascader options */
38
+ export declare function treeToCascaderOptions(nodes: TreeFilterNode[] | undefined, getLabel?: (n: TreeFilterNode) => string): CascaderOption[];
39
+ declare const FilterCascader: React.FC<FilterCascaderProps>;
40
+ export default FilterCascader;