@hkyhy/marsun-components-core 0.1.25 → 0.1.28

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.
@@ -0,0 +1,23 @@
1
+ import { MenuProps } from 'antd';
2
+ import { default as React } from 'react';
3
+ export type UserProfileCardProps = {
4
+ /** 主文案(姓名 / 展示名) */
5
+ name: string;
6
+ /** 副文案(邮箱 / 工号等) */
7
+ sub?: string;
8
+ /** 头像文字,默认 name 首字 */
9
+ avatarText?: string;
10
+ /** 侧栏折叠时仅显示头像 */
11
+ collapsed?: boolean;
12
+ /** 自定义下拉菜单;不传则在提供 onLogout 时生成「退出登录」 */
13
+ menuItems?: MenuProps['items'];
14
+ /** 点击默认「退出登录」时回调 */
15
+ onLogout?: () => void;
16
+ className?: string;
17
+ };
18
+ /**
19
+ * 侧栏底部用户卡片:整卡点击向上展开菜单(默认退出登录)。
20
+ * 纯 UI;是否挂载由业务根据登录态决定。
21
+ */
22
+ declare const UserProfileCard: React.FC<UserProfileCardProps>;
23
+ export default UserProfileCard;
@@ -0,0 +1,57 @@
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";
6
+ import r from "./style.module.scss.js";
7
+ const C = ({
8
+ name: l,
9
+ sub: t,
10
+ avatarText: f,
11
+ collapsed: i = !1,
12
+ menuItems: a,
13
+ onLogout: s,
14
+ className: m
15
+ }) => {
16
+ const d = (f || l).trim().charAt(0).toUpperCase() || "U", o = v(() => a || (s ? [
17
+ {
18
+ key: "logout",
19
+ danger: !0,
20
+ label: "退出登录",
21
+ icon: /* @__PURE__ */ e(u, { size: 14 }),
22
+ onClick: s
23
+ }
24
+ ] : []), [a, s]), c = /* @__PURE__ */ n(
25
+ "button",
26
+ {
27
+ type: "button",
28
+ className: p(
29
+ r["user-profile-card"],
30
+ i && r["user-profile-card--collapsed"],
31
+ m
32
+ ),
33
+ "aria-label": "用户菜单",
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
39
+ ] })
40
+ ]
41
+ }
42
+ );
43
+ return /* @__PURE__ */ e(
44
+ "div",
45
+ {
46
+ className: p(
47
+ r["user-profile-wrap"],
48
+ i && r["user-profile-wrap--collapsed"]
49
+ ),
50
+ children: o && o.length > 0 ? /* @__PURE__ */ e(N, { menu: { items: o }, trigger: ["click"], placement: "topLeft", children: c }) : c
51
+ }
52
+ );
53
+ };
54
+ export {
55
+ C as default
56
+ };
57
+ //# sourceMappingURL=UserProfileCard.js.map
@@ -0,0 +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;"}
@@ -0,0 +1,2 @@
1
+ export { default as UserProfileCard } from './UserProfileCard';
2
+ export type { UserProfileCardProps } from './UserProfileCard';
@@ -0,0 +1,14 @@
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"
10
+ };
11
+ export {
12
+ r as default
13
+ };
14
+ //# sourceMappingURL=style.module.scss.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"style.module.scss.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;"}
@@ -1,3 +1,5 @@
1
1
  export { default as PermissionGuard } from './PermissionGuard';
2
2
  export { default as ProtectedRoute } from './ProtectedRoute';
3
3
  export { hasPermission } from './hasPermission';
4
+ export { UserProfileCard } from './UserProfileCard';
5
+ export type { UserProfileCardProps } from './UserProfileCard';
@@ -15,6 +15,12 @@ export interface FilterTreeSelectProps extends BaseFilterProps {
15
15
  onChange?: (value: string | string[] | undefined) => void;
16
16
  showSearch?: boolean;
17
17
  multiple?: boolean;
18
+ /**
19
+ * 仅叶子写入最终值。
20
+ * - 单选:点父节点只展开
21
+ * - 多选:点父节点 / 勾选框 = 全选或取消其下全部叶子;父勾选框支持半选
22
+ */
23
+ leafOnly?: boolean;
18
24
  /** 自定义节点展示标签(默认 name) */
19
25
  getNodeLabel?: (node: TreeFilterNode) => string;
20
26
  }