niuma-ui 2.1.4 → 2.1.5

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,15 @@
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
+ ## [2.1.5] - 2026-09-28
10
+
11
+ ### 变更
12
+
13
+ - 发版:推到 `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`。
14
+
15
+ ### 修复
16
+
17
+ - `RsMenu`:折叠后悬停弹出的子菜单,模板 ref 可能不是元素,`ResizeObserver.observe` 会抛错,浮层尺寸变化后不再重新摆放。ref 现在只保留 `HTMLElement`;定位和点击外部关闭也先确认是元素。
9
18
 
10
19
  ## [2.1.4] - 2026-09-23
11
20
 
@@ -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 measured = flyoutEl.value?.getBoundingClientRect();
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?.contains(target)) return;
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
- if (flyoutEl.value && typeof ResizeObserver !== "undefined") {
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(flyoutEl.value);
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
- ref_key: "flyoutEl",
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,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "niuma-ui",
3
- "version": "2.1.4",
3
+ "version": "2.1.5",
4
4
  "license": "Apache-2.0",
5
5
  "type": "module",
6
6
  "description": "Vue 3 workbench design system — Rs* components, --rs-* tokens, optional Monaco / CodeMirror / xterm",