@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,309 @@
1
+ "use strict";
2
+ /* eslint-disable @typescript-eslint/no-explicit-any */
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.TableContent = void 0;
5
+ const icons_1 = require("@akinon/icons");
6
+ const ui_input_1 = require("@akinon/ui-input");
7
+ const ui_layout_1 = require("@akinon/ui-layout");
8
+ const ui_theme_1 = require("@akinon/ui-theme");
9
+ const cssinjs_1 = require("@ant-design/cssinjs");
10
+ const antd_1 = require("antd");
11
+ const classnames_1 = require("classnames");
12
+ const lodash_es_1 = require("lodash-es");
13
+ const React = require("react");
14
+ const constants_1 = require("../constants");
15
+ const i18n_1 = require("../i18n");
16
+ const mapper_1 = require("./mapper");
17
+ const row_actions_1 = require("./row-actions");
18
+ const { t } = i18n_1.i18n;
19
+ const TableContent = ({ columns, customActionButtons, data, editDataIndexes, expandedRows, onEdit, onToggleExpand, onToggleSelection, rowKey, selectedRows, mapperConfig }) => {
20
+ const { getPrefixCls, theme } = React.useContext(antd_1.ConfigProvider.ConfigContext);
21
+ const { token, hashId } = (0, ui_theme_1.useToken)();
22
+ const baseCls = getPrefixCls('ai-modal-table');
23
+ const [isEditingPk, setIsEditingPk] = React.useState(constants_1.IS_EDITING_INITIAL_VALUE);
24
+ const [gradientLinePositions, setGradientLinePositions] = React.useState([]);
25
+ const [badgePositions, setBadgePositions] = React.useState([]);
26
+ const [tableHeight, setTableHeight] = React.useState(0);
27
+ const tableRef = React.useRef(null);
28
+ const headerRefs = React.useRef(new Map());
29
+ const rowRefs = React.useRef(new Map());
30
+ const { dataIndex: mapperDataIndex, onAddItem, onItemChange, onRemoveItem } = mapperConfig || {};
31
+ const hasMapper = !!mapperDataIndex;
32
+ const hasEdit = !!onEdit && !!editDataIndexes && editDataIndexes.length > 0;
33
+ const gradientColumnIndexes = React.useMemo(() => {
34
+ return columns
35
+ .map((col, index) => (col.hasGradientLine ? index : -1))
36
+ .filter(index => index !== -1);
37
+ }, [columns]);
38
+ const calculateGradientLinePositions = React.useCallback(() => {
39
+ const positions = [];
40
+ gradientColumnIndexes.forEach(colIndex => {
41
+ const headerCell = headerRefs.current.get(colIndex);
42
+ if (headerCell) {
43
+ positions.push(headerCell.offsetLeft);
44
+ }
45
+ });
46
+ return positions;
47
+ }, [gradientColumnIndexes]);
48
+ /**
49
+ * Calculates badge positions for rows with multiple mapper fields.
50
+ * Badges are displayed on the gradient line to indicate field count.
51
+ */
52
+ const calculateGradientBadgePositions = React.useCallback((gradientX) => {
53
+ const badges = [];
54
+ if (gradientX === undefined || !hasMapper) {
55
+ return badges;
56
+ }
57
+ data.forEach(row => {
58
+ const rowId = (0, lodash_es_1.get)(row, rowKey);
59
+ const rowEl = rowRefs.current.get(rowId);
60
+ if (rowEl) {
61
+ const fields = row[mapperDataIndex];
62
+ const count = Array.isArray(fields) ? fields.length : 0;
63
+ if (count > 1) {
64
+ badges.push({
65
+ x: gradientX + 1,
66
+ y: rowEl.offsetTop + rowEl.offsetHeight / 2,
67
+ count,
68
+ rowId
69
+ });
70
+ }
71
+ }
72
+ });
73
+ return badges;
74
+ }, [hasMapper, mapperDataIndex, data, rowKey]);
75
+ const calculateAllPositions = React.useCallback(() => {
76
+ if (tableRef.current) {
77
+ setTableHeight(tableRef.current.offsetHeight);
78
+ }
79
+ const linePositions = calculateGradientLinePositions();
80
+ setGradientLinePositions(linePositions);
81
+ if (!hasMapper)
82
+ return;
83
+ const badges = calculateGradientBadgePositions(linePositions[0]);
84
+ setBadgePositions(badges);
85
+ }, [calculateGradientLinePositions, calculateGradientBadgePositions]);
86
+ // initial mount and resize changes
87
+ React.useEffect(() => {
88
+ calculateAllPositions();
89
+ window.addEventListener('resize', calculateAllPositions);
90
+ return () => window.removeEventListener('resize', calculateAllPositions);
91
+ }, [calculateAllPositions]);
92
+ React.useEffect(() => {
93
+ // wait for the DOM to update, then recalculate positions
94
+ const rafId = requestAnimationFrame(() => {
95
+ calculateAllPositions();
96
+ });
97
+ return () => cancelAnimationFrame(rafId);
98
+ }, [data, expandedRows, isEditingPk, calculateAllPositions]);
99
+ const isMapperColumn = (dataIndex) => {
100
+ return hasMapper && mapperDataIndex === dataIndex;
101
+ };
102
+ const checkIsEditing = (rowId) => {
103
+ return isEditingPk === rowId;
104
+ };
105
+ const getRowId = (row) => {
106
+ return (0, lodash_es_1.get)(row, rowKey);
107
+ };
108
+ const isRowSelected = (rowId) => {
109
+ return selectedRows.includes(rowId);
110
+ };
111
+ const isRowExpanded = (rowId) => {
112
+ return expandedRows.includes(rowId);
113
+ };
114
+ const renderMapper = ({ rowId, value, dataIndex }) => {
115
+ const isExpanded = isRowExpanded(rowId);
116
+ const displayedValues = isExpanded ? value : value.slice(0, 1);
117
+ const handleExpand = () => {
118
+ if (!isExpanded) {
119
+ onToggleExpand(rowId);
120
+ }
121
+ };
122
+ const handleAddItem = () => {
123
+ if (!onAddItem)
124
+ return;
125
+ handleExpand();
126
+ onAddItem(rowId, dataIndex);
127
+ };
128
+ const handleRemoveItem = (index) => () => {
129
+ if (!onRemoveItem)
130
+ return;
131
+ onRemoveItem({
132
+ pk: rowId,
133
+ dataIndex,
134
+ index
135
+ });
136
+ };
137
+ const handleItemChange = ({ key, value, index }) => {
138
+ if (!onItemChange)
139
+ return;
140
+ // Build the updated array with the changed field value
141
+ const updatedArray = displayedValues.map((item, i) => i === index
142
+ ? Object.assign(Object.assign({}, item), { [key]: Object.assign(Object.assign({}, item[key]), { value }) }) : item);
143
+ onItemChange(rowId, {
144
+ [dataIndex]: updatedArray
145
+ });
146
+ };
147
+ return (React.createElement(mapper_1.TableMapper, { values: displayedValues, handleAddItem: handleAddItem, handleRemoveItem: handleRemoveItem, handleItemChange: handleItemChange }));
148
+ };
149
+ const renderCellValue = ({ column, row, rowId }) => {
150
+ const dataIndex = (0, lodash_es_1.get)(column, 'dataIndex', '');
151
+ const value = (0, lodash_es_1.get)(row, dataIndex, '');
152
+ if (hasEdit &&
153
+ checkIsEditing(rowId) &&
154
+ editDataIndexes.includes(dataIndex)) {
155
+ const handleOnChangeValue = (e) => {
156
+ const currentValue = e.target.value;
157
+ onEdit(rowId, {
158
+ [dataIndex]: currentValue
159
+ });
160
+ };
161
+ return (React.createElement(ui_input_1.Input, { className: "w-44 h-9", onChange: handleOnChangeValue, value: value }));
162
+ }
163
+ if (hasMapper && isMapperColumn(dataIndex)) {
164
+ return renderMapper({
165
+ rowId,
166
+ value,
167
+ dataIndex
168
+ });
169
+ }
170
+ if (column.render) {
171
+ return column.render(value, row);
172
+ }
173
+ if (typeof value === 'object') {
174
+ return '';
175
+ }
176
+ return value;
177
+ };
178
+ const renderExpandButton = (rowId) => {
179
+ const isExpanded = isRowExpanded(rowId);
180
+ const handleClick = () => {
181
+ onToggleExpand(rowId);
182
+ };
183
+ return (React.createElement(icons_1.Icon, { size: 10, color: "var(--color-azure-500)", icon: "chevron_down", className: (0, classnames_1.default)('mr-3 cursor-pointer', hashId, {
184
+ [`${baseCls}__icon--collapsed`]: !isExpanded
185
+ }), onClick: handleClick }));
186
+ };
187
+ const renderTableCells = (row, rowId) => {
188
+ return columns.map((column, colIndex) => {
189
+ const isFirstColumn = colIndex === 0;
190
+ return (React.createElement("td", { className: "text-blue-50 font-normal text-base whitespace-nowrap py-0 px-5", key: `cell-${rowId}-${column.dataIndex || colIndex}` },
191
+ isFirstColumn && hasMapper && renderExpandButton(rowId),
192
+ renderCellValue({
193
+ column,
194
+ row,
195
+ rowId
196
+ })));
197
+ });
198
+ };
199
+ const getRowRef = React.useCallback((rowId) => {
200
+ return (el) => {
201
+ if (el) {
202
+ rowRefs.current.set(rowId, el);
203
+ }
204
+ };
205
+ }, []);
206
+ const renderTableRow = (row, isLastChild) => {
207
+ const rowId = getRowId(row);
208
+ const isSelected = isRowSelected(rowId);
209
+ return (React.createElement("tr", { ref: getRowRef(rowId), className: (0, classnames_1.default)('border-0 border-b border-solid border-ebonyClay-200 h-12', {
210
+ 'bg-green-952-10': isSelected,
211
+ 'border-b-0': isLastChild
212
+ }), key: rowId },
213
+ renderTableCells(row, rowId),
214
+ React.createElement("td", { className: "text-blue-50 font-normal text-base py-0 px-4 whitespace-nowrap text-center min-w-24" },
215
+ React.createElement(row_actions_1.ActionButtons, { customActionButtons: customActionButtons, hasEdit: hasEdit, isEditing: checkIsEditing(rowId), isSelected: isSelected, onToggleSelection: onToggleSelection, rowId: rowId, setIsEditingPk: setIsEditingPk }))));
216
+ };
217
+ const renderEmptyRow = () => {
218
+ return (React.createElement("tr", null,
219
+ 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'))));
220
+ };
221
+ const renderGradientOverlay = () => {
222
+ return (React.createElement(React.Fragment, null,
223
+ 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: {
224
+ left,
225
+ height: tableHeight > 0 ? tableHeight - 28 : 'calc(100% - 28px)'
226
+ } }))),
227
+ hasMapper &&
228
+ 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: {
229
+ left: badge.x,
230
+ top: badge.y,
231
+ transform: 'translate(-50%, -50%)'
232
+ } }, badge.count)))));
233
+ };
234
+ const renderTableRows = () => {
235
+ if (data.length === 0) {
236
+ return renderEmptyRow();
237
+ }
238
+ return data.map((row, index) => {
239
+ const isLastChild = index === data.length - 1;
240
+ return renderTableRow(row, isLastChild);
241
+ });
242
+ };
243
+ const getHeaderRef = React.useCallback((index, hasGradientLine) => {
244
+ if (!hasGradientLine)
245
+ return undefined;
246
+ return (el) => {
247
+ if (el)
248
+ headerRefs.current.set(index, el);
249
+ };
250
+ }, []);
251
+ const renderTableHeaders = () => {
252
+ 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}` },
253
+ React.createElement(ui_layout_1.Flex, { align: "center", gap: 8 },
254
+ React.createElement("span", null, column.title),
255
+ column.hasSparkle && (React.createElement(icons_1.Icon, { color: "var(--color-azure-500)", icon: "ai-star", size: 17 }))))))));
256
+ };
257
+ const useStyle = (0, cssinjs_1.useStyleRegister)({
258
+ token: token,
259
+ path: ['AiModalTableContent'],
260
+ theme: theme
261
+ }, () => {
262
+ const prefixCls = `:where(.${hashId}).${baseCls}`;
263
+ return {
264
+ [`${prefixCls}__table-wrapper`]: {
265
+ maxHeight: '420px',
266
+ scrollbarGutter: 'stable',
267
+ '&::-webkit-scrollbar': {
268
+ width: '8px',
269
+ height: '8px'
270
+ },
271
+ '&::-webkit-scrollbar-track': {
272
+ background: 'transparent'
273
+ },
274
+ '&::-webkit-scrollbar-thumb': {
275
+ background: 'var(--color-ebonyClay-50)',
276
+ borderRadius: '4px'
277
+ },
278
+ '&::-webkit-scrollbar-thumb:hover': {
279
+ background: 'var(--color-ebonyClay-300)'
280
+ },
281
+ '&::-webkit-scrollbar-corner': {
282
+ background: 'transparent'
283
+ },
284
+ scrollbarColor: 'var(--color-ebonyClay-200) transparent'
285
+ },
286
+ [`${prefixCls}__table-element`]: {
287
+ borderCollapse: 'collapse'
288
+ },
289
+ [`${prefixCls}__icon--collapsed`]: {
290
+ transform: 'rotate(-90deg)'
291
+ },
292
+ [`${prefixCls}__gradient-line`]: {
293
+ width: '2px',
294
+ background: 'linear-gradient(180deg, var(--color-red-400) 0%, var(--color-azure-500) 100%)'
295
+ },
296
+ [`${prefixCls}__gradient-badge`]: {
297
+ background: 'linear-gradient(180deg, var(--color-red-400) 0%, var(--color-azure-500) 100%)'
298
+ }
299
+ };
300
+ });
301
+ return useStyle(React.createElement("div", { className: "bg-ebonyClay-450 rounded-lg overflow-hidden" },
302
+ React.createElement("div", { className: `${baseCls}__table-wrapper ${hashId} overflow-x-auto overflow-y-auto` },
303
+ React.createElement("div", { className: "relative" },
304
+ renderGradientOverlay(),
305
+ React.createElement("table", { ref: tableRef, className: `${baseCls}__table-element ${hashId} w-full bg-ebonyClay-450` },
306
+ React.createElement("thead", null, renderTableHeaders()),
307
+ React.createElement("tbody", null, renderTableRows()))))));
308
+ };
309
+ exports.TableContent = TableContent;
@@ -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,55 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TableFilters = void 0;
4
+ const icons_1 = require("@akinon/icons");
5
+ const ui_input_1 = require("@akinon/ui-input");
6
+ const ui_layout_1 = require("@akinon/ui-layout");
7
+ const lodash_es_1 = require("lodash-es");
8
+ const React = require("react");
9
+ const constants_1 = require("../constants");
10
+ const TableFilters = ({ filters, filterValues, onFilterChange }) => {
11
+ const [localValues, setLocalValues] = React.useState({});
12
+ const debouncedOnFilterChange = React.useRef(null);
13
+ React.useEffect(() => {
14
+ debouncedOnFilterChange.current = (0, lodash_es_1.debounce)((key, value) => {
15
+ onFilterChange(key, value);
16
+ }, constants_1.DEBOUNCE_DELAY);
17
+ return () => {
18
+ if (debouncedOnFilterChange.current) {
19
+ debouncedOnFilterChange.current.cancel();
20
+ }
21
+ };
22
+ }, [onFilterChange]);
23
+ React.useEffect(() => {
24
+ setLocalValues(filterValues);
25
+ }, [filterValues]);
26
+ const handleInputChange = (key, value) => {
27
+ setLocalValues(prev => (Object.assign(Object.assign({}, prev), { [key]: value })));
28
+ if (debouncedOnFilterChange.current) {
29
+ debouncedOnFilterChange.current(key, value);
30
+ }
31
+ };
32
+ const renderInputFilter = (filter, index) => {
33
+ const { key, placeholder } = filter;
34
+ const handleOnChange = (e) => {
35
+ handleInputChange(key, e.target.value);
36
+ };
37
+ return (React.createElement(ui_layout_1.Flex, { align: "center", rootClassName: "relative", key: `filter-${key}-${index}` },
38
+ React.createElement(ui_input_1.Input, { className: "h-9 w-44", name: key, onChange: handleOnChange, placeholder: placeholder, value: localValues[key] || '' }),
39
+ React.createElement(icons_1.Icon, { className: "absolute cursor-pointer right-2 top-2", icon: "search", color: "var(--color-gray-500)", size: 16 })));
40
+ };
41
+ const renderFilter = (filter, index) => {
42
+ const { type } = filter;
43
+ switch (type) {
44
+ case constants_1.FILTER_TYPES.INPUT:
45
+ return renderInputFilter(filter, index);
46
+ default:
47
+ return null;
48
+ }
49
+ };
50
+ if (!filters || filters.length === 0) {
51
+ return null;
52
+ }
53
+ return (React.createElement(ui_layout_1.Flex, { flex: 1, gap: 12, wrap: true }, filters.map((filter, index) => renderFilter(filter, index))));
54
+ };
55
+ exports.TableFilters = TableFilters;
@@ -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,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TableFooter = void 0;
4
+ const ui_button_1 = require("@akinon/ui-button");
5
+ const ui_layout_1 = require("@akinon/ui-layout");
6
+ const React = require("react");
7
+ const TableFooter = ({ isSubmitting, selectedCount, submitAllLabel, submitSelectedLabel, onSubmitAll, onSubmitSelected }) => {
8
+ const handleSubmitAll = () => {
9
+ if (onSubmitAll) {
10
+ onSubmitAll();
11
+ }
12
+ };
13
+ const handleSubmitSelected = () => {
14
+ if (onSubmitSelected) {
15
+ onSubmitSelected();
16
+ }
17
+ };
18
+ return (React.createElement(ui_layout_1.Flex, { justify: "end", gap: 10 },
19
+ React.createElement(ui_button_1.Button, { className: "uppercase font-semibold", disabled: isSubmitting, loading: isSubmitting, onClick: handleSubmitAll }, submitAllLabel),
20
+ React.createElement(ui_button_1.Button, { className: "uppercase font-semibold", disabled: selectedCount === 0 || isSubmitting, loading: isSubmitting, onClick: handleSubmitSelected, type: "primary" },
21
+ submitSelectedLabel,
22
+ selectedCount > 0 && ` (${selectedCount})`)));
23
+ };
24
+ exports.TableFooter = TableFooter;
@@ -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,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TableMapper = void 0;
4
+ const icons_1 = require("@akinon/icons");
5
+ const ui_layout_1 = require("@akinon/ui-layout");
6
+ const React = require("react");
7
+ const render_mapper_fields_1 = require("../utils/render-mapper-fields");
8
+ const TableMapper = ({ values, handleAddItem, handleRemoveItem, handleItemChange }) => {
9
+ return (React.createElement(ui_layout_1.Flex, { gap: 5, vertical: true, rootClassName: "py-1" }, values.map((row, index) => {
10
+ return (React.createElement(ui_layout_1.Flex, { gap: 12, align: "center", key: index },
11
+ (0, render_mapper_fields_1.renderMapperRow)({
12
+ row,
13
+ index,
14
+ handleItemChange
15
+ }),
16
+ React.createElement(ui_layout_1.Flex, { gap: 10 },
17
+ React.createElement(icons_1.Icon, { icon: "plus", size: 20, color: "var(--color-green-500)", className: "cursor-pointer", onClick: handleAddItem }),
18
+ React.createElement(icons_1.Icon, { icon: "minus", size: 20, color: "var(--color-red-425)", className: "cursor-pointer", onClick: handleRemoveItem(index) }))));
19
+ })));
20
+ };
21
+ exports.TableMapper = TableMapper;
@@ -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,106 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TablePagination = void 0;
4
+ const ui_layout_1 = require("@akinon/ui-layout");
5
+ const ui_pagination_1 = require("@akinon/ui-pagination");
6
+ const ui_select_1 = require("@akinon/ui-select");
7
+ const ui_theme_1 = require("@akinon/ui-theme");
8
+ const cssinjs_1 = require("@ant-design/cssinjs");
9
+ const antd_1 = require("antd");
10
+ const React = require("react");
11
+ const constants_1 = require("../constants");
12
+ const i18n_1 = require("../i18n");
13
+ const { t } = i18n_1.i18n;
14
+ const TablePagination = ({ currentPage, onPageChange, onPageSizeChange, pageSize, total }) => {
15
+ const { getPrefixCls, theme } = React.useContext(antd_1.ConfigProvider.ConfigContext);
16
+ const { token, hashId } = (0, ui_theme_1.useToken)();
17
+ const baseCls = getPrefixCls('ai-modal-table');
18
+ const handlePageChange = (page) => {
19
+ onPageChange(page);
20
+ };
21
+ const handlePageSizeChange = (value) => {
22
+ onPageSizeChange(value);
23
+ onPageChange(constants_1.DEFAULT_CURRENT_PAGE);
24
+ };
25
+ const useStyle = (0, cssinjs_1.useStyleRegister)({
26
+ token: token,
27
+ path: ['AiModalTablePagination'],
28
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
29
+ theme: theme
30
+ }, () => {
31
+ const prefixCls = `:where(.${hashId}).${baseCls}`;
32
+ return {
33
+ [`${prefixCls}__pagination-element`]: {
34
+ '&.akinon-pagination': {
35
+ '.akinon-pagination-prev, .akinon-pagination-next': {
36
+ height: 'unset !important',
37
+ lineHeight: 'unset !important',
38
+ margin: '0 !important',
39
+ display: 'inline-block !important',
40
+ verticalAlign: 'middle',
41
+ '&.akinon-pagination-disabled': {
42
+ button: {
43
+ cursor: 'not-allowed'
44
+ }
45
+ },
46
+ '.akinon-btn': {
47
+ backgroundColor: 'var(--color-ebonyClay-475) !important',
48
+ borderColor: 'var(--color-ebonyClay-550) !important',
49
+ borderLeft: 'none',
50
+ borderRight: 'none',
51
+ height: '40px !important',
52
+ '.akinon-btn-icon': {
53
+ color: 'var(--color-gray-500) !important'
54
+ },
55
+ '&:hover': {
56
+ backgroundColor: 'var(--color-ebonyClay-475) !important',
57
+ borderColor: 'var(--color-ebonyClay-550) !important',
58
+ '.anticon': {
59
+ color: 'var(--color-gray-500) !important'
60
+ }
61
+ }
62
+ }
63
+ },
64
+ '.akinon-pagination-prev': {
65
+ borderRadius: '5px 0 0 5px !important'
66
+ },
67
+ '.akinon-pagination-next': {
68
+ borderRadius: '0 5px 5px 0 !important'
69
+ },
70
+ '.akinon-pagination-simple-pager': {
71
+ margin: '0 !important',
72
+ backgroundColor: 'var(--color-ebonyClay-475) !important',
73
+ border: '1px solid var(--color-ebonyClay-550) !important',
74
+ borderLeft: 'none !important',
75
+ borderRight: 'none !important',
76
+ borderRadius: 0,
77
+ color: 'var(--color-gray-500) !important',
78
+ padding: '0 8px',
79
+ height: '40px',
80
+ display: 'inline-flex !important',
81
+ alignItems: 'center',
82
+ justifyContent: 'center',
83
+ verticalAlign: 'middle',
84
+ input: {
85
+ color: 'var(--color-gray-500) !important',
86
+ backgroundColor: 'transparent !important',
87
+ border: 'none !important',
88
+ textAlign: 'center',
89
+ boxShadow: 'none !important'
90
+ },
91
+ '.akinon-pagination-slash': {
92
+ color: 'var(--color-gray-500) !important',
93
+ margin: '0 4px'
94
+ }
95
+ }
96
+ }
97
+ }
98
+ };
99
+ });
100
+ return useStyle(React.createElement(ui_layout_1.Flex, { align: "center", rootClassName: "ml-auto", gap: 8 },
101
+ React.createElement(ui_layout_1.Flex, { align: "center", gap: 12, rootClassName: "mr-5" },
102
+ React.createElement("span", { className: "text-sm text-gray-500" }, t('show.value')),
103
+ React.createElement(ui_select_1.Select, { onChange: handlePageSizeChange, options: constants_1.PAGE_SIZE_OPTIONS, value: pageSize })),
104
+ React.createElement(ui_pagination_1.Pagination, { className: `${baseCls}__pagination-element ${hashId}`, current: currentPage, onChange: handlePageChange, pageSize: pageSize, showSizeChanger: false, theme: "dark", total: total })));
105
+ };
106
+ exports.TablePagination = TablePagination;
@@ -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,52 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ActionButtons = void 0;
4
+ const ui_button_1 = require("@akinon/ui-button");
5
+ const ui_layout_1 = require("@akinon/ui-layout");
6
+ const ui_theme_1 = require("@akinon/ui-theme");
7
+ const cssinjs_1 = require("@ant-design/cssinjs");
8
+ const antd_1 = require("antd");
9
+ const classnames_1 = require("classnames");
10
+ const React = require("react");
11
+ const constants_1 = require("../constants");
12
+ const ActionButtons = ({ customActionButtons, hasEdit, isEditing, isSelected, onToggleSelection, rowId, setIsEditingPk }) => {
13
+ const { getPrefixCls, theme } = React.useContext(antd_1.ConfigProvider.ConfigContext);
14
+ const { token, hashId } = (0, ui_theme_1.useToken)();
15
+ const baseCls = getPrefixCls('ai-modal-table');
16
+ const handleToggle = (e) => {
17
+ e.stopPropagation();
18
+ onToggleSelection(rowId);
19
+ };
20
+ const handleOnClickEdit = () => {
21
+ setIsEditingPk(isEditing ? constants_1.IS_EDITING_INITIAL_VALUE : rowId);
22
+ };
23
+ const renderCustomActionButtons = () => {
24
+ if (!customActionButtons)
25
+ return null;
26
+ return customActionButtons(rowId);
27
+ };
28
+ const useStyle = (0, cssinjs_1.useStyleRegister)({
29
+ token: token,
30
+ path: ['AiModalTableActionButtons'],
31
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
32
+ theme: theme
33
+ }, () => {
34
+ const prefixCls = `:where(.${hashId}).${baseCls}`;
35
+ return {
36
+ [`${prefixCls}__action-button`]: {
37
+ width: '1.75rem !important',
38
+ transition: 'all 0.2s',
39
+ '&:hover': {
40
+ opacity: 0.8
41
+ }
42
+ }
43
+ };
44
+ });
45
+ return useStyle(React.createElement(ui_layout_1.Flex, { gap: 10 },
46
+ renderCustomActionButtons(),
47
+ hasEdit && (React.createElement(ui_button_1.Button, { className: `${baseCls}__action-button ${hashId} border border-ebonyClay-200 bg-ebonyClay-400 h-7`, icon: "edit", iconSize: 16, onClick: handleOnClickEdit, type: "icon" })),
48
+ React.createElement(ui_button_1.Button, { className: (0, classnames_1.default)(`${baseCls}__action-button ${hashId} border border-ebonyClay-200 bg-ebonyClay-400 h-7`, {
49
+ 'bg-green-600 border-green-600': isSelected
50
+ }), icon: "katalogkontrol", iconSize: 16, onClick: handleToggle, type: "icon" })));
51
+ };
52
+ exports.ActionButtons = ActionButtons;