bkui-vue 2.0.2-beta.85 → 2.0.2-beta.86

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.0.2-beta.85";
6
+ export const version = "2.0.2-beta.86";
7
7
  window.__bkui_vue_version__ = version;
@@ -4817,6 +4817,8 @@ var popContainerId = "id_".concat(esm_browser_v4());
4817
4817
  updateBoundary();
4818
4818
  updatePopover(null, props);
4819
4819
  };
4820
+ // 监听父元素(Modal/Dialog)的可见性变化
4821
+ var parentVisibilityObserver = null;
4820
4822
  var onMountedFn = function onMountedFn() {
4821
4823
  if (props.disabled) {
4822
4824
  return;
@@ -4831,20 +4833,78 @@ var popContainerId = "id_".concat(esm_browser_v4());
4831
4833
  initPopInstance();
4832
4834
  document.body.addEventListener('fullscreenchange', handleFullscreenChange);
4833
4835
  document.addEventListener('click', handleClickOutside);
4836
+ // 监听父元素的可见性变化
4837
+ var _resolvePopElements4 = resolvePopElements(),
4838
+ elReference = _resolvePopElements4.elReference,
4839
+ root = _resolvePopElements4.root;
4840
+ var element = elReference || root;
4841
+ if (element) {
4842
+ var targetNode = element.closest('.bk-modal, .bk-dialog');
4843
+ if (targetNode) {
4844
+ parentVisibilityObserver = new MutationObserver(function () {
4845
+ if (checkParentVisibility() && localIsShow.value) {
4846
+ hideFn();
4847
+ }
4848
+ });
4849
+ parentVisibilityObserver.observe(targetNode, {
4850
+ attributes: true,
4851
+ attributeFilter: ['style', 'class'],
4852
+ subtree: true
4853
+ });
4854
+ }
4855
+ }
4834
4856
  };
4835
4857
  var onUnmountedFn = function onUnmountedFn() {
4836
4858
  beforeInstanceUnmount();
4837
4859
  // 清理父节点上的 data-pnode-id 属性
4838
- var _resolvePopElements4 = resolvePopElements(),
4839
- root = _resolvePopElements4.root;
4860
+ var _resolvePopElements5 = resolvePopElements(),
4861
+ root = _resolvePopElements5.root;
4840
4862
  clearParentNodeId(root);
4841
4863
  document.body.removeEventListener('fullscreenchange', handleFullscreenChange);
4842
4864
  document.removeEventListener('click', handleClickOutside);
4865
+ // 清理父元素可见性监听器
4866
+ if (parentVisibilityObserver) {
4867
+ parentVisibilityObserver.disconnect();
4868
+ parentVisibilityObserver = null;
4869
+ }
4843
4870
  };
4844
4871
  var isClickInside = function isClickInside(target) {
4845
4872
  var _refContent$value$$el, _refContent$value, _refContent$value$con;
4846
4873
  return (_refContent$value$$el = (_refContent$value = refContent.value) === null || _refContent$value === void 0 || (_refContent$value = _refContent$value.$el) === null || _refContent$value === void 0 || (_refContent$value$con = _refContent$value.contains) === null || _refContent$value$con === void 0 ? void 0 : _refContent$value$con.call(_refContent$value, target)) !== null && _refContent$value$$el !== void 0 ? _refContent$value$$el : false;
4847
4874
  };
4875
+ /**
4876
+ * 检查父元素(Modal/Dialog)是否被隐藏
4877
+ * 如果父元素被隐藏,应该关闭 Popover
4878
+ */
4879
+ var checkParentVisibility = function checkParentVisibility() {
4880
+ if (!localIsShow.value) return false;
4881
+ var _resolvePopElements6 = resolvePopElements(),
4882
+ elReference = _resolvePopElements6.elReference,
4883
+ root = _resolvePopElements6.root;
4884
+ var element = elReference || root;
4885
+ if (!element) return false;
4886
+ // 查找最近的 Modal 或 Dialog 父元素
4887
+ var parent = element.parentElement;
4888
+ while (parent && parent !== document.body) {
4889
+ if (parent.classList.contains('bk-modal') || parent.classList.contains('bk-dialog')) {
4890
+ // 检查 Modal wrapper 是否被隐藏(Dialog 关闭时 wrapper 会被 v-show 隐藏)
4891
+ var wrapper = parent.querySelector('.bk-modal-wrapper');
4892
+ if (wrapper) {
4893
+ var wrapperStyle = window.getComputedStyle(wrapper);
4894
+ if (wrapperStyle.display === 'none' || wrapperStyle.visibility === 'hidden') {
4895
+ return true; // 父元素被隐藏
4896
+ }
4897
+ }
4898
+ // 检查父元素本身是否被隐藏
4899
+ var style = window.getComputedStyle(parent);
4900
+ if (style.display === 'none' || style.visibility === 'hidden') {
4901
+ return true; // 父元素被隐藏
4902
+ }
4903
+ }
4904
+ parent = parent.parentElement;
4905
+ }
4906
+ return false;
4907
+ };
4848
4908
  /**
4849
4909
  * 处理点击外部区域的事件
4850
4910
  * @param e - 事件对象
@@ -4859,6 +4919,13 @@ var popContainerId = "id_".concat(esm_browser_v4());
4859
4919
  e.stopImmediatePropagation();
4860
4920
  return;
4861
4921
  }
4922
+ // 检查父元素(Modal/Dialog)是否被隐藏,如果隐藏则关闭 Popover
4923
+ if (checkParentVisibility()) {
4924
+ if (localIsShow.value) {
4925
+ hideFn();
4926
+ }
4927
+ return;
4928
+ }
4862
4929
  var commonFunc = function commonFunc() {
4863
4930
  ctx.emit(EMIT_EVENTS.CLICK_OUTSIDE, {
4864
4931
  isShow: localIsShow.value,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bkui-vue",
3
- "version": "2.0.2-beta.85",
3
+ "version": "2.0.2-beta.86",
4
4
  "workspaces": [
5
5
  "packages/**",
6
6
  "scripts/cli",