@fe-free/core 5.0.0 → 6.0.1

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 (45) hide show
  1. package/CHANGELOG.md +383 -5
  2. package/package.json +5 -3
  3. package/src/copy/index.tsx +10 -5
  4. package/src/crud/crud.stories.tsx +13 -1
  5. package/src/crud/crud.tsx +5 -2
  6. package/src/crud/helper.tsx +10 -5
  7. package/src/crud/style.scss +27 -0
  8. package/src/crud/table/index.tsx +7 -2
  9. package/src/crud/table/style.scss +5 -21
  10. package/src/crud/use_operate.tsx +1 -1
  11. package/src/crud_of_list/crud_of_list.stories.tsx +42 -0
  12. package/src/crud_of_list/index.tsx +2 -1
  13. package/src/crud_of_list/style.scss +27 -0
  14. package/src/crud_of_pure/crud_of_pure.stories.tsx +7 -1
  15. package/src/crud_of_pure/index.tsx +52 -2
  16. package/src/crud_of_pure/style.scss +4 -0
  17. package/src/editor/editor.stories.tsx +8 -0
  18. package/src/editor/index.tsx +7 -3
  19. package/src/form/form_list/form_list_modal_helper.tsx +1 -0
  20. package/src/index.ts +4 -1
  21. package/src/infinite_list/index.tsx +5 -2
  22. package/src/markdown/chart.tsx +3 -3
  23. package/src/markdown/code.tsx +19 -32
  24. package/src/markdown/custom_markdown.stories.tsx +485 -0
  25. package/src/markdown/hm_chart.tsx +1 -1
  26. package/src/markdown/index.tsx +93 -34
  27. package/src/markdown/knowledge_ref.tsx +5 -5
  28. package/src/markdown/markdown.stories.tsx +68 -410
  29. package/src/markdown/messages/message_think.tsx +69 -0
  30. package/src/markdown/messages/svgs/think.svg +3 -0
  31. package/src/markdown/think.tsx +55 -0
  32. package/src/page_layout/index.tsx +12 -0
  33. package/src/scroll/helper.tsx +23 -0
  34. package/src/scroll/index.tsx +70 -0
  35. package/src/style.scss +0 -30
  36. package/src/tailwind.css +53 -0
  37. package/src/theme.ts +1 -1
  38. package/src/upload/index.tsx +32 -30
  39. package/src/value_type_map/index.tsx +7 -0
  40. package/src/value_type_map/json_modal.tsx +17 -15
  41. package/src/value_type_map/markdown_modal.tsx +45 -0
  42. package/src/value_type_map/value_type_map.stories.tsx +8 -0
  43. package/src/markdown/deep_seek.tsx +0 -53
  44. package/src/markdown/style.scss +0 -46
  45. package/src/tailwind.config.ts +0 -14
package/CHANGELOG.md CHANGED
@@ -1,15 +1,393 @@
1
1
  # @fe-free/core
2
2
 
3
- ## 5.0.0
3
+ ## 6.0.1
4
4
 
5
- ### Minor Changes
5
+ ### Patch Changes
6
6
 
7
- - feat: i18n
7
+ - feat: tailwindcss4
8
+ - Updated dependencies
9
+ - @fe-free/icons@6.0.1
10
+ - @fe-free/tool@6.0.1
11
+
12
+ ## 4.2.4
13
+
14
+ ### Patch Changes
15
+
16
+ - @fe-free/icons@4.2.4
17
+ - @fe-free/tool@4.2.4
18
+
19
+ ## 4.2.3
20
+
21
+ ### Patch Changes
22
+
23
+ - feat: ui
24
+ - @fe-free/icons@4.2.3
25
+ - @fe-free/tool@4.2.3
26
+
27
+ ## 4.2.2
28
+
29
+ ### Patch Changes
30
+
31
+ - @fe-free/icons@4.2.2
32
+ - @fe-free/tool@4.2.2
33
+
34
+ ## 4.2.1
35
+
36
+ ### Patch Changes
37
+
38
+ - @fe-free/icons@4.2.1
39
+ - @fe-free/tool@4.2.1
40
+
41
+ ## 4.2.0
42
+
43
+ ### minor Changes
44
+
45
+ - fix: crud bug
46
+ - @fe-free/icons@4.2.0
47
+ - @fe-free/tool@4.2.0
48
+
49
+ ## 4.1.47
50
+
51
+ ### Patch Changes
52
+
53
+ - @fe-free/icons@4.1.47
54
+ - @fe-free/tool@4.1.47
55
+
56
+ ## 4.1.46
57
+
58
+ ### Patch Changes
59
+
60
+ - feat: crud ui
61
+ - @fe-free/icons@4.1.46
62
+ - @fe-free/tool@4.1.46
63
+
64
+ ## 4.1.45
65
+
66
+ ### Patch Changes
67
+
68
+ - feat: curd table ui
69
+ - @fe-free/icons@4.1.45
70
+ - @fe-free/tool@4.1.45
71
+
72
+ ## 4.1.44
73
+
74
+ ### Patch Changes
75
+
76
+ - feat: crud of list
77
+ - @fe-free/icons@4.1.44
78
+ - @fe-free/tool@4.1.44
79
+
80
+ ## 4.1.43
81
+
82
+ ### Patch Changes
83
+
84
+ - fix: valueType
85
+ - @fe-free/icons@4.1.43
86
+ - @fe-free/tool@4.1.43
87
+
88
+ ## 4.1.42
89
+
90
+ ### Patch Changes
91
+
92
+ - feat: add valueType CustomMarkdownModal
93
+ - @fe-free/icons@4.1.42
94
+ - @fe-free/tool@4.1.42
95
+
96
+ ## 4.1.41
97
+
98
+ ### Patch Changes
99
+
100
+ - feat: some
101
+ - @fe-free/icons@4.1.41
102
+ - @fe-free/tool@4.1.41
103
+
104
+ ## 4.1.40
105
+
106
+ ### Patch Changes
107
+
108
+ - fix: ScrollFixed
109
+ - @fe-free/icons@4.1.40
110
+ - @fe-free/tool@4.1.40
111
+
112
+ ## 4.1.39
113
+
114
+ ### Patch Changes
115
+
116
+ - fix: ai
117
+ - @fe-free/icons@4.1.39
118
+ - @fe-free/tool@4.1.39
119
+
120
+ ## 4.1.38
121
+
122
+ ### Patch Changes
123
+
124
+ - feat: ai
125
+ - @fe-free/icons@4.1.38
126
+ - @fe-free/tool@4.1.38
127
+
128
+ ## 4.1.37
129
+
130
+ ### Patch Changes
131
+
132
+ - @fe-free/icons@4.1.37
133
+ - @fe-free/tool@4.1.37
134
+
135
+ ## 4.1.36
136
+
137
+ ### Patch Changes
138
+
139
+ - @fe-free/icons@4.1.36
140
+ - @fe-free/tool@4.1.36
141
+
142
+ ## 4.1.35
143
+
144
+ ### Patch Changes
145
+
146
+ - @fe-free/icons@4.1.35
147
+ - @fe-free/tool@4.1.35
148
+
149
+ ## 4.1.34
150
+
151
+ ### Patch Changes
152
+
153
+ - @fe-free/icons@4.1.34
154
+ - @fe-free/tool@4.1.34
155
+
156
+ ## 4.1.33
157
+
158
+ ### Patch Changes
159
+
160
+ - @fe-free/icons@4.1.33
161
+ - @fe-free/tool@4.1.33
162
+
163
+ ## 4.1.32
164
+
165
+ ### Patch Changes
166
+
167
+ - @fe-free/icons@4.1.32
168
+ - @fe-free/tool@4.1.32
169
+
170
+ ## 4.1.31
171
+
172
+ ### Patch Changes
173
+
174
+ - @fe-free/icons@4.1.31
175
+ - @fe-free/tool@4.1.31
176
+
177
+ ## 4.1.30
178
+
179
+ ### Patch Changes
180
+
181
+ - @fe-free/icons@4.1.30
182
+ - @fe-free/tool@4.1.30
183
+
184
+ ## 4.1.29
185
+
186
+ ### Patch Changes
187
+
188
+ - @fe-free/icons@4.1.29
189
+ - @fe-free/tool@4.1.29
190
+
191
+ ## 4.1.28
192
+
193
+ ### Patch Changes
194
+
195
+ - @fe-free/icons@4.1.28
196
+ - @fe-free/tool@4.1.28
197
+
198
+ ## 4.1.27
8
199
 
9
200
  ### Patch Changes
10
201
 
11
- - @fe-free/icons@5.0.0
12
- - @fe-free/tool@5.0.0
202
+ - @fe-free/icons@4.1.27
203
+ - @fe-free/tool@4.1.27
204
+
205
+ ## 4.1.26
206
+
207
+ ### Patch Changes
208
+
209
+ - @fe-free/icons@4.1.26
210
+ - @fe-free/tool@4.1.26
211
+
212
+ ## 4.1.25
213
+
214
+ ### Patch Changes
215
+
216
+ - @fe-free/icons@4.1.25
217
+ - @fe-free/tool@4.1.25
218
+
219
+ ## 4.1.24
220
+
221
+ ### Patch Changes
222
+
223
+ - @fe-free/icons@4.1.24
224
+ - @fe-free/tool@4.1.24
225
+
226
+ ## 4.1.23
227
+
228
+ ### Patch Changes
229
+
230
+ - @fe-free/icons@4.1.23
231
+ - @fe-free/tool@4.1.23
232
+
233
+ ## 4.1.22
234
+
235
+ ### Patch Changes
236
+
237
+ - @fe-free/icons@4.1.22
238
+ - @fe-free/tool@4.1.22
239
+
240
+ ## 4.1.21
241
+
242
+ ### Patch Changes
243
+
244
+ - @fe-free/icons@4.1.21
245
+ - @fe-free/tool@4.1.21
246
+
247
+ ## 4.1.20
248
+
249
+ ### Patch Changes
250
+
251
+ - @fe-free/icons@4.1.20
252
+ - @fe-free/tool@4.1.20
253
+
254
+ ## 4.1.19
255
+
256
+ ### Patch Changes
257
+
258
+ - @fe-free/icons@4.1.19
259
+ - @fe-free/tool@4.1.19
260
+
261
+ ## 4.1.18
262
+
263
+ ### Patch Changes
264
+
265
+ - @fe-free/icons@4.1.18
266
+ - @fe-free/tool@4.1.18
267
+
268
+ ## 4.1.17
269
+
270
+ ### Patch Changes
271
+
272
+ - @fe-free/icons@4.1.17
273
+ - @fe-free/tool@4.1.17
274
+
275
+ ## 4.1.16
276
+
277
+ ### Patch Changes
278
+
279
+ - @fe-free/icons@4.1.16
280
+ - @fe-free/tool@4.1.16
281
+
282
+ ## 4.1.15
283
+
284
+ ### Patch Changes
285
+
286
+ - @fe-free/icons@4.1.15
287
+ - @fe-free/tool@4.1.15
288
+
289
+ ## 4.1.14
290
+
291
+ ### Patch Changes
292
+
293
+ - @fe-free/icons@4.1.14
294
+ - @fe-free/tool@4.1.14
295
+
296
+ ## 4.1.13
297
+
298
+ ### Patch Changes
299
+
300
+ - @fe-free/icons@4.1.13
301
+ - @fe-free/tool@4.1.13
302
+
303
+ ## 4.1.12
304
+
305
+ ### Patch Changes
306
+
307
+ - @fe-free/icons@4.1.12
308
+ - @fe-free/tool@4.1.12
309
+
310
+ ## 4.1.11
311
+
312
+ ### Patch Changes
313
+
314
+ - @fe-free/icons@4.1.11
315
+ - @fe-free/tool@4.1.11
316
+
317
+ ## 4.1.10
318
+
319
+ ### Patch Changes
320
+
321
+ - feat: ai
322
+ - @fe-free/icons@4.1.10
323
+ - @fe-free/tool@4.1.10
324
+
325
+ ## 4.1.9
326
+
327
+ ### Patch Changes
328
+
329
+ - @fe-free/icons@4.1.9
330
+ - @fe-free/tool@4.1.9
331
+
332
+ ## 4.1.8
333
+
334
+ ### Patch Changes
335
+
336
+ - @fe-free/icons@4.1.8
337
+ - @fe-free/tool@4.1.8
338
+
339
+ ## 4.1.7
340
+
341
+ ### Patch Changes
342
+
343
+ - @fe-free/icons@4.1.7
344
+ - @fe-free/tool@4.1.7
345
+
346
+ ## 4.1.6
347
+
348
+ ### Patch Changes
349
+
350
+ - @fe-free/icons@4.1.6
351
+ - @fe-free/tool@4.1.6
352
+
353
+ ## 4.1.5
354
+
355
+ ### Patch Changes
356
+
357
+ - @fe-free/icons@4.1.5
358
+ - @fe-free/tool@4.1.5
359
+
360
+ ## 4.1.4
361
+
362
+ ### Patch Changes
363
+
364
+ - feat: editor
365
+ - @fe-free/icons@4.1.4
366
+ - @fe-free/tool@4.1.4
367
+
368
+ ## 4.1.3
369
+
370
+ ### Patch Changes
371
+
372
+ - fix some
373
+ - @fe-free/icons@4.1.3
374
+ - @fe-free/tool@4.1.3
375
+
376
+ ## 4.1.2
377
+
378
+ ### Patch Changes
379
+
380
+ - fix some
381
+ - @fe-free/icons@4.1.2
382
+ - @fe-free/tool@4.1.2
383
+
384
+ ## 4.1.1
385
+
386
+ ### Patch Changes
387
+
388
+ - Updated dependencies
389
+ - @fe-free/icons@4.1.1
390
+ - @fe-free/tool@4.1.1
13
391
 
14
392
  ## 4.0.5
15
393
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fe-free/core",
3
- "version": "5.0.0",
3
+ "version": "6.0.1",
4
4
  "description": "",
5
5
  "main": "./src/index.ts",
6
6
  "author": "",
@@ -10,6 +10,8 @@
10
10
  "registry": "https://registry.npmjs.org/"
11
11
  },
12
12
  "dependencies": {
13
+ "@ant-design/x-markdown": "^2.1.3",
14
+ "@ant-design/x": "^2.1.3",
13
15
  "@codemirror/lang-html": "^6.4.9",
14
16
  "@codemirror/lang-javascript": "^6.2.4",
15
17
  "@codemirror/lang-json": "^6.0.1",
@@ -50,8 +52,8 @@
50
52
  "i18next-icu": "^2.4.1",
51
53
  "react": "^19.2.0",
52
54
  "react-i18next": "^16.4.0",
53
- "@fe-free/icons": "5.0.0",
54
- "@fe-free/tool": "5.0.0"
55
+ "@fe-free/tool": "6.0.1",
56
+ "@fe-free/icons": "6.0.1"
55
57
  },
56
58
  "scripts": {
57
59
  "i18n-extract": "rm -rf ./src/locales/zh-CN && npx i18next-cli extract"
@@ -13,10 +13,11 @@ interface CopyProps {
13
13
  children?: React.ReactNode;
14
14
  /** 复制成功后的回调 */
15
15
  onCopied?: () => void;
16
+ className?: string;
16
17
  }
17
18
 
18
19
  function Copy(props: CopyProps) {
19
- const { value, showIcon, hoverIcon, children, onCopied } = props;
20
+ const { value, showIcon, hoverIcon, children, onCopied, className } = props;
20
21
 
21
22
  const handleCopy = useCallback(async () => {
22
23
  await copyToClipboard(value);
@@ -26,13 +27,17 @@ function Copy(props: CopyProps) {
26
27
  if (showIcon || hoverIcon) {
27
28
  return (
28
29
  <div
29
- className={classNames('flex gap-1', {
30
- group: hoverIcon,
31
- })}
30
+ className={classNames(
31
+ 'flex gap-1',
32
+ {
33
+ group: hoverIcon,
34
+ },
35
+ className,
36
+ )}
32
37
  >
33
38
  {children}
34
39
  <div
35
- className={classNames('cursor-pointer text-primary', {
40
+ className={classNames('cursor-pointer', {
36
41
  hidden: hoverIcon,
37
42
  'group-hover:block': hoverIcon,
38
43
  })}
@@ -60,6 +60,7 @@ export const Normal: Story = {
60
60
  <CRUD
61
61
  actions={['create', 'read', 'delete', 'update']}
62
62
  tableProps={{
63
+ rowKey: 'id',
63
64
  columns,
64
65
  request: fakeRequest,
65
66
  }}
@@ -105,6 +106,7 @@ export const ReadDetail: Story = {
105
106
  <CRUD
106
107
  actions={['read_detail']}
107
108
  tableProps={{
109
+ rowKey: 'id',
108
110
  columns,
109
111
  request: fakeRequest,
110
112
  }}
@@ -119,6 +121,7 @@ export const BatchDelete: Story = {
119
121
  <CRUD
120
122
  actions={['batch_delete']}
121
123
  tableProps={{
124
+ rowKey: 'id',
122
125
  columns: [
123
126
  {
124
127
  title: 'id',
@@ -169,6 +172,7 @@ export const MoreCustom: Story = {
169
172
  <CRUD
170
173
  actions={['create', 'read', 'delete', 'update']}
171
174
  tableProps={{
175
+ rowKey: 'id',
172
176
  columns,
173
177
  request: fakeRequest,
174
178
  toolBarRender: () => {
@@ -250,7 +254,7 @@ export const MoreCustom: Story = {
250
254
 
251
255
  // 表格表单和详情表单 ref
252
256
  const FormRefComponent = () => {
253
- const formRef = useRef<any>();
257
+ const formRef = useRef<any>(null);
254
258
  const [detailFormInstance] = ProForm.useForm();
255
259
 
256
260
  const columns = [
@@ -270,6 +274,7 @@ const FormRefComponent = () => {
270
274
  <CRUD
271
275
  actions={['create', 'read', 'update']}
272
276
  tableProps={{
277
+ rowKey: 'id',
273
278
  formRef,
274
279
  columns,
275
280
  request: fakeRequest,
@@ -322,6 +327,7 @@ const ActionRefComponent = () => {
322
327
  ref={ref}
323
328
  actions={[]}
324
329
  tableProps={{
330
+ rowKey: 'id',
325
331
  columns,
326
332
  request: fakeRequest,
327
333
  }}
@@ -396,6 +402,7 @@ export const RemoteData: Story = {
396
402
  <CRUD
397
403
  actions={[]}
398
404
  tableProps={{
405
+ rowKey: 'id',
399
406
  columns,
400
407
  request: fakeRequest,
401
408
  }}
@@ -422,6 +429,7 @@ export const NoSearch: Story = {
422
429
  <CRUD
423
430
  actions={[]}
424
431
  tableProps={{
432
+ rowKey: 'id',
425
433
  columns,
426
434
  request: fakeRequest,
427
435
  search: false,
@@ -451,6 +459,7 @@ export const CustomText: Story = {
451
459
  <CRUD
452
460
  actions={['create', 'read', 'delete', 'update']}
453
461
  tableProps={{
462
+ rowKey: 'id',
454
463
  columns,
455
464
  request: fakeRequest,
456
465
  }}
@@ -495,6 +504,7 @@ export const RowSelection: Story = {
495
504
  <CRUD
496
505
  actions={[]}
497
506
  tableProps={{
507
+ rowKey: 'id',
498
508
  columns: [
499
509
  {
500
510
  title: 'id',
@@ -552,6 +562,7 @@ export const ExpandedRowRender: Story = {
552
562
  <CRUD
553
563
  actions={['create', 'read', 'delete', 'update']}
554
564
  tableProps={{
565
+ rowKey: 'id',
555
566
  columns,
556
567
  request: fakeRequest,
557
568
  defaultExpandAllRows: true,
@@ -614,6 +625,7 @@ export const FullPage: Story = {
614
625
  fullPage
615
626
  actions={['create', 'read', 'delete', 'update']}
616
627
  tableProps={{
628
+ rowKey: 'id',
617
629
  columns,
618
630
  request: fakeRequest,
619
631
  }}
package/src/crud/crud.tsx CHANGED
@@ -129,6 +129,7 @@ function CRUD<DataSource extends Record<string, any> = any, Key extends string |
129
129
  if (fullPage) {
130
130
  return {
131
131
  ...tableProps,
132
+ rowKey: tableProps.rowKey || 'id',
132
133
  scroll: {
133
134
  ...getTableScroll(newColumns),
134
135
  y: '100%',
@@ -136,7 +137,10 @@ function CRUD<DataSource extends Record<string, any> = any, Key extends string |
136
137
  };
137
138
  }
138
139
 
139
- return tableProps;
140
+ return {
141
+ ...tableProps,
142
+ rowKey: tableProps.rowKey || 'id',
143
+ };
140
144
  }, [fullPage, tableProps, newColumns]);
141
145
 
142
146
  return (
@@ -150,7 +154,6 @@ function CRUD<DataSource extends Record<string, any> = any, Key extends string |
150
154
  )}
151
155
  >
152
156
  <Table<DataSource>
153
- rowKey="id"
154
157
  {...newTableProps}
155
158
  actionRef={actionRef}
156
159
  toolBarRender={toolBarRender}
@@ -15,11 +15,13 @@ function OperateBtn({
15
15
  }) {
16
16
  if (disabled) {
17
17
  if (operateText) {
18
- return <span className="cursor-not-allowed text-lg text-03">{operateText || icon}</span>;
18
+ return <span className="fec-crud-operate-btn cursor-not-allowed text-03">{operateText}</span>;
19
19
  } else {
20
20
  return (
21
21
  <Tooltip title={title}>
22
- <span className="cursor-not-allowed text-lg text-03">{icon}</span>
22
+ <span className="fec-crud-operate-btn fec-crud-operate-btn-icon cursor-not-allowed text-lg text-03">
23
+ {icon}
24
+ </span>
23
25
  </Tooltip>
24
26
  );
25
27
  }
@@ -27,7 +29,7 @@ function OperateBtn({
27
29
 
28
30
  if (operateText) {
29
31
  return (
30
- <span className="cursor-pointer text-lg text-primary" onClick={onClick}>
32
+ <span className="fec-crud-operate-btn cursor-pointer text-primary" onClick={onClick}>
31
33
  {operateText}
32
34
  </span>
33
35
  );
@@ -35,8 +37,11 @@ function OperateBtn({
35
37
 
36
38
  return (
37
39
  <Tooltip title={title}>
38
- <span className="cursor-pointer text-lg text-primary" onClick={onClick}>
39
- {operateText || icon}
40
+ <span
41
+ className="fec-crud-operate-btn fec-crud-operate-btn-icon cursor-pointer text-lg text-primary"
42
+ onClick={onClick}
43
+ >
44
+ {icon}
40
45
  </span>
41
46
  </Tooltip>
42
47
  );
@@ -9,6 +9,14 @@
9
9
  }
10
10
  }
11
11
 
12
+ .fec-crud {
13
+ // 只有 icon 才设置大小
14
+ .fec-crud-operate-btn.fec-crud-operate-btn-icon {
15
+ font-size: 20px;
16
+ line-height: 22px;
17
+ }
18
+ }
19
+
12
20
  .fec-crud.fec-crud-full-page {
13
21
  height: 100%;
14
22
  display: flex;
@@ -67,6 +75,25 @@
67
75
  scrollbar-width: thin;
68
76
  }
69
77
  }
78
+
79
+ &.ant-table-bordered {
80
+ .ant-table-container {
81
+ border-inline-start: none !important;
82
+ border-bottom: 1px solid var(--ant-table-border-color) !important;
83
+
84
+ .ant-table-thead {
85
+ & > tr > th:first-child {
86
+ border-inline-start: 1px solid var(--ant-table-border-color) !important;
87
+ }
88
+ }
89
+
90
+ .ant-table-row {
91
+ & > td:first-child {
92
+ border-inline-start: 1px solid var(--ant-table-border-color) !important;
93
+ }
94
+ }
95
+ }
96
+ }
70
97
  }
71
98
  }
72
99
  }
@@ -4,8 +4,13 @@ import classNames from 'classnames';
4
4
  import { useMemo } from 'react';
5
5
  import './style.scss';
6
6
 
7
- interface TableProps<DataSource = any, Params = any, ValueType = 'text'>
8
- extends ProTableProps<DataSource, Params, ValueType> {
7
+ interface TableProps<DataSource = any, Params = any, ValueType = 'text'> extends ProTableProps<
8
+ DataSource,
9
+ Params,
10
+ ValueType
11
+ > {
12
+ // 要求 rowKey 必须存在
13
+ rowKey: string;
9
14
  /** 区别 ProTable columns,默认 search: false */
10
15
  columns?: ProTableProps<DataSource, Params, ValueType>['columns'];
11
16
  }