@creekjs/web-components 1.0.4 → 1.0.6

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 (189) hide show
  1. package/.turbo/turbo-father$colon$build.log +33 -17
  2. package/README.md +97 -18
  3. package/dist/creek-config-provider/CreekConfigContext.d.ts +4 -0
  4. package/dist/creek-config-provider/CreekConfigContext.d.ts.map +1 -0
  5. package/dist/creek-config-provider/CreekConfigContext.js.map +2 -2
  6. package/dist/creek-config-provider/CreekI18nProvider.d.ts +22 -0
  7. package/dist/creek-config-provider/CreekI18nProvider.d.ts.map +1 -0
  8. package/dist/creek-config-provider/CreekI18nProvider.js +92 -0
  9. package/dist/creek-config-provider/CreekI18nProvider.js.map +7 -0
  10. package/dist/creek-config-provider/index.d.ts +5 -3
  11. package/dist/creek-config-provider/index.d.ts.map +1 -0
  12. package/dist/creek-config-provider/index.js +47 -4
  13. package/dist/creek-config-provider/index.js.map +3 -3
  14. package/dist/creek-hooks/index.d.ts.map +1 -0
  15. package/dist/creek-hooks/useApp/DrawerHelper.d.ts.map +1 -0
  16. package/dist/creek-hooks/useApp/ModalHelper.d.ts.map +1 -0
  17. package/dist/creek-hooks/useApp/index.d.ts +3 -3
  18. package/dist/creek-hooks/useApp/index.d.ts.map +1 -0
  19. package/dist/creek-hooks/useApp/types.d.ts.map +1 -0
  20. package/dist/creek-hooks/useViewportHeight.d.ts.map +1 -0
  21. package/dist/creek-icon/index.d.ts.map +1 -0
  22. package/dist/creek-keep-alive/index.d.ts +24 -1
  23. package/dist/creek-keep-alive/index.d.ts.map +1 -0
  24. package/dist/creek-keep-alive/index.js +141 -4
  25. package/dist/creek-keep-alive/index.js.map +2 -2
  26. package/dist/creek-layout/ActionRender/FullScreen.d.ts.map +1 -0
  27. package/dist/creek-layout/{HeaderContent → ActionRender}/FullScreen.js +4 -2
  28. package/dist/creek-layout/ActionRender/FullScreen.js.map +7 -0
  29. package/dist/creek-layout/ActionRender/LayoutSettings.d.ts +5 -0
  30. package/dist/creek-layout/ActionRender/LayoutSettings.d.ts.map +1 -0
  31. package/dist/creek-layout/ActionRender/LayoutSettings.js +73 -0
  32. package/dist/creek-layout/ActionRender/LayoutSettings.js.map +7 -0
  33. package/dist/creek-layout/ActionRender/UserInfo.d.ts +8 -0
  34. package/dist/creek-layout/ActionRender/UserInfo.d.ts.map +1 -0
  35. package/dist/creek-layout/{HeaderContent → ActionRender}/UserInfo.js +7 -29
  36. package/dist/creek-layout/ActionRender/UserInfo.js.map +7 -0
  37. package/dist/creek-layout/ActionRender/index.d.ts +3 -0
  38. package/dist/creek-layout/ActionRender/index.d.ts.map +1 -0
  39. package/dist/creek-layout/ActionRender/index.js +36 -0
  40. package/dist/creek-layout/ActionRender/index.js.map +7 -0
  41. package/dist/creek-layout/CollapseButton.d.ts.map +1 -0
  42. package/dist/creek-layout/Exception/NotFound.d.ts.map +1 -0
  43. package/dist/creek-layout/Exception/NotFoundPage.d.ts.map +1 -0
  44. package/dist/creek-layout/Exception/index.d.ts.map +1 -0
  45. package/dist/creek-layout/index.d.ts +9 -2
  46. package/dist/creek-layout/index.d.ts.map +1 -0
  47. package/dist/creek-layout/index.js +96 -39
  48. package/dist/creek-layout/index.js.map +3 -3
  49. package/dist/creek-layout/useLayoutSettingsStore.d.ts +20 -0
  50. package/dist/creek-layout/useLayoutSettingsStore.d.ts.map +1 -0
  51. package/dist/creek-layout/useLayoutSettingsStore.js +45 -0
  52. package/dist/creek-layout/useLayoutSettingsStore.js.map +7 -0
  53. package/dist/creek-loading/index.d.ts.map +1 -0
  54. package/dist/creek-locale-button/index.d.ts +1 -0
  55. package/dist/creek-locale-button/index.d.ts.map +1 -0
  56. package/dist/creek-locale-button/index.js +66 -0
  57. package/dist/creek-locale-button/index.js.map +7 -0
  58. package/dist/creek-page-container/index.d.ts +4 -0
  59. package/dist/creek-page-container/index.d.ts.map +1 -0
  60. package/dist/creek-page-container/index.js +68 -0
  61. package/dist/creek-page-container/index.js.map +7 -0
  62. package/dist/creek-style/index.d.ts +1 -0
  63. package/dist/creek-style/index.d.ts.map +1 -0
  64. package/dist/creek-style/index.js +24 -0
  65. package/dist/creek-style/index.js.map +7 -0
  66. package/dist/creek-style/scrollbar.d.ts +2 -0
  67. package/dist/creek-style/scrollbar.d.ts.map +1 -0
  68. package/dist/creek-style/scrollbar.js +55 -0
  69. package/dist/creek-style/scrollbar.js.map +7 -0
  70. package/dist/creek-table/SearchTable.d.ts +9 -0
  71. package/dist/creek-table/SearchTable.d.ts.map +1 -0
  72. package/dist/creek-table/SearchTable.js +109 -72
  73. package/dist/creek-table/SearchTable.js.map +3 -3
  74. package/dist/creek-table/components/DensityIcon.d.ts +9 -0
  75. package/dist/creek-table/components/DensityIcon.d.ts.map +1 -0
  76. package/dist/creek-table/components/DensityIcon.js +77 -0
  77. package/dist/creek-table/components/DensityIcon.js.map +7 -0
  78. package/dist/creek-table/components/EllipsisTooltip.d.ts +9 -0
  79. package/dist/creek-table/components/EllipsisTooltip.d.ts.map +1 -0
  80. package/dist/creek-table/components/EllipsisTooltip.js +122 -0
  81. package/dist/creek-table/components/EllipsisTooltip.js.map +7 -0
  82. package/dist/creek-table/components/index.d.ts +2 -0
  83. package/dist/creek-table/components/index.d.ts.map +1 -0
  84. package/dist/creek-table/components/index.js +26 -0
  85. package/dist/creek-table/components/index.js.map +7 -0
  86. package/dist/creek-table/hooks/index.d.ts +5 -0
  87. package/dist/creek-table/hooks/index.d.ts.map +1 -0
  88. package/dist/creek-table/hooks/index.js +10 -0
  89. package/dist/creek-table/hooks/index.js.map +2 -2
  90. package/dist/creek-table/hooks/useAdaptiveToolBar.d.ts.map +1 -0
  91. package/dist/creek-table/hooks/useAutoWidthColumns.d.ts +1 -1
  92. package/dist/creek-table/hooks/useAutoWidthColumns.d.ts.map +1 -0
  93. package/dist/creek-table/hooks/useAutoWidthColumns.js +76 -17
  94. package/dist/creek-table/hooks/useAutoWidthColumns.js.map +2 -2
  95. package/dist/creek-table/hooks/useElementDistance.d.ts.map +1 -0
  96. package/dist/creek-table/hooks/useEllipsisColumns.d.ts +8 -0
  97. package/dist/creek-table/hooks/useEllipsisColumns.d.ts.map +1 -0
  98. package/dist/creek-table/hooks/useEllipsisColumns.js +58 -0
  99. package/dist/creek-table/hooks/useEllipsisColumns.js.map +7 -0
  100. package/dist/creek-table/hooks/useIndexColumn.d.ts +2 -0
  101. package/dist/creek-table/hooks/useIndexColumn.d.ts.map +1 -0
  102. package/dist/creek-table/hooks/useIndexColumn.js +52 -0
  103. package/dist/creek-table/hooks/useIndexColumn.js.map +7 -0
  104. package/dist/creek-table/hooks/useResizableColumns.d.ts +20 -0
  105. package/dist/creek-table/hooks/useResizableColumns.d.ts.map +1 -0
  106. package/dist/creek-table/hooks/useResizableColumns.js +279 -0
  107. package/dist/creek-table/hooks/useResizableColumns.js.map +7 -0
  108. package/dist/creek-table/hooks/useStatusColumns.d.ts +2 -0
  109. package/dist/creek-table/hooks/useStatusColumns.d.ts.map +1 -0
  110. package/dist/creek-table/hooks/useStatusColumns.js +215 -0
  111. package/dist/creek-table/hooks/useStatusColumns.js.map +7 -0
  112. package/dist/creek-table/hooks/useTableOptions.d.ts +15 -0
  113. package/dist/creek-table/hooks/useTableOptions.d.ts.map +1 -0
  114. package/dist/creek-table/hooks/useTableOptions.js +78 -0
  115. package/dist/creek-table/hooks/useTableOptions.js.map +7 -0
  116. package/dist/creek-table/hooks/useTableScrollHeight.d.ts +6 -1
  117. package/dist/creek-table/hooks/useTableScrollHeight.d.ts.map +1 -0
  118. package/dist/creek-table/hooks/useTableScrollHeight.js +44 -5
  119. package/dist/creek-table/hooks/useTableScrollHeight.js.map +2 -2
  120. package/dist/creek-table/index.d.ts.map +1 -0
  121. package/dist/creek-table/type.d.ts +4 -6
  122. package/dist/creek-table/type.d.ts.map +1 -0
  123. package/dist/creek-table/type.js.map +1 -1
  124. package/dist/index.d.ts +4 -0
  125. package/dist/index.d.ts.map +1 -0
  126. package/dist/index.js +8 -0
  127. package/dist/index.js.map +2 -2
  128. package/dist/locales/en-US.d.ts +25 -0
  129. package/dist/locales/en-US.d.ts.map +1 -0
  130. package/dist/locales/en-US.js +49 -0
  131. package/dist/locales/en-US.js.map +7 -0
  132. package/dist/locales/zh-CN.d.ts +25 -0
  133. package/dist/locales/zh-CN.d.ts.map +1 -0
  134. package/dist/locales/zh-CN.js +49 -0
  135. package/dist/locales/zh-CN.js.map +7 -0
  136. package/dist/utils/i18n.d.ts +2 -0
  137. package/dist/utils/i18n.d.ts.map +1 -0
  138. package/dist/utils/i18n.js +34 -0
  139. package/dist/utils/i18n.js.map +7 -0
  140. package/i18n.config.ts +27 -0
  141. package/package.json +17 -3
  142. package/src/creek-config-provider/CreekConfigContext.tsx +5 -1
  143. package/src/creek-config-provider/CreekI18nProvider.tsx +87 -0
  144. package/src/creek-config-provider/index.tsx +53 -4
  145. package/src/creek-keep-alive/index.tsx +225 -6
  146. package/src/creek-layout/{HeaderContent → ActionRender}/FullScreen.tsx +10 -6
  147. package/src/creek-layout/ActionRender/LayoutSettings.tsx +67 -0
  148. package/src/creek-layout/ActionRender/UserInfo.tsx +43 -0
  149. package/src/creek-layout/ActionRender/index.tsx +4 -0
  150. package/src/creek-layout/index.tsx +121 -53
  151. package/src/creek-layout/useLayoutSettingsStore.ts +25 -0
  152. package/src/creek-locale-button/index.tsx +42 -0
  153. package/src/creek-page-container/index.tsx +32 -0
  154. package/src/creek-style/index.ts +1 -0
  155. package/src/creek-style/scrollbar.ts +29 -0
  156. package/src/creek-table/SearchTable.tsx +125 -72
  157. package/src/creek-table/components/DensityIcon.tsx +63 -0
  158. package/src/creek-table/components/EllipsisTooltip.tsx +116 -0
  159. package/src/creek-table/components/index.tsx +3 -0
  160. package/src/creek-table/hooks/index.ts +5 -1
  161. package/src/creek-table/hooks/useAutoWidthColumns.tsx +93 -19
  162. package/src/creek-table/hooks/useEllipsisColumns.tsx +47 -0
  163. package/src/creek-table/hooks/useIndexColumn.tsx +27 -0
  164. package/src/creek-table/hooks/useResizableColumns.tsx +323 -0
  165. package/src/creek-table/hooks/useStatusColumns.tsx +252 -0
  166. package/src/creek-table/hooks/useTableOptions.tsx +81 -0
  167. package/src/creek-table/hooks/useTableScrollHeight.tsx +61 -6
  168. package/src/creek-table/type.ts +5 -7
  169. package/src/index.tsx +4 -0
  170. package/src/locales/en-US.ts +24 -0
  171. package/src/locales/zh-CN.ts +24 -0
  172. package/src/utils/i18n.ts +4 -0
  173. package/dist/creek-layout/HeaderContent/FullScreen.js.map +0 -7
  174. package/dist/creek-layout/HeaderContent/UserInfo.d.ts +0 -1
  175. package/dist/creek-layout/HeaderContent/UserInfo.js.map +0 -7
  176. package/dist/creek-layout/HeaderContent/index.d.ts +0 -1
  177. package/dist/creek-layout/HeaderContent/index.js +0 -49
  178. package/dist/creek-layout/HeaderContent/index.js.map +0 -7
  179. package/dist/creek-table/TableOptionRender.d.ts +0 -9
  180. package/dist/creek-table/TableOptionRender.js +0 -74
  181. package/dist/creek-table/TableOptionRender.js.map +0 -7
  182. package/dist/creek-table/toolBarRender.d.ts +0 -5
  183. package/dist/creek-table/toolBarRender.js +0 -58
  184. package/dist/creek-table/toolBarRender.js.map +0 -7
  185. package/src/creek-layout/HeaderContent/UserInfo.tsx +0 -54
  186. package/src/creek-layout/HeaderContent/index.tsx +0 -24
  187. package/src/creek-table/TableOptionRender.tsx +0 -57
  188. package/src/creek-table/toolBarRender.tsx +0 -28
  189. /package/dist/creek-layout/{HeaderContent → ActionRender}/FullScreen.d.ts +0 -0
@@ -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
  };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useAutoWidthColumns.d.ts","sourceRoot":"","sources":["../../../src/creek-table/hooks/useAutoWidthColumns.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAGxD,OAAO,EAAE,SAAS,EAAwC,MAAM,OAAO,CAAC;AA4FxE,eAAO,MAAM,mBAAmB,0BACrB,WAAW,CAAC,EAAE,SAAS,CAAC,EAAE,GAAG,SAAS,YACrC,UAAU,cAAc,CAAC,kBACnB,OAAO,MAAM,EAAE,MAAM,CAAC,aAC3B,OAAO,SACX,OAAO,GAAG,QAAQ,GAAG,OAAO,GAAG,QAAQ;aAClC,WAAW,CAAC,EAAE,SAAS,CAAC,EAAE,GAAG,SAAS;gBAAc,MAAM,GAAG,SAAS;CAwLnF,CAAC"}
@@ -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 @@
1
+ {"version":3,"file":"useElementDistance.d.ts","sourceRoot":"","sources":["../../../src/creek-table/hooks/useElementDistance.tsx"],"names":[],"mappings":";AAGA,KAAK,UAAU,GAAG,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;AAO/C,UAAU,QAAQ;IAChB,CAAC,EAAE,MAAM,CAAC;CACX;AAeD,eAAO,MAAM,kBAAkB,wDAAuD,QAAQ,GAAG,IAoChG,CAAC"}
@@ -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 @@
1
+ {"version":3,"file":"useEllipsisColumns.d.ts","sourceRoot":"","sources":["../../../src/creek-table/hooks/useEllipsisColumns.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAIzE;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,sDACpB,WAAW,CAAC,EAAE,SAAS,CAAC,EAAE,GAAG,SAAS,2CAmChD,CAAC"}
@@ -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
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/creek-table/hooks/useEllipsisColumns.tsx"],
4
+ "sourcesContent": ["import type { ParamsType, ProColumns } from '@ant-design/pro-components';\nimport React, { useMemo } from 'react';\nimport { EllipsisTooltip } from '../components';\n\n/**\n * 默认开启 ellipsis 的 Hook\n * 1. 如果用户未配置 ellipsis,默认开启,并使用 Tooltip 显示完整内容\n * 2. 如果是 option 列,默认不开启\n * 3. 尊重用户配置\n */\nexport const useEllipsisColumns = <T extends ParamsType, ValueType = 'text'>(\n columns: ProColumns<T, ValueType>[] | undefined,\n) => {\n const processedColumns = useMemo(() => {\n return columns?.map((col) => {\n // 对于操作列,默认不开启 ellipsis\n if (col.valueType === 'option') {\n return col;\n }\n // 其他列默认开启 ellipsis,并使用自定义渲染\n return {\n ...col,\n // 关闭 Table 自带的 ellipsis title,因为我们要用自己的 Tooltip\n // 但保留 ellipsis 属性以确保 Table 传递正确的样式给 cell(虽然我们的 EllipsisTooltip 也有样式)\n // 实际上,为了让 EllipsisTooltip 占据 100% 宽度并生效,最好让 Table cell 也保持一定的约束\n ellipsis: {\n showTitle: false,\n },\n render: (dom: React.ReactNode, entity: T, index: number, action: any, schema: any) => {\n const originalRenderResult = col.render ? (col.render(dom, entity, index, action, schema) as React.ReactNode) : dom;\n \n // 如果内容为空,直接返回\n if (originalRenderResult === null || originalRenderResult === undefined || originalRenderResult === '') {\n return originalRenderResult;\n }\n\n // 如果是简单的文本或数字,使用 EllipsisTooltip 包裹\n return (\n <EllipsisTooltip>{originalRenderResult}</EllipsisTooltip>\n );\n },\n } as ProColumns<T, ValueType>;\n });\n }, [columns]);\n\n return processedColumns;\n};\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,mBAA+B;AAC/B,wBAAgC;AAoCpB;AA5BL,IAAM,qBAAqB,CAChC,YACG;AACH,QAAM,uBAAmB,sBAAQ,MAAM;AACrC,WAAO,mCAAS,IAAI,CAAC,QAAQ;AAE3B,UAAI,IAAI,cAAc,UAAU;AAC9B,eAAO;AAAA,MACT;AAEA,aAAO;AAAA,QACL,GAAG;AAAA;AAAA;AAAA;AAAA,QAIH,UAAU;AAAA,UACR,WAAW;AAAA,QACb;AAAA,QACA,QAAQ,CAAC,KAAsB,QAAW,OAAe,QAAa,WAAgB;AACpF,gBAAM,uBAAuB,IAAI,SAAU,IAAI,OAAO,KAAK,QAAQ,OAAO,QAAQ,MAAM,IAAwB;AAGhH,cAAI,yBAAyB,QAAQ,yBAAyB,UAAa,yBAAyB,IAAI;AACtG,mBAAO;AAAA,UACT;AAGA,iBACE,4CAAC,qCAAiB,gCAAqB;AAAA,QAE3C;AAAA,MACF;AAAA,IACF;AAAA,EACF,GAAG,CAAC,OAAO,CAAC;AAEZ,SAAO;AACT;",
6
+ "names": []
7
+ }
@@ -0,0 +1,2 @@
1
+ import { ProColumns } from '@ant-design/pro-components';
2
+ export declare const useIndexColumn: <T = any, ValueType = "text">(columns?: ProColumns<T, ValueType>[], showIndex?: boolean) => ProColumns<T, ValueType>[];
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useIndexColumn.d.ts","sourceRoot":"","sources":["../../../src/creek-table/hooks/useIndexColumn.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAKxD,eAAO,MAAM,cAAc,0CAA0C,WAAW,CAAC,EAAE,SAAS,CAAC,EAAE,cAAkB,OAAO,+BAqBvH,CAAC"}
@@ -0,0 +1,52 @@
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/useIndexColumn.tsx
20
+ var useIndexColumn_exports = {};
21
+ __export(useIndexColumn_exports, {
22
+ useIndexColumn: () => useIndexColumn
23
+ });
24
+ module.exports = __toCommonJS(useIndexColumn_exports);
25
+ var import_react = require("react");
26
+ var import_i18n = require("../../utils/i18n");
27
+ var useIndexColumn = (columns = [], showIndex = true) => {
28
+ const t = (0, import_i18n.useT)();
29
+ return (0, import_react.useMemo)(() => {
30
+ if (!showIndex) {
31
+ return columns;
32
+ }
33
+ const indexColumn = {
34
+ title: t("creek-table.hooks.useIndexColumn.xuHao", "序号"),
35
+ dataIndex: "index",
36
+ width: 48,
37
+ fixed: "left",
38
+ disable: true,
39
+ hideInSearch: true,
40
+ render: (dom, entity, index, action, schema) => {
41
+ const { current = 1, pageSize = 20 } = (action == null ? void 0 : action.pageInfo) || {};
42
+ return (current - 1) * pageSize + index + 1;
43
+ }
44
+ };
45
+ return [indexColumn, ...columns];
46
+ }, [columns, showIndex, t]);
47
+ };
48
+ // Annotate the CommonJS export names for ESM import in node:
49
+ 0 && (module.exports = {
50
+ useIndexColumn
51
+ });
52
+ //# sourceMappingURL=useIndexColumn.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/creek-table/hooks/useIndexColumn.tsx"],
4
+ "sourcesContent": ["import { ProColumns } from '@ant-design/pro-components';\nimport { useMemo } from 'react';\n\nimport { useT } from '@/utils/i18n';\n\nexport const useIndexColumn = <T = any, ValueType = 'text'>(columns: ProColumns<T, ValueType>[] = [], showIndex: boolean = true) => {\n const t = useT();\n\n return useMemo(() => {\n if (!showIndex) {\n return columns;\n }\n const indexColumn: ProColumns<T, ValueType> = {\n title: t('creek-table.hooks.useIndexColumn.xuHao', '序号'),\n dataIndex: 'index',\n width: 48,\n fixed: 'left',\n disable: true,\n hideInSearch: true,\n render: (dom, entity, index, action, schema) => {\n const { current = 1, pageSize = 20 } = action?.pageInfo || {};\n return (current - 1) * pageSize + index + 1;\n },\n };\n return [indexColumn, ...columns];\n }, [columns, showIndex, t]);\n};\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,mBAAwB;AAExB,kBAAqB;AAEd,IAAM,iBAAiB,CAA8B,UAAsC,CAAC,GAAG,YAAqB,SAAS;AAClI,QAAM,QAAI,kBAAK;AAEf,aAAO,sBAAQ,MAAM;AACnB,QAAI,CAAC,WAAW;AACd,aAAO;AAAA,IACT;AACA,UAAM,cAAwC;AAAA,MAC5C,OAAO,EAAE,0CAA0C,IAAI;AAAA,MACvD,WAAW;AAAA,MACX,OAAO;AAAA,MACP,OAAO;AAAA,MACP,SAAS;AAAA,MACT,cAAc;AAAA,MACd,QAAQ,CAAC,KAAK,QAAQ,OAAO,QAAQ,WAAW;AAC9C,cAAM,EAAE,UAAU,GAAG,WAAW,GAAG,KAAI,iCAAQ,aAAY,CAAC;AAC5D,gBAAQ,UAAU,KAAK,WAAW,QAAQ;AAAA,MAC5C;AAAA,IACF;AACA,WAAO,CAAC,aAAa,GAAG,OAAO;AAAA,EACjC,GAAG,CAAC,SAAS,WAAW,CAAC,CAAC;AAC5B;",
6
+ "names": []
7
+ }
@@ -0,0 +1,20 @@
1
+ import { ProColumns } from '@ant-design/pro-components';
2
+ import React from 'react';
3
+ import { ResizeCallbackData } from 'react-resizable';
4
+ interface ResizableTitleProps extends React.HTMLAttributes<HTMLTableCellElement> {
5
+ onResize?: (e: React.SyntheticEvent, data: ResizeCallbackData) => void;
6
+ onResizeStart?: (e: React.SyntheticEvent, data: ResizeCallbackData) => void;
7
+ onResizeStop?: (e: React.SyntheticEvent, data: ResizeCallbackData) => void;
8
+ width?: number | string;
9
+ minWidth?: number;
10
+ }
11
+ export declare const useResizableColumns: <T, ValueType>(columns: ProColumns<T, ValueType>[] | undefined, resizable?: boolean, resizedWidthsProp?: Record<string, number>, setResizedWidthsProp?: React.Dispatch<React.SetStateAction<Record<string, number>>>, tableRef?: React.RefObject<HTMLDivElement>) => {
12
+ columns: ProColumns<T, ValueType>[] | undefined;
13
+ components: {
14
+ header: {
15
+ cell: React.ComponentType<ResizableTitleProps>;
16
+ };
17
+ } | undefined;
18
+ resizedWidths: Record<string, number>;
19
+ };
20
+ export {};
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useResizableColumns.d.ts","sourceRoot":"","sources":["../../../src/creek-table/hooks/useResizableColumns.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAIxD,OAAO,KAAgE,MAAM,OAAO,CAAC;AACrF,OAAO,EAAa,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAEhE,UAAU,mBAAoB,SAAQ,KAAK,CAAC,cAAc,CAAC,oBAAoB,CAAC;IAC9E,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,cAAc,EAAE,IAAI,EAAE,kBAAkB,KAAK,IAAI,CAAC;IACvE,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,cAAc,EAAE,IAAI,EAAE,kBAAkB,KAAK,IAAI,CAAC;IAC5E,YAAY,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,cAAc,EAAE,IAAI,EAAE,kBAAkB,KAAK,IAAI,CAAC;IAC3E,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAgLD,eAAO,MAAM,mBAAmB,0BACrB,WAAW,CAAC,EAAE,SAAS,CAAC,EAAE,GAAG,SAAS,cACpC,OAAO,sBACE,OAAO,MAAM,EAAE,MAAM,CAAC,yBACnB,MAAM,QAAQ,CAAC,MAAM,cAAc,CAAC,OAAO,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,aACxE,MAAM,SAAS,CAAC,cAAc,CAAC;aAEjC,WAAW,CAAC,EAAE,SAAS,CAAC,EAAE,GAAG,SAAS;gBACnC;QAAE,MAAM,EAAE;YAAE,IAAI,EAAE,MAAM,aAAa,CAAC,mBAAmB,CAAC,CAAA;SAAE,CAAA;KAAE,GAAG,SAAS;mBACvE,OAAO,MAAM,EAAE,MAAM,CAAC;CA4HtC,CAAC"}