@lytjs/renderer 3.1.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.
Files changed (48) hide show
  1. package/dist/index.cjs +8 -0
  2. package/dist/index.d.mts +5 -0
  3. package/dist/index.mjs +8 -0
  4. package/dist/types/create-renderer.d.ts +20 -0
  5. package/dist/types/create-renderer.d.ts.map +1 -0
  6. package/dist/types/dom/dom-ops.d.ts +74 -0
  7. package/dist/types/dom/dom-ops.d.ts.map +1 -0
  8. package/dist/types/dom/dom-renderer.d.ts +243 -0
  9. package/dist/types/dom/dom-renderer.d.ts.map +1 -0
  10. package/dist/types/dom/patch-events.d.ts +123 -0
  11. package/dist/types/dom/patch-events.d.ts.map +1 -0
  12. package/dist/types/dom/patch-props.d.ts +148 -0
  13. package/dist/types/dom/patch-props.d.ts.map +1 -0
  14. package/dist/types/index.d.ts +48 -0
  15. package/dist/types/index.d.ts.map +1 -0
  16. package/dist/types/miniapp/index.d.ts +6 -0
  17. package/dist/types/miniapp/index.d.ts.map +1 -0
  18. package/dist/types/miniapp/miniapp-renderer.d.ts +269 -0
  19. package/dist/types/miniapp/miniapp-renderer.d.ts.map +1 -0
  20. package/dist/types/mount.d.ts +32 -0
  21. package/dist/types/mount.d.ts.map +1 -0
  22. package/dist/types/native/index.d.ts +6 -0
  23. package/dist/types/native/index.d.ts.map +1 -0
  24. package/dist/types/native/native-renderer.d.ts +249 -0
  25. package/dist/types/native/native-renderer.d.ts.map +1 -0
  26. package/dist/types/patch.d.ts +23 -0
  27. package/dist/types/patch.d.ts.map +1 -0
  28. package/dist/types/props.d.ts +19 -0
  29. package/dist/types/props.d.ts.map +1 -0
  30. package/dist/types/renderer-interfaces.d.ts +157 -0
  31. package/dist/types/renderer-interfaces.d.ts.map +1 -0
  32. package/dist/types/ssr/hydration.d.ts +282 -0
  33. package/dist/types/ssr/hydration.d.ts.map +1 -0
  34. package/dist/types/ssr/ssr-renderer.d.ts +292 -0
  35. package/dist/types/ssr/ssr-renderer.d.ts.map +1 -0
  36. package/dist/types/unmount.d.ts +16 -0
  37. package/dist/types/unmount.d.ts.map +1 -0
  38. package/dist/types/vapor/vapor-compiler.d.ts +67 -0
  39. package/dist/types/vapor/vapor-compiler.d.ts.map +1 -0
  40. package/dist/types/vapor/vapor-component.d.ts +48 -0
  41. package/dist/types/vapor/vapor-component.d.ts.map +1 -0
  42. package/dist/types/vapor/vapor-reactive.d.ts +109 -0
  43. package/dist/types/vapor/vapor-reactive.d.ts.map +1 -0
  44. package/dist/types/vapor/vapor-renderer.d.ts +133 -0
  45. package/dist/types/vapor/vapor-renderer.d.ts.map +1 -0
  46. package/dist/types/vnode.d.ts +134 -0
  47. package/dist/types/vnode.d.ts.map +1 -0
  48. package/package.json +43 -0
@@ -0,0 +1,269 @@
1
+ /**
2
+ * MiniAppRenderer - 小程序渲染器原型
3
+ *
4
+ * 将 VNode 编译为小程序模板描述(可用于微信/支付宝/字节跳动小程序)。
5
+ * 纯原生零依赖 TypeScript 实现。
6
+ *
7
+ * 设计思路:
8
+ * - 不直接操作 DOM,而是生成描述性的 MiniAppNode 树
9
+ * - MiniAppNode 可序列化为 WXML / AXML / TTML 模板字符串
10
+ * - 提供 Lyt.js 模板语法到小程序模板语法的转换
11
+ * - 支持条件渲染(wx:if / a:if / tt:if)、列表渲染(wx:for / a:for / tt:for)
12
+ */
13
+ import type { LytRenderer } from '../renderer-interfaces';
14
+ /**
15
+ * 小程序模板节点描述
16
+ *
17
+ * 描述一棵小程序模板组件树,可序列化为各平台模板字符串。
18
+ */
19
+ export interface MiniAppNode {
20
+ /** 标签名(如 'view', 'text', 'image') */
21
+ tag: string;
22
+ /** 属性集合 */
23
+ attrs: Record<string, string>;
24
+ /** 子节点列表 */
25
+ children: MiniAppNode[];
26
+ /** 文本内容(文本节点使用) */
27
+ text?: string;
28
+ /** wx:if 条件表达式 */
29
+ wxIf?: string;
30
+ /** wx:for 列表数据源 */
31
+ wxFor?: string;
32
+ /** wx:key 列表项标识 */
33
+ wxForKey?: string;
34
+ /** 绑定事件(如 bindtap="handleTap") */
35
+ bindEvents: Record<string, string>;
36
+ /** 双向绑定(如 model:value="name") */
37
+ modelBindings: Record<string, string>;
38
+ /** 父节点引用(内部使用,不序列化) */
39
+ _parent?: MiniAppNode;
40
+ }
41
+ /**
42
+ * MiniAppRenderer - 小程序渲染器
43
+ *
44
+ * 实现 LytRenderer 接口,将 VNode 映射为小程序模板描述树。
45
+ * 不依赖任何外部库,纯 TypeScript 实现。
46
+ *
47
+ * 使用示例:
48
+ * ```ts
49
+ * import { miniAppRenderer } from './miniapp/miniapp-renderer'
50
+ *
51
+ * // 创建小程序节点
52
+ * const view = miniAppRenderer.createElement('div')
53
+ * miniAppRenderer.setAttribute(view, 'class', 'container')
54
+ *
55
+ * const text = miniAppRenderer.createText('Hello MiniApp')
56
+ * miniAppRenderer.insert(view, text)
57
+ *
58
+ * // 序列化为 WXML(微信小程序模板)
59
+ * const wxml = miniAppRenderer.serializeToWXML(view)
60
+ * ```
61
+ */
62
+ export declare class MiniAppRenderer implements LytRenderer {
63
+ /**
64
+ * 创建小程序元素节点
65
+ * @param tag HTML 标签名(如 'div', 'span')
66
+ * @returns MiniAppNode 描述对象
67
+ */
68
+ createElement(tag: string): MiniAppNode;
69
+ /**
70
+ * 创建文本节点
71
+ * @param text 文本内容
72
+ * @returns tag 为 '__text__' 的 MiniAppNode
73
+ */
74
+ createText(text: string): MiniAppNode;
75
+ /**
76
+ * 创建注释节点
77
+ * @param text 注释内容
78
+ * @returns tag 为 '__comment__' 的 MiniAppNode
79
+ */
80
+ createComment(text: string): MiniAppNode;
81
+ /**
82
+ * 设置元素属性
83
+ * @param el 小程序节点
84
+ * @param key 属性名
85
+ * @param val 属性值
86
+ */
87
+ setAttribute(el: MiniAppNode, key: string, val: any): void;
88
+ /**
89
+ * 移除元素属性
90
+ * @param el 小程序节点
91
+ * @param key 属性名
92
+ */
93
+ removeAttribute(el: MiniAppNode, key: string): void;
94
+ /**
95
+ * 设置元素样式
96
+ * @param el 小程序节点
97
+ * @param style 样式对象
98
+ */
99
+ setStyle(el: MiniAppNode, style: object): void;
100
+ /**
101
+ * 设置元素 class
102
+ * @param el 小程序节点
103
+ * @param cls class 值(字符串或对象)
104
+ */
105
+ setClass(el: MiniAppNode, cls: string | object): void;
106
+ /**
107
+ * 插入子节点
108
+ * @param parent 父节点
109
+ * @param child 子节点
110
+ * @param ref 参考节点(插入到其前面),可选
111
+ */
112
+ insert(parent: MiniAppNode, child: MiniAppNode, ref?: MiniAppNode): void;
113
+ /**
114
+ * 移除节点
115
+ * @param child 要移除的节点
116
+ */
117
+ remove(child: MiniAppNode): void;
118
+ /**
119
+ * 替换子节点
120
+ * @param parent 父节点
121
+ * @param oldChild 被替换的旧节点
122
+ * @param newChild 替换的新节点
123
+ */
124
+ replace(parent: MiniAppNode, oldChild: MiniAppNode, newChild: MiniAppNode): void;
125
+ /**
126
+ * 添加事件监听器
127
+ * @param el 小程序节点
128
+ * @param event DOM 事件名(如 'click')
129
+ * @param handler 事件处理函数
130
+ * @param options 事件选项(可选)
131
+ */
132
+ addEventListener(el: MiniAppNode, event: string, handler: Function, options?: any): void;
133
+ /**
134
+ * 移除事件监听器
135
+ * @param el 小程序节点
136
+ * @param event DOM 事件名
137
+ * @param handler 事件处理函数
138
+ */
139
+ removeEventListener(el: MiniAppNode, event: string, handler: Function): void;
140
+ /**
141
+ * 在下一个微任务中执行回调
142
+ * @param cb 回调函数
143
+ */
144
+ nextTick(cb: Function): void;
145
+ /**
146
+ * 获取父节点
147
+ * @param el 小程序节点
148
+ * @returns 父节点,无父节点时返回 null
149
+ */
150
+ parentNode(el: MiniAppNode): MiniAppNode | null;
151
+ /**
152
+ * 获取下一个兄弟节点
153
+ * @param el 小程序节点
154
+ * @returns 下一个兄弟节点,无时返回 null
155
+ */
156
+ nextSibling(el: MiniAppNode): MiniAppNode | null;
157
+ /**
158
+ * 设置文本节点内容
159
+ * @param node 文本节点
160
+ * @param text 文本内容
161
+ */
162
+ setText(node: MiniAppNode, text: string): void;
163
+ /**
164
+ * 更新元素属性(diff 算法调用)
165
+ *
166
+ * @param el 小程序节点
167
+ * @param key 属性名
168
+ * @param prevValue 旧属性值
169
+ * @param nextValue 新属性值
170
+ */
171
+ patchProp(el: MiniAppNode, key: string, prevValue: any, nextValue: any): void;
172
+ /**
173
+ * 查询选择器(原型简化实现)
174
+ * @param selector CSS 选择器
175
+ * @returns 匹配的第一个节点,未找到返回 null
176
+ */
177
+ querySelector(selector: string): MiniAppNode | null;
178
+ /**
179
+ * 将 VNode 树转换为小程序节点树
180
+ *
181
+ * 递归遍历 VNode,将每个节点转换为对应的 MiniAppNode 描述。
182
+ *
183
+ * @param vnode VNode 对象
184
+ * @returns MiniAppNode 树
185
+ */
186
+ renderToMiniAppTree(vnode: any): MiniAppNode;
187
+ /**
188
+ * 序列化为 WXML(微信小程序模板)
189
+ *
190
+ * @param node 小程序节点
191
+ * @param indent 缩进级别(默认 0)
192
+ * @returns WXML 模板字符串
193
+ */
194
+ serializeToWXML(node: MiniAppNode, indent?: number): string;
195
+ /**
196
+ * 序列化为 AXML(支付宝小程序模板)
197
+ *
198
+ * @param node 小程序节点
199
+ * @param indent 缩进级别(默认 0)
200
+ * @returns AXML 模板字符串
201
+ */
202
+ serializeToAXML(node: MiniAppNode, indent?: number): string;
203
+ /**
204
+ * 序列化为 TTML(字节跳动小程序模板)
205
+ *
206
+ * @param node 小程序节点
207
+ * @param indent 缩进级别(默认 0)
208
+ * @returns TTML 模板字符串
209
+ */
210
+ serializeToTTML(node: MiniAppNode, indent?: number): string;
211
+ /**
212
+ * 根据平台获取模板字符串
213
+ *
214
+ * @param node 小程序节点
215
+ * @param platform 平台标识:'wechat' | 'alipay' | 'bytedance'
216
+ * @returns 对应平台的模板字符串
217
+ */
218
+ getPlatformTemplate(node: MiniAppNode, platform: 'wechat' | 'alipay' | 'bytedance'): string;
219
+ /**
220
+ * 将 Lyt.js 指令映射为小程序模板属性
221
+ *
222
+ * @param lytDirective Lyt.js 指令名(如 'if', 'each')
223
+ * @param value 指令值
224
+ * @param platform 平台标识
225
+ * @returns 小程序模板属性字符串(如 'wx:if="{{condition}}"')
226
+ */
227
+ mapDirective(lytDirective: string, value: string, platform?: string): string;
228
+ /**
229
+ * 将 Lyt.js 事件映射为小程序事件绑定
230
+ *
231
+ * @param lytEvent Lyt.js 事件名(如 'click')
232
+ * @param platform 平台标识
233
+ * @returns 小程序事件绑定字符串(如 'bindtap')
234
+ */
235
+ mapEvent(lytEvent: string, platform?: string): string;
236
+ /**
237
+ * 应用 Lyt.js 指令到节点
238
+ */
239
+ private _applyDirective;
240
+ /**
241
+ * 将样式对象转换为内联样式字符串
242
+ */
243
+ private _styleObjectToString;
244
+ /**
245
+ * 通用模板序列化方法
246
+ *
247
+ * @param node 小程序节点
248
+ * @param indent 缩进级别
249
+ * @param platform 平台标识
250
+ * @returns 模板字符串
251
+ */
252
+ private _serializeToTemplate;
253
+ }
254
+ /**
255
+ * 支持的小程序平台类型
256
+ */
257
+ export type MiniAppPlatform = 'wechat' | 'alipay' | 'bytedance';
258
+ /**
259
+ * 创建小程序渲染器实例
260
+ *
261
+ * 工厂函数,每次调用返回一个新的 MiniAppRenderer 实例。
262
+ * 适用于需要多个独立渲染器实例的场景。
263
+ *
264
+ * @returns MiniAppRenderer 实例
265
+ */
266
+ export declare function createMiniAppRenderer(): MiniAppRenderer;
267
+ /** 小程序渲染器单例 */
268
+ export declare const miniAppRenderer: MiniAppRenderer;
269
+ //# sourceMappingURL=miniapp-renderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"miniapp-renderer.d.ts","sourceRoot":"","sources":["../../../src/miniapp/miniapp-renderer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Lyt.js 渲染器 — 挂载逻辑
3
+ *
4
+ * 本模块包含 VNode 挂载相关的函数。
5
+ */
6
+ import type { LytRenderer } from './renderer-interfaces';
7
+ import type { VNode } from './vnode';
8
+ /**
9
+ * 挂载 VNode
10
+ */
11
+ export declare function mountVNode(renderer: LytRenderer, patchFn: PatchFn, vnode: VNode, container: any, anchor: any, parentComponent: any): void;
12
+ /**
13
+ * 挂载元素节点
14
+ */
15
+ export declare function mountElement(renderer: LytRenderer, patchFn: PatchFn, vnode: VNode, container: any, anchor: any, parentComponent: any): void;
16
+ /**
17
+ * 批量挂载子节点
18
+ */
19
+ export declare function mountChildren(patchFn: PatchFn, children: VNode[], container: any, anchor: any, parentComponent: any): void;
20
+ /**
21
+ * 挂载 Fragment
22
+ */
23
+ export declare function mountFragment(renderer: LytRenderer, patchFn: PatchFn, vnode: VNode, container: any, anchor: any, parentComponent: any): void;
24
+ /**
25
+ * 挂载组件(简化版)
26
+ */
27
+ export declare function mountComponent(patchFn: PatchFn, vnode: VNode, container: any, anchor: any, parentComponent: any): void;
28
+ /**
29
+ * Patch 函数类型签名
30
+ */
31
+ export type PatchFn = (n1: VNode | null, n2: VNode, container: any, anchor: any, parentComponent: any) => void;
32
+ //# sourceMappingURL=mount.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mount.d.ts","sourceRoot":"","sources":["../../src/mount.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AACxD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAIpC;;GAEG;AACH,wBAAgB,UAAU,CACxB,QAAQ,EAAE,WAAW,EACrB,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,KAAK,EACZ,SAAS,EAAE,GAAG,EACd,MAAM,EAAE,GAAG,EACX,eAAe,EAAE,GAAG,GACnB,IAAI,CAoCN;AAED;;GAEG;AACH,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,WAAW,EACrB,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,KAAK,EACZ,SAAS,EAAE,GAAG,EACd,MAAM,EAAE,GAAG,EACX,eAAe,EAAE,GAAG,GACnB,IAAI,CA0BN;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC3B,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,KAAK,EAAE,EACjB,SAAS,EAAE,GAAG,EACd,MAAM,EAAE,GAAG,EACX,eAAe,EAAE,GAAG,GACnB,IAAI,CAIN;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,WAAW,EACrB,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,KAAK,EACZ,SAAS,EAAE,GAAG,EACd,MAAM,EAAE,GAAG,EACX,eAAe,EAAE,GAAG,GACnB,IAAI,CAcN;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,KAAK,EACZ,SAAS,EAAE,GAAG,EACd,MAAM,EAAE,GAAG,EACX,eAAe,EAAE,GAAG,GACnB,IAAI,CAWN;AAED;;GAEG;AACH,MAAM,MAAM,OAAO,GAAG,CACpB,EAAE,EAAE,KAAK,GAAG,IAAI,EAChB,EAAE,EAAE,KAAK,EACT,SAAS,EAAE,GAAG,EACd,MAAM,EAAE,GAAG,EACX,eAAe,EAAE,GAAG,KACjB,IAAI,CAAA"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * 移动端渲染器 — 统一导出
3
+ */
4
+ export { NativeRenderer, nativeRenderer, createNativeRenderer } from './native-renderer';
5
+ export type { NativeNode, LytRendererPlatform } from './native-renderer';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/native/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAA;AACxF,YAAY,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAA"}
@@ -0,0 +1,249 @@
1
+ /**
2
+ * NativeRenderer - 移动端渲染器原型
3
+ *
4
+ * 将 VNode 映射为原生组件描述对象(可用于 React Native / Flutter / 原生 SDK 桥接)。
5
+ * 纯原生零依赖 TypeScript 实现。
6
+ *
7
+ * 设计思路:
8
+ * - 不直接操作 DOM,而是生成描述性的 NativeNode 树
9
+ * - NativeNode 可序列化为 JSON,通过 JS Bridge 传递给原生端
10
+ * - 提供 HTML 标签到原生组件的映射、CSS 样式到原生样式的转换
11
+ */
12
+ import type { LytRenderer } from '../renderer-interfaces';
13
+ /**
14
+ * LytRendererPlatform 标准接口
15
+ *
16
+ * 所有平台渲染器必须实现此接口。
17
+ * 定义了渲染器与虚拟 DOM diff 算法对接所需的最小操作集。
18
+ */
19
+ export interface LytRendererPlatform {
20
+ createElement(tag: string): any;
21
+ createText(text: string): any;
22
+ createComment(text: string): any;
23
+ insert(child: any, parent: any, anchor?: any): void;
24
+ remove(child: any): void;
25
+ patchProp(el: any, key: string, prevValue: any, nextValue: any): void;
26
+ parentNode(child: any): any | null;
27
+ nextSibling(child: any): any | null;
28
+ setText(node: any, text: string): void;
29
+ }
30
+ /**
31
+ * 原生节点描述
32
+ *
33
+ * 描述一棵原生 UI 组件树,可序列化为 JSON 供原生端消费。
34
+ */
35
+ export interface NativeNode {
36
+ /** 原生组件类型(如 View, Text, Image) */
37
+ type: string;
38
+ /** 原生属性(包含样式、事件等) */
39
+ props: Record<string, any>;
40
+ /** 子节点列表 */
41
+ children: NativeNode[];
42
+ /** 原生视图标识,用于桥接时定位组件 */
43
+ nativeId?: string;
44
+ /** 父节点引用(内部使用,不序列化) */
45
+ _parent?: NativeNode;
46
+ }
47
+ /**
48
+ * NativeRenderer - 移动端渲染器
49
+ *
50
+ * 实现 LytRenderer 接口,将 VNode 映射为原生组件描述树。
51
+ * 不依赖任何外部库,纯 TypeScript 实现。
52
+ *
53
+ * 使用示例:
54
+ * ```ts
55
+ * import { nativeRenderer } from './native/native-renderer'
56
+ *
57
+ * // 创建原生节点
58
+ * const view = nativeRenderer.createElement('div')
59
+ * nativeRenderer.setAttribute(view, 'style', { flexDirection: 'row' })
60
+ *
61
+ * const text = nativeRenderer.createText('Hello Native')
62
+ * nativeRenderer.insert(view, text)
63
+ *
64
+ * // 序列化为 JSON(用于桥接传输)
65
+ * const json = nativeRenderer.serializeToJSON(view)
66
+ * ```
67
+ */
68
+ export declare class NativeRenderer implements LytRenderer {
69
+ /**
70
+ * 创建原生元素节点
71
+ * @param tag HTML 标签名(如 'div', 'span')
72
+ * @returns NativeNode 描述对象
73
+ */
74
+ createElement(tag: string): NativeNode;
75
+ /**
76
+ * 创建文本节点
77
+ * @param text 文本内容
78
+ * @returns 类型为 'RawText' 的 NativeNode
79
+ */
80
+ createText(text: string): NativeNode;
81
+ /**
82
+ * 创建注释节点
83
+ * @param text 注释内容
84
+ * @returns 类型为 '__Comment' 的 NativeNode(原生端通常忽略)
85
+ */
86
+ createComment(text: string): NativeNode;
87
+ /**
88
+ * 设置元素属性
89
+ * @param el 原生节点
90
+ * @param key 属性名
91
+ * @param val 属性值
92
+ */
93
+ setAttribute(el: NativeNode, key: string, val: any): void;
94
+ /**
95
+ * 移除元素属性
96
+ * @param el 原生节点
97
+ * @param key 属性名
98
+ */
99
+ removeAttribute(el: NativeNode, key: string): void;
100
+ /**
101
+ * 设置元素样式
102
+ * @param el 原生节点
103
+ * @param style 样式对象
104
+ */
105
+ setStyle(el: NativeNode, style: object): void;
106
+ /**
107
+ * 设置元素 class
108
+ * @param el 原生节点
109
+ * @param cls class 值(字符串或对象)
110
+ */
111
+ setClass(el: NativeNode, cls: string | object): void;
112
+ /**
113
+ * 插入子节点
114
+ * @param parent 父节点
115
+ * @param child 子节点
116
+ * @param ref 参考节点(插入到其前面),可选
117
+ */
118
+ insert(parent: NativeNode, child: NativeNode, ref?: NativeNode): void;
119
+ /**
120
+ * 移除节点
121
+ * @param child 要移除的节点
122
+ */
123
+ remove(child: NativeNode): void;
124
+ /**
125
+ * 替换子节点
126
+ * @param parent 父节点
127
+ * @param oldChild 被替换的旧节点
128
+ * @param newChild 替换的新节点
129
+ */
130
+ replace(parent: NativeNode, oldChild: NativeNode, newChild: NativeNode): void;
131
+ /**
132
+ * 添加事件监听器
133
+ * @param el 原生节点
134
+ * @param event DOM 事件名(如 'click')
135
+ * @param handler 事件处理函数
136
+ * @param options 事件选项(可选)
137
+ */
138
+ addEventListener(el: NativeNode, event: string, handler: Function, options?: any): void;
139
+ /**
140
+ * 移除事件监听器
141
+ * @param el 原生节点
142
+ * @param event DOM 事件名
143
+ * @param handler 事件处理函数
144
+ */
145
+ removeEventListener(el: NativeNode, event: string, handler: Function): void;
146
+ /**
147
+ * 在下一个微任务中执行回调
148
+ * @param cb 回调函数
149
+ */
150
+ nextTick(cb: Function): void;
151
+ /**
152
+ * 获取父节点
153
+ * @param el 原生节点
154
+ * @returns 父节点,无父节点时返回 null
155
+ */
156
+ parentNode(el: NativeNode): NativeNode | null;
157
+ /**
158
+ * 获取下一个兄弟节点
159
+ * @param el 原生节点
160
+ * @returns 下一个兄弟节点,无时返回 null
161
+ */
162
+ nextSibling(el: NativeNode): NativeNode | null;
163
+ /**
164
+ * 设置文本节点内容
165
+ * @param node 文本节点
166
+ * @param text 文本内容
167
+ */
168
+ setText(node: NativeNode, text: string): void;
169
+ /**
170
+ * 更新元素属性(diff 算法调用)
171
+ *
172
+ * 当 prevValue 为 null/undefined 时表示新增属性,
173
+ * 当 nextValue 为 null/undefined 时表示移除属性,
174
+ * 否则表示更新属性。
175
+ *
176
+ * @param el 原生节点
177
+ * @param key 属性名
178
+ * @param prevValue 旧属性值
179
+ * @param nextValue 新属性值
180
+ */
181
+ patchProp(el: NativeNode, key: string, prevValue: any, nextValue: any): void;
182
+ /**
183
+ * 查询选择器(原型简化实现)
184
+ * @param selector CSS 选择器(仅支持 tag 选择器)
185
+ * @returns 匹配的第一个节点,未找到返回 null
186
+ */
187
+ querySelector(selector: string): NativeNode | null;
188
+ /**
189
+ * 将 VNode 树转换为原生节点树
190
+ *
191
+ * 递归遍历 VNode,将每个节点转换为对应的 NativeNode 描述。
192
+ *
193
+ * @param vnode VNode 对象
194
+ * @returns NativeNode 树
195
+ */
196
+ renderToNativeTree(vnode: any): NativeNode;
197
+ /**
198
+ * 序列化 NativeNode 为 JSON 字符串
199
+ *
200
+ * 用于调试输出或通过 JS Bridge 传递给原生端。
201
+ * 序列化时会过滤掉内部字段(_parent)。
202
+ *
203
+ * @param node 原生节点
204
+ * @returns JSON 字符串
205
+ */
206
+ serializeToJSON(node: NativeNode): string;
207
+ /**
208
+ * 获取原生组件类型
209
+ *
210
+ * 将 HTML 标签名映射为原生组件类型名。
211
+ * 未在映射表中的标签会使用 PascalCase 转换。
212
+ *
213
+ * @param tag HTML 标签名
214
+ * @returns 原生组件类型名
215
+ */
216
+ getComponentType(tag: string): string;
217
+ /**
218
+ * CSS 样式转原生样式
219
+ *
220
+ * 将 CSS 样式对象转换为原生样式对象。
221
+ * 支持数值自动转换(如 '10px' → 10)。
222
+ *
223
+ * @param cssStyle CSS 样式对象
224
+ * @returns 原生样式对象
225
+ */
226
+ mapStyle(cssStyle: Record<string, string>): Record<string, any>;
227
+ /**
228
+ * DOM 事件转原生事件
229
+ *
230
+ * 将 Web DOM 事件名映射为原生平台事件名。
231
+ * 未在映射表中的事件会添加 'on' 前缀并首字母大写。
232
+ *
233
+ * @param domEvent DOM 事件名(如 'click')
234
+ * @returns 原生事件名(如 'onPress')
235
+ */
236
+ mapEvent(domEvent: string): string;
237
+ }
238
+ /**
239
+ * 创建原生渲染器实例
240
+ *
241
+ * 工厂函数,每次调用返回一个新的 NativeRenderer 实例。
242
+ * 适用于需要多个独立渲染器实例的场景。
243
+ *
244
+ * @returns NativeRenderer 实例
245
+ */
246
+ export declare function createNativeRenderer(): NativeRenderer;
247
+ /** 移动端渲染器单例 */
248
+ export declare const nativeRenderer: NativeRenderer;
249
+ //# sourceMappingURL=native-renderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"native-renderer.d.ts","sourceRoot":"","sources":["../../../src/native/native-renderer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Lyt.js 渲染器 — Patch 逻辑
3
+ *
4
+ * 本模块包含 VNode 对比更新的核心函数。
5
+ */
6
+ import type { LytRenderer } from './renderer-interfaces';
7
+ import type { VNode } from './vnode';
8
+ import { type PatchFn } from './mount';
9
+ /**
10
+ * Patch 主函数 — 对比新旧 VNode 并更新
11
+ *
12
+ * @param n1 旧 VNode(null 表示首次挂载)
13
+ * @param n2 新 VNode
14
+ * @param container 父容器
15
+ * @param anchor 插入锚点
16
+ * @param parentComponent 父组件实例
17
+ */
18
+ export declare function patch(renderer: LytRenderer, unmountFn: (vnode: VNode, container?: any) => void, n1: VNode | null, n2: VNode, container: any, anchor?: any, parentComponent?: any): void;
19
+ /**
20
+ * 创建一个绑定 renderer 和 unmountFn 的 patch 函数
21
+ */
22
+ export declare function createPatchFn(renderer: LytRenderer, unmountFn: (vnode: VNode, container?: any) => void): PatchFn;
23
+ //# sourceMappingURL=patch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"patch.d.ts","sourceRoot":"","sources":["../../src/patch.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AACxD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAGpC,OAAO,EAA6B,KAAK,OAAO,EAAE,MAAM,SAAS,CAAA;AAIjE;;;;;;;;GAQG;AACH,wBAAgB,KAAK,CACnB,QAAQ,EAAE,WAAW,EACrB,SAAS,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,CAAC,EAAE,GAAG,KAAK,IAAI,EAClD,EAAE,EAAE,KAAK,GAAG,IAAI,EAChB,EAAE,EAAE,KAAK,EACT,SAAS,EAAE,GAAG,EACd,MAAM,GAAE,GAAU,EAClB,eAAe,GAAE,GAAU,GAC1B,IAAI,CAmEN;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,WAAW,EACrB,SAAS,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,CAAC,EAAE,GAAG,KAAK,IAAI,GACjD,OAAO,CAIT"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Lyt.js 渲染器 — 属性处理
3
+ *
4
+ * 本模块包含属性挂载和更新的相关函数。
5
+ */
6
+ import type { LytRenderer } from './renderer-interfaces';
7
+ /**
8
+ * 挂载单个 prop
9
+ */
10
+ export declare function mountProp(renderer: LytRenderer, el: any, key: string, value: any): void;
11
+ /**
12
+ * 更新单个 prop
13
+ */
14
+ export declare function patchSingleProp(renderer: LytRenderer, el: any, key: string, newValue: any, oldValue: any): void;
15
+ /**
16
+ * 全量对比更新所有 props
17
+ */
18
+ export declare function patchAllProps(renderer: LytRenderer, el: any, oldProps: Record<string, any>, newProps: Record<string, any>): void;
19
+ //# sourceMappingURL=props.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"props.d.ts","sourceRoot":"","sources":["../../src/props.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AAExD;;GAEG;AACH,wBAAgB,SAAS,CACvB,QAAQ,EAAE,WAAW,EACrB,EAAE,EAAE,GAAG,EACP,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,GAAG,GACT,IAAI,CAgBN;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,WAAW,EACrB,EAAE,EAAE,GAAG,EACP,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,GAAG,EACb,QAAQ,EAAE,GAAG,GACZ,IAAI,CAmBN;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,WAAW,EACrB,EAAE,EAAE,GAAG,EACP,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC7B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAC5B,IAAI,CA6BN"}