@kdcloudjs/table 1.1.3-canary.9 → 1.1.4-canary.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/dist/@kdcloudjs/table.css +1 -1
  2. package/dist/@kdcloudjs/table.js +246 -161
  3. package/dist/@kdcloudjs/table.js.map +1 -1
  4. package/dist/@kdcloudjs/table.min.css +1 -1
  5. package/dist/@kdcloudjs/table.min.js +10 -9
  6. package/dist/@kdcloudjs/table.min.js.map +1 -1
  7. package/es/table/base/styles.d.ts +5 -2
  8. package/es/table/base/styles.js +11 -6
  9. package/es/table/base/table.d.ts +2 -0
  10. package/es/table/base/table.js +27 -50
  11. package/es/table/base/utils.d.ts +7 -0
  12. package/es/table/base/utils.js +29 -1
  13. package/es/table/pipeline/features/columnDrag.js +5 -4
  14. package/es/table/pipeline/features/columnFilter.d.ts +1 -1
  15. package/es/table/pipeline/features/columnResizeWidth.js +1 -1
  16. package/es/table/pipeline/features/filter/DefaultFilterContent.js +22 -2
  17. package/es/table/pipeline/features/filter/DefaultFilterIcon.d.ts +5 -0
  18. package/es/table/pipeline/features/filter/DefaultFilterIcon.js +20 -0
  19. package/es/table/pipeline/features/filter/Filter.d.ts +1 -1
  20. package/es/table/pipeline/features/filter/Filter.js +16 -20
  21. package/es/table/pipeline/features/filter/FilterPanel.js +21 -15
  22. package/es/table/pipeline/pipeline.js +1 -1
  23. package/es/table/utils/keyCode.d.ts +4 -0
  24. package/es/table/utils/keyCode.js +4 -0
  25. package/es/table/utils/mergeCellProps.js +2 -6
  26. package/lib/table/base/styles.d.ts +5 -2
  27. package/lib/table/base/styles.js +11 -6
  28. package/lib/table/base/table.d.ts +2 -0
  29. package/lib/table/base/table.js +27 -50
  30. package/lib/table/base/utils.d.ts +7 -0
  31. package/lib/table/base/utils.js +35 -1
  32. package/lib/table/pipeline/features/columnDrag.js +5 -4
  33. package/lib/table/pipeline/features/columnFilter.d.ts +1 -1
  34. package/lib/table/pipeline/features/columnResizeWidth.js +1 -1
  35. package/lib/table/pipeline/features/filter/DefaultFilterContent.js +23 -1
  36. package/lib/table/pipeline/features/filter/DefaultFilterIcon.d.ts +5 -0
  37. package/lib/table/pipeline/features/filter/DefaultFilterIcon.js +30 -0
  38. package/lib/table/pipeline/features/filter/Filter.d.ts +1 -1
  39. package/lib/table/pipeline/features/filter/Filter.js +17 -20
  40. package/lib/table/pipeline/features/filter/FilterPanel.js +21 -14
  41. package/lib/table/pipeline/pipeline.js +1 -1
  42. package/lib/table/utils/keyCode.d.ts +4 -0
  43. package/lib/table/utils/keyCode.js +11 -0
  44. package/lib/table/utils/mergeCellProps.js +2 -6
  45. package/package.json +1 -1
@@ -2,6 +2,7 @@ export declare const LOCK_SHADOW_PADDING = 20;
2
2
  export declare const Classes: {
3
3
  /** BaseTable 表格组件的外层包裹 div */
4
4
  readonly artTableWrapper: string;
5
+ readonly artTableBordered: string;
5
6
  readonly artTable: string;
6
7
  readonly tableHeaderMain: string;
7
8
  readonly tableHeader: string;
@@ -114,13 +115,13 @@ export declare type BaseTableCSSVariables = Partial<{
114
115
  '--border-color': string;
115
116
  /** 单元格边框,默认为 1px solid #dfe3e8 */
116
117
  '--cell-border': string;
117
- /** 单元格上下边框,默认为 #dfe3e8 */
118
+ /** 单元格上下边框,默认为 none ,默认值为 1px solid #dfe3e8 */
118
119
  '--cell-border-horizontal': string;
119
120
  /** 单元格左右边框,默认为 #dfe3e8 */
120
121
  '--cell-border-vertical': string;
121
122
  /** 表头单元格边框,默认为 1px solid #dfe3e8 */
122
123
  '--header-cell-border': string;
123
- /** 表头单元格上下边框,默认为 1px solid #dfe3e8 */
124
+ /** 表头单元格上下边框,默认为 none ,默认值为 1px solid #dfe3e8 */
124
125
  '--header-cell-border-horizontal': string;
125
126
  /** 表头单元格左右边框,默认为 1px solid #dfe3e8 */
126
127
  '--header-cell-border-vertical': string;
@@ -150,7 +151,9 @@ export declare const defaultCSSVariables: {
150
151
  '--cell-border-horizontal': string;
151
152
  '---cell-border-vertical': string;
152
153
  '--header-cell-border': string;
154
+ '--cell-border-vertical': string;
153
155
  '--header-cell-border-horizontal': string;
156
+ '--header-cell-border-vertical': string;
154
157
  };
155
158
  export declare const variableConst: string;
156
159
  export declare const StyledArtTableWrapper: any;
@@ -1,6 +1,6 @@
1
1
  import _taggedTemplateLiteral from "@babel/runtime-corejs3/helpers/taggedTemplateLiteral";
2
2
 
3
- var _templateObject, _templateObject2, _templateObject3;
3
+ var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5;
4
4
 
5
5
  import _Object$keys from "@babel/runtime-corejs3/core-js-stable/object/keys";
6
6
  import _concatInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/concat";
@@ -10,6 +10,7 @@ var prefix = 'kd-';
10
10
  export var Classes = {
11
11
  /** BaseTable 表格组件的外层包裹 div */
12
12
  artTableWrapper: "".concat(prefix, "table-wrapper"),
13
+ artTableBordered: "".concat(prefix, "table-bordered"),
13
14
  artTable: "".concat(prefix, "table"),
14
15
  tableHeaderMain: "".concat(prefix, "table-header-main"),
15
16
  tableHeader: "".concat(prefix, "table-header"),
@@ -93,7 +94,7 @@ var Z = {
93
94
  scrollItem: 30,
94
95
  loadingIndicator: 40
95
96
  };
96
- var outerBorderStyleMixin = css(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n border-top: 1px solid #cccccc;\n border-right: 1px solid #cccccc;\n border-bottom: 1px solid #cccccc;\n border-left: 1px solid #cccccc;\n\n td.", ",\n th.", " {\n border-left: none;\n }\n td.", ",\n th.", " {\n --border-right: none;\n }\n\n thead tr.", " th,\n tbody tr.", " td {\n border-top: none;\n }\n &.has-footer tfoot tr.", " td {\n border-bottom: none;\n }\n &:not(.has-footer) tbody tr.", " td {\n border-bottom: none;\n }\n td.", ":not(.", "){\n border-left: var(---cell-border-vertical);\n }\n td.", ":not(.", "){\n border-right: var(---cell-border-vertical);\n }\n"])), Classes.first, Classes.first, Classes.last, Classes.last, Classes.first, Classes.first, Classes.last, Classes.last, Classes.rowSpan, Classes.first, Classes.rowSpan, Classes.last);
97
+ var outerBorderStyleMixin = css(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n border-top: 1px solid #cccccc;\n border-right: 1px solid #cccccc;\n border-bottom: 1px solid #cccccc;\n border-left: 1px solid #cccccc;\n\n td.", ",\n th.", " {\n border-left: none;\n }\n td.", ",\n th.", " {\n border-right: none;\n }\n\n thead tr.", " th,\n tbody tr.", " td {\n border-top: none;\n }\n &.has-footer tfoot tr.", " td {\n border-bottom: none;\n }\n &:not(.has-footer) tbody tr.", " td {\n border-bottom: none;\n }\n td.", ":not(.", "){\n border-left: var(---cell-border-vertical);\n }\n td.", ":not(.", "){\n border-right: var(---cell-border-vertical);\n }\n"])), Classes.first, Classes.first, Classes.last, Classes.last, Classes.first, Classes.first, Classes.last, Classes.last, Classes.rowSpan, Classes.first, Classes.rowSpan, Classes.last);
97
98
  export var defaultCSSVariables = {
98
99
  '--row-height': '48px',
99
100
  '--color': '#333',
@@ -103,7 +104,7 @@ export var defaultCSSVariables = {
103
104
  '--primary-color': '#5582F3',
104
105
  '--primary-color-level1': 'rgb(242, 248, 255)',
105
106
  '--primary-color-level2': 'rgb(135, 173, 255)',
106
- '--icon-color': '#bfbfbf',
107
+ '--icon-color': '#666666',
107
108
  '--strong-border-color': '#d9d9d9',
108
109
  '--header-row-height': '32px',
109
110
  '--header-color': '#333',
@@ -119,11 +120,15 @@ export var defaultCSSVariables = {
119
120
  '--cell-border-horizontal': '1px solid #dfe3e8',
120
121
  '---cell-border-vertical': '1px solid #dfe3e8',
121
122
  '--header-cell-border': '1px solid #dfe3e8',
122
- '--header-cell-border-horizontal': '1px solid #dfe3e8'
123
+ '--cell-border-vertical': '1px solid #dfe3e8',
124
+ '--header-cell-border-horizontal': '1px solid #dfe3e8',
125
+ '--header-cell-border-vertical': '1px solid #dfe3e8'
123
126
  };
124
127
  export var variableConst = getCssVariableText(defaultCSSVariables);
125
- export var StyledArtTableWrapper = styled.div(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["\n :root {\n ", "\n }\n ", "\n\n box-sizing: border-box;\n * {\n box-sizing: border-box;\n }\n cursor: default;\n color: var(--color);\n font-size: var(--font-size);\n line-height: var(--line-height);\n position: relative;\n\n // \u8868\u683C\u5916\u8FB9\u6846\u7531 art-table-wrapper \u63D0\u4F9B\uFF0C\u800C\u4E0D\u662F\u7531\u5355\u5143\u683C\u63D0\u4F9B\n &.use-outer-border {\n ", ";\n }\n\n .no-scrollbar {\n ::-webkit-scrollbar {\n display: none;\n }\n }\n\n .", " {\n overflow: auto;\n flex-shrink: 1;\n flex-grow: 1;\n display: flex;\n flex-direction: column;\n }\n\n .", " {\n overflow: hidden;\n background: var(--header-bgcolor);\n display: flex;\n flex-shrink: 0;\n border-bottom: var(--header-cell-border-horizontal);\n }\n\n .", " {\n display: flex;\n // justify-content: flex-start;\n align-items: center;\n height: inherit;\n }\n\n .", " {\n overflow-x:auto;\n flex-shrink: 0;\n flex-grow: 0;\n scrollbar-width: none; // \u517C\u5BB9\u706B\u72D0\n & {\n ::-webkit-scrollbar {\n display:none;\n }\n }\n }\n\n .", " {\n display: flex;\n flex: none;\n }\n .", ", .", " {\n background: var(--bgcolor);\n overflow: auto;\n overflow-x: hidden;\n overflow-anchor: none;\n position:relative;\n &.empty {\n position: relative;\n }\n }\n\n .", " {\n position: relative;\n }\n .", ", .", " {\n .", "{\n background-color: #e6effb !important;\n }\n .", "{\n border-top: 1px solid #0E5FD8 !important;\n }\n .", "{\n border-left: 1px solid #0E5FD8 !important;\n }\n .", "{\n border-bottom: 1px solid #0E5FD8 !important;\n }\n .", "{\n border-right: 1px solid #0E5FD8 !important;\n }\n }\n \n .", " {\n user-select:none;\n }\n\n\n &.sticky-header .", " {\n position: sticky;\n top: 0;\n z-index: ", ";\n }\n\n &.sticky-footer .", " {\n position: sticky;\n bottom: 0;\n z-index: ", ";\n }\n\n table {\n width: 0;\n table-layout: fixed;\n border-collapse: separate;\n border-spacing: 0;\n display: table;\n margin: 0;\n padding: 0;\n flex-shrink: 0;\n flex-grow: 0;\n position:relative;\n }\n\n // \u5728 tr \u4E0A\u8BBE\u7F6E .no-hover \u53EF\u4EE5\u7981\u7528\u9F20\u6807\u60AC\u505C\u6548\u679C\n tr:not(.no-hover):hover > td {\n background: var(--hover-bgcolor);\n }\n // \u4F7F\u7528 js \u6DFB\u52A0\u60AC\u6D6E\u6548\u679C\n tr:not(.no-hover).row-hover > td {\n background: var(--hover-bgcolor);\n }\n // \u5728 tr \u8BBE\u7F6E highlight \u53EF\u4EE5\u4E3A\u5E95\u4E0B\u7684 td \u8BBE\u7F6E\u4E3A\u9AD8\u4EAE\u8272\n // \u800C\u8BBE\u7F6E .no-highlight \u7684\u8BDD\u5219\u53EF\u4EE5\u7981\u7528\u9AD8\u4EAE\u6548\u679C\uFF1B\n tr:not(.no-highlight).highlight > td {\n background: var(--highlight-bgcolor);\n }\n\n th {\n font-weight: normal;\n text-align: left;\n padding: var(--cell-padding);\n height: var(--header-row-height);\n color: var(--header-color);\n background: var(--header-bgcolor);\n border:1px solid transparent;\n border-right: var(--header-cell-border-vertical);\n border-bottom: var(--header-cell-border-horizontal);\n position: relative;\n }\n\n th.resizeable{\n border-right:none\n }\n\n th.", " {\n border-right: none;\n border-bottom: none;\n }\n\n tr.", " th {\n border-top: var(--header-cell-border-horizontal);\n }\n th.", " {\n border-left: var(--header-cell-border-vertical);\n }\n\n td {\n padding: var(--cell-padding);\n background: var(--bgcolor);\n height: var(--row-height);\n border:1px solid transparent;\n border-right: var(--cell-border-vertical);\n border-bottom: var(--cell-border-horizontal);\n word-break: break-all;\n }\n td.", " {\n border-left: var(--cell-border-vertical);\n }\n tr.", " td {\n border-top: var(--cell-border-horizontal);\n }\n &.has-header tbody tr.", " td {\n border-top: none;\n }\n &.has-footer tbody tr.", " td {\n border-bottom: none;\n }\n\n .", ",\n .", " {\n z-index: ", ";\n }\n\n //#region \u9501\u5217\u9634\u5F71\n .", " {\n position: absolute;\n top: 0;\n bottom: 0;\n z-index: ", ";\n pointer-events: none;\n overflow: hidden;\n\n .", " {\n height: 100%;\n }\n\n .", " {\n margin-right: ", "px;\n box-shadow: none;\n\n &.show-shadow {\n box-shadow: var(--lock-shadow);\n border-right: var(--cell-border-vertical);\n }\n }\n\n .", " {\n margin-left: ", "px;\n box-shadow: none;\n\n &.show-shadow {\n box-shadow: var(--lock-shadow);\n border-left: var(--cell-border-vertical);\n }\n }\n }\n //#endregion\n\n //#region \u7A7A\u8868\u683C\u5C55\u73B0\n .", " {\n pointer-events: none;\n color: #99a3b3;\n font-size: 12px;\n text-align: center;\n position: absolute;\n left: 50%;\n top: 50%;\n transform: translate(-50%, -50%);\n\n .empty-image {\n width: 50px;\n height: 50px;\n }\n\n .empty-tips {\n margin-top: 16px;\n line-height: 1.5;\n }\n }\n //#endregion\n\n //#region IE\u517C\u5BB9\n &.ie-polyfill-wrapper {\n //\u9501\u5B9A\u5217\u517C\u5BB9 \u4EC5\u5728\u9501\u5B9A\u5217\u7684\u60C5\u51B5\u4E0B\u751F\u6548\n .", " {\n overflow-x: hidden;\n }\n .", ", .", " {\n position:relative;\n }\n .", " {\n overflow: hidden;\n }\n .", " {\n position: relative;\n }\n\n .", " {\n overflow: auto;\n overflow-x: hidden;\n overflow-anchor: none;\n }\n\n .", ", .", "{\n position: absolute;\n z-index: ", ";\n top: 0;\n }\n .", "{\n left:0;\n }\n .", "{\n right:0;\n }\n\n .", "{\n .", "{\n position: absolute;\n top: 0;\n width: 100%;\n z-index: ", ";\n }\n }\n\n tr:not(.no-hover).row-hover > td {\n background: var(--hover-bgcolor);\n }\n }\n //#endregion\n\n //#region \u7C98\u6027\u6EDA\u52A8\u6761\n .", " {\n overflow-y: hidden;\n overflow-x: auto;\n z-index: ", ";\n flex-shrink: 0;\n flex-grow: 0;\n border-top: 1px solid var(--border-color);\n background: var(--bgcolor);\n }\n\n .", " {\n // \u5FC5\u987B\u6709\u9AD8\u5EA6\u624D\u80FD\u51FA\u73B0\u6EDA\u52A8\u6761\n height: 1px;\n visibility: hidden;\n }\n //#endregion\n\n //#region \u52A0\u8F7D\u6837\u5F0F\n .", " {\n position: relative;\n width: 100%;\n height: 100%;\n overflow: auto;\n\n .", " {\n filter: none;\n width: 100%;\n height: 100%;\n overflow: hidden;//\u5217\u5168\u90E8\u56FA\u5B9A\u65F6\uFF0C\u5B58\u5728\u53CC\u6A2A\u5411\u6EDA\u52A8\u6761\n display: flex;\n position: relative;\n flex-direction: column;\n }\n\n .", " {\n position: absolute;\n left: 0;\n right: 0;\n top: 0;\n bottom: 0;\n pointer-events: none;\n }\n\n .", " {\n position: sticky;\n z-index: ", ";\n transform: translateY(-50%);\n }\n }\n //#endregion\n\n //#region \u8868\u683C\u8FC7\u6EE4\n .", " {\n color:var(--icon-color);\n &.active{\n color:var(--primary-color);\n }\n }\n //#endregion\n\n //#region \u8868\u683C\u6392\u5E8F\n .", " {\n color:var(--icon-color);\n &.active{\n color:var(--primary-color);\n }\n }\n //#endregion\n\n //#region \u6EDA\u52A8\u6761\u5360\u4F4D\n .", " {\n visibility: hidden;\n flex-shrink: 0;\n }\n .", " .", " {\n border-top: var(--cell-border-horizontal);\n }\n //#endregion\n "])), variableConst, variableConst, outerBorderStyleMixin, Classes.artTable, Classes.tableHeader, Classes.tableHeaderCellContent, Classes.virtual, Classes.tableFooter, Classes.tableBody, Classes.tableFooter, Classes.tableRow, Classes.tableBody, Classes.tableFooter, Classes.tableCellRangeSelected, Classes.tableCellRangeTop, Classes.tableCellRangeLeft, Classes.tableCellRangeBottom, Classes.tableCellRangeRight, Classes.rangeSelection, Classes.tableHeader, Z.header, Classes.tableFooter, Z.footer, Classes.leaf, Classes.first, Classes.first, Classes.first, Classes.first, Classes.first, Classes.last, Classes.lockLeft, Classes.lockRight, Z.lock, Classes.lockShadowMask, Z.lockShadow, Classes.lockShadow, Classes.leftLockShadow, LOCK_SHADOW_PADDING, Classes.rightLockShadow, LOCK_SHADOW_PADDING, Classes.emptyWrapper, Classes.virtual, Classes.tableBody, Classes.tableFooter, Classes.tableHeaderMain, Classes.tableHeader, Classes.tableFooterMain, Classes.fixedLeft, Classes.fixedRight, Z.lock, Classes.fixedLeft, Classes.fixedRight, Classes.rowDetailContainer, Classes.rowDetailItem, Z.rowDetail, Classes.stickyScroll, Z.scrollItem, Classes.stickyScrollItem, Classes.loadingWrapper, Classes.loadingContentWrapper, Classes.loadingIndicatorWrapper, Classes.loadingIndicator, Z.loadingIndicator, Classes.tableFilterTrigger, Classes.tableSortIcon, Classes.verticalScrollPlaceholder, Classes.tableFooter, Classes.verticalScrollPlaceholder);
126
- export var ButtonCSS = css(_templateObject3 || (_templateObject3 = _taggedTemplateLiteral(["\n ", "\n //#region \u6309\u94AE\n .", "{\n color: var(--color);\n background:#ffffff;\n border:1px solid var(--strong-border-color);\n border-radius: 2px;\n cursor: pointer;\n &:hover{\n color: var(--primary-color);\n border:1px solid var(--primary-color);\n }\n }\n .", " {\n color:#ffffff;\n background-color: var(--primary-color);\n border:none;\n &:hover{\n color:#ffffff;\n background-color: var(--primary-color-level2);\n border:none;\n }\n }\n//#endregion\n"])), variableConst, Classes.button, Classes.buttonPrimary);
128
+ var notBorderedStyleMixin = css(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["\n --cell-border-vertical: none;\n --header-cell-border-vertical: none;\n"])));
129
+ var borderedStyleMixin = css(_templateObject3 || (_templateObject3 = _taggedTemplateLiteral(["\n //th\u9690\u85CF\u5217\u5BBD\u62D6\u62FD\u7684\u80CC\u666F\u8272\uFF0C\u4F7F\u7528th\u7684\u53F3\u8FB9\u6846\u4EE3\u66FF\n .", "::after{\n background-color: inherit;\n }\n"])), Classes.tableHeaderCellResize);
130
+ export var StyledArtTableWrapper = styled.div(_templateObject4 || (_templateObject4 = _taggedTemplateLiteral(["\n :root {\n ", "\n }\n ", "\n\n box-sizing: border-box;\n * {\n box-sizing: border-box;\n }\n cursor: default;\n color: var(--color);\n font-size: var(--font-size);\n line-height: var(--line-height);\n position: relative;\n\n // \u8868\u683C\u5916\u8FB9\u6846\u7531 art-table-wrapper \u63D0\u4F9B\uFF0C\u800C\u4E0D\u662F\u7531\u5355\u5143\u683C\u63D0\u4F9B\n &.use-outer-border {\n ", ";\n }\n\n // \u8868\u683C\u4E0D\u542F\u7528\u8FB9\u6846\u7EBF\uFF0C\u9690\u85CFth\u3001td\u7684\u5355\u5143\u683C\u5DE6\u53F3\u8FB9\u6846\u7EBF\n &:not(.", ") {\n ", "\n }\n &.", "{\n ", "\n }\n\n .no-scrollbar {\n ::-webkit-scrollbar {\n display: none;\n }\n }\n\n .", " {\n overflow: auto;\n flex-shrink: 1;\n flex-grow: 1;\n display: flex;\n flex-direction: column;\n }\n\n .", " {\n overflow: hidden;\n background: var(--header-bgcolor);\n display: flex;\n flex-shrink: 0;\n border-bottom: var(--header-cell-border-horizontal);\n }\n\n .", " {\n display: flex;\n // justify-content: flex-start;\n align-items: center;\n height: inherit;\n }\n\n .", " {\n overflow-x:auto;\n flex-shrink: 0;\n flex-grow: 0;\n scrollbar-width: none; // \u517C\u5BB9\u706B\u72D0\n & {\n ::-webkit-scrollbar {\n display:none;\n }\n }\n }\n\n .", " {\n display: flex;\n flex: none;\n }\n .", ", .", " {\n background: var(--bgcolor);\n overflow: auto;\n overflow-x: hidden;\n overflow-anchor: none;\n position:relative;\n &.empty {\n position: relative;\n }\n }\n\n .", " {\n position: relative;\n }\n .", ", .", " {\n .", "{\n background-color: #e6effb !important;\n }\n .", "{\n border-top: 1px solid #0E5FD8 !important;\n }\n .", "{\n border-left: 1px solid #0E5FD8 !important;\n }\n .", "{\n border-bottom: 1px solid #0E5FD8 !important;\n }\n .", "{\n border-right: 1px solid #0E5FD8 !important;\n }\n }\n \n .", " {\n user-select:none;\n }\n\n\n &.sticky-header .", " {\n position: sticky;\n top: 0;\n z-index: ", ";\n }\n\n &.sticky-footer .", " {\n position: sticky;\n bottom: 0;\n z-index: ", ";\n }\n\n table {\n width: 0;\n table-layout: fixed;\n border-collapse: separate;\n border-spacing: 0;\n display: table;\n margin: 0;\n padding: 0;\n flex-shrink: 0;\n flex-grow: 0;\n position:relative;\n }\n\n // \u5728 tr \u4E0A\u8BBE\u7F6E .no-hover \u53EF\u4EE5\u7981\u7528\u9F20\u6807\u60AC\u505C\u6548\u679C\n tr:not(.no-hover):hover > td {\n background: var(--hover-bgcolor);\n }\n // \u4F7F\u7528 js \u6DFB\u52A0\u60AC\u6D6E\u6548\u679C\n tr:not(.no-hover).row-hover > td {\n background: var(--hover-bgcolor);\n }\n // \u5728 tr \u8BBE\u7F6E highlight \u53EF\u4EE5\u4E3A\u5E95\u4E0B\u7684 td \u8BBE\u7F6E\u4E3A\u9AD8\u4EAE\u8272\n // \u800C\u8BBE\u7F6E .no-highlight \u7684\u8BDD\u5219\u53EF\u4EE5\u7981\u7528\u9AD8\u4EAE\u6548\u679C\uFF1B\n tr:not(.no-highlight).highlight > td {\n background: var(--highlight-bgcolor);\n }\n\n th {\n font-weight: normal;\n text-align: left;\n padding: var(--cell-padding);\n height: var(--header-row-height);\n color: var(--header-color);\n background: var(--header-bgcolor);\n border:1px solid transparent;\n border-right: var(--header-cell-border-vertical);\n border-bottom: var(--header-cell-border-horizontal);\n position: relative;\n }\n\n th.resizeable{\n border-right: var(--header-cell-border-vertical)\n }\n\n th.", " {\n border-right: var(--header-cell-border-vertical);\n border-bottom: none;\n }\n\n tr.", " th {\n border-top: var(--header-cell-border-horizontal);\n }\n th.", " {\n border-left: var(--header-cell-border-vertical);\n }\n\n td {\n padding: var(--cell-padding);\n background: var(--bgcolor);\n height: var(--row-height);\n border:1px solid transparent;\n border-right: var(--cell-border-vertical);\n border-bottom: var(--cell-border-horizontal);\n word-break: break-all;\n }\n td.", " {\n border-left: var(--cell-border-vertical);\n }\n tr.", " td {\n border-top: var(--cell-border-horizontal);\n }\n &.has-header tbody tr.", " td {\n border-top: none;\n }\n &.has-footer tbody tr.", " td {\n border-bottom: none;\n }\n\n .", ",\n .", " {\n z-index: ", ";\n }\n\n //#region \u9501\u5217\u9634\u5F71\n .", " {\n position: absolute;\n top: 0;\n bottom: 0;\n z-index: ", ";\n pointer-events: none;\n overflow: hidden;\n\n .", " {\n height: 100%;\n }\n\n .", " {\n margin-right: ", "px;\n box-shadow: none;\n\n &.show-shadow {\n box-shadow: var(--lock-shadow);\n border-right: var(--cell-border-vertical);\n }\n }\n\n .", " {\n margin-left: ", "px;\n box-shadow: none;\n\n &.show-shadow {\n box-shadow: var(--lock-shadow);\n border-left: var(--cell-border-vertical);\n }\n }\n }\n //#endregion\n\n //#region \u7A7A\u8868\u683C\u5C55\u73B0\n .", " {\n pointer-events: none;\n color: #99a3b3;\n font-size: 12px;\n text-align: center;\n position: absolute;\n left: 50%;\n top: 50%;\n transform: translate(-50%, -50%);\n\n .empty-image {\n width: 50px;\n height: 50px;\n }\n\n .empty-tips {\n margin-top: 16px;\n line-height: 1.5;\n }\n }\n //#endregion\n\n //#region IE\u517C\u5BB9\n &.ie-polyfill-wrapper {\n //\u9501\u5B9A\u5217\u517C\u5BB9 \u4EC5\u5728\u9501\u5B9A\u5217\u7684\u60C5\u51B5\u4E0B\u751F\u6548\n .", " {\n overflow-x: hidden;\n }\n .", ", .", " {\n position:relative;\n }\n .", " {\n overflow: hidden;\n }\n .", " {\n position: relative;\n }\n\n .", " {\n overflow: auto;\n overflow-x: hidden;\n overflow-anchor: none;\n }\n\n .", ", .", "{\n position: absolute;\n z-index: ", ";\n top: 0;\n }\n .", "{\n left:0;\n }\n .", "{\n right:0;\n }\n\n .", "{\n .", "{\n position: absolute;\n top: 0;\n width: 100%;\n z-index: ", ";\n }\n }\n\n tr:not(.no-hover).row-hover > td {\n background: var(--hover-bgcolor);\n }\n }\n //#endregion\n\n //#region \u7C98\u6027\u6EDA\u52A8\u6761\n .", " {\n overflow-y: hidden;\n overflow-x: auto;\n z-index: ", ";\n flex-shrink: 0;\n flex-grow: 0;\n border-top: 1px solid var(--border-color);\n background: var(--bgcolor);\n }\n\n .", " {\n // \u5FC5\u987B\u6709\u9AD8\u5EA6\u624D\u80FD\u51FA\u73B0\u6EDA\u52A8\u6761\n height: 1px;\n visibility: hidden;\n }\n //#endregion\n\n //#region \u52A0\u8F7D\u6837\u5F0F\n .", " {\n position: relative;\n width: 100%;\n height: 100%;\n overflow: auto;\n\n .", " {\n filter: none;\n width: 100%;\n height: 100%;\n overflow: hidden;//\u5217\u5168\u90E8\u56FA\u5B9A\u65F6\uFF0C\u5B58\u5728\u53CC\u6A2A\u5411\u6EDA\u52A8\u6761\n display: flex;\n position: relative;\n flex-direction: column;\n }\n\n .", " {\n position: absolute;\n left: 0;\n right: 0;\n top: 0;\n bottom: 0;\n pointer-events: none;\n }\n\n .", " {\n position: sticky;\n z-index: ", ";\n transform: translateY(-50%);\n }\n }\n //#endregion\n\n //#region \u8868\u683C\u8FC7\u6EE4\n .", " {\n color:var(--icon-color);\n &.active{\n color:var(--primary-color);\n }\n padding: 6px 4px;\n &:hover{\n background-color: #e5e5e5;\n }\n }\n .", " {\n display: flex\n }\n //#endregion\n\n //#region \u8868\u683C\u6392\u5E8F\n .", " {\n color:var(--icon-color);\n &.active{\n color:var(--primary-color);\n }\n }\n //#endregion\n\n //#region \u6EDA\u52A8\u6761\u5360\u4F4D\n .", " {\n visibility: hidden;\n flex-shrink: 0;\n }\n .", " .", " {\n border-top: var(--cell-border-horizontal);\n }\n //#endregion\n \n //#region \u62D6\u62FD\u5217\u5BBD\u5927\u5C0F\n .", "::after{\n background-color: var(--border-color);\n }\n //#endregion\n\n "])), variableConst, variableConst, outerBorderStyleMixin, Classes.artTableBordered, notBorderedStyleMixin, Classes.artTableBordered, borderedStyleMixin, Classes.artTable, Classes.tableHeader, Classes.tableHeaderCellContent, Classes.virtual, Classes.tableFooter, Classes.tableBody, Classes.tableFooter, Classes.tableRow, Classes.tableBody, Classes.tableFooter, Classes.tableCellRangeSelected, Classes.tableCellRangeTop, Classes.tableCellRangeLeft, Classes.tableCellRangeBottom, Classes.tableCellRangeRight, Classes.rangeSelection, Classes.tableHeader, Z.header, Classes.tableFooter, Z.footer, Classes.leaf, Classes.first, Classes.first, Classes.first, Classes.first, Classes.first, Classes.last, Classes.lockLeft, Classes.lockRight, Z.lock, Classes.lockShadowMask, Z.lockShadow, Classes.lockShadow, Classes.leftLockShadow, LOCK_SHADOW_PADDING, Classes.rightLockShadow, LOCK_SHADOW_PADDING, Classes.emptyWrapper, Classes.virtual, Classes.tableBody, Classes.tableFooter, Classes.tableHeaderMain, Classes.tableHeader, Classes.tableFooterMain, Classes.fixedLeft, Classes.fixedRight, Z.lock, Classes.fixedLeft, Classes.fixedRight, Classes.rowDetailContainer, Classes.rowDetailItem, Z.rowDetail, Classes.stickyScroll, Z.scrollItem, Classes.stickyScrollItem, Classes.loadingWrapper, Classes.loadingContentWrapper, Classes.loadingIndicatorWrapper, Classes.loadingIndicator, Z.loadingIndicator, Classes.tableFilterTrigger, Classes.filterIcon, Classes.tableSortIcon, Classes.verticalScrollPlaceholder, Classes.tableFooter, Classes.verticalScrollPlaceholder, Classes.tableHeaderCellResize);
131
+ export var ButtonCSS = css(_templateObject5 || (_templateObject5 = _taggedTemplateLiteral(["\n ", "\n //#region \u6309\u94AE\n .", "{\n color: var(--color);\n background:#ffffff;\n border:1px solid var(--strong-border-color);\n border-radius: 2px;\n cursor: pointer;\n &:hover{\n color: var(--primary-color);\n border:1px solid var(--primary-color);\n }\n }\n .", " {\n color:#ffffff;\n background-color: var(--primary-color);\n border:none;\n &:hover{\n color:#ffffff;\n background-color: var(--primary-color-level2);\n border:none;\n }\n }\n//#endregion\n"])), variableConst, Classes.button, Classes.buttonPrimary);
127
132
 
128
133
  function getCssVariableText(obj) {
129
134
  return _Object$keys(obj).reduce(function (acc, key) {
@@ -47,6 +47,8 @@ export interface BaseTableProps {
47
47
  scrollbarWidth?: number;
48
48
  /** 使用来自外层 div 的边框代替单元格的外边框 */
49
49
  useOuterBorder?: boolean;
50
+ /** 显示表格单元格边框线 */
51
+ bordered?: boolean;
50
52
  /** 表格是否在加载中 */
51
53
  isLoading?: boolean;
52
54
  /** 数据为空时,单元格的高度 */
@@ -3,13 +3,13 @@ import _Array$from from "@babel/runtime-corejs3/core-js-stable/array/from";
3
3
  import _Symbol from "@babel/runtime-corejs3/core-js-stable/symbol";
4
4
  import _getIteratorMethod from "@babel/runtime-corejs3/core-js/get-iterator-method";
5
5
  import _slicedToArray from "@babel/runtime-corejs3/helpers/slicedToArray";
6
+ import _extends from "@babel/runtime-corejs3/helpers/extends";
6
7
  import _defineProperty from "@babel/runtime-corejs3/helpers/defineProperty";
7
8
  import _classCallCheck from "@babel/runtime-corejs3/helpers/classCallCheck";
8
9
  import _createClass from "@babel/runtime-corejs3/helpers/createClass";
9
10
  import _inherits from "@babel/runtime-corejs3/helpers/inherits";
10
11
  import _possibleConstructorReturn from "@babel/runtime-corejs3/helpers/possibleConstructorReturn";
11
12
  import _getPrototypeOf from "@babel/runtime-corejs3/helpers/getPrototypeOf";
12
- import _extends from "@babel/runtime-corejs3/helpers/extends";
13
13
 
14
14
  function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof _Symbol !== "undefined" && _getIteratorMethod(o) || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
15
15
 
@@ -37,37 +37,10 @@ import { getFullRenderRange, makeRowHeightManager } from './helpers/rowHeightMan
37
37
  import { TableDOMHelper } from './helpers/TableDOMUtils';
38
38
  import { HtmlTable } from './html-table';
39
39
  import Loading from './loading';
40
- import { Classes, LOCK_SHADOW_PADDING, StyledArtTableWrapper, defaultCSSVariables } from './styles';
41
- import { addResizeObserver, getScrollbarSize, OVERSCAN_SIZE, shallowEqual, STYLED_REF_PROP, sum, syncScrollLeft, throttledWindowResize$, getTableScrollFooterDOM, getTableScrollHeaderDOM } from './utils';
42
- import cssVars from 'css-vars-ponyfill';
40
+ import { Classes, LOCK_SHADOW_PADDING, StyledArtTableWrapper } from './styles';
41
+ import { addResizeObserver, getScrollbarSize, OVERSCAN_SIZE, shallowEqual, STYLED_REF_PROP, sum, syncScrollLeft, throttledWindowResize$, getTableScrollFooterDOM, getTableScrollHeaderDOM, cssPolifill } from './utils';
43
42
  import { console, browserType } from '../utils';
44
43
  import getTableRenderTemplate from './renderTemplates';
45
-
46
- var cssPolifill = function cssPolifill(_ref) {
47
- var variables = _ref.variables,
48
- enableCSSVariables = _ref.enableCSSVariables;
49
-
50
- // const style = document.createElement('style')
51
- // style.type = 'text/css'
52
- // style.innerHTML = '.aaa{ --color: red; }'
53
- // document.getElementsByTagName('head').item(0).appendChild(style)
54
- // const variableNames = variableConst.match(/--.*?(?=:)/g)
55
- // variables = variableNames.map((name) => rootElement.style[name])
56
- if (enableCSSVariables === false) {
57
- return;
58
- }
59
-
60
- cssVars({
61
- // exclude: 'link[href*="semantic-ui"]',
62
- // onlyLegacy: false,
63
- // rootElement: rootElement,
64
- include: 'style[data-styled]',
65
- variables: _extends({}, defaultCSSVariables, variables),
66
- watch: true,
67
- silent: true
68
- });
69
- };
70
-
71
44
  var propsDotEmptyContentDeprecatedWarned = false;
72
45
 
73
46
  function warnPropsDotEmptyContentIsDeprecated() {
@@ -477,6 +450,8 @@ export var BaseTable = /*#__PURE__*/function (_React$Component) {
477
450
  }, {
478
451
  key: "render",
479
452
  value: function render() {
453
+ var _cx;
454
+
480
455
  // console.log('render table')
481
456
  var info = calculateRenderInfo(this);
482
457
  this.lastInfo = info;
@@ -492,17 +467,17 @@ export var BaseTable = /*#__PURE__*/function (_React$Component) {
492
467
  isLoading = _this$props6.isLoading,
493
468
  getTableProps = _this$props6.getTableProps,
494
469
  footerDataSource = _this$props6.footerDataSource,
495
- components = _this$props6.components;
496
- var artTableWrapperClassName = cx(Classes.artTableWrapper, {
470
+ components = _this$props6.components,
471
+ bordered = _this$props6.bordered;
472
+ var artTableWrapperClassName = cx(Classes.artTableWrapper, (_cx = {
497
473
  'use-outer-border': useOuterBorder,
498
474
  empty: dataSource.length === 0,
499
475
  lock: info.hasLockColumn,
500
476
  'has-header': hasHeader,
501
477
  'sticky-header': isStickyHeader !== null && isStickyHeader !== void 0 ? isStickyHeader : isStickyHead,
502
478
  'has-footer': footerDataSource.length > 0,
503
- 'sticky-footer': isStickyFooter,
504
- 'ie-polyfill-wrapper': browserType.isIE
505
- }, className);
479
+ 'sticky-footer': isStickyFooter
480
+ }, _defineProperty(_cx, Classes.artTableBordered, bordered), _defineProperty(_cx, 'ie-polyfill-wrapper', browserType.isIE), _cx), className);
506
481
 
507
482
  var artTableWrapperProps = _defineProperty({
508
483
  className: artTableWrapperClassName,
@@ -533,10 +508,12 @@ export var BaseTable = /*#__PURE__*/function (_React$Component) {
533
508
 
534
509
  var _this$props7 = this.props,
535
510
  cssVariables = _this$props7.cssVariables,
536
- enableCSSVariables = _this$props7.enableCSSVariables;
511
+ enableCSSVariables = _this$props7.enableCSSVariables,
512
+ bordered = _this$props7.bordered;
537
513
  cssPolifill({
538
514
  variables: cssVariables || {},
539
- enableCSSVariables: enableCSSVariables
515
+ enableCSSVariables: enableCSSVariables,
516
+ bordered: bordered
540
517
  });
541
518
  (_b = (_a = this.props).setTableWidth) === null || _b === void 0 ? void 0 : _b.call(_a, this.domHelper.tableBody.clientWidth);
542
519
  (_d = (_c = this.props).setTableDomHelper) === null || _d === void 0 ? void 0 : _d.call(_c, this.domHelper);
@@ -608,15 +585,15 @@ export var BaseTable = /*#__PURE__*/function (_React$Component) {
608
585
 
609
586
  this.rootSubscription.add(combineLatest([richVisibleRects$.pipe(op.map(function (p) {
610
587
  return p.clipRect;
611
- }), op.distinctUntilChanged(shallowEqual)), this.props$.pipe(op.startWith(null), op.pairwise(), op.filter(function (_ref2) {
612
- var _ref3 = _slicedToArray(_ref2, 2),
613
- prevProps = _ref3[0],
614
- props = _ref3[1];
588
+ }), op.distinctUntilChanged(shallowEqual)), this.props$.pipe(op.startWith(null), op.pairwise(), op.filter(function (_ref) {
589
+ var _ref2 = _slicedToArray(_ref, 2),
590
+ prevProps = _ref2[0],
591
+ props = _ref2[1];
615
592
 
616
593
  return prevProps == null || !prevProps.isLoading && props.isLoading;
617
- }))]).subscribe(function (_ref4) {
618
- var _ref5 = _slicedToArray(_ref4, 1),
619
- clipRect = _ref5[0];
594
+ }))]).subscribe(function (_ref3) {
595
+ var _ref4 = _slicedToArray(_ref3, 1),
596
+ clipRect = _ref4[0];
620
597
 
621
598
  var loadingIndicator = _this2.domHelper.getLoadingIndicator();
622
599
 
@@ -635,9 +612,9 @@ export var BaseTable = /*#__PURE__*/function (_React$Component) {
635
612
  horizontal = _this2$lastInfo$useVi.horizontal,
636
613
  vertical = _this2$lastInfo$useVi.vertical;
637
614
  return horizontal || vertical;
638
- }), op.map(function (_ref6) {
639
- var clipRect = _ref6.clipRect,
640
- offsetY = _ref6.offsetY;
615
+ }), op.map(function (_ref5) {
616
+ var clipRect = _ref5.clipRect,
617
+ offsetY = _ref5.offsetY;
641
618
  return {
642
619
  maxRenderHeight: clipRect.bottom - clipRect.top,
643
620
  maxRenderWidth: clipRect.right - clipRect.left,
@@ -654,9 +631,9 @@ export var BaseTable = /*#__PURE__*/function (_React$Component) {
654
631
  })).subscribe(function (sizeAndOffset) {
655
632
  _this2.setState(sizeAndOffset);
656
633
  }));
657
- this.rootSubscription.add(richVisibleRects$.pipe(op.map(function (_ref7) {
658
- var clipRect = _ref7.clipRect,
659
- offsetY = _ref7.offsetY;
634
+ this.rootSubscription.add(richVisibleRects$.pipe(op.map(function (_ref6) {
635
+ var clipRect = _ref6.clipRect,
636
+ offsetY = _ref6.offsetY;
660
637
  return {
661
638
  maxRenderHeight: clipRect.bottom - clipRect.top,
662
639
  maxRenderWidth: clipRect.right - clipRect.left,
@@ -36,4 +36,11 @@ export declare function shallowEqual<T>(objA: T, objB: T): boolean;
36
36
  export declare function composeRowPropsGetter(getRowProps: (record: any, rowIndex: number) => React.HTMLAttributes<HTMLTableRowElement>, pendingRowProps?: React.HTMLAttributes<HTMLTableRowElement>): (record: any, rowIndex: number) => React.HTMLAttributes<HTMLTableRowElement>;
37
37
  export declare function getTableScrollHeaderDOM(domHelper: TableDOMHelper): HTMLDivElement;
38
38
  export declare function getTableScrollFooterDOM(domHelper: TableDOMHelper): HTMLDivElement;
39
+ export declare const cssPolifill: ({ variables, enableCSSVariables, bordered }: {
40
+ variables: {
41
+ [key: string]: any;
42
+ };
43
+ enableCSSVariables?: boolean;
44
+ bordered?: boolean;
45
+ }) => void;
39
46
  export {};
@@ -18,8 +18,10 @@ import { asyncScheduler, BehaviorSubject, defer, fromEvent, Subscription } from
18
18
  import { map, throttleTime } from 'rxjs/operators';
19
19
  import ResizeObserver from 'resize-observer-polyfill';
20
20
  import * as styledComponents from 'styled-components';
21
+ import cssVars from 'css-vars-ponyfill';
21
22
  import mergeCellProps from '../utils/mergeCellProps';
22
23
  import { browserType } from '../utils';
24
+ import { defaultCSSVariables } from './styles';
23
25
  /** styled-components 类库的版本,ali-react-table 同时支持 v3 和 v5 */
24
26
 
25
27
  export var STYLED_VERSION = styledComponents.createGlobalStyle != null ? 'v5' : 'v3';
@@ -211,4 +213,30 @@ export function getTableScrollHeaderDOM(domHelper) {
211
213
  }
212
214
  export function getTableScrollFooterDOM(domHelper) {
213
215
  return browserType.isIE ? domHelper.tableFooterMain : domHelper.tableFooter;
214
- }
216
+ }
217
+ export var cssPolifill = function cssPolifill(_ref) {
218
+ var variables = _ref.variables,
219
+ enableCSSVariables = _ref.enableCSSVariables,
220
+ bordered = _ref.bordered;
221
+
222
+ if (enableCSSVariables === false) {
223
+ return;
224
+ }
225
+
226
+ var conditionCSSVariables = {}; // 默认情况下存在td、th无左右边框,开启`bordered`属性后才开启,否则隐藏这两种属性
227
+
228
+ if (!bordered) {
229
+ conditionCSSVariables['--cell-border-vertical'] = 'none';
230
+ conditionCSSVariables['--header-cell-border-vertical'] = 'none';
231
+ }
232
+
233
+ cssVars({
234
+ // exclude: 'link[href*="semantic-ui"]',
235
+ // onlyLegacy: false,
236
+ // rootElement: rootElement,
237
+ include: 'style[data-styled]',
238
+ variables: _extends({}, defaultCSSVariables, variables, conditionCSSVariables),
239
+ watch: true,
240
+ silent: true
241
+ });
242
+ };
@@ -65,7 +65,7 @@ export function columnDrag() {
65
65
  },
66
66
  headerCellProps: mergeCellProps(col.headerCellProps, {
67
67
  onMouseDown: !isLeaf || path.length > 1 ? undefined : function (e) {
68
- if (e.button !== 0) {
68
+ if (e.button !== 0 || !e.currentTarget.contains(e.target)) {
69
69
  return;
70
70
  }
71
71
 
@@ -241,13 +241,14 @@ export function columnDrag() {
241
241
  }
242
242
 
243
243
  function handleMouseUp(e) {
244
- e.stopPropagation();
245
244
  document.body.removeEventListener('mousemove', handleMouseMove);
246
245
  document.body.removeEventListener('mouseup', handleMouseUp);
247
- window.removeEventListener('selectstart', disableSelect); // 阻止列头点击事件,防止拖动后触发列头过滤事件
246
+ window.removeEventListener('selectstart', disableSelect);
248
247
 
249
248
  if (_isMoveWhenClicking(mouseDownClientX, mouseDownClientY, e.clientX, e.clientY)) {
250
- currentTarget.addEventListener('click', stopClickPropagation);
249
+ e.stopPropagation(); // 存在移动就阻止冒泡
250
+
251
+ currentTarget.addEventListener('click', stopClickPropagation); // 阻止列头点击事件,防止拖动后触发列头过滤事件
251
252
  }
252
253
 
253
254
  window.requestAnimationFrame(function () {
@@ -13,7 +13,7 @@ export interface FilterFeatureOptions {
13
13
  /** 过滤模式。单列过滤 single,多列过滤 multiple,默认为多选 */
14
14
  mode?: 'single' | 'multiple';
15
15
  /** 过滤图标 */
16
- filterIcon?: ReactNode;
16
+ filterIcon?: ReactNode | ((filtered: boolean) => ReactNode);
17
17
  /** 是否对触发弹出过滤面板 的 click 事件调用 event.stopPropagation() */
18
18
  stopClickEventPropagation?: boolean;
19
19
  }
@@ -12,7 +12,7 @@ import * as op from 'rxjs/operators';
12
12
  import { mergeCellProps, collectNodes, makeRecursiveMapper, isGroupColumn } from '../../utils';
13
13
  import { internals } from '../../internals';
14
14
  import { Classes } from '../../base/styles';
15
- var TableHeaderCellResize = styled.div(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n position: absolute;\n top: 0;\n right: -5px;\n height: 100%;\n width: 10px;\n cursor: ew-resize;\n display: flex;\n flex-direction: column;\n align-items: center;\n z-index:1;\n\n &:after {\n content: \"\";\n position: absolute;\n display: block;\n left: calc(50% - 1px);\n width: 1px;\n height: calc(100% - 14px);\n top: 7px;\n background-color: var(--border-color);\n }\n"])));
15
+ var TableHeaderCellResize = styled.div(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n position: absolute;\n top: 0;\n right: -5px;\n height: 100%;\n width: 10px;\n cursor: ew-resize;\n display: flex;\n flex-direction: column;\n align-items: center;\n z-index:1;\n\n &:after {\n content: \"\";\n position: absolute;\n display: block;\n left: calc(50% - 1px);\n width: 1px;\n height: calc(100% - 14px);\n top: 7px;\n }\n"])));
16
16
  var TableHeaderGroupCellResize = styled(TableHeaderCellResize)(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["\n &:after {\n height: 100%;\n top: 0;\n }\n"])));
17
17
 
18
18
  function clamp(min, x, max) {
@@ -6,11 +6,12 @@ var _templateObject;
6
6
 
7
7
  import _filterInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/filter";
8
8
  import _mapInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/map";
9
- import React, { useEffect } from 'react';
9
+ import React, { useEffect, useRef } from 'react';
10
10
  import styled from 'styled-components';
11
11
  import cx from 'classnames';
12
12
  import { DEFAULT_FILTER_OPTIONS } from './util';
13
13
  import { Classes, ButtonCSS } from '../../../base/styles';
14
+ import KeyCode from '../../../utils/keyCode';
14
15
  var DefaultFilterContentStyle = styled.div(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n display: flex;\n flex-direction: column;\n background-color: #ffffff;\n border-radius: 2px;\n width: 100%;\n\n ", "\n .filter-option-list {\n display: flex;\n flex-direction: column;\n margin-top: 8px;\n ul {\n margin: 0;\n padding: 0;\n li {\n display: flex;\n position: relative;\n flex-shrink: 0;\n height: 32px;\n align-items: center;\n border-radius: 2px;\n font-size: 12px;\n color: var(--color);\n padding: 0 12px;\n overflow: hidden;\n cursor: pointer;\n &:hover{\n background-color: var(--primary-color-level1);\n }\n }\n li.active{\n background-color: var(--primary-color-level1);\n }\n }\n }\n\n .filter-search {\n display: flex;\n padding: 6px 12px;\n\n .filter-search-inner {\n width: 100%;\n font-size: 12px;\n color: #333333;\n height: 28px;\n line-height: 28px;\n padding: 0 8px;\n outline: none;\n background-color: #FAFAFA;\n border-radius: 2px;\n border: 1px solid var(--strong-border-color);\n &:hover{\n border-color: var(--primary-color)\n } \n &:focus{\n border-color: var(--primary-color)\n } \n }\n }\n\n .filter-footer {\n display: flex;\n flex-direction: row;\n padding: 8px 12px;\n justify-content: space-between;\n\n .filter-btn {\n text-align: center;\n font-size: 12px;\n width: 60px;\n height: 24px;\n line-height: 24px;\n }\n \n }\n"])), ButtonCSS);
15
16
 
16
17
  function DefaultFilterContent(_ref) {
@@ -30,6 +31,7 @@ function DefaultFilterContent(_ref) {
30
31
  innerValue = _React$useState4[0],
31
32
  setInnerValue = _React$useState4[1];
32
33
 
34
+ var inputRef = useRef();
33
35
  var handleClick = React.useCallback(function (option) {
34
36
  setSelectedValue(option.key);
35
37
  }, []);
@@ -47,10 +49,26 @@ function DefaultFilterContent(_ref) {
47
49
  });
48
50
  };
49
51
 
52
+ var handleKeyDown = function handleKeyDown(e) {
53
+ if (e.keyCode === KeyCode.ENTER) {
54
+ confirm();
55
+ }
56
+ };
57
+
50
58
  useEffect(function () {
51
59
  setSelectedValue((filterModel === null || filterModel === void 0 ? void 0 : filterModel.filterCondition) || 'contain');
52
60
  setInnerValue((filterModel === null || filterModel === void 0 ? void 0 : _filterInstanceProperty(filterModel)) || '');
53
61
  }, [filterModel]);
62
+ useEffect(function () {
63
+ // 兼容设置焦点后发生滚动
64
+ setTimeout(function () {
65
+ var _a;
66
+
67
+ (_a = inputRef.current) === null || _a === void 0 ? void 0 : _a.focus({
68
+ preventScroll: true
69
+ });
70
+ });
71
+ }, []);
54
72
  return /*#__PURE__*/React.createElement(DefaultFilterContentStyle, null, /*#__PURE__*/React.createElement("div", {
55
73
  className: 'filter-option-list'
56
74
  }, /*#__PURE__*/React.createElement("ul", null, _mapInstanceProperty(DEFAULT_FILTER_OPTIONS).call(DEFAULT_FILTER_OPTIONS, function (option, index) {
@@ -72,7 +90,9 @@ function DefaultFilterContent(_ref) {
72
90
  value: innerValue,
73
91
  onChange: function onChange(e) {
74
92
  setInnerValue(e.target.value);
75
- }
93
+ },
94
+ onKeyDown: handleKeyDown,
95
+ ref: inputRef
76
96
  })), /*#__PURE__*/React.createElement("div", {
77
97
  className: 'filter-footer'
78
98
  }, /*#__PURE__*/React.createElement("button", {
@@ -0,0 +1,5 @@
1
+ /// <reference types="react" />
2
+ export default function DefaultFilterIcon({ width, height }: {
3
+ width: string | number;
4
+ height: string | number;
5
+ }): JSX.Element;
@@ -0,0 +1,20 @@
1
+ import React from 'react';
2
+ export default function DefaultFilterIcon(_ref) {
3
+ var width = _ref.width,
4
+ height = _ref.height;
5
+ return /*#__PURE__*/React.createElement("svg", {
6
+ width: width,
7
+ height: height,
8
+ style: {
9
+ verticalAlign: 'middle'
10
+ },
11
+ viewBox: "0 0 1024 1024",
12
+ focusable: "false",
13
+ "data-icon": "filter",
14
+ fill: "currentColor",
15
+ version: "1.1",
16
+ xmlns: "http://www.w3.org/2000/svg"
17
+ }, /*#__PURE__*/React.createElement("path", {
18
+ d: "M891.448889 159.573333L626.460444 460.231111v443.221333c0 32.881778-25.429333 63.658667-55.864888 63.658667l-170.268445-172.942222V456.419556L132.266667 159.857778A59.619556 59.619556 0 0 1 173.511111 56.888889h676.977778c32.995556 0 59.733333 26.680889 59.733333 59.562667 0 17.066667-7.224889 32.312889-18.773333 43.121777z"
19
+ }));
20
+ }
@@ -6,7 +6,7 @@ interface FilterProps {
6
6
  size?: number;
7
7
  isFilterActive: boolean;
8
8
  FilterPanelContent?: FilterPanelType;
9
- filterIcon?: ReactNode;
9
+ filterIcon?: ReactNode | ((filtered: boolean) => ReactNode);
10
10
  setFilterModel: DefaultFilterPanelProps['setFilterModel'];
11
11
  filterModel: DefaultFilterPanelProps['filterModel'];
12
12
  setFilter: CustomeFilterPanelProps['setFilter'];
@@ -10,10 +10,11 @@ import styled from 'styled-components';
10
10
  import { Classes } from '../../../base/styles';
11
11
  import FilterPanel from './FilterPanel';
12
12
  import DefaultFilterContent from './DefaultFilterContent';
13
+ import DefaultFilterIcon from './DefaultFilterIcon';
13
14
  import { calculatePopupRelative } from '../../../utils';
14
15
  import { addResizeObserver } from '../../../base/utils';
15
16
  import cx from 'classnames';
16
- var HEADER_ICON_OFFSET_Y = 6 + 1; // padding-top + border
17
+ var HEADER_ICON_OFFSET_Y = 8 + 1; // padding-top + border
17
18
 
18
19
  var HEADER_ICON_OFFSET_X = 16 + 1; // padding-left+ border
19
20
 
@@ -88,10 +89,6 @@ function Filter(_ref2) {
88
89
  return setShowPanel(false);
89
90
  };
90
91
 
91
- var handleMouseDown = function handleMouseDown(e) {
92
- e.stopPropagation(); // 阻止触发拖拽
93
- };
94
-
95
92
  var renderPanelContent = function renderPanelContent() {
96
93
  if (FilterPanelContent) {
97
94
  return /*#__PURE__*/React.createElement(FilterPanelContent, {
@@ -111,6 +108,12 @@ function Filter(_ref2) {
111
108
  };
112
109
 
113
110
  var handleIconClick = function handleIconClick(e) {
111
+ // 只有当icon区域点击会触发面板展开
112
+ // 防止 createPortal 区域的点击触发该事件
113
+ if (!e.currentTarget.contains(e.target)) {
114
+ return;
115
+ }
116
+
114
117
  if (stopClickEventPropagation) {
115
118
  e.stopPropagation();
116
119
  }
@@ -119,27 +122,20 @@ function Filter(_ref2) {
119
122
  };
120
123
 
121
124
  var iconClassName = cx((_cx = {}, _defineProperty(_cx, className, true), _defineProperty(_cx, 'filter-panel-open', showPanel), _cx));
125
+ var displayFilterIcon = typeof filterIcon === 'function' ? filterIcon(isFilterActive) : filterIcon;
122
126
  return /*#__PURE__*/React.createElement(FilterIconSpanStyle, {
123
127
  style: style,
124
128
  className: iconClassName,
125
- onMouseDown: handleMouseDown,
126
- ref: iconRef
127
- }, /*#__PURE__*/React.createElement("span", {
128
- className: Classes.filterIcon,
129
129
  onClick: handleIconClick
130
- }, filterIcon || /*#__PURE__*/React.createElement("svg", {
130
+ }, /*#__PURE__*/React.createElement("span", {
131
+ ref: iconRef,
132
+ className: Classes.filterIcon
133
+ }, displayFilterIcon || /*#__PURE__*/React.createElement(DefaultFilterIcon, {
131
134
  width: size,
132
- height: size,
133
- viewBox: "64 64 896 896",
134
- focusable: "false",
135
- "data-icon": "filter",
136
- fill: "currentColor",
137
- "aria-hidden": "true"
138
- }, /*#__PURE__*/React.createElement("path", {
139
- d: "M349 838c0 17.7 14.2 32 31.8 32h262.4c17.6 0 31.8-14.3\n 31.8-32V642H349v196zm531.1-684H143.9c-24.5 0-39.8 26.7-27.5\n 48l221.3 376h348.8l221.3-376c12.1-21.3-3.2-48-27.7-48z"
140
- }))), showPanel && /*#__PURE__*/createPortal( /*#__PURE__*/React.createElement(Panel, {
135
+ height: size
136
+ })), showPanel && /*#__PURE__*/createPortal( /*#__PURE__*/React.createElement(Panel, {
141
137
  ele: iconRef.current,
142
- filterIcon: filterIcon,
138
+ filterIcon: displayFilterIcon,
143
139
  hidePanel: hidePanel,
144
140
  renderPanelContent: renderPanelContent
145
141
  }), document.body));