@lytjs/adapter-web 6.0.0
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/README.md +123 -0
- package/dist/index.cjs +1164 -0
- package/dist/index.d.cts +581 -0
- package/dist/index.d.ts +581 -0
- package/dist/index.mjs +1127 -0
- package/package.json +53 -0
package/dist/index.d.cts
ADDED
|
@@ -0,0 +1,581 @@
|
|
|
1
|
+
import { RendererHost, HostStyleDeclaration, HostEventHandler, HostEventOptions, HostRect, TransitionDurationInfo, HostEvent } from '@lytjs/host-contract';
|
|
2
|
+
import { VNode, ComponentInternalInstance, SuspenseBoundary, RendererOptions } from '@lytjs/vdom';
|
|
3
|
+
export { getEventKey, normalizeEventName, parseEventModifier } from '@lytjs/common-events';
|
|
4
|
+
export { patchAttr, patchClass, patchStyle } from '@lytjs/common-dom';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* @lytjs/adapter-web - WebRendererHost
|
|
8
|
+
* 浏览器 DOM 平台的 RendererHost<Node, Element> 实现。
|
|
9
|
+
*
|
|
10
|
+
* 所有 DOM API 调用集中在此文件内,不泄漏到 L1/L2。
|
|
11
|
+
* 极度轻薄:只做纯翻译,不做队列/兼容/归一化。
|
|
12
|
+
* FIX: P2-33 强制同步布局优化 - 添加缓存和批量处理
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Web 平台渲染宿主实现。
|
|
17
|
+
*
|
|
18
|
+
* 实现 RendererHost<Node, Element> 接口,将所有操作直接翻译为浏览器 DOM API。
|
|
19
|
+
*/
|
|
20
|
+
declare class WebRendererHost implements RendererHost<Node, Element> {
|
|
21
|
+
readonly __isRendererHost: true;
|
|
22
|
+
private static readonly wrappedHandlerMap;
|
|
23
|
+
private static getWrappedHandler;
|
|
24
|
+
private static setWrappedHandler;
|
|
25
|
+
/**
|
|
26
|
+
* 创建元素节点。
|
|
27
|
+
* SVG 标签使用 createElementNS,普通标签使用 createElement。
|
|
28
|
+
*/
|
|
29
|
+
createElement(tag: string, isSVG?: boolean): Element;
|
|
30
|
+
/** 创建文本节点 */
|
|
31
|
+
createText(text: string): Node;
|
|
32
|
+
/** 创建注释节点 */
|
|
33
|
+
createComment(text: string): Node;
|
|
34
|
+
/** 设置元素文本内容(覆盖所有子节点) */
|
|
35
|
+
setElementText(node: Element, text: string): void;
|
|
36
|
+
/** 设置文本/注释节点的内容 */
|
|
37
|
+
setText(node: Node, text: string): void;
|
|
38
|
+
/**
|
|
39
|
+
* 在父节点的 anchor 前插入子节点。
|
|
40
|
+
* anchor 为 null 时追加到末尾。
|
|
41
|
+
*/
|
|
42
|
+
insert(child: Node, parent: Node, anchor?: Node | null): void;
|
|
43
|
+
/** 从父节点移除子节点 */
|
|
44
|
+
remove(child: Node): void;
|
|
45
|
+
/** 获取下一个兄弟节点 */
|
|
46
|
+
nextSibling(node: Node): Node | null;
|
|
47
|
+
/** 获取父节点 */
|
|
48
|
+
parentNode(node: Node): Node | null;
|
|
49
|
+
/**
|
|
50
|
+
* 查询选择器。
|
|
51
|
+
*/
|
|
52
|
+
querySelector(selector: string): Element | null;
|
|
53
|
+
/**
|
|
54
|
+
* 统一属性 patch 入口。
|
|
55
|
+
* 委托给 web-patch-props.ts 处理 class/style/event/attr 分发。
|
|
56
|
+
*/
|
|
57
|
+
patchProp(el: Element, key: string, prevValue: unknown, nextValue: unknown, isSVG?: boolean): void;
|
|
58
|
+
/** 添加 CSS 类名 */
|
|
59
|
+
addClass(el: Element, cls: string): void;
|
|
60
|
+
/** 移除 CSS 类名 */
|
|
61
|
+
removeClass(el: Element, cls: string): void;
|
|
62
|
+
/** 检查是否包含 CSS 类名 */
|
|
63
|
+
hasClass(el: Element, cls: string): boolean;
|
|
64
|
+
/**
|
|
65
|
+
* 设置内联样式属性。
|
|
66
|
+
* value 为 null/undefined 时移除该样式属性。
|
|
67
|
+
* FIX: P2-v11-35 添加 SVG 元素兼容检查,
|
|
68
|
+
* SVG 元素的 style 属性是 CSSStyleDeclaration 但部分属性名不同,
|
|
69
|
+
* 使用 setProperty/removeProperty 统一处理
|
|
70
|
+
*/
|
|
71
|
+
setStyle(el: Element, key: string, value: string | null | undefined): void;
|
|
72
|
+
/**
|
|
73
|
+
* 移除内联样式属性
|
|
74
|
+
* FIX: P2-16 统一实现风格,与 setStyle 保持一致
|
|
75
|
+
*/
|
|
76
|
+
removeStyle(el: Element, key: string): void;
|
|
77
|
+
/**
|
|
78
|
+
* 获取计算样式。
|
|
79
|
+
*/
|
|
80
|
+
getComputedStyle(el: Element): HostStyleDeclaration;
|
|
81
|
+
/**
|
|
82
|
+
* 强制回流/重排。
|
|
83
|
+
* 读取 offsetHeight 触发浏览器同步布局。
|
|
84
|
+
* FIX: P2-33 强制同步布局优化 - 添加缓存避免重复读取
|
|
85
|
+
*/
|
|
86
|
+
forceReflow(el: Element): void;
|
|
87
|
+
/**
|
|
88
|
+
* 获取元素尺寸(带缓存)
|
|
89
|
+
* FIX: P2-33 强制同步布局优化
|
|
90
|
+
*/
|
|
91
|
+
getElementSize(el: Element): {
|
|
92
|
+
width: number;
|
|
93
|
+
height: number;
|
|
94
|
+
};
|
|
95
|
+
/**
|
|
96
|
+
* 添加事件监听器。
|
|
97
|
+
* 将原生 DOM Event 包装为 HostEvent 后传递给 handler。
|
|
98
|
+
* 返回一个取消监听的函数。
|
|
99
|
+
*/
|
|
100
|
+
addEventListener(el: Element, event: string, handler: HostEventHandler, options?: HostEventOptions): () => void;
|
|
101
|
+
/**
|
|
102
|
+
* 移除事件监听器。
|
|
103
|
+
*/
|
|
104
|
+
removeEventListener(el: Element, event: string, handler: HostEventHandler, options?: HostEventOptions): void;
|
|
105
|
+
/**
|
|
106
|
+
* 获取元素的几何边界信息。
|
|
107
|
+
*/
|
|
108
|
+
getBoundingClientRect(el: Element): HostRect;
|
|
109
|
+
/** 获取元素的指定属性值 */
|
|
110
|
+
getAttribute(el: Element, key: string): string | null;
|
|
111
|
+
/**
|
|
112
|
+
* 获取过渡/动画时长信息。
|
|
113
|
+
* 通过读取计算样式中的 transition-duration / animation-duration 获取。
|
|
114
|
+
*/
|
|
115
|
+
getTransitionInfo(el: Element, _type: 'enter' | 'leave'): TransitionDurationInfo;
|
|
116
|
+
/**
|
|
117
|
+
* 请求下一帧回调(双 rAF 确保浏览器已绘制)。
|
|
118
|
+
*/
|
|
119
|
+
nextFrame(fn: () => void): void;
|
|
120
|
+
/**
|
|
121
|
+
* 延迟执行。
|
|
122
|
+
*/
|
|
123
|
+
setTimeout(fn: () => void, ms: number): number;
|
|
124
|
+
/** 取消延迟执行 */
|
|
125
|
+
clearTimeout(id: number): void;
|
|
126
|
+
/**
|
|
127
|
+
* 获取元素的 namespaceURI(用于 SVG 检测)。
|
|
128
|
+
*/
|
|
129
|
+
getNamespaceURI(el: Element): string | null;
|
|
130
|
+
/**
|
|
131
|
+
* 替换子节点(用于 hydration mismatch 处理)。
|
|
132
|
+
*/
|
|
133
|
+
replaceChild(parent: Node, newChild: Node, oldChild: Node): void;
|
|
134
|
+
/**
|
|
135
|
+
* 获取子节点列表(用于 hydration)。
|
|
136
|
+
*/
|
|
137
|
+
getChildNodes(el: Element): Node[];
|
|
138
|
+
/**
|
|
139
|
+
* 获取节点类型(用于 hydration 判断)。
|
|
140
|
+
*/
|
|
141
|
+
getNodeType(node: Node): number;
|
|
142
|
+
/**
|
|
143
|
+
* 获取元素标签名(用于 hydration 匹配)。
|
|
144
|
+
* 返回小写标签名。
|
|
145
|
+
*/
|
|
146
|
+
getTagName(el: Element): string;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
/**
|
|
150
|
+
* @lytjs/adapter-web - DOM Renderer
|
|
151
|
+
* 使用 WebRendererHost 创建 DOM 渲染器。
|
|
152
|
+
*
|
|
153
|
+
* 从 @lytjs/renderer/src/dom/dom-renderer.ts 迁移,
|
|
154
|
+
* 使用 WebRendererHost 替代 createDOMRendererOptions。
|
|
155
|
+
* 保留 vnodeMap (WeakMap) 和 cleanupVNodeResources 逻辑。
|
|
156
|
+
* FIX: P2-31 DOM 操作合并优化 - 批量处理 DOM 操作
|
|
157
|
+
*/
|
|
158
|
+
|
|
159
|
+
interface DOMRenderer {
|
|
160
|
+
render(vnode: VNode | null, container: Element): void;
|
|
161
|
+
patch(n1: VNode | null, n2: VNode, container: Node, anchor?: Node | null): void;
|
|
162
|
+
unmount(vnode: VNode): void;
|
|
163
|
+
mount(vnode: VNode, container: Node): void;
|
|
164
|
+
move(vnode: VNode, container: Node, anchor: Node | null, _parentComponent?: ComponentInternalInstance | null, _parentSuspense?: SuspenseBoundary | null): void;
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* 创建 DOM 渲染器。
|
|
168
|
+
*
|
|
169
|
+
* 使用 WebRendererHost 作为平台适配层,通过 vdom 的 createRenderer
|
|
170
|
+
* 创建完整的渲染器实例。vnodeMap 通过闭包作用域隔离。
|
|
171
|
+
*
|
|
172
|
+
* @param extraOptions 可选的额外渲染器选项,例如 setupChildComponent
|
|
173
|
+
*/
|
|
174
|
+
declare function createDOMRenderer(extraOptions?: Partial<Pick<RendererOptions<Node, Element>, 'setupChildComponent' | 'normalizeProps'>>): DOMRenderer;
|
|
175
|
+
|
|
176
|
+
/**
|
|
177
|
+
* @lytjs/adapter-web - Hydration
|
|
178
|
+
* 简化的水合逻辑,将现有 DOM 节点与 vnode 匹配。
|
|
179
|
+
*
|
|
180
|
+
* 从 @lytjs/renderer/src/dom/hydration.ts 迁移,
|
|
181
|
+
* 使用 WebRendererHost 的 getChildNodes/getNodeType/getTagName 等方法。
|
|
182
|
+
*/
|
|
183
|
+
|
|
184
|
+
interface HydrationRenderer {
|
|
185
|
+
hydrate(vnode: VNode, container: HTMLElement): void;
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* 创建水合函数,用于将现有 DOM 与 vnode 匹配。
|
|
189
|
+
*
|
|
190
|
+
* @param _rendererOptions - 保留用于未来渲染器配置(当前未使用)
|
|
191
|
+
* @param sharedVnodeMap - 可选的共享 vnodeMap,使水合和 DOM 渲染器使用同一映射
|
|
192
|
+
*/
|
|
193
|
+
declare function createHydrationFunctions(_rendererOptions: Record<string, unknown>, sharedVnodeMap?: WeakMap<Element, VNode | null>): HydrationRenderer;
|
|
194
|
+
|
|
195
|
+
/**
|
|
196
|
+
* @lytjs/adapter-web - DOM Event Wrapping
|
|
197
|
+
* 将原生 DOM Event 包装为平台无关的 HostEvent。
|
|
198
|
+
*/
|
|
199
|
+
|
|
200
|
+
/**
|
|
201
|
+
* 将原生 DOM Event 包装为 HostEvent。
|
|
202
|
+
*
|
|
203
|
+
* 纯翻译层,不做任何归一化或兼容处理。
|
|
204
|
+
*
|
|
205
|
+
* @param e - 原生 DOM Event
|
|
206
|
+
* @returns HostEvent 实例
|
|
207
|
+
*/
|
|
208
|
+
declare function wrapDOMEvent(e: Event): HostEvent;
|
|
209
|
+
|
|
210
|
+
/**
|
|
211
|
+
* @lytjs/adapter-web - Event Invoker Caching with Pooling
|
|
212
|
+
* 事件缓存 Invoker 模式:通过 el._vei 缓存事件处理函数,
|
|
213
|
+
* 更新时仅替换 invoker.value,无需重新 addEventListener。
|
|
214
|
+
*
|
|
215
|
+
* FIX: P1-12 DOM-NEW-01 - 实现事件监听器池化,复用事件监听器对象
|
|
216
|
+
* 通过对象池复用 invoker 对象,减少内存分配和垃圾回收压力
|
|
217
|
+
*/
|
|
218
|
+
/** 事件修饰符解析结果 */
|
|
219
|
+
interface ParsedEvent {
|
|
220
|
+
/** 规范化后的事件名,如 'click' */
|
|
221
|
+
name: string;
|
|
222
|
+
/** 是否调用 e.stopPropagation() */
|
|
223
|
+
stop: boolean;
|
|
224
|
+
/** 是否调用 e.preventDefault() */
|
|
225
|
+
prevent: boolean;
|
|
226
|
+
/** 是否使用 capture 模式 */
|
|
227
|
+
capture: boolean;
|
|
228
|
+
/** 是否使用 once 模式 */
|
|
229
|
+
once: boolean;
|
|
230
|
+
/** 是否仅在 e.target === el 时触发 */
|
|
231
|
+
self: boolean;
|
|
232
|
+
/** 是否使用 passive 模式 */
|
|
233
|
+
passive: boolean;
|
|
234
|
+
}
|
|
235
|
+
/** 事件 invoker 函数,持有 value 属性用于更新 */
|
|
236
|
+
interface EventInvoker extends EventListener {
|
|
237
|
+
/** 当前绑定的事件处理函数,更新时直接替换此属性 */
|
|
238
|
+
value: ((...args: unknown[]) => void) | null;
|
|
239
|
+
/** @internal 解析后的事件修饰符 */
|
|
240
|
+
_parsed?: ParsedEvent;
|
|
241
|
+
}
|
|
242
|
+
/**
|
|
243
|
+
* 创建事件 invoker 函数。
|
|
244
|
+
* invoker 是一个持有 value 属性的闭包,调用时执行 invoker.value(event)。
|
|
245
|
+
* FIX: P1-12 DOM-NEW-01 - 优先从对象池获取 invoker 对象
|
|
246
|
+
*/
|
|
247
|
+
declare function createInvoker(initialValue: (...args: unknown[]) => void): EventInvoker;
|
|
248
|
+
/**
|
|
249
|
+
* 更新元素上的事件监听。
|
|
250
|
+
*
|
|
251
|
+
* 四种情况:
|
|
252
|
+
* 1. nextValue && existingInvoker → 直接替换 invoker.value(O(1) 赋值)
|
|
253
|
+
* 2. nextValue && !existingInvoker → 创建 invoker,addEventListener
|
|
254
|
+
* 3. !nextValue && existingInvoker → removeEventListener,清除缓存
|
|
255
|
+
* 4. !nextValue && !existingInvoker → 无操作
|
|
256
|
+
*/
|
|
257
|
+
declare function patchEvent(el: Element, rawName: string, nextValue: ((...args: unknown[]) => void) | null, _prevValue?: ((...args: unknown[]) => void) | null): void;
|
|
258
|
+
/**
|
|
259
|
+
* 移除元素上所有通过 invoker 缓存的事件监听。
|
|
260
|
+
* 用于组件卸载时的清理。
|
|
261
|
+
* FIX: P1-12 DOM-NEW-01 - 将 invoker 对象归还到对象池以复用
|
|
262
|
+
*/
|
|
263
|
+
declare function removeAllEventListeners(el: Element): void;
|
|
264
|
+
|
|
265
|
+
/**
|
|
266
|
+
* @lytjs/adapter-web - DOM Property Patching
|
|
267
|
+
* Enhanced patchProp for DOM elements with class, style, event, and attribute handling.
|
|
268
|
+
* Delegates shared logic to @lytjs/common-dom, event caching to web-patch-events.
|
|
269
|
+
*
|
|
270
|
+
* 从 @lytjs/renderer/src/dom/patch-props.ts 迁移,纯翻译,不做额外归一化。
|
|
271
|
+
*
|
|
272
|
+
* TODO (P2-13): Vendor prefix 处理为未来优化项。
|
|
273
|
+
* 当前未对 CSS 属性和 DOM 属性做 vendor prefix 自动转换(如 webkitTransform -> -webkit-transform)。
|
|
274
|
+
* 现代浏览器已逐步移除对 vendor prefix 的需求,但在需要兼容旧版浏览器的场景下,
|
|
275
|
+
* 可考虑在 patchStyle 和 patchAttr 中添加自动 prefix 检测与转换逻辑。
|
|
276
|
+
*/
|
|
277
|
+
|
|
278
|
+
/**
|
|
279
|
+
* Patch a prop on a DOM element.
|
|
280
|
+
* Delegates class/style/attr/innerHTML/textContent to @lytjs/common-dom,
|
|
281
|
+
* and uses invoker-based event handling from web-patch-events.
|
|
282
|
+
*/
|
|
283
|
+
declare function patchProp(el: Element, key: string, prevValue: unknown, nextValue: unknown, isSVG?: boolean): void;
|
|
284
|
+
|
|
285
|
+
/**
|
|
286
|
+
* @lytjs/adapter-web - Extended Web Host
|
|
287
|
+
*
|
|
288
|
+
* 扩展 RendererHost 接口,添加更多宿主能力支持
|
|
289
|
+
* (merged from @lytjs/host)
|
|
290
|
+
*
|
|
291
|
+
* @module @lytjs/adapter-web
|
|
292
|
+
* @version 6.0.0
|
|
293
|
+
*/
|
|
294
|
+
|
|
295
|
+
/**
|
|
296
|
+
* 扩展的 RendererHost 接口
|
|
297
|
+
* 在基础 RendererHost 上添加了更多宿主操作方法
|
|
298
|
+
*/
|
|
299
|
+
interface ExtendedRendererHost<HN = unknown, HE extends HN = HN> extends RendererHost<HN, HE> {
|
|
300
|
+
/**
|
|
301
|
+
* 在父节点的指定子节点之前插入新子节点
|
|
302
|
+
* 如果 referenceNode 为 null,则在末尾追加
|
|
303
|
+
*
|
|
304
|
+
* @param parent - 父节点
|
|
305
|
+
* @param newChild - 要插入的新子节点
|
|
306
|
+
* @param referenceNode - 参考子节点,新节点将插入其之前
|
|
307
|
+
*
|
|
308
|
+
* @example
|
|
309
|
+
* ```ts
|
|
310
|
+
* // 在 child2 之前插入 newChild
|
|
311
|
+
* host.insertBefore(parent, newChild, child2)
|
|
312
|
+
* // parent 的子节点顺序: [child1, newChild, child2, child3]
|
|
313
|
+
* ```
|
|
314
|
+
*/
|
|
315
|
+
insertBefore(parent: HN, newChild: HN, referenceNode: HN | null): void;
|
|
316
|
+
/**
|
|
317
|
+
* 替换父节点中的子节点
|
|
318
|
+
*
|
|
319
|
+
* @param parent - 父节点
|
|
320
|
+
* @param newChild - 新子节点
|
|
321
|
+
* @param oldChild - 要被替换的旧子节点
|
|
322
|
+
* @returns 被替换的旧子节点
|
|
323
|
+
*
|
|
324
|
+
* @example
|
|
325
|
+
* ```ts
|
|
326
|
+
* // 用 newChild 替换 oldChild
|
|
327
|
+
* host.replaceChild(parent, newChild, oldChild)
|
|
328
|
+
* ```
|
|
329
|
+
*/
|
|
330
|
+
replaceChild(parent: HN, newChild: HN, oldChild: HN): HN;
|
|
331
|
+
/**
|
|
332
|
+
* 获取元素的第一个子节点
|
|
333
|
+
*
|
|
334
|
+
* @param node - 宿主节点
|
|
335
|
+
* @returns 第一个子节点,如果没有则返回 null
|
|
336
|
+
*/
|
|
337
|
+
firstChild?(node: HN): HN | null;
|
|
338
|
+
/**
|
|
339
|
+
* 获取元素的最后一个子节点
|
|
340
|
+
*
|
|
341
|
+
* @param node - 宿主节点
|
|
342
|
+
* @returns 最后一个子节点,如果没有则返回 null
|
|
343
|
+
*/
|
|
344
|
+
lastChild?(node: HN): HN | null;
|
|
345
|
+
/**
|
|
346
|
+
* 检查一个节点是否包含另一个节点
|
|
347
|
+
*
|
|
348
|
+
* @param parent - 父节点
|
|
349
|
+
* @param child - 子节点
|
|
350
|
+
* @returns 如果包含则返回 true
|
|
351
|
+
*/
|
|
352
|
+
contains?(parent: HN, child: HN): boolean;
|
|
353
|
+
/**
|
|
354
|
+
* 获取元素的所有属性名
|
|
355
|
+
*
|
|
356
|
+
* @param el - 宿主元素
|
|
357
|
+
* @returns 属性名数组
|
|
358
|
+
*/
|
|
359
|
+
getAttributeNames?(el: HE): string[];
|
|
360
|
+
/**
|
|
361
|
+
* 批量设置属性
|
|
362
|
+
*
|
|
363
|
+
* @param el - 宿主元素
|
|
364
|
+
* @param attrs - 属性键值对
|
|
365
|
+
*/
|
|
366
|
+
setAttributes?(el: HE, attrs: Record<string, unknown>): void;
|
|
367
|
+
/**
|
|
368
|
+
* 批量移除属性
|
|
369
|
+
*
|
|
370
|
+
* @param el - 宿主元素
|
|
371
|
+
* @param keys - 要移除的属性名数组
|
|
372
|
+
*/
|
|
373
|
+
removeAttributes?(el: HE, keys: string[]): void;
|
|
374
|
+
/**
|
|
375
|
+
* 批量设置样式
|
|
376
|
+
*
|
|
377
|
+
* @param el - 宿主元素
|
|
378
|
+
* @param styles - 样式键值对
|
|
379
|
+
*/
|
|
380
|
+
setStyles?(el: HE, styles: Record<string, string | null | undefined>): void;
|
|
381
|
+
/**
|
|
382
|
+
* 获取元素的所有 CSS 类名
|
|
383
|
+
*
|
|
384
|
+
* @param el - 宿主元素
|
|
385
|
+
* @returns 类名数组
|
|
386
|
+
*/
|
|
387
|
+
getClassList?(el: HE): string[];
|
|
388
|
+
/**
|
|
389
|
+
* 切换 CSS 类名
|
|
390
|
+
*
|
|
391
|
+
* @param el - 宿主元素
|
|
392
|
+
* @param cls - 类名
|
|
393
|
+
* @param force - 如果为 true 则添加,false 则移除,省略则切换
|
|
394
|
+
* @returns 操作后类名是否存在
|
|
395
|
+
*/
|
|
396
|
+
toggleClass?(el: HE, cls: string, force?: boolean): boolean;
|
|
397
|
+
/**
|
|
398
|
+
* 触发/分派事件
|
|
399
|
+
*
|
|
400
|
+
* @param el - 宿主元素
|
|
401
|
+
* @param event - 事件名或事件对象
|
|
402
|
+
* @param detail - 自定义事件详情数据
|
|
403
|
+
* @returns 事件是否被取消
|
|
404
|
+
*/
|
|
405
|
+
dispatchEvent?(el: HE, event: string | HostEvent, detail?: unknown): boolean;
|
|
406
|
+
/**
|
|
407
|
+
* 一次性事件监听
|
|
408
|
+
*
|
|
409
|
+
* @param el - 宿主元素
|
|
410
|
+
* @param event - 事件名
|
|
411
|
+
* @param handler - 事件处理器
|
|
412
|
+
* @param options - 监听选项
|
|
413
|
+
*/
|
|
414
|
+
onceEventListener?(el: HE, event: string, handler: HostEventHandler, options?: HostEventOptions): () => void;
|
|
415
|
+
/**
|
|
416
|
+
* 查询所有匹配选择器的元素
|
|
417
|
+
*
|
|
418
|
+
* @param selector - CSS 选择器
|
|
419
|
+
* @param context - 查询上下文(默认为 document)
|
|
420
|
+
* @returns 匹配的元素数组
|
|
421
|
+
*/
|
|
422
|
+
querySelectorAll?(selector: string, context?: HN): HE[];
|
|
423
|
+
/**
|
|
424
|
+
* 通过 ID 获取元素
|
|
425
|
+
*
|
|
426
|
+
* @param id - 元素 ID
|
|
427
|
+
* @returns 元素或 null
|
|
428
|
+
*/
|
|
429
|
+
getElementById?(id: string): HE | null;
|
|
430
|
+
/**
|
|
431
|
+
* 通过类名获取元素
|
|
432
|
+
*
|
|
433
|
+
* @param className - 类名
|
|
434
|
+
* @param context - 查询上下文
|
|
435
|
+
* @returns 元素数组
|
|
436
|
+
*/
|
|
437
|
+
getElementsByClassName?(className: string, context?: HN): HE[];
|
|
438
|
+
/**
|
|
439
|
+
* 通过标签名获取元素
|
|
440
|
+
*
|
|
441
|
+
* @param tag - 标签名
|
|
442
|
+
* @param context - 查询上下文
|
|
443
|
+
* @returns 元素数组
|
|
444
|
+
*/
|
|
445
|
+
getElementsByTagName?(tag: string, context?: HN): HE[];
|
|
446
|
+
/**
|
|
447
|
+
* 滚动元素到视图
|
|
448
|
+
*
|
|
449
|
+
* @param el - 宿主元素
|
|
450
|
+
* @param options - 滚动选项
|
|
451
|
+
*/
|
|
452
|
+
scrollIntoView?(el: HE, options?: {
|
|
453
|
+
behavior?: 'auto' | 'smooth';
|
|
454
|
+
block?: 'start' | 'center' | 'end' | 'nearest';
|
|
455
|
+
inline?: 'start' | 'center' | 'end' | 'nearest';
|
|
456
|
+
}): void;
|
|
457
|
+
/**
|
|
458
|
+
* 获取元素的滚动位置
|
|
459
|
+
*
|
|
460
|
+
* @param el - 宿主元素(null 表示 document)
|
|
461
|
+
* @returns 滚动位置
|
|
462
|
+
*/
|
|
463
|
+
getScrollPosition?(el?: HE | null): {
|
|
464
|
+
scrollLeft: number;
|
|
465
|
+
scrollTop: number;
|
|
466
|
+
};
|
|
467
|
+
/**
|
|
468
|
+
* 设置元素的滚动位置
|
|
469
|
+
*
|
|
470
|
+
* @param el - 宿主元素(null 表示 document)
|
|
471
|
+
* @param left - 水平滚动位置
|
|
472
|
+
* @param top - 垂直滚动位置
|
|
473
|
+
*/
|
|
474
|
+
setScrollPosition?(el: HE | null, left: number, top: number): void;
|
|
475
|
+
/**
|
|
476
|
+
* 获取元素的尺寸信息
|
|
477
|
+
*
|
|
478
|
+
* @param el - 宿主元素
|
|
479
|
+
* @returns 尺寸信息
|
|
480
|
+
*/
|
|
481
|
+
getElementSize?(el: HE): {
|
|
482
|
+
width: number;
|
|
483
|
+
height: number;
|
|
484
|
+
clientWidth: number;
|
|
485
|
+
clientHeight: number;
|
|
486
|
+
scrollWidth: number;
|
|
487
|
+
scrollHeight: number;
|
|
488
|
+
};
|
|
489
|
+
/**
|
|
490
|
+
* 获取元素相对于视口的位置
|
|
491
|
+
*
|
|
492
|
+
* @param el - 宿主元素
|
|
493
|
+
* @returns 位置信息
|
|
494
|
+
*/
|
|
495
|
+
getElementOffset?(el: HE): {
|
|
496
|
+
left: number;
|
|
497
|
+
top: number;
|
|
498
|
+
};
|
|
499
|
+
}
|
|
500
|
+
/**
|
|
501
|
+
* 宿主能力标志
|
|
502
|
+
*/
|
|
503
|
+
interface HostCapabilities {
|
|
504
|
+
/** 支持 Shadow DOM */
|
|
505
|
+
shadowDOM: boolean;
|
|
506
|
+
/** 支持自定义元素 */
|
|
507
|
+
customElements: boolean;
|
|
508
|
+
/** 支持插槽(Slot) */
|
|
509
|
+
slots: boolean;
|
|
510
|
+
/** 支持模板(Template) */
|
|
511
|
+
template: boolean;
|
|
512
|
+
/** 支持 CSS 变量 */
|
|
513
|
+
cssVariables: boolean;
|
|
514
|
+
/** 支持 ResizeObserver */
|
|
515
|
+
resizeObserver: boolean;
|
|
516
|
+
/** 支持 IntersectionObserver */
|
|
517
|
+
intersectionObserver: boolean;
|
|
518
|
+
/** 支持 MutationObserver */
|
|
519
|
+
mutationObserver: boolean;
|
|
520
|
+
/** 支持 Web Animations API */
|
|
521
|
+
webAnimations: boolean;
|
|
522
|
+
/** 支持 CSS 动画 */
|
|
523
|
+
cssAnimations: boolean;
|
|
524
|
+
/** 支持 CSS 过渡 */
|
|
525
|
+
cssTransitions: boolean;
|
|
526
|
+
}
|
|
527
|
+
/**
|
|
528
|
+
* 检测宿主环境的能力
|
|
529
|
+
*
|
|
530
|
+
* @returns 宿主能力标志对象
|
|
531
|
+
* @example
|
|
532
|
+
* ```ts
|
|
533
|
+
* const caps = detectHostCapabilities()
|
|
534
|
+
* if (caps.shadowDOM) {
|
|
535
|
+
* // 使用 Shadow DOM
|
|
536
|
+
* }
|
|
537
|
+
* ```
|
|
538
|
+
*/
|
|
539
|
+
declare function detectHostCapabilities(): HostCapabilities;
|
|
540
|
+
/**
|
|
541
|
+
* 创建扩展宿主适配器的选项
|
|
542
|
+
*/
|
|
543
|
+
interface CreateExtendedHostOptions {
|
|
544
|
+
/** 基础宿主实现 */
|
|
545
|
+
baseHost: RendererHost;
|
|
546
|
+
/** 是否启用扩展的节点操作 */
|
|
547
|
+
enableExtendedNodeOps?: boolean;
|
|
548
|
+
/** 是否启用扩展的查询操作 */
|
|
549
|
+
enableExtendedQuery?: boolean;
|
|
550
|
+
/** 是否启用扩展的滚动操作 */
|
|
551
|
+
enableExtendedScroll?: boolean;
|
|
552
|
+
}
|
|
553
|
+
/**
|
|
554
|
+
* 为 Web DOM 环境创建扩展宿主适配器
|
|
555
|
+
*
|
|
556
|
+
* @param options - 创建选项
|
|
557
|
+
* @returns 扩展的宿主适配器
|
|
558
|
+
*/
|
|
559
|
+
declare function createExtendedWebHost(options: CreateExtendedHostOptions): ExtendedRendererHost<Node, Element>;
|
|
560
|
+
declare function supportsHostCapability(capability: keyof HostCapabilities): boolean;
|
|
561
|
+
/**
|
|
562
|
+
* 等待宿主环境就绪
|
|
563
|
+
*
|
|
564
|
+
* @returns Promise
|
|
565
|
+
*/
|
|
566
|
+
declare function waitForHostReady(): Promise<void>;
|
|
567
|
+
|
|
568
|
+
/**
|
|
569
|
+
* @lytjs/adapter-web - Web Platform Adapter
|
|
570
|
+
* L3 Web 平台适配器,提供浏览器 DOM 的 RendererHost 实现。
|
|
571
|
+
*
|
|
572
|
+
* 所有 DOM API 调用集中在此包内,不泄漏到 L1/L2。
|
|
573
|
+
*/
|
|
574
|
+
|
|
575
|
+
/**
|
|
576
|
+
* 创建 Web 平台的 RendererHost 实例。
|
|
577
|
+
* 便捷工厂函数,等价于 `new WebRendererHost()`。
|
|
578
|
+
*/
|
|
579
|
+
declare function createWebHost(): RendererHost<Node, Element>;
|
|
580
|
+
|
|
581
|
+
export { type CreateExtendedHostOptions, type DOMRenderer, type EventInvoker, type ExtendedRendererHost, type HostCapabilities, type HydrationRenderer, type ParsedEvent, WebRendererHost, createDOMRenderer, createExtendedWebHost, createHydrationFunctions, createInvoker, createWebHost, detectHostCapabilities, patchEvent, patchProp, removeAllEventListeners, supportsHostCapability, waitForHostReady, wrapDOMEvent };
|