niuma-ui 2.1.3 → 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,22 @@
|
|
|
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`;定位和点击外部关闭也先确认是元素。
|
|
18
|
+
|
|
19
|
+
## [2.1.4] - 2026-09-23
|
|
20
|
+
|
|
21
|
+
### 变更
|
|
22
|
+
|
|
23
|
+
- 文档站:组件页和指南页共用 `site-doc` 文章样式(眉题、标题、导语、小节)。演示、代码块、API / Token 表、翻页和首页卡片的圆角与底色走 `--site-panel-radius` / `--site-panel-bg`,暗色不再单独换成抬升表面。文档区背景跟首页画布,网格线走 `--site-home-grid`;暗色画布用 `--rs-bg`,网格为浅色细线。
|
|
24
|
+
|
|
9
25
|
## [2.1.3] - 2026-09-22
|
|
10
26
|
|
|
11
27
|
### 变更
|
|
@@ -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,
|