bkui-vue 2.1.0-dev-beta.13 → 2.1.0-dev-beta.15

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 (37) hide show
  1. package/dist/index.cjs.js +52 -52
  2. package/dist/index.esm.js +11315 -11237
  3. package/dist/index.umd.js +52 -52
  4. package/lib/cascader/cascader.d.ts +12 -2
  5. package/lib/cascader/index.d.ts +21 -6
  6. package/lib/config-provider/config-provider.d.ts +13 -0
  7. package/lib/config-provider/index.d.ts +15 -0
  8. package/lib/config-provider/index.js +6 -1
  9. package/lib/config-provider/token.d.ts +1 -0
  10. package/lib/index.js +1 -1
  11. package/lib/message/messageConstructor.d.ts +1 -1
  12. package/lib/notify/notifyConstructor.d.ts +1 -1
  13. package/lib/overflow-title/components/overflow-title.d.ts +10 -0
  14. package/lib/overflow-title/index.d.ts +15 -0
  15. package/lib/overflow-title/props.d.ts +5 -0
  16. package/lib/pop-confirm/index.d.ts +15 -0
  17. package/lib/pop-confirm/pop-confirm.d.ts +10 -0
  18. package/lib/pop-confirm/props.d.ts +5 -0
  19. package/lib/popover/index.d.ts +18 -0
  20. package/lib/popover/index.js +214 -77
  21. package/lib/popover/popover.d.ts +11 -0
  22. package/lib/popover/props.d.ts +8 -0
  23. package/lib/preset.d.ts +8 -0
  24. package/lib/select/index.d.ts +39 -9
  25. package/lib/select/select.d.ts +18 -3
  26. package/lib/select/selectTagInput.d.ts +1 -1
  27. package/lib/table/components/table-column.d.ts +2 -2
  28. package/lib/table/index.d.ts +2 -2
  29. package/lib/table-column/index.d.ts +3 -3
  30. package/lib/tag-input/index.d.ts +35 -2
  31. package/lib/tag-input/tag-input.d.ts +17 -1
  32. package/lib/tag-input/tag-props.d.ts +5 -0
  33. package/lib/tree/index.d.ts +3 -3
  34. package/lib/tree/tree.d.ts +1 -1
  35. package/lib/virtual-render/index.d.ts +24 -24
  36. package/lib/virtual-render/virtual-render.d.ts +11 -11
  37. package/package.json +1 -1
@@ -45,7 +45,7 @@ const shared_namespaceObject = x({ ["PlacementEnum"]: () => __WEBPACK_EXTERNAL_M
45
45
  ;// CONCATENATED MODULE: external "vue"
46
46
  var external_vue_x = y => { var x = {}; __webpack_require__.d(x, y); return x; }
47
47
  var external_vue_y = x => () => x
48
- const external_vue_namespaceObject = external_vue_x({ ["Fragment"]: () => __WEBPACK_EXTERNAL_MODULE_vue__.Fragment, ["Teleport"]: () => __WEBPACK_EXTERNAL_MODULE_vue__.Teleport, ["computed"]: () => __WEBPACK_EXTERNAL_MODULE_vue__.computed, ["createApp"]: () => __WEBPACK_EXTERNAL_MODULE_vue__.createApp, ["createVNode"]: () => __WEBPACK_EXTERNAL_MODULE_vue__.createVNode, ["defineComponent"]: () => __WEBPACK_EXTERNAL_MODULE_vue__.defineComponent, ["getCurrentScope"]: () => __WEBPACK_EXTERNAL_MODULE_vue__.getCurrentScope, ["h"]: () => __WEBPACK_EXTERNAL_MODULE_vue__.h, ["isVNode"]: () => __WEBPACK_EXTERNAL_MODULE_vue__.isVNode, ["mergeProps"]: () => __WEBPACK_EXTERNAL_MODULE_vue__.mergeProps, ["nextTick"]: () => __WEBPACK_EXTERNAL_MODULE_vue__.nextTick, ["onBeforeUnmount"]: () => __WEBPACK_EXTERNAL_MODULE_vue__.onBeforeUnmount, ["onMounted"]: () => __WEBPACK_EXTERNAL_MODULE_vue__.onMounted, ["onScopeDispose"]: () => __WEBPACK_EXTERNAL_MODULE_vue__.onScopeDispose, ["reactive"]: () => __WEBPACK_EXTERNAL_MODULE_vue__.reactive, ["ref"]: () => __WEBPACK_EXTERNAL_MODULE_vue__.ref, ["shallowReadonly"]: () => __WEBPACK_EXTERNAL_MODULE_vue__.shallowReadonly, ["shallowRef"]: () => __WEBPACK_EXTERNAL_MODULE_vue__.shallowRef, ["toRefs"]: () => __WEBPACK_EXTERNAL_MODULE_vue__.toRefs, ["unref"]: () => __WEBPACK_EXTERNAL_MODULE_vue__.unref, ["useAttrs"]: () => __WEBPACK_EXTERNAL_MODULE_vue__.useAttrs, ["watch"]: () => __WEBPACK_EXTERNAL_MODULE_vue__.watch });
48
+ const external_vue_namespaceObject = external_vue_x({ ["Comment"]: () => __WEBPACK_EXTERNAL_MODULE_vue__.Comment, ["Fragment"]: () => __WEBPACK_EXTERNAL_MODULE_vue__.Fragment, ["Teleport"]: () => __WEBPACK_EXTERNAL_MODULE_vue__.Teleport, ["Text"]: () => __WEBPACK_EXTERNAL_MODULE_vue__.Text, ["cloneVNode"]: () => __WEBPACK_EXTERNAL_MODULE_vue__.cloneVNode, ["computed"]: () => __WEBPACK_EXTERNAL_MODULE_vue__.computed, ["createApp"]: () => __WEBPACK_EXTERNAL_MODULE_vue__.createApp, ["createVNode"]: () => __WEBPACK_EXTERNAL_MODULE_vue__.createVNode, ["defineComponent"]: () => __WEBPACK_EXTERNAL_MODULE_vue__.defineComponent, ["getCurrentScope"]: () => __WEBPACK_EXTERNAL_MODULE_vue__.getCurrentScope, ["h"]: () => __WEBPACK_EXTERNAL_MODULE_vue__.h, ["isVNode"]: () => __WEBPACK_EXTERNAL_MODULE_vue__.isVNode, ["mergeProps"]: () => __WEBPACK_EXTERNAL_MODULE_vue__.mergeProps, ["nextTick"]: () => __WEBPACK_EXTERNAL_MODULE_vue__.nextTick, ["onBeforeUnmount"]: () => __WEBPACK_EXTERNAL_MODULE_vue__.onBeforeUnmount, ["onMounted"]: () => __WEBPACK_EXTERNAL_MODULE_vue__.onMounted, ["onScopeDispose"]: () => __WEBPACK_EXTERNAL_MODULE_vue__.onScopeDispose, ["reactive"]: () => __WEBPACK_EXTERNAL_MODULE_vue__.reactive, ["ref"]: () => __WEBPACK_EXTERNAL_MODULE_vue__.ref, ["shallowReadonly"]: () => __WEBPACK_EXTERNAL_MODULE_vue__.shallowReadonly, ["shallowRef"]: () => __WEBPACK_EXTERNAL_MODULE_vue__.shallowRef, ["toRefs"]: () => __WEBPACK_EXTERNAL_MODULE_vue__.toRefs, ["unref"]: () => __WEBPACK_EXTERNAL_MODULE_vue__.unref, ["useAttrs"]: () => __WEBPACK_EXTERNAL_MODULE_vue__.useAttrs, ["watch"]: () => __WEBPACK_EXTERNAL_MODULE_vue__.watch });
49
49
  ;// CONCATENATED MODULE: ../../node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js
50
50
  function _arrayLikeToArray(r, a) {
51
51
  (null == a || a > r.length) && (a = r.length);
@@ -134,7 +134,7 @@ function _defineProperty(e, r, t) {
134
134
  ;// CONCATENATED MODULE: external "../config-provider"
135
135
  var config_provider_x = y => { var x = {}; __webpack_require__.d(x, y); return x; }
136
136
  var config_provider_y = x => () => x
137
- const config_provider_namespaceObject = config_provider_x({ ["usePrefix"]: () => __WEBPACK_EXTERNAL_MODULE_bkui_vue_lib_config_provider_fe8577a3__.usePrefix });
137
+ const config_provider_namespaceObject = config_provider_x({ ["useGlobalConfig"]: () => __WEBPACK_EXTERNAL_MODULE_bkui_vue_lib_config_provider_fe8577a3__.useGlobalConfig, ["usePrefix"]: () => __WEBPACK_EXTERNAL_MODULE_bkui_vue_lib_config_provider_fe8577a3__.usePrefix });
138
138
  ;// CONCATENATED MODULE: ../../node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js
139
139
  function _arrayWithHoles(r) {
140
140
  if (Array.isArray(r)) return r;
@@ -3190,6 +3190,10 @@ var PopoverProps = {
3190
3190
  * 配置自定义样式类名,传入的类会被加在 Reference 外部的 div 上
3191
3191
  */
3192
3192
  referenceCls: shared_namespaceObject.PropTypes.string.def(''),
3193
+ /**
3194
+ * 是否渲染默认插槽最外层 reference span;仅 true 时主动追加 span
3195
+ */
3196
+ renderReferenceWrapper: shared_namespaceObject.PropTypes.bool.def(undefined),
3193
3197
  /**
3194
3198
  * 点击 Reference 占位区是否忽略收起 popover
3195
3199
  */
@@ -3251,8 +3255,7 @@ function _isSlot(s) {
3251
3255
  var __bkPopoverIdSeed = 0;
3252
3256
  var __bkPopoverRegistry = new Map();
3253
3257
  var findPopoverIdInEventPath = function findPopoverIdInEventPath(event) {
3254
- var anyEvent = event;
3255
- var path = typeof anyEvent.composedPath === 'function' ? anyEvent.composedPath() : [];
3258
+ var path = typeof event.composedPath === 'function' ? event.composedPath() : [];
3256
3259
  var _iterator = _createForOfIteratorHelper(path),
3257
3260
  _step;
3258
3261
  try {
@@ -3313,6 +3316,7 @@ var EMIT_EVENTS = {
3313
3316
  var attrs = (0,external_vue_namespaceObject.useAttrs)();
3314
3317
  var _usePrefix = (0,config_provider_namespaceObject.usePrefix)(),
3315
3318
  resolveClassName = _usePrefix.resolveClassName;
3319
+ var globalConfig = (0,config_provider_namespaceObject.useGlobalConfig)();
3316
3320
  // 当前实例 id(用于注册表与事件路径识别)
3317
3321
  var popoverId = "bk-popover-".concat(++__bkPopoverIdSeed);
3318
3322
  // 元素引用
@@ -3357,7 +3361,15 @@ var EMIT_EVENTS = {
3357
3361
  componentEventDelay = _toRefs.componentEventDelay,
3358
3362
  reference = _toRefs.reference,
3359
3363
  target = _toRefs.target,
3360
- floatingReference = _toRefs.floatingReference;
3364
+ floatingReference = _toRefs.floatingReference,
3365
+ renderReferenceWrapper = _toRefs.renderReferenceWrapper;
3366
+ var shouldRenderReferenceWrapper = (0,external_vue_namespaceObject.computed)(function () {
3367
+ var _renderReferenceWrapp;
3368
+ return ((_renderReferenceWrapp = renderReferenceWrapper.value) !== null && _renderReferenceWrapp !== void 0 ? _renderReferenceWrapp : globalConfig.value.popoverRenderReferenceWrapper) === true;
3369
+ });
3370
+ var setReferenceRef = function setReferenceRef(refValue) {
3371
+ referenceWrapperRef.value = refValue;
3372
+ };
3361
3373
  // 判断是否为虚拟元素
3362
3374
  var isVirtualElement = function isVirtualElement(el) {
3363
3375
  return el !== null && _typeof(el) === 'object' && 'getBoundingClientRect' in el && typeof el.getBoundingClientRect === 'function';
@@ -3377,6 +3389,47 @@ var EMIT_EVENTS = {
3377
3389
  }
3378
3390
  return null;
3379
3391
  };
3392
+ var _resolveElementFromVNode = function resolveElementFromVNode(node) {
3393
+ var _node$component;
3394
+ if (!node) return null;
3395
+ if (node.el instanceof HTMLElement) return node.el;
3396
+ var subTree = (_node$component = node.component) === null || _node$component === void 0 ? void 0 : _node$component.subTree;
3397
+ if (subTree) {
3398
+ var element = _resolveElementFromVNode(subTree);
3399
+ if (element) return element;
3400
+ }
3401
+ if (Array.isArray(node.children)) {
3402
+ var _iterator2 = _createForOfIteratorHelper(node.children),
3403
+ _step2;
3404
+ try {
3405
+ for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
3406
+ var child = _step2.value;
3407
+ if (!(0,external_vue_namespaceObject.isVNode)(child)) continue;
3408
+ var _element = _resolveElementFromVNode(child);
3409
+ if (_element) return _element;
3410
+ }
3411
+ } catch (err) {
3412
+ _iterator2.e(err);
3413
+ } finally {
3414
+ _iterator2.f();
3415
+ }
3416
+ }
3417
+ return null;
3418
+ };
3419
+ var resolveReferenceRefElement = function resolveReferenceRefElement(refValue) {
3420
+ var _instance$$;
3421
+ if (refValue instanceof HTMLElement) {
3422
+ return refValue;
3423
+ }
3424
+ if (!refValue || _typeof(refValue) !== 'object') {
3425
+ return null;
3426
+ }
3427
+ var instance = refValue;
3428
+ if (instance.$el instanceof HTMLElement) {
3429
+ return instance.$el;
3430
+ }
3431
+ return _resolveElementFromVNode((_instance$$ = instance.$) === null || _instance$$ === void 0 ? void 0 : _instance$$.subTree);
3432
+ };
3380
3433
  // 是否使用自定义 reference
3381
3434
  var useCustomReference = (0,external_vue_namespaceObject.computed)(function () {
3382
3435
  return !!reference.value || !!target.value;
@@ -3425,30 +3478,11 @@ var EMIT_EVENTS = {
3425
3478
  /**
3426
3479
  * 解析默认 slot reference 元素
3427
3480
  *
3428
- * referenceWrapperRef 使用 display: contents,自身无布局尺寸,
3429
- * 因此需要从子元素中找到实际的 reference 元素。
3430
- *
3431
- * 策略:优先使用第一个元素子节点作为 reference;否则向下寻找第一个具有可见尺寸的 HTMLElement。
3481
+ * referenceWrapperRef wrapper 开启时指向外层 span,
3482
+ * wrapper 关闭时指向默认 slot 的实际元素。
3432
3483
  */
3433
3484
  var resolveDefaultReferenceElement = function resolveDefaultReferenceElement() {
3434
- var wrapper = referenceWrapperRef.value;
3435
- if (!wrapper) return null;
3436
- // display: contents 的元素自身尺寸为 0,直接查找子元素
3437
- var firstChild = wrapper.firstElementChild;
3438
- if (firstChild instanceof HTMLElement) {
3439
- return firstChild;
3440
- }
3441
- var descendants = wrapper.querySelectorAll('*');
3442
- for (var _i = 0, _Array$from = Array.from(descendants); _i < _Array$from.length; _i++) {
3443
- var node = _Array$from[_i];
3444
- if (!(node instanceof HTMLElement)) continue;
3445
- var rect = node.getBoundingClientRect();
3446
- if (rect.width > 0 || rect.height > 0) {
3447
- return node;
3448
- }
3449
- }
3450
- // 兜底仍返回 wrapper,保证类型与行为一致
3451
- return wrapper;
3485
+ return resolveReferenceRefElement(referenceWrapperRef.value);
3452
3486
  };
3453
3487
  // 延迟控制
3454
3488
  var delayOptions = (0,external_vue_namespaceObject.computed)(function () {
@@ -3539,8 +3573,8 @@ var EMIT_EVENTS = {
3539
3573
  return target.value;
3540
3574
  }, function () {
3541
3575
  return floatingReference.value;
3542
- }], function () {
3543
- return (0,external_vue_namespaceObject.nextTick)(updateFloatingReference);
3576
+ }, shouldRenderReferenceWrapper], function () {
3577
+ (0,external_vue_namespaceObject.nextTick)(updateFloatingReference);
3544
3578
  });
3545
3579
  (0,external_vue_namespaceObject.watch)(isOpen, function (val) {
3546
3580
  if (val) {
@@ -3576,6 +3610,42 @@ var EMIT_EVENTS = {
3576
3610
  }),
3577
3611
  referenceListeners = _useTrigger.referenceListeners,
3578
3612
  floatingListeners = _useTrigger.floatingListeners;
3613
+ var unbindNoWrapperReferenceEvents = [];
3614
+ var clearNoWrapperReferenceEvents = function clearNoWrapperReferenceEvents() {
3615
+ unbindNoWrapperReferenceEvents.forEach(function (unbind) {
3616
+ return unbind();
3617
+ });
3618
+ unbindNoWrapperReferenceEvents = [];
3619
+ };
3620
+ var resolveEventBinding = function resolveEventBinding(eventName) {
3621
+ var rawName = eventName.replace(/^on/, '');
3622
+ var capture = rawName.endsWith('Capture');
3623
+ return {
3624
+ capture: capture,
3625
+ name: rawName.replace(/Capture$/, '').toLowerCase()
3626
+ };
3627
+ };
3628
+ var bindNoWrapperReferenceEvents = function bindNoWrapperReferenceEvents() {
3629
+ clearNoWrapperReferenceEvents();
3630
+ if (shouldRenderReferenceWrapper.value) return;
3631
+ var referenceEl = resolveReferenceRefElement(referenceWrapperRef.value);
3632
+ if (!referenceEl) return;
3633
+ Object.keys(referenceListeners.value).forEach(function (eventName) {
3634
+ var listener = referenceListeners.value[eventName];
3635
+ var eventBinding = resolveEventBinding(eventName);
3636
+ referenceEl.addEventListener(eventBinding.name, listener, eventBinding.capture);
3637
+ unbindNoWrapperReferenceEvents.push(function () {
3638
+ referenceEl.removeEventListener(eventBinding.name, listener, eventBinding.capture);
3639
+ });
3640
+ });
3641
+ };
3642
+ (0,external_vue_namespaceObject.watch)([shouldRenderReferenceWrapper, referenceWrapperRef, function () {
3643
+ return referenceListeners.value;
3644
+ }], function () {
3645
+ (0,external_vue_namespaceObject.nextTick)(bindNoWrapperReferenceEvents);
3646
+ }, {
3647
+ immediate: true
3648
+ });
3579
3649
  // hover 模式:把“子弹层”视为内容区的延伸(避免 PopConfirm 内 Select 下拉导致父弹层收起)
3580
3650
  var hoverTrackMoveHandler = null;
3581
3651
  var stopHoverTrack = function stopHoverTrack() {
@@ -3584,9 +3654,10 @@ var EMIT_EVENTS = {
3584
3654
  hoverTrackMoveHandler = null;
3585
3655
  };
3586
3656
  var isTargetInSelfOrChildren = function isTargetInSelfOrChildren(targetEl) {
3587
- var _referenceWrapperRef$, _floatingRef$value;
3657
+ var _floatingRef$value;
3588
3658
  var actualRef = floatingReferenceRef.value;
3589
- if (actualRef instanceof HTMLElement && actualRef.contains(targetEl) || (_referenceWrapperRef$ = referenceWrapperRef.value) !== null && _referenceWrapperRef$ !== void 0 && _referenceWrapperRef$.contains(targetEl)) {
3659
+ var referenceWrapperEl = shouldRenderReferenceWrapper.value ? resolveReferenceRefElement(referenceWrapperRef.value) : null;
3660
+ if (actualRef instanceof HTMLElement && actualRef.contains(targetEl) || referenceWrapperEl instanceof HTMLElement && referenceWrapperEl.contains(targetEl)) {
3590
3661
  return true;
3591
3662
  }
3592
3663
  if ((_floatingRef$value = floatingRef.value) !== null && _floatingRef$value !== void 0 && _floatingRef$value.contains(targetEl)) {
@@ -3698,9 +3769,42 @@ var EMIT_EVENTS = {
3698
3769
  var dataTheme = (0,external_vue_namespaceObject.computed)(function () {
3699
3770
  return theme.value;
3700
3771
  });
3772
+ // 兼容旧版自定义 theme 标记:theme="light bk-table-settings"
3773
+ // 除了追加 bk-table-settings class 外,还需要生成 data-bk-table-settings-theme="true",
3774
+ // table settings 等组件的弹层样式依赖该属性选择器。
3775
+ var extraThemeAttrs = (0,external_vue_namespaceObject.computed)(function () {
3776
+ var _parseTheme2 = parseTheme(theme.value),
3777
+ extraClasses = _parseTheme2.extraClasses;
3778
+ return extraClasses.reduce(function (attrs, className) {
3779
+ attrs["data-".concat(className, "-theme")] = 'true';
3780
+ return attrs;
3781
+ }, {});
3782
+ });
3783
+ var _filterEmptyNodes = function filterEmptyNodes() {
3784
+ var children = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
3785
+ var nodes = [];
3786
+ children.forEach(function (child) {
3787
+ if (!child) {
3788
+ return;
3789
+ }
3790
+ if (Array.isArray(child)) {
3791
+ nodes.push.apply(nodes, _toConsumableArray(_filterEmptyNodes(child)));
3792
+ return;
3793
+ }
3794
+ if (child.type === external_vue_namespaceObject.Fragment && Array.isArray(child.children)) {
3795
+ nodes.push.apply(nodes, _toConsumableArray(_filterEmptyNodes(child.children)));
3796
+ return;
3797
+ }
3798
+ nodes.push(child);
3799
+ });
3800
+ return nodes.filter(function (child) {
3801
+ var _child$children;
3802
+ return !(child && (child.type === external_vue_namespaceObject.Comment || child.type === external_vue_namespaceObject.Fragment && Array.isArray(child.children) && child.children.length === 0 || child.type === external_vue_namespaceObject.Text && "".concat((_child$children = child.children) !== null && _child$children !== void 0 ? _child$children : '').trim() === ''));
3803
+ });
3804
+ };
3701
3805
  // 处理 clickoutside
3702
3806
  var handleClickOutside = function handleClickOutside(event) {
3703
- var _referenceWrapperRef$2, _floatingRef$value2;
3807
+ var _floatingRef$value2;
3704
3808
  if (disabled.value || always.value) {
3705
3809
  return;
3706
3810
  }
@@ -3711,7 +3815,8 @@ var EMIT_EVENTS = {
3711
3815
  var target = event.target;
3712
3816
  // 点击在 reference 内(包括自定义 reference 和默认 reference)
3713
3817
  var actualRef = floatingReferenceRef.value;
3714
- var isInReference = actualRef instanceof HTMLElement && actualRef.contains(target) || ((_referenceWrapperRef$2 = referenceWrapperRef.value) === null || _referenceWrapperRef$2 === void 0 ? void 0 : _referenceWrapperRef$2.contains(target));
3818
+ var referenceWrapperEl = shouldRenderReferenceWrapper.value ? resolveReferenceRefElement(referenceWrapperRef.value) : null;
3819
+ var isInReference = actualRef instanceof HTMLElement && actualRef.contains(target) || referenceWrapperEl instanceof HTMLElement && referenceWrapperEl.contains(target);
3715
3820
  if (isInReference) {
3716
3821
  // 对于 click 和 hover 模式,点击 reference 的行为由 referenceListeners 处理
3717
3822
  if (trigger.value === 'click' || trigger.value === 'hover') {
@@ -3781,38 +3886,35 @@ var EMIT_EVENTS = {
3781
3886
  }
3782
3887
  return isOpen.value;
3783
3888
  });
3784
- // 为自定义 reference 元素添加事件监听(仅对 HTMLElement 有效,虚拟元素不绑定事件)
3785
- var bindCustomReferenceEvents = function bindCustomReferenceEvents() {
3786
- if (!useCustomReference.value || isVirtualReferenceMode.value) return;
3787
- var customRef = getActualReferenceElement();
3788
- if (!customRef) return;
3789
- var listeners = referenceListeners.value;
3790
- Object.keys(listeners).forEach(function (eventName) {
3791
- // 将 onMouseenter 转换为 mouseenter
3792
- var nativeEventName = eventName.replace(/^on/, '').toLowerCase();
3793
- customRef.addEventListener(nativeEventName, listeners[eventName]);
3889
+ var unbindCustomReferenceEvents = [];
3890
+ var clearCustomReferenceEvents = function clearCustomReferenceEvents() {
3891
+ unbindCustomReferenceEvents.forEach(function (unbind) {
3892
+ return unbind();
3794
3893
  });
3894
+ unbindCustomReferenceEvents = [];
3795
3895
  };
3796
- var unbindCustomReferenceEvents = function unbindCustomReferenceEvents() {
3896
+ var bindCustomReferenceEvents = function bindCustomReferenceEvents() {
3897
+ clearCustomReferenceEvents();
3797
3898
  if (!useCustomReference.value || isVirtualReferenceMode.value) return;
3798
3899
  var customRef = getActualReferenceElement();
3799
3900
  if (!customRef) return;
3800
- var listeners = referenceListeners.value;
3801
- Object.keys(listeners).forEach(function (eventName) {
3802
- var nativeEventName = eventName.replace(/^on/, '').toLowerCase();
3803
- customRef.removeEventListener(nativeEventName, listeners[eventName]);
3901
+ Object.keys(referenceListeners.value).forEach(function (eventName) {
3902
+ var listener = referenceListeners.value[eventName];
3903
+ var eventBinding = resolveEventBinding(eventName);
3904
+ customRef.addEventListener(eventBinding.name, listener, eventBinding.capture);
3905
+ unbindCustomReferenceEvents.push(function () {
3906
+ customRef.removeEventListener(eventBinding.name, listener, eventBinding.capture);
3907
+ });
3804
3908
  });
3805
3909
  };
3806
- // 监听自定义 reference 变化
3807
3910
  (0,external_vue_namespaceObject.watch)([function () {
3808
3911
  return reference.value;
3809
3912
  }, function () {
3810
3913
  return target.value;
3914
+ }, function () {
3915
+ return referenceListeners.value;
3811
3916
  }], function () {
3812
- unbindCustomReferenceEvents();
3813
- (0,external_vue_namespaceObject.nextTick)(function () {
3814
- bindCustomReferenceEvents();
3815
- });
3917
+ (0,external_vue_namespaceObject.nextTick)(bindCustomReferenceEvents);
3816
3918
  });
3817
3919
  // 挂载时添加 clickoutside 监听
3818
3920
  (0,external_vue_namespaceObject.onMounted)(function () {
@@ -3829,7 +3931,8 @@ var EMIT_EVENTS = {
3829
3931
  // 卸载时清理
3830
3932
  (0,external_vue_namespaceObject.onBeforeUnmount)(function () {
3831
3933
  document.removeEventListener('click', handleClickOutside, true);
3832
- unbindCustomReferenceEvents();
3934
+ clearCustomReferenceEvents();
3935
+ clearNoWrapperReferenceEvents();
3833
3936
  clearTimers();
3834
3937
  if (eventDelayTimer) {
3835
3938
  clearTimeout(eventDelayTimer);
@@ -3848,7 +3951,7 @@ var EMIT_EVENTS = {
3848
3951
  id: popoverId,
3849
3952
  floatingEl: floatingRef.value,
3850
3953
  referenceEl: referenceEl,
3851
- referenceWrapperEl: referenceWrapperRef.value
3954
+ referenceWrapperEl: shouldRenderReferenceWrapper.value ? resolveReferenceRefElement(referenceWrapperRef.value) : null
3852
3955
  });
3853
3956
  };
3854
3957
  (0,external_vue_namespaceObject.watch)([floatingRef, floatingReferenceRef, referenceWrapperRef], function () {
@@ -3900,7 +4003,7 @@ var EMIT_EVENTS = {
3900
4003
  return boundaryVal instanceof HTMLElement ? boundaryVal : 'body';
3901
4004
  });
3902
4005
  return function () {
3903
- var _slots$arrow, _slots$content, _slots$content2, _slots$default;
4006
+ var _slots$arrow, _slots$content, _slots$content2, _slots$default, _slots$default2;
3904
4007
  // 渲染 floating content
3905
4008
  var floatingNode = shouldRenderContent.value ? (0,external_vue_namespaceObject.createVNode)("div", (0,external_vue_namespaceObject.mergeProps)({
3906
4009
  "ref": floatingRef,
@@ -3908,9 +4011,10 @@ var EMIT_EVENTS = {
3908
4011
  pointerEvents: contentPointerEvents.value
3909
4012
  }),
3910
4013
  "class": contentClass.value,
3911
- "data-bk-popover-id": popoverId,
3912
- "data-theme": dataTheme.value,
3913
4014
  "data-arrow": arrowSide.value,
4015
+ "data-bk-popover-id": popoverId,
4016
+ "data-theme": dataTheme.value
4017
+ }, extraThemeAttrs.value, {
3914
4018
  "onClick": handleClickContent
3915
4019
  }, guardedFloatingListeners.value), [arrow.value && (0,external_vue_namespaceObject.createVNode)("div", {
3916
4020
  "ref": arrowRef,
@@ -3918,8 +4022,7 @@ var EMIT_EVENTS = {
3918
4022
  "class": resolveClassName('pop2-arrow'),
3919
4023
  "data-arrow": arrowSide.value
3920
4024
  }, [(_slots$arrow = slots.arrow) === null || _slots$arrow === void 0 ? void 0 : _slots$arrow.call(slots)]), (_slots$content = (_slots$content2 = slots.content) === null || _slots$content2 === void 0 ? void 0 : _slots$content2.call(slots)) !== null && _slots$content !== void 0 ? _slots$content : renderContent()]) : null;
3921
- // 如果使用自定义 reference(虚拟元素或外部 HTMLElement),只渲染 Teleport 内容
3922
- if (useCustomReference.value) {
4025
+ var renderTeleport = function renderTeleport() {
3923
4026
  return (0,external_vue_namespaceObject.createVNode)(external_vue_namespaceObject.Teleport, {
3924
4027
  "disabled": disableTeleport.value,
3925
4028
  "to": teleportTo.value
@@ -3928,25 +4031,59 @@ var EMIT_EVENTS = {
3928
4031
  return [floatingNode];
3929
4032
  }
3930
4033
  });
4034
+ };
4035
+ // 如果使用自定义 reference(虚拟元素或外部 HTMLElement),只渲染 Teleport 内容
4036
+ if (useCustomReference.value) {
4037
+ return renderTeleport();
3931
4038
  }
3932
- // 默认情况:渲染 reference floating content
3933
- // 使用 display: contents 避免影响内部元素布局
3934
- return (0,external_vue_namespaceObject.createVNode)(external_vue_namespaceObject.Fragment, null, [(0,external_vue_namespaceObject.createVNode)("span", (0,external_vue_namespaceObject.mergeProps)({
3935
- "ref": referenceWrapperRef,
3936
- "style": {
3937
- display: 'contents',
3938
- width: '100%',
3939
- height: '100%'
3940
- },
3941
- "class": [referenceCls.value, attrs["class"]]
3942
- }, referenceListeners.value), [(_slots$default = slots["default"]) === null || _slots$default === void 0 ? void 0 : _slots$default.call(slots)]), (0,external_vue_namespaceObject.createVNode)(external_vue_namespaceObject.Teleport, {
3943
- "disabled": disableTeleport.value,
3944
- "to": teleportTo.value
3945
- }, _isSlot(floatingNode) ? floatingNode : {
3946
- "default": function _default() {
3947
- return [floatingNode];
4039
+ var defaultSlotNodes = (_slots$default = (_slots$default2 = slots["default"]) === null || _slots$default2 === void 0 ? void 0 : _slots$default2.call(slots)) !== null && _slots$default !== void 0 ? _slots$default : [];
4040
+ var referenceNodes = _filterEmptyNodes(defaultSlotNodes);
4041
+ if (shouldRenderReferenceWrapper.value) {
4042
+ return (0,external_vue_namespaceObject.createVNode)(external_vue_namespaceObject.Fragment, null, [(0,external_vue_namespaceObject.createVNode)("span", (0,external_vue_namespaceObject.mergeProps)({
4043
+ "ref": referenceWrapperRef,
4044
+ "style": {
4045
+ display: 'inline-block'
4046
+ },
4047
+ "class": [referenceCls.value, attrs["class"]]
4048
+ }, referenceListeners.value), [defaultSlotNodes]), renderTeleport()]);
4049
+ }
4050
+ var renderReferenceNode = function renderReferenceNode() {
4051
+ if (!referenceNodes.length) {
4052
+ return null;
4053
+ }
4054
+ // 默认无包裹模式:保持 Fragment 根结构,不主动追加任何具体 DOM。
4055
+ // 为了兼容定位与触发事件,尽可能把 ref/class 透传到第一个非文本 reference 节点。
4056
+ // 但纯文本 slot 没有可承载 ref 和监听器的 DOM 节点,需要生成一个 span 作为触发元素。
4057
+ var isTextReference = referenceNodes.every(function (node) {
4058
+ return (0,external_vue_namespaceObject.isVNode)(node) && node.type === external_vue_namespaceObject.Text;
4059
+ });
4060
+ if (isTextReference) {
4061
+ return (0,external_vue_namespaceObject.createVNode)("span", {
4062
+ "ref": referenceWrapperRef,
4063
+ "style": {
4064
+ display: 'inline-block'
4065
+ },
4066
+ "class": [referenceCls.value, attrs["class"]]
4067
+ }, [referenceNodes]);
4068
+ }
4069
+ var referenceNodeIndex = referenceNodes.findIndex(function (node) {
4070
+ return (0,external_vue_namespaceObject.isVNode)(node) && node.type !== external_vue_namespaceObject.Text && node.type !== external_vue_namespaceObject.Comment;
4071
+ });
4072
+ if (referenceNodeIndex < 0) {
4073
+ return referenceNodes;
3948
4074
  }
3949
- })]);
4075
+ return referenceNodes.map(function (node, index) {
4076
+ if (index !== referenceNodeIndex || !(0,external_vue_namespaceObject.isVNode)(node)) {
4077
+ return node;
4078
+ }
4079
+ return (0,external_vue_namespaceObject.cloneVNode)(node, {
4080
+ ref: setReferenceRef,
4081
+ "class": [referenceCls.value, attrs["class"]]
4082
+ }, true);
4083
+ });
4084
+ };
4085
+ // 默认情况:渲染 reference 和 floating content
4086
+ return (0,external_vue_namespaceObject.createVNode)(external_vue_namespaceObject.Fragment, null, [renderReferenceNode(), renderTeleport()]);
3950
4087
  };
3951
4088
  }
3952
4089
  }));
@@ -131,6 +131,11 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
131
131
  } & {
132
132
  default: string;
133
133
  };
134
+ renderReferenceWrapper: import("vue-types").VueTypeValidableDef<boolean> & {
135
+ default: boolean;
136
+ } & {
137
+ default: boolean;
138
+ };
134
139
  hideIgnoreReference: import("vue-types").VueTypeValidableDef<boolean> & {
135
140
  default: boolean;
136
141
  } & {
@@ -279,6 +284,11 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
279
284
  } & {
280
285
  default: string;
281
286
  };
287
+ renderReferenceWrapper: import("vue-types").VueTypeValidableDef<boolean> & {
288
+ default: boolean;
289
+ } & {
290
+ default: boolean;
291
+ };
282
292
  hideIgnoreReference: import("vue-types").VueTypeValidableDef<boolean> & {
283
293
  default: boolean;
284
294
  } & {
@@ -335,6 +345,7 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
335
345
  popoverDelay: number | number[];
336
346
  extCls: string;
337
347
  referenceCls: string;
348
+ renderReferenceWrapper: boolean;
338
349
  hideIgnoreReference: boolean;
339
350
  componentEventDelay: number;
340
351
  forceClickoutside: boolean;
@@ -180,6 +180,14 @@ export declare const PopoverProps: {
180
180
  } & {
181
181
  default: string;
182
182
  };
183
+ /**
184
+ * 是否渲染默认插槽最外层 reference span;仅 true 时主动追加 span
185
+ */
186
+ renderReferenceWrapper: import("vue-types").VueTypeValidableDef<boolean> & {
187
+ default: boolean;
188
+ } & {
189
+ default: boolean;
190
+ };
183
191
  /**
184
192
  * 点击 Reference 占位区是否忽略收起 popover
185
193
  */
package/lib/preset.d.ts CHANGED
@@ -139,6 +139,10 @@ declare const _default: {
139
139
  };
140
140
  }>;
141
141
  };
142
+ popoverRenderReferenceWrapper: {
143
+ type: import("vue").PropType<boolean>;
144
+ default: any;
145
+ };
142
146
  prefix: {
143
147
  type: StringConstructor;
144
148
  default: string;
@@ -283,6 +287,10 @@ declare const _default: {
283
287
  };
284
288
  }>;
285
289
  };
290
+ popoverRenderReferenceWrapper: {
291
+ type: import("vue").PropType<boolean>;
292
+ default: any;
293
+ };
286
294
  prefix: {
287
295
  type: StringConstructor;
288
296
  default: string;