@akinon/ai-modal-table 1.0.0

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 (185) hide show
  1. package/dist/cjs/__tests__/index.test.d.ts +2 -0
  2. package/dist/cjs/__tests__/index.test.d.ts.map +1 -0
  3. package/dist/cjs/__tests__/index.test.js +82 -0
  4. package/dist/cjs/__tests__/index.test.tsx +94 -0
  5. package/dist/cjs/ai-modal-table/__tests__/index.test.d.ts +2 -0
  6. package/dist/cjs/ai-modal-table/__tests__/index.test.d.ts.map +1 -0
  7. package/dist/cjs/ai-modal-table/__tests__/index.test.js +59 -0
  8. package/dist/cjs/ai-modal-table/__tests__/index.test.tsx +98 -0
  9. package/dist/cjs/ai-modal-table/index.d.ts +4 -0
  10. package/dist/cjs/ai-modal-table/index.d.ts.map +1 -0
  11. package/dist/cjs/ai-modal-table/index.js +54 -0
  12. package/dist/cjs/ai-table/__tests__/index.test.d.ts +2 -0
  13. package/dist/cjs/ai-table/__tests__/index.test.d.ts.map +1 -0
  14. package/dist/cjs/ai-table/__tests__/index.test.js +348 -0
  15. package/dist/cjs/ai-table/__tests__/index.test.tsx +572 -0
  16. package/dist/cjs/ai-table/components/__tests__/content.test.d.ts +2 -0
  17. package/dist/cjs/ai-table/components/__tests__/content.test.d.ts.map +1 -0
  18. package/dist/cjs/ai-table/components/__tests__/content.test.js +1349 -0
  19. package/dist/cjs/ai-table/components/__tests__/content.test.tsx +1637 -0
  20. package/dist/cjs/ai-table/components/__tests__/filters.test.d.ts +2 -0
  21. package/dist/cjs/ai-table/components/__tests__/filters.test.d.ts.map +1 -0
  22. package/dist/cjs/ai-table/components/__tests__/filters.test.js +400 -0
  23. package/dist/cjs/ai-table/components/__tests__/filters.test.tsx +534 -0
  24. package/dist/cjs/ai-table/components/__tests__/footer.test.d.ts +2 -0
  25. package/dist/cjs/ai-table/components/__tests__/footer.test.d.ts.map +1 -0
  26. package/dist/cjs/ai-table/components/__tests__/footer.test.js +465 -0
  27. package/dist/cjs/ai-table/components/__tests__/footer.test.tsx +597 -0
  28. package/dist/cjs/ai-table/components/__tests__/mapper.test.d.ts +2 -0
  29. package/dist/cjs/ai-table/components/__tests__/mapper.test.d.ts.map +1 -0
  30. package/dist/cjs/ai-table/components/__tests__/mapper.test.js +453 -0
  31. package/dist/cjs/ai-table/components/__tests__/mapper.test.tsx +601 -0
  32. package/dist/cjs/ai-table/components/__tests__/pagination.test.d.ts +2 -0
  33. package/dist/cjs/ai-table/components/__tests__/pagination.test.d.ts.map +1 -0
  34. package/dist/cjs/ai-table/components/__tests__/pagination.test.js +430 -0
  35. package/dist/cjs/ai-table/components/__tests__/pagination.test.tsx +629 -0
  36. package/dist/cjs/ai-table/components/__tests__/row-actions.test.d.ts +2 -0
  37. package/dist/cjs/ai-table/components/__tests__/row-actions.test.d.ts.map +1 -0
  38. package/dist/cjs/ai-table/components/__tests__/row-actions.test.js +382 -0
  39. package/dist/cjs/ai-table/components/__tests__/row-actions.test.tsx +507 -0
  40. package/dist/cjs/ai-table/components/content.d.ts +11 -0
  41. package/dist/cjs/ai-table/components/content.d.ts.map +1 -0
  42. package/dist/cjs/ai-table/components/content.js +309 -0
  43. package/dist/cjs/ai-table/components/filters.d.ts +10 -0
  44. package/dist/cjs/ai-table/components/filters.d.ts.map +1 -0
  45. package/dist/cjs/ai-table/components/filters.js +55 -0
  46. package/dist/cjs/ai-table/components/footer.d.ts +12 -0
  47. package/dist/cjs/ai-table/components/footer.d.ts.map +1 -0
  48. package/dist/cjs/ai-table/components/footer.js +24 -0
  49. package/dist/cjs/ai-table/components/mapper.d.ts +11 -0
  50. package/dist/cjs/ai-table/components/mapper.d.ts.map +1 -0
  51. package/dist/cjs/ai-table/components/mapper.js +21 -0
  52. package/dist/cjs/ai-table/components/pagination.d.ts +11 -0
  53. package/dist/cjs/ai-table/components/pagination.d.ts.map +1 -0
  54. package/dist/cjs/ai-table/components/pagination.js +106 -0
  55. package/dist/cjs/ai-table/components/row-actions.d.ts +14 -0
  56. package/dist/cjs/ai-table/components/row-actions.d.ts.map +1 -0
  57. package/dist/cjs/ai-table/components/row-actions.js +52 -0
  58. package/dist/cjs/ai-table/constants/index.d.ts +17 -0
  59. package/dist/cjs/ai-table/constants/index.d.ts.map +1 -0
  60. package/dist/cjs/ai-table/constants/index.js +19 -0
  61. package/dist/cjs/ai-table/i18n/index.d.ts +3 -0
  62. package/dist/cjs/ai-table/i18n/index.d.ts.map +1 -0
  63. package/dist/cjs/ai-table/i18n/index.js +14 -0
  64. package/dist/cjs/ai-table/i18n/translations/en.d.ts +8 -0
  65. package/dist/cjs/ai-table/i18n/translations/en.d.ts.map +1 -0
  66. package/dist/cjs/ai-table/i18n/translations/en.js +9 -0
  67. package/dist/cjs/ai-table/i18n/translations/tr.d.ts +8 -0
  68. package/dist/cjs/ai-table/i18n/translations/tr.d.ts.map +1 -0
  69. package/dist/cjs/ai-table/i18n/translations/tr.js +9 -0
  70. package/dist/cjs/ai-table/index.d.ts +4 -0
  71. package/dist/cjs/ai-table/index.d.ts.map +1 -0
  72. package/dist/cjs/ai-table/index.js +71 -0
  73. package/dist/cjs/ai-table/utils/data-format/__tests__/index.test.d.ts +2 -0
  74. package/dist/cjs/ai-table/utils/data-format/__tests__/index.test.d.ts.map +1 -0
  75. package/dist/cjs/ai-table/utils/data-format/__tests__/index.test.js +146 -0
  76. package/dist/cjs/ai-table/utils/data-format/__tests__/index.test.ts +184 -0
  77. package/dist/cjs/ai-table/utils/data-format/index.d.ts +7 -0
  78. package/dist/cjs/ai-table/utils/data-format/index.d.ts.map +1 -0
  79. package/dist/cjs/ai-table/utils/data-format/index.js +43 -0
  80. package/dist/cjs/ai-table/utils/render-mapper-fields/__tests__/index.test.d.ts +2 -0
  81. package/dist/cjs/ai-table/utils/render-mapper-fields/__tests__/index.test.d.ts.map +1 -0
  82. package/dist/cjs/ai-table/utils/render-mapper-fields/__tests__/index.test.js +291 -0
  83. package/dist/cjs/ai-table/utils/render-mapper-fields/__tests__/index.test.tsx +399 -0
  84. package/dist/cjs/ai-table/utils/render-mapper-fields/index.d.ts +10 -0
  85. package/dist/cjs/ai-table/utils/render-mapper-fields/index.d.ts.map +1 -0
  86. package/dist/cjs/ai-table/utils/render-mapper-fields/index.js +48 -0
  87. package/dist/cjs/index.d.ts +4 -0
  88. package/dist/cjs/index.d.ts.map +1 -0
  89. package/dist/cjs/index.js +7 -0
  90. package/dist/cjs/types/index.d.ts +134 -0
  91. package/dist/cjs/types/index.d.ts.map +1 -0
  92. package/dist/cjs/types/index.js +2 -0
  93. package/dist/esm/__tests__/index.test.d.ts +2 -0
  94. package/dist/esm/__tests__/index.test.d.ts.map +1 -0
  95. package/dist/esm/__tests__/index.test.js +80 -0
  96. package/dist/esm/__tests__/index.test.tsx +94 -0
  97. package/dist/esm/ai-modal-table/__tests__/index.test.d.ts +2 -0
  98. package/dist/esm/ai-modal-table/__tests__/index.test.d.ts.map +1 -0
  99. package/dist/esm/ai-modal-table/__tests__/index.test.js +57 -0
  100. package/dist/esm/ai-modal-table/__tests__/index.test.tsx +98 -0
  101. package/dist/esm/ai-modal-table/index.d.ts +4 -0
  102. package/dist/esm/ai-modal-table/index.d.ts.map +1 -0
  103. package/dist/esm/ai-modal-table/index.js +50 -0
  104. package/dist/esm/ai-table/__tests__/index.test.d.ts +2 -0
  105. package/dist/esm/ai-table/__tests__/index.test.d.ts.map +1 -0
  106. package/dist/esm/ai-table/__tests__/index.test.js +346 -0
  107. package/dist/esm/ai-table/__tests__/index.test.tsx +572 -0
  108. package/dist/esm/ai-table/components/__tests__/content.test.d.ts +2 -0
  109. package/dist/esm/ai-table/components/__tests__/content.test.d.ts.map +1 -0
  110. package/dist/esm/ai-table/components/__tests__/content.test.js +1347 -0
  111. package/dist/esm/ai-table/components/__tests__/content.test.tsx +1637 -0
  112. package/dist/esm/ai-table/components/__tests__/filters.test.d.ts +2 -0
  113. package/dist/esm/ai-table/components/__tests__/filters.test.d.ts.map +1 -0
  114. package/dist/esm/ai-table/components/__tests__/filters.test.js +398 -0
  115. package/dist/esm/ai-table/components/__tests__/filters.test.tsx +534 -0
  116. package/dist/esm/ai-table/components/__tests__/footer.test.d.ts +2 -0
  117. package/dist/esm/ai-table/components/__tests__/footer.test.d.ts.map +1 -0
  118. package/dist/esm/ai-table/components/__tests__/footer.test.js +463 -0
  119. package/dist/esm/ai-table/components/__tests__/footer.test.tsx +597 -0
  120. package/dist/esm/ai-table/components/__tests__/mapper.test.d.ts +2 -0
  121. package/dist/esm/ai-table/components/__tests__/mapper.test.d.ts.map +1 -0
  122. package/dist/esm/ai-table/components/__tests__/mapper.test.js +451 -0
  123. package/dist/esm/ai-table/components/__tests__/mapper.test.tsx +601 -0
  124. package/dist/esm/ai-table/components/__tests__/pagination.test.d.ts +2 -0
  125. package/dist/esm/ai-table/components/__tests__/pagination.test.d.ts.map +1 -0
  126. package/dist/esm/ai-table/components/__tests__/pagination.test.js +428 -0
  127. package/dist/esm/ai-table/components/__tests__/pagination.test.tsx +629 -0
  128. package/dist/esm/ai-table/components/__tests__/row-actions.test.d.ts +2 -0
  129. package/dist/esm/ai-table/components/__tests__/row-actions.test.d.ts.map +1 -0
  130. package/dist/esm/ai-table/components/__tests__/row-actions.test.js +380 -0
  131. package/dist/esm/ai-table/components/__tests__/row-actions.test.tsx +507 -0
  132. package/dist/esm/ai-table/components/content.d.ts +11 -0
  133. package/dist/esm/ai-table/components/content.d.ts.map +1 -0
  134. package/dist/esm/ai-table/components/content.js +305 -0
  135. package/dist/esm/ai-table/components/filters.d.ts +10 -0
  136. package/dist/esm/ai-table/components/filters.d.ts.map +1 -0
  137. package/dist/esm/ai-table/components/filters.js +51 -0
  138. package/dist/esm/ai-table/components/footer.d.ts +12 -0
  139. package/dist/esm/ai-table/components/footer.d.ts.map +1 -0
  140. package/dist/esm/ai-table/components/footer.js +20 -0
  141. package/dist/esm/ai-table/components/mapper.d.ts +11 -0
  142. package/dist/esm/ai-table/components/mapper.d.ts.map +1 -0
  143. package/dist/esm/ai-table/components/mapper.js +17 -0
  144. package/dist/esm/ai-table/components/pagination.d.ts +11 -0
  145. package/dist/esm/ai-table/components/pagination.d.ts.map +1 -0
  146. package/dist/esm/ai-table/components/pagination.js +102 -0
  147. package/dist/esm/ai-table/components/row-actions.d.ts +14 -0
  148. package/dist/esm/ai-table/components/row-actions.d.ts.map +1 -0
  149. package/dist/esm/ai-table/components/row-actions.js +48 -0
  150. package/dist/esm/ai-table/constants/index.d.ts +17 -0
  151. package/dist/esm/ai-table/constants/index.d.ts.map +1 -0
  152. package/dist/esm/ai-table/constants/index.js +16 -0
  153. package/dist/esm/ai-table/i18n/index.d.ts +3 -0
  154. package/dist/esm/ai-table/i18n/index.d.ts.map +1 -0
  155. package/dist/esm/ai-table/i18n/index.js +11 -0
  156. package/dist/esm/ai-table/i18n/translations/en.d.ts +8 -0
  157. package/dist/esm/ai-table/i18n/translations/en.d.ts.map +1 -0
  158. package/dist/esm/ai-table/i18n/translations/en.js +7 -0
  159. package/dist/esm/ai-table/i18n/translations/tr.d.ts +8 -0
  160. package/dist/esm/ai-table/i18n/translations/tr.d.ts.map +1 -0
  161. package/dist/esm/ai-table/i18n/translations/tr.js +7 -0
  162. package/dist/esm/ai-table/index.d.ts +4 -0
  163. package/dist/esm/ai-table/index.d.ts.map +1 -0
  164. package/dist/esm/ai-table/index.js +67 -0
  165. package/dist/esm/ai-table/utils/data-format/__tests__/index.test.d.ts +2 -0
  166. package/dist/esm/ai-table/utils/data-format/__tests__/index.test.d.ts.map +1 -0
  167. package/dist/esm/ai-table/utils/data-format/__tests__/index.test.js +144 -0
  168. package/dist/esm/ai-table/utils/data-format/__tests__/index.test.ts +184 -0
  169. package/dist/esm/ai-table/utils/data-format/index.d.ts +7 -0
  170. package/dist/esm/ai-table/utils/data-format/index.d.ts.map +1 -0
  171. package/dist/esm/ai-table/utils/data-format/index.js +38 -0
  172. package/dist/esm/ai-table/utils/render-mapper-fields/__tests__/index.test.d.ts +2 -0
  173. package/dist/esm/ai-table/utils/render-mapper-fields/__tests__/index.test.d.ts.map +1 -0
  174. package/dist/esm/ai-table/utils/render-mapper-fields/__tests__/index.test.js +289 -0
  175. package/dist/esm/ai-table/utils/render-mapper-fields/__tests__/index.test.tsx +399 -0
  176. package/dist/esm/ai-table/utils/render-mapper-fields/index.d.ts +10 -0
  177. package/dist/esm/ai-table/utils/render-mapper-fields/index.d.ts.map +1 -0
  178. package/dist/esm/ai-table/utils/render-mapper-fields/index.js +44 -0
  179. package/dist/esm/index.d.ts +4 -0
  180. package/dist/esm/index.d.ts.map +1 -0
  181. package/dist/esm/index.js +2 -0
  182. package/dist/esm/types/index.d.ts +134 -0
  183. package/dist/esm/types/index.d.ts.map +1 -0
  184. package/dist/esm/types/index.js +1 -0
  185. package/package.json +60 -0
@@ -0,0 +1,305 @@
1
+ /* eslint-disable @typescript-eslint/no-explicit-any */
2
+ import { Icon } from '@akinon/icons';
3
+ import { Input } from '@akinon/ui-input';
4
+ import { Flex } from '@akinon/ui-layout';
5
+ import { useToken } from '@akinon/ui-theme';
6
+ import { useStyleRegister } from '@ant-design/cssinjs';
7
+ import { ConfigProvider } from 'antd';
8
+ import classNames from 'classnames';
9
+ import { get } from 'lodash-es';
10
+ import * as React from 'react';
11
+ import { IS_EDITING_INITIAL_VALUE } from '../constants';
12
+ import { i18n } from '../i18n';
13
+ import { TableMapper } from './mapper';
14
+ import { ActionButtons } from './row-actions';
15
+ const { t } = i18n;
16
+ export const TableContent = ({ columns, customActionButtons, data, editDataIndexes, expandedRows, onEdit, onToggleExpand, onToggleSelection, rowKey, selectedRows, mapperConfig }) => {
17
+ const { getPrefixCls, theme } = React.useContext(ConfigProvider.ConfigContext);
18
+ const { token, hashId } = useToken();
19
+ const baseCls = getPrefixCls('ai-modal-table');
20
+ const [isEditingPk, setIsEditingPk] = React.useState(IS_EDITING_INITIAL_VALUE);
21
+ const [gradientLinePositions, setGradientLinePositions] = React.useState([]);
22
+ const [badgePositions, setBadgePositions] = React.useState([]);
23
+ const [tableHeight, setTableHeight] = React.useState(0);
24
+ const tableRef = React.useRef(null);
25
+ const headerRefs = React.useRef(new Map());
26
+ const rowRefs = React.useRef(new Map());
27
+ const { dataIndex: mapperDataIndex, onAddItem, onItemChange, onRemoveItem } = mapperConfig || {};
28
+ const hasMapper = !!mapperDataIndex;
29
+ const hasEdit = !!onEdit && !!editDataIndexes && editDataIndexes.length > 0;
30
+ const gradientColumnIndexes = React.useMemo(() => {
31
+ return columns
32
+ .map((col, index) => (col.hasGradientLine ? index : -1))
33
+ .filter(index => index !== -1);
34
+ }, [columns]);
35
+ const calculateGradientLinePositions = React.useCallback(() => {
36
+ const positions = [];
37
+ gradientColumnIndexes.forEach(colIndex => {
38
+ const headerCell = headerRefs.current.get(colIndex);
39
+ if (headerCell) {
40
+ positions.push(headerCell.offsetLeft);
41
+ }
42
+ });
43
+ return positions;
44
+ }, [gradientColumnIndexes]);
45
+ /**
46
+ * Calculates badge positions for rows with multiple mapper fields.
47
+ * Badges are displayed on the gradient line to indicate field count.
48
+ */
49
+ const calculateGradientBadgePositions = React.useCallback((gradientX) => {
50
+ const badges = [];
51
+ if (gradientX === undefined || !hasMapper) {
52
+ return badges;
53
+ }
54
+ data.forEach(row => {
55
+ const rowId = get(row, rowKey);
56
+ const rowEl = rowRefs.current.get(rowId);
57
+ if (rowEl) {
58
+ const fields = row[mapperDataIndex];
59
+ const count = Array.isArray(fields) ? fields.length : 0;
60
+ if (count > 1) {
61
+ badges.push({
62
+ x: gradientX + 1,
63
+ y: rowEl.offsetTop + rowEl.offsetHeight / 2,
64
+ count,
65
+ rowId
66
+ });
67
+ }
68
+ }
69
+ });
70
+ return badges;
71
+ }, [hasMapper, mapperDataIndex, data, rowKey]);
72
+ const calculateAllPositions = React.useCallback(() => {
73
+ if (tableRef.current) {
74
+ setTableHeight(tableRef.current.offsetHeight);
75
+ }
76
+ const linePositions = calculateGradientLinePositions();
77
+ setGradientLinePositions(linePositions);
78
+ if (!hasMapper)
79
+ return;
80
+ const badges = calculateGradientBadgePositions(linePositions[0]);
81
+ setBadgePositions(badges);
82
+ }, [calculateGradientLinePositions, calculateGradientBadgePositions]);
83
+ // initial mount and resize changes
84
+ React.useEffect(() => {
85
+ calculateAllPositions();
86
+ window.addEventListener('resize', calculateAllPositions);
87
+ return () => window.removeEventListener('resize', calculateAllPositions);
88
+ }, [calculateAllPositions]);
89
+ React.useEffect(() => {
90
+ // wait for the DOM to update, then recalculate positions
91
+ const rafId = requestAnimationFrame(() => {
92
+ calculateAllPositions();
93
+ });
94
+ return () => cancelAnimationFrame(rafId);
95
+ }, [data, expandedRows, isEditingPk, calculateAllPositions]);
96
+ const isMapperColumn = (dataIndex) => {
97
+ return hasMapper && mapperDataIndex === dataIndex;
98
+ };
99
+ const checkIsEditing = (rowId) => {
100
+ return isEditingPk === rowId;
101
+ };
102
+ const getRowId = (row) => {
103
+ return get(row, rowKey);
104
+ };
105
+ const isRowSelected = (rowId) => {
106
+ return selectedRows.includes(rowId);
107
+ };
108
+ const isRowExpanded = (rowId) => {
109
+ return expandedRows.includes(rowId);
110
+ };
111
+ const renderMapper = ({ rowId, value, dataIndex }) => {
112
+ const isExpanded = isRowExpanded(rowId);
113
+ const displayedValues = isExpanded ? value : value.slice(0, 1);
114
+ const handleExpand = () => {
115
+ if (!isExpanded) {
116
+ onToggleExpand(rowId);
117
+ }
118
+ };
119
+ const handleAddItem = () => {
120
+ if (!onAddItem)
121
+ return;
122
+ handleExpand();
123
+ onAddItem(rowId, dataIndex);
124
+ };
125
+ const handleRemoveItem = (index) => () => {
126
+ if (!onRemoveItem)
127
+ return;
128
+ onRemoveItem({
129
+ pk: rowId,
130
+ dataIndex,
131
+ index
132
+ });
133
+ };
134
+ const handleItemChange = ({ key, value, index }) => {
135
+ if (!onItemChange)
136
+ return;
137
+ // Build the updated array with the changed field value
138
+ const updatedArray = displayedValues.map((item, i) => i === index
139
+ ? Object.assign(Object.assign({}, item), { [key]: Object.assign(Object.assign({}, item[key]), { value }) }) : item);
140
+ onItemChange(rowId, {
141
+ [dataIndex]: updatedArray
142
+ });
143
+ };
144
+ return (React.createElement(TableMapper, { values: displayedValues, handleAddItem: handleAddItem, handleRemoveItem: handleRemoveItem, handleItemChange: handleItemChange }));
145
+ };
146
+ const renderCellValue = ({ column, row, rowId }) => {
147
+ const dataIndex = get(column, 'dataIndex', '');
148
+ const value = get(row, dataIndex, '');
149
+ if (hasEdit &&
150
+ checkIsEditing(rowId) &&
151
+ editDataIndexes.includes(dataIndex)) {
152
+ const handleOnChangeValue = (e) => {
153
+ const currentValue = e.target.value;
154
+ onEdit(rowId, {
155
+ [dataIndex]: currentValue
156
+ });
157
+ };
158
+ return (React.createElement(Input, { className: "w-44 h-9", onChange: handleOnChangeValue, value: value }));
159
+ }
160
+ if (hasMapper && isMapperColumn(dataIndex)) {
161
+ return renderMapper({
162
+ rowId,
163
+ value,
164
+ dataIndex
165
+ });
166
+ }
167
+ if (column.render) {
168
+ return column.render(value, row);
169
+ }
170
+ if (typeof value === 'object') {
171
+ return '';
172
+ }
173
+ return value;
174
+ };
175
+ const renderExpandButton = (rowId) => {
176
+ const isExpanded = isRowExpanded(rowId);
177
+ const handleClick = () => {
178
+ onToggleExpand(rowId);
179
+ };
180
+ return (React.createElement(Icon, { size: 10, color: "var(--color-azure-500)", icon: "chevron_down", className: classNames('mr-3 cursor-pointer', hashId, {
181
+ [`${baseCls}__icon--collapsed`]: !isExpanded
182
+ }), onClick: handleClick }));
183
+ };
184
+ const renderTableCells = (row, rowId) => {
185
+ return columns.map((column, colIndex) => {
186
+ const isFirstColumn = colIndex === 0;
187
+ return (React.createElement("td", { className: "text-blue-50 font-normal text-base whitespace-nowrap py-0 px-5", key: `cell-${rowId}-${column.dataIndex || colIndex}` },
188
+ isFirstColumn && hasMapper && renderExpandButton(rowId),
189
+ renderCellValue({
190
+ column,
191
+ row,
192
+ rowId
193
+ })));
194
+ });
195
+ };
196
+ const getRowRef = React.useCallback((rowId) => {
197
+ return (el) => {
198
+ if (el) {
199
+ rowRefs.current.set(rowId, el);
200
+ }
201
+ };
202
+ }, []);
203
+ const renderTableRow = (row, isLastChild) => {
204
+ const rowId = getRowId(row);
205
+ const isSelected = isRowSelected(rowId);
206
+ return (React.createElement("tr", { ref: getRowRef(rowId), className: classNames('border-0 border-b border-solid border-ebonyClay-200 h-12', {
207
+ 'bg-green-952-10': isSelected,
208
+ 'border-b-0': isLastChild
209
+ }), key: rowId },
210
+ renderTableCells(row, rowId),
211
+ React.createElement("td", { className: "text-blue-50 font-normal text-base py-0 px-4 whitespace-nowrap text-center min-w-24" },
212
+ React.createElement(ActionButtons, { customActionButtons: customActionButtons, hasEdit: hasEdit, isEditing: checkIsEditing(rowId), isSelected: isSelected, onToggleSelection: onToggleSelection, rowId: rowId, setIsEditingPk: setIsEditingPk }))));
213
+ };
214
+ const renderEmptyRow = () => {
215
+ return (React.createElement("tr", null,
216
+ React.createElement("td", { className: "font-normal text-center text-gray-500 text-sm py-10 px-4", colSpan: columns.length + 1 }, t('filter.no.match'))));
217
+ };
218
+ const renderGradientOverlay = () => {
219
+ return (React.createElement(React.Fragment, null,
220
+ gradientLinePositions.map((left, index) => (React.createElement("div", { key: `gradient-line-${index}`, className: `${baseCls}__gradient-line ${hashId} absolute z-10 pointer-events-none rounded-sm top-5`, style: {
221
+ left,
222
+ height: tableHeight > 0 ? tableHeight - 28 : 'calc(100% - 28px)'
223
+ } }))),
224
+ hasMapper &&
225
+ badgePositions.map(badge => (React.createElement("div", { key: `gradient-badge-${badge.rowId}`, className: `${baseCls}__gradient-badge ${hashId} absolute size-5 text-xs text-neutral-50 font-medium z-20 rounded-full flex items-center justify-center`, style: {
226
+ left: badge.x,
227
+ top: badge.y,
228
+ transform: 'translate(-50%, -50%)'
229
+ } }, badge.count)))));
230
+ };
231
+ const renderTableRows = () => {
232
+ if (data.length === 0) {
233
+ return renderEmptyRow();
234
+ }
235
+ return data.map((row, index) => {
236
+ const isLastChild = index === data.length - 1;
237
+ return renderTableRow(row, isLastChild);
238
+ });
239
+ };
240
+ const getHeaderRef = React.useCallback((index, hasGradientLine) => {
241
+ if (!hasGradientLine)
242
+ return undefined;
243
+ return (el) => {
244
+ if (el)
245
+ headerRefs.current.set(index, el);
246
+ };
247
+ }, []);
248
+ const renderTableHeaders = () => {
249
+ return (React.createElement("tr", null, columns.map((column, index) => (React.createElement("th", { ref: getHeaderRef(index, column.hasGradientLine), className: "p-5 uppercase font-medium text-xs text-left text-gray-400", key: `header-${column.dataIndex || index}` },
250
+ React.createElement(Flex, { align: "center", gap: 8 },
251
+ React.createElement("span", null, column.title),
252
+ column.hasSparkle && (React.createElement(Icon, { color: "var(--color-azure-500)", icon: "ai-star", size: 17 }))))))));
253
+ };
254
+ const useStyle = useStyleRegister({
255
+ token: token,
256
+ path: ['AiModalTableContent'],
257
+ theme: theme
258
+ }, () => {
259
+ const prefixCls = `:where(.${hashId}).${baseCls}`;
260
+ return {
261
+ [`${prefixCls}__table-wrapper`]: {
262
+ maxHeight: '420px',
263
+ scrollbarGutter: 'stable',
264
+ '&::-webkit-scrollbar': {
265
+ width: '8px',
266
+ height: '8px'
267
+ },
268
+ '&::-webkit-scrollbar-track': {
269
+ background: 'transparent'
270
+ },
271
+ '&::-webkit-scrollbar-thumb': {
272
+ background: 'var(--color-ebonyClay-50)',
273
+ borderRadius: '4px'
274
+ },
275
+ '&::-webkit-scrollbar-thumb:hover': {
276
+ background: 'var(--color-ebonyClay-300)'
277
+ },
278
+ '&::-webkit-scrollbar-corner': {
279
+ background: 'transparent'
280
+ },
281
+ scrollbarColor: 'var(--color-ebonyClay-200) transparent'
282
+ },
283
+ [`${prefixCls}__table-element`]: {
284
+ borderCollapse: 'collapse'
285
+ },
286
+ [`${prefixCls}__icon--collapsed`]: {
287
+ transform: 'rotate(-90deg)'
288
+ },
289
+ [`${prefixCls}__gradient-line`]: {
290
+ width: '2px',
291
+ background: 'linear-gradient(180deg, var(--color-red-400) 0%, var(--color-azure-500) 100%)'
292
+ },
293
+ [`${prefixCls}__gradient-badge`]: {
294
+ background: 'linear-gradient(180deg, var(--color-red-400) 0%, var(--color-azure-500) 100%)'
295
+ }
296
+ };
297
+ });
298
+ return useStyle(React.createElement("div", { className: "bg-ebonyClay-450 rounded-lg overflow-hidden" },
299
+ React.createElement("div", { className: `${baseCls}__table-wrapper ${hashId} overflow-x-auto overflow-y-auto` },
300
+ React.createElement("div", { className: "relative" },
301
+ renderGradientOverlay(),
302
+ React.createElement("table", { ref: tableRef, className: `${baseCls}__table-element ${hashId} w-full bg-ebonyClay-450` },
303
+ React.createElement("thead", null, renderTableHeaders()),
304
+ React.createElement("tbody", null, renderTableRows()))))));
305
+ };
@@ -0,0 +1,10 @@
1
+ import * as React from 'react';
2
+ import type { TableBaseProps } from '../../types';
3
+ interface TableFiltersProps {
4
+ filters: TableBaseProps['filters'];
5
+ filterValues: Record<string, string>;
6
+ onFilterChange: (key: string, value: string) => void;
7
+ }
8
+ export declare const TableFilters: ({ filters, filterValues, onFilterChange }: TableFiltersProps) => React.JSX.Element | null;
9
+ export {};
10
+ //# sourceMappingURL=filters.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filters.d.ts","sourceRoot":"","sources":["../../../../src/ai-table/components/filters.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAGlD,UAAU,iBAAiB;IACzB,OAAO,EAAE,cAAc,CAAC,SAAS,CAAC,CAAC;IACnC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,cAAc,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACtD;AAED,eAAO,MAAM,YAAY,GAAI,2CAI1B,iBAAiB,6BA4FnB,CAAC"}
@@ -0,0 +1,51 @@
1
+ import { Icon } from '@akinon/icons';
2
+ import { Input } from '@akinon/ui-input';
3
+ import { Flex } from '@akinon/ui-layout';
4
+ import { debounce } from 'lodash-es';
5
+ import * as React from 'react';
6
+ import { DEBOUNCE_DELAY, FILTER_TYPES } from '../constants';
7
+ export const TableFilters = ({ filters, filterValues, onFilterChange }) => {
8
+ const [localValues, setLocalValues] = React.useState({});
9
+ const debouncedOnFilterChange = React.useRef(null);
10
+ React.useEffect(() => {
11
+ debouncedOnFilterChange.current = debounce((key, value) => {
12
+ onFilterChange(key, value);
13
+ }, DEBOUNCE_DELAY);
14
+ return () => {
15
+ if (debouncedOnFilterChange.current) {
16
+ debouncedOnFilterChange.current.cancel();
17
+ }
18
+ };
19
+ }, [onFilterChange]);
20
+ React.useEffect(() => {
21
+ setLocalValues(filterValues);
22
+ }, [filterValues]);
23
+ const handleInputChange = (key, value) => {
24
+ setLocalValues(prev => (Object.assign(Object.assign({}, prev), { [key]: value })));
25
+ if (debouncedOnFilterChange.current) {
26
+ debouncedOnFilterChange.current(key, value);
27
+ }
28
+ };
29
+ const renderInputFilter = (filter, index) => {
30
+ const { key, placeholder } = filter;
31
+ const handleOnChange = (e) => {
32
+ handleInputChange(key, e.target.value);
33
+ };
34
+ return (React.createElement(Flex, { align: "center", rootClassName: "relative", key: `filter-${key}-${index}` },
35
+ React.createElement(Input, { className: "h-9 w-44", name: key, onChange: handleOnChange, placeholder: placeholder, value: localValues[key] || '' }),
36
+ React.createElement(Icon, { className: "absolute cursor-pointer right-2 top-2", icon: "search", color: "var(--color-gray-500)", size: 16 })));
37
+ };
38
+ const renderFilter = (filter, index) => {
39
+ const { type } = filter;
40
+ switch (type) {
41
+ case FILTER_TYPES.INPUT:
42
+ return renderInputFilter(filter, index);
43
+ default:
44
+ return null;
45
+ }
46
+ };
47
+ if (!filters || filters.length === 0) {
48
+ return null;
49
+ }
50
+ return (React.createElement(Flex, { flex: 1, gap: 12, wrap: true }, filters.map((filter, index) => renderFilter(filter, index))));
51
+ };
@@ -0,0 +1,12 @@
1
+ import * as React from 'react';
2
+ interface TableFooterProps {
3
+ isSubmitting: boolean;
4
+ selectedCount: number;
5
+ submitAllLabel: string;
6
+ submitSelectedLabel: string;
7
+ onSubmitAll?: () => void;
8
+ onSubmitSelected?: () => void;
9
+ }
10
+ export declare const TableFooter: ({ isSubmitting, selectedCount, submitAllLabel, submitSelectedLabel, onSubmitAll, onSubmitSelected }: TableFooterProps) => React.JSX.Element;
11
+ export {};
12
+ //# sourceMappingURL=footer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"footer.d.ts","sourceRoot":"","sources":["../../../../src/ai-table/components/footer.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,UAAU,gBAAgB;IACxB,YAAY,EAAE,OAAO,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,IAAI,CAAC;CAC/B;AAED,eAAO,MAAM,WAAW,GAAI,qGAOzB,gBAAgB,sBAmClB,CAAC"}
@@ -0,0 +1,20 @@
1
+ import { Button } from '@akinon/ui-button';
2
+ import { Flex } from '@akinon/ui-layout';
3
+ import * as React from 'react';
4
+ export const TableFooter = ({ isSubmitting, selectedCount, submitAllLabel, submitSelectedLabel, onSubmitAll, onSubmitSelected }) => {
5
+ const handleSubmitAll = () => {
6
+ if (onSubmitAll) {
7
+ onSubmitAll();
8
+ }
9
+ };
10
+ const handleSubmitSelected = () => {
11
+ if (onSubmitSelected) {
12
+ onSubmitSelected();
13
+ }
14
+ };
15
+ return (React.createElement(Flex, { justify: "end", gap: 10 },
16
+ React.createElement(Button, { className: "uppercase font-semibold", disabled: isSubmitting, loading: isSubmitting, onClick: handleSubmitAll }, submitAllLabel),
17
+ React.createElement(Button, { className: "uppercase font-semibold", disabled: selectedCount === 0 || isSubmitting, loading: isSubmitting, onClick: handleSubmitSelected, type: "primary" },
18
+ submitSelectedLabel,
19
+ selectedCount > 0 && ` (${selectedCount})`)));
20
+ };
@@ -0,0 +1,11 @@
1
+ import * as React from 'react';
2
+ import type { HandleMapperItemChange, MapperRow } from '../../types';
3
+ interface TableMapperProps {
4
+ values: MapperRow[];
5
+ handleAddItem: () => void;
6
+ handleRemoveItem: (index: number) => () => void;
7
+ handleItemChange: HandleMapperItemChange;
8
+ }
9
+ export declare const TableMapper: ({ values, handleAddItem, handleRemoveItem, handleItemChange }: TableMapperProps) => React.JSX.Element;
10
+ export {};
11
+ //# sourceMappingURL=mapper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mapper.d.ts","sourceRoot":"","sources":["../../../../src/ai-table/components/mapper.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAAE,sBAAsB,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAGrE,UAAU,gBAAgB;IACxB,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,aAAa,EAAE,MAAM,IAAI,CAAC;IAC1B,gBAAgB,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,IAAI,CAAC;IAChD,gBAAgB,EAAE,sBAAsB,CAAC;CAC1C;AAED,eAAO,MAAM,WAAW,GAAI,+DAKzB,gBAAgB,sBAgClB,CAAC"}
@@ -0,0 +1,17 @@
1
+ import { Icon } from '@akinon/icons';
2
+ import { Flex } from '@akinon/ui-layout';
3
+ import * as React from 'react';
4
+ import { renderMapperRow } from '../utils/render-mapper-fields';
5
+ export const TableMapper = ({ values, handleAddItem, handleRemoveItem, handleItemChange }) => {
6
+ return (React.createElement(Flex, { gap: 5, vertical: true, rootClassName: "py-1" }, values.map((row, index) => {
7
+ return (React.createElement(Flex, { gap: 12, align: "center", key: index },
8
+ renderMapperRow({
9
+ row,
10
+ index,
11
+ handleItemChange
12
+ }),
13
+ React.createElement(Flex, { gap: 10 },
14
+ React.createElement(Icon, { icon: "plus", size: 20, color: "var(--color-green-500)", className: "cursor-pointer", onClick: handleAddItem }),
15
+ React.createElement(Icon, { icon: "minus", size: 20, color: "var(--color-red-425)", className: "cursor-pointer", onClick: handleRemoveItem(index) }))));
16
+ })));
17
+ };
@@ -0,0 +1,11 @@
1
+ import * as React from 'react';
2
+ interface TablePaginationProps {
3
+ currentPage: number;
4
+ pageSize: number;
5
+ total: number;
6
+ onPageChange: (page: number) => void;
7
+ onPageSizeChange: (size: number) => void;
8
+ }
9
+ export declare const TablePagination: ({ currentPage, onPageChange, onPageSizeChange, pageSize, total }: TablePaginationProps) => React.JSX.Element;
10
+ export {};
11
+ //# sourceMappingURL=pagination.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pagination.d.ts","sourceRoot":"","sources":["../../../../src/ai-table/components/pagination.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAO/B,UAAU,oBAAoB;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,gBAAgB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAC1C;AAED,eAAO,MAAM,eAAe,GAAI,kEAM7B,oBAAoB,sBA+HtB,CAAC"}
@@ -0,0 +1,102 @@
1
+ import { Flex } from '@akinon/ui-layout';
2
+ import { Pagination } from '@akinon/ui-pagination';
3
+ import { Select } from '@akinon/ui-select';
4
+ import { useToken } from '@akinon/ui-theme';
5
+ import { useStyleRegister } from '@ant-design/cssinjs';
6
+ import { ConfigProvider } from 'antd';
7
+ import * as React from 'react';
8
+ import { DEFAULT_CURRENT_PAGE, PAGE_SIZE_OPTIONS } from '../constants';
9
+ import { i18n } from '../i18n';
10
+ const { t } = i18n;
11
+ export const TablePagination = ({ currentPage, onPageChange, onPageSizeChange, pageSize, total }) => {
12
+ const { getPrefixCls, theme } = React.useContext(ConfigProvider.ConfigContext);
13
+ const { token, hashId } = useToken();
14
+ const baseCls = getPrefixCls('ai-modal-table');
15
+ const handlePageChange = (page) => {
16
+ onPageChange(page);
17
+ };
18
+ const handlePageSizeChange = (value) => {
19
+ onPageSizeChange(value);
20
+ onPageChange(DEFAULT_CURRENT_PAGE);
21
+ };
22
+ const useStyle = useStyleRegister({
23
+ token: token,
24
+ path: ['AiModalTablePagination'],
25
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
26
+ theme: theme
27
+ }, () => {
28
+ const prefixCls = `:where(.${hashId}).${baseCls}`;
29
+ return {
30
+ [`${prefixCls}__pagination-element`]: {
31
+ '&.akinon-pagination': {
32
+ '.akinon-pagination-prev, .akinon-pagination-next': {
33
+ height: 'unset !important',
34
+ lineHeight: 'unset !important',
35
+ margin: '0 !important',
36
+ display: 'inline-block !important',
37
+ verticalAlign: 'middle',
38
+ '&.akinon-pagination-disabled': {
39
+ button: {
40
+ cursor: 'not-allowed'
41
+ }
42
+ },
43
+ '.akinon-btn': {
44
+ backgroundColor: 'var(--color-ebonyClay-475) !important',
45
+ borderColor: 'var(--color-ebonyClay-550) !important',
46
+ borderLeft: 'none',
47
+ borderRight: 'none',
48
+ height: '40px !important',
49
+ '.akinon-btn-icon': {
50
+ color: 'var(--color-gray-500) !important'
51
+ },
52
+ '&:hover': {
53
+ backgroundColor: 'var(--color-ebonyClay-475) !important',
54
+ borderColor: 'var(--color-ebonyClay-550) !important',
55
+ '.anticon': {
56
+ color: 'var(--color-gray-500) !important'
57
+ }
58
+ }
59
+ }
60
+ },
61
+ '.akinon-pagination-prev': {
62
+ borderRadius: '5px 0 0 5px !important'
63
+ },
64
+ '.akinon-pagination-next': {
65
+ borderRadius: '0 5px 5px 0 !important'
66
+ },
67
+ '.akinon-pagination-simple-pager': {
68
+ margin: '0 !important',
69
+ backgroundColor: 'var(--color-ebonyClay-475) !important',
70
+ border: '1px solid var(--color-ebonyClay-550) !important',
71
+ borderLeft: 'none !important',
72
+ borderRight: 'none !important',
73
+ borderRadius: 0,
74
+ color: 'var(--color-gray-500) !important',
75
+ padding: '0 8px',
76
+ height: '40px',
77
+ display: 'inline-flex !important',
78
+ alignItems: 'center',
79
+ justifyContent: 'center',
80
+ verticalAlign: 'middle',
81
+ input: {
82
+ color: 'var(--color-gray-500) !important',
83
+ backgroundColor: 'transparent !important',
84
+ border: 'none !important',
85
+ textAlign: 'center',
86
+ boxShadow: 'none !important'
87
+ },
88
+ '.akinon-pagination-slash': {
89
+ color: 'var(--color-gray-500) !important',
90
+ margin: '0 4px'
91
+ }
92
+ }
93
+ }
94
+ }
95
+ };
96
+ });
97
+ return useStyle(React.createElement(Flex, { align: "center", rootClassName: "ml-auto", gap: 8 },
98
+ React.createElement(Flex, { align: "center", gap: 12, rootClassName: "mr-5" },
99
+ React.createElement("span", { className: "text-sm text-gray-500" }, t('show.value')),
100
+ React.createElement(Select, { onChange: handlePageSizeChange, options: PAGE_SIZE_OPTIONS, value: pageSize })),
101
+ React.createElement(Pagination, { className: `${baseCls}__pagination-element ${hashId}`, current: currentPage, onChange: handlePageChange, pageSize: pageSize, showSizeChanger: false, theme: "dark", total: total })));
102
+ };
@@ -0,0 +1,14 @@
1
+ import * as React from 'react';
2
+ import type { TableBaseProps } from '../../types';
3
+ interface ActionButtonsProps {
4
+ hasEdit: boolean;
5
+ isEditing: boolean;
6
+ isSelected: boolean;
7
+ rowId: number | string;
8
+ setIsEditingPk: React.Dispatch<React.SetStateAction<null | number | string>>;
9
+ onToggleSelection: (rowId: number | string) => void;
10
+ customActionButtons?: TableBaseProps['customActionButtons'];
11
+ }
12
+ export declare const ActionButtons: ({ customActionButtons, hasEdit, isEditing, isSelected, onToggleSelection, rowId, setIsEditingPk }: ActionButtonsProps) => React.JSX.Element;
13
+ export {};
14
+ //# sourceMappingURL=row-actions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"row-actions.d.ts","sourceRoot":"","sources":["../../../../src/ai-table/components/row-actions.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAGlD,UAAU,kBAAkB;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;IACpB,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,cAAc,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,GAAG,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC;IAC7E,iBAAiB,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,KAAK,IAAI,CAAC;IACpD,mBAAmB,CAAC,EAAE,cAAc,CAAC,qBAAqB,CAAC,CAAC;CAC7D;AAED,eAAO,MAAM,aAAa,GAAI,mGAQ3B,kBAAkB,sBAuEpB,CAAC"}
@@ -0,0 +1,48 @@
1
+ import { Button } from '@akinon/ui-button';
2
+ import { Flex } from '@akinon/ui-layout';
3
+ import { useToken } from '@akinon/ui-theme';
4
+ import { useStyleRegister } from '@ant-design/cssinjs';
5
+ import { ConfigProvider } from 'antd';
6
+ import classNames from 'classnames';
7
+ import * as React from 'react';
8
+ import { IS_EDITING_INITIAL_VALUE } from '../constants';
9
+ export const ActionButtons = ({ customActionButtons, hasEdit, isEditing, isSelected, onToggleSelection, rowId, setIsEditingPk }) => {
10
+ const { getPrefixCls, theme } = React.useContext(ConfigProvider.ConfigContext);
11
+ const { token, hashId } = useToken();
12
+ const baseCls = getPrefixCls('ai-modal-table');
13
+ const handleToggle = (e) => {
14
+ e.stopPropagation();
15
+ onToggleSelection(rowId);
16
+ };
17
+ const handleOnClickEdit = () => {
18
+ setIsEditingPk(isEditing ? IS_EDITING_INITIAL_VALUE : rowId);
19
+ };
20
+ const renderCustomActionButtons = () => {
21
+ if (!customActionButtons)
22
+ return null;
23
+ return customActionButtons(rowId);
24
+ };
25
+ const useStyle = useStyleRegister({
26
+ token: token,
27
+ path: ['AiModalTableActionButtons'],
28
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
29
+ theme: theme
30
+ }, () => {
31
+ const prefixCls = `:where(.${hashId}).${baseCls}`;
32
+ return {
33
+ [`${prefixCls}__action-button`]: {
34
+ width: '1.75rem !important',
35
+ transition: 'all 0.2s',
36
+ '&:hover': {
37
+ opacity: 0.8
38
+ }
39
+ }
40
+ };
41
+ });
42
+ return useStyle(React.createElement(Flex, { gap: 10 },
43
+ renderCustomActionButtons(),
44
+ hasEdit && (React.createElement(Button, { className: `${baseCls}__action-button ${hashId} border border-ebonyClay-200 bg-ebonyClay-400 h-7`, icon: "edit", iconSize: 16, onClick: handleOnClickEdit, type: "icon" })),
45
+ React.createElement(Button, { className: classNames(`${baseCls}__action-button ${hashId} border border-ebonyClay-200 bg-ebonyClay-400 h-7`, {
46
+ 'bg-green-600 border-green-600': isSelected
47
+ }), icon: "katalogkontrol", iconSize: 16, onClick: handleToggle, type: "icon" })));
48
+ };
@@ -0,0 +1,17 @@
1
+ export declare const FILTER_TYPES: {
2
+ INPUT: string;
3
+ };
4
+ export declare const DEBOUNCE_DELAY = 300;
5
+ export declare const DEFAULT_PAGE_SIZE = 20;
6
+ export declare const DEFAULT_CURRENT_PAGE = 1;
7
+ export declare const PAGE_SIZE_OPTIONS: {
8
+ label: number;
9
+ value: number;
10
+ }[];
11
+ export declare const DEFAULT_ROW_KEY = "pk";
12
+ export declare const IS_EDITING_INITIAL_VALUE: null;
13
+ export declare const MAPPER_ITEM_TYPES: {
14
+ readonly SELECT: "select";
15
+ readonly TEXT: "text";
16
+ };
17
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/ai-table/constants/index.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,YAAY;;CAExB,CAAC;AAEF,eAAO,MAAM,cAAc,MAAM,CAAC;AAElC,eAAO,MAAM,iBAAiB,KAAK,CAAC;AACpC,eAAO,MAAM,oBAAoB,IAAI,CAAC;AAEtC,eAAO,MAAM,iBAAiB;;;GAG3B,CAAC;AAEJ,eAAO,MAAM,eAAe,OAAO,CAAC;AAEpC,eAAO,MAAM,wBAAwB,MAAO,CAAC;AAE7C,eAAO,MAAM,iBAAiB;;;CAGpB,CAAC"}