niuma-ui 2.1.4 → 2.1.6
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/CHANGELOG.md
CHANGED
|
@@ -6,6 +6,21 @@
|
|
|
6
6
|
|
|
7
7
|
## [Unreleased]
|
|
8
8
|
|
|
9
|
+
## [2.1.6] - 2026-10-08
|
|
10
|
+
|
|
11
|
+
### 修复
|
|
12
|
+
|
|
13
|
+
- `RsContextMenu`:页面上任意元素滚动都会关掉已打开的菜单。旁边面板(例如流式输出把消息列表往下滚)会把另一侧的右键清掉。现在只在触发器自己的滚动链上关闭:滚动的节点包含触发器,或触发器包含该节点。菜单内部滚动仍不关闭;点菜单外空白处仍关闭。
|
|
14
|
+
|
|
15
|
+
## [2.1.5] - 2026-09-28
|
|
16
|
+
|
|
17
|
+
### 变更
|
|
18
|
+
|
|
19
|
+
- 发版:推到 `main` 后,**Release** 读取 changelog 第一条 `## [x.y.z]`(含 `x.y.z-beta.1` 这类预发布)。与 `package.json` 的 `version` 不一致则失败;`vX.Y.Z` 已存在则跳过。新版本先跑 `pnpm test` 和 `pnpm build`,再打附注 tag(说明是 `niuma-ui X.Y.Z` 加上该版本段落)。Actions 令牌推 tag 不会触发其它工作流,随后以 `workflow_dispatch` 启动 **Publish**(npm 与 GitHub Release)。同一提交的文档站仍由推 `main` 时的 **Deploy Docs** 部署。步骤见 `CONTRIBUTING.md`。
|
|
20
|
+
|
|
21
|
+
### 修复
|
|
22
|
+
|
|
23
|
+
- `RsMenu`:折叠后悬停弹出的子菜单,模板 ref 可能不是元素,`ResizeObserver.observe` 会抛错,浮层尺寸变化后不再重新摆放。ref 现在只保留 `HTMLElement`;定位和点击外部关闭也先确认是元素。
|
|
9
24
|
|
|
10
25
|
## [2.1.4] - 2026-09-23
|
|
11
26
|
|
|
@@ -522,6 +522,10 @@ var RsContextMenu_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ de
|
|
|
522
522
|
if (!open.value) return;
|
|
523
523
|
const target = event.target;
|
|
524
524
|
if (target instanceof Node && isInsideMenu(target)) return;
|
|
525
|
+
const trigger = triggerEl.value;
|
|
526
|
+
if (trigger && target instanceof Node) {
|
|
527
|
+
if (!(target.contains(trigger) || trigger.contains(target))) return;
|
|
528
|
+
}
|
|
525
529
|
restoreOnClose = false;
|
|
526
530
|
setOpen(false);
|
|
527
531
|
}
|
|
@@ -214,12 +214,16 @@ var RsMenuItems_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defi
|
|
|
214
214
|
const themed = el.closest("[data-rs-theme]");
|
|
215
215
|
flyoutTheme.value = themed instanceof HTMLElement ? themed.dataset.rsTheme : void 0;
|
|
216
216
|
}
|
|
217
|
+
function setFlyoutEl(el) {
|
|
218
|
+
flyoutEl.value = el instanceof HTMLElement ? el : null;
|
|
219
|
+
}
|
|
217
220
|
function placeFlyout() {
|
|
218
221
|
if (typeof window === "undefined" || !flyoutKey.value) return;
|
|
219
222
|
const trigger = triggerEls.get(flyoutKey.value);
|
|
220
223
|
if (!trigger) return;
|
|
221
224
|
const anchor = trigger.getBoundingClientRect();
|
|
222
|
-
const
|
|
225
|
+
const panel = flyoutEl.value;
|
|
226
|
+
const measured = panel instanceof HTMLElement ? panel.getBoundingClientRect() : void 0;
|
|
223
227
|
flyoutBox.value = placeSidePopup({
|
|
224
228
|
top: anchor.top,
|
|
225
229
|
left: anchor.left,
|
|
@@ -245,7 +249,7 @@ var RsMenuItems_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defi
|
|
|
245
249
|
const target = event.target;
|
|
246
250
|
if (!(target instanceof Node)) return;
|
|
247
251
|
if ((flyoutKey.value ? triggerEls.get(flyoutKey.value) : null)?.contains(target)) return;
|
|
248
|
-
if (flyoutEl.value
|
|
252
|
+
if (flyoutEl.value instanceof HTMLElement && flyoutEl.value.contains(target)) return;
|
|
249
253
|
closeFlyout();
|
|
250
254
|
}
|
|
251
255
|
function onDocKeydown(event) {
|
|
@@ -291,10 +295,11 @@ var RsMenuItems_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defi
|
|
|
291
295
|
syncFlyoutTheme(triggerEls.get(key) ?? null);
|
|
292
296
|
attachOverlay();
|
|
293
297
|
nextTick(() => {
|
|
294
|
-
|
|
298
|
+
const panel = flyoutEl.value;
|
|
299
|
+
if (panel instanceof HTMLElement && typeof ResizeObserver !== "undefined") {
|
|
295
300
|
panelResize?.disconnect();
|
|
296
301
|
panelResize = new ResizeObserver(() => requestPlace());
|
|
297
|
-
panelResize.observe(
|
|
302
|
+
panelResize.observe(panel);
|
|
298
303
|
}
|
|
299
304
|
requestPlace();
|
|
300
305
|
});
|
|
@@ -540,8 +545,7 @@ var RsMenuItems_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defi
|
|
|
540
545
|
to: portalTarget.value
|
|
541
546
|
}, [createElementVNode("section", {
|
|
542
547
|
ref_for: true,
|
|
543
|
-
|
|
544
|
-
ref: flyoutEl,
|
|
548
|
+
ref: setFlyoutEl,
|
|
545
549
|
class: "rs-menu__flyout",
|
|
546
550
|
"aria-label": item.label,
|
|
547
551
|
"data-rs-theme": flyoutTheme.value,
|