@kne/table-page 0.1.2 → 0.1.4

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.
package/README.md CHANGED
@@ -305,38 +305,40 @@ const SortState = ({ sort }) => (
305
305
  </div>
306
306
  );
307
307
 
308
+ const TIP_TAG_STYLE = { marginRight: 8 };
309
+
308
310
  const Tips = () => (
309
311
  <div style={{ color: '#666', fontSize: 13, lineHeight: 1.8 }}>
310
312
  <div>
311
- <Tag color="blue">数据加载</Tag>
313
+ <Tag style={TIP_TAG_STYLE} color="blue">数据加载</Tag>
312
314
  通过 <code>loader</code> 模拟分页接口,请求参数为 <code>data.currentPage</code>、<code>data.perPage</code>。
313
315
  </div>
314
316
  <div>
315
- <Tag color="green">分页</Tag>
317
+ <Tag style={TIP_TAG_STYLE} color="green">分页</Tag>
316
318
  分页器渲染在表格外侧,翻页时以 <code>reload</code> 方式请求;<code>pageSize</code> 会持久化到 localStorage。
317
319
  </div>
318
320
  <div>
319
- <Tag color="gold">筛选</Tag>
321
+ <Tag style={TIP_TAG_STYLE} color="gold">筛选</Tag>
320
322
  顶部工具栏集成 <code>filter</code>、<code>search</code>、<code>batchActions</code>;筛选变化自动 <code>reload</code> 并回到第 1 页。
321
323
  </div>
322
324
  <div>
323
- <Tag color="orange">列配置</Tag>
325
+ <Tag style={TIP_TAG_STYLE} color="orange">列配置</Tag>
324
326
  设置 <code>name</code> 开启列宽拖动与显示/隐藏,「薪资范围」「学历」默认隐藏;状态列使用 <code>renderType="status"</code>,绩效列使用 <code>renderType="tag"</code>,操作列使用 <code>renderType="options"</code> 且 <code>fixed="right"</code>。
325
327
  </div>
326
328
  <div>
327
- <Tag color="cyan">排序</Tag>
329
+ <Tag style={TIP_TAG_STYLE} color="cyan">排序</Tag>
328
330
  配合 <code>Table.useSort</code> 与 <code>sortRender</code>,在 <code>onSortChange</code> 中调用 <code>reload</code> 传排序参数,与翻页一样不闪烁。
329
331
  </div>
330
332
  <div>
331
- <Tag color="geekblue">固定表头</Tag>
333
+ <Tag style={TIP_TAG_STYLE} color="geekblue">固定表头</Tag>
332
334
  设置 <code>sticky</code> 与 <code>scroll.y</code>,表体在固定高度内滚动时表头保持可见;横向滚动配合 <code>scroll.x</code>。
333
335
  </div>
334
336
  <div>
335
- <Tag color="magenta">单元格点击</Tag>
337
+ <Tag style={TIP_TAG_STYLE} color="magenta">单元格点击</Tag>
336
338
  列配置 <code>onClick</code>(配合 <code>renderType="main"</code>、<code>primary</code> / <code>hover</code>),仅可点击单元格 hover 时显示手型;工号列同步演示异步点击 loading。
337
339
  </div>
338
340
  <div>
339
- <Tag color="purple">总结栏</Tag>
341
+ <Tag style={TIP_TAG_STYLE} color="purple">总结栏</Tag>
340
342
  <code>summary</code> 回调可拿到 <code>data</code>、<code>requestParams</code> 等 fetch 上下文。
341
343
  </div>
342
344
  </div>
@@ -474,6 +476,251 @@ render(<BaseExample />);
474
476
 
475
477
  ```
476
478
 
479
+ - TablePage sticky scroll
480
+ - 自包含演示区:sticky + getScrollContainer 由区内页面滚动触发表头吸顶(非 scroll.y);模拟导航在区内 sticky,不遮挡文档站顶栏
481
+ - _TablePage(@kne/current-lib_table-page)[import * as _TablePage from "@kne/table-page"],(@kne/current-lib_table-page/dist/index.css),antd(antd),_ReactFilter(@kne/react-filter)[import * as _ReactFilter from "@kne/react-filter"],(@kne/react-filter/dist/index.css)
482
+
483
+ ```jsx
484
+ const { default: TablePage } = _TablePage;
485
+ const { fields } = _ReactFilter;
486
+ const { SuperSelectFilterItem } = fields;
487
+ const { Flex, Tag } = antd;
488
+ const { useRef, useMemo } = React;
489
+
490
+ const NAV_HEIGHT = 56;
491
+ const DEMO_HEIGHT = 600;
492
+ const TOTAL = 80;
493
+
494
+ const statusMap = {
495
+ active: { type: 'success', text: '在职' },
496
+ vacation: { type: 'warning', text: '休假' },
497
+ resigned: { type: 'default', text: '离职' },
498
+ probation: { type: 'processing', text: '试用期' }
499
+ };
500
+
501
+ const departments = ['技术研发部', '产品设计部', '市场营销部', '人力资源部', '财务部'];
502
+
503
+ const departmentOptions = departments.map(item => ({ value: item, label: item }));
504
+ const statusOptions = Object.entries(statusMap).map(([value, { text }]) => ({ value, label: text }));
505
+
506
+ const normalizeFilterValue = value => {
507
+ if (value == null) {
508
+ return value;
509
+ }
510
+ return Array.isArray(value) ? value[0] : value;
511
+ };
512
+
513
+ const applyFilters = (employees, data, requestParams) => {
514
+ const params = Object.assign({}, requestParams?.data, data);
515
+ let result = employees;
516
+
517
+ if (params.keyword) {
518
+ const keyword = String(params.keyword).toLowerCase();
519
+ result = result.filter(item => item.employeeNo.toLowerCase().includes(keyword) || item.name.includes(params.keyword));
520
+ }
521
+
522
+ const department = normalizeFilterValue(params.department);
523
+ if (department) {
524
+ result = result.filter(item => item.department === department);
525
+ }
526
+
527
+ const status = normalizeFilterValue(params.status);
528
+ if (status) {
529
+ result = result.filter(item => item.status === status);
530
+ }
531
+
532
+ return result;
533
+ };
534
+
535
+ const buildEmployee = index => {
536
+ const statusKeys = ['active', 'vacation', 'resigned', 'probation'];
537
+ return {
538
+ id: &#96;EMP${String(index + 1).padStart(4, '0')}&#96;,
539
+ employeeNo: &#96;EMP-2024-${String(index + 1).padStart(4, '0')}&#96;,
540
+ name: &#96;员工${index + 1}&#96;,
541
+ department: departments[index % departments.length],
542
+ position: ['工程师', '经理', '专员'][index % 3],
543
+ status: statusKeys[index % statusKeys.length],
544
+ joinDate: &#96;2024-${String((index % 12) + 1).padStart(2, '0')}-15&#96;
545
+ };
546
+ };
547
+
548
+ const allEmployees = Array.from({ length: TOTAL }, (_, index) => buildEmployee(index));
549
+
550
+ const columns = [
551
+ { name: 'employeeNo', title: '工号', width: 160, min: 120, max: 220, fixed: 'left', renderType: 'small' },
552
+ { name: 'name', title: '姓名', width: 100, renderType: 'main' },
553
+ { name: 'department', title: '部门', width: 150 },
554
+ { name: 'position', title: '职位', width: 120 },
555
+ {
556
+ name: 'status',
557
+ title: '状态',
558
+ width: 100,
559
+ renderType: 'status',
560
+ getValueOf: item => statusMap[item.status] || { type: 'default', text: item.status }
561
+ },
562
+ { name: 'joinDate', title: '入职日期', width: 120, format: 'date' }
563
+ ];
564
+
565
+ const TIP_TAG_STYLE = { marginRight: 8 };
566
+
567
+ const Tips = () => (
568
+ <div style={{ color: '#666', fontSize: 13, lineHeight: 1.8 }}>
569
+ <div>
570
+ <Tag style={TIP_TAG_STYLE} color="blue">页面滚动</Tag>
571
+ 在下方<strong>灰色边框演示区</strong>内滚动(非 <code>scroll.y</code>);表头通过 <code>sticky</code> + <code>getScrollContainer</code> 吸顶。
572
+ </div>
573
+ <div>
574
+ <Tag style={TIP_TAG_STYLE} color="green">getScrollContainer</Tag>
575
+ 指向演示区滚动容器;<code>scrollTopInset</code> 传入顶部导航占位高度(<code>{NAV_HEIGHT}px</code>),用于吸顶表头偏移与翻页滚回。
576
+ </div>
577
+ <div>
578
+ <Tag style={TIP_TAG_STYLE} color="gold">筛选栏</Tag>
579
+ 顶部工具栏含 <code>search</code> 与 <code>filter</code>;筛选变化会 <code>reload</code> 并回到第 1 页,翻页后滚回工具栏顶部。
580
+ </div>
581
+ <div>
582
+ <Tag style={TIP_TAG_STYLE} color="purple">横向 Scroller</Tag>
583
+ 表格底部未完全露出时,会在滚动容器底部显示横向滚动条(<code>horizontalScroller</code> 默认开启)。
584
+ </div>
585
+ <div>
586
+ <Tag style={TIP_TAG_STYLE} color="orange">操作提示</Tag>
587
+ 在演示区内向下滚动,蓝色导航条会吸顶,表格表头应固定在其下方;翻页后滚回表格顶部。
588
+ </div>
589
+ </div>
590
+ );
591
+
592
+ const BaseExample = () => {
593
+ const scrollRef = useRef(null);
594
+
595
+ const loader = useMemo(
596
+ () =>
597
+ ({ data, requestParams }) => {
598
+ const currentPage = Number(data?.currentPage) || 1;
599
+ const perPage = Number(data?.perPage) || 50;
600
+ const filteredEmployees = applyFilters(allEmployees, data, requestParams);
601
+ const start = (currentPage - 1) * perPage;
602
+ return new Promise(resolve => {
603
+ setTimeout(() => {
604
+ resolve({
605
+ pageData: filteredEmployees.slice(start, start + perPage),
606
+ totalCount: filteredEmployees.length
607
+ });
608
+ }, 200);
609
+ });
610
+ },
611
+ []
612
+ );
613
+
614
+ return (
615
+ <Flex vertical gap={16}>
616
+ <Tips />
617
+ <div
618
+ style={{
619
+ border: '1px solid #f0f0f0',
620
+ borderRadius: 8,
621
+ overflow: 'hidden',
622
+ background: '#fff'
623
+ }}
624
+ >
625
+ <div
626
+ ref={scrollRef}
627
+ style={{
628
+ height: DEMO_HEIGHT,
629
+ overflow: 'auto',
630
+ boxSizing: 'border-box'
631
+ }}
632
+ >
633
+ <div
634
+ style={{
635
+ position: 'sticky',
636
+ top: 0,
637
+ zIndex: 100,
638
+ height: NAV_HEIGHT,
639
+ display: 'flex',
640
+ alignItems: 'center',
641
+ padding: '0 24px',
642
+ color: '#fff',
643
+ fontWeight: 500,
644
+ background: '#1677ff',
645
+ boxShadow: '0 2px 8px rgba(0, 0, 0, 0.12)'
646
+ }}
647
+ >
648
+ 模拟顶部导航({NAV_HEIGHT}px)
649
+ </div>
650
+ <Flex vertical gap={16} style={{ padding: 16 }}>
651
+ <div
652
+ style={{
653
+ padding: '20px 24px',
654
+ background: '#f5f5f5',
655
+ borderRadius: 8,
656
+ color: '#666',
657
+ fontSize: 13
658
+ }}
659
+ >
660
+ 在演示区内继续向下滚动 ↓
661
+ </div>
662
+ <div
663
+ style={{
664
+ height: 520,
665
+ borderRadius: 8,
666
+ background: 'linear-gradient(180deg, #f0f5ff 0%, #fff 100%)',
667
+ border: '1px dashed #d9d9d9',
668
+ display: 'flex',
669
+ alignItems: 'center',
670
+ justifyContent: 'center',
671
+ color: '#999'
672
+ }}
673
+ >
674
+ 占位区域(模拟页面上方内容)
675
+ </div>
676
+ <TablePage
677
+ name="demo-table-page-sticky-scroll"
678
+ sticky
679
+ scrollTopInset={NAV_HEIGHT}
680
+ getScrollContainer={() => scrollRef.current}
681
+ scroll={{ x: 900 }}
682
+ search={{ name: 'keyword', label: '关键词', placeholder: '搜索工号/姓名', style: { width: 200 } }}
683
+ filter={{
684
+ list: [
685
+ [
686
+ {
687
+ type: SuperSelectFilterItem,
688
+ props: { name: 'department', label: '部门', single: true, options: departmentOptions }
689
+ },
690
+ {
691
+ type: SuperSelectFilterItem,
692
+ props: { name: 'status', label: '状态', single: true, options: statusOptions }
693
+ }
694
+ ]
695
+ ],
696
+ displayLine: 1
697
+ }}
698
+ pagination={{
699
+ open: true,
700
+ pageSize: 50,
701
+ cachePageSize: false,
702
+ showSizeChanger: true,
703
+ showQuickJumper: true
704
+ }}
705
+ dataFormat={data => ({
706
+ list: data.pageData,
707
+ total: data.totalCount
708
+ })}
709
+ loader={loader}
710
+ columns={columns}
711
+ />
712
+ <div style={{ height: 80, color: '#999', fontSize: 13, textAlign: 'center' }}>演示区底部留白</div>
713
+ </Flex>
714
+ </div>
715
+ </div>
716
+ </Flex>
717
+ );
718
+ };
719
+
720
+ render(<BaseExample />);
721
+
722
+ ```
723
+
477
724
  - TableView
478
725
  - 表格视图组件,支持行选择、列宽设置等
479
726
  - _TablePage(@kne/current-lib_table-page)[import * as _TablePage from "@kne/table-page"],(@kne/current-lib_table-page/dist/index.css),antd(antd)
@@ -1172,14 +1419,16 @@ const columns = [
1172
1419
  }
1173
1420
  ];
1174
1421
 
1422
+ const TIP_TAG_STYLE = { marginRight: 8 };
1423
+
1175
1424
  const Tips = () => (
1176
1425
  <div style={{ color: '#666', fontSize: 13, lineHeight: 1.8 }}>
1177
1426
  <div>
1178
- <Tag color="blue">表头省略</Tag>
1427
+ <Tag style={TIP_TAG_STYLE} color="blue">表头省略</Tag>
1179
1428
  列 <code>title</code> 超出列宽时自动单行省略,悬停 tooltip 显示完整标题;带排序的列同样生效(<code>Table</code> / <code>TableView</code> 均支持,无需额外配置)。
1180
1429
  </div>
1181
1430
  <div>
1182
- <Tag color="green">单元格省略</Tag>
1431
+ <Tag style={TIP_TAG_STYLE} color="green">单元格省略</Tag>
1183
1432
  列配置 <code>ellipsis: true</code> 或 <code>ellipsis: {'{ showTitle: true }'}</code>,单元格内容超出时省略,悬停显示完整内容(基于 antd Typography)。
1184
1433
  </div>
1185
1434
  <div style={{ color: '#999' }}>
@@ -1469,22 +1718,24 @@ const columns = [
1469
1718
  { name: 'remark', title: '备注', width: 200, min: 120, max: 400, hidden: true, renderType: 'description' }
1470
1719
  ];
1471
1720
 
1721
+ const TIP_TAG_STYLE = { marginRight: 8 };
1722
+
1472
1723
  const Tips = () => (
1473
1724
  <div style={{ color: '#666', fontSize: 13, lineHeight: 1.8 }}>
1474
1725
  <div>
1475
- <Tag color="blue">列宽拖动</Tag>
1726
+ <Tag style={TIP_TAG_STYLE} color="blue">列宽拖动</Tag>
1476
1727
  鼠标悬停表头列右侧,出现拖动手柄后可左右拖动调整列宽(受 <code>min</code> / <code>max</code> 约束)。仅 <code>Table</code> 组件支持。
1477
1728
  </div>
1478
1729
  <div>
1479
- <Tag color="green">显示/隐藏</Tag>
1730
+ <Tag style={TIP_TAG_STYLE} color="green">显示/隐藏</Tag>
1480
1731
  点击最后一列表头的 <strong>设置图标</strong>,可勾选显示或隐藏列、拖拽排序;配置通过 <code>name</code> 持久化到 localStorage。
1481
1732
  </div>
1482
1733
  <div>
1483
- <Tag color="orange">默认隐藏</Tag>
1734
+ <Tag style={TIP_TAG_STYLE} color="orange">默认隐藏</Tag>
1484
1735
  本示例中「备注」列设置了 <code>hidden: true</code>,可在列配置面板中重新显示。
1485
1736
  </div>
1486
1737
  <div>
1487
- <Tag color="purple">固定列</Tag>
1738
+ <Tag style={TIP_TAG_STYLE} color="purple">固定列</Tag>
1488
1739
  「订单编号」设置了 <code>fixed: 'left'</code>,固定显示且不可隐藏。
1489
1740
  </div>
1490
1741
  </div>
@@ -1677,19 +1928,21 @@ const columns = [
1677
1928
  }
1678
1929
  ];
1679
1930
 
1931
+ const TIP_TAG_STYLE = { marginRight: 8 };
1932
+
1680
1933
  const Tips = () => (
1681
1934
  <div style={{ color: '#666', fontSize: 13, lineHeight: 1.8 }}>
1682
1935
  <div>
1683
- <Tag color="blue">groupHeader</Tag>
1936
+ <Tag style={TIP_TAG_STYLE} color="blue">groupHeader</Tag>
1684
1937
  在列配置中通过 <code>groupHeader</code> 声明所属分组,相同 <code>name</code> 的列会自动合并为多级表头(仅 <code>Table</code> 支持)。
1685
1938
  </div>
1686
1939
  <div>
1687
- <Tag color="green">多级分组</Tag>
1940
+ <Tag style={TIP_TAG_STYLE} color="green">多级分组</Tag>
1688
1941
  <code>groupHeader</code> 为数组,按层级嵌套,例如{' '}
1689
1942
  <code>{&#96;[{ name: 'sales', title: '销售业绩' }, { name: 'detail', title: '明细' }]&#96;}</code>。
1690
1943
  </div>
1691
1944
  <div>
1692
- <Tag color="orange">排序</Tag>
1945
+ <Tag style={TIP_TAG_STYLE} color="orange">排序</Tag>
1693
1946
  分组表头可与 <code>useSort</code> 配合,排序按钮显示在叶子列表头。
1694
1947
  </div>
1695
1948
  </div>
@@ -1732,9 +1985,10 @@ render(<BaseExample />);
1732
1985
  | columns | array \| function | - | 列配置,见 TableView 的 columns 说明;也可传入函数 `(data) => columns` |
1733
1986
  | getColumns | function | - | 根据接口数据动态生成列配置 |
1734
1987
  | sticky | boolean | - | 是否启用粘性表头,仅 `renderType="Table"` 时生效 |
1988
+ | scrollTopInset | number \| string | - | 滚动容器顶部占位高度(如固定导航高度),用于吸顶表头 `top` 偏移、`scroll-margin-top` 与翻页滚回;支持 `56` / `'56px'` |
1989
+ | getScrollContainer | function | - | 页面级滚动容器;用于吸顶表头 `getContainer`、浮动横向滚动条定位与翻页滚回 |
1735
1990
  | renderType | `'Table'` \| `'TableView'` | `'Table'` | 表格渲染类型 |
1736
1991
  | horizontalScroller | boolean | `true` | 是否启用底部浮动横向滚动条(仅 `renderType="Table"` 且表格存在横向滚动时生效) |
1737
- | getScrollContainer | function | - | 浮动滚动条 portal 挂载容器,默认 `document.body` |
1738
1992
  | summary | function | - | 总结栏,回调参数包含 `data`、`requestParams`、`refresh`、`reload` 等 fetch 上下文 |
1739
1993
  | columnRenderProps | object | `{}` | 列渲染扩展属性,会合并进列 `render` 的 context |
1740
1994
  | filter | object | - | 顶部筛选器配置,基于 `@kne/react-filter` 的 `FilterLines`,见下方 |
@@ -1758,7 +2012,7 @@ render(<BaseExample />);
1758
2012
  | showQuickJumper | boolean | `true` | 是否展示快速跳转 |
1759
2013
  | hideOnSinglePage | boolean | `false` | 仅一页时是否隐藏分页器 |
1760
2014
  | pageSizeOptions | array | - | 每页条数选项 |
1761
- | pageSize | number | `20` | 默认每页条数,会持久化到 localStorage |
2015
+ | pageSize | number | `50` | 默认每页条数,会持久化到 localStorage |
1762
2016
  | showTotal | function | - | 自定义总数展示 `(total) => ReactNode` |
1763
2017
  | onChange | function | - | 自定义翻页回调 `(page, size) => void`,传入后覆盖默认请求逻辑 |
1764
2018
  | onShowSizeChange | function | - | 每页条数变化回调,组件内部已处理持久化 |
@@ -1991,6 +2245,9 @@ const sortedData = useMemo(() => Table.sortDataSource(dataSource, sort, columns)
1991
2245
  | emptyIsPlaceholder | boolean | `true` | 空值是否显示占位符 |
1992
2246
  | empty | ReactNode | `<Empty />` | 无数据时的展示内容 |
1993
2247
  | sticky | boolean | - | 是否启用粘性表头 |
2248
+ | scrollTopInset | number \| string | - | 滚动容器顶部占位高度,用于吸顶表头偏移与滚回定位;`stickyOffset` 为兼容别名 |
2249
+ | stickyOffset | number \| string | - | **已废弃**,请使用 `scrollTopInset` |
2250
+ | getStickyContainer | function | - | 页面级滚动容器,等同 TablePage 的 `getScrollContainer` |
1994
2251
  | headerStyle | object | - | 表头自定义样式 |
1995
2252
  | onRowSelect | function | - | 行点击回调 `(item, { columns, dataSource }) => void` |
1996
2253
  | render | function | - | 自定义渲染 `(props) => ReactNode`,`header` 为 `null`,`renderBody` 返回 antd Table |
package/dist/index.css CHANGED
@@ -6,12 +6,15 @@
6
6
  }
7
7
 
8
8
  .kne-table-page_CkWQu {
9
- max-width: none;
9
+ max-width: min(600px, 100vw - 32px);
10
10
  }
11
11
  .kne-table-page_CkWQu .ant-tooltip-inner {
12
- max-width: 600px;
12
+ max-width: 100%;
13
13
  max-height: 400px;
14
14
  overflow-y: auto;
15
+ overflow-wrap: anywhere;
16
+ word-break: break-word;
17
+ white-space: pre-wrap;
15
18
  }
16
19
 
17
20
  .kne-table-page_OXmYu {
@@ -46,6 +49,7 @@
46
49
 
47
50
  .kne-table-page_RnF6d {
48
51
  padding: 0 8px;
52
+ margin: 0 -8px;
49
53
  }
50
54
  .kne-table-page_RnF6d:hover {
51
55
  color: var(--primary-color, #1677ff);
@@ -97,7 +101,13 @@
97
101
  position: relative;
98
102
  border: 1px solid #f0f0f0;
99
103
  border-radius: var(--radius-default, 2px);
100
- overflow: hidden;
104
+ }
105
+
106
+ .kne-table-page_d1qN5 > .kne-table-page_KNy4z:first-child {
107
+ border-start-start-radius: var(--radius-default, 2px);
108
+ }
109
+ .kne-table-page_d1qN5 > .kne-table-page_KNy4z:last-child {
110
+ border-start-end-radius: var(--radius-default, 2px);
101
111
  }
102
112
 
103
113
  .kne-table-page_fUw6j {
@@ -144,6 +154,12 @@
144
154
  .kne-table-page_Z6mVv:last-child > .kne-table-page_KNy4z {
145
155
  border-bottom: none;
146
156
  }
157
+ .kne-table-page_Z6mVv:last-child > .kne-table-page_KNy4z:first-child {
158
+ border-end-start-radius: var(--radius-default, 2px);
159
+ }
160
+ .kne-table-page_Z6mVv:last-child > .kne-table-page_KNy4z:last-child {
161
+ border-end-end-radius: var(--radius-default, 2px);
162
+ }
147
163
 
148
164
  .kne-table-page_BSOzz {
149
165
  word-break: break-all;
@@ -222,9 +238,14 @@
222
238
 
223
239
  .kne-table-page_SRI8Q {
224
240
  padding: 8px;
241
+ border-end-start-radius: var(--radius-default, 2px);
242
+ border-end-end-radius: var(--radius-default, 2px);
225
243
  }
226
244
  .kne-table-page_awa1L {
227
245
  box-sizing: border-box;
246
+ position: relative;
247
+ border: 1px solid #f0f0f0;
248
+ border-radius: var(--radius-default, 2px);
228
249
  }
229
250
  .kne-table-page_awa1L .info-page-table-body {
230
251
  width: 100%;
@@ -255,6 +276,8 @@
255
276
  }
256
277
  .kne-table-page_awa1L .ant-table-header {
257
278
  background: var(--bg-color-grey-1) !important;
279
+ border-start-start-radius: var(--radius-default, 2px);
280
+ border-start-end-radius: var(--radius-default, 2px);
258
281
  }
259
282
  .kne-table-page_awa1L .ant-table-thead > tr > .ant-table-cell {
260
283
  word-break: normal;
@@ -305,9 +328,21 @@
305
328
  .kne-table-page_awa1L .ant-table-tbody > tr:last-child > .ant-table-cell {
306
329
  border-bottom-color: transparent !important;
307
330
  }
331
+ .kne-table-page_awa1L:not(.kne-table-page_Cb-du) .ant-table-tbody > tr:last-child > .ant-table-cell:first-child {
332
+ border-end-start-radius: var(--radius-default, 2px) !important;
333
+ }
334
+ .kne-table-page_awa1L:not(.kne-table-page_Cb-du) .ant-table-tbody > tr:last-child > .ant-table-cell:last-child {
335
+ border-end-end-radius: var(--radius-default, 2px) !important;
336
+ }
308
337
  .kne-table-page_awa1L.kne-table-page_Cb-du .ant-table-tbody > tr:last-child > .ant-table-cell {
309
338
  border-bottom-color: transparent !important;
310
339
  }
340
+ .kne-table-page_awa1L.kne-table-page_Cb-du .ant-table-summary > tr > .ant-table-cell:first-child {
341
+ border-end-start-radius: var(--radius-default, 2px) !important;
342
+ }
343
+ .kne-table-page_awa1L.kne-table-page_Cb-du .ant-table-summary > tr > .ant-table-cell:last-child {
344
+ border-end-end-radius: var(--radius-default, 2px) !important;
345
+ }
311
346
  .kne-table-page_awa1L.kne-table-page_Cb-du .ant-table-summary .ant-table-cell {
312
347
  background: var(--bg-color-grey-1, #fafafa) !important;
313
348
  font-weight: 500;
@@ -316,6 +351,8 @@
316
351
  }
317
352
  .kne-table-page_awa1L .ant-table-placeholder > .ant-table-cell {
318
353
  border: none !important;
354
+ border-end-start-radius: var(--radius-default, 2px) !important;
355
+ border-end-end-radius: var(--radius-default, 2px) !important;
319
356
  }
320
357
  .kne-table-page_awa1L.kne-table-page_7qTC5 .ant-table-thead > tr > .ant-table-cell {
321
358
  border-bottom: 1px solid #f0f0f0 !important;
@@ -335,7 +372,7 @@
335
372
  }
336
373
  .kne-table-page_awa1L.kne-table-page_jGzIR.kne-table-page_Kr-p6 .ant-table-header.ant-table-sticky-holder,
337
374
  .kne-table-page_awa1L.kne-table-page_jGzIR.kne-table-page_Kr-p6 .ant-table-thead.ant-table-sticky-holder {
338
- top: var(--sticky-offset, var(--nav-height, 0px)) !important;
375
+ top: var(--scroll-top-inset, var(--sticky-offset, var(--nav-height, 0px))) !important;
339
376
  }
340
377
  .kne-table-page_awa1L.kne-table-page_jGzIR .ant-table-measure-row {
341
378
  height: 0;
@@ -648,18 +685,44 @@
648
685
  min-width: 0;
649
686
  }
650
687
  .kne-table-page_dxN6N .info-page-table {
651
- scroll-margin-top: var(--sticky-offset, var(--nav-height, 0px));
688
+ scroll-margin-top: var(--scroll-top-inset, var(--sticky-offset, var(--nav-height, 0px)));
652
689
  }
653
690
 
654
691
  .kne-table-page_sf06r {
655
692
  border: 1px solid #f0f0f0;
656
693
  border-radius: var(--radius-default, 2px);
657
- overflow: hidden;
694
+ }
695
+ .kne-table-page_sf06r .table-page-toolbar {
696
+ border-start-start-radius: var(--radius-default, 2px);
697
+ border-start-end-radius: var(--radius-default, 2px);
698
+ }
699
+ .kne-table-page_sf06r .table-page-toolbar-section {
700
+ scroll-margin-top: var(--scroll-top-inset, var(--sticky-offset, var(--nav-height, 0px)));
658
701
  }
659
702
  .kne-table-page_sf06r .info-page-table {
660
703
  border: none;
661
704
  border-radius: 0;
662
705
  }
706
+ .kne-table-page_sf06r .info-page-table .ant-table-header {
707
+ border-start-start-radius: 0 !important;
708
+ border-start-end-radius: 0 !important;
709
+ }
710
+ .kne-table-page_sf06r .info-page-table:not(.kne-table-page_IRdzb) .ant-table-tbody > tr:last-child > .ant-table-cell:first-child {
711
+ border-end-start-radius: var(--radius-default, 2px) !important;
712
+ }
713
+ .kne-table-page_sf06r .info-page-table:not(.kne-table-page_IRdzb) .ant-table-tbody > tr:last-child > .ant-table-cell:last-child {
714
+ border-end-end-radius: var(--radius-default, 2px) !important;
715
+ }
716
+ .kne-table-page_sf06r .info-page-table.kne-table-page_IRdzb .ant-table-summary > tr > .ant-table-cell:first-child {
717
+ border-end-start-radius: var(--radius-default, 2px) !important;
718
+ }
719
+ .kne-table-page_sf06r .info-page-table.kne-table-page_IRdzb .ant-table-summary > tr > .ant-table-cell:last-child {
720
+ border-end-end-radius: var(--radius-default, 2px) !important;
721
+ }
722
+ .kne-table-page_sf06r .info-page-table .ant-table-placeholder > .ant-table-cell {
723
+ border-end-start-radius: var(--radius-default, 2px) !important;
724
+ border-end-end-radius: var(--radius-default, 2px) !important;
725
+ }
663
726
  .kne-table-page_sf06r .table-page-toolbar-section--has-value + .info-page-table .ant-table-thead > tr.info-page-table-header:first-child > .ant-table-cell {
664
727
  border-top: none !important;
665
728
  }
@@ -760,7 +823,6 @@
760
823
  .kne-table-page_pB5en .ant-input-search {
761
824
  background: var(--bg-color-grey-1, #f5f5f5);
762
825
  border-radius: var(--radius-default, 2px);
763
- overflow: hidden;
764
826
  }
765
827
  .kne-table-page_pB5en .ant-input-search .ant-input-affix-wrapper,
766
828
  .kne-table-page_pB5en .ant-input-search .ant-input {
@@ -802,7 +864,6 @@
802
864
  .kne-table-page_Jyfm7 {
803
865
  flex: 1;
804
866
  min-width: 0;
805
- overflow: hidden;
806
867
  display: flex;
807
868
  align-items: center;
808
869
  }