@hkyhy/marsun-components-core 0.1.47 → 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.
Files changed (49) hide show
  1. package/dist/_virtual/zh-cn.js +3 -0
  2. package/dist/_virtual/zh-cn.js.map +1 -0
  3. package/dist/_virtual/zh-cn2.js +5 -0
  4. package/dist/_virtual/zh-cn2.js.map +1 -0
  5. package/dist/components/Filter/FilterDatePicker/index.js +10 -9
  6. package/dist/components/Filter/FilterDatePicker/index.js.map +1 -1
  7. package/dist/components/Filter/FilterDateRange/index.js +3 -2
  8. package/dist/components/Filter/FilterDateRange/index.js.map +1 -1
  9. package/dist/components/ReactFilter/common/TypeDateRangePickerField/index.js +31 -30
  10. package/dist/components/ReactFilter/common/TypeDateRangePickerField/index.js.map +1 -1
  11. package/dist/components/ReactFilter/fields/DatePickerFilterItem.js +7 -6
  12. package/dist/components/ReactFilter/fields/DatePickerFilterItem.js.map +1 -1
  13. package/dist/components/ReactFilter/fields/DateRangePickerFilterItem.js +3 -2
  14. package/dist/components/ReactFilter/fields/DateRangePickerFilterItem.js.map +1 -1
  15. package/dist/components/ReactFilter/fields/TypeDateRangePickerFilterItem.js +11 -10
  16. package/dist/components/ReactFilter/fields/TypeDateRangePickerFilterItem.js.map +1 -1
  17. package/dist/components/SegmentedRadio/SegmentedRadio.d.ts +29 -0
  18. package/dist/components/SegmentedRadio/SegmentedRadio.js +48 -0
  19. package/dist/components/SegmentedRadio/SegmentedRadio.js.map +1 -0
  20. package/dist/components/SegmentedRadio/index.d.ts +2 -0
  21. package/dist/components/SegmentedRadio/style.module.scss.js +9 -0
  22. package/dist/components/SegmentedRadio/style.module.scss.js.map +1 -0
  23. package/dist/components/StateBar/StateBar.d.ts +3 -0
  24. package/dist/components/StateBar/StateBar.js +44 -26
  25. package/dist/components/StateBar/StateBar.js.map +1 -1
  26. package/dist/components/StateBar/style.module.scss.js +8 -6
  27. package/dist/components/StateBar/style.module.scss.js.map +1 -1
  28. package/dist/components/Tag/Tags/index.d.ts +2 -2
  29. package/dist/components/Tag/Tags/index.js +37 -22
  30. package/dist/components/Tag/Tags/index.js.map +1 -1
  31. package/dist/components/Tag/Tags/style.module.scss.js +3 -3
  32. package/dist/components/TooltipInfo/TooltipInfo.d.ts +21 -6
  33. package/dist/components/TooltipInfo/TooltipInfo.js +61 -43
  34. package/dist/components/TooltipInfo/TooltipInfo.js.map +1 -1
  35. package/dist/components/TooltipInfo/index.d.ts +1 -1
  36. package/dist/components/index.d.ts +1 -0
  37. package/dist/index.d.ts +1 -0
  38. package/dist/index.js +580 -577
  39. package/dist/index.js.map +1 -1
  40. package/dist/marsun-components-core.css +1 -1
  41. package/dist/node_modules/dayjs/locale/zh-cn.js +25 -0
  42. package/dist/node_modules/dayjs/locale/zh-cn.js.map +1 -0
  43. package/dist/provider/MarsunCoreProvider.js +10 -9
  44. package/dist/provider/MarsunCoreProvider.js.map +1 -1
  45. package/dist/styles/global.css +1 -1
  46. package/dist/utils/ensureDayjsZhCn.d.ts +0 -0
  47. package/dist/utils/ensureDayjsZhCn.js +4 -0
  48. package/dist/utils/ensureDayjsZhCn.js.map +1 -0
  49. package/package.json +6 -2
@@ -0,0 +1,29 @@
1
+ import { RadioGroupProps } from 'antd/es/radio/interface';
2
+ import { CSSProperties, ReactNode } from 'react';
3
+ export type SegmentedRadioOption<T = string | number> = {
4
+ label: ReactNode;
5
+ value: T;
6
+ disabled?: boolean;
7
+ };
8
+ export type SegmentedRadioProps<T = string | number> = Omit<RadioGroupProps, 'options' | 'onChange' | 'optionType' | 'buttonStyle'> & {
9
+ /** 选项列表 */
10
+ options: SegmentedRadioOption<T>[];
11
+ /** 当前值(受控) */
12
+ value?: T;
13
+ /** 默认值(非受控) */
14
+ defaultValue?: T;
15
+ /** 选中变化:直接回传 value,无需 e.target.value */
16
+ onChange?: (value: T) => void;
17
+ /** 尺寸:small / middle / large,默认 middle */
18
+ size?: RadioGroupProps['size'];
19
+ /** 整组禁用 */
20
+ disabled?: boolean;
21
+ /** 按钮样式:默认 solid(实心) */
22
+ buttonStyle?: RadioGroupProps['buttonStyle'];
23
+ /** 撑满容器宽度(每个按钮等分) */
24
+ block?: boolean;
25
+ className?: string;
26
+ style?: CSSProperties;
27
+ };
28
+ declare const SegmentedRadio: <T = string | number>(props: SegmentedRadioProps<T>) => React.ReactElement;
29
+ export default SegmentedRadio;
@@ -0,0 +1,48 @@
1
+ import { jsx as g } from "react/jsx-runtime";
2
+ import { Radio as b } from "antd";
3
+ import y from "classnames";
4
+ import t from "./style.module.scss.js";
5
+ function N(o) {
6
+ const {
7
+ options: s,
8
+ value: a,
9
+ defaultValue: n,
10
+ onChange: e,
11
+ size: r,
12
+ disabled: d,
13
+ buttonStyle: m = "solid",
14
+ block: i,
15
+ className: l,
16
+ style: c,
17
+ ...u
18
+ } = o, p = (f) => {
19
+ e == null || e(f.target.value);
20
+ };
21
+ return /* @__PURE__ */ g(
22
+ b.Group,
23
+ {
24
+ ...u,
25
+ "data-testid": "components-core-segmented-radio",
26
+ className: y(
27
+ "marsun-segmented-radio",
28
+ t["segmented-radio"],
29
+ i && t.block,
30
+ l
31
+ ),
32
+ style: c,
33
+ options: s,
34
+ value: a,
35
+ defaultValue: n,
36
+ onChange: p,
37
+ size: r,
38
+ disabled: d,
39
+ optionType: "button",
40
+ buttonStyle: m
41
+ }
42
+ );
43
+ }
44
+ const v = N;
45
+ export {
46
+ v as default
47
+ };
48
+ //# sourceMappingURL=SegmentedRadio.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SegmentedRadio.js","sources":["../../../src/components/SegmentedRadio/SegmentedRadio.tsx"],"sourcesContent":["import { Radio } from 'antd';\nimport type { RadioGroupProps, RadioChangeEvent } from 'antd/es/radio/interface';\nimport classNames from 'classnames';\nimport type { CSSProperties, ReactNode } from 'react';\nimport styles from './style.module.scss';\n\nexport type SegmentedRadioOption<T = string | number> = {\n label: ReactNode;\n value: T;\n disabled?: boolean;\n};\n\nexport type SegmentedRadioProps<T = string | number> = Omit<\n RadioGroupProps,\n 'options' | 'onChange' | 'optionType' | 'buttonStyle'\n> & {\n /** 选项列表 */\n options: SegmentedRadioOption<T>[];\n /** 当前值(受控) */\n value?: T;\n /** 默认值(非受控) */\n defaultValue?: T;\n /** 选中变化:直接回传 value,无需 e.target.value */\n onChange?: (value: T) => void;\n /** 尺寸:small / middle / large,默认 middle */\n size?: RadioGroupProps['size'];\n /** 整组禁用 */\n disabled?: boolean;\n /** 按钮样式:默认 solid(实心) */\n buttonStyle?: RadioGroupProps['buttonStyle'];\n /** 撑满容器宽度(每个按钮等分) */\n block?: boolean;\n className?: string;\n style?: CSSProperties;\n};\n\n/**\n * 分段单选:基于 antd Radio.Group 的 button+solid 形态,\n * 统一项目内「分段按钮」交互与样式(对齐批量设置三大类的 panel-radio)。\n *\n * - 默认 optionType=\"button\" buttonStyle=\"solid\"\n * - onChange 直接回传 value,屏蔽 RadioChangeEvent\n * - block=true 时按钮等分容器宽度并自动换行\n */\nfunction SegmentedRadioInner<T = string | number>(props: SegmentedRadioProps<T>) {\n const {\n options,\n value,\n defaultValue,\n onChange,\n size,\n disabled,\n buttonStyle = 'solid',\n block,\n className,\n style,\n ...rest\n } = props;\n\n const handleChange = (e: RadioChangeEvent) => {\n onChange?.(e.target.value as T);\n };\n\n return (\n <Radio.Group\n {...rest}\n data-testid=\"components-core-segmented-radio\"\n className={classNames(\n 'marsun-segmented-radio',\n styles['segmented-radio'],\n block && styles['block'],\n className,\n )}\n style={style}\n options={options as RadioGroupProps['options']}\n value={value as RadioGroupProps['value']}\n defaultValue={defaultValue as RadioGroupProps['defaultValue']}\n onChange={handleChange}\n size={size}\n disabled={disabled}\n optionType=\"button\"\n buttonStyle={buttonStyle}\n />\n );\n}\n\nconst SegmentedRadio = SegmentedRadioInner as <T = string | number>(\n props: SegmentedRadioProps<T>,\n) => React.ReactElement;\n\nexport default SegmentedRadio;\n"],"names":["SegmentedRadioInner","props","options","value","defaultValue","onChange","size","disabled","buttonStyle","block","className","style","rest","handleChange","e","jsx","Radio","classNames","styles","SegmentedRadio"],"mappings":";;;;AA4CA,SAASA,EAAyCC,GAA+B;AAC/E,QAAM;AAAA,IACJ,SAAAC;AAAA,IACA,OAAAC;AAAA,IACA,cAAAC;AAAA,IACA,UAAAC;AAAA,IACA,MAAAC;AAAA,IACA,UAAAC;AAAA,IACA,aAAAC,IAAc;AAAA,IACd,OAAAC;AAAA,IACA,WAAAC;AAAA,IACA,OAAAC;AAAA,IACA,GAAGC;AAAA,EAAA,IACDX,GAEEY,IAAe,CAACC,MAAwB;AAC5C,IAAAT,KAAA,QAAAA,EAAWS,EAAE,OAAO;AAAA,EACtB;AAEA,SACE,gBAAAC;AAAA,IAACC,EAAM;AAAA,IAAN;AAAA,MACE,GAAGJ;AAAA,MACJ,eAAY;AAAA,MACZ,WAAWK;AAAA,QACT;AAAA,QACAC,EAAO,iBAAiB;AAAA,QACxBT,KAASS,EAAO;AAAA,QAChBR;AAAA,MAAA;AAAA,MAEF,OAAAC;AAAA,MACA,SAAAT;AAAA,MACA,OAAAC;AAAA,MACA,cAAAC;AAAA,MACA,UAAUS;AAAA,MACV,MAAAP;AAAA,MACA,UAAAC;AAAA,MACA,YAAW;AAAA,MACX,aAAAC;AAAA,IAAA;AAAA,EAAA;AAGN;AAEA,MAAMW,IAAiBnB;"}
@@ -0,0 +1,2 @@
1
+ export { default as SegmentedRadio, default } from './SegmentedRadio';
2
+ export type { SegmentedRadioOption, SegmentedRadioProps } from './SegmentedRadio';
@@ -0,0 +1,9 @@
1
+ const e = "_block_1hifq_6", o = {
2
+ "segmented-radio": "_segmented-radio_1hifq_1",
3
+ block: e
4
+ };
5
+ export {
6
+ e as block,
7
+ o as default
8
+ };
9
+ //# sourceMappingURL=style.module.scss.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"style.module.scss.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
@@ -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":";;;;;;;;;;"}
@@ -3,7 +3,7 @@ import { SemanticColor } from '../SemanticTag';
3
3
  export interface TagsProps {
4
4
  /** 标签列表 */
5
5
  tags?: string[];
6
- /** 最多展示的标签数量;未传或 tags 数量未超出时展示全部 */
6
+ /** 最多展示的标签数量;未传或无效时展示全部 */
7
7
  showLength?: number;
8
8
  /** 无标签时的占位,传 null 则不渲染 */
9
9
  empty?: React.ReactNode;
@@ -11,6 +11,6 @@ export interface TagsProps {
11
11
  /** 标签颜色,默认 INFO */
12
12
  color?: SemanticColor | string;
13
13
  }
14
- /** 通用标签列表(SemanticTag + showLength 截断) */
14
+ /** 通用标签列表(SemanticTag + showLength 截断;长文案 ellipsis + hover 全量) */
15
15
  declare const Tags: React.FC<TagsProps>;
16
16
  export default Tags;
@@ -1,32 +1,47 @@
1
- import { jsx as c, Fragment as f, jsxs as p } from "react/jsx-runtime";
2
- import { Tooltip as T } from "antd";
3
- import d, { SEMANTIC_COLORS as g } from "../SemanticTag.js";
4
- import u from "./style.module.scss.js";
5
- import m from "classnames";
6
- const e = (t, l) => {
7
- const { otherCount: r = 0, nowrap: n = !1, className: o, color: i } = l, a = n ? m("tags-tag-list-nowrap", u["tags-tag-list-nowrap"]) : void 0;
8
- return /* @__PURE__ */ p("div", { className: m("tags-tag-list", u["tags-tag-list"], a, o), children: [
9
- t.map((s) => /* @__PURE__ */ c(d, { color: i, children: s }, s)),
10
- r > 0 && /* @__PURE__ */ p(d, { color: i, children: [
1
+ import { jsx as c, Fragment as C, jsxs as f } from "react/jsx-runtime";
2
+ import { Tooltip as N } from "antd";
3
+ import g, { SEMANTIC_COLORS as v } from "../SemanticTag.js";
4
+ import m from "./style.module.scss.js";
5
+ import p from "classnames";
6
+ const x = 8, a = (t, n) => {
7
+ const { otherCount: o = 0, nowrap: i = !1, className: s, color: l } = n, e = i ? p("tags-tag-list-nowrap", m["tags-tag-list-nowrap"]) : void 0;
8
+ return /* @__PURE__ */ f("div", { className: p("tags-tag-list", m["tags-tag-list"], e, s), children: [
9
+ t.map((r) => /* @__PURE__ */ c(g, { color: l, children: r }, r)),
10
+ o > 0 && /* @__PURE__ */ f(g, { color: l, children: [
11
11
  "+",
12
- r
12
+ o
13
13
  ] })
14
14
  ] });
15
- }, O = ({
15
+ }, j = ({
16
16
  tags: t,
17
- showLength: l,
18
- empty: r = "-",
19
- className: n,
20
- color: o = g.INFO
17
+ showLength: n,
18
+ empty: o = "-",
19
+ className: i,
20
+ color: s = v.INFO
21
21
  }) => {
22
22
  if (!(t != null && t.length))
23
- return r != null ? /* @__PURE__ */ c(f, { children: r }) : null;
24
- if (!(l != null && l > 0 && t.length > l))
25
- return e(t, { className: n, color: o });
26
- const a = t.slice(0, l), s = t.length - l;
27
- return /* @__PURE__ */ c(T, { title: e(t, { className: m("tags-tag-list-tooltip", u["tags-tag-list-tooltip"]), color: o }), children: e(a, { otherCount: s, nowrap: !0, className: n, color: o }) });
23
+ return o != null ? /* @__PURE__ */ c(C, { children: o }) : null;
24
+ const l = n != null && n > 0 ? n : null;
25
+ if (l == null)
26
+ return a(t, { className: i, color: s });
27
+ const e = t.slice(0, l), r = Math.max(0, t.length - l), h = t.some((T) => T.length > x), u = r > 0 || h, d = a(e, {
28
+ otherCount: r,
29
+ nowrap: u,
30
+ className: i,
31
+ color: s
32
+ });
33
+ return u ? /* @__PURE__ */ c(
34
+ N,
35
+ {
36
+ title: a(t, {
37
+ className: p("tags-tag-list-tooltip", m["tags-tag-list-tooltip"]),
38
+ color: s
39
+ }),
40
+ children: d
41
+ }
42
+ ) : d;
28
43
  };
29
44
  export {
30
- O as default
45
+ j as default
31
46
  };
32
47
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../src/components/Tag/Tags/index.tsx"],"sourcesContent":["import { Tooltip } from 'antd';\nimport React from 'react';\nimport SemanticTag, { SEMANTIC_COLORS, type SemanticColor } from '../SemanticTag';\nimport styles from './style.module.scss';\nimport classNames from 'classnames';\n\nexport interface TagsProps {\n /** 标签列表 */\n tags?: string[];\n /** 最多展示的标签数量;未传或 tags 数量未超出时展示全部 */\n showLength?: number;\n /** 无标签时的占位,传 null 则不渲染 */\n empty?: React.ReactNode;\n className?: string;\n /** 标签颜色,默认 INFO */\n color?: SemanticColor | string;\n}\n\nconst renderTags = (\n tagList: string[],\n options: {\n otherCount?: number;\n nowrap?: boolean;\n className?: string;\n color: SemanticColor | string;\n },\n) => {\n const { otherCount = 0, nowrap = false, className, color } = options;\n const layoutClass = nowrap ? classNames('tags-tag-list-nowrap', styles['tags-tag-list-nowrap']) : undefined;\n\n return (\n <div className={classNames('tags-tag-list', styles['tags-tag-list'], layoutClass, className)}>\n {tagList.map((tag) => (\n <SemanticTag key={tag} color={color}>\n {tag}\n </SemanticTag>\n ))}\n {otherCount > 0 && <SemanticTag color={color}>+{otherCount}</SemanticTag>}\n </div>\n );\n};\n\n/** 通用标签列表(SemanticTag + showLength 截断) */\nconst Tags: React.FC<TagsProps> = ({\n tags,\n showLength,\n empty = '-',\n className,\n color = SEMANTIC_COLORS.INFO,\n}) => {\n if (!tags?.length) {\n return empty != null ? <>{empty}</> : null;\n }\n\n const shouldTruncate = showLength != null && showLength > 0 && tags.length > showLength;\n\n if (!shouldTruncate) {\n return renderTags(tags, { className, color });\n }\n\n const visibleTags = tags.slice(0, showLength);\n const otherCount = tags.length - showLength;\n\n return (\n <Tooltip title={renderTags(tags, { className: classNames('tags-tag-list-tooltip', styles['tags-tag-list-tooltip']), color })}>\n {renderTags(visibleTags, { otherCount, nowrap: true, className, color })}\n </Tooltip>\n );\n};\n\nexport default Tags;\n"],"names":["renderTags","tagList","options","otherCount","nowrap","className","color","layoutClass","classNames","styles","jsxs","tag","jsx","SemanticTag","Tags","tags","showLength","empty","SEMANTIC_COLORS","Fragment","visibleTags","Tooltip"],"mappings":";;;;;AAkBA,MAAMA,IAAa,CACjBC,GACAC,MAMG;AACH,QAAM,EAAE,YAAAC,IAAa,GAAG,QAAAC,IAAS,IAAO,WAAAC,GAAW,OAAAC,MAAUJ,GACvDK,IAAcH,IAASI,EAAW,wBAAwBC,EAAO,sBAAsB,CAAC,IAAI;AAElG,SACE,gBAAAC,EAAC,OAAA,EAAI,WAAWF,EAAW,iBAAiBC,EAAO,eAAe,GAAGF,GAAaF,CAAS,GACxF,UAAA;AAAA,IAAAJ,EAAQ,IAAI,CAACU,MACZ,gBAAAC,EAACC,KAAsB,OAAAP,GACpB,UAAAK,EAAA,GADeA,CAElB,CACD;AAAA,IACAR,IAAa,KAAK,gBAAAO,EAACG,GAAA,EAAY,OAAAP,GAAc,UAAA;AAAA,MAAA;AAAA,MAAEH;AAAA,IAAA,EAAA,CAAW;AAAA,EAAA,GAC7D;AAEJ,GAGMW,IAA4B,CAAC;AAAA,EACjC,MAAAC;AAAA,EACA,YAAAC;AAAA,EACA,OAAAC,IAAQ;AAAA,EACR,WAAAZ;AAAA,EACA,OAAAC,IAAQY,EAAgB;AAC1B,MAAM;AACJ,MAAI,EAACH,KAAA,QAAAA,EAAM;AACT,WAAOE,KAAS,OAAO,gBAAAL,EAAAO,GAAA,EAAG,UAAAF,EAAA,CAAM,IAAM;AAKxC,MAAI,EAFmBD,KAAc,QAAQA,IAAa,KAAKD,EAAK,SAASC;AAG3E,WAAOhB,EAAWe,GAAM,EAAE,WAAAV,GAAW,OAAAC,GAAO;AAG9C,QAAMc,IAAcL,EAAK,MAAM,GAAGC,CAAU,GACtCb,IAAaY,EAAK,SAASC;AAEjC,SACE,gBAAAJ,EAACS,GAAA,EAAQ,OAAOrB,EAAWe,GAAM,EAAE,WAAWP,EAAW,yBAAyBC,EAAO,uBAAuB,CAAC,GAAG,OAAAH,EAAA,CAAO,GACxH,UAAAN,EAAWoB,GAAa,EAAE,YAAAjB,GAAY,QAAQ,IAAM,WAAAE,GAAW,OAAAC,EAAA,CAAO,EAAA,CACzE;AAEJ;"}
1
+ {"version":3,"file":"index.js","sources":["../../../../src/components/Tag/Tags/index.tsx"],"sourcesContent":["import { Tooltip } from 'antd';\nimport React from 'react';\nimport SemanticTag, { SEMANTIC_COLORS, type SemanticColor } from '../SemanticTag';\nimport styles from './style.module.scss';\nimport classNames from 'classnames';\n\n/** 单标签超过该字数时,即使未超出 showLength 也走紧凑+Tooltip,避免表格列溢出 */\nconst LONG_TAG_CHARS = 8;\n\nexport interface TagsProps {\n /** 标签列表 */\n tags?: string[];\n /** 最多展示的标签数量;未传或无效时展示全部 */\n showLength?: number;\n /** 无标签时的占位,传 null 则不渲染 */\n empty?: React.ReactNode;\n className?: string;\n /** 标签颜色,默认 INFO */\n color?: SemanticColor | string;\n}\n\nconst renderTags = (\n tagList: string[],\n options: {\n otherCount?: number;\n nowrap?: boolean;\n className?: string;\n color: SemanticColor | string;\n },\n) => {\n const { otherCount = 0, nowrap = false, className, color } = options;\n const layoutClass = nowrap\n ? classNames('tags-tag-list-nowrap', styles['tags-tag-list-nowrap'])\n : undefined;\n\n return (\n <div className={classNames('tags-tag-list', styles['tags-tag-list'], layoutClass, className)}>\n {tagList.map((tag) => (\n <SemanticTag key={tag} color={color}>\n {tag}\n </SemanticTag>\n ))}\n {otherCount > 0 && <SemanticTag color={color}>+{otherCount}</SemanticTag>}\n </div>\n );\n};\n\n/** 通用标签列表(SemanticTag + showLength 截断;长文案 ellipsis + hover 全量) */\nconst Tags: React.FC<TagsProps> = ({\n tags,\n showLength,\n empty = '-',\n className,\n color = SEMANTIC_COLORS.INFO,\n}) => {\n if (!tags?.length) {\n return empty != null ? <>{empty}</> : null;\n }\n\n const limit = showLength != null && showLength > 0 ? showLength : null;\n if (limit == null) {\n return renderTags(tags, { className, color });\n }\n\n const visibleTags = tags.slice(0, limit);\n const otherCount = Math.max(0, tags.length - limit);\n const hasLongTag = tags.some((t) => t.length > LONG_TAG_CHARS);\n const needsCompact = otherCount > 0 || hasLongTag;\n const visible = renderTags(visibleTags, {\n otherCount,\n nowrap: needsCompact,\n className,\n color,\n });\n\n if (!needsCompact) {\n return visible;\n }\n\n return (\n <Tooltip\n title={renderTags(tags, {\n className: classNames('tags-tag-list-tooltip', styles['tags-tag-list-tooltip']),\n color,\n })}\n >\n {visible}\n </Tooltip>\n );\n};\n\nexport default Tags;\n"],"names":["LONG_TAG_CHARS","renderTags","tagList","options","otherCount","nowrap","className","color","layoutClass","classNames","styles","jsxs","tag","jsx","SemanticTag","Tags","tags","showLength","empty","SEMANTIC_COLORS","Fragment","limit","visibleTags","hasLongTag","t","needsCompact","visible","Tooltip"],"mappings":";;;;;AAOA,MAAMA,IAAiB,GAcjBC,IAAa,CACjBC,GACAC,MAMG;AACH,QAAM,EAAE,YAAAC,IAAa,GAAG,QAAAC,IAAS,IAAO,WAAAC,GAAW,OAAAC,MAAUJ,GACvDK,IAAcH,IAChBI,EAAW,wBAAwBC,EAAO,sBAAsB,CAAC,IACjE;AAEJ,SACE,gBAAAC,EAAC,OAAA,EAAI,WAAWF,EAAW,iBAAiBC,EAAO,eAAe,GAAGF,GAAaF,CAAS,GACxF,UAAA;AAAA,IAAAJ,EAAQ,IAAI,CAACU,MACZ,gBAAAC,EAACC,KAAsB,OAAAP,GACpB,UAAAK,EAAA,GADeA,CAElB,CACD;AAAA,IACAR,IAAa,KAAK,gBAAAO,EAACG,GAAA,EAAY,OAAAP,GAAc,UAAA;AAAA,MAAA;AAAA,MAAEH;AAAA,IAAA,EAAA,CAAW;AAAA,EAAA,GAC7D;AAEJ,GAGMW,IAA4B,CAAC;AAAA,EACjC,MAAAC;AAAA,EACA,YAAAC;AAAA,EACA,OAAAC,IAAQ;AAAA,EACR,WAAAZ;AAAA,EACA,OAAAC,IAAQY,EAAgB;AAC1B,MAAM;AACJ,MAAI,EAACH,KAAA,QAAAA,EAAM;AACT,WAAOE,KAAS,OAAO,gBAAAL,EAAAO,GAAA,EAAG,UAAAF,EAAA,CAAM,IAAM;AAGxC,QAAMG,IAAQJ,KAAc,QAAQA,IAAa,IAAIA,IAAa;AAClE,MAAII,KAAS;AACX,WAAOpB,EAAWe,GAAM,EAAE,WAAAV,GAAW,OAAAC,GAAO;AAG9C,QAAMe,IAAcN,EAAK,MAAM,GAAGK,CAAK,GACjCjB,IAAa,KAAK,IAAI,GAAGY,EAAK,SAASK,CAAK,GAC5CE,IAAaP,EAAK,KAAK,CAACQ,MAAMA,EAAE,SAASxB,CAAc,GACvDyB,IAAerB,IAAa,KAAKmB,GACjCG,IAAUzB,EAAWqB,GAAa;AAAA,IACtC,YAAAlB;AAAA,IACA,QAAQqB;AAAA,IACR,WAAAnB;AAAA,IACA,OAAAC;AAAA,EAAA,CACD;AAED,SAAKkB,IAKH,gBAAAZ;AAAA,IAACc;AAAA,IAAA;AAAA,MACC,OAAO1B,EAAWe,GAAM;AAAA,QACtB,WAAWP,EAAW,yBAAyBC,EAAO,uBAAuB,CAAC;AAAA,QAC9E,OAAAH;AAAA,MAAA,CACD;AAAA,MAEA,UAAAmB;AAAA,IAAA;AAAA,EAAA,IAVIA;AAaX;"}
@@ -1,7 +1,7 @@
1
1
  const t = {
2
- "tags-tag-list": "_tags-tag-list_d5l57_1",
3
- "tags-tag-list-nowrap": "_tags-tag-list-nowrap_d5l57_8",
4
- "tags-tag-list-tooltip": "_tags-tag-list-tooltip_d5l57_12"
2
+ "tags-tag-list": "_tags-tag-list_y1jed_1",
3
+ "tags-tag-list-nowrap": "_tags-tag-list-nowrap_y1jed_9",
4
+ "tags-tag-list-tooltip": "_tags-tag-list-tooltip_y1jed_20"
5
5
  };
6
6
  export {
7
7
  t as default
@@ -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';
@@ -10,6 +10,7 @@ export * from './Modal';
10
10
  export * from './Permissions';
11
11
  export * from './OrgTree';
12
12
  export * from './StateBar';
13
+ export * from './SegmentedRadio';
13
14
  export * from './Stat';
14
15
  export * from './Table';
15
16
  export * from './Tag';
package/dist/index.d.ts CHANGED
@@ -36,6 +36,7 @@ export * from './components/Permissions';
36
36
  export * from './components/PermissionBindPanel';
37
37
  export * from './components/OrgTree';
38
38
  export * from './components/StateBar';
39
+ export * from './components/SegmentedRadio';
39
40
  export * from './components/Stat';
40
41
  export * from './components/Table';
41
42
  export * from './components/Tag';