vxe-pc-ui 3.17.7 → 3.17.8

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 (96) hide show
  1. package/es/button/src/button.js +2 -2
  2. package/es/button-group/style.css +1 -1
  3. package/es/button-group/style.min.css +1 -1
  4. package/es/color-picker/src/color-picker.js +2 -2
  5. package/es/date-picker/src/date-picker.js +2 -2
  6. package/es/date-range-picker/src/date-range-picker.js +2 -2
  7. package/es/drawer/src/drawer.js +2 -2
  8. package/es/icon/style.css +1 -1
  9. package/es/icon-picker/src/icon-picker.js +2 -2
  10. package/es/menu/src/menu.js +2 -2
  11. package/es/modal/src/modal.js +2 -2
  12. package/es/select/src/select.js +2 -2
  13. package/es/style.css +1 -1
  14. package/es/style.min.css +1 -1
  15. package/es/table-select/src/table-select.js +2 -2
  16. package/es/tooltip/src/tooltip.js +72 -127
  17. package/es/tree/src/tree.js +2 -2
  18. package/es/tree-select/src/tree-select.js +2 -2
  19. package/es/ui/index.js +4 -4
  20. package/es/ui/src/dom.js +114 -81
  21. package/es/ui/src/log.js +1 -1
  22. package/es/vxe-button-group/style.css +1 -1
  23. package/es/vxe-button-group/style.min.css +1 -1
  24. package/lib/button/src/button.js +1 -1
  25. package/lib/button/src/button.min.js +1 -1
  26. package/lib/button-group/style/style.css +1 -1
  27. package/lib/button-group/style/style.min.css +1 -1
  28. package/lib/color-picker/src/color-picker.js +1 -1
  29. package/lib/color-picker/src/color-picker.min.js +1 -1
  30. package/lib/date-picker/src/date-picker.js +1 -1
  31. package/lib/date-picker/src/date-picker.min.js +1 -1
  32. package/lib/date-range-picker/src/date-range-picker.js +1 -1
  33. package/lib/date-range-picker/src/date-range-picker.min.js +1 -1
  34. package/lib/drawer/src/drawer.js +1 -1
  35. package/lib/drawer/src/drawer.min.js +1 -1
  36. package/lib/icon/style/style.css +1 -1
  37. package/lib/icon/style/style.min.css +1 -1
  38. package/lib/icon-picker/src/icon-picker.js +1 -1
  39. package/lib/icon-picker/src/icon-picker.min.js +1 -1
  40. package/lib/index.umd.js +204 -222
  41. package/lib/index.umd.min.js +1 -1
  42. package/lib/menu/src/menu.js +1 -1
  43. package/lib/menu/src/menu.min.js +1 -1
  44. package/lib/modal/src/modal.js +1 -1
  45. package/lib/modal/src/modal.min.js +1 -1
  46. package/lib/select/src/select.js +1 -1
  47. package/lib/select/src/select.min.js +1 -1
  48. package/lib/style.css +1 -1
  49. package/lib/style.min.css +1 -1
  50. package/lib/table-select/src/table-select.js +1 -1
  51. package/lib/table-select/src/table-select.min.js +1 -1
  52. package/lib/tooltip/src/tooltip.js +78 -126
  53. package/lib/tooltip/src/tooltip.min.js +1 -1
  54. package/lib/tree/src/tree.js +3 -2
  55. package/lib/tree/src/tree.min.js +1 -1
  56. package/lib/tree-select/src/tree-select.js +1 -1
  57. package/lib/tree-select/src/tree-select.min.js +1 -1
  58. package/lib/ui/index.js +4 -4
  59. package/lib/ui/index.min.js +1 -1
  60. package/lib/ui/src/dom.js +109 -79
  61. package/lib/ui/src/dom.min.js +1 -1
  62. package/lib/ui/src/log.js +1 -1
  63. package/lib/ui/src/log.min.js +1 -1
  64. package/lib/vxe-button-group/style/style.css +1 -1
  65. package/lib/vxe-button-group/style/style.min.css +1 -1
  66. package/package.json +1 -1
  67. package/packages/button/src/button.ts +2 -2
  68. package/packages/color-picker/src/color-picker.ts +2 -2
  69. package/packages/date-picker/src/date-picker.ts +2 -2
  70. package/packages/date-range-picker/src/date-range-picker.ts +2 -2
  71. package/packages/drawer/src/drawer.ts +2 -2
  72. package/packages/icon-picker/src/icon-picker.ts +2 -2
  73. package/packages/menu/src/menu.ts +2 -2
  74. package/packages/modal/src/modal.ts +2 -2
  75. package/packages/select/src/select.ts +2 -2
  76. package/packages/table-select/src/table-select.ts +2 -2
  77. package/packages/tooltip/src/tooltip.ts +74 -126
  78. package/packages/tree/src/tree.ts +2 -2
  79. package/packages/tree-select/src/tree-select.ts +2 -2
  80. package/packages/ui/index.ts +3 -3
  81. package/packages/ui/src/dom.ts +125 -84
  82. package/styles/components/button-group.scss +4 -2
  83. package/types/components/table.d.ts +6 -0
  84. package/types/components/tooltip.d.ts +4 -0
  85. /package/es/icon/{iconfont.1787197085834.ttf → iconfont.1787216119203.ttf} +0 -0
  86. /package/es/icon/{iconfont.1787197085834.woff → iconfont.1787216119203.woff} +0 -0
  87. /package/es/icon/{iconfont.1787197085834.woff2 → iconfont.1787216119203.woff2} +0 -0
  88. /package/es/{iconfont.1787197085834.ttf → iconfont.1787216119203.ttf} +0 -0
  89. /package/es/{iconfont.1787197085834.woff → iconfont.1787216119203.woff} +0 -0
  90. /package/es/{iconfont.1787197085834.woff2 → iconfont.1787216119203.woff2} +0 -0
  91. /package/lib/icon/style/{iconfont.1787197085834.ttf → iconfont.1787216119203.ttf} +0 -0
  92. /package/lib/icon/style/{iconfont.1787197085834.woff → iconfont.1787216119203.woff} +0 -0
  93. /package/lib/icon/style/{iconfont.1787197085834.woff2 → iconfont.1787216119203.woff2} +0 -0
  94. /package/lib/{iconfont.1787197085834.ttf → iconfont.1787216119203.ttf} +0 -0
  95. /package/lib/{iconfont.1787197085834.woff → iconfont.1787216119203.woff} +0 -0
  96. /package/lib/{iconfont.1787197085834.woff2 → iconfont.1787216119203.woff2} +0 -0
@@ -1,7 +1,7 @@
1
1
  import { defineVxeComponent } from '../../ui/src/comp';
2
2
  import XEUtils from 'xe-utils';
3
3
  import { VxeUI, getConfig, getIcon, globalEvents, getI18n, createEvent, renderEmptyElement, globalMixins } from '../../ui';
4
- import { getEventTargetNode, updatePanelPlacement, toCssUnit, getPopupContainer } from '../../ui/src/dom';
4
+ import { getEventTargetNode, updatePanelPlacement, toCssUnit, getPopupAppendElement } from '../../ui/src/dom';
5
5
  import { getOnName } from '../../ui/src/vn';
6
6
  import { getLastZIndex, nextZIndex } from '../../ui/src/utils';
7
7
  import { createComponentLog } from '../../ui/src/log';
@@ -464,7 +464,7 @@ export default {
464
464
  if (btnTransfer) {
465
465
  if (panelElem) {
466
466
  const { appendTo } = popupOpts;
467
- getPopupContainer(appendTo).appendChild(panelElem);
467
+ getPopupAppendElement(appendTo).appendChild(panelElem);
468
468
  }
469
469
  }
470
470
  }
@@ -2,7 +2,7 @@ import { defineVxeComponent } from '../../ui/src/comp';
2
2
  import XEUtils from 'xe-utils';
3
3
  import { getConfig, createEvent, globalMixins } from '../../ui';
4
4
  import { getLastZIndex, nextZIndex } from '../../ui/src/utils';
5
- import { toCssUnit } from '../../ui/src/dom';
5
+ import { getPopupAppendElement, toCssUnit, updatePanelPlacement } from '../../ui/src/dom';
6
6
  import { getSlotVNs } from '../../ui/src/vn';
7
7
  function createReactData() {
8
8
  return {
@@ -108,6 +108,10 @@ export default {
108
108
  leaveDelay: {
109
109
  type: Number,
110
110
  default: () => getConfig().tooltip.leaveDelay
111
+ },
112
+ appendTo: {
113
+ type: [String, Function],
114
+ default: () => getConfig().tooltip.appendTo
111
115
  }
112
116
  },
113
117
  data() {
@@ -202,24 +206,55 @@ export default {
202
206
  const $xeTooltip = this;
203
207
  return $xeTooltip.handleVisible(target, content);
204
208
  },
205
- updatePlacement() {
209
+ updateTipStyle() {
206
210
  const $xeTooltip = this;
211
+ const props = $xeTooltip;
207
212
  const reactData = $xeTooltip.reactData;
208
- const { visible, tipTarget } = reactData;
209
- let el = $xeTooltip.$refs.refElem;
210
- if (visible && tipTarget && el) {
211
- $xeTooltip.updateTipStyle();
213
+ const { placement, defaultPlacement, isArrow } = props;
214
+ const { tipTarget: targetElem, tipStore, tipPos, tipZindex } = reactData;
215
+ const panelElem = $xeTooltip.$refs.refElem;
216
+ if (!targetElem || !panelElem) {
217
+ return;
212
218
  }
213
- return $xeTooltip.$nextTick().then(() => {
214
- const { tipTarget } = reactData;
215
- el = $xeTooltip.$refs.refElem;
216
- if (tipTarget && el) {
217
- $xeTooltip.updateTipStyle();
218
- return $xeTooltip.$nextTick().then(() => {
219
- $xeTooltip.updateTipStyle();
220
- });
219
+ const targetRect = targetElem.getBoundingClientRect();
220
+ const targetWidth = targetElem.offsetWidth;
221
+ const targetHeight = targetElem.offsetHeight;
222
+ const panelWidth = panelElem.offsetWidth;
223
+ const targetLeft = targetRect.left;
224
+ const targetTop = targetRect.top;
225
+ // 支持特殊定位逻辑
226
+ let left = targetLeft;
227
+ let top = targetTop + targetHeight;
228
+ if (tipPos && (tipPos.oLeft || tipPos.oTop)) {
229
+ if (isArrow) {
230
+ left = left + Math.max(8, Math.min(targetWidth - 8, tipPos.oLeft)) - panelWidth / 2;
221
231
  }
232
+ else {
233
+ left = tipPos.x + 1;
234
+ top = tipPos.y + 1;
235
+ }
236
+ }
237
+ else {
238
+ left = targetLeft + (targetWidth - panelWidth) / 2;
239
+ }
240
+ const ppObj = updatePanelPlacement(targetElem, panelElem, {
241
+ defaultTop: top,
242
+ defaultLeft: left,
243
+ placement: placement,
244
+ defaultPlacement: defaultPlacement,
245
+ teleportTo: true
246
+ });
247
+ const panelStyle = Object.assign(ppObj.style, {
248
+ zIndex: tipZindex
222
249
  });
250
+ tipStore.placement = ppObj.placement;
251
+ tipStore.style = panelStyle;
252
+ tipStore.arrowStyle.left = `${ppObj.arrowLeft}px`;
253
+ },
254
+ updatePlacement() {
255
+ const $xeTooltip = this;
256
+ $xeTooltip.updateTipStyle();
257
+ return $xeTooltip.$nextTick().then(() => $xeTooltip.updateTipStyle());
223
258
  },
224
259
  isActived() {
225
260
  const $xeTooltip = this;
@@ -231,102 +266,6 @@ export default {
231
266
  const reactData = $xeTooltip.reactData;
232
267
  reactData.tipActive = !!active;
233
268
  },
234
- updateTipStyle() {
235
- const $xeTooltip = this;
236
- const props = $xeTooltip;
237
- const reactData = $xeTooltip.reactData;
238
- const { isArrow, placement, defaultPlacement } = props;
239
- const { tipTarget: targetElem, tipStore, tipPos } = reactData;
240
- let top = '';
241
- let left = '';
242
- let panelPlacement = 'bottom';
243
- let arrowLeft = '';
244
- const panelElem = $xeTooltip.$refs.refElem;
245
- if (panelElem && targetElem) {
246
- const documentElement = document.documentElement;
247
- const bodyElem = document.body;
248
- const targetWidth = targetElem.offsetWidth;
249
- const targetHeight = targetElem.offsetHeight;
250
- const panelHeight = panelElem.offsetHeight;
251
- const panelWidth = panelElem.offsetWidth;
252
- const targetRect = targetElem.getBoundingClientRect();
253
- const visibleHeight = documentElement.clientHeight || bodyElem.clientHeight;
254
- const visibleWidth = documentElement.clientWidth || bodyElem.clientWidth;
255
- const marginSize = 6;
256
- left = targetRect.left;
257
- top = targetRect.top + targetHeight;
258
- if (tipPos && (tipPos.oLeft || tipPos.oTop)) {
259
- if (isArrow) {
260
- left = left + Math.max(8, Math.min(targetWidth - 8, tipPos.oLeft)) - panelWidth / 2;
261
- }
262
- else {
263
- left = tipPos.x + 1;
264
- top = tipPos.y + 1;
265
- }
266
- }
267
- else {
268
- left = targetRect.left + (targetWidth - panelWidth) / 2;
269
- }
270
- if (placement === 'top') {
271
- panelPlacement = 'top';
272
- top = targetRect.top - panelHeight;
273
- }
274
- else if (!placement) {
275
- if (defaultPlacement === 'top') {
276
- panelPlacement = 'top';
277
- top = targetRect.top - panelHeight;
278
- // 如果上面不够放,则向下
279
- if (top < marginSize) {
280
- panelPlacement = 'bottom';
281
- top = targetRect.top + targetHeight;
282
- }
283
- // 如果下面不够放,则向上(优先)
284
- if (top + panelHeight + marginSize > visibleHeight) {
285
- panelPlacement = 'top';
286
- top = targetRect.top - panelHeight;
287
- }
288
- }
289
- else {
290
- // 如果下面不够放,则向上
291
- if (top + panelHeight + marginSize > visibleHeight) {
292
- panelPlacement = 'top';
293
- top = targetRect.top - panelHeight;
294
- }
295
- // 如果上面不够放,则向下(优先)
296
- if (top < marginSize) {
297
- panelPlacement = 'bottom';
298
- top = targetRect.top + targetHeight;
299
- }
300
- }
301
- }
302
- // 如果溢出右边
303
- if (left + panelWidth + marginSize > visibleWidth) {
304
- left -= left + panelWidth + marginSize - visibleWidth;
305
- }
306
- // 如果溢出左边
307
- if (left < marginSize) {
308
- left = marginSize;
309
- }
310
- // 箭头
311
- if (left === targetRect.left) {
312
- if (targetWidth <= panelWidth) {
313
- arrowLeft = targetWidth / 2;
314
- }
315
- }
316
- else if (left < targetRect.left) {
317
- if (left + panelWidth > targetRect.left + targetWidth) {
318
- arrowLeft = (targetRect.left - left) + targetWidth / 2;
319
- }
320
- else {
321
- arrowLeft = (targetRect.left - left) + (panelWidth - (targetRect.left - left)) / 2;
322
- }
323
- }
324
- tipStore.placement = panelPlacement;
325
- tipStore.style.top = `${top}px`;
326
- tipStore.style.left = `${left}px`;
327
- tipStore.arrowStyle.left = `${arrowLeft}px`;
328
- }
329
- },
330
269
  updateValue(value) {
331
270
  const $xeTooltip = this;
332
271
  const reactData = $xeTooltip.reactData;
@@ -336,10 +275,15 @@ export default {
336
275
  $xeTooltip.emitModel(value);
337
276
  }
338
277
  },
339
- updateZindex() {
278
+ updateZIndex() {
340
279
  const $xeTooltip = this;
280
+ const props = $xeTooltip;
341
281
  const reactData = $xeTooltip.reactData;
342
- if (reactData.tipZindex < getLastZIndex()) {
282
+ const { zIndex } = props;
283
+ if (zIndex) {
284
+ reactData.tipZindex = XEUtils.toNumber(zIndex);
285
+ }
286
+ else if (reactData.tipZindex < getLastZIndex()) {
343
287
  reactData.tipZindex = nextZIndex();
344
288
  }
345
289
  },
@@ -400,16 +344,17 @@ export default {
400
344
  const $xeTooltip = this;
401
345
  const props = $xeTooltip;
402
346
  const reactData = $xeTooltip.reactData;
347
+ const { appendTo } = props;
403
348
  const { tipStore } = reactData;
404
- const el = $xeTooltip.$refs.refElem;
405
- if (el) {
406
- const parentNode = el.parentNode;
349
+ const panelElem = $xeTooltip.$refs.refElem;
350
+ if (panelElem) {
351
+ const parentNode = panelElem.parentNode;
407
352
  if (!parentNode) {
408
- document.body.appendChild(el);
353
+ getPopupAppendElement(appendTo).appendChild(panelElem);
409
354
  }
410
355
  }
411
356
  $xeTooltip.updateValue(true);
412
- $xeTooltip.updateZindex();
357
+ $xeTooltip.updateZIndex();
413
358
  tipStore.placement = 'top';
414
359
  tipStore.style = { width: 'auto', left: 0, top: 0, zIndex: props.zIndex || reactData.tipZindex };
415
360
  tipStore.arrowStyle = { left: '50%' };
@@ -591,21 +536,21 @@ export default {
591
536
  }
592
537
  $xeTooltip.$nextTick(() => {
593
538
  const { trigger, content } = props;
594
- const wrapperElem = $xeTooltip.$refs.refElem;
595
- if (wrapperElem) {
596
- const parentNode = wrapperElem.parentNode;
539
+ const panelElem = $xeTooltip.$refs.refElem;
540
+ if (panelElem) {
541
+ const parentNode = panelElem.parentNode;
597
542
  if (parentNode) {
598
543
  reactData.tipContent = content;
599
544
  reactData.tipZindex = nextZIndex();
600
- XEUtils.arrayEach(wrapperElem.children, (elem, index) => {
545
+ XEUtils.arrayEach(panelElem.children, (elem, index) => {
601
546
  if (index) {
602
- parentNode.insertBefore(elem, wrapperElem);
547
+ parentNode.insertBefore(elem, panelElem);
603
548
  if (!reactData.target) {
604
549
  reactData.target = elem;
605
550
  }
606
551
  }
607
552
  });
608
- parentNode.removeChild(wrapperElem);
553
+ parentNode.removeChild(panelElem);
609
554
  const { target } = reactData;
610
555
  if (target) {
611
556
  if (trigger === 'hover') {
@@ -627,7 +572,7 @@ export default {
627
572
  const $xeTooltip = this;
628
573
  const reactData = $xeTooltip.reactData;
629
574
  const { target } = reactData;
630
- const wrapperElem = $xeTooltip.$refs.refElem;
575
+ const panelElem = $xeTooltip.$refs.refElem;
631
576
  if (target) {
632
577
  target.onmouseenter = null;
633
578
  target.onmouseleave = null;
@@ -637,10 +582,10 @@ export default {
637
582
  if (contentWrapperfEl) {
638
583
  contentWrapperfEl.removeEventListener('wheel', $xeTooltip.wheelEvent);
639
584
  }
640
- if (wrapperElem) {
641
- const parentNode = wrapperElem.parentNode;
585
+ if (panelElem) {
586
+ const parentNode = panelElem.parentNode;
642
587
  if (parentNode) {
643
- parentNode.removeChild(wrapperElem);
588
+ parentNode.removeChild(panelElem);
644
589
  }
645
590
  }
646
591
  },
@@ -3413,11 +3413,11 @@ export default {
3413
3413
  const props = $xeTree;
3414
3414
  const slots = $xeTree.$scopedSlots;
3415
3415
  const internalData = $xeTree.internalData;
3416
- const { transform, emptyText } = props;
3416
+ const { loading, transform, emptyText } = props;
3417
3417
  const { treeExpandedMaps } = internalData;
3418
3418
  const childrenField = $xeTree.computeChildrenField;
3419
3419
  const emptySlot = slots.empty;
3420
- if (!treeList.length) {
3420
+ if (!loading && !treeList.length) {
3421
3421
  return [
3422
3422
  h('div', {
3423
3423
  class: 'vxe-tree--empty-placeholder'
@@ -1,7 +1,7 @@
1
1
  import { defineVxeComponent } from '../../ui/src/comp';
2
2
  import XEUtils from 'xe-utils';
3
3
  import { getConfig, getI18n, getIcon, globalEvents, createEvent, globalMixins, renderEmptyElement } from '../../ui';
4
- import { getEventTargetNode, updatePanelPlacement, toCssUnit, getPopupContainer } from '../../ui/src/dom';
4
+ import { getEventTargetNode, updatePanelPlacement, toCssUnit, getPopupAppendElement } from '../../ui/src/dom';
5
5
  import { getLastZIndex, nextZIndex, deModelValue } from '../../ui/src/utils';
6
6
  import { createComponentLog } from '../../ui/src/log';
7
7
  import { getSlotVNs } from '../../ui/src/vn';
@@ -548,7 +548,7 @@ export default {
548
548
  if (btnTransfer) {
549
549
  if (panelElem) {
550
550
  const { appendTo } = popupOpts;
551
- getPopupContainer(appendTo).appendChild(panelElem);
551
+ getPopupAppendElement(appendTo).appendChild(panelElem);
552
552
  }
553
553
  }
554
554
  }
package/es/ui/index.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import { VxeUI, setConfig, setIcon } from '@vxe-ui/core';
2
2
  import { dynamicApp } from '../dynamics';
3
3
  import { warnLog } from './src/log';
4
- export const version = "3.17.7";
4
+ export const version = "3.17.8";
5
5
  VxeUI.uiVersion = version;
6
6
  VxeUI.dynamicApp = dynamicApp;
7
7
  export function config(options) {
@@ -418,7 +418,8 @@ setConfig({
418
418
  theme: 'dark',
419
419
  enterDelay: 500,
420
420
  leaveDelay: 300,
421
- isArrow: true
421
+ isArrow: true,
422
+ defaultPlacement: 'top'
422
423
  },
423
424
  transfer: {},
424
425
  tree: {
@@ -432,8 +433,7 @@ setConfig({
432
433
  tooltipConfig: {
433
434
  mode: 'tooltip',
434
435
  enterable: true,
435
- leaveDelay: 300,
436
- defaultPlacement: 'top'
436
+ leaveDelay: 300
437
437
  },
438
438
  dragConfig: {
439
439
  showIcon: true,
package/es/ui/src/dom.js CHANGED
@@ -148,121 +148,154 @@ export function triggerEvent(targetElem, type) {
148
148
  export function isNodeElement(elem) {
149
149
  return elem && elem.nodeType === 1;
150
150
  }
151
+ /**
152
+ * 通用定位计算
153
+ */
151
154
  export function updatePanelPlacement(targetElem, panelElem, options) {
152
- const { placement, defaultPlacement, teleportTo, marginSize, isMinWidth } = Object.assign({ teleportTo: false, marginSize: 18, isMinWidth: true }, options);
155
+ const { defaultTop, defaultLeft, placement, defaultPlacement, teleportTo, marginSize, isMinWidth } = Object.assign({
156
+ teleportTo: false,
157
+ marginSize: 18,
158
+ isMinWidth: true
159
+ }, options);
153
160
  let panelPlacement = 'bottom';
154
161
  let top = '';
155
162
  let bottom = '';
156
- let left = '';
157
- const right = '';
163
+ let left = 0;
158
164
  let minWidth = '';
165
+ let arrowLeft = '';
159
166
  const stys = {};
160
167
  if (panelElem && targetElem) {
161
- const documentElement = document.documentElement;
162
- const bodyElem = document.body;
163
- const targetHeight = targetElem.offsetHeight;
164
- const panelHeight = panelElem.offsetHeight;
165
- const panelWidth = panelElem.offsetWidth;
166
- const panelRect = panelElem.getBoundingClientRect();
167
- const targetRect = targetElem.getBoundingClientRect();
168
- const visibleHeight = documentElement.clientHeight || bodyElem.clientHeight;
169
- const visibleWidth = documentElement.clientWidth || bodyElem.clientWidth;
170
- minWidth = targetElem.offsetWidth;
171
- if (teleportTo) {
172
- left = targetRect.left;
173
- top = targetRect.top + targetHeight;
174
- if (placement === 'top') {
175
- panelPlacement = 'top';
176
- top = targetRect.top - panelHeight;
177
- }
178
- else if (!placement) {
179
- if (defaultPlacement === 'top') {
168
+ const parentEl = panelElem.parentElement;
169
+ const parentWrapperEl = parentEl === document.body ? document.documentElement : parentEl;
170
+ if (parentWrapperEl) {
171
+ const targetWidth = targetElem.offsetWidth;
172
+ const targetHeight = targetElem.offsetHeight;
173
+ const panelHeight = panelElem.offsetHeight;
174
+ const panelWidth = panelElem.offsetWidth;
175
+ const parentWrapperRect = parentWrapperEl.getBoundingClientRect();
176
+ const panelRect = panelElem.getBoundingClientRect();
177
+ const targetRect = targetElem.getBoundingClientRect();
178
+ const visibleHeight = parentWrapperEl.clientHeight;
179
+ const visibleWidth = parentWrapperEl.clientWidth;
180
+ const offsetLeft = parentWrapperRect.left;
181
+ const offsetTop = parentWrapperRect.top;
182
+ const targetLeft = targetRect.left;
183
+ const targetTop = targetRect.top;
184
+ minWidth = targetElem.offsetWidth;
185
+ if (teleportTo) {
186
+ left = defaultLeft || (targetLeft);
187
+ top = defaultTop || (targetTop + targetHeight);
188
+ if (placement === 'top') {
180
189
  panelPlacement = 'top';
181
- top = targetRect.top - panelHeight;
182
- // 如果上面不够放,则向下
183
- if (top < marginSize) {
184
- panelPlacement = 'bottom';
185
- top = targetRect.top + targetHeight;
186
- }
187
- // 如果下面不够放,则向上(优先)
188
- if (top + panelHeight + marginSize > visibleHeight) {
190
+ top = targetTop - panelHeight;
191
+ }
192
+ else if (!placement) {
193
+ if (defaultPlacement === 'top') {
189
194
  panelPlacement = 'top';
190
- top = targetRect.top - panelHeight;
195
+ top = targetTop - panelHeight;
196
+ // 如果上面不够放,则向下
197
+ if (top < marginSize) {
198
+ panelPlacement = 'bottom';
199
+ top = targetTop + targetHeight;
200
+ }
201
+ // 如果下面不够放,则向上(优先)
202
+ if (top + panelHeight + marginSize > visibleHeight) {
203
+ panelPlacement = 'top';
204
+ top = targetTop - panelHeight;
205
+ }
206
+ }
207
+ else {
208
+ // 如果下面不够放,则向上
209
+ if (top + panelHeight + marginSize > visibleHeight) {
210
+ panelPlacement = 'top';
211
+ top = targetTop - panelHeight;
212
+ }
213
+ // 如果上面不够放,则向下(优先)
214
+ if (top < marginSize) {
215
+ panelPlacement = 'bottom';
216
+ top = targetTop + targetHeight;
217
+ }
191
218
  }
192
219
  }
193
- else {
220
+ // 如果溢出右边
221
+ if (left + panelWidth + marginSize > visibleWidth) {
222
+ left -= left + panelWidth + marginSize - visibleWidth;
223
+ }
224
+ // 如果溢出左边
225
+ if (left < marginSize) {
226
+ left = marginSize;
227
+ }
228
+ // 偏移
229
+ top -= offsetTop;
230
+ left -= offsetLeft;
231
+ }
232
+ else {
233
+ if (placement === 'top') {
234
+ panelPlacement = 'top';
235
+ bottom = targetHeight;
236
+ }
237
+ else if (!placement) {
194
238
  // 如果下面不够放,则向上
195
- if (top + panelHeight + marginSize > visibleHeight) {
196
- panelPlacement = 'top';
197
- top = targetRect.top - panelHeight;
198
- }
199
- // 如果上面不够放,则向下(优先)
200
- if (top < marginSize) {
201
- panelPlacement = 'bottom';
202
- top = targetRect.top + targetHeight;
239
+ top = targetHeight;
240
+ if (targetTop + targetHeight + panelHeight + marginSize > visibleHeight) {
241
+ // 如果上面不够放,则向下(优先)
242
+ if (targetTop - targetHeight - panelHeight > marginSize) {
243
+ panelPlacement = 'top';
244
+ top = '';
245
+ bottom = targetHeight;
246
+ }
203
247
  }
204
248
  }
249
+ // 是否超出右侧
250
+ if (panelRect.left + panelRect.width + marginSize > visibleWidth) {
251
+ left = -(panelRect.left + panelRect.width + marginSize - visibleWidth);
252
+ }
205
253
  }
206
- // 如果溢出右边
207
- if (left + panelWidth + marginSize > visibleWidth) {
208
- left -= left + panelWidth + marginSize - visibleWidth;
254
+ if (XEUtils.isNumber(top)) {
255
+ stys.top = toCssUnit(top);
209
256
  }
210
- // 如果溢出左边
211
- if (left < marginSize) {
212
- left = marginSize;
257
+ if (XEUtils.isNumber(bottom)) {
258
+ stys.bottom = toCssUnit(bottom);
213
259
  }
214
- }
215
- else {
216
- if (placement === 'top') {
217
- panelPlacement = 'top';
218
- bottom = targetHeight;
260
+ if (XEUtils.isNumber(left)) {
261
+ stys.left = toCssUnit(left);
219
262
  }
220
- else if (!placement) {
221
- // 如果下面不够放,则向上
222
- top = targetHeight;
223
- if (targetRect.top + targetHeight + panelHeight + marginSize > visibleHeight) {
224
- // 如果上面不够放,则向下(优先)
225
- if (targetRect.top - targetHeight - panelHeight > marginSize) {
226
- panelPlacement = 'top';
227
- top = '';
228
- bottom = targetHeight;
229
- }
263
+ if (isMinWidth && XEUtils.isNumber(minWidth)) {
264
+ stys.minWidth = toCssUnit(minWidth);
265
+ }
266
+ // 箭头
267
+ if (left === targetLeft) {
268
+ if (targetWidth <= panelWidth) {
269
+ arrowLeft = targetWidth / 2;
230
270
  }
231
271
  }
232
- // 是否超出右侧
233
- if (panelRect.left + panelRect.width + marginSize > visibleWidth) {
234
- left = -(panelRect.left + panelRect.width + marginSize - visibleWidth);
272
+ else if (left < targetLeft) {
273
+ if (left + panelWidth > targetLeft + targetWidth) {
274
+ arrowLeft = (targetLeft - left) + targetWidth / 2;
275
+ }
276
+ else {
277
+ arrowLeft = (targetLeft - left) + (panelWidth - (targetLeft - left)) / 2;
278
+ }
235
279
  }
236
280
  }
237
- if (XEUtils.isNumber(top)) {
238
- stys.top = toCssUnit(top);
239
- }
240
- if (XEUtils.isNumber(bottom)) {
241
- stys.bottom = toCssUnit(bottom);
242
- }
243
- if (XEUtils.isNumber(left)) {
244
- stys.left = toCssUnit(left);
245
- }
246
- if (XEUtils.isNumber(right)) {
247
- stys.right = toCssUnit(right);
248
- }
249
- if (isMinWidth && XEUtils.isNumber(minWidth)) {
250
- stys.minWidth = toCssUnit(minWidth);
251
- }
252
281
  }
253
282
  return {
254
283
  top: top || 0,
255
284
  bottom: bottom || 0,
256
285
  left: left || 0,
257
- right: right || 0,
286
+ arrowLeft: arrowLeft || 0,
258
287
  style: stys,
259
288
  placement: panelPlacement
260
289
  };
261
290
  }
262
291
  export function getPopupContainer(appendTo) {
263
292
  const selectElem = appendTo && XEUtils.isFunction(appendTo) ? appendTo({}) : appendTo;
293
+ return selectElem || 'body';
294
+ }
295
+ export function getPopupAppendElement(appendTo) {
296
+ const selectElem = getPopupContainer(appendTo);
264
297
  if (XEUtils.isString(selectElem)) {
265
298
  return document.querySelector(selectElem) || document.body;
266
299
  }
267
- return selectElem || document.body;
300
+ return selectElem;
268
301
  }
package/es/ui/src/log.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { VxeUI } from '@vxe-ui/core';
2
2
  const { log } = VxeUI;
3
- const uiVersion = `ui v${"3.17.7"}`;
3
+ const uiVersion = `ui v${"3.17.8"}`;
4
4
  export function createComponentLog(name) {
5
5
  const tableVersion = VxeUI.tableVersion ? `table v${VxeUI.tableVersion}` : '';
6
6
  const ganttVersion = VxeUI.ganttVersion ? `gantt v${VxeUI.ganttVersion}` : '';
@@ -22,6 +22,6 @@
22
22
  .vxe-button-group.is--vertical > .vxe-button.type--button, .vxe-button-group.is--vertical > .vxe-button--dropdown {
23
23
  margin-right: 0;
24
24
  }
25
- .vxe-button-group.is--vertical > .vxe-button + .vxe-button--dropdown, .vxe-button-group.is--vertical > .vxe-button--dropdown + .vxe-button {
25
+ .vxe-button-group.is--vertical > .vxe-button.type--button + .vxe-button.type--button, .vxe-button-group.is--vertical > .vxe-button.type--button + .vxe-button--dropdown, .vxe-button-group.is--vertical > .vxe-button--dropdown + .vxe-button.type--button, .vxe-button-group.is--vertical > .vxe-button--dropdown + .vxe-button--dropdown {
26
26
  margin-left: 0;
27
27
  }
@@ -1 +1 @@
1
- .vxe-button-group{display:inline-flex}.vxe-button-group.is--vertical{flex-direction:column}.vxe-button-group.is--vertical>.vxe-button--dropdown,.vxe-button-group.is--vertical>.vxe-button.type--button{margin-top:var(--vxe-ui-base-margin-gap-default)}.vxe-button-group.is--vertical>.vxe-button--dropdown.size--medium,.vxe-button-group.is--vertical>.vxe-button.type--button.size--medium{margin-top:var(--vxe-ui-base-margin-gap-medium)}.vxe-button-group.is--vertical>.vxe-button--dropdown.size--small,.vxe-button-group.is--vertical>.vxe-button.type--button.size--small{margin-top:var(--vxe-ui-base-margin-gap-small)}.vxe-button-group.is--vertical>.vxe-button--dropdown.size--mini,.vxe-button-group.is--vertical>.vxe-button.type--button.size--mini{margin-top:var(--vxe-ui-base-margin-gap-mini)}.vxe-button-group.is--vertical>.vxe-button--dropdown:first-of-type,.vxe-button-group.is--vertical>.vxe-button.type--button:first-of-type{margin-top:0}.vxe-button-group.is--vertical>.vxe-button--dropdown,.vxe-button-group.is--vertical>.vxe-button.type--button{margin-right:0}.vxe-button-group.is--vertical>.vxe-button+.vxe-button--dropdown,.vxe-button-group.is--vertical>.vxe-button--dropdown+.vxe-button{margin-left:0}
1
+ .vxe-button-group{display:inline-flex}.vxe-button-group.is--vertical{flex-direction:column}.vxe-button-group.is--vertical>.vxe-button--dropdown,.vxe-button-group.is--vertical>.vxe-button.type--button{margin-top:var(--vxe-ui-base-margin-gap-default)}.vxe-button-group.is--vertical>.vxe-button--dropdown.size--medium,.vxe-button-group.is--vertical>.vxe-button.type--button.size--medium{margin-top:var(--vxe-ui-base-margin-gap-medium)}.vxe-button-group.is--vertical>.vxe-button--dropdown.size--small,.vxe-button-group.is--vertical>.vxe-button.type--button.size--small{margin-top:var(--vxe-ui-base-margin-gap-small)}.vxe-button-group.is--vertical>.vxe-button--dropdown.size--mini,.vxe-button-group.is--vertical>.vxe-button.type--button.size--mini{margin-top:var(--vxe-ui-base-margin-gap-mini)}.vxe-button-group.is--vertical>.vxe-button--dropdown:first-of-type,.vxe-button-group.is--vertical>.vxe-button.type--button:first-of-type{margin-top:0}.vxe-button-group.is--vertical>.vxe-button--dropdown,.vxe-button-group.is--vertical>.vxe-button.type--button{margin-right:0}.vxe-button-group.is--vertical>.vxe-button--dropdown+.vxe-button--dropdown,.vxe-button-group.is--vertical>.vxe-button--dropdown+.vxe-button.type--button,.vxe-button-group.is--vertical>.vxe-button.type--button+.vxe-button--dropdown,.vxe-button-group.is--vertical>.vxe-button.type--button+.vxe-button.type--button{margin-left:0}
@@ -327,7 +327,7 @@ var _default2 = exports.default = /* define-vxe-component start */(0, _comp.defi
327
327
  reactData.initialized = true;
328
328
  if (btnTransfer) {
329
329
  var appendTo = popupOpts.appendTo;
330
- (0, _dom.getPopupContainer)(appendTo).appendChild(panelElem);
330
+ (0, _dom.getPopupAppendElement)(appendTo).appendChild(panelElem);
331
331
  }
332
332
  }
333
333
  internalData.showTime = setTimeout(function () {