bkui-vue 2.1.0-dev-beta.14 → 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.
package/lib/index.js CHANGED
@@ -3,5 +3,5 @@ export * from './hooks';
3
3
  export { default } from './preset';
4
4
  export * from './config-provider';
5
5
  export * from './directives';
6
- export const version = "2.1.0-dev-beta.14";
6
+ export const version = "2.1.0-dev-beta.15";
7
7
  window.__bkui_vue_version__ = version;
@@ -3191,7 +3191,7 @@ var PopoverProps = {
3191
3191
  */
3192
3192
  referenceCls: shared_namespaceObject.PropTypes.string.def(''),
3193
3193
  /**
3194
- * 是否渲染默认插槽最外层 reference span;false 时不主动追加 span
3194
+ * 是否渲染默认插槽最外层 reference span;仅 true 时主动追加 span
3195
3195
  */
3196
3196
  renderReferenceWrapper: shared_namespaceObject.PropTypes.bool.def(undefined),
3197
3197
  /**
@@ -3363,15 +3363,9 @@ var EMIT_EVENTS = {
3363
3363
  target = _toRefs.target,
3364
3364
  floatingReference = _toRefs.floatingReference,
3365
3365
  renderReferenceWrapper = _toRefs.renderReferenceWrapper;
3366
- var isReferenceWrapperDisabled = (0,external_vue_namespaceObject.computed)(function () {
3367
- if (renderReferenceWrapper.value !== undefined) {
3368
- return renderReferenceWrapper.value === false;
3369
- }
3370
- var globalValue = globalConfig.value.popoverRenderReferenceWrapper;
3371
- if (globalValue !== undefined) {
3372
- return globalValue === false;
3373
- }
3374
- return false;
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;
3375
3369
  });
3376
3370
  var setReferenceRef = function setReferenceRef(refValue) {
3377
3371
  referenceWrapperRef.value = refValue;
@@ -3484,33 +3478,11 @@ var EMIT_EVENTS = {
3484
3478
  /**
3485
3479
  * 解析默认 slot reference 元素
3486
3480
  *
3487
- * referenceWrapperRef 使用 display: contents,自身无布局尺寸,
3488
- * 因此需要从子元素中找到实际的 reference 元素。
3489
- *
3490
- * 策略:优先使用第一个元素子节点作为 reference;否则向下寻找第一个具有可见尺寸的 HTMLElement。
3481
+ * referenceWrapperRef 在 wrapper 开启时指向外层 span,
3482
+ * wrapper 关闭时指向默认 slot 的实际元素。
3491
3483
  */
3492
3484
  var resolveDefaultReferenceElement = function resolveDefaultReferenceElement() {
3493
- var wrapper = resolveReferenceRefElement(referenceWrapperRef.value);
3494
- if (!wrapper) return null;
3495
- if (isReferenceWrapperDisabled.value) {
3496
- return wrapper;
3497
- }
3498
- // display: contents 的元素自身尺寸为 0,直接查找子元素
3499
- var firstChild = wrapper.firstElementChild;
3500
- if (firstChild instanceof HTMLElement) {
3501
- return firstChild;
3502
- }
3503
- var descendants = wrapper.querySelectorAll('*');
3504
- for (var _i = 0, _Array$from = Array.from(descendants); _i < _Array$from.length; _i++) {
3505
- var node = _Array$from[_i];
3506
- if (!(node instanceof HTMLElement)) continue;
3507
- var rect = node.getBoundingClientRect();
3508
- if (rect.width > 0 || rect.height > 0) {
3509
- return node;
3510
- }
3511
- }
3512
- // 兜底仍返回 wrapper,保证类型与行为一致
3513
- return wrapper;
3485
+ return resolveReferenceRefElement(referenceWrapperRef.value);
3514
3486
  };
3515
3487
  // 延迟控制
3516
3488
  var delayOptions = (0,external_vue_namespaceObject.computed)(function () {
@@ -3601,7 +3573,7 @@ var EMIT_EVENTS = {
3601
3573
  return target.value;
3602
3574
  }, function () {
3603
3575
  return floatingReference.value;
3604
- }], function () {
3576
+ }, shouldRenderReferenceWrapper], function () {
3605
3577
  (0,external_vue_namespaceObject.nextTick)(updateFloatingReference);
3606
3578
  });
3607
3579
  (0,external_vue_namespaceObject.watch)(isOpen, function (val) {
@@ -3655,7 +3627,7 @@ var EMIT_EVENTS = {
3655
3627
  };
3656
3628
  var bindNoWrapperReferenceEvents = function bindNoWrapperReferenceEvents() {
3657
3629
  clearNoWrapperReferenceEvents();
3658
- if (!isReferenceWrapperDisabled.value) return;
3630
+ if (shouldRenderReferenceWrapper.value) return;
3659
3631
  var referenceEl = resolveReferenceRefElement(referenceWrapperRef.value);
3660
3632
  if (!referenceEl) return;
3661
3633
  Object.keys(referenceListeners.value).forEach(function (eventName) {
@@ -3667,7 +3639,7 @@ var EMIT_EVENTS = {
3667
3639
  });
3668
3640
  });
3669
3641
  };
3670
- (0,external_vue_namespaceObject.watch)([isReferenceWrapperDisabled, referenceWrapperRef, function () {
3642
+ (0,external_vue_namespaceObject.watch)([shouldRenderReferenceWrapper, referenceWrapperRef, function () {
3671
3643
  return referenceListeners.value;
3672
3644
  }], function () {
3673
3645
  (0,external_vue_namespaceObject.nextTick)(bindNoWrapperReferenceEvents);
@@ -3684,7 +3656,7 @@ var EMIT_EVENTS = {
3684
3656
  var isTargetInSelfOrChildren = function isTargetInSelfOrChildren(targetEl) {
3685
3657
  var _floatingRef$value;
3686
3658
  var actualRef = floatingReferenceRef.value;
3687
- var referenceWrapperEl = isReferenceWrapperDisabled.value ? null : resolveReferenceRefElement(referenceWrapperRef.value);
3659
+ var referenceWrapperEl = shouldRenderReferenceWrapper.value ? resolveReferenceRefElement(referenceWrapperRef.value) : null;
3688
3660
  if (actualRef instanceof HTMLElement && actualRef.contains(targetEl) || referenceWrapperEl instanceof HTMLElement && referenceWrapperEl.contains(targetEl)) {
3689
3661
  return true;
3690
3662
  }
@@ -3797,6 +3769,17 @@ var EMIT_EVENTS = {
3797
3769
  var dataTheme = (0,external_vue_namespaceObject.computed)(function () {
3798
3770
  return theme.value;
3799
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
+ });
3800
3783
  var _filterEmptyNodes = function filterEmptyNodes() {
3801
3784
  var children = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
3802
3785
  var nodes = [];
@@ -3819,11 +3802,6 @@ var EMIT_EVENTS = {
3819
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() === ''));
3820
3803
  });
3821
3804
  };
3822
- var hasElementNode = function hasElementNode(nodes) {
3823
- return nodes.some(function (node) {
3824
- return node.type !== external_vue_namespaceObject.Text && node.type !== external_vue_namespaceObject.Comment;
3825
- });
3826
- };
3827
3805
  // 处理 clickoutside
3828
3806
  var handleClickOutside = function handleClickOutside(event) {
3829
3807
  var _floatingRef$value2;
@@ -3837,7 +3815,7 @@ var EMIT_EVENTS = {
3837
3815
  var target = event.target;
3838
3816
  // 点击在 reference 内(包括自定义 reference 和默认 reference)
3839
3817
  var actualRef = floatingReferenceRef.value;
3840
- var referenceWrapperEl = isReferenceWrapperDisabled.value ? null : resolveReferenceRefElement(referenceWrapperRef.value);
3818
+ var referenceWrapperEl = shouldRenderReferenceWrapper.value ? resolveReferenceRefElement(referenceWrapperRef.value) : null;
3841
3819
  var isInReference = actualRef instanceof HTMLElement && actualRef.contains(target) || referenceWrapperEl instanceof HTMLElement && referenceWrapperEl.contains(target);
3842
3820
  if (isInReference) {
3843
3821
  // 对于 click 和 hover 模式,点击 reference 的行为由 referenceListeners 处理
@@ -3973,7 +3951,7 @@ var EMIT_EVENTS = {
3973
3951
  id: popoverId,
3974
3952
  floatingEl: floatingRef.value,
3975
3953
  referenceEl: referenceEl,
3976
- referenceWrapperEl: isReferenceWrapperDisabled.value ? null : resolveReferenceRefElement(referenceWrapperRef.value)
3954
+ referenceWrapperEl: shouldRenderReferenceWrapper.value ? resolveReferenceRefElement(referenceWrapperRef.value) : null
3977
3955
  });
3978
3956
  };
3979
3957
  (0,external_vue_namespaceObject.watch)([floatingRef, floatingReferenceRef, referenceWrapperRef], function () {
@@ -4035,7 +4013,8 @@ var EMIT_EVENTS = {
4035
4013
  "class": contentClass.value,
4036
4014
  "data-arrow": arrowSide.value,
4037
4015
  "data-bk-popover-id": popoverId,
4038
- "data-theme": dataTheme.value,
4016
+ "data-theme": dataTheme.value
4017
+ }, extraThemeAttrs.value, {
4039
4018
  "onClick": handleClickContent
4040
4019
  }, guardedFloatingListeners.value), [arrow.value && (0,external_vue_namespaceObject.createVNode)("div", {
4041
4020
  "ref": arrowRef,
@@ -4059,13 +4038,10 @@ var EMIT_EVENTS = {
4059
4038
  }
4060
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 : [];
4061
4040
  var referenceNodes = _filterEmptyNodes(defaultSlotNodes);
4062
- var useContentsWrapper = hasElementNode(referenceNodes);
4063
- if (!isReferenceWrapperDisabled.value) {
4041
+ if (shouldRenderReferenceWrapper.value) {
4064
4042
  return (0,external_vue_namespaceObject.createVNode)(external_vue_namespaceObject.Fragment, null, [(0,external_vue_namespaceObject.createVNode)("span", (0,external_vue_namespaceObject.mergeProps)({
4065
4043
  "ref": referenceWrapperRef,
4066
- "style": useContentsWrapper ? {
4067
- display: 'contents'
4068
- } : {
4044
+ "style": {
4069
4045
  display: 'inline-block'
4070
4046
  },
4071
4047
  "class": [referenceCls.value, attrs["class"]]
@@ -4075,25 +4051,36 @@ var EMIT_EVENTS = {
4075
4051
  if (!referenceNodes.length) {
4076
4052
  return null;
4077
4053
  }
4078
- // 无包裹模式下,只有“单个非文本 VNode”可以保持原 DOM 结构不变。
4079
- // 文本节点或多个节点没有唯一 HTMLElement 可作为 floating reference,必须降级为 span。
4080
- if (referenceNodes.length > 1 || referenceNodes[0].type === external_vue_namespaceObject.Text) {
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) {
4081
4061
  return (0,external_vue_namespaceObject.createVNode)("span", {
4082
- "ref": setReferenceRef,
4062
+ "ref": referenceWrapperRef,
4083
4063
  "style": {
4084
4064
  display: 'inline-block'
4085
4065
  },
4086
4066
  "class": [referenceCls.value, attrs["class"]]
4087
4067
  }, [referenceNodes]);
4088
4068
  }
4089
- var referenceNode = referenceNodes[0];
4090
- if (!(0,external_vue_namespaceObject.isVNode)(referenceNode) || referenceNode.type === external_vue_namespaceObject.Comment) {
4091
- return referenceNode;
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;
4092
4074
  }
4093
- return (0,external_vue_namespaceObject.cloneVNode)(referenceNode, {
4094
- ref: setReferenceRef,
4095
- "class": [referenceCls.value, attrs["class"]]
4096
- }, true);
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
+ });
4097
4084
  };
4098
4085
  // 默认情况:渲染 reference 和 floating content
4099
4086
  return (0,external_vue_namespaceObject.createVNode)(external_vue_namespaceObject.Fragment, null, [renderReferenceNode(), renderTeleport()]);
@@ -181,7 +181,7 @@ export declare const PopoverProps: {
181
181
  default: string;
182
182
  };
183
183
  /**
184
- * 是否渲染默认插槽最外层 reference span;false 时不主动追加 span
184
+ * 是否渲染默认插槽最外层 reference span;仅 true 时主动追加 span
185
185
  */
186
186
  renderReferenceWrapper: import("vue-types").VueTypeValidableDef<boolean> & {
187
187
  default: boolean;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bkui-vue",
3
- "version": "2.1.0-dev-beta.14",
3
+ "version": "2.1.0-dev-beta.15",
4
4
  "workspaces": [
5
5
  "packages/**",
6
6
  "scripts/cli",