vxe-pc-ui 4.17.6 → 4.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 (60) hide show
  1. package/dist/all.esm.js +212 -224
  2. package/dist/style.css +1 -1
  3. package/dist/style.min.css +1 -1
  4. package/es/button-group/style.css +1 -1
  5. package/es/button-group/style.min.css +1 -1
  6. package/es/color-picker/src/color-picker.js +7 -2
  7. package/es/icon/style.css +1 -1
  8. package/es/style.css +1 -1
  9. package/es/style.min.css +1 -1
  10. package/es/tooltip/src/tooltip.js +80 -134
  11. package/es/tree/src/tree.js +2 -2
  12. package/es/ui/index.js +4 -4
  13. package/es/ui/src/dom.js +118 -81
  14. package/es/ui/src/log.js +1 -1
  15. package/es/vxe-button-group/style.css +1 -1
  16. package/es/vxe-button-group/style.min.css +1 -1
  17. package/lib/button-group/style/style.css +1 -1
  18. package/lib/button-group/style/style.min.css +1 -1
  19. package/lib/color-picker/src/color-picker.js +10 -2
  20. package/lib/color-picker/src/color-picker.min.js +1 -1
  21. package/lib/icon/style/style.css +1 -1
  22. package/lib/icon/style/style.min.css +1 -1
  23. package/lib/index.umd.js +220 -227
  24. package/lib/index.umd.min.js +1 -1
  25. package/lib/style.css +1 -1
  26. package/lib/style.min.css +1 -1
  27. package/lib/tooltip/src/tooltip.js +91 -140
  28. package/lib/tooltip/src/tooltip.min.js +1 -1
  29. package/lib/tree/src/tree.js +2 -1
  30. package/lib/tree/src/tree.min.js +1 -1
  31. package/lib/ui/index.js +4 -4
  32. package/lib/ui/index.min.js +1 -1
  33. package/lib/ui/src/dom.js +113 -79
  34. package/lib/ui/src/dom.min.js +1 -1
  35. package/lib/ui/src/log.js +1 -1
  36. package/lib/ui/src/log.min.js +1 -1
  37. package/lib/vxe-button-group/style/style.css +1 -1
  38. package/lib/vxe-button-group/style/style.min.css +1 -1
  39. package/package.json +3 -2
  40. package/packages/color-picker/src/color-picker.ts +7 -2
  41. package/packages/tooltip/src/tooltip.ts +83 -134
  42. package/packages/tree/src/tree.ts +2 -2
  43. package/packages/ui/index.ts +3 -3
  44. package/packages/ui/src/dom.ts +128 -83
  45. package/styles/components/button-group.scss +4 -2
  46. package/types/components/color-picker.d.ts +2 -0
  47. package/types/components/table.d.ts +6 -0
  48. package/types/components/tooltip.d.ts +4 -0
  49. /package/es/icon/{iconfont.1787137259915.ttf → iconfont.1787216141017.ttf} +0 -0
  50. /package/es/icon/{iconfont.1787137259915.woff → iconfont.1787216141017.woff} +0 -0
  51. /package/es/icon/{iconfont.1787137259915.woff2 → iconfont.1787216141017.woff2} +0 -0
  52. /package/es/{iconfont.1787137259915.ttf → iconfont.1787216141017.ttf} +0 -0
  53. /package/es/{iconfont.1787137259915.woff → iconfont.1787216141017.woff} +0 -0
  54. /package/es/{iconfont.1787137259915.woff2 → iconfont.1787216141017.woff2} +0 -0
  55. /package/lib/icon/style/{iconfont.1787137259915.ttf → iconfont.1787216141017.ttf} +0 -0
  56. /package/lib/icon/style/{iconfont.1787137259915.woff → iconfont.1787216141017.woff} +0 -0
  57. /package/lib/icon/style/{iconfont.1787137259915.woff2 → iconfont.1787216141017.woff2} +0 -0
  58. /package/lib/{iconfont.1787137259915.ttf → iconfont.1787216141017.ttf} +0 -0
  59. /package/lib/{iconfont.1787137259915.woff → iconfont.1787216141017.woff} +0 -0
  60. /package/lib/{iconfont.1787137259915.woff2 → iconfont.1787216141017.woff2} +0 -0
@@ -3,7 +3,7 @@ import { defineVxeComponent } from '../../ui/src/comp';
3
3
  import XEUtils from 'xe-utils';
4
4
  import { getConfig, createEvent, useSize } from '../../ui';
5
5
  import { getLastZIndex, nextZIndex } from '../../ui/src/utils';
6
- import { toCssUnit } from '../../ui/src/dom';
6
+ import { getPopupAppendElement, toCssUnit, updatePanelPlacement } from '../../ui/src/dom';
7
7
  import { getSlotVNs } from '../../ui/src/vn';
8
8
  function createReactData() {
9
9
  return {
@@ -106,6 +106,10 @@ export default defineVxeComponent({
106
106
  leaveDelay: {
107
107
  type: Number,
108
108
  default: () => getConfig().tooltip.leaveDelay
109
+ },
110
+ appendTo: {
111
+ type: [String, Function],
112
+ default: () => getConfig().tooltip.appendTo
109
113
  }
110
114
  },
111
115
  emits: [
@@ -153,99 +157,8 @@ export default defineVxeComponent({
153
157
  internalData,
154
158
  getRefMaps: () => refMaps
155
159
  };
156
- let tooltipMethods = {};
157
- const updateTipStyle = () => {
158
- const { isArrow, placement, defaultPlacement } = props;
159
- const { tipTarget: targetElem, tipStore, tipPos } = reactData;
160
- let top = '';
161
- let left = '';
162
- let panelPlacement = 'bottom';
163
- let arrowLeft = '';
164
- const panelElem = refElem.value;
165
- if (panelElem && targetElem) {
166
- const documentElement = document.documentElement;
167
- const bodyElem = document.body;
168
- const targetWidth = targetElem.offsetWidth;
169
- const targetHeight = targetElem.offsetHeight;
170
- const panelHeight = panelElem.offsetHeight;
171
- const panelWidth = panelElem.offsetWidth;
172
- const targetRect = targetElem.getBoundingClientRect();
173
- const visibleHeight = documentElement.clientHeight || bodyElem.clientHeight;
174
- const visibleWidth = documentElement.clientWidth || bodyElem.clientWidth;
175
- const marginSize = 6;
176
- left = targetRect.left;
177
- top = targetRect.top + targetHeight;
178
- if (tipPos && (tipPos.oLeft || tipPos.oTop)) {
179
- if (isArrow) {
180
- left = left + Math.max(8, Math.min(targetWidth - 8, tipPos.oLeft)) - panelWidth / 2;
181
- }
182
- else {
183
- left = tipPos.x + 1;
184
- top = tipPos.y + 1;
185
- }
186
- }
187
- else {
188
- left = targetRect.left + (targetWidth - panelWidth) / 2;
189
- }
190
- if (placement === 'top') {
191
- panelPlacement = 'top';
192
- top = targetRect.top - panelHeight;
193
- }
194
- else if (!placement) {
195
- if (defaultPlacement === 'top') {
196
- panelPlacement = 'top';
197
- top = targetRect.top - panelHeight;
198
- // 如果上面不够放,则向下
199
- if (top < marginSize) {
200
- panelPlacement = 'bottom';
201
- top = targetRect.top + targetHeight;
202
- }
203
- // 如果下面不够放,则向上(优先)
204
- if (top + panelHeight + marginSize > visibleHeight) {
205
- panelPlacement = 'top';
206
- top = targetRect.top - panelHeight;
207
- }
208
- }
209
- else {
210
- // 如果下面不够放,则向上
211
- if (top + panelHeight + marginSize > visibleHeight) {
212
- panelPlacement = 'top';
213
- top = targetRect.top - panelHeight;
214
- }
215
- // 如果上面不够放,则向下(优先)
216
- if (top < marginSize) {
217
- panelPlacement = 'bottom';
218
- top = targetRect.top + targetHeight;
219
- }
220
- }
221
- }
222
- // 如果溢出右边
223
- if (left + panelWidth + marginSize > visibleWidth) {
224
- left -= left + panelWidth + marginSize - visibleWidth;
225
- }
226
- // 如果溢出左边
227
- if (left < marginSize) {
228
- left = marginSize;
229
- }
230
- // 箭头
231
- if (left === targetRect.left) {
232
- if (targetWidth <= panelWidth) {
233
- arrowLeft = targetWidth / 2;
234
- }
235
- }
236
- else if (left < targetRect.left) {
237
- if (left + panelWidth > targetRect.left + targetWidth) {
238
- arrowLeft = (targetRect.left - left) + targetWidth / 2;
239
- }
240
- else {
241
- arrowLeft = (targetRect.left - left) + (panelWidth - (targetRect.left - left)) / 2;
242
- }
243
- }
244
- tipStore.placement = panelPlacement;
245
- tipStore.style.top = `${top}px`;
246
- tipStore.style.left = `${left}px`;
247
- tipStore.arrowStyle.left = `${arrowLeft}px`;
248
- }
160
+ const dispatchEvent = (type, params, evnt) => {
161
+ emit(type, createEvent(evnt, { $tooltip: $xeTooltip }, params));
249
162
  };
250
163
  const updateValue = (value) => {
251
164
  if (value !== reactData.visible) {
@@ -254,14 +167,18 @@ export default defineVxeComponent({
254
167
  emit('update:modelValue', value);
255
168
  }
256
169
  };
257
- const updateZindex = () => {
258
- if (reactData.tipZindex < getLastZIndex()) {
170
+ const updateZIndex = () => {
171
+ const { zIndex } = props;
172
+ if (zIndex) {
173
+ reactData.tipZindex = XEUtils.toNumber(zIndex);
174
+ }
175
+ else if (reactData.tipZindex < getLastZIndex()) {
259
176
  reactData.tipZindex = nextZIndex();
260
177
  }
261
178
  };
262
179
  const clickEvent = () => {
263
180
  if (reactData.visible) {
264
- tooltipMethods.close();
181
+ $xeTooltip.close();
265
182
  }
266
183
  else {
267
184
  handleVisible(reactData.target || getSelectorEl(), props.content);
@@ -276,12 +193,12 @@ export default defineVxeComponent({
276
193
  if (enterable && trigger === 'hover') {
277
194
  setTimeout(() => {
278
195
  if (!reactData.tipActive) {
279
- tooltipMethods.close();
196
+ $xeTooltip.close();
280
197
  }
281
198
  }, leaveDelay);
282
199
  }
283
200
  else {
284
- tooltipMethods.close();
201
+ $xeTooltip.close();
285
202
  }
286
203
  };
287
204
  const wrapperMouseenterEvent = () => {
@@ -293,22 +210,23 @@ export default defineVxeComponent({
293
210
  if (enterable && trigger === 'hover') {
294
211
  setTimeout(() => {
295
212
  if (!reactData.tipActive) {
296
- tooltipMethods.close();
213
+ $xeTooltip.close();
297
214
  }
298
215
  }, leaveDelay);
299
216
  }
300
217
  };
301
218
  const showTip = () => {
219
+ const { appendTo } = props;
302
220
  const { tipStore } = reactData;
303
- const el = refElem.value;
304
- if (el) {
305
- const parentNode = el.parentNode;
221
+ const panelElem = refElem.value;
222
+ if (panelElem) {
223
+ const parentNode = panelElem.parentNode;
306
224
  if (!parentNode) {
307
- document.body.appendChild(el);
225
+ getPopupAppendElement(appendTo).appendChild(panelElem);
308
226
  }
309
227
  }
310
228
  updateValue(true);
311
- updateZindex();
229
+ updateZIndex();
312
230
  tipStore.placement = 'top';
313
231
  tipStore.style = { width: 'auto', left: 0, top: 0, zIndex: props.zIndex || reactData.tipZindex };
314
232
  tipStore.arrowStyle = { left: '50%' };
@@ -369,10 +287,50 @@ export default defineVxeComponent({
369
287
  }
370
288
  return null;
371
289
  };
372
- tooltipMethods = {
373
- dispatchEvent(type, params, evnt) {
374
- emit(type, createEvent(evnt, { $tooltip: $xeTooltip }, params));
375
- },
290
+ const updateTipStyle = () => {
291
+ const { placement, defaultPlacement, isArrow } = props;
292
+ const { tipTarget: targetElem, tipStore, tipPos, tipZindex } = reactData;
293
+ const panelElem = refElem.value;
294
+ if (!targetElem || !panelElem) {
295
+ return;
296
+ }
297
+ const targetRect = targetElem.getBoundingClientRect();
298
+ const targetWidth = targetElem.offsetWidth;
299
+ const targetHeight = targetElem.offsetHeight;
300
+ const panelWidth = panelElem.offsetWidth;
301
+ const targetLeft = targetRect.left;
302
+ const targetTop = targetRect.top;
303
+ // 支持特殊定位逻辑
304
+ let left = targetLeft;
305
+ let top = targetTop + targetHeight;
306
+ if (tipPos && (tipPos.oLeft || tipPos.oTop)) {
307
+ if (isArrow) {
308
+ left = left + Math.max(8, Math.min(targetWidth - 8, tipPos.oLeft)) - panelWidth / 2;
309
+ }
310
+ else {
311
+ left = tipPos.x + 1;
312
+ top = tipPos.y + 1;
313
+ }
314
+ }
315
+ else {
316
+ left = targetLeft + (targetWidth - panelWidth) / 2;
317
+ }
318
+ const ppObj = updatePanelPlacement(targetElem, panelElem, {
319
+ defaultTop: top,
320
+ defaultLeft: left,
321
+ placement: placement,
322
+ defaultPlacement: defaultPlacement,
323
+ teleportTo: true
324
+ });
325
+ const panelStyle = Object.assign(ppObj.style, {
326
+ zIndex: tipZindex
327
+ });
328
+ tipStore.placement = ppObj.placement;
329
+ tipStore.style = panelStyle;
330
+ tipStore.arrowStyle.left = `${ppObj.arrowLeft}px`;
331
+ };
332
+ const tooltipMethods = {
333
+ dispatchEvent,
376
334
  openByEvent(evnt, target, content) {
377
335
  return handleVisible(target || reactData.target || getSelectorEl(), content, evnt);
378
336
  },
@@ -395,20 +353,8 @@ export default defineVxeComponent({
395
353
  return handleVisible(target, content);
396
354
  },
397
355
  updatePlacement() {
398
- const { visible, tipTarget } = reactData;
399
- let el = refElem.value;
400
- if (visible && tipTarget && el) {
401
- updateTipStyle();
402
- }
403
- return nextTick().then(() => {
404
- el = refElem.value;
405
- if (tipTarget && el) {
406
- updateTipStyle();
407
- return nextTick().then(() => {
408
- updateTipStyle();
409
- });
410
- }
411
- });
356
+ updateTipStyle();
357
+ return nextTick().then(updateTipStyle);
412
358
  },
413
359
  isActived() {
414
360
  return reactData.tipActive;
@@ -495,7 +441,7 @@ export default defineVxeComponent({
495
441
  handleVisible(reactData.target || getSelectorEl(), props.content);
496
442
  }
497
443
  else {
498
- tooltipMethods.close();
444
+ $xeTooltip.close();
499
445
  }
500
446
  }
501
447
  reactData.isUpdate = false;
@@ -508,21 +454,21 @@ export default defineVxeComponent({
508
454
  }
509
455
  nextTick(() => {
510
456
  const { trigger, content } = props;
511
- const wrapperElem = refElem.value;
512
- if (wrapperElem) {
513
- const parentNode = wrapperElem.parentNode;
457
+ const panelElem = refElem.value;
458
+ if (panelElem) {
459
+ const parentNode = panelElem.parentNode;
514
460
  if (parentNode) {
515
461
  reactData.tipContent = content;
516
462
  reactData.tipZindex = nextZIndex();
517
- XEUtils.arrayEach(wrapperElem.children, (elem, index) => {
463
+ XEUtils.arrayEach(panelElem.children, (elem, index) => {
518
464
  if (index) {
519
- parentNode.insertBefore(elem, wrapperElem);
465
+ parentNode.insertBefore(elem, panelElem);
520
466
  if (!reactData.target) {
521
467
  reactData.target = elem;
522
468
  }
523
469
  }
524
470
  });
525
- parentNode.removeChild(wrapperElem);
471
+ parentNode.removeChild(panelElem);
526
472
  const { target } = reactData;
527
473
  if (target) {
528
474
  if (trigger === 'hover') {
@@ -542,7 +488,7 @@ export default defineVxeComponent({
542
488
  });
543
489
  onBeforeUnmount(() => {
544
490
  const { target } = reactData;
545
- const wrapperElem = refElem.value;
491
+ const panelElem = refElem.value;
546
492
  if (target) {
547
493
  target.onmouseenter = null;
548
494
  target.onmouseleave = null;
@@ -552,10 +498,10 @@ export default defineVxeComponent({
552
498
  if (contentWrapperfEl) {
553
499
  contentWrapperfEl.removeEventListener('wheel', wheelEvent);
554
500
  }
555
- if (wrapperElem) {
556
- const parentNode = wrapperElem.parentNode;
501
+ if (panelElem) {
502
+ const parentNode = panelElem.parentNode;
557
503
  if (parentNode) {
558
- parentNode.removeChild(wrapperElem);
504
+ parentNode.removeChild(panelElem);
559
505
  }
560
506
  }
561
507
  });
@@ -3123,11 +3123,11 @@ export default defineVxeComponent({
3123
3123
  ]);
3124
3124
  };
3125
3125
  const renderList = (treeList) => {
3126
- const { transform, emptyText } = props;
3126
+ const { loading, transform, emptyText } = props;
3127
3127
  const { treeExpandedMaps } = internalData;
3128
3128
  const childrenField = computeChildrenField.value;
3129
3129
  const emptySlot = slots.empty;
3130
- if (!treeList.length) {
3130
+ if (!loading && !treeList.length) {
3131
3131
  return [
3132
3132
  h('div', {
3133
3133
  class: 'vxe-tree--empty-placeholder'
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 = "4.17.6";
4
+ export const version = "4.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,117 +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
- return appendTo ? ((XEUtils.isFunction(appendTo) ? appendTo({}) : appendTo) || 'body') : 'body';
292
+ const selectElem = appendTo && XEUtils.isFunction(appendTo) ? appendTo({}) : appendTo;
293
+ return selectElem || 'body';
294
+ }
295
+ export function getPopupAppendElement(appendTo) {
296
+ const selectElem = getPopupContainer(appendTo);
297
+ if (XEUtils.isString(selectElem)) {
298
+ return document.querySelector(selectElem) || document.body;
299
+ }
300
+ return selectElem;
264
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${"4.17.6"}`;
3
+ const uiVersion = `ui v${"4.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}
@@ -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}