@aglyn/shared-util-dom

中文文档
1.19.0发布于 2026/11/07Apache-2.0TypeScriptES Module构建来源已验证近 30 天下载 1.2万

DOM measurement helpers and type guards: bounding and clipping rects, scroll parents, offset parents, the owning window of a node (including across iframes), and event coordinates. It is mainly an internal building block of the Besigner visual editor (`@a

原始使用文档
文档目录6 节
  1. Install
  2. What's in it
  3. Usage
  4. Import-time effect
  5. How it fits
  6. License

@aglyn/shared-util-dom

DOM measurement helpers and type guards: bounding and clipping rects, scroll parents, offset parents, the owning window of a node (including across iframes), and event coordinates. It is mainly an internal building block of the Besigner visual editor (@aglyn/besigner-ui) and of @aglyn/shared-ui-next, and is usable on its own.

Published to npm from the Aglyn monorepo. Versions follow semantic versioning.

Install

npm install @aglyn/shared-util-dom

No peer dependencies. mobx and rxjs are regular dependencies, used only by the page-title controller.

What's in it

Everything below is exported from the package root.

  • Rect and geometry: getElementClientRectBounding, getElementClientRectBoundingInner, getElementRectAsClientRect, getElementClippingRect, getElementViewportRect, getElementDocumentElementRect, getElementFragmentRects, getElementWindowScrollBarX.
  • Tree walking: getElementScrollParent, getElementListScrollParents, getElementOffsetParent, getElementParentNode, getElementDocumentElement, getElementNodeName, getElementComputedStyle.
  • Windows and frames: getNodeWindow, getNodeWindowScroll, getIframeDocument. These resolve the window that owns a node rather than assuming the global one, so they work on elements inside an iframe.
  • Events: getEventCoordinates, eventHasViewportCoordinates, isTouchEvent, isKeyboardEvent.
  • Guards: isNodeObject, isNodeElement, isElementHTMLElement, isSVGElement, isNodeShadowRoot, isNodeTableElement, isNodeDocument, isElementWindow, isElementScrollParentElement, elementContainsChildElement.
  • Types and constants: Rect, ClientRectObject, Coordinates, VirtualElement, Boundary, RootBoundary, and the clippingParents / viewport constants.
  • A page-title controller: PageTitle (a MobX observable class), the shared instance $title, the RxJS observable $pageTitle, and the setters setScreenName, setScreenNumber, setScreenSuffix, setScreenSeparator, setScreenTitle.

Each file under src/lib is also importable by subpath, for example @aglyn/shared-util-dom/get-element-scroll-parent or @aglyn/shared-util-dom/guards/is-touch-event. getOwnerDocument is available only that way, as @aglyn/shared-util-dom/get-owner-document.

Usage

import {
  getElementListScrollParents,
  getEventCoordinates,
  getNodeWindow,
} from '@aglyn/shared-util-dom'

function onPointerDown(event: PointerEvent) {
  const { x, y } = getEventCoordinates(event)
  const win = getNodeWindow(event.target)
  const scrollers = getElementListScrollParents(event.target as Element)
  // ...
}

Import-time effect

This package imports the root of @aglyn/shared-util-tools, and that root defines a set of non-enumerable $_-prefixed methods on Array.prototype when it loads. See that package's README for the exact list.

How it fits

A shared package: generic, with no knowledge of Aglyn's model. Shared packages may only import other shared packages; this one depends on @aglyn/shared-util-tools. @aglyn/besigner-ui and @aglyn/shared-ui-next depend on it.

License

Apache-2.0. Source: https://github.com/aglyn/aglyn/tree/main/libs/shared/util/dom

版本与发布记录

@aglyn/shared-util-dom 共发布 161 个版本,首次发布于 2026/09/21;过去 12 个月发布了 161 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
1.19.0latest2026/11/07今天
1.18.02026/11/07今天
1.17.02026/11/07今天
1.16.02026/11/07今天
1.15.22026/11/061 天前
1.15.12026/11/061 天前

其他发布通道:beta → 1.0.0-beta.296。

关于 @aglyn/shared-util-dom 的常见问题

@aglyn/shared-util-dom 是什么?

DOM measurement helpers and type guards: bounding and clipping rects, scroll parents, offset parents, the owning window of a node (including across iframes), and event coordinates. It is mainly an internal building block of the Besigner visual editor (`@a

如何安装 @aglyn/shared-util-dom?

在项目目录运行 npm install @aglyn/shared-util-dom,或使用 pnpm add / yarn add / bun add。

@aglyn/shared-util-dom 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@aglyn/shared-util-dom 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@aglyn/shared-util-dom 可以商用吗?

@aglyn/shared-util-dom 使用 Apache-2.0 许可。宽松许可:允许商业使用、修改和再分发,并附带明确的专利授权;分发时需保留许可与 NOTICE 文件,修改过的文件要注明改动。以上为概括,不构成法律意见,请以许可原文为准。

@aglyn/shared-util-dom 的下载量有多少?

根据 npm 官方下载统计,@aglyn/shared-util-dom 在 2026/10/05 – 2026/11/03 这 30 天内被下载 12,268 次,日均约 409 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@aglyn/shared-util-dom 还在维护吗?

最新版本 1.19.0 发布于 2026/11/07(今天);至今共发布 161 个版本,其中过去 12 个月发布了 161 个;首次发布于 2026/09/21。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。