e-virt-table 0.0.3

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 (90) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +2 -0
  3. package/dist/index.cjs.js +14 -0
  4. package/dist/index.cjs.js.map +1 -0
  5. package/dist/index.es.js +5422 -0
  6. package/dist/index.es.js.map +1 -0
  7. package/dist/index.umd.js +14 -0
  8. package/dist/index.umd.js.map +1 -0
  9. package/dist/lib/Autofill.d.ts +20 -0
  10. package/dist/lib/Autofill.js +185 -0
  11. package/dist/lib/Autofill.js.map +1 -0
  12. package/dist/lib/BaseCell.d.ts +22 -0
  13. package/dist/lib/BaseCell.js +111 -0
  14. package/dist/lib/BaseCell.js.map +1 -0
  15. package/dist/lib/Body.d.ts +29 -0
  16. package/dist/lib/Body.js +382 -0
  17. package/dist/lib/Body.js.map +1 -0
  18. package/dist/lib/Cell.d.ts +101 -0
  19. package/dist/lib/Cell.js +943 -0
  20. package/dist/lib/Cell.js.map +1 -0
  21. package/dist/lib/CellHeader.d.ts +64 -0
  22. package/dist/lib/CellHeader.js +355 -0
  23. package/dist/lib/CellHeader.js.map +1 -0
  24. package/dist/lib/Config.d.ts +106 -0
  25. package/dist/lib/Config.js +617 -0
  26. package/dist/lib/Config.js.map +1 -0
  27. package/dist/lib/Context.d.ts +123 -0
  28. package/dist/lib/Context.js +419 -0
  29. package/dist/lib/Context.js.map +1 -0
  30. package/dist/lib/Database.d.ts +228 -0
  31. package/dist/lib/Database.js +931 -0
  32. package/dist/lib/Database.js.map +1 -0
  33. package/dist/lib/EVirtTable.d.ts +61 -0
  34. package/dist/lib/EVirtTable.js +321 -0
  35. package/dist/lib/EVirtTable.js.map +1 -0
  36. package/dist/lib/Editor.d.ts +16 -0
  37. package/dist/lib/Editor.js +251 -0
  38. package/dist/lib/Editor.js.map +1 -0
  39. package/dist/lib/Empty.d.ts +7 -0
  40. package/dist/lib/Empty.js +45 -0
  41. package/dist/lib/Empty.js.map +1 -0
  42. package/dist/lib/EventBrowser.d.ts +17 -0
  43. package/dist/lib/EventBrowser.js +79 -0
  44. package/dist/lib/EventBrowser.js.map +1 -0
  45. package/dist/lib/EventBus.d.ts +12 -0
  46. package/dist/lib/EventBus.js +58 -0
  47. package/dist/lib/EventBus.js.map +1 -0
  48. package/dist/lib/EventTable.d.ts +26 -0
  49. package/dist/lib/EventTable.js +358 -0
  50. package/dist/lib/EventTable.js.map +1 -0
  51. package/dist/lib/Footer.d.ts +17 -0
  52. package/dist/lib/Footer.js +138 -0
  53. package/dist/lib/Footer.js.map +1 -0
  54. package/dist/lib/Header.d.ts +37 -0
  55. package/dist/lib/Header.js +482 -0
  56. package/dist/lib/Header.js.map +1 -0
  57. package/dist/lib/History.d.ts +27 -0
  58. package/dist/lib/History.js +106 -0
  59. package/dist/lib/History.js.map +1 -0
  60. package/dist/lib/Icons.d.ts +15 -0
  61. package/dist/lib/Icons.js +145 -0
  62. package/dist/lib/Icons.js.map +1 -0
  63. package/dist/lib/Overlayer.d.ts +10 -0
  64. package/dist/lib/Overlayer.js +267 -0
  65. package/dist/lib/Overlayer.js.map +1 -0
  66. package/dist/lib/Paint.d.ts +65 -0
  67. package/dist/lib/Paint.js +223 -0
  68. package/dist/lib/Paint.js.map +1 -0
  69. package/dist/lib/Row.d.ts +22 -0
  70. package/dist/lib/Row.js +125 -0
  71. package/dist/lib/Row.js.map +1 -0
  72. package/dist/lib/Scroller.d.ts +20 -0
  73. package/dist/lib/Scroller.js +448 -0
  74. package/dist/lib/Scroller.js.map +1 -0
  75. package/dist/lib/Selector.d.ts +38 -0
  76. package/dist/lib/Selector.js +532 -0
  77. package/dist/lib/Selector.js.map +1 -0
  78. package/dist/lib/Tooltip.d.ts +13 -0
  79. package/dist/lib/Tooltip.js +204 -0
  80. package/dist/lib/Tooltip.js.map +1 -0
  81. package/dist/lib/index.d.ts +3 -0
  82. package/dist/lib/index.js +4 -0
  83. package/dist/lib/index.js.map +1 -0
  84. package/dist/lib/types.d.ts +160 -0
  85. package/dist/lib/types.js +2 -0
  86. package/dist/lib/types.js.map +1 -0
  87. package/dist/lib/util.d.ts +15 -0
  88. package/dist/lib/util.js +113 -0
  89. package/dist/lib/util.js.map +1 -0
  90. package/package.json +37 -0
@@ -0,0 +1,204 @@
1
+ import { computePosition, offset, arrow, flip, shift } from '@floating-ui/dom';
2
+ export default class Tooltip {
3
+ constructor(ctx) {
4
+ Object.defineProperty(this, "ctx", {
5
+ enumerable: true,
6
+ configurable: true,
7
+ writable: true,
8
+ value: void 0
9
+ });
10
+ Object.defineProperty(this, "enable", {
11
+ enumerable: true,
12
+ configurable: true,
13
+ writable: true,
14
+ value: false
15
+ });
16
+ Object.defineProperty(this, "contentEl", {
17
+ enumerable: true,
18
+ configurable: true,
19
+ writable: true,
20
+ value: void 0
21
+ });
22
+ Object.defineProperty(this, "floatingEl", {
23
+ enumerable: true,
24
+ configurable: true,
25
+ writable: true,
26
+ value: void 0
27
+ });
28
+ Object.defineProperty(this, "arrowEl", {
29
+ enumerable: true,
30
+ configurable: true,
31
+ writable: true,
32
+ value: void 0
33
+ });
34
+ this.ctx = ctx;
35
+ const { TOOLTIP_BG_COLOR, TOOLTIP_TEXT_COLOR, TOOLTIP_ZINDEX, TOOLTIP_CUSTOM_STYLE, CSS_PREFIX } = this.ctx.config;
36
+ this.contentEl = document.createElement('div');
37
+ this.arrowEl = document.createElement('div');
38
+ this.floatingEl = document.createElement('div');
39
+ this.floatingEl.className = `${CSS_PREFIX}-tooltip`;
40
+ this.contentEl.className = `${CSS_PREFIX}-tooltip-content`;
41
+ this.arrowEl.className = `${CSS_PREFIX}-tooltip-arrow`;
42
+ const floatingStyle = {
43
+ display: 'none',
44
+ position: 'absolute',
45
+ background: TOOLTIP_BG_COLOR,
46
+ color: TOOLTIP_TEXT_COLOR,
47
+ boxSizing: 'border-box',
48
+ zIndex: TOOLTIP_ZINDEX,
49
+ padding: '8px',
50
+ borderRadius: `4px`,
51
+ fontSize: `12px`,
52
+ ...TOOLTIP_CUSTOM_STYLE,
53
+ };
54
+ const arrowStyle = {
55
+ position: 'absolute',
56
+ width: '10px',
57
+ height: '10px',
58
+ background: floatingStyle.background,
59
+ backgroundColor: floatingStyle.backgroundColor,
60
+ transform: 'rotate(45deg)',
61
+ zIndex: floatingStyle.zIndex,
62
+ };
63
+ Object.assign(this.arrowEl.style, arrowStyle);
64
+ Object.assign(this.floatingEl.style, floatingStyle);
65
+ this.floatingEl.appendChild(this.contentEl);
66
+ this.floatingEl.appendChild(this.arrowEl);
67
+ this.ctx.targetContainer.appendChild(this.floatingEl);
68
+ this.init();
69
+ }
70
+ init() {
71
+ this.ctx.on('mousemove', (e) => {
72
+ // 鼠标移动时,判断是否在target上,不在则隐藏
73
+ // if (!this.ctx.isTarget(e.target)) {
74
+ // return;
75
+ // }
76
+ const targetRect = this.ctx.target.getBoundingClientRect();
77
+ if (!targetRect) {
78
+ return;
79
+ }
80
+ if (e.clientX < targetRect.x ||
81
+ e.clientX > targetRect.x + targetRect.width ||
82
+ e.clientY < targetRect.y ||
83
+ e.clientY > targetRect.y + targetRect.height) {
84
+ this.hide();
85
+ }
86
+ });
87
+ // 开始编辑时隐藏
88
+ this.ctx.on('startEdit', () => {
89
+ this.hide();
90
+ });
91
+ this.ctx.on('visibleCellHoverChange', (cell) => {
92
+ // 有移除或者有错误message时显示
93
+ if (cell.ellipsis || cell.message) {
94
+ this.show(cell);
95
+ }
96
+ });
97
+ this.ctx.on('visibleCellMouseleave', () => {
98
+ this.hide();
99
+ });
100
+ }
101
+ show(cell) {
102
+ // 如果没有设置overflowTooltipShow=true,则不显示
103
+ if (!cell.overflowTooltipShow) {
104
+ return;
105
+ }
106
+ // 如果是鼠标按下状态,则不显示
107
+ if (this.ctx.mousedown) {
108
+ return;
109
+ }
110
+ this.floatingEl.style.display = 'block';
111
+ let text = cell.getText();
112
+ // 如果有message,则显示message
113
+ if (cell.message) {
114
+ text = cell.message;
115
+ }
116
+ const targetRect = this.ctx.target.getBoundingClientRect();
117
+ if (!targetRect) {
118
+ return;
119
+ }
120
+ this.enable = true;
121
+ // 设置最大宽度
122
+ this.contentEl.style.maxWidth = `${cell.overflowTooltipMaxWidth || 500}px`;
123
+ this.contentEl.style.width = '100%';
124
+ this.contentEl.style.display = 'inline-block';
125
+ this.contentEl.style.wordBreak = 'break-all';
126
+ this.contentEl.style.lineHeight = '1.5';
127
+ this.contentEl.innerText = text;
128
+ const cellX = cell.drawX + targetRect.x;
129
+ const cellY = cell.drawY + targetRect.y;
130
+ // 这个是相对于视口的位置
131
+ const virtualEl = {
132
+ getBoundingClientRect() {
133
+ return {
134
+ width: cell.visibleWidth,
135
+ height: cell.visibleHeight,
136
+ x: cellX,
137
+ y: cellY,
138
+ left: cellX,
139
+ right: cellX + cell.visibleWidth,
140
+ top: cellY,
141
+ bottom: cellY + cell.visibleHeight,
142
+ };
143
+ },
144
+ };
145
+ computePosition(virtualEl, this.floatingEl, {
146
+ placement: cell.overflowTooltipPlacement,
147
+ middleware: [shift(), flip(), offset(6), arrow({ element: this.arrowEl })],
148
+ }).then((val) => {
149
+ const { x, y, placement, middlewareData } = val;
150
+ Object.assign(this.floatingEl.style, {
151
+ top: `${y}px`,
152
+ left: `${x}px`,
153
+ });
154
+ if (middlewareData.arrow) {
155
+ const arrow = middlewareData.arrow;
156
+ if (['left', 'left-start', 'left-end'].includes(placement)) {
157
+ Object.assign(this.arrowEl.style, {
158
+ top: `${arrow.y}px`,
159
+ bottom: '',
160
+ left: '',
161
+ right: `-5px`,
162
+ });
163
+ }
164
+ else if (['right', 'right-start', 'right-end'].includes(placement)) {
165
+ Object.assign(this.arrowEl.style, {
166
+ top: `${arrow.y}px`,
167
+ bottom: '',
168
+ left: `-5px`,
169
+ right: '',
170
+ });
171
+ }
172
+ else if (['bottom', 'bottom-start', 'bottom-end'].includes(placement)) {
173
+ Object.assign(this.arrowEl.style, {
174
+ top: `-5px`,
175
+ bottom: '',
176
+ left: `${arrow.x}px`,
177
+ right: '',
178
+ });
179
+ }
180
+ else if (['top', 'top-start', 'top-end'].includes(placement)) {
181
+ Object.assign(this.arrowEl.style, {
182
+ top: '',
183
+ bottom: `-5px`,
184
+ left: `${arrow.x}px`,
185
+ right: '',
186
+ });
187
+ }
188
+ }
189
+ });
190
+ }
191
+ hide() {
192
+ if (!this.enable) {
193
+ return;
194
+ }
195
+ this.enable = false;
196
+ this.floatingEl.style.display = 'none';
197
+ }
198
+ destroy() {
199
+ this.contentEl.remove();
200
+ this.arrowEl.remove();
201
+ this.floatingEl.remove();
202
+ }
203
+ }
204
+ //# sourceMappingURL=Tooltip.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Tooltip.js","sourceRoot":"","sources":["../../src/Tooltip.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAC/E,MAAM,CAAC,OAAO,OAAO,OAAO;IAMxB,YAAY,GAAY;QALhB;;;;;WAAa;QACb;;;;mBAAS,KAAK;WAAC;QACf;;;;;WAA0B;QAC1B;;;;;WAA2B;QAC3B;;;;;WAAwB;QAE5B,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,MAAM,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,cAAc,EAAE,oBAAoB,EAAE,UAAU,EAAE,GAC5F,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC;QACpB,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC/C,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC7C,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAChD,IAAI,CAAC,UAAU,CAAC,SAAS,GAAG,GAAG,UAAU,UAAU,CAAC;QACpD,IAAI,CAAC,SAAS,CAAC,SAAS,GAAG,GAAG,UAAU,kBAAkB,CAAC;QAC3D,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,GAAG,UAAU,gBAAgB,CAAC;QACvD,MAAM,aAAa,GAAG;YAClB,OAAO,EAAE,MAAM;YACf,QAAQ,EAAE,UAAU;YACpB,UAAU,EAAE,gBAAgB;YAC5B,KAAK,EAAE,kBAAkB;YACzB,SAAS,EAAE,YAAY;YACvB,MAAM,EAAE,cAAc;YACtB,OAAO,EAAE,KAAK;YACd,YAAY,EAAE,KAAK;YACnB,QAAQ,EAAE,MAAM;YAChB,GAAG,oBAAoB;SAC1B,CAAC;QACF,MAAM,UAAU,GAAG;YACf,QAAQ,EAAE,UAAU;YACpB,KAAK,EAAE,MAAM;YACb,MAAM,EAAE,MAAM;YACd,UAAU,EAAE,aAAa,CAAC,UAAU;YACpC,eAAe,EAAE,aAAa,CAAC,eAAe;YAC9C,SAAS,EAAE,eAAe;YAC1B,MAAM,EAAE,aAAa,CAAC,MAAM;SAC/B,CAAC;QACF,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QAC9C,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;QACpD,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC5C,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC1C,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACtD,IAAI,CAAC,IAAI,EAAE,CAAC;IAChB,CAAC;IACO,IAAI;QACR,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,EAAE;YAC3B,2BAA2B;YAC3B,sCAAsC;YACtC,YAAY;YACZ,IAAI;YACJ,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,qBAAqB,EAAE,CAAC;YAC3D,IAAI,CAAC,UAAU,EAAE,CAAC;gBACd,OAAO;YACX,CAAC;YACD,IACI,CAAC,CAAC,OAAO,GAAG,UAAU,CAAC,CAAC;gBACxB,CAAC,CAAC,OAAO,GAAG,UAAU,CAAC,CAAC,GAAG,UAAU,CAAC,KAAK;gBAC3C,CAAC,CAAC,OAAO,GAAG,UAAU,CAAC,CAAC;gBACxB,CAAC,CAAC,OAAO,GAAG,UAAU,CAAC,CAAC,GAAG,UAAU,CAAC,MAAM,EAC9C,CAAC;gBACC,IAAI,CAAC,IAAI,EAAE,CAAC;YAChB,CAAC;QACL,CAAC,CAAC,CAAC;QACH,UAAU;QACV,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,WAAW,EAAE,GAAG,EAAE;YAC1B,IAAI,CAAC,IAAI,EAAE,CAAC;QAChB,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,wBAAwB,EAAE,CAAC,IAAI,EAAE,EAAE;YAC3C,qBAAqB;YACrB,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;gBAChC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACpB,CAAC;QACL,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,uBAAuB,EAAE,GAAG,EAAE;YACtC,IAAI,CAAC,IAAI,EAAE,CAAC;QAChB,CAAC,CAAC,CAAC;IACP,CAAC;IACO,IAAI,CAAC,IAAU;QACnB,sCAAsC;QACtC,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC5B,OAAO;QACX,CAAC;QACD,iBAAiB;QACjB,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC;YACrB,OAAO;QACX,CAAC;QACD,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;QACxC,IAAI,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;QAC1B,wBAAwB;QACxB,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACf,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC;QACxB,CAAC;QACD,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,qBAAqB,EAAE,CAAC;QAC3D,IAAI,CAAC,UAAU,EAAE,CAAC;YACd,OAAO;QACX,CAAC;QACD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACnB,SAAS;QACT,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,GAAG,GAAG,IAAI,CAAC,uBAAuB,IAAI,GAAG,IAAI,CAAC;QAC3E,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC;QACpC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,GAAG,cAAc,CAAC;QAC9C,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,GAAG,WAAW,CAAC;QAC7C,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC;QACxC,IAAI,CAAC,SAAS,CAAC,SAAS,GAAG,IAAI,CAAC;QAChC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC;QACxC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC;QACxC,cAAc;QACd,MAAM,SAAS,GAAG;YACd,qBAAqB;gBACjB,OAAO;oBACH,KAAK,EAAE,IAAI,CAAC,YAAY;oBACxB,MAAM,EAAE,IAAI,CAAC,aAAa;oBAC1B,CAAC,EAAE,KAAK;oBACR,CAAC,EAAE,KAAK;oBACR,IAAI,EAAE,KAAK;oBACX,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC,YAAY;oBAChC,GAAG,EAAE,KAAK;oBACV,MAAM,EAAE,KAAK,GAAG,IAAI,CAAC,aAAa;iBACrC,CAAC;YACN,CAAC;SACJ,CAAC;QAEF,eAAe,CAAC,SAAS,EAAE,IAAI,CAAC,UAAU,EAAE;YACxC,SAAS,EAAE,IAAI,CAAC,wBAAwB;YACxC,UAAU,EAAE,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;SAC7E,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE;YACZ,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,SAAS,EAAE,cAAc,EAAE,GAAG,GAAG,CAAC;YAChD,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE;gBACjC,GAAG,EAAE,GAAG,CAAC,IAAI;gBACb,IAAI,EAAE,GAAG,CAAC,IAAI;aACjB,CAAC,CAAC;YACH,IAAI,cAAc,CAAC,KAAK,EAAE,CAAC;gBACvB,MAAM,KAAK,GAAG,cAAc,CAAC,KAAK,CAAC;gBACnC,IAAI,CAAC,MAAM,EAAE,YAAY,EAAE,UAAU,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;oBACzD,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;wBAC9B,GAAG,EAAE,GAAG,KAAK,CAAC,CAAC,IAAI;wBACnB,MAAM,EAAE,EAAE;wBACV,IAAI,EAAE,EAAE;wBACR,KAAK,EAAE,MAAM;qBAChB,CAAC,CAAC;gBACP,CAAC;qBAAM,IAAI,CAAC,OAAO,EAAE,aAAa,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;oBACnE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;wBAC9B,GAAG,EAAE,GAAG,KAAK,CAAC,CAAC,IAAI;wBACnB,MAAM,EAAE,EAAE;wBACV,IAAI,EAAE,MAAM;wBACZ,KAAK,EAAE,EAAE;qBACZ,CAAC,CAAC;gBACP,CAAC;qBAAM,IAAI,CAAC,QAAQ,EAAE,cAAc,EAAE,YAAY,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;oBACtE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;wBAC9B,GAAG,EAAE,MAAM;wBACX,MAAM,EAAE,EAAE;wBACV,IAAI,EAAE,GAAG,KAAK,CAAC,CAAC,IAAI;wBACpB,KAAK,EAAE,EAAE;qBACZ,CAAC,CAAC;gBACP,CAAC;qBAAM,IAAI,CAAC,KAAK,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;oBAC7D,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;wBAC9B,GAAG,EAAE,EAAE;wBACP,MAAM,EAAE,MAAM;wBACd,IAAI,EAAE,GAAG,KAAK,CAAC,CAAC,IAAI;wBACpB,KAAK,EAAE,EAAE;qBACZ,CAAC,CAAC;gBACP,CAAC;YACL,CAAC;QACL,CAAC,CAAC,CAAC;IACP,CAAC;IACO,IAAI;QACR,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACf,OAAO;QACX,CAAC;QACD,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;IAC3C,CAAC;IACD,OAAO;QACH,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;QACxB,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;QACtB,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;IAC7B,CAAC;CACJ"}
@@ -0,0 +1,3 @@
1
+ import EVirtTable from "./EVirtTable";
2
+ export * from "./types";
3
+ export default EVirtTable;
@@ -0,0 +1,4 @@
1
+ import EVirtTable from "./EVirtTable";
2
+ export * from "./types";
3
+ export default EVirtTable;
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,cAAc,CAAC;AACtC,cAAc,SAAS,CAAC;AACxB,eAAe,UAAU,CAAC"}
@@ -0,0 +1,160 @@
1
+ import type Cell from './Cell';
2
+ import type CellHeader from './CellHeader';
3
+ import type { RuleItem } from 'async-validator';
4
+ import Config from './Config';
5
+ export type EVirtTableOptions = {
6
+ data: any[];
7
+ footerData: any[];
8
+ columns: Column[];
9
+ config?: ConfigType;
10
+ };
11
+ export type EventCallback = (...args: any[]) => void;
12
+ export type ChangeItem = {
13
+ value: any;
14
+ key: string;
15
+ rowKey: string;
16
+ row: any;
17
+ };
18
+ export type OverflowTooltipPlacement = 'top' | 'top-start' | 'top-end' | 'right' | 'right-start' | 'right-end' | 'left' | 'left-start' | 'left-end' | 'bottom' | 'bottom-start' | 'bottom-end';
19
+ export type VerticalAlign = 'top' | 'middle' | 'bottom';
20
+ export type Align = 'left' | 'center' | 'right';
21
+ export type Fixed = 'left' | 'right';
22
+ export type Type = 'index' | 'selection' | 'index-selection' | 'tree';
23
+ export type TypeCheckbox = 'checkbox-uncheck' | 'checkbox-check' | 'checkbox-check-disabled' | 'checkbox-disabled' | 'checkbox-hover' | 'checkbox-indeterminate';
24
+ export type CellType = 'header' | 'body' | 'footer';
25
+ export type RowType = CellType;
26
+ export type MenuItem = {
27
+ label: string;
28
+ value: string | 'copy' | 'paste' | 'cut' | 'clearSelected';
29
+ children?: MenuItem[];
30
+ event?: Function;
31
+ };
32
+ export type OverlayerView = {
33
+ key: 'left' | 'center' | 'right';
34
+ style: any;
35
+ cells: Cell[] | CellHeader[];
36
+ };
37
+ export type OverlayerWrapper = {
38
+ type: 'body' | 'footer' | 'header';
39
+ class: string;
40
+ style: any;
41
+ views: OverlayerView[];
42
+ };
43
+ export type OverlayerContainer = {
44
+ style: any;
45
+ views: OverlayerWrapper[];
46
+ };
47
+ export type ContextmenuItem = {
48
+ label: string;
49
+ value: string | number;
50
+ render: Function;
51
+ };
52
+ export type Render = Function | string | undefined;
53
+ export interface KRuleItem extends RuleItem {
54
+ column?: Column;
55
+ row?: any;
56
+ rowIndex?: number;
57
+ colIndex?: number;
58
+ }
59
+ export type Rule = KRuleItem | KRuleItem[];
60
+ export type ValidateItemError = {
61
+ rowIndex: number;
62
+ key: string;
63
+ message: string;
64
+ };
65
+ export type Rules = {
66
+ [x: string]: Rule;
67
+ };
68
+ export type Position = {
69
+ height: number;
70
+ top: number;
71
+ bottom: number;
72
+ };
73
+ export interface Column {
74
+ type: Type;
75
+ editorType: string;
76
+ hoverIconName: string;
77
+ title: string;
78
+ width: number;
79
+ widthFillDisable: boolean;
80
+ align: Align;
81
+ verticalAlign: VerticalAlign;
82
+ fixed: Fixed;
83
+ level: number;
84
+ text: string;
85
+ colspan: number;
86
+ rowspan: number;
87
+ key: string;
88
+ render: Function;
89
+ renderFooter: Function;
90
+ renderHeader: Function;
91
+ formatter: FormatterMethod;
92
+ overflowTooltipShow: boolean;
93
+ overflowTooltipMaxWidth: number;
94
+ overflowTooltipPlacement: OverflowTooltipPlacement;
95
+ required: boolean;
96
+ readonly: boolean;
97
+ children: Column[];
98
+ column: Column;
99
+ rules: Rules;
100
+ options: any[];
101
+ }
102
+ export type OverlayerTooltip = {
103
+ style: any;
104
+ text: string;
105
+ show: boolean;
106
+ };
107
+ export type OverlayerContextmenu = {
108
+ style: any;
109
+ list: any[];
110
+ show: boolean;
111
+ };
112
+ export type CellStyleOptions = {
113
+ color?: string;
114
+ backgroundColor?: string;
115
+ };
116
+ export type CellParams = {
117
+ row: any;
118
+ rowIndex: number;
119
+ colIndex: number;
120
+ column: Column;
121
+ value: any;
122
+ };
123
+ export type CellHeaderParams = {
124
+ colIndex?: number;
125
+ column?: Column;
126
+ };
127
+ export type SpanType = {
128
+ rowspan: number;
129
+ colspan: number;
130
+ };
131
+ export type SpanParams = {
132
+ row: any;
133
+ rowIndex: number;
134
+ colIndex: number;
135
+ column: Column;
136
+ visibleLeafColumns: Column[];
137
+ value: any;
138
+ headIndex: number;
139
+ headPosition: Position;
140
+ visibleRows: any[];
141
+ rows: any[];
142
+ };
143
+ export type SelectableParams = {
144
+ row: any;
145
+ rowIndex: number;
146
+ };
147
+ export type ConfigType = Partial<Config>;
148
+ export type FilterMethod = (rows: any[]) => any[];
149
+ export type FormatterMethod = (params: CellParams) => string | void;
150
+ export type CellStyleMethod = (params: CellParams) => CellStyleOptions | void;
151
+ export type CellHeaderStyleMethod = (params: CellHeaderParams) => CellStyleOptions | void;
152
+ export type CellReadonlyMethod = (params: CellParams) => boolean | void;
153
+ export type CellRulesMethod = (params: CellParams) => Rules | void;
154
+ export type CellTypeMethod = (params: CellParams) => Type | void;
155
+ export type CellEditorTypeMethod = (params: CellParams) => string | void;
156
+ export type CellRenderMethod = (params: CellParams) => string | void;
157
+ export type CellHoverIconMethod = (params: CellParams) => string | void;
158
+ export type SpanMethod = (params: SpanParams) => SpanType | void;
159
+ export type SelectableMethod = (params: SelectableParams) => boolean | void;
160
+ export type ExpandLazyMethod = (params: CellParams) => Promise<any[]>;
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,15 @@
1
+ import { Column } from "./types";
2
+ declare function generateShortUUID(): string;
3
+ declare function throttle<T extends (...args: any) => any>(func: T, delay: number): T;
4
+ /**
5
+ * 根据children获取最大深度
6
+ * @param data
7
+ * @returns
8
+ */
9
+ declare function getMaxRow(data: Column[]): number;
10
+ declare function sortFixed(arr?: Column[]): Column[];
11
+ declare function calCrossSpan(arr?: Column[], maxRow?: number, level?: number): Column[];
12
+ declare function toLeaf(arr?: Column[]): Column[];
13
+ type DebouncedFunction<F extends (...args: any[]) => any> = (...args: Parameters<F>) => void;
14
+ declare function debounce<F extends (...args: any[]) => any>(func: F, delay: number): DebouncedFunction<F>;
15
+ export { debounce, throttle, generateShortUUID, toLeaf, sortFixed, calCrossSpan, getMaxRow, };
@@ -0,0 +1,113 @@
1
+ function generateShortUUID() {
2
+ return "xxxxxxxxxxxxxxxxxx".replace(/[x]/g, function (c) {
3
+ const r = (Math.random() * 16) | 0;
4
+ const v = c === "x" ? r : (r & 0x3) | 0x8;
5
+ return v.toString(16);
6
+ });
7
+ }
8
+ function throttle(func, delay) {
9
+ let lastCalledTime = 0;
10
+ let timeoutId;
11
+ return function (...args) {
12
+ const now = new Date().getTime();
13
+ const elapsedTime = now - lastCalledTime;
14
+ if (!lastCalledTime || elapsedTime >= delay) {
15
+ func.apply(this, args);
16
+ lastCalledTime = now;
17
+ }
18
+ else if (!timeoutId) {
19
+ timeoutId = setTimeout(() => {
20
+ func.apply(this, args);
21
+ lastCalledTime = new Date().getTime();
22
+ timeoutId = undefined;
23
+ }, delay - elapsedTime);
24
+ }
25
+ return undefined;
26
+ };
27
+ }
28
+ /**
29
+ * 根据children获取最大深度
30
+ * @param data
31
+ * @returns
32
+ */
33
+ function getMaxRow(data) {
34
+ if (data) {
35
+ return data
36
+ .map((item) => getMaxRow(item.children) + 1)
37
+ .sort((a, b) => b - a)[0];
38
+ }
39
+ return 0;
40
+ }
41
+ function sortFixed(arr = []) {
42
+ let lefts = [];
43
+ let centers = [];
44
+ let right = [];
45
+ arr.forEach((item) => {
46
+ if (item.fixed === "left") {
47
+ lefts.push(item);
48
+ }
49
+ else if (item.fixed === "right") {
50
+ right.push(item);
51
+ }
52
+ else {
53
+ centers.push(item);
54
+ }
55
+ });
56
+ return [...lefts, ...centers, ...right];
57
+ }
58
+ function calCrossSpan(arr = [], maxRow = 1, level = 0) {
59
+ return arr.map((config) => {
60
+ if (config.children) {
61
+ let colspan = 0;
62
+ let fixed = config.fixed;
63
+ config.children.forEach((item) => {
64
+ item.fixed = fixed;
65
+ });
66
+ const children = calCrossSpan(config.children, maxRow - 1, level + 1);
67
+ if (children) {
68
+ children.forEach((item) => {
69
+ colspan += item.colspan;
70
+ });
71
+ }
72
+ return {
73
+ ...config,
74
+ width: config.width,
75
+ level,
76
+ rowspan: 1,
77
+ colspan,
78
+ children,
79
+ };
80
+ }
81
+ return {
82
+ ...config,
83
+ level,
84
+ rowspan: maxRow,
85
+ colspan: 1,
86
+ };
87
+ });
88
+ }
89
+ function toLeaf(arr = []) {
90
+ let tmp = [];
91
+ arr.forEach((item) => {
92
+ if (item.children) {
93
+ tmp = tmp.concat(toLeaf(item.children));
94
+ }
95
+ else {
96
+ tmp.push(item);
97
+ }
98
+ });
99
+ return tmp;
100
+ }
101
+ function debounce(func, delay) {
102
+ let timeoutId = null;
103
+ return function (...args) {
104
+ if (timeoutId !== null) {
105
+ clearTimeout(timeoutId);
106
+ }
107
+ timeoutId = setTimeout(() => {
108
+ func(...args);
109
+ }, delay);
110
+ };
111
+ }
112
+ export { debounce, throttle, generateShortUUID, toLeaf, sortFixed, calCrossSpan, getMaxRow, };
113
+ //# sourceMappingURL=util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.js","sourceRoot":"","sources":["../../src/util.ts"],"names":[],"mappings":"AAEA,SAAS,iBAAiB;IACxB,OAAO,oBAAoB,CAAC,OAAO,CAAC,MAAM,EAAE,UAAU,CAAC;QACrD,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;QACnC,MAAM,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;QAC1C,OAAO,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IACxB,CAAC,CAAC,CAAC;AACL,CAAC;AACD,SAAS,QAAQ,CAAkC,IAAO,EAAE,KAAa;IACvE,IAAI,cAAc,GAAG,CAAC,CAAC;IACvB,IAAI,SAAoD,CAAC;IAEzD,OAAO,UAEL,GAAG,IAAmB;QAEtB,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;QACjC,MAAM,WAAW,GAAG,GAAG,GAAG,cAAc,CAAC;QAEzC,IAAI,CAAC,cAAc,IAAI,WAAW,IAAI,KAAK,EAAE,CAAC;YAC5C,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YACvB,cAAc,GAAG,GAAG,CAAC;QACvB,CAAC;aAAM,IAAI,CAAC,SAAS,EAAE,CAAC;YACtB,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC1B,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;gBACvB,cAAc,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;gBACtC,SAAS,GAAG,SAAS,CAAC;YACxB,CAAC,EAAE,KAAK,GAAG,WAAW,CAAC,CAAC;QAC1B,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAM,CAAC;AACT,CAAC;AACD;;;;GAIG;AACH,SAAS,SAAS,CAAC,IAAc;IAC/B,IAAI,IAAI,EAAE,CAAC;QACT,OAAO,IAAI;aACR,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;aAC3C,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9B,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AACD,SAAS,SAAS,CAAC,MAAgB,EAAE;IACnC,IAAI,KAAK,GAAa,EAAE,CAAC;IACzB,IAAI,OAAO,GAAa,EAAE,CAAC;IAC3B,IAAI,KAAK,GAAa,EAAE,CAAC;IACzB,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;QACnB,IAAI,IAAI,CAAC,KAAK,KAAK,MAAM,EAAE,CAAC;YAC1B,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnB,CAAC;aAAM,IAAI,IAAI,CAAC,KAAK,KAAK,OAAO,EAAE,CAAC;YAClC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnB,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrB,CAAC;IACH,CAAC,CAAC,CAAC;IACH,OAAO,CAAC,GAAG,KAAK,EAAE,GAAG,OAAO,EAAE,GAAG,KAAK,CAAC,CAAC;AAC1C,CAAC;AACD,SAAS,YAAY,CACnB,MAAgB,EAAE,EAClB,SAAiB,CAAC,EAClB,QAAgB,CAAC;IAEjB,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;QACxB,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;YACpB,IAAI,OAAO,GAAG,CAAC,CAAC;YAChB,IAAI,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;YACzB,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;gBAC/B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;YACrB,CAAC,CAAC,CAAC;YACH,MAAM,QAAQ,GAAG,YAAY,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;YACtE,IAAI,QAAQ,EAAE,CAAC;gBACb,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;oBACxB,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC;gBAC1B,CAAC,CAAC,CAAC;YACL,CAAC;YACD,OAAO;gBACL,GAAG,MAAM;gBACT,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,KAAK;gBACL,OAAO,EAAE,CAAC;gBACV,OAAO;gBACP,QAAQ;aACT,CAAC;QACJ,CAAC;QACD,OAAO;YACL,GAAG,MAAM;YACT,KAAK;YACL,OAAO,EAAE,MAAM;YACf,OAAO,EAAE,CAAC;SACX,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AACD,SAAS,MAAM,CAAC,MAAgB,EAAE;IAChC,IAAI,GAAG,GAAa,EAAE,CAAC;IACvB,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;QACnB,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC1C,CAAC;aAAM,CAAC;YACN,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjB,CAAC;IACH,CAAC,CAAC,CAAC;IACH,OAAO,GAAG,CAAC;AACb,CAAC;AAKD,SAAS,QAAQ,CACf,IAAO,EACP,KAAa;IAEb,IAAI,SAAS,GAAyC,IAAI,CAAC;IAC3D,OAAO,UAAU,GAAG,IAAmB;QACrC,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;YACvB,YAAY,CAAC,SAAS,CAAC,CAAC;QAC1B,CAAC;QACD,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE;YAC1B,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;QAChB,CAAC,EAAE,KAAK,CAAC,CAAC;IACZ,CAAC,CAAC;AACJ,CAAC;AACD,OAAO,EACL,QAAQ,EACR,QAAQ,EACR,iBAAiB,EACjB,MAAM,EACN,SAAS,EACT,YAAY,EACZ,SAAS,GACV,CAAC"}
package/package.json ADDED
@@ -0,0 +1,37 @@
1
+ {
2
+ "name": "e-virt-table",
3
+ "private": false,
4
+ "version": "0.0.3",
5
+ "description": "A powerful data table based on canvas. You can use it as data grid、Microsoft Excel or Google sheets. It supports virtual scroll、cell edit etc.",
6
+ "main": "dist/index.js",
7
+ "module": "dist/index.es.js",
8
+ "types": "dist/lib/index.d.ts",
9
+ "scripts": {
10
+ "dev": "vite",
11
+ "dev:install": "cd docs && npm run i",
12
+ "dev:docs": "cd docs && npm run dev",
13
+ "build": "vite build && tsc",
14
+ "preview": "vite preview"
15
+ },
16
+ "license": "MIT",
17
+ "author": "laichuangwen",
18
+ "bugs": {
19
+ "url": "https://github.com/laichuangwen/e-virt-table/issues"
20
+ },
21
+ "repository": {
22
+ "type": "git",
23
+ "url": "git@github.com:laichuangwen/e-virt-table.git"
24
+ },
25
+ "files": [
26
+ "dist"
27
+ ],
28
+ "devDependencies": {
29
+ "rollup-plugin-copy": "^3.5.0",
30
+ "typescript": "^5.5.3",
31
+ "vite": "^5.4.1"
32
+ },
33
+ "dependencies": {
34
+ "@floating-ui/dom": "^1.6.11",
35
+ "async-validator": "^4.2.5"
36
+ }
37
+ }