@creekjs/web-components 1.0.5 → 1.0.7

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 (162) hide show
  1. package/.turbo/turbo-father$colon$build.log +32 -16
  2. package/README.md +117 -66
  3. package/dist/creek-config-provider/CreekConfigContext.d.ts +4 -0
  4. package/dist/creek-config-provider/CreekConfigContext.js.map +2 -2
  5. package/dist/creek-config-provider/CreekI18nProvider.d.ts +22 -0
  6. package/dist/creek-config-provider/CreekI18nProvider.js +92 -0
  7. package/dist/creek-config-provider/CreekI18nProvider.js.map +7 -0
  8. package/dist/creek-config-provider/index.d.ts +5 -3
  9. package/dist/creek-config-provider/index.js +47 -4
  10. package/dist/creek-config-provider/index.js.map +3 -3
  11. package/dist/creek-hooks/useApp/index.d.ts +3 -3
  12. package/dist/creek-keep-alive/index.d.ts +24 -1
  13. package/dist/creek-keep-alive/index.js +141 -4
  14. package/dist/creek-keep-alive/index.js.map +2 -2
  15. package/dist/creek-layout/ActionRender/FullScreen.js +3 -1
  16. package/dist/creek-layout/ActionRender/FullScreen.js.map +2 -2
  17. package/dist/creek-layout/ActionRender/LayoutSettings.d.ts +5 -0
  18. package/dist/creek-layout/ActionRender/LayoutSettings.js +73 -0
  19. package/dist/creek-layout/ActionRender/LayoutSettings.js.map +7 -0
  20. package/dist/creek-layout/ActionRender/UserInfo.js.map +2 -2
  21. package/dist/creek-layout/ActionRender/index.d.ts +1 -0
  22. package/dist/creek-layout/ActionRender/index.js +3 -0
  23. package/dist/creek-layout/ActionRender/index.js.map +2 -2
  24. package/dist/creek-layout/index.d.ts +5 -5
  25. package/dist/creek-layout/index.js +79 -16
  26. package/dist/creek-layout/index.js.map +3 -3
  27. package/dist/creek-layout/useLayoutSettingsStore.d.ts +20 -0
  28. package/dist/creek-layout/useLayoutSettingsStore.js +45 -0
  29. package/dist/creek-layout/useLayoutSettingsStore.js.map +7 -0
  30. package/dist/creek-locale-button/index.d.ts +1 -0
  31. package/dist/creek-locale-button/index.js +66 -0
  32. package/dist/creek-locale-button/index.js.map +7 -0
  33. package/dist/creek-page-container/index.d.ts +4 -0
  34. package/dist/creek-page-container/index.js +68 -0
  35. package/dist/creek-page-container/index.js.map +7 -0
  36. package/dist/creek-style/index.d.ts +1 -0
  37. package/dist/creek-style/index.js +24 -0
  38. package/dist/creek-style/index.js.map +7 -0
  39. package/dist/creek-style/scrollbar.d.ts +2 -0
  40. package/dist/creek-style/scrollbar.js +55 -0
  41. package/dist/creek-style/scrollbar.js.map +7 -0
  42. package/dist/creek-table/SearchTable.d.ts +9 -0
  43. package/dist/creek-table/SearchTable.js +109 -72
  44. package/dist/creek-table/SearchTable.js.map +3 -3
  45. package/dist/creek-table/components/DensityIcon.d.ts +9 -0
  46. package/dist/creek-table/components/DensityIcon.js +77 -0
  47. package/dist/creek-table/components/DensityIcon.js.map +7 -0
  48. package/dist/creek-table/components/EllipsisTooltip.d.ts +9 -0
  49. package/dist/creek-table/components/EllipsisTooltip.js +122 -0
  50. package/dist/creek-table/components/EllipsisTooltip.js.map +7 -0
  51. package/dist/creek-table/components/index.d.ts +2 -0
  52. package/dist/creek-table/components/index.js +26 -0
  53. package/dist/creek-table/components/index.js.map +7 -0
  54. package/dist/creek-table/hooks/index.d.ts +5 -0
  55. package/dist/creek-table/hooks/index.js +10 -0
  56. package/dist/creek-table/hooks/index.js.map +2 -2
  57. package/dist/creek-table/hooks/useAutoWidthColumns.d.ts +1 -1
  58. package/dist/creek-table/hooks/useAutoWidthColumns.js +76 -17
  59. package/dist/creek-table/hooks/useAutoWidthColumns.js.map +2 -2
  60. package/dist/creek-table/hooks/useEllipsisColumns.d.ts +8 -0
  61. package/dist/creek-table/hooks/useEllipsisColumns.js +58 -0
  62. package/dist/creek-table/hooks/useEllipsisColumns.js.map +7 -0
  63. package/dist/creek-table/hooks/useIndexColumn.d.ts +2 -0
  64. package/dist/creek-table/hooks/useIndexColumn.js +52 -0
  65. package/dist/creek-table/hooks/useIndexColumn.js.map +7 -0
  66. package/dist/creek-table/hooks/useResizableColumns.d.ts +20 -0
  67. package/dist/creek-table/hooks/useResizableColumns.js +279 -0
  68. package/dist/creek-table/hooks/useResizableColumns.js.map +7 -0
  69. package/dist/creek-table/hooks/useStatusColumns.d.ts +2 -0
  70. package/dist/creek-table/hooks/useStatusColumns.js +215 -0
  71. package/dist/creek-table/hooks/useStatusColumns.js.map +7 -0
  72. package/dist/creek-table/hooks/useTableOptions.d.ts +15 -0
  73. package/dist/creek-table/hooks/useTableOptions.js +78 -0
  74. package/dist/creek-table/hooks/useTableOptions.js.map +7 -0
  75. package/dist/creek-table/hooks/useTableScrollHeight.d.ts +6 -1
  76. package/dist/creek-table/hooks/useTableScrollHeight.js +44 -5
  77. package/dist/creek-table/hooks/useTableScrollHeight.js.map +2 -2
  78. package/dist/creek-table/type.d.ts +4 -6
  79. package/dist/creek-table/type.js.map +1 -1
  80. package/dist/index.d.ts +4 -0
  81. package/dist/index.js +8 -0
  82. package/dist/index.js.map +2 -2
  83. package/dist/locales/en-US.d.ts +25 -0
  84. package/dist/locales/en-US.js +49 -0
  85. package/dist/locales/en-US.js.map +7 -0
  86. package/dist/locales/zh-CN.d.ts +25 -0
  87. package/dist/locales/zh-CN.js +49 -0
  88. package/dist/locales/zh-CN.js.map +7 -0
  89. package/dist/utils/i18n.d.ts +2 -0
  90. package/dist/utils/i18n.js +34 -0
  91. package/dist/utils/i18n.js.map +7 -0
  92. package/i18n.config.ts +27 -0
  93. package/package.json +22 -8
  94. package/src/creek-config-provider/CreekConfigContext.tsx +5 -1
  95. package/src/creek-config-provider/CreekI18nProvider.tsx +87 -0
  96. package/src/creek-config-provider/index.tsx +53 -4
  97. package/src/creek-keep-alive/index.tsx +225 -6
  98. package/src/creek-layout/ActionRender/FullScreen.tsx +10 -6
  99. package/src/creek-layout/ActionRender/LayoutSettings.tsx +67 -0
  100. package/src/creek-layout/ActionRender/UserInfo.tsx +1 -1
  101. package/src/creek-layout/ActionRender/index.tsx +1 -0
  102. package/src/creek-layout/index.tsx +89 -22
  103. package/src/creek-layout/useLayoutSettingsStore.ts +25 -0
  104. package/src/creek-locale-button/index.tsx +42 -0
  105. package/src/creek-page-container/index.tsx +32 -0
  106. package/src/creek-style/index.ts +1 -0
  107. package/src/creek-style/scrollbar.ts +29 -0
  108. package/src/creek-table/SearchTable.tsx +125 -72
  109. package/src/creek-table/components/DensityIcon.tsx +63 -0
  110. package/src/creek-table/components/EllipsisTooltip.tsx +116 -0
  111. package/src/creek-table/components/index.tsx +3 -0
  112. package/src/creek-table/hooks/index.ts +5 -1
  113. package/src/creek-table/hooks/useAutoWidthColumns.tsx +93 -19
  114. package/src/creek-table/hooks/useEllipsisColumns.tsx +47 -0
  115. package/src/creek-table/hooks/useIndexColumn.tsx +27 -0
  116. package/src/creek-table/hooks/useResizableColumns.tsx +323 -0
  117. package/src/creek-table/hooks/useStatusColumns.tsx +252 -0
  118. package/src/creek-table/hooks/useTableOptions.tsx +81 -0
  119. package/src/creek-table/hooks/useTableScrollHeight.tsx +61 -6
  120. package/src/creek-table/type.ts +5 -7
  121. package/src/index.tsx +4 -0
  122. package/src/locales/en-US.ts +24 -0
  123. package/src/locales/zh-CN.ts +24 -0
  124. package/src/utils/i18n.ts +4 -0
  125. package/dist/creek-config-provider/CreekConfigContext.d.ts.map +0 -1
  126. package/dist/creek-config-provider/index.d.ts.map +0 -1
  127. package/dist/creek-hooks/index.d.ts.map +0 -1
  128. package/dist/creek-hooks/useApp/DrawerHelper.d.ts.map +0 -1
  129. package/dist/creek-hooks/useApp/ModalHelper.d.ts.map +0 -1
  130. package/dist/creek-hooks/useApp/index.d.ts.map +0 -1
  131. package/dist/creek-hooks/useApp/types.d.ts.map +0 -1
  132. package/dist/creek-hooks/useViewportHeight.d.ts.map +0 -1
  133. package/dist/creek-icon/index.d.ts.map +0 -1
  134. package/dist/creek-keep-alive/index.d.ts.map +0 -1
  135. package/dist/creek-layout/ActionRender/FullScreen.d.ts.map +0 -1
  136. package/dist/creek-layout/ActionRender/UserInfo.d.ts.map +0 -1
  137. package/dist/creek-layout/ActionRender/index.d.ts.map +0 -1
  138. package/dist/creek-layout/CollapseButton.d.ts.map +0 -1
  139. package/dist/creek-layout/Exception/NotFound.d.ts.map +0 -1
  140. package/dist/creek-layout/Exception/NotFoundPage.d.ts.map +0 -1
  141. package/dist/creek-layout/Exception/index.d.ts.map +0 -1
  142. package/dist/creek-layout/index.d.ts.map +0 -1
  143. package/dist/creek-loading/index.d.ts.map +0 -1
  144. package/dist/creek-table/SearchTable.d.ts.map +0 -1
  145. package/dist/creek-table/TableOptionRender.d.ts +0 -9
  146. package/dist/creek-table/TableOptionRender.d.ts.map +0 -1
  147. package/dist/creek-table/TableOptionRender.js +0 -74
  148. package/dist/creek-table/TableOptionRender.js.map +0 -7
  149. package/dist/creek-table/hooks/index.d.ts.map +0 -1
  150. package/dist/creek-table/hooks/useAdaptiveToolBar.d.ts.map +0 -1
  151. package/dist/creek-table/hooks/useAutoWidthColumns.d.ts.map +0 -1
  152. package/dist/creek-table/hooks/useElementDistance.d.ts.map +0 -1
  153. package/dist/creek-table/hooks/useTableScrollHeight.d.ts.map +0 -1
  154. package/dist/creek-table/index.d.ts.map +0 -1
  155. package/dist/creek-table/toolBarRender.d.ts +0 -5
  156. package/dist/creek-table/toolBarRender.d.ts.map +0 -1
  157. package/dist/creek-table/toolBarRender.js +0 -58
  158. package/dist/creek-table/toolBarRender.js.map +0 -7
  159. package/dist/creek-table/type.d.ts.map +0 -1
  160. package/dist/index.d.ts.map +0 -1
  161. package/src/creek-table/TableOptionRender.tsx +0 -57
  162. package/src/creek-table/toolBarRender.tsx +0 -28
@@ -0,0 +1,77 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __export = (target, all) => {
6
+ for (var name in all)
7
+ __defProp(target, name, { get: all[name], enumerable: true });
8
+ };
9
+ var __copyProps = (to, from, except, desc) => {
10
+ if (from && typeof from === "object" || typeof from === "function") {
11
+ for (let key of __getOwnPropNames(from))
12
+ if (!__hasOwnProp.call(to, key) && key !== except)
13
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
14
+ }
15
+ return to;
16
+ };
17
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
18
+
19
+ // src/creek-table/components/DensityIcon.tsx
20
+ var DensityIcon_exports = {};
21
+ __export(DensityIcon_exports, {
22
+ DensityIcon: () => DensityIcon
23
+ });
24
+ module.exports = __toCommonJS(DensityIcon_exports);
25
+ var import_icons = require("@ant-design/icons");
26
+ var import_antd = require("antd");
27
+ var import_i18n = require("../../utils/i18n");
28
+ var import_jsx_runtime = require("react/jsx-runtime");
29
+ var DensityIcon = ({ tableSize, setTableSize }) => {
30
+ const t = (0, import_i18n.useT)();
31
+ const items = [
32
+ {
33
+ key: "large",
34
+ label: t("creek-table.components.DensityIcon.kuanSong", "宽松"),
35
+ onClick: () => setTableSize("large")
36
+ },
37
+ {
38
+ key: "middle",
39
+ label: t("creek-table.components.DensityIcon.zhongDeng", "中等"),
40
+ onClick: () => setTableSize("middle")
41
+ },
42
+ {
43
+ key: "small",
44
+ label: t("creek-table.components.DensityIcon.jinCou", "紧凑"),
45
+ onClick: () => setTableSize("small")
46
+ }
47
+ ];
48
+ const getTitle = () => {
49
+ switch (tableSize) {
50
+ case "large":
51
+ return t("creek-table.components.DensityIcon.biaoGeMiDu(KuanSong)", "表格密度 (宽松)");
52
+ case "middle":
53
+ return t("creek-table.components.DensityIcon.biaoGeMiDu(ZhongDeng)", "表格密度 (中等)");
54
+ case "small":
55
+ return t("creek-table.components.DensityIcon.biaoGeMiDu(JinCou)", "表格密度 (紧凑)");
56
+ default:
57
+ return t("creek-table.components.DensityIcon.biaoGeMiDu", "表格密度");
58
+ }
59
+ };
60
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
61
+ import_antd.Dropdown,
62
+ {
63
+ menu: {
64
+ items,
65
+ selectedKeys: [tableSize || "large"],
66
+ selectable: true
67
+ },
68
+ trigger: ["click"],
69
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_antd.Tooltip, { title: getTitle(), children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_icons.ColumnHeightOutlined, { style: { fontSize: 16, cursor: "pointer" } }) })
70
+ }
71
+ );
72
+ };
73
+ // Annotate the CommonJS export names for ESM import in node:
74
+ 0 && (module.exports = {
75
+ DensityIcon
76
+ });
77
+ //# sourceMappingURL=DensityIcon.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/creek-table/components/DensityIcon.tsx"],
4
+ "sourcesContent": ["import { ColumnHeightOutlined } from '@ant-design/icons';\nimport { ProTableProps } from '@ant-design/pro-components';\nimport { Dropdown, MenuProps, Tooltip } from 'antd';\nimport React from 'react';\n\nimport { useT } from '@/utils/i18n';\n\nexport type SizeType = ProTableProps<any, any>['size'];\n\ninterface DensityIconProps {\n tableSize: SizeType;\n setTableSize: (size: SizeType) => void;\n}\n\nexport const DensityIcon: React.FC<DensityIconProps> = ({ tableSize, setTableSize }) => {\n const t = useT();\n\n const items: MenuProps['items'] = [\n {\n key: 'large',\n label: t('creek-table.components.DensityIcon.kuanSong', '宽松'),\n onClick: () => setTableSize('large'),\n },\n {\n key: 'middle',\n label: t('creek-table.components.DensityIcon.zhongDeng', '中等'),\n onClick: () => setTableSize('middle'),\n },\n {\n key: 'small',\n label: t('creek-table.components.DensityIcon.jinCou', '紧凑'),\n onClick: () => setTableSize('small'),\n },\n ];\n\n const getTitle = () => {\n switch (tableSize) {\n case 'large':\n return t('creek-table.components.DensityIcon.biaoGeMiDu(KuanSong)', '表格密度 (宽松)');\n case 'middle':\n return t('creek-table.components.DensityIcon.biaoGeMiDu(ZhongDeng)', '表格密度 (中等)');\n case 'small':\n return t('creek-table.components.DensityIcon.biaoGeMiDu(JinCou)', '表格密度 (紧凑)');\n default:\n return t('creek-table.components.DensityIcon.biaoGeMiDu', '表格密度');\n }\n };\n\n return (\n <Dropdown\n menu={{\n items,\n selectedKeys: [tableSize || 'large'],\n selectable: true,\n }}\n trigger={['click']}\n >\n <Tooltip title={getTitle()}>\n <ColumnHeightOutlined style={{ fontSize: 16, cursor: 'pointer' }} />\n </Tooltip>\n </Dropdown>\n );\n};\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAAqC;AAErC,kBAA6C;AAG7C,kBAAqB;AAqDb;AA5CD,IAAM,cAA0C,CAAC,EAAE,WAAW,aAAa,MAAM;AACtF,QAAM,QAAI,kBAAK;AAEf,QAAM,QAA4B;AAAA,IAChC;AAAA,MACE,KAAK;AAAA,MACL,OAAO,EAAE,+CAA+C,IAAI;AAAA,MAC5D,SAAS,MAAM,aAAa,OAAO;AAAA,IACrC;AAAA,IACA;AAAA,MACE,KAAK;AAAA,MACL,OAAO,EAAE,gDAAgD,IAAI;AAAA,MAC7D,SAAS,MAAM,aAAa,QAAQ;AAAA,IACtC;AAAA,IACA;AAAA,MACE,KAAK;AAAA,MACL,OAAO,EAAE,6CAA6C,IAAI;AAAA,MAC1D,SAAS,MAAM,aAAa,OAAO;AAAA,IACrC;AAAA,EACF;AAEA,QAAM,WAAW,MAAM;AACrB,YAAQ,WAAW;AAAA,MACjB,KAAK;AACH,eAAO,EAAE,2DAA2D,WAAW;AAAA,MACjF,KAAK;AACH,eAAO,EAAE,4DAA4D,WAAW;AAAA,MAClF,KAAK;AACH,eAAO,EAAE,yDAAyD,WAAW;AAAA,MAC/E;AACE,eAAO,EAAE,iDAAiD,MAAM;AAAA,IACpE;AAAA,EACF;AAEA,SACE;AAAA,IAAC;AAAA;AAAA,MACC,MAAM;AAAA,QACJ;AAAA,QACA,cAAc,CAAC,aAAa,OAAO;AAAA,QACnC,YAAY;AAAA,MACd;AAAA,MACA,SAAS,CAAC,OAAO;AAAA,MAEjB,sDAAC,uBAAQ,OAAO,SAAS,GACvB,sDAAC,qCAAqB,OAAO,EAAE,UAAU,IAAI,QAAQ,UAAU,GAAG,GACpE;AAAA;AAAA,EACF;AAEJ;",
6
+ "names": []
7
+ }
@@ -0,0 +1,9 @@
1
+ import React from 'react';
2
+ /**
3
+ * 使用 Antd Typography 组件实现省略提示
4
+ * 修复了 findDOMNode 警告问题:通过显式使用 Tooltip 包裹 div 容器
5
+ * 实现了智能提示:只有内容实际溢出时才显示 Tooltip
6
+ */
7
+ export declare const EllipsisTooltip: ({ children }: {
8
+ children: React.ReactNode;
9
+ }) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,122 @@
1
+ var __create = Object.create;
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __getProtoOf = Object.getPrototypeOf;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __export = (target, all) => {
8
+ for (var name in all)
9
+ __defProp(target, name, { get: all[name], enumerable: true });
10
+ };
11
+ var __copyProps = (to, from, except, desc) => {
12
+ if (from && typeof from === "object" || typeof from === "function") {
13
+ for (let key of __getOwnPropNames(from))
14
+ if (!__hasOwnProp.call(to, key) && key !== except)
15
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
16
+ }
17
+ return to;
18
+ };
19
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
20
+ // If the importer is in node compatibility mode or this is not an ESM
21
+ // file that has been converted to a CommonJS file using a Babel-
22
+ // compatible transform (i.e. "__esModule" has not been set), then set
23
+ // "default" to the CommonJS "module.exports" for node compatibility.
24
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
25
+ mod
26
+ ));
27
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
28
+
29
+ // src/creek-table/components/EllipsisTooltip.tsx
30
+ var EllipsisTooltip_exports = {};
31
+ __export(EllipsisTooltip_exports, {
32
+ EllipsisTooltip: () => EllipsisTooltip
33
+ });
34
+ module.exports = __toCommonJS(EllipsisTooltip_exports);
35
+ var import_icons = require("@ant-design/icons");
36
+ var import_antd = require("antd");
37
+ var import_antd_style = require("antd-style");
38
+ var import_react = __toESM(require("react"));
39
+ var import_i18n = require("../../utils/i18n");
40
+ var import_jsx_runtime = require("react/jsx-runtime");
41
+ var useStyles = (0, import_antd_style.createStyles)(({ css, token }) => {
42
+ return {
43
+ text: css`
44
+ width: 100%;
45
+ margin: 0;
46
+ padding: 0;
47
+ // Ensure the wrapper behaves like a block/inline-block that can have width
48
+ display: block;
49
+ overflow: hidden;
50
+ `,
51
+ tooltipContent: css`
52
+ max-width: 500px;
53
+ max-height: 300px;
54
+ overflow-y: auto;
55
+ `,
56
+ tooltipText: css`
57
+ word-break: break-all;
58
+ white-space: pre-wrap;
59
+ `,
60
+ copyIcon: css`
61
+ cursor: pointer;
62
+ color: inherit;
63
+ transition: color 0.2s;
64
+
65
+ &:hover {
66
+ color: ${token.colorPrimary};
67
+ }
68
+ `
69
+ };
70
+ });
71
+ var EllipsisTooltip = ({ children }) => {
72
+ const t = (0, import_i18n.useT)();
73
+ const { styles } = useStyles();
74
+ const { getPrefixCls } = (0, import_react.useContext)(import_antd.ConfigProvider.ConfigContext);
75
+ const textRef = (0, import_react.useRef)(null);
76
+ const [isEllipsis, setIsEllipsis] = (0, import_react.useState)(false);
77
+ const isSimpleContent = typeof children === "string" || typeof children === "number";
78
+ (0, import_react.useEffect)(() => {
79
+ const checkEllipsis = () => {
80
+ if (textRef.current) {
81
+ const prefixCls = getPrefixCls("typography");
82
+ const typographyEl = textRef.current.querySelector(`.${prefixCls}`);
83
+ if (typographyEl) {
84
+ setIsEllipsis(typographyEl.scrollWidth > typographyEl.clientWidth + 1);
85
+ }
86
+ }
87
+ };
88
+ checkEllipsis();
89
+ const observer = new ResizeObserver(checkEllipsis);
90
+ if (textRef.current) {
91
+ observer.observe(textRef.current);
92
+ }
93
+ return () => {
94
+ observer.disconnect();
95
+ };
96
+ }, [children]);
97
+ const text = String(children);
98
+ const handleCopy = (e) => {
99
+ e.stopPropagation();
100
+ e.preventDefault();
101
+ navigator.clipboard.writeText(text).then(() => {
102
+ import_antd.message.success(t("creek-table.components.EllipsisTooltip.fuZhiChengGong", "复制成功"));
103
+ }).catch(() => {
104
+ import_antd.message.error(t("creek-table.components.EllipsisTooltip.fuZhiShiBai", "复制失败"));
105
+ });
106
+ };
107
+ const tooltipTitle = import_react.default.useMemo(() => {
108
+ if (!isSimpleContent) {
109
+ return children;
110
+ }
111
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_antd.Flex, { align: "center", gap: 8, className: styles.tooltipContent, children: [
112
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: styles.tooltipText, children }),
113
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_icons.CopyOutlined, { onClick: handleCopy, className: styles.copyIcon, title: t("creek-table.components.EllipsisTooltip.fuZhi", "复制") })
114
+ ] });
115
+ }, [children, isSimpleContent]);
116
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_antd.Tooltip, { title: isEllipsis ? tooltipTitle : void 0, placement: "topLeft", mouseLeaveDelay: 0.2, getPopupContainer: () => document.body, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { ref: textRef, className: styles.text, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_antd.Typography.Text, { ellipsis: true, children }) }) });
117
+ };
118
+ // Annotate the CommonJS export names for ESM import in node:
119
+ 0 && (module.exports = {
120
+ EllipsisTooltip
121
+ });
122
+ //# sourceMappingURL=EllipsisTooltip.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/creek-table/components/EllipsisTooltip.tsx"],
4
+ "sourcesContent": ["import { CopyOutlined } from '@ant-design/icons';\nimport { ConfigProvider, Flex, Tooltip, Typography, message } from 'antd';\nimport { createStyles } from 'antd-style';\nimport React, { useContext, useEffect, useRef, useState } from 'react';\n\nimport { useT } from '@/utils/i18n';\n\nconst useStyles = createStyles(({ css, token }) => {\n return {\n text: css`\n width: 100%;\n margin: 0;\n padding: 0;\n // Ensure the wrapper behaves like a block/inline-block that can have width\n display: block;\n overflow: hidden;\n `,\n tooltipContent: css`\n max-width: 500px;\n max-height: 300px;\n overflow-y: auto;\n `,\n tooltipText: css`\n word-break: break-all;\n white-space: pre-wrap;\n `,\n copyIcon: css`\n cursor: pointer;\n color: inherit;\n transition: color 0.2s;\n\n &:hover {\n color: ${token.colorPrimary};\n }\n `,\n };\n});\n\n/**\n * 使用 Antd Typography 组件实现省略提示\n * 修复了 findDOMNode 警告问题:通过显式使用 Tooltip 包裹 div 容器\n * 实现了智能提示:只有内容实际溢出时才显示 Tooltip\n */\nexport const EllipsisTooltip = ({ children }: { children: React.ReactNode }) => {\n const t = useT();\n\n const { styles } = useStyles();\n const { getPrefixCls } = useContext(ConfigProvider.ConfigContext);\n const textRef = useRef<HTMLDivElement>(null);\n const [isEllipsis, setIsEllipsis] = useState(false);\n const isSimpleContent = typeof children === 'string' || typeof children === 'number';\n\n useEffect(() => {\n const checkEllipsis = () => {\n if (textRef.current) {\n const prefixCls = getPrefixCls('typography');\n // Typography.Text renders a span or div with .ant-typography\n const typographyEl = textRef.current.querySelector(`.${prefixCls}`);\n if (typographyEl) {\n // For simple ellipsis={true}, Antd uses CSS ellipsis.\n // We can detect if it's truncated by comparing scrollWidth and clientWidth\n // We add a small buffer (1px) for browser sub-pixel rendering differences\n setIsEllipsis(typographyEl.scrollWidth > typographyEl.clientWidth + 1);\n }\n }\n };\n\n // Initial check\n checkEllipsis();\n // Use ResizeObserver for more robust size change detection\n const observer = new ResizeObserver(checkEllipsis);\n if (textRef.current) {\n observer.observe(textRef.current);\n }\n\n return () => {\n observer.disconnect();\n };\n }, [children]);\n\n const text = String(children);\n\n const handleCopy = (e: React.MouseEvent) => {\n e.stopPropagation();\n e.preventDefault();\n navigator.clipboard\n .writeText(text)\n .then(() => {\n message.success(t('creek-table.components.EllipsisTooltip.fuZhiChengGong', '复制成功'));\n })\n .catch(() => {\n message.error(t('creek-table.components.EllipsisTooltip.fuZhiShiBai', '复制失败'));\n });\n };\n\n // Memoize tooltip title content\n const tooltipTitle = React.useMemo(() => {\n if (!isSimpleContent) {\n return children;\n }\n return (\n <Flex align=\"center\" gap={8} className={styles.tooltipContent}>\n <span className={styles.tooltipText}>{children}</span>\n <CopyOutlined onClick={handleCopy} className={styles.copyIcon} title={t('creek-table.components.EllipsisTooltip.fuZhi', '复制')} />\n </Flex>\n );\n }, [children, isSimpleContent]);\n\n return (\n <Tooltip title={isEllipsis ? tooltipTitle : undefined} placement=\"topLeft\" mouseLeaveDelay={0.2} getPopupContainer={() => document.body}>\n <div ref={textRef} className={styles.text}>\n <Typography.Text ellipsis={true}>{children}</Typography.Text>\n </div>\n </Tooltip>\n );\n};\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAA6B;AAC7B,kBAAmE;AACnE,wBAA6B;AAC7B,mBAA+D;AAE/D,kBAAqB;AAgGf;AA9FN,IAAM,gBAAY,gCAAa,CAAC,EAAE,KAAK,MAAM,MAAM;AACjD,SAAO;AAAA,IACL,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQN,gBAAgB;AAAA;AAAA;AAAA;AAAA;AAAA,IAKhB,aAAa;AAAA;AAAA;AAAA;AAAA,IAIb,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iBAMG,MAAM;AAAA;AAAA;AAAA,EAGrB;AACF,CAAC;AAOM,IAAM,kBAAkB,CAAC,EAAE,SAAS,MAAqC;AAC9E,QAAM,QAAI,kBAAK;AAEf,QAAM,EAAE,OAAO,IAAI,UAAU;AAC7B,QAAM,EAAE,aAAa,QAAI,yBAAW,2BAAe,aAAa;AAChE,QAAM,cAAU,qBAAuB,IAAI;AAC3C,QAAM,CAAC,YAAY,aAAa,QAAI,uBAAS,KAAK;AAClD,QAAM,kBAAkB,OAAO,aAAa,YAAY,OAAO,aAAa;AAE5E,8BAAU,MAAM;AACd,UAAM,gBAAgB,MAAM;AAC1B,UAAI,QAAQ,SAAS;AACnB,cAAM,YAAY,aAAa,YAAY;AAE3C,cAAM,eAAe,QAAQ,QAAQ,cAAc,IAAI,WAAW;AAClE,YAAI,cAAc;AAIhB,wBAAc,aAAa,cAAc,aAAa,cAAc,CAAC;AAAA,QACvE;AAAA,MACF;AAAA,IACF;AAGA,kBAAc;AAEd,UAAM,WAAW,IAAI,eAAe,aAAa;AACjD,QAAI,QAAQ,SAAS;AACnB,eAAS,QAAQ,QAAQ,OAAO;AAAA,IAClC;AAEA,WAAO,MAAM;AACX,eAAS,WAAW;AAAA,IACtB;AAAA,EACF,GAAG,CAAC,QAAQ,CAAC;AAEb,QAAM,OAAO,OAAO,QAAQ;AAE5B,QAAM,aAAa,CAAC,MAAwB;AAC1C,MAAE,gBAAgB;AAClB,MAAE,eAAe;AACjB,cAAU,UACP,UAAU,IAAI,EACd,KAAK,MAAM;AACV,0BAAQ,QAAQ,EAAE,yDAAyD,MAAM,CAAC;AAAA,IACpF,CAAC,EACA,MAAM,MAAM;AACX,0BAAQ,MAAM,EAAE,sDAAsD,MAAM,CAAC;AAAA,IAC/E,CAAC;AAAA,EACL;AAGA,QAAM,eAAe,aAAAA,QAAM,QAAQ,MAAM;AACvC,QAAI,CAAC,iBAAiB;AACpB,aAAO;AAAA,IACT;AACA,WACE,6CAAC,oBAAK,OAAM,UAAS,KAAK,GAAG,WAAW,OAAO,gBAC7C;AAAA,kDAAC,UAAK,WAAW,OAAO,aAAc,UAAS;AAAA,MAC/C,4CAAC,6BAAa,SAAS,YAAY,WAAW,OAAO,UAAU,OAAO,EAAE,gDAAgD,IAAI,GAAG;AAAA,OACjI;AAAA,EAEJ,GAAG,CAAC,UAAU,eAAe,CAAC;AAE9B,SACE,4CAAC,uBAAQ,OAAO,aAAa,eAAe,QAAW,WAAU,WAAU,iBAAiB,KAAK,mBAAmB,MAAM,SAAS,MACjI,sDAAC,SAAI,KAAK,SAAS,WAAW,OAAO,MACnC,sDAAC,uBAAW,MAAX,EAAgB,UAAU,MAAO,UAAS,GAC7C,GACF;AAEJ;",
6
+ "names": ["React"]
7
+ }
@@ -0,0 +1,2 @@
1
+ export * from './DensityIcon';
2
+ export * from './EllipsisTooltip';
@@ -0,0 +1,26 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __copyProps = (to, from, except, desc) => {
6
+ if (from && typeof from === "object" || typeof from === "function") {
7
+ for (let key of __getOwnPropNames(from))
8
+ if (!__hasOwnProp.call(to, key) && key !== except)
9
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
10
+ }
11
+ return to;
12
+ };
13
+ var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
14
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
15
+
16
+ // src/creek-table/components/index.tsx
17
+ var components_exports = {};
18
+ module.exports = __toCommonJS(components_exports);
19
+ __reExport(components_exports, require("./DensityIcon"), module.exports);
20
+ __reExport(components_exports, require("./EllipsisTooltip"), module.exports);
21
+ // Annotate the CommonJS export names for ESM import in node:
22
+ 0 && (module.exports = {
23
+ ...require("./DensityIcon"),
24
+ ...require("./EllipsisTooltip")
25
+ });
26
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/creek-table/components/index.tsx"],
4
+ "sourcesContent": ["export * from './DensityIcon';\nexport * from './EllipsisTooltip';\n\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;AAAA;AAAA;AAAA,+BAAc,0BAAd;AACA,+BAAc,8BADd;",
6
+ "names": []
7
+ }
@@ -1,4 +1,9 @@
1
1
  export * from './useAdaptiveToolBar';
2
2
  export * from './useAutoWidthColumns';
3
3
  export * from './useElementDistance';
4
+ export * from './useEllipsisColumns';
5
+ export * from './useIndexColumn';
6
+ export * from './useResizableColumns';
7
+ export * from './useStatusColumns';
8
+ export * from './useTableOptions';
4
9
  export * from './useTableScrollHeight';
@@ -19,12 +19,22 @@ module.exports = __toCommonJS(hooks_exports);
19
19
  __reExport(hooks_exports, require("./useAdaptiveToolBar"), module.exports);
20
20
  __reExport(hooks_exports, require("./useAutoWidthColumns"), module.exports);
21
21
  __reExport(hooks_exports, require("./useElementDistance"), module.exports);
22
+ __reExport(hooks_exports, require("./useEllipsisColumns"), module.exports);
23
+ __reExport(hooks_exports, require("./useIndexColumn"), module.exports);
24
+ __reExport(hooks_exports, require("./useResizableColumns"), module.exports);
25
+ __reExport(hooks_exports, require("./useStatusColumns"), module.exports);
26
+ __reExport(hooks_exports, require("./useTableOptions"), module.exports);
22
27
  __reExport(hooks_exports, require("./useTableScrollHeight"), module.exports);
23
28
  // Annotate the CommonJS export names for ESM import in node:
24
29
  0 && (module.exports = {
25
30
  ...require("./useAdaptiveToolBar"),
26
31
  ...require("./useAutoWidthColumns"),
27
32
  ...require("./useElementDistance"),
33
+ ...require("./useEllipsisColumns"),
34
+ ...require("./useIndexColumn"),
35
+ ...require("./useResizableColumns"),
36
+ ...require("./useStatusColumns"),
37
+ ...require("./useTableOptions"),
28
38
  ...require("./useTableScrollHeight")
29
39
  });
30
40
  //# sourceMappingURL=index.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/creek-table/hooks/index.ts"],
4
- "sourcesContent": ["export * from './useAdaptiveToolBar';\nexport * from './useAutoWidthColumns';\nexport * from './useElementDistance';\nexport * from './useTableScrollHeight';\n\n\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;AAAA;AAAA;AAAA,0BAAc,iCAAd;AACA,0BAAc,kCADd;AAEA,0BAAc,iCAFd;AAGA,0BAAc,mCAHd;",
4
+ "sourcesContent": ["export * from './useAdaptiveToolBar';\nexport * from './useAutoWidthColumns';\nexport * from './useElementDistance';\nexport * from './useEllipsisColumns';\nexport * from './useIndexColumn';\nexport * from './useResizableColumns';\nexport * from './useStatusColumns';\nexport * from './useTableOptions';\nexport * from './useTableScrollHeight';\n\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;AAAA;AAAA;AAAA,0BAAc,iCAAd;AACA,0BAAc,kCADd;AAEA,0BAAc,iCAFd;AAGA,0BAAc,iCAHd;AAIA,0BAAc,6BAJd;AAKA,0BAAc,kCALd;AAMA,0BAAc,+BANd;AAOA,0BAAc,8BAPd;AAQA,0BAAc,mCARd;",
6
6
  "names": []
7
7
  }
@@ -1,6 +1,6 @@
1
1
  import { ProColumns } from '@ant-design/pro-components';
2
2
  import { RefObject } from 'react';
3
- export declare const useAutoWidthColumns: <T, ValueType>(columns: ProColumns<T, ValueType>[] | undefined, tableRef: RefObject<HTMLDivElement>) => {
3
+ export declare const useAutoWidthColumns: <T, ValueType>(columns: ProColumns<T, ValueType>[] | undefined, tableRef: RefObject<HTMLDivElement>, resizedWidths?: Record<string, number>, bordered?: boolean, size?: 'large' | 'middle' | 'small' | 'medium') => {
4
4
  columns: ProColumns<T, ValueType>[] | undefined;
5
5
  totalWidth: number | undefined;
6
6
  };
@@ -26,8 +26,9 @@ var import_ahooks = require("ahooks");
26
26
  var import_antd = require("antd");
27
27
  var import_react = require("react");
28
28
  var import_jsx_runtime = require("react/jsx-runtime");
29
- var DEFAULT_PADDING_WIDTH = 16;
30
- var estimateWidth = (text) => {
29
+ var DEFAULT_PADDING_WIDTH_SMALL = 16;
30
+ var DEFAULT_PADDING_WIDTH_LARGE = 24;
31
+ var estimateWidth = (text, padding) => {
31
32
  let width = 0;
32
33
  for (const char of text) {
33
34
  if (/[\u4e00-\u9fa5]/.test(char)) {
@@ -36,7 +37,7 @@ var estimateWidth = (text) => {
36
37
  width += 8;
37
38
  }
38
39
  }
39
- return width + DEFAULT_PADDING_WIDTH;
40
+ return width + padding;
40
41
  };
41
42
  var getValueTypeWidth = (valueType) => {
42
43
  switch (valueType) {
@@ -70,7 +71,8 @@ var MeasureWrapper = ({ children, onResize }) => {
70
71
  onResize(ref.current.offsetWidth);
71
72
  const observer = new ResizeObserver((entries) => {
72
73
  for (const entry of entries) {
73
- onResize(entry.target.offsetWidth);
74
+ const width = entry.target.scrollWidth;
75
+ onResize(width);
74
76
  }
75
77
  });
76
78
  observer.observe(ref.current);
@@ -78,18 +80,40 @@ var MeasureWrapper = ({ children, onResize }) => {
78
80
  observer.disconnect();
79
81
  };
80
82
  }, []);
81
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_antd.Space, { ref, children });
83
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
84
+ "div",
85
+ {
86
+ ref,
87
+ style: {
88
+ display: "inline-block",
89
+ whiteSpace: "nowrap",
90
+ width: "max-content",
91
+ // 确保宽度由内容决定
92
+ minWidth: "min-content"
93
+ },
94
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_antd.Space, { children })
95
+ }
96
+ );
82
97
  };
83
- var useAutoWidthColumns = (columns, tableRef) => {
98
+ var useAutoWidthColumns = (columns, tableRef, resizedWidths, bordered, size) => {
84
99
  const [columnWidths, setColumnWidths] = (0, import_react.useState)({});
85
- const [tableWidth, setTableWidth] = (0, import_react.useState)(0);
100
+ const [tableWidth, setTableWidth] = (0, import_react.useState)(() => {
101
+ if (tableRef.current) {
102
+ return tableRef.current.offsetWidth;
103
+ }
104
+ return 0;
105
+ });
86
106
  (0, import_react.useEffect)(() => {
87
107
  if (!tableRef.current)
88
108
  return;
89
- setTableWidth(tableRef.current.offsetWidth);
109
+ if (tableWidth === 0) {
110
+ setTableWidth(tableRef.current.offsetWidth);
111
+ }
90
112
  let rafId;
91
113
  let timerId;
92
114
  const updateWidth = (width) => {
115
+ if (width === 0)
116
+ return;
93
117
  cancelAnimationFrame(rafId);
94
118
  clearTimeout(timerId);
95
119
  rafId = requestAnimationFrame(() => {
@@ -130,26 +154,39 @@ var useAutoWidthColumns = (columns, tableRef) => {
130
154
  if (!columns)
131
155
  return { columns: void 0, totalWidth: void 0 };
132
156
  const calculatedColumns = columns.map((col, index) => {
133
- const colKey = col.dataIndex || col.key || `col-${index}`;
157
+ const colKey = col.key || col.dataIndex || `col-${index}`;
134
158
  const measuredWidth = columnWidths[colKey];
135
- let width;
159
+ let padding = DEFAULT_PADDING_WIDTH_SMALL;
160
+ if (size === "large") {
161
+ padding = DEFAULT_PADDING_WIDTH_LARGE;
162
+ }
163
+ let baseWidth;
136
164
  if (col.width) {
137
- width = typeof col.width === "number" ? col.width : 100;
165
+ baseWidth = typeof col.width === "number" ? col.width : 100;
138
166
  } else if (col.valueType === "option" && measuredWidth) {
139
- width = measuredWidth + DEFAULT_PADDING_WIDTH;
167
+ const extraPadding = bordered ? 4 : 0;
168
+ baseWidth = measuredWidth + padding + extraPadding;
140
169
  } else {
141
- width = Math.max(estimateWidth(col.title), getValueTypeWidth(col.valueType));
170
+ baseWidth = Math.max(estimateWidth(col.title, padding), getValueTypeWidth(col.valueType));
171
+ }
172
+ let width = baseWidth;
173
+ if (resizedWidths && resizedWidths[colKey]) {
174
+ width = resizedWidths[colKey];
142
175
  }
143
176
  return {
144
177
  ...col,
145
178
  _calculatedWidth: width,
179
+ _baseWidth: baseWidth,
180
+ // 新增 _baseWidth 用于后续 minWidth 限制
146
181
  _colKey: colKey
147
182
  };
148
183
  });
149
184
  const totalCalculatedWidth = calculatedColumns.reduce((acc, col) => acc + col._calculatedWidth, 0);
150
- const isOverflow = totalCalculatedWidth > tableWidth;
185
+ const hasResized = resizedWidths && Object.keys(resizedWidths).length > 0;
186
+ const isOverflow = totalCalculatedWidth > tableWidth || hasResized;
187
+ const shouldForceWidth = totalCalculatedWidth > tableWidth;
151
188
  const processedColumns = calculatedColumns.map((col) => {
152
- const { _calculatedWidth, _colKey, ...originalCol } = col;
189
+ const { _calculatedWidth, _baseWidth, _colKey, ...originalCol } = col;
153
190
  if (col.valueType === "option") {
154
191
  const originalRender = col.render;
155
192
  return {
@@ -167,14 +204,36 @@ var useAutoWidthColumns = (columns, tableRef) => {
167
204
  ...originalCol,
168
205
  // 只有当内容溢出(需要滚动)或者手动设置了宽度时,才应用计算出的宽度
169
206
  // 否则不设置 width,让 Antd Table 自动布局占满剩余空间
170
- width: isOverflow || col.width ? _calculatedWidth : void 0
207
+ width: shouldForceWidth || col.width || resizedWidths && resizedWidths[_colKey] ? _calculatedWidth : void 0,
208
+ // 添加 calculatedWidth 以供后续 useResizableColumns 使用,这里使用 _baseWidth (即不受 resize 影响的宽度)
209
+ calculatedWidth: _baseWidth,
210
+ onHeaderCell: (column) => {
211
+ const originalProps = originalCol.onHeaderCell ? originalCol.onHeaderCell(column) : {};
212
+ return {
213
+ ...originalProps,
214
+ style: {
215
+ ...originalProps.style,
216
+ minWidth: _calculatedWidth
217
+ }
218
+ };
219
+ },
220
+ onCell: (record, index) => {
221
+ const originalProps = originalCol.onCell ? originalCol.onCell(record, index) : {};
222
+ return {
223
+ ...originalProps,
224
+ style: {
225
+ ...originalProps.style,
226
+ minWidth: _calculatedWidth
227
+ }
228
+ };
229
+ }
171
230
  };
172
231
  });
173
232
  return {
174
233
  columns: processedColumns,
175
234
  totalWidth: isOverflow ? totalCalculatedWidth : void 0
176
235
  };
177
- }, [columns, columnWidths, tableWidth]);
236
+ }, [columns, columnWidths, tableWidth, resizedWidths]);
178
237
  return {
179
238
  columns: finalColumns,
180
239
  totalWidth
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/creek-table/hooks/useAutoWidthColumns.tsx"],
4
- "sourcesContent": ["import { ProColumns } from '@ant-design/pro-components';\nimport { useMemoizedFn } from 'ahooks';\nimport { Space } from 'antd';\nimport { RefObject, useEffect, useMemo, useRef, useState } from 'react';\n\nconst DEFAULT_PADDING_WIDTH = 16;\n\n/**\n * 估算字符串宽度(简单估算:汉字 14px,非汉字 8px,左右 padding 16px)\n */\nconst estimateWidth = (text: string) => {\n let width = 0;\n for (const char of text) {\n if (/[\\u4e00-\\u9fa5]/.test(char)) {\n width += 14;\n } else {\n width += 8;\n }\n }\n return width + DEFAULT_PADDING_WIDTH; // padding\n};\n\n/**\n * 根据 valueType 获取默认宽度\n */\nconst getValueTypeWidth = (valueType: string | undefined): number => {\n switch (valueType) {\n case 'date':\n case 'dateRange':\n return 120;\n case 'dateTime':\n case 'dateTimeRange':\n return 180;\n case 'time':\n case 'timeRange':\n return 100;\n case 'index':\n case 'indexBorder':\n return 60;\n case 'money':\n return 100;\n case 'digit':\n return 100;\n case 'select':\n return 120;\n default:\n return 80; // 默认给 80\n }\n};\n\n/**\n * 一个用于测量的包裹组件\n */\nconst MeasureWrapper = ({ children, onResize }: { children: React.ReactNode; onResize: (width: number) => void }) => {\n const ref = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (!ref.current) return;\n\n // 初次测量\n onResize(ref.current.offsetWidth);\n\n // 监听变化\n const observer = new ResizeObserver((entries) => {\n for (const entry of entries) {\n onResize((entry.target as HTMLElement).offsetWidth);\n }\n });\n\n observer.observe(ref.current);\n\n return () => {\n observer.disconnect();\n };\n }, []); // 依赖为空,只在挂载时设置监听\n\n return <Space ref={ref}>{children}</Space>;\n};\n\nexport const useAutoWidthColumns = <T, ValueType>(\n columns: ProColumns<T, ValueType>[] | undefined,\n tableRef: RefObject<HTMLDivElement>,\n): { columns: ProColumns<T, ValueType>[] | undefined; totalWidth: number | undefined } => {\n // 存储每个列的最大宽度:key 是 dataIndex 或 title,value 是最大宽度\n const [columnWidths, setColumnWidths] = useState<Record<string, number>>({});\n const [tableWidth, setTableWidth] = useState<number>(0);\n\n // 监听 table 容器宽度变化\n useEffect(() => {\n if (!tableRef.current) return;\n\n // 立即获取一次宽度\n setTableWidth(tableRef.current.offsetWidth);\n\n // 使用 requestAnimationFrame + setTimeout 防抖\n let rafId: number;\n let timerId: NodeJS.Timeout;\n\n const updateWidth = (width: number) => {\n cancelAnimationFrame(rafId);\n clearTimeout(timerId);\n\n rafId = requestAnimationFrame(() => {\n timerId = setTimeout(() => {\n setTableWidth(width);\n }, 500);\n });\n };\n\n const observer = new ResizeObserver((entries) => {\n for (const entry of entries) {\n updateWidth(entry.contentRect.width);\n }\n });\n\n observer.observe(tableRef.current);\n\n // 监听 window resize 作为后备\n const handleWindowResize = () => {\n if (tableRef.current) {\n updateWidth(tableRef.current.offsetWidth);\n }\n };\n window.addEventListener('resize', handleWindowResize);\n\n return () => {\n observer.disconnect();\n window.removeEventListener('resize', handleWindowResize);\n cancelAnimationFrame(rafId);\n clearTimeout(timerId);\n };\n }, [tableRef]);\n\n const handleResize = useMemoizedFn((key: string, width: number) => {\n setColumnWidths((prev) => {\n const currentMax = prev[key] || 0;\n if (width > currentMax) {\n return { ...prev, [key]: width };\n }\n return prev;\n });\n });\n\n const { columns: finalColumns, totalWidth } = useMemo(() => {\n if (!columns) return { columns: undefined, totalWidth: undefined };\n\n // 1. 先计算所有列的理想宽度(不考虑 table 宽度)\n const calculatedColumns = columns.map((col, index) => {\n const colKey = (col.dataIndex as string) || (col.key as string) || `col-${index}`;\n const measuredWidth = columnWidths[colKey];\n let width: number;\n if (col.width) {\n width = typeof col.width === 'number' ? col.width : 100; // 暂时给个默认值如果手动设了 string width\n } else if (col.valueType === 'option' && measuredWidth) {\n width = measuredWidth + DEFAULT_PADDING_WIDTH;\n } else {\n width = Math.max(estimateWidth(col.title as string), getValueTypeWidth(col.valueType as string));\n }\n\n return {\n ...col,\n _calculatedWidth: width,\n _colKey: colKey,\n };\n });\n\n // 2. 计算所有列的总宽度\n const totalCalculatedWidth = calculatedColumns.reduce((acc, col) => acc + col._calculatedWidth, 0);\n\n // 3. 判断是否需要自适应\n // 如果总宽度小于 table 宽度,说明空间足够,除了 option 列,其他列可以不设宽度让 table 自动撑开\n const isOverflow = totalCalculatedWidth > tableWidth;\n\n const processedColumns = calculatedColumns.map((col) => {\n // 提取内部使用的字段\n const { _calculatedWidth, _colKey, ...originalCol } = col;\n\n // 针对 valueType === 'option' (操作列),始终需要特殊处理(包裹测量组件)\n if (col.valueType === 'option') {\n const originalRender = col.render;\n return {\n ...originalCol,\n // 始终设置 option 列宽度\n width: _calculatedWidth,\n fixed: col.fixed ?? 'right',\n render: (dom: any, entity: any, index: any, action: any, schema: any) => {\n const originalRenderResult = originalRender ? (originalRender(dom, entity, index, action, schema) as React.ReactNode) : dom;\n return <MeasureWrapper onResize={(width) => handleResize(_colKey, width)}>{originalRenderResult}</MeasureWrapper>;\n },\n } as ProColumns<T, ValueType>;\n }\n\n // 非 option 列\n return {\n ...originalCol,\n // 只有当内容溢出(需要滚动)或者手动设置了宽度时,才应用计算出的宽度\n // 否则不设置 width,让 Antd Table 自动布局占满剩余空间\n width: isOverflow || col.width ? _calculatedWidth : undefined,\n };\n });\n\n return {\n columns: processedColumns,\n totalWidth: isOverflow ? totalCalculatedWidth : undefined,\n };\n }, [columns, columnWidths, tableWidth]);\n\n return {\n columns: finalColumns,\n totalWidth,\n };\n};\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { ProColumns } from '@ant-design/pro-components';\nimport { useMemoizedFn } from 'ahooks';\nimport { Space } from 'antd';\nimport { RefObject, useEffect, useMemo, useRef, useState } from 'react';\n\nconst DEFAULT_PADDING_WIDTH_SMALL = 16; // small size (compact)\nconst DEFAULT_PADDING_WIDTH_LARGE = 24; // large size (default)\n\n/**\n * 估算字符串宽度(简单估算:汉字 14px,非汉字 8px)\n */\nconst estimateWidth = (text: string, padding: number) => {\n let width = 0;\n for (const char of text) {\n if (/[\\u4e00-\\u9fa5]/.test(char)) {\n width += 14;\n } else {\n width += 8;\n }\n }\n return width + padding;\n};\n\n/**\n * 根据 valueType 获取默认宽度\n */\nconst getValueTypeWidth = (valueType: string | undefined): number => {\n switch (valueType) {\n case 'date':\n case 'dateRange':\n return 120;\n case 'dateTime':\n case 'dateTimeRange':\n return 180;\n case 'time':\n case 'timeRange':\n return 100;\n case 'index':\n case 'indexBorder':\n return 60;\n case 'money':\n return 100;\n case 'digit':\n return 100;\n case 'select':\n return 120;\n default:\n return 80; // 默认给 80\n }\n};\n\n/**\n * 一个用于测量的包裹组件\n */\nconst MeasureWrapper = ({ children, onResize }: { children: React.ReactNode; onResize: (width: number) => void }) => {\n const ref = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (!ref.current) return;\n\n // 初次测量\n onResize(ref.current.offsetWidth);\n\n // 监听变化\n const observer = new ResizeObserver((entries) => {\n for (const entry of entries) {\n // 使用 scrollWidth 来获取完整内容宽度,防止被截断时的测量误差\n const width = (entry.target as HTMLElement).scrollWidth;\n onResize(width);\n }\n });\n\n observer.observe(ref.current);\n\n return () => {\n observer.disconnect();\n };\n }, []); // 依赖为空,只在挂载时设置监听\n\n // 使用 inline-block 和 nowrap 防止内容被父容器宽度挤压导致测量不准\n return (\n <div\n ref={ref}\n style={{\n display: 'inline-block',\n whiteSpace: 'nowrap',\n width: 'max-content', // 确保宽度由内容决定\n minWidth: 'min-content',\n }}\n >\n <Space>{children}</Space>\n </div>\n );\n};\n\nexport const useAutoWidthColumns = <T, ValueType>(\n columns: ProColumns<T, ValueType>[] | undefined,\n tableRef: RefObject<HTMLDivElement>,\n resizedWidths?: Record<string, number>,\n bordered?: boolean,\n size?: 'large' | 'middle' | 'small' | 'medium',\n): { columns: ProColumns<T, ValueType>[] | undefined; totalWidth: number | undefined } => {\n // 存储每个列的最大宽度:key 是 dataIndex 或 title,value 是最大宽度\n const [columnWidths, setColumnWidths] = useState<Record<string, number>>({});\n // 初始时尝试直接获取宽度,如果 tableRef 已经有值\n const [tableWidth, setTableWidth] = useState<number>(() => {\n if (tableRef.current) {\n return tableRef.current.offsetWidth;\n }\n return 0;\n });\n\n // 监听 table 容器宽度变化\n useEffect(() => {\n if (!tableRef.current) return;\n \n // 如果初始状态是0(因为ref.current可能在render时为null),这里补救一下\n if (tableWidth === 0) {\n setTableWidth(tableRef.current.offsetWidth);\n }\n\n // 使用 requestAnimationFrame + setTimeout 防抖\n let rafId: number;\n let timerId: NodeJS.Timeout;\n\n const updateWidth = (width: number) => {\n // 忽略 0 宽度的更新(通常是由于 display: none 引起的)\n if (width === 0) return;\n\n cancelAnimationFrame(rafId);\n clearTimeout(timerId);\n\n rafId = requestAnimationFrame(() => {\n timerId = setTimeout(() => {\n setTableWidth(width);\n }, 500);\n });\n };\n\n const observer = new ResizeObserver((entries) => {\n for (const entry of entries) {\n updateWidth(entry.contentRect.width);\n }\n });\n\n observer.observe(tableRef.current);\n\n // 监听 window resize 作为后备\n const handleWindowResize = () => {\n if (tableRef.current) {\n updateWidth(tableRef.current.offsetWidth);\n }\n };\n window.addEventListener('resize', handleWindowResize);\n\n return () => {\n observer.disconnect();\n window.removeEventListener('resize', handleWindowResize);\n cancelAnimationFrame(rafId);\n clearTimeout(timerId);\n };\n }, [tableRef]);\n\n const handleResize = useMemoizedFn((key: string, width: number) => {\n setColumnWidths((prev) => {\n const currentMax = prev[key] || 0;\n if (width > currentMax) {\n return { ...prev, [key]: width };\n }\n return prev;\n });\n });\n\n const { columns: finalColumns, totalWidth } = useMemo(() => {\n if (!columns) return { columns: undefined, totalWidth: undefined };\n\n // 1. 先计算所有列的理想宽度(不考虑 table 宽度)\n const calculatedColumns = columns.map((col, index) => {\n const colKey = (col.key as string) || (col.dataIndex as string) || `col-${index}`;\n const measuredWidth = columnWidths[colKey];\n \n // 根据 size 确定 padding\n let padding = DEFAULT_PADDING_WIDTH_SMALL;\n if (size === 'large') {\n padding = DEFAULT_PADDING_WIDTH_LARGE;\n }\n \n let baseWidth: number;\n if (col.width) {\n baseWidth = typeof col.width === 'number' ? col.width : 100; // 暂时给个默认值如果手动设了 string width\n } else if (col.valueType === 'option' && measuredWidth) {\n // bordered 模式下,需要额外的宽度来容纳边框和视觉间距,避免换行\n const extraPadding = bordered ? 4: 0;\n baseWidth = measuredWidth + padding + extraPadding;\n } else {\n baseWidth = Math.max(estimateWidth(col.title as string, padding), getValueTypeWidth(col.valueType as string));\n }\n\n let width = baseWidth;\n if (resizedWidths && resizedWidths[colKey]) {\n width = resizedWidths[colKey];\n }\n\n return {\n ...col,\n _calculatedWidth: width,\n _baseWidth: baseWidth, // 新增 _baseWidth 用于后续 minWidth 限制\n _colKey: colKey,\n };\n });\n\n // 2. 计算所有列的总宽度\n const totalCalculatedWidth = calculatedColumns.reduce((acc, col) => acc + col._calculatedWidth, 0);\n\n // 3. 判断是否需要自适应\n // 如果总宽度小于 table 宽度,说明空间足够,除了 option 列,其他列可以不设宽度让 table 自动撑开\n // 但如果有任何列被用户手动 resize 了,我们认为用户希望精确控制,此时也应该返回 totalWidth\n const hasResized = resizedWidths && Object.keys(resizedWidths).length > 0;\n const isOverflow = totalCalculatedWidth > tableWidth || hasResized;\n\n // 只有在内容真实溢出(即总宽度 > 容器宽度)时,才强制给未设置宽度的列设置最小估算宽度。\n // 如果仅仅是用户调整了某列宽度但总宽度仍小于容器宽度,此时不应该限制其他列的宽度,\n // 而是利用 table 的自动布局特性让它们填充剩余空间。\n const shouldForceWidth = totalCalculatedWidth > tableWidth;\n\n const processedColumns = calculatedColumns.map((col) => {\n // 提取内部使用的字段\n const { _calculatedWidth, _baseWidth, _colKey, ...originalCol } = col;\n\n // 针对 valueType === 'option' (操作列),始终需要特殊处理(包裹测量组件)\n if (col.valueType === 'option') {\n const originalRender = col.render;\n return {\n ...originalCol,\n // 始终设置 option 列宽度\n width: _calculatedWidth,\n fixed: col.fixed ?? 'right',\n render: (dom: any, entity: any, index: any, action: any, schema: any) => {\n const originalRenderResult = originalRender ? (originalRender(dom, entity, index, action, schema) as React.ReactNode) : dom;\n return <MeasureWrapper onResize={(width) => handleResize(_colKey, width)}>{originalRenderResult}</MeasureWrapper>;\n },\n } as ProColumns<T, ValueType>;\n }\n\n // 非 option 列\n return {\n ...originalCol,\n // 只有当内容溢出(需要滚动)或者手动设置了宽度时,才应用计算出的宽度\n // 否则不设置 width,让 Antd Table 自动布局占满剩余空间\n width: shouldForceWidth || col.width || (resizedWidths && resizedWidths[_colKey]) ? _calculatedWidth : undefined,\n // 添加 calculatedWidth 以供后续 useResizableColumns 使用,这里使用 _baseWidth (即不受 resize 影响的宽度)\n calculatedWidth: _baseWidth,\n onHeaderCell: (column: any) => {\n const originalProps = originalCol.onHeaderCell ? originalCol.onHeaderCell(column) : {};\n return {\n ...originalProps,\n style: {\n ...originalProps.style,\n minWidth: _calculatedWidth,\n },\n };\n },\n onCell: (record: any, index: any) => {\n const originalProps = originalCol.onCell ? originalCol.onCell(record, index) : {};\n return {\n ...originalProps,\n style: {\n ...originalProps.style,\n minWidth: _calculatedWidth,\n },\n };\n },\n };\n });\n\n return {\n columns: processedColumns,\n totalWidth: isOverflow ? totalCalculatedWidth : undefined,\n };\n }, [columns, columnWidths, tableWidth, resizedWidths]);\n\n return {\n columns: finalColumns,\n totalWidth,\n };\n};\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -0,0 +1,8 @@
1
+ import type { ParamsType, ProColumns } from '@ant-design/pro-components';
2
+ /**
3
+ * 默认开启 ellipsis 的 Hook
4
+ * 1. 如果用户未配置 ellipsis,默认开启,并使用 Tooltip 显示完整内容
5
+ * 2. 如果是 option 列,默认不开启
6
+ * 3. 尊重用户配置
7
+ */
8
+ export declare const useEllipsisColumns: <T extends ParamsType, ValueType = "text">(columns: ProColumns<T, ValueType>[] | undefined) => ProColumns<T, ValueType>[] | undefined;
@@ -0,0 +1,58 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __export = (target, all) => {
6
+ for (var name in all)
7
+ __defProp(target, name, { get: all[name], enumerable: true });
8
+ };
9
+ var __copyProps = (to, from, except, desc) => {
10
+ if (from && typeof from === "object" || typeof from === "function") {
11
+ for (let key of __getOwnPropNames(from))
12
+ if (!__hasOwnProp.call(to, key) && key !== except)
13
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
14
+ }
15
+ return to;
16
+ };
17
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
18
+
19
+ // src/creek-table/hooks/useEllipsisColumns.tsx
20
+ var useEllipsisColumns_exports = {};
21
+ __export(useEllipsisColumns_exports, {
22
+ useEllipsisColumns: () => useEllipsisColumns
23
+ });
24
+ module.exports = __toCommonJS(useEllipsisColumns_exports);
25
+ var import_react = require("react");
26
+ var import_components = require("../components");
27
+ var import_jsx_runtime = require("react/jsx-runtime");
28
+ var useEllipsisColumns = (columns) => {
29
+ const processedColumns = (0, import_react.useMemo)(() => {
30
+ return columns == null ? void 0 : columns.map((col) => {
31
+ if (col.valueType === "option") {
32
+ return col;
33
+ }
34
+ return {
35
+ ...col,
36
+ // 关闭 Table 自带的 ellipsis title,因为我们要用自己的 Tooltip
37
+ // 但保留 ellipsis 属性以确保 Table 传递正确的样式给 cell(虽然我们的 EllipsisTooltip 也有样式)
38
+ // 实际上,为了让 EllipsisTooltip 占据 100% 宽度并生效,最好让 Table cell 也保持一定的约束
39
+ ellipsis: {
40
+ showTitle: false
41
+ },
42
+ render: (dom, entity, index, action, schema) => {
43
+ const originalRenderResult = col.render ? col.render(dom, entity, index, action, schema) : dom;
44
+ if (originalRenderResult === null || originalRenderResult === void 0 || originalRenderResult === "") {
45
+ return originalRenderResult;
46
+ }
47
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_components.EllipsisTooltip, { children: originalRenderResult });
48
+ }
49
+ };
50
+ });
51
+ }, [columns]);
52
+ return processedColumns;
53
+ };
54
+ // Annotate the CommonJS export names for ESM import in node:
55
+ 0 && (module.exports = {
56
+ useEllipsisColumns
57
+ });
58
+ //# sourceMappingURL=useEllipsisColumns.js.map