@hkyhy/marsun-components-core 0.1.49 → 0.1.50

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.
@@ -1,11 +1,14 @@
1
1
  import { TabsProps } from 'antd';
2
2
  import { CSSProperties, ReactNode } from 'react';
3
+ import { DescriptionItem } from '../Descriptions/CommonDescriptions';
3
4
  export type StateBarType = 'tab' | 'radio' | 'step';
4
5
  export type StateBarOption = {
5
6
  key: string;
6
7
  /** 选项卡标题(优先于 label) */
7
8
  tab?: ReactNode;
8
9
  label?: ReactNode;
10
+ /** 标题旁 Info + TooltipInfo(对齐 Modal/InteractiveBlock);为空不展示 icon */
11
+ info?: DescriptionItem[];
9
12
  children?: ReactNode;
10
13
  disabled?: boolean;
11
14
  className?: string;
@@ -1,43 +1,61 @@
1
- import { jsx as d } from "react/jsx-runtime";
2
- import { Tabs as f } from "antd";
3
- import h from "classnames";
1
+ import { jsx as r, jsxs as p } from "react/jsx-runtime";
2
+ import { Tabs as u } from "antd";
3
+ import o from "classnames";
4
+ import { Info as N } from "../Icons/index.js";
4
5
  import a from "./style.module.scss.js";
5
- const N = ({
6
- className: r,
7
- type: s = "tab",
8
- stateOption: t = [],
9
- isInner: o,
10
- style: l,
11
- ...m
6
+ import x from "../TooltipInfo/TooltipInfo.js";
7
+ function y(e, t) {
8
+ return !t || t.length === 0 ? e : /* @__PURE__ */ p("span", { className: o("marsun-state-bar-tab-label", a["state-bar-tab-label"]), children: [
9
+ e,
10
+ /* @__PURE__ */ r(
11
+ x,
12
+ {
13
+ content: t,
14
+ placement: "topLeft",
15
+ minWidth: 220,
16
+ maxWidth: 360,
17
+ overlayClassName: "marsun-state-bar-info-tooltip",
18
+ children: /* @__PURE__ */ r("span", { className: o("marsun-state-bar-info", a["state-bar-info"]), children: /* @__PURE__ */ r(N, { size: 14, "aria-hidden": !0 }) })
19
+ }
20
+ )
21
+ ] });
22
+ }
23
+ const W = ({
24
+ className: e,
25
+ type: t = "tab",
26
+ stateOption: s = [],
27
+ isInner: l,
28
+ style: m,
29
+ ...i
12
30
  }) => {
13
- const n = t.some((e) => e.children != null);
14
- return /* @__PURE__ */ d(
15
- f,
31
+ const b = s.some((n) => n.children != null);
32
+ return /* @__PURE__ */ r(
33
+ u,
16
34
  {
17
- ...m,
35
+ ...i,
18
36
  "data-testid": "components-core-state-bar",
19
37
  animated: !1,
20
- className: h(
38
+ className: o(
21
39
  "marsun-state-bar",
22
40
  a["state-bar"],
23
- a[`tab-${s}-control`],
24
- o && a["inner-state-bar"],
25
- n && a["has-children"],
26
- r
41
+ a[`tab-${t}-control`],
42
+ l && a["inner-state-bar"],
43
+ b && a["has-children"],
44
+ e
27
45
  ),
28
46
  style: {
29
- "--total-count": t.length,
30
- ...l
47
+ "--total-count": s.length,
48
+ ...m
31
49
  },
32
- items: t.map(({ tab: e, label: c, key: i, ...b }) => ({
33
- key: i,
34
- label: e ?? c,
35
- ...b
50
+ items: s.map(({ tab: n, label: c, info: d, key: f, ...h }) => ({
51
+ key: f,
52
+ label: y(n ?? c, d),
53
+ ...h
36
54
  }))
37
55
  }
38
56
  );
39
57
  };
40
58
  export {
41
- N as default
59
+ W as default
42
60
  };
43
61
  //# sourceMappingURL=StateBar.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"StateBar.js","sources":["../../../src/components/StateBar/StateBar.tsx"],"sourcesContent":["import { Tabs } from 'antd';\nimport type { TabsProps } from 'antd';\nimport classNames from 'classnames';\nimport type { CSSProperties, ReactNode } from 'react';\nimport styles from './style.module.scss';\n\nexport type StateBarType = 'tab' | 'radio' | 'step';\n\nexport type StateBarOption = {\n key: string;\n /** 选项卡标题(优先于 label) */\n tab?: ReactNode;\n label?: ReactNode;\n children?: ReactNode;\n disabled?: boolean;\n className?: string;\n style?: CSSProperties;\n};\n\nexport type StateBarProps = Omit<TabsProps, 'items' | 'type'> & {\n /** 状态项列表 */\n stateOption?: StateBarOption[];\n /** 展示样式 */\n type?: StateBarType;\n /** 底部线延展至容器全宽 */\n isInner?: boolean;\n className?: string;\n};\n\n/**\n * 基于 antd Tabs 的状态栏(对齐 kne-union StateBar)。\n * 无 children 时仅作切换条(隐藏 content-holder);有 children 时展示面板。\n */\nconst StateBar: React.FC<StateBarProps> = ({\n className,\n type = 'tab',\n stateOption = [],\n isInner,\n style,\n ...props\n}) => {\n const hasChildren = stateOption.some((item) => item.children != null);\n\n return (\n <Tabs\n {...props}\n data-testid=\"components-core-state-bar\"\n animated={false}\n className={classNames(\n 'marsun-state-bar',\n styles['state-bar'],\n styles[`tab-${type}-control`],\n isInner && styles['inner-state-bar'],\n hasChildren && styles['has-children'],\n className,\n )}\n style={\n {\n ['--total-count' as string]: stateOption.length,\n ...style,\n } as CSSProperties\n }\n items={stateOption.map(({ tab, label, key, ...rest }) => ({\n key,\n label: tab ?? label,\n ...rest,\n }))}\n />\n );\n};\n\nexport default StateBar;\n"],"names":["StateBar","className","type","stateOption","isInner","style","props","hasChildren","item","jsx","Tabs","classNames","styles","tab","label","key","rest"],"mappings":";;;;AAiCA,MAAMA,IAAoC,CAAC;AAAA,EACzC,WAAAC;AAAA,EACA,MAAAC,IAAO;AAAA,EACP,aAAAC,IAAc,CAAA;AAAA,EACd,SAAAC;AAAA,EACA,OAAAC;AAAA,EACA,GAAGC;AACL,MAAM;AACJ,QAAMC,IAAcJ,EAAY,KAAK,CAACK,MAASA,EAAK,YAAY,IAAI;AAEpE,SACE,gBAAAC;AAAA,IAACC;AAAA,IAAA;AAAA,MACE,GAAGJ;AAAA,MACJ,eAAY;AAAA,MACZ,UAAU;AAAA,MACV,WAAWK;AAAA,QACT;AAAA,QACAC,EAAO,WAAW;AAAA,QAClBA,EAAO,OAAOV,CAAI,UAAU;AAAA,QAC5BE,KAAWQ,EAAO,iBAAiB;AAAA,QACnCL,KAAeK,EAAO,cAAc;AAAA,QACpCX;AAAA,MAAA;AAAA,MAEF,OACE;AAAA,QACG,iBAA4BE,EAAY;AAAA,QACzC,GAAGE;AAAA,MAAA;AAAA,MAGP,OAAOF,EAAY,IAAI,CAAC,EAAE,KAAAU,GAAK,OAAAC,GAAO,KAAAC,GAAK,GAAGC,SAAY;AAAA,QACxD,KAAAD;AAAA,QACA,OAAOF,KAAOC;AAAA,QACd,GAAGE;AAAA,MAAA,EACH;AAAA,IAAA;AAAA,EAAA;AAGR;"}
1
+ {"version":3,"file":"StateBar.js","sources":["../../../src/components/StateBar/StateBar.tsx"],"sourcesContent":["import { Tabs } from 'antd';\nimport type { TabsProps } from 'antd';\nimport classNames from 'classnames';\nimport type { CSSProperties, ReactNode } from 'react';\nimport { Info } from '../Icons';\nimport type { DescriptionItem } from '../Descriptions/CommonDescriptions';\nimport { TooltipInfo } from '../TooltipInfo';\nimport styles from './style.module.scss';\n\nexport type StateBarType = 'tab' | 'radio' | 'step';\n\nexport type StateBarOption = {\n key: string;\n /** 选项卡标题(优先于 label) */\n tab?: ReactNode;\n label?: ReactNode;\n /** 标题旁 Info + TooltipInfo(对齐 Modal/InteractiveBlock);为空不展示 icon */\n info?: DescriptionItem[];\n children?: ReactNode;\n disabled?: boolean;\n className?: string;\n style?: CSSProperties;\n};\n\nexport type StateBarProps = Omit<TabsProps, 'items' | 'type'> & {\n /** 状态项列表 */\n stateOption?: StateBarOption[];\n /** 展示样式 */\n type?: StateBarType;\n /** 底部线延展至容器全宽 */\n isInner?: boolean;\n className?: string;\n};\n\n/** 渲染 Tab 标题:文字 + 可选 Info icon(hover 展示 TooltipInfo 详情) */\nfunction renderTabLabel(label: ReactNode, info?: DescriptionItem[]): ReactNode {\n if (!info || info.length === 0) return label;\n return (\n <span className={classNames('marsun-state-bar-tab-label', styles['state-bar-tab-label'])}>\n {label}\n <TooltipInfo\n content={info}\n placement=\"topLeft\"\n minWidth={220}\n maxWidth={360}\n overlayClassName=\"marsun-state-bar-info-tooltip\"\n >\n <span className={classNames('marsun-state-bar-info', styles['state-bar-info'])}>\n <Info size={14} aria-hidden />\n </span>\n </TooltipInfo>\n </span>\n );\n}\n\n/**\n * 基于 antd Tabs 的状态栏(对齐 kne-union StateBar)。\n * 无 children 时仅作切换条(隐藏 content-holder);有 children 时展示面板。\n */\nconst StateBar: React.FC<StateBarProps> = ({\n className,\n type = 'tab',\n stateOption = [],\n isInner,\n style,\n ...props\n}) => {\n const hasChildren = stateOption.some((item) => item.children != null);\n\n return (\n <Tabs\n {...props}\n data-testid=\"components-core-state-bar\"\n animated={false}\n className={classNames(\n 'marsun-state-bar',\n styles['state-bar'],\n styles[`tab-${type}-control`],\n isInner && styles['inner-state-bar'],\n hasChildren && styles['has-children'],\n className,\n )}\n style={\n {\n ['--total-count' as string]: stateOption.length,\n ...style,\n } as CSSProperties\n }\n items={stateOption.map(({ tab, label, info, key, ...rest }) => ({\n key,\n label: renderTabLabel(tab ?? label, info),\n ...rest,\n }))}\n />\n );\n};\n\nexport default StateBar;\n"],"names":["renderTabLabel","label","info","jsxs","classNames","styles","jsx","TooltipInfo","Info","StateBar","className","type","stateOption","isInner","style","props","hasChildren","item","Tabs","tab","key","rest"],"mappings":";;;;;;AAmCA,SAASA,EAAeC,GAAkBC,GAAqC;AAC7E,SAAI,CAACA,KAAQA,EAAK,WAAW,IAAUD,IAErC,gBAAAE,EAAC,UAAK,WAAWC,EAAW,8BAA8BC,EAAO,qBAAqB,CAAC,GACpF,UAAA;AAAA,IAAAJ;AAAA,IACD,gBAAAK;AAAA,MAACC;AAAA,MAAA;AAAA,QACC,SAASL;AAAA,QACT,WAAU;AAAA,QACV,UAAU;AAAA,QACV,UAAU;AAAA,QACV,kBAAiB;AAAA,QAEjB,UAAA,gBAAAI,EAAC,QAAA,EAAK,WAAWF,EAAW,yBAAyBC,EAAO,gBAAgB,CAAC,GAC3E,4BAACG,GAAA,EAAK,MAAM,IAAI,eAAW,IAAC,EAAA,CAC9B;AAAA,MAAA;AAAA,IAAA;AAAA,EACF,GACF;AAEJ;AAMA,MAAMC,IAAoC,CAAC;AAAA,EACzC,WAAAC;AAAA,EACA,MAAAC,IAAO;AAAA,EACP,aAAAC,IAAc,CAAA;AAAA,EACd,SAAAC;AAAA,EACA,OAAAC;AAAA,EACA,GAAGC;AACL,MAAM;AACJ,QAAMC,IAAcJ,EAAY,KAAK,CAACK,MAASA,EAAK,YAAY,IAAI;AAEpE,SACE,gBAAAX;AAAA,IAACY;AAAA,IAAA;AAAA,MACE,GAAGH;AAAA,MACJ,eAAY;AAAA,MACZ,UAAU;AAAA,MACV,WAAWX;AAAA,QACT;AAAA,QACAC,EAAO,WAAW;AAAA,QAClBA,EAAO,OAAOM,CAAI,UAAU;AAAA,QAC5BE,KAAWR,EAAO,iBAAiB;AAAA,QACnCW,KAAeX,EAAO,cAAc;AAAA,QACpCK;AAAA,MAAA;AAAA,MAEF,OACE;AAAA,QACG,iBAA4BE,EAAY;AAAA,QACzC,GAAGE;AAAA,MAAA;AAAA,MAGP,OAAOF,EAAY,IAAI,CAAC,EAAE,KAAAO,GAAK,OAAAlB,GAAO,MAAAC,GAAM,KAAAkB,GAAK,GAAGC,SAAY;AAAA,QAC9D,KAAAD;AAAA,QACA,OAAOpB,EAAemB,KAAOlB,GAAOC,CAAI;AAAA,QACxC,GAAGmB;AAAA,MAAA,EACH;AAAA,IAAA;AAAA,EAAA;AAGR;"}
@@ -1,10 +1,12 @@
1
1
  const t = {
2
- "state-bar": "_state-bar_nrtjt_1",
3
- "has-children": "_has-children_nrtjt_7",
4
- "tab-tab-control": "_tab-tab-control_nrtjt_14",
5
- "tab-radio-control": "_tab-radio-control_nrtjt_21",
6
- "tab-step-control": "_tab-step-control_nrtjt_55",
7
- "inner-state-bar": "_inner-state-bar_nrtjt_145"
2
+ "state-bar": "_state-bar_198uu_1",
3
+ "has-children": "_has-children_198uu_7",
4
+ "state-bar-tab-label": "_state-bar-tab-label_198uu_14",
5
+ "state-bar-info": "_state-bar-info_198uu_20",
6
+ "tab-tab-control": "_tab-tab-control_198uu_30",
7
+ "tab-radio-control": "_tab-radio-control_198uu_37",
8
+ "tab-step-control": "_tab-step-control_198uu_71",
9
+ "inner-state-bar": "_inner-state-bar_198uu_161"
8
10
  };
9
11
  export {
10
12
  t as default
@@ -1 +1 @@
1
- {"version":3,"file":"style.module.scss.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;"}
1
+ {"version":3,"file":"style.module.scss.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;"}
@@ -1,19 +1,34 @@
1
1
  import { TooltipProps } from 'antd';
2
2
  import { default as React } from 'react';
3
3
  import { DescriptionItem } from '../Descriptions/CommonDescriptions';
4
- export interface TooltipInfoProps extends Pick<TooltipProps, 'placement' | 'mouseEnterDelay' | 'mouseLeaveDelay'> {
5
- /** 详情描述项,内部使用 CommonDescriptions 渲染 */
6
- content: DescriptionItem[];
4
+ /** Tooltip 展示形态:descriptions=结构化详情(默认);note=标题+描述分层 */
5
+ export type TooltipInfoType = 'descriptions' | 'note';
6
+ /** note 形态内容:标题(粗体)+ 描述(次级色) */
7
+ export interface TooltipInfoNote {
8
+ title: React.ReactNode;
9
+ description: React.ReactNode;
10
+ }
11
+ export interface TooltipInfoProps extends Pick<TooltipProps, 'placement' | 'mouseEnterDelay' | 'mouseLeaveDelay' | 'open' | 'onOpenChange'> {
12
+ /** 展示形态,默认 descriptions */
13
+ type?: TooltipInfoType;
14
+ /** type='descriptions' 的详情项(默认形态) */
15
+ content?: DescriptionItem[];
16
+ /** type='note' 的标题与描述 */
17
+ note?: TooltipInfoNote;
7
18
  children: React.ReactNode;
8
- /** CommonDescriptions 列数,默认 1 */
19
+ /** CommonDescriptions 列数,默认 1(仅 descriptions 形态) */
9
20
  column?: number;
10
- /** 为 true 或 content 为空时不展示 Tooltip */
21
+ /** 为 true 时不展示 Tooltip;descriptions 形态下 content 为空也不展示 */
11
22
  hidden?: boolean;
23
+ /** 气泡最小宽度,默认 descriptions 220 / note 240 */
24
+ minWidth?: number;
25
+ /** 气泡最大宽度,默认 descriptions 320 / note 380 */
26
+ maxWidth?: number;
12
27
  /** @deprecated 使用 classNames.root */
13
28
  overlayClassName?: string;
14
29
  /** @deprecated 使用 styles.root */
15
30
  overlayStyle?: React.CSSProperties;
16
31
  }
17
- /** Tooltip 详情展示,内部统一使用 CommonDescriptions */
32
+ /** Tooltip 详情展示:descriptions 形态用 CommonDescriptions;note 形态用标题+描述分层 */
18
33
  declare const TooltipInfo: React.FC<TooltipInfoProps>;
19
34
  export default TooltipInfo;
@@ -1,47 +1,65 @@
1
- import { jsx as o, Fragment as m } from "react/jsx-runtime";
2
- import { Tooltip as d } from "antd";
3
- import s from "../Descriptions/CommonDescriptions.js";
4
- const c = ({
5
- content: t,
6
- children: r,
7
- column: i = 1,
8
- hidden: a = !1,
9
- placement: e = "top",
10
- overlayClassName: n,
11
- overlayStyle: p,
12
- mouseEnterDelay: l = 0.3,
13
- ...f
14
- }) => a || t.length === 0 ? /* @__PURE__ */ o(m, { children: r }) : /* @__PURE__ */ o(
15
- d,
16
- {
17
- placement: e,
18
- mouseEnterDelay: l,
19
- destroyOnHidden: !0,
20
- classNames: { root: ["tooltip-info-overlay", n].filter(Boolean).join(" ") },
21
- styles: {
22
- root: {
23
- maxWidth: 320
1
+ import { jsx as o, Fragment as v, jsxs as W } from "react/jsx-runtime";
2
+ import { Tooltip as y } from "antd";
3
+ import N from "../Descriptions/CommonDescriptions.js";
4
+ const C = ({
5
+ type: a = "descriptions",
6
+ content: i,
7
+ note: r,
8
+ children: e,
9
+ column: l = 1,
10
+ hidden: p = !1,
11
+ minWidth: d,
12
+ maxWidth: f,
13
+ placement: m = "top",
14
+ overlayClassName: c,
15
+ overlayStyle: x,
16
+ mouseEnterDelay: b = 0.3,
17
+ ...g
18
+ }) => {
19
+ const t = a === "note", h = t ? !r : !i || i.length === 0;
20
+ if (p || h)
21
+ return /* @__PURE__ */ o(v, { children: e });
22
+ const n = d ?? (t ? 240 : 220), s = f ?? (t ? 380 : 320), u = t ? /* @__PURE__ */ W("div", { className: "tooltip-info-note", children: [
23
+ /* @__PURE__ */ o("div", { className: "tooltip-info-note-title", children: r.title }),
24
+ /* @__PURE__ */ o("div", { className: "tooltip-info-note-desc", children: r.description })
25
+ ] }) : (
26
+ // bordered=false:antd Descriptions 改用 dl 布局而非 table,避免 table-layout:fixed
27
+ // 在 max-content 气泡根下循环宽度塌陷,长文才能在 maxWidth 处正常换行
28
+ /* @__PURE__ */ o(N, { content: i, column: l, size: "small", bordered: !1 })
29
+ );
30
+ return /* @__PURE__ */ o(
31
+ y,
32
+ {
33
+ placement: m,
34
+ mouseEnterDelay: b,
35
+ destroyOnHidden: !0,
36
+ classNames: { root: ["tooltip-info-overlay", c].filter(Boolean).join(" ") },
37
+ styles: {
38
+ root: {
39
+ // 覆盖 antd 默认 width:max-content,给气泡确定的最小宽度,避免子元素循环塌陷
40
+ width: "auto",
41
+ minWidth: n,
42
+ maxWidth: s
43
+ },
44
+ container: {
45
+ boxSizing: "border-box",
46
+ minWidth: n,
47
+ maxWidth: s,
48
+ padding: "8px 12px",
49
+ background: "var(--tooltip-info-bg, var(--bg-color-white, #ffffff))",
50
+ color: "var(--tooltip-info-color, var(--font-color, #222222))",
51
+ boxShadow: "0 6px 16px 0 rgba(0, 0, 0, 0.08), 0 3px 6px -4px rgba(0, 0, 0, 0.12)",
52
+ ...x
53
+ }
24
54
  },
25
- container: {
26
- boxSizing: "border-box",
27
- minWidth: 220,
28
- width: "100%",
29
- padding: "8px 12px",
30
- background: "var(--tooltip-info-bg, var(--bg-color-white, #ffffff))",
31
- color: "var(--tooltip-info-color, var(--font-color, #222222))",
32
- boxShadow: "0 6px 16px 0 rgba(0, 0, 0, 0.08), 0 3px 6px -4px rgba(0, 0, 0, 0.12)",
33
- ...p,
34
- // 硬上限:避免 Descriptions 长文把气泡横向撑爆
35
- maxWidth: 320
36
- }
37
- },
38
- getPopupContainer: () => document.body,
39
- title: /* @__PURE__ */ o(s, { content: t, column: i, size: "small" }),
40
- ...f,
41
- children: r
42
- }
43
- );
55
+ getPopupContainer: () => document.body,
56
+ title: u,
57
+ ...g,
58
+ children: e
59
+ }
60
+ );
61
+ };
44
62
  export {
45
- c as default
63
+ C as default
46
64
  };
47
65
  //# sourceMappingURL=TooltipInfo.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"TooltipInfo.js","sources":["../../../src/components/TooltipInfo/TooltipInfo.tsx"],"sourcesContent":["import type { TooltipProps } from 'antd';\nimport { Tooltip } from 'antd';\nimport React from 'react';\nimport type { DescriptionItem } from '../Descriptions/CommonDescriptions';\nimport CommonDescriptions from '../Descriptions/CommonDescriptions';\nimport './style.module.scss';\n\nexport interface TooltipInfoProps extends Pick<\n TooltipProps,\n 'placement' | 'mouseEnterDelay' | 'mouseLeaveDelay'\n> {\n /** 详情描述项,内部使用 CommonDescriptions 渲染 */\n content: DescriptionItem[];\n children: React.ReactNode;\n /** CommonDescriptions 列数,默认 1 */\n column?: number;\n /** 为 true 或 content 为空时不展示 Tooltip */\n hidden?: boolean;\n /** @deprecated 使用 classNames.root */\n overlayClassName?: string;\n /** @deprecated 使用 styles.root */\n overlayStyle?: React.CSSProperties;\n}\n\n/** Tooltip 详情展示,内部统一使用 CommonDescriptions */\nconst TooltipInfo: React.FC<TooltipInfoProps> = ({\n content,\n children,\n column = 1,\n hidden = false,\n placement = 'top',\n overlayClassName,\n overlayStyle,\n mouseEnterDelay = 0.3,\n ...rest\n}) => {\n if (hidden || content.length === 0) {\n return <>{children}</>;\n }\n\n return (\n <Tooltip\n placement={placement}\n mouseEnterDelay={mouseEnterDelay}\n destroyOnHidden\n classNames={{ root: ['tooltip-info-overlay', overlayClassName].filter(Boolean).join(' ') }}\n styles={{\n root: {\n maxWidth: 320,\n },\n container: {\n boxSizing: 'border-box',\n minWidth: 220,\n width: '100%',\n padding: '8px 12px',\n background: 'var(--tooltip-info-bg, var(--bg-color-white, #ffffff))',\n color: 'var(--tooltip-info-color, var(--font-color, #222222))',\n boxShadow: '0 6px 16px 0 rgba(0, 0, 0, 0.08), 0 3px 6px -4px rgba(0, 0, 0, 0.12)',\n ...overlayStyle,\n // 硬上限:避免 Descriptions 长文把气泡横向撑爆\n maxWidth: 320,\n },\n }}\n getPopupContainer={() => document.body}\n title={<CommonDescriptions content={content} column={column} size=\"small\" />}\n {...rest}\n >\n {children}\n </Tooltip>\n );\n};\n\nexport default TooltipInfo;\n"],"names":["TooltipInfo","content","children","column","hidden","placement","overlayClassName","overlayStyle","mouseEnterDelay","rest","jsx","Tooltip","CommonDescriptions"],"mappings":";;;AAyBA,MAAMA,IAA0C,CAAC;AAAA,EAC/C,SAAAC;AAAA,EACA,UAAAC;AAAA,EACA,QAAAC,IAAS;AAAA,EACT,QAAAC,IAAS;AAAA,EACT,WAAAC,IAAY;AAAA,EACZ,kBAAAC;AAAA,EACA,cAAAC;AAAA,EACA,iBAAAC,IAAkB;AAAA,EAClB,GAAGC;AACL,MACML,KAAUH,EAAQ,WAAW,2BACrB,UAAAC,GAAS,IAInB,gBAAAQ;AAAA,EAACC;AAAA,EAAA;AAAA,IACC,WAAAN;AAAA,IACA,iBAAAG;AAAA,IACA,iBAAe;AAAA,IACf,YAAY,EAAE,MAAM,CAAC,wBAAwBF,CAAgB,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,EAAA;AAAA,IACvF,QAAQ;AAAA,MACN,MAAM;AAAA,QACJ,UAAU;AAAA,MAAA;AAAA,MAEZ,WAAW;AAAA,QACT,WAAW;AAAA,QACX,UAAU;AAAA,QACV,OAAO;AAAA,QACP,SAAS;AAAA,QACT,YAAY;AAAA,QACZ,OAAO;AAAA,QACP,WAAW;AAAA,QACX,GAAGC;AAAA;AAAA,QAEH,UAAU;AAAA,MAAA;AAAA,IACZ;AAAA,IAEF,mBAAmB,MAAM,SAAS;AAAA,IAClC,OAAO,gBAAAG,EAACE,GAAA,EAAmB,SAAAX,GAAkB,QAAAE,GAAgB,MAAK,SAAQ;AAAA,IACzE,GAAGM;AAAA,IAEH,UAAAP;AAAA,EAAA;AAAA;"}
1
+ {"version":3,"file":"TooltipInfo.js","sources":["../../../src/components/TooltipInfo/TooltipInfo.tsx"],"sourcesContent":["import type { TooltipProps } from 'antd';\nimport { Tooltip } from 'antd';\nimport React from 'react';\nimport type { DescriptionItem } from '../Descriptions/CommonDescriptions';\nimport CommonDescriptions from '../Descriptions/CommonDescriptions';\nimport './style.module.scss';\n\n/** Tooltip 展示形态:descriptions=结构化详情(默认);note=标题+描述分层 */\nexport type TooltipInfoType = 'descriptions' | 'note';\n\n/** note 形态内容:标题(粗体)+ 描述(次级色) */\nexport interface TooltipInfoNote {\n title: React.ReactNode;\n description: React.ReactNode;\n}\n\nexport interface TooltipInfoProps extends Pick<\n TooltipProps,\n 'placement' | 'mouseEnterDelay' | 'mouseLeaveDelay' | 'open' | 'onOpenChange'\n> {\n /** 展示形态,默认 descriptions */\n type?: TooltipInfoType;\n /** type='descriptions' 的详情项(默认形态) */\n content?: DescriptionItem[];\n /** type='note' 的标题与描述 */\n note?: TooltipInfoNote;\n children: React.ReactNode;\n /** CommonDescriptions 列数,默认 1(仅 descriptions 形态) */\n column?: number;\n /** 为 true 时不展示 Tooltip;descriptions 形态下 content 为空也不展示 */\n hidden?: boolean;\n /** 气泡最小宽度,默认 descriptions 220 / note 240 */\n minWidth?: number;\n /** 气泡最大宽度,默认 descriptions 320 / note 380 */\n maxWidth?: number;\n /** @deprecated 使用 classNames.root */\n overlayClassName?: string;\n /** @deprecated 使用 styles.root */\n overlayStyle?: React.CSSProperties;\n}\n\n/** Tooltip 详情展示:descriptions 形态用 CommonDescriptions;note 形态用标题+描述分层 */\nconst TooltipInfo: React.FC<TooltipInfoProps> = ({\n type = 'descriptions',\n content,\n note,\n children,\n column = 1,\n hidden = false,\n minWidth,\n maxWidth,\n placement = 'top',\n overlayClassName,\n overlayStyle,\n mouseEnterDelay = 0.3,\n ...rest\n}) => {\n const isNote = type === 'note';\n const empty = isNote ? !note : !content || content.length === 0;\n if (hidden || empty) {\n return <>{children}</>;\n }\n\n const minW = minWidth ?? (isNote ? 240 : 220);\n const maxW = maxWidth ?? (isNote ? 380 : 320);\n\n const title = isNote ? (\n <div className=\"tooltip-info-note\">\n <div className=\"tooltip-info-note-title\">{note!.title}</div>\n <div className=\"tooltip-info-note-desc\">{note!.description}</div>\n </div>\n ) : (\n // bordered=false:antd Descriptions 改用 dl 布局而非 table,避免 table-layout:fixed\n // 在 max-content 气泡根下循环宽度塌陷,长文才能在 maxWidth 处正常换行\n <CommonDescriptions content={content!} column={column} size=\"small\" bordered={false} />\n );\n\n return (\n <Tooltip\n placement={placement}\n mouseEnterDelay={mouseEnterDelay}\n destroyOnHidden\n classNames={{ root: ['tooltip-info-overlay', overlayClassName].filter(Boolean).join(' ') }}\n styles={{\n root: {\n // 覆盖 antd 默认 width:max-content,给气泡确定的最小宽度,避免子元素循环塌陷\n width: 'auto',\n minWidth: minW,\n maxWidth: maxW,\n },\n container: {\n boxSizing: 'border-box',\n minWidth: minW,\n maxWidth: maxW,\n padding: '8px 12px',\n background: 'var(--tooltip-info-bg, var(--bg-color-white, #ffffff))',\n color: 'var(--tooltip-info-color, var(--font-color, #222222))',\n boxShadow: '0 6px 16px 0 rgba(0, 0, 0, 0.08), 0 3px 6px -4px rgba(0, 0, 0, 0.12)',\n ...overlayStyle,\n },\n }}\n getPopupContainer={() => document.body}\n title={title}\n {...rest}\n >\n {children}\n </Tooltip>\n );\n};\n\nexport default TooltipInfo;\n"],"names":["TooltipInfo","type","content","note","children","column","hidden","minWidth","maxWidth","placement","overlayClassName","overlayStyle","mouseEnterDelay","rest","isNote","empty","minW","maxW","title","jsxs","jsx","CommonDescriptions","Tooltip"],"mappings":";;;AA0CA,MAAMA,IAA0C,CAAC;AAAA,EAC/C,MAAAC,IAAO;AAAA,EACP,SAAAC;AAAA,EACA,MAAAC;AAAA,EACA,UAAAC;AAAA,EACA,QAAAC,IAAS;AAAA,EACT,QAAAC,IAAS;AAAA,EACT,UAAAC;AAAA,EACA,UAAAC;AAAA,EACA,WAAAC,IAAY;AAAA,EACZ,kBAAAC;AAAA,EACA,cAAAC;AAAA,EACA,iBAAAC,IAAkB;AAAA,EAClB,GAAGC;AACL,MAAM;AACJ,QAAMC,IAASb,MAAS,QAClBc,IAAQD,IAAS,CAACX,IAAO,CAACD,KAAWA,EAAQ,WAAW;AAC9D,MAAII,KAAUS;AACZ,kCAAU,UAAAX,GAAS;AAGrB,QAAMY,IAAOT,MAAaO,IAAS,MAAM,MACnCG,IAAOT,MAAaM,IAAS,MAAM,MAEnCI,IAAQJ,IACZ,gBAAAK,EAAC,OAAA,EAAI,WAAU,qBACb,UAAA;AAAA,IAAA,gBAAAC,EAAC,OAAA,EAAI,WAAU,2BAA2B,UAAAjB,EAAM,OAAM;AAAA,IACtD,gBAAAiB,EAAC,OAAA,EAAI,WAAU,0BAA0B,YAAM,YAAA,CAAY;AAAA,EAAA,GAC7D;AAAA;AAAA;AAAA,sBAICC,GAAA,EAAmB,SAAAnB,GAAmB,QAAAG,GAAgB,MAAK,SAAQ,UAAU,GAAA,CAAO;AAAA;AAGvF,SACE,gBAAAe;AAAA,IAACE;AAAA,IAAA;AAAA,MACC,WAAAb;AAAA,MACA,iBAAAG;AAAA,MACA,iBAAe;AAAA,MACf,YAAY,EAAE,MAAM,CAAC,wBAAwBF,CAAgB,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,EAAA;AAAA,MACvF,QAAQ;AAAA,QACN,MAAM;AAAA;AAAA,UAEJ,OAAO;AAAA,UACP,UAAUM;AAAA,UACV,UAAUC;AAAA,QAAA;AAAA,QAEZ,WAAW;AAAA,UACT,WAAW;AAAA,UACX,UAAUD;AAAA,UACV,UAAUC;AAAA,UACV,SAAS;AAAA,UACT,YAAY;AAAA,UACZ,OAAO;AAAA,UACP,WAAW;AAAA,UACX,GAAGN;AAAA,QAAA;AAAA,MACL;AAAA,MAEF,mBAAmB,MAAM,SAAS;AAAA,MAClC,OAAAO;AAAA,MACC,GAAGL;AAAA,MAEH,UAAAT;AAAA,IAAA;AAAA,EAAA;AAGP;"}
@@ -1,2 +1,2 @@
1
1
  export { default as TooltipInfo } from './TooltipInfo';
2
- export type { TooltipInfoProps } from './TooltipInfo';
2
+ export type { TooltipInfoProps, TooltipInfoType, TooltipInfoNote } from './TooltipInfo';