@hkyhy/marsun-components-core 0.1.121 → 0.1.123

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 (26) hide show
  1. package/README.md +2 -0
  2. package/dist/components/InfoPage/Content/index.d.ts +8 -1
  3. package/dist/components/InfoPage/Content/index.js +103 -57
  4. package/dist/components/InfoPage/Content/index.js.map +1 -1
  5. package/dist/components/InfoPage/Content/style.module.scss.js +10 -8
  6. package/dist/components/InfoPage/Content/style.module.scss.js.map +1 -1
  7. package/dist/components/InfoPage/index.d.ts +13 -1
  8. package/dist/components/Tools/ActionTracking/List/ActionListTable.js +1 -1
  9. package/dist/components/Tools/ActionTracking/List/ActionListTable.js.map +1 -1
  10. package/dist/components/Tools/Inbox/InboxBell/InboxBell.d.ts +14 -3
  11. package/dist/components/Tools/Inbox/InboxBell/InboxBell.js +136 -95
  12. package/dist/components/Tools/Inbox/InboxBell/InboxBell.js.map +1 -1
  13. package/dist/components/Tools/Inbox/InboxBell/index.d.ts +1 -1
  14. package/dist/components/Tools/Inbox/InboxBell/style.module.scss.js +18 -16
  15. package/dist/components/Tools/Inbox/InboxBell/style.module.scss.js.map +1 -1
  16. package/dist/components/Tools/Inbox/index.d.ts +2 -1
  17. package/dist/components/Tools/Inbox/requestInboxBadgeRefresh.d.ts +9 -0
  18. package/dist/components/Tools/Inbox/requestInboxBadgeRefresh.js +15 -0
  19. package/dist/components/Tools/Inbox/requestInboxBadgeRefresh.js.map +1 -0
  20. package/dist/components/Tools/index.d.ts +2 -1
  21. package/dist/index.d.ts +1 -0
  22. package/dist/index.js +400 -396
  23. package/dist/index.js.map +1 -1
  24. package/dist/marsun-components-core.css +1 -1
  25. package/dist/styles/global.css +1 -1
  26. package/package.json +1 -1
package/README.md CHANGED
@@ -136,6 +136,8 @@ node scripts/version-check.mjs --apply # → 0.1.99
136
136
 
137
137
  也可在 Actions 中手动运行 **Publish npm**,填写已有 tag 重新发布。
138
138
 
139
+ - 2026-09-23:`v0.1.122` — ActionListTable 默认 scrollX 对齐长状态列(0.1.121 已发后补发)
140
+
139
141
  ## 后续接入 maoyang
140
142
 
141
143
  发布 npm 后,在 `maoyang_data-asset-system` 批量替换:
@@ -1,16 +1,23 @@
1
1
  import { default as React } from 'react';
2
+ export function buildStackFlexColumns(itemCount: any, minItemWidth?: number): {
3
+ width: number;
4
+ col: number;
5
+ }[];
2
6
  export function Label({ className, children, setWidth }: {
3
7
  className: any;
4
8
  children: any;
5
9
  setWidth: any;
6
10
  }): React.JSX.Element;
7
11
  export default Content;
8
- declare function Content({ list, labelAlign, col, gutter, className, size, itemRender, }: {
12
+ declare function Content({ list, labelAlign, col, gutter, className, size, layout, columns: columnsProp, minItemWidth, itemRender, }: {
9
13
  list?: never[] | undefined;
10
14
  labelAlign?: string | undefined;
11
15
  col?: number | undefined;
12
16
  gutter?: number | undefined;
13
17
  className: any;
14
18
  size: any;
19
+ layout?: string | undefined;
20
+ columns: any;
21
+ minItemWidth?: number | undefined;
15
22
  itemRender: any;
16
23
  }): React.JSX.Element;
@@ -1,72 +1,118 @@
1
- import { jsx as o, jsxs as y } from "react/jsx-runtime";
2
- import C, { useRef as d, useState as g, useLayoutEffect as j } from "react";
3
- import { Row as w, Col as z, Space as O } from "antd";
4
- import u from "classnames";
5
- import c from "./style.module.scss.js";
6
- const W = ({ className: s, children: l, setWidth: t }) => {
7
- const n = d(null), m = d(t);
8
- return m.current = t, j(() => {
9
- const a = () => {
10
- if (!n.current)
1
+ import { jsx as a, jsxs as k } from "react/jsx-runtime";
2
+ import E, { useRef as y, useState as F, useMemo as p, useLayoutEffect as W } from "react";
3
+ import { Row as _, Col as D, Space as K } from "antd";
4
+ import r from "classnames";
5
+ import e from "./style.module.scss.js";
6
+ import q from "../../FlexBox/FlexBox.js";
7
+ const A = (o, s = 140) => {
8
+ const n = Math.max(1, Number(o) || 1), c = [];
9
+ for (let l = 1; l <= n; l += 1)
10
+ c.push({ width: s * l, col: l });
11
+ return c;
12
+ }, G = ({ className: o, children: s, setWidth: n }) => {
13
+ const c = y(null), l = y(n);
14
+ return l.current = n, W(() => {
15
+ const m = () => {
16
+ if (!c.current)
11
17
  return;
12
- const { width: i } = n.current.getBoundingClientRect();
13
- t(i);
14
- }, r = new ResizeObserver(a);
15
- return r.observe(n.current), a(), () => {
16
- r.disconnect();
18
+ const { width: i } = c.current.getBoundingClientRect();
19
+ n(i);
20
+ }, d = new ResizeObserver(m);
21
+ return d.observe(c.current), m(), () => {
22
+ d.disconnect();
17
23
  };
18
- }, [t]), /* @__PURE__ */ y("div", { ref: n, className: s, children: [
19
- l,
24
+ }, [n]), /* @__PURE__ */ k("div", { ref: c, className: o, children: [
25
+ s,
20
26
  ":"
21
27
  ] });
22
- }, B = ({
23
- list: s = [],
24
- labelAlign: l = "left",
25
- col: t = 1,
26
- gutter: n = 0,
27
- className: m,
28
- size: a,
29
- itemRender: r
28
+ }, H = (o) => {
29
+ const { label: s, content: n } = o;
30
+ return /* @__PURE__ */ k("div", { className: r(e["item-stack"], "content-item"), children: [
31
+ s ? /* @__PURE__ */ a("div", { className: r(e.label, "content-label"), children: s }) : null,
32
+ /* @__PURE__ */ a("div", { className: r(e["content-content"], "content-content"), children: n })
33
+ ] });
34
+ }, Y = ({
35
+ list: o = [],
36
+ labelAlign: s = "left",
37
+ col: n = 1,
38
+ gutter: c = 0,
39
+ className: l,
40
+ size: m,
41
+ layout: d = "inline",
42
+ columns: i,
43
+ minItemWidth: v = 140,
44
+ itemRender: b
30
45
  }) => {
31
- const i = d([]), [p, v] = g(0);
32
- return /* @__PURE__ */ o(
33
- w,
46
+ const N = y([]), [x, C] = F(0), S = d === "stack", f = p(
47
+ () => (o || []).filter((t) => typeof t.display == "function" ? t.display(t, o) : t.display !== !1),
48
+ [o]
49
+ ), L = p(
50
+ () => f.map((t, u) => ({ ...t, key: u })),
51
+ [f]
52
+ ), w = p(() => i != null && i.length ? i : A(f.length, v), [i, f.length, v]);
53
+ return S ? /* @__PURE__ */ a(
54
+ "div",
55
+ {
56
+ "data-testid": "components-core-content",
57
+ "data-layout": d,
58
+ className: r(e.content, "content", l, {
59
+ [e["size-small"]]: m === "small",
60
+ [e["layout-stack"]]: !0
61
+ }),
62
+ children: /* @__PURE__ */ a(
63
+ q,
64
+ {
65
+ columns: w,
66
+ gutter: c || [16, 10],
67
+ dataSource: L,
68
+ rowKey: "key",
69
+ renderItem: (t, u) => {
70
+ const h = H(t);
71
+ return typeof b == "function" ? b(h, Object.assign({}, t, { index: u })) : h;
72
+ }
73
+ }
74
+ )
75
+ }
76
+ ) : /* @__PURE__ */ a(
77
+ _,
34
78
  {
35
79
  "data-testid": "components-core-content",
36
- className: u(c.content, "content", m, {
37
- [c["size-small"]]: a === "small"
80
+ "data-layout": d,
81
+ className: r(e.content, "content", l, {
82
+ [e["size-small"]]: m === "small"
38
83
  }),
39
- gutter: n,
40
- children: s.filter((e) => typeof e.display == "function" ? e.display(e, s) : e.display !== !1).map((e, f) => {
41
- const { label: h, content: N, block: R } = e, b = /* @__PURE__ */ o(z, { span: R === !0 ? 24 : 24 / t, className: c.item, children: /* @__PURE__ */ y(O, { className: u(c.item, "content-item"), children: [
42
- h ? /* @__PURE__ */ o(
43
- "div",
44
- {
45
- style: p && l !== "auto" ? {
46
- minWidth: p,
47
- textAlign: l
48
- } : null,
49
- children: /* @__PURE__ */ o(
50
- W,
51
- {
52
- className: u(c.label, "content-label"),
53
- setWidth: (L) => {
54
- i.current[f] = L, v(Math.max(...i.current));
55
- },
56
- children: h
57
- }
58
- )
59
- }
60
- ) : null,
61
- /* @__PURE__ */ o("div", { className: u(c["content-content"], "content-content"), children: N })
62
- ] }) }), x = typeof r == "function" ? r(b, Object.assign({}, e, { index: f })) : b;
63
- return C.cloneElement(x, { key: f });
84
+ gutter: c,
85
+ children: f.map((t, u) => {
86
+ const { label: h, content: j, block: M } = t, O = h ? /* @__PURE__ */ a(
87
+ "div",
88
+ {
89
+ style: x && s !== "auto" ? {
90
+ minWidth: x,
91
+ textAlign: s
92
+ } : null,
93
+ children: /* @__PURE__ */ a(
94
+ G,
95
+ {
96
+ className: r(e.label, "content-label"),
97
+ setWidth: (B) => {
98
+ N.current[u] = B, C(Math.max(...N.current));
99
+ },
100
+ children: h
101
+ }
102
+ )
103
+ }
104
+ ) : null, R = /* @__PURE__ */ a("div", { className: r(e["content-content"], "content-content"), children: j }), g = /* @__PURE__ */ a(D, { span: M === !0 ? 24 : 24 / n, className: e.item, children: /* @__PURE__ */ k(K, { className: r(e.item, "content-item"), children: [
105
+ O,
106
+ R
107
+ ] }) }), z = typeof b == "function" ? b(g, Object.assign({}, t, { index: u })) : g;
108
+ return E.cloneElement(z, { key: u });
64
109
  })
65
110
  }
66
111
  );
67
112
  };
68
113
  export {
69
- W as Label,
70
- B as default
114
+ G as Label,
115
+ A as buildStackFlexColumns,
116
+ Y as default
71
117
  };
72
118
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../src/components/InfoPage/Content/index.jsx"],"sourcesContent":["// @ts-nocheck\n// Ported from https://github.com/kne-union/info-page/blob/master/src/Content/index.js\nimport { useLayoutEffect, useRef, useState } from 'react';\nimport { Col, Row, Space } from 'antd';\nimport classnames from 'classnames';\nimport React from 'react';\n\nimport style from './style.module.scss';\n\nexport const Label = ({ className, children, setWidth }) => {\n const ref = useRef(null);\n const setWidthRef = useRef(setWidth);\n setWidthRef.current = setWidth;\n useLayoutEffect(() => {\n const computed = () => {\n if (!ref.current) {\n return;\n }\n const { width } = ref.current.getBoundingClientRect();\n setWidth(width);\n };\n const resizeObserver = new ResizeObserver(computed);\n resizeObserver.observe(ref.current);\n computed();\n return () => {\n resizeObserver.disconnect();\n };\n }, [setWidth]);\n return (\n <div ref={ref} className={className}>\n {children}:\n </div>\n );\n};\n\nconst Content = ({\n list = [],\n labelAlign = 'left',\n col = 1,\n gutter = 0,\n className,\n size,\n itemRender,\n}) => {\n const labelWidthListRef = useRef([]);\n const [maxLabelWidth, setMaxLabelWidth] = useState(0);\n return (\n <Row\n data-testid=\"components-core-content\"\n className={classnames(style['content'], 'content', className, {\n [style['size-small']]: size === 'small',\n })}\n gutter={gutter}\n >\n {list\n .filter((item) => {\n if (typeof item.display === 'function') {\n return item.display(item, list);\n }\n return item.display !== false;\n })\n .map((listItem, index) => {\n const { label, content, block } = listItem;\n const innerComponent = (\n <Col span={block === true ? 24 : 24 / col} className={style['item']}>\n <Space className={classnames(style['item'], 'content-item')}>\n {label ? (\n <div\n style={\n maxLabelWidth && labelAlign !== 'auto'\n ? {\n minWidth: maxLabelWidth,\n textAlign: labelAlign,\n }\n : null\n }\n >\n <Label\n className={classnames(style['label'], 'content-label')}\n setWidth={(width) => {\n labelWidthListRef.current[index] = width;\n setMaxLabelWidth(Math.max(...labelWidthListRef.current));\n }}\n >\n {label}\n </Label>\n </div>\n ) : null}\n <div className={classnames(style['content-content'], 'content-content')}>\n {content}\n </div>\n </Space>\n </Col>\n );\n const item =\n typeof itemRender === 'function'\n ? itemRender(innerComponent, Object.assign({}, listItem, { index }))\n : innerComponent;\n return React.cloneElement(item, { key: index });\n })}\n </Row>\n );\n};\n\nexport default Content;\n"],"names":["Label","className","children","setWidth","ref","useRef","setWidthRef","useLayoutEffect","computed","width","resizeObserver","jsxs","Content","list","labelAlign","col","gutter","size","itemRender","labelWidthListRef","maxLabelWidth","setMaxLabelWidth","useState","jsx","Row","classnames","style","item","listItem","index","label","content","block","innerComponent","Col","Space","React"],"mappings":";;;;;AASO,MAAMA,IAAQ,CAAC,EAAE,WAAAC,GAAW,UAAAC,GAAU,UAAAC,QAAe;AAC1D,QAAMC,IAAMC,EAAO,IAAI,GACjBC,IAAcD,EAAOF,CAAQ;AACnC,SAAAG,EAAY,UAAUH,GACtBI,EAAgB,MAAM;AACpB,UAAMC,IAAW,MAAM;AACrB,UAAI,CAACJ,EAAI;AACP;AAEF,YAAM,EAAE,OAAAK,EAAA,IAAUL,EAAI,QAAQ,sBAAA;AAC9B,MAAAD,EAASM,CAAK;AAAA,IAChB,GACMC,IAAiB,IAAI,eAAeF,CAAQ;AAClD,WAAAE,EAAe,QAAQN,EAAI,OAAO,GAClCI,EAAA,GACO,MAAM;AACX,MAAAE,EAAe,WAAA;AAAA,IACjB;AAAA,EACF,GAAG,CAACP,CAAQ,CAAC,GAEX,gBAAAQ,EAAC,OAAA,EAAI,KAAAP,GAAU,WAAAH,GACZ,UAAA;AAAA,IAAAC;AAAA,IAAS;AAAA,EAAA,GACZ;AAEJ,GAEMU,IAAU,CAAC;AAAA,EACf,MAAAC,IAAO,CAAA;AAAA,EACP,YAAAC,IAAa;AAAA,EACb,KAAAC,IAAM;AAAA,EACN,QAAAC,IAAS;AAAA,EACT,WAAAf;AAAA,EACA,MAAAgB;AAAA,EACA,YAAAC;AACF,MAAM;AACJ,QAAMC,IAAoBd,EAAO,EAAE,GAC7B,CAACe,GAAeC,CAAgB,IAAIC,EAAS,CAAC;AACpD,SACE,gBAAAC;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,eAAY;AAAA,MACZ,WAAWC,EAAWC,EAAM,SAAY,WAAWzB,GAAW;AAAA,QAC5D,CAACyB,EAAM,YAAY,CAAC,GAAGT,MAAS;AAAA,MAAA,CACjC;AAAA,MACD,QAAAD;AAAA,MAEC,UAAAH,EACE,OAAO,CAACc,MACH,OAAOA,EAAK,WAAY,aACnBA,EAAK,QAAQA,GAAMd,CAAI,IAEzBc,EAAK,YAAY,EACzB,EACA,IAAI,CAACC,GAAUC,MAAU;AACxB,cAAM,EAAE,OAAAC,GAAO,SAAAC,GAAS,OAAAC,EAAA,IAAUJ,GAC5BK,sBACHC,GAAA,EAAI,MAAMF,MAAU,KAAO,KAAK,KAAKjB,GAAK,WAAWW,EAAM,MAC1D,4BAACS,GAAA,EAAM,WAAWV,EAAWC,EAAM,MAAS,cAAc,GACvD,UAAA;AAAA,UAAAI,IACC,gBAAAP;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,OACEH,KAAiBN,MAAe,SAC5B;AAAA,gBACE,UAAUM;AAAA,gBACV,WAAWN;AAAA,cAAA,IAEb;AAAA,cAGN,UAAA,gBAAAS;AAAA,gBAACvB;AAAA,gBAAA;AAAA,kBACC,WAAWyB,EAAWC,EAAM,OAAU,eAAe;AAAA,kBACrD,UAAU,CAACjB,MAAU;AACnB,oBAAAU,EAAkB,QAAQU,CAAK,IAAIpB,GACnCY,EAAiB,KAAK,IAAI,GAAGF,EAAkB,OAAO,CAAC;AAAA,kBACzD;AAAA,kBAEC,UAAAW;AAAA,gBAAA;AAAA,cAAA;AAAA,YACH;AAAA,UAAA,IAEA;AAAA,UACJ,gBAAAP,EAAC,SAAI,WAAWE,EAAWC,EAAM,iBAAiB,GAAG,iBAAiB,GACnE,UAAAK,EAAA,CACH;AAAA,QAAA,EAAA,CACF,EAAA,CACF,GAEIJ,IACJ,OAAOT,KAAe,aAClBA,EAAWe,GAAgB,OAAO,OAAO,CAAA,GAAIL,GAAU,EAAE,OAAAC,EAAA,CAAO,CAAC,IACjEI;AACN,eAAOG,EAAM,aAAaT,GAAM,EAAE,KAAKE,GAAO;AAAA,MAChD,CAAC;AAAA,IAAA;AAAA,EAAA;AAGT;"}
1
+ {"version":3,"file":"index.js","sources":["../../../../src/components/InfoPage/Content/index.jsx"],"sourcesContent":["// @ts-nocheck\n// Ported from https://github.com/kne-union/info-page/blob/master/src/Content/index.js\n// Extended: layout=\"stack\" — label above value;栅格走 FlexBox,优先一行排满。\nimport { useLayoutEffect, useMemo, useRef, useState } from 'react';\nimport { Col, Row, Space } from 'antd';\nimport classnames from 'classnames';\nimport React from 'react';\nimport FlexBox from '../../FlexBox';\n\nimport style from './style.module.scss';\n\n/** 按条数生成 FlexBox columns:容器够宽时 col=条数 → 一行排完 */\nexport const buildStackFlexColumns = (itemCount, minItemWidth = 140) => {\n const capped = Math.max(1, Number(itemCount) || 1);\n const columns = [];\n for (let c = 1; c <= capped; c += 1) {\n columns.push({ width: minItemWidth * c, col: c });\n }\n return columns;\n};\n\nexport const Label = ({ className, children, setWidth }) => {\n const ref = useRef(null);\n const setWidthRef = useRef(setWidth);\n setWidthRef.current = setWidth;\n useLayoutEffect(() => {\n const computed = () => {\n if (!ref.current) {\n return;\n }\n const { width } = ref.current.getBoundingClientRect();\n setWidth(width);\n };\n const resizeObserver = new ResizeObserver(computed);\n resizeObserver.observe(ref.current);\n computed();\n return () => {\n resizeObserver.disconnect();\n };\n }, [setWidth]);\n return (\n <div ref={ref} className={className}>\n {children}:\n </div>\n );\n};\n\nconst renderStackCell = (listItem) => {\n const { label, content } = listItem;\n return (\n <div className={classnames(style['item-stack'], 'content-item')}>\n {label ? <div className={classnames(style['label'], 'content-label')}>{label}</div> : null}\n <div className={classnames(style['content-content'], 'content-content')}>{content}</div>\n </div>\n );\n};\n\nconst Content = ({\n list = [],\n labelAlign = 'left',\n col = 1,\n gutter = 0,\n className,\n size,\n layout = 'inline',\n columns: columnsProp,\n minItemWidth = 140,\n itemRender,\n}) => {\n const labelWidthListRef = useRef([]);\n const [maxLabelWidth, setMaxLabelWidth] = useState(0);\n const isStack = layout === 'stack';\n\n const visibleList = useMemo(\n () =>\n (list || []).filter((item) => {\n if (typeof item.display === 'function') {\n return item.display(item, list);\n }\n return item.display !== false;\n }),\n [list],\n );\n\n const stackDataSource = useMemo(\n () => visibleList.map((item, index) => ({ ...item, key: index })),\n [visibleList],\n );\n\n const stackColumns = useMemo(() => {\n if (columnsProp?.length) return columnsProp;\n // stack:按字段数自适应,够宽则一行排完(忽略 col,避免 col=3 把 5 项拆两行)\n return buildStackFlexColumns(visibleList.length, minItemWidth);\n }, [columnsProp, visibleList.length, minItemWidth]);\n\n if (isStack) {\n return (\n <div\n data-testid=\"components-core-content\"\n data-layout={layout}\n className={classnames(style['content'], 'content', className, {\n [style['size-small']]: size === 'small',\n [style['layout-stack']]: true,\n })}\n >\n <FlexBox\n columns={stackColumns}\n gutter={gutter || [16, 10]}\n dataSource={stackDataSource}\n rowKey=\"key\"\n renderItem={(listItem, index) => {\n const cell = renderStackCell(listItem);\n if (typeof itemRender === 'function') {\n return itemRender(cell, Object.assign({}, listItem, { index }));\n }\n return cell;\n }}\n />\n </div>\n );\n }\n\n return (\n <Row\n data-testid=\"components-core-content\"\n data-layout={layout}\n className={classnames(style['content'], 'content', className, {\n [style['size-small']]: size === 'small',\n })}\n gutter={gutter}\n >\n {visibleList.map((listItem, index) => {\n const { label, content, block } = listItem;\n const labelNode = label ? (\n <div\n style={\n maxLabelWidth && labelAlign !== 'auto'\n ? {\n minWidth: maxLabelWidth,\n textAlign: labelAlign,\n }\n : null\n }\n >\n <Label\n className={classnames(style['label'], 'content-label')}\n setWidth={(width) => {\n labelWidthListRef.current[index] = width;\n setMaxLabelWidth(Math.max(...labelWidthListRef.current));\n }}\n >\n {label}\n </Label>\n </div>\n ) : null;\n\n const valueNode = (\n <div className={classnames(style['content-content'], 'content-content')}>{content}</div>\n );\n\n const innerComponent = (\n <Col span={block === true ? 24 : 24 / col} className={style['item']}>\n <Space className={classnames(style['item'], 'content-item')}>\n {labelNode}\n {valueNode}\n </Space>\n </Col>\n );\n const item =\n typeof itemRender === 'function'\n ? itemRender(innerComponent, Object.assign({}, listItem, { index }))\n : innerComponent;\n return React.cloneElement(item, { key: index });\n })}\n </Row>\n );\n};\n\nexport default Content;\n"],"names":["buildStackFlexColumns","itemCount","minItemWidth","capped","columns","c","Label","className","children","setWidth","ref","useRef","setWidthRef","useLayoutEffect","computed","width","resizeObserver","jsxs","renderStackCell","listItem","label","content","classnames","style","jsx","Content","list","labelAlign","col","gutter","size","layout","columnsProp","itemRender","labelWidthListRef","maxLabelWidth","setMaxLabelWidth","useState","isStack","visibleList","useMemo","item","stackDataSource","index","stackColumns","FlexBox","cell","Row","block","labelNode","valueNode","innerComponent","Col","Space","React"],"mappings":"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"}
@@ -1,14 +1,16 @@
1
- const t = "_content_1av6n_2", n = "_label_1av6n_13", e = "_item_1av6n_21", _ = {
1
+ const t = "_content_15zdc_3", c = "_label_15zdc_14", _ = "_item_15zdc_24", e = {
2
2
  content: t,
3
- "size-small": "_size-small_1av6n_10",
4
- label: n,
5
- "content-content": "_content-content_1av6n_14",
6
- item: e
3
+ "size-small": "_size-small_15zdc_11",
4
+ label: c,
5
+ "content-content": "_content-content_15zdc_15",
6
+ "layout-stack": "_layout-stack_15zdc_24",
7
+ "item-stack": "_item-stack_15zdc_24",
8
+ item: _
7
9
  };
8
10
  export {
9
11
  t as content,
10
- _ as default,
11
- e as item,
12
- n as label
12
+ e as default,
13
+ _ as item,
14
+ c as label
13
15
  };
14
16
  //# 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":";;;;;;;;;"}
@@ -27,12 +27,24 @@ export interface ContentItem {
27
27
  display?: boolean | ((item: ContentItem, list: ContentItem[]) => boolean);
28
28
  }
29
29
 
30
+ export type ContentLayout = 'inline' | 'stack';
31
+
30
32
  export interface ContentProps extends BaseComponentProps {
31
33
  list?: ContentItem[];
32
34
  labelAlign?: 'left' | 'right' | 'auto';
35
+ /** inline 布局列数;stack 布局忽略(改用 FlexBox 按条数自适应一行排满) */
33
36
  col?: number;
34
- gutter?: number;
37
+ gutter?: number | [number, number];
35
38
  size?: 'small';
39
+ /**
40
+ * inline(默认):标签与值横排,标签后缀「:」
41
+ * stack:标签在上、值在下;内部 FlexBox,容器够宽时一行排完所有字段
42
+ */
43
+ layout?: ContentLayout;
44
+ /** stack 时覆盖 FlexBox columns;默认按 list.length × minItemWidth 生成 */
45
+ columns?: Array<{ width: number; col: number; size?: number }>;
46
+ /** stack 单项最小宽度(px),默认 140 */
47
+ minItemWidth?: number;
36
48
  itemRender?: (component: ReactNode, item: ContentItem & { index: number }) => ReactNode;
37
49
  }
38
50
 
@@ -16,7 +16,7 @@ function W({
16
16
  tableName: p,
17
17
  fetchColumnConfig: d,
18
18
  saveColumnConfig: f,
19
- scrollX: h = 1560,
19
+ scrollX: h = 1608,
20
20
  emptyText: b = "暂无跟踪任务,可点击「新建任务」主动添加",
21
21
  emptyIcon: u,
22
22
  className: x,
@@ -1 +1 @@
1
- {"version":3,"file":"ActionListTable.js","sources":["../../../../../src/components/Tools/ActionTracking/List/ActionListTable.tsx"],"sourcesContent":["import { Table } from '../../../Table';\nimport type { TableColumnConfigFetcher, TableColumnConfigSaver } from '../../../Table';\nimport { VirtualScrollbar } from '../../../VirtualScrollbar';\nimport { ListTodo } from '../../../Icons';\nimport { Space } from 'antd';\nimport classNames from 'classnames';\nimport type { ReactNode } from 'react';\nimport type { ActionListColumns, ActionListRowBase } from './listTypes';\nimport styles from './ActionListTable.module.scss';\n\nexport type ActionListTableProps<T extends ActionListRowBase = ActionListRowBase> = {\n loading: boolean;\n items: T[];\n columns: ActionListColumns<T> | never[];\n total: number;\n currentPage: number;\n pageSize: number;\n onPageChange: (page: number, pageSize: number) => void;\n /** 业务列表必填;列配置偏好 key */\n tableName: string;\n fetchColumnConfig?: TableColumnConfigFetcher;\n saveColumnConfig?: TableColumnConfigSaver;\n scrollX?: number;\n emptyText?: ReactNode;\n emptyIcon?: ReactNode;\n className?: string;\n wrapperClassName?: string;\n pageSizeOptions?: string[];\n /** antd Table components(如列宽拖拽) */\n components?: React.ComponentProps<typeof Table>['components'];\n};\n\n/**\n * 行动列表 Table 壳:VirtualScrollbar + core Table;列与行操作由 App 注入。\n */\nfunction ActionListTable<T extends ActionListRowBase>({\n loading,\n items,\n columns,\n total,\n currentPage,\n pageSize,\n onPageChange,\n tableName,\n fetchColumnConfig,\n saveColumnConfig,\n scrollX = 1560,\n emptyText = '暂无跟踪任务,可点击「新建任务」主动添加',\n emptyIcon,\n className,\n wrapperClassName,\n pageSizeOptions = ['10', '20', '30', '50', '100'],\n components,\n}: ActionListTableProps<T>) {\n return (\n <VirtualScrollbar\n className={classNames(\n 'action-list-table-scroll',\n styles['action-list-table-scroll'],\n className,\n )}\n wrapperClassName={classNames(\n 'action-list-table-card',\n styles['action-list-table-card'],\n wrapperClassName,\n )}\n >\n <Table<T>\n size=\"small\"\n rowKey={(r) => r.id}\n loading={loading}\n columns={columns as never}\n dataSource={items}\n scroll={{ x: scrollX }}\n tableName={tableName}\n fetchColumnConfig={fetchColumnConfig}\n saveColumnConfig={saveColumnConfig}\n components={components}\n pagination={{\n current: currentPage,\n pageSize,\n total,\n showSizeChanger: true,\n pageSizeOptions,\n showTotal: (n) => `共 ${n} 条`,\n onChange: onPageChange,\n }}\n locale={{\n emptyText: (\n <Space direction=\"vertical\" align=\"center\">\n {emptyIcon ?? <ListTodo size={28} strokeWidth={1.5} />}\n <span>{emptyText}</span>\n </Space>\n ),\n }}\n />\n </VirtualScrollbar>\n );\n}\n\nexport default ActionListTable;\n"],"names":["ActionListTable","loading","items","columns","total","currentPage","pageSize","onPageChange","tableName","fetchColumnConfig","saveColumnConfig","scrollX","emptyText","emptyIcon","className","wrapperClassName","pageSizeOptions","components","jsx","VirtualScrollbar","classNames","styles","Table","r","n","jsxs","Space","ListTodo"],"mappings":";;;;;;;AAmCA,SAASA,EAA6C;AAAA,EACpD,SAAAC;AAAA,EACA,OAAAC;AAAA,EACA,SAAAC;AAAA,EACA,OAAAC;AAAA,EACA,aAAAC;AAAA,EACA,UAAAC;AAAA,EACA,cAAAC;AAAA,EACA,WAAAC;AAAA,EACA,mBAAAC;AAAA,EACA,kBAAAC;AAAA,EACA,SAAAC,IAAU;AAAA,EACV,WAAAC,IAAY;AAAA,EACZ,WAAAC;AAAA,EACA,WAAAC;AAAA,EACA,kBAAAC;AAAA,EACA,iBAAAC,IAAkB,CAAC,MAAM,MAAM,MAAM,MAAM,KAAK;AAAA,EAChD,YAAAC;AACF,GAA4B;AAC1B,SACE,gBAAAC;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,WAAWC;AAAA,QACT;AAAA,QACAC,EAAO,0BAA0B;AAAA,QACjCP;AAAA,MAAA;AAAA,MAEF,kBAAkBM;AAAA,QAChB;AAAA,QACAC,EAAO,wBAAwB;AAAA,QAC/BN;AAAA,MAAA;AAAA,MAGF,UAAA,gBAAAG;AAAA,QAACI;AAAA,QAAA;AAAA,UACC,MAAK;AAAA,UACL,QAAQ,CAACC,MAAMA,EAAE;AAAA,UACjB,SAAAtB;AAAA,UACA,SAAAE;AAAA,UACA,YAAYD;AAAA,UACZ,QAAQ,EAAE,GAAGS,EAAA;AAAA,UACb,WAAAH;AAAA,UACA,mBAAAC;AAAA,UACA,kBAAAC;AAAA,UACA,YAAAO;AAAA,UACA,YAAY;AAAA,YACV,SAASZ;AAAA,YACT,UAAAC;AAAA,YACA,OAAAF;AAAA,YACA,iBAAiB;AAAA,YACjB,iBAAAY;AAAA,YACA,WAAW,CAACQ,MAAM,KAAKA,CAAC;AAAA,YACxB,UAAUjB;AAAA,UAAA;AAAA,UAEZ,QAAQ;AAAA,YACN,WACE,gBAAAkB,EAACC,GAAA,EAAM,WAAU,YAAW,OAAM,UAC/B,UAAA;AAAA,cAAAb,KAAa,gBAAAK,EAACS,GAAA,EAAS,MAAM,IAAI,aAAa,KAAK;AAAA,cACpD,gBAAAT,EAAC,UAAM,UAAAN,EAAA,CAAU;AAAA,YAAA,EAAA,CACnB;AAAA,UAAA;AAAA,QAEJ;AAAA,MAAA;AAAA,IACF;AAAA,EAAA;AAGN;"}
1
+ {"version":3,"file":"ActionListTable.js","sources":["../../../../../src/components/Tools/ActionTracking/List/ActionListTable.tsx"],"sourcesContent":["import { Table } from '../../../Table';\nimport type { TableColumnConfigFetcher, TableColumnConfigSaver } from '../../../Table';\nimport { VirtualScrollbar } from '../../../VirtualScrollbar';\nimport { ListTodo } from '../../../Icons';\nimport { Space } from 'antd';\nimport classNames from 'classnames';\nimport type { ReactNode } from 'react';\nimport type { ActionListColumns, ActionListRowBase } from './listTypes';\nimport styles from './ActionListTable.module.scss';\n\nexport type ActionListTableProps<T extends ActionListRowBase = ActionListRowBase> = {\n loading: boolean;\n items: T[];\n columns: ActionListColumns<T> | never[];\n total: number;\n currentPage: number;\n pageSize: number;\n onPageChange: (page: number, pageSize: number) => void;\n /** 业务列表必填;列配置偏好 key */\n tableName: string;\n fetchColumnConfig?: TableColumnConfigFetcher;\n saveColumnConfig?: TableColumnConfigSaver;\n scrollX?: number;\n emptyText?: ReactNode;\n emptyIcon?: ReactNode;\n className?: string;\n wrapperClassName?: string;\n pageSizeOptions?: string[];\n /** antd Table components(如列宽拖拽) */\n components?: React.ComponentProps<typeof Table>['components'];\n};\n\n/**\n * 行动列表 Table 壳:VirtualScrollbar + core Table;列与行操作由 App 注入。\n */\nfunction ActionListTable<T extends ActionListRowBase>({\n loading,\n items,\n columns,\n total,\n currentPage,\n pageSize,\n onPageChange,\n tableName,\n fetchColumnConfig,\n saveColumnConfig,\n scrollX = 1608,\n emptyText = '暂无跟踪任务,可点击「新建任务」主动添加',\n emptyIcon,\n className,\n wrapperClassName,\n pageSizeOptions = ['10', '20', '30', '50', '100'],\n components,\n}: ActionListTableProps<T>) {\n return (\n <VirtualScrollbar\n className={classNames(\n 'action-list-table-scroll',\n styles['action-list-table-scroll'],\n className,\n )}\n wrapperClassName={classNames(\n 'action-list-table-card',\n styles['action-list-table-card'],\n wrapperClassName,\n )}\n >\n <Table<T>\n size=\"small\"\n rowKey={(r) => r.id}\n loading={loading}\n columns={columns as never}\n dataSource={items}\n scroll={{ x: scrollX }}\n tableName={tableName}\n fetchColumnConfig={fetchColumnConfig}\n saveColumnConfig={saveColumnConfig}\n components={components}\n pagination={{\n current: currentPage,\n pageSize,\n total,\n showSizeChanger: true,\n pageSizeOptions,\n showTotal: (n) => `共 ${n} 条`,\n onChange: onPageChange,\n }}\n locale={{\n emptyText: (\n <Space direction=\"vertical\" align=\"center\">\n {emptyIcon ?? <ListTodo size={28} strokeWidth={1.5} />}\n <span>{emptyText}</span>\n </Space>\n ),\n }}\n />\n </VirtualScrollbar>\n );\n}\n\nexport default ActionListTable;\n"],"names":["ActionListTable","loading","items","columns","total","currentPage","pageSize","onPageChange","tableName","fetchColumnConfig","saveColumnConfig","scrollX","emptyText","emptyIcon","className","wrapperClassName","pageSizeOptions","components","jsx","VirtualScrollbar","classNames","styles","Table","r","n","jsxs","Space","ListTodo"],"mappings":";;;;;;;AAmCA,SAASA,EAA6C;AAAA,EACpD,SAAAC;AAAA,EACA,OAAAC;AAAA,EACA,SAAAC;AAAA,EACA,OAAAC;AAAA,EACA,aAAAC;AAAA,EACA,UAAAC;AAAA,EACA,cAAAC;AAAA,EACA,WAAAC;AAAA,EACA,mBAAAC;AAAA,EACA,kBAAAC;AAAA,EACA,SAAAC,IAAU;AAAA,EACV,WAAAC,IAAY;AAAA,EACZ,WAAAC;AAAA,EACA,WAAAC;AAAA,EACA,kBAAAC;AAAA,EACA,iBAAAC,IAAkB,CAAC,MAAM,MAAM,MAAM,MAAM,KAAK;AAAA,EAChD,YAAAC;AACF,GAA4B;AAC1B,SACE,gBAAAC;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,WAAWC;AAAA,QACT;AAAA,QACAC,EAAO,0BAA0B;AAAA,QACjCP;AAAA,MAAA;AAAA,MAEF,kBAAkBM;AAAA,QAChB;AAAA,QACAC,EAAO,wBAAwB;AAAA,QAC/BN;AAAA,MAAA;AAAA,MAGF,UAAA,gBAAAG;AAAA,QAACI;AAAA,QAAA;AAAA,UACC,MAAK;AAAA,UACL,QAAQ,CAACC,MAAMA,EAAE;AAAA,UACjB,SAAAtB;AAAA,UACA,SAAAE;AAAA,UACA,YAAYD;AAAA,UACZ,QAAQ,EAAE,GAAGS,EAAA;AAAA,UACb,WAAAH;AAAA,UACA,mBAAAC;AAAA,UACA,kBAAAC;AAAA,UACA,YAAAO;AAAA,UACA,YAAY;AAAA,YACV,SAASZ;AAAA,YACT,UAAAC;AAAA,YACA,OAAAF;AAAA,YACA,iBAAiB;AAAA,YACjB,iBAAAY;AAAA,YACA,WAAW,CAACQ,MAAM,KAAKA,CAAC;AAAA,YACxB,UAAUjB;AAAA,UAAA;AAAA,UAEZ,QAAQ;AAAA,YACN,WACE,gBAAAkB,EAACC,GAAA,EAAM,WAAU,YAAW,OAAM,UAC/B,UAAA;AAAA,cAAAb,KAAa,gBAAAK,EAACS,GAAA,EAAS,MAAM,IAAI,aAAa,KAAK;AAAA,cACpD,gBAAAT,EAAC,UAAM,UAAAN,EAAA,CAAU;AAAA,YAAA,EAAA,CACnB;AAAA,UAAA;AAAA,QAEJ;AAAA,MAAA;AAAA,IACF;AAAA,EAAA;AAGN;"}
@@ -1,4 +1,3 @@
1
- import { default as React } from 'react';
2
1
  export type InboxBellMessageType = 'alert' | 'action' | 'remind' | string;
3
2
  export type InboxBellItem = {
4
3
  id: string;
@@ -33,16 +32,28 @@ export type InboxBellProps = {
33
32
  markRead: (id: string) => Promise<void | InboxBellItem>;
34
33
  /** 点击条目:默认用 window.location / 业务 navigate */
35
34
  onNavigate?: (href: string, item: InboxBellItem) => void;
36
- /** 轮询未读角标(ms);≤0 关闭 */
35
+ /**
36
+ * 轮询未读角标(ms)。默认 `0`(关定时);`>0` 才 setInterval。
37
+ * 角标另由:挂载首刷、`locationKey`、focus/visibility、`requestInboxBadgeRefresh` 触发。
38
+ */
37
39
  pollMs?: number;
40
+ /**
41
+ * 路由/页面身份;变化时刷新角标(如 React Router `location.pathname`)。
42
+ * 整页加载靠挂载首刷,不必另传。
43
+ */
44
+ locationKey?: string | number;
38
45
  pageSize?: number;
39
46
  className?: string;
40
47
  /** Drawer 标题 */
41
48
  title?: string;
42
49
  };
50
+ export type InboxBellHandle = {
51
+ refreshBadge: () => Promise<void>;
52
+ };
43
53
  /**
44
54
  * 通用站内信铃铛:列表 / 已读 / Tab / 角标。
45
55
  * 不含认领、行动等业务动作;由注入的 fetchInbox / markRead / onNavigate 对接消息服务。
56
+ * 默认不定时轮询;有消息侧靠业务回调 / 路由 / 焦点再拉角标(真·SSE push 他窗)。
46
57
  */
47
- declare const InboxBell: React.FC<InboxBellProps>;
58
+ declare const InboxBell: import('react').ForwardRefExoticComponent<InboxBellProps & import('react').RefAttributes<InboxBellHandle>>;
48
59
  export default InboxBell;