@lytjs/adapter-web 6.5.0 → 6.7.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 -123
- package/dist/index.cjs +2 -10
- package/dist/index.mjs +3 -15
- package/package.json +10 -10
package/README.md
CHANGED
|
@@ -1,123 +1,123 @@
|
|
|
1
|
-
# @lytjs/adapter-web
|
|
2
|
-
|
|
3
|
-
> Web 平台适配器,提供 DOM 操作、事件处理、样式管理等 Web 平台特定功能
|
|
4
|
-
|
|
5
|
-
## 安装
|
|
6
|
-
|
|
7
|
-
```bash
|
|
8
|
-
npm install @lytjs/adapter-web
|
|
9
|
-
```
|
|
10
|
-
|
|
11
|
-
## 核心功能
|
|
12
|
-
|
|
13
|
-
### WebRendererHost
|
|
14
|
-
|
|
15
|
-
Web 平台渲染器宿主实现,提供 DOM 操作接口:
|
|
16
|
-
|
|
17
|
-
```typescript
|
|
18
|
-
import { WebRendererHost } from '@lytjs/adapter-web';
|
|
19
|
-
|
|
20
|
-
const host = new WebRendererHost();
|
|
21
|
-
|
|
22
|
-
// 创建元素
|
|
23
|
-
const div = host.createElement('div');
|
|
24
|
-
|
|
25
|
-
// 设置文本
|
|
26
|
-
host.setText(div, 'Hello World');
|
|
27
|
-
|
|
28
|
-
// 插入子节点
|
|
29
|
-
host.insert(child, parent, null);
|
|
30
|
-
|
|
31
|
-
// 移除节点
|
|
32
|
-
host.remove(child);
|
|
33
|
-
```
|
|
34
|
-
|
|
35
|
-
### createDOMRenderer
|
|
36
|
-
|
|
37
|
-
创建 DOM 渲染器实例:
|
|
38
|
-
|
|
39
|
-
```typescript
|
|
40
|
-
import { createDOMRenderer } from '@lytjs/adapter-web';
|
|
41
|
-
|
|
42
|
-
const renderer = createDOMRenderer();
|
|
43
|
-
|
|
44
|
-
// 渲染 VNode 到容器
|
|
45
|
-
renderer.mount(vnode, document.getElementById('app'));
|
|
46
|
-
|
|
47
|
-
// 更新渲染
|
|
48
|
-
renderer.patch(oldVnode, newVnode);
|
|
49
|
-
|
|
50
|
-
// 卸载
|
|
51
|
-
renderer.unmount(vnode);
|
|
52
|
-
```
|
|
53
|
-
|
|
54
|
-
### DOM 操作工具
|
|
55
|
-
|
|
56
|
-
```typescript
|
|
57
|
-
import {
|
|
58
|
-
createElement,
|
|
59
|
-
createTextNode,
|
|
60
|
-
createComment,
|
|
61
|
-
setText,
|
|
62
|
-
setStyle,
|
|
63
|
-
addClass,
|
|
64
|
-
removeClass,
|
|
65
|
-
} from '@lytjs/adapter-web';
|
|
66
|
-
|
|
67
|
-
// 创建元素
|
|
68
|
-
const el = createElement('div');
|
|
69
|
-
|
|
70
|
-
// 设置样式
|
|
71
|
-
setStyle(el, { color: 'red', fontSize: '14px' });
|
|
72
|
-
|
|
73
|
-
// 操作 class
|
|
74
|
-
addClass(el, 'container');
|
|
75
|
-
removeClass(el, 'old-class');
|
|
76
|
-
```
|
|
77
|
-
|
|
78
|
-
### 事件处理
|
|
79
|
-
|
|
80
|
-
```typescript
|
|
81
|
-
import { addEventListener, removeEventListener, removeAllEventListeners } from '@lytjs/adapter-web';
|
|
82
|
-
|
|
83
|
-
// 添加事件监听
|
|
84
|
-
const cleanup = addEventListener(el, 'click', (e) => {
|
|
85
|
-
console.log('clicked');
|
|
86
|
-
});
|
|
87
|
-
|
|
88
|
-
// 移除事件监听
|
|
89
|
-
cleanup();
|
|
90
|
-
|
|
91
|
-
// 移除元素上所有事件监听
|
|
92
|
-
removeAllEventListeners(el);
|
|
93
|
-
```
|
|
94
|
-
|
|
95
|
-
### 属性操作
|
|
96
|
-
|
|
97
|
-
```typescript
|
|
98
|
-
import { patchAttr, patchClass, patchStyle, patchProp } from '@lytjs/adapter-web';
|
|
99
|
-
|
|
100
|
-
// 设置属性
|
|
101
|
-
patchAttr(el, 'id', 'my-id');
|
|
102
|
-
|
|
103
|
-
// 设置 class
|
|
104
|
-
patchClass(el, 'class-a class-b');
|
|
105
|
-
|
|
106
|
-
// 设置样式
|
|
107
|
-
patchStyle(el, { color: 'blue' }, { color: 'red' });
|
|
108
|
-
|
|
109
|
-
// 设置 DOM 属性
|
|
110
|
-
patchProp(el, 'value', 'new value', 'old value');
|
|
111
|
-
```
|
|
112
|
-
|
|
113
|
-
## 类型定义
|
|
114
|
-
|
|
115
|
-
```typescript
|
|
116
|
-
import type { WebRendererHost, DOMRenderer, RendererOptions } from '@lytjs/adapter-web';
|
|
117
|
-
```
|
|
118
|
-
|
|
119
|
-
## 相关包
|
|
120
|
-
|
|
121
|
-
- [@lytjs/renderer](../renderer) - 渲染器实现
|
|
122
|
-
- [@lytjs/vdom](../vdom) - 虚拟 DOM
|
|
123
|
-
- [@lytjs/dom](../dom) - DOM 平台封装
|
|
1
|
+
# @lytjs/adapter-web
|
|
2
|
+
|
|
3
|
+
> Web 平台适配器,提供 DOM 操作、事件处理、样式管理等 Web 平台特定功能
|
|
4
|
+
|
|
5
|
+
## 安装
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install @lytjs/adapter-web
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## 核心功能
|
|
12
|
+
|
|
13
|
+
### WebRendererHost
|
|
14
|
+
|
|
15
|
+
Web 平台渲染器宿主实现,提供 DOM 操作接口:
|
|
16
|
+
|
|
17
|
+
```typescript
|
|
18
|
+
import { WebRendererHost } from '@lytjs/adapter-web';
|
|
19
|
+
|
|
20
|
+
const host = new WebRendererHost();
|
|
21
|
+
|
|
22
|
+
// 创建元素
|
|
23
|
+
const div = host.createElement('div');
|
|
24
|
+
|
|
25
|
+
// 设置文本
|
|
26
|
+
host.setText(div, 'Hello World');
|
|
27
|
+
|
|
28
|
+
// 插入子节点
|
|
29
|
+
host.insert(child, parent, null);
|
|
30
|
+
|
|
31
|
+
// 移除节点
|
|
32
|
+
host.remove(child);
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
### createDOMRenderer
|
|
36
|
+
|
|
37
|
+
创建 DOM 渲染器实例:
|
|
38
|
+
|
|
39
|
+
```typescript
|
|
40
|
+
import { createDOMRenderer } from '@lytjs/adapter-web';
|
|
41
|
+
|
|
42
|
+
const renderer = createDOMRenderer();
|
|
43
|
+
|
|
44
|
+
// 渲染 VNode 到容器
|
|
45
|
+
renderer.mount(vnode, document.getElementById('app'));
|
|
46
|
+
|
|
47
|
+
// 更新渲染
|
|
48
|
+
renderer.patch(oldVnode, newVnode);
|
|
49
|
+
|
|
50
|
+
// 卸载
|
|
51
|
+
renderer.unmount(vnode);
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
### DOM 操作工具
|
|
55
|
+
|
|
56
|
+
```typescript
|
|
57
|
+
import {
|
|
58
|
+
createElement,
|
|
59
|
+
createTextNode,
|
|
60
|
+
createComment,
|
|
61
|
+
setText,
|
|
62
|
+
setStyle,
|
|
63
|
+
addClass,
|
|
64
|
+
removeClass,
|
|
65
|
+
} from '@lytjs/adapter-web';
|
|
66
|
+
|
|
67
|
+
// 创建元素
|
|
68
|
+
const el = createElement('div');
|
|
69
|
+
|
|
70
|
+
// 设置样式
|
|
71
|
+
setStyle(el, { color: 'red', fontSize: '14px' });
|
|
72
|
+
|
|
73
|
+
// 操作 class
|
|
74
|
+
addClass(el, 'container');
|
|
75
|
+
removeClass(el, 'old-class');
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
### 事件处理
|
|
79
|
+
|
|
80
|
+
```typescript
|
|
81
|
+
import { addEventListener, removeEventListener, removeAllEventListeners } from '@lytjs/adapter-web';
|
|
82
|
+
|
|
83
|
+
// 添加事件监听
|
|
84
|
+
const cleanup = addEventListener(el, 'click', (e) => {
|
|
85
|
+
console.log('clicked');
|
|
86
|
+
});
|
|
87
|
+
|
|
88
|
+
// 移除事件监听
|
|
89
|
+
cleanup();
|
|
90
|
+
|
|
91
|
+
// 移除元素上所有事件监听
|
|
92
|
+
removeAllEventListeners(el);
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
### 属性操作
|
|
96
|
+
|
|
97
|
+
```typescript
|
|
98
|
+
import { patchAttr, patchClass, patchStyle, patchProp } from '@lytjs/adapter-web';
|
|
99
|
+
|
|
100
|
+
// 设置属性
|
|
101
|
+
patchAttr(el, 'id', 'my-id');
|
|
102
|
+
|
|
103
|
+
// 设置 class
|
|
104
|
+
patchClass(el, 'class-a class-b');
|
|
105
|
+
|
|
106
|
+
// 设置样式
|
|
107
|
+
patchStyle(el, { color: 'blue' }, { color: 'red' });
|
|
108
|
+
|
|
109
|
+
// 设置 DOM 属性
|
|
110
|
+
patchProp(el, 'value', 'new value', 'old value');
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
## 类型定义
|
|
114
|
+
|
|
115
|
+
```typescript
|
|
116
|
+
import type { WebRendererHost, DOMRenderer, RendererOptions } from '@lytjs/adapter-web';
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
## 相关包
|
|
120
|
+
|
|
121
|
+
- [@lytjs/renderer](../renderer) - 渲染器实现
|
|
122
|
+
- [@lytjs/vdom](../vdom) - 虚拟 DOM
|
|
123
|
+
- [@lytjs/dom](../dom) - DOM 平台封装
|
package/dist/index.cjs
CHANGED
|
@@ -112,11 +112,7 @@ function patchEvent(el, rawName, nextValue, _prevValue) {
|
|
|
112
112
|
el.addEventListener(parsed.name, invoker, options);
|
|
113
113
|
} else if (!actualNextValue && existingInvoker) {
|
|
114
114
|
const removeOptions = buildEventListenerOptions(existingInvoker._parsed);
|
|
115
|
-
el.removeEventListener(
|
|
116
|
-
existingInvoker._parsed.name,
|
|
117
|
-
existingInvoker,
|
|
118
|
-
removeOptions
|
|
119
|
-
);
|
|
115
|
+
el.removeEventListener(existingInvoker._parsed.name, existingInvoker, removeOptions);
|
|
120
116
|
releaseInvoker(existingInvoker);
|
|
121
117
|
invokers[eventKey] = void 0;
|
|
122
118
|
}
|
|
@@ -438,11 +434,7 @@ var _WebRendererHost = class _WebRendererHost {
|
|
|
438
434
|
removeEventListener(el, event, handler, options) {
|
|
439
435
|
const wrappedHandler = _WebRendererHost.getWrappedHandler(el, event, handler);
|
|
440
436
|
if (wrappedHandler) {
|
|
441
|
-
el.removeEventListener(
|
|
442
|
-
event,
|
|
443
|
-
wrappedHandler,
|
|
444
|
-
options
|
|
445
|
-
);
|
|
437
|
+
el.removeEventListener(event, wrappedHandler, options);
|
|
446
438
|
const elMap = _WebRendererHost.wrappedHandlerMap.get(el);
|
|
447
439
|
if (elMap) {
|
|
448
440
|
const eventMap = elMap.get(event);
|
package/dist/index.mjs
CHANGED
|
@@ -11,11 +11,7 @@ import {
|
|
|
11
11
|
import { isOn } from "@lytjs/common-events";
|
|
12
12
|
|
|
13
13
|
// src/web-patch-events.ts
|
|
14
|
-
import {
|
|
15
|
-
normalizeEventName,
|
|
16
|
-
getEventKey,
|
|
17
|
-
parseEventModifier
|
|
18
|
-
} from "@lytjs/common-events";
|
|
14
|
+
import { normalizeEventName, getEventKey, parseEventModifier } from "@lytjs/common-events";
|
|
19
15
|
var veiCache = /* @__PURE__ */ new WeakMap();
|
|
20
16
|
var INVOKER_POOL_MAX_SIZE = 100;
|
|
21
17
|
var invokerPool = [];
|
|
@@ -76,11 +72,7 @@ function patchEvent(el, rawName, nextValue, _prevValue) {
|
|
|
76
72
|
el.addEventListener(parsed.name, invoker, options);
|
|
77
73
|
} else if (!actualNextValue && existingInvoker) {
|
|
78
74
|
const removeOptions = buildEventListenerOptions(existingInvoker._parsed);
|
|
79
|
-
el.removeEventListener(
|
|
80
|
-
existingInvoker._parsed.name,
|
|
81
|
-
existingInvoker,
|
|
82
|
-
removeOptions
|
|
83
|
-
);
|
|
75
|
+
el.removeEventListener(existingInvoker._parsed.name, existingInvoker, removeOptions);
|
|
84
76
|
releaseInvoker(existingInvoker);
|
|
85
77
|
invokers[eventKey] = void 0;
|
|
86
78
|
}
|
|
@@ -402,11 +394,7 @@ var _WebRendererHost = class _WebRendererHost {
|
|
|
402
394
|
removeEventListener(el, event, handler, options) {
|
|
403
395
|
const wrappedHandler = _WebRendererHost.getWrappedHandler(el, event, handler);
|
|
404
396
|
if (wrappedHandler) {
|
|
405
|
-
el.removeEventListener(
|
|
406
|
-
event,
|
|
407
|
-
wrappedHandler,
|
|
408
|
-
options
|
|
409
|
-
);
|
|
397
|
+
el.removeEventListener(event, wrappedHandler, options);
|
|
410
398
|
const elMap = _WebRendererHost.wrappedHandlerMap.get(el);
|
|
411
399
|
if (elMap) {
|
|
412
400
|
const eventMap = elMap.get(event);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lytjs/adapter-web",
|
|
3
|
-
"version": "6.
|
|
3
|
+
"version": "6.7.0",
|
|
4
4
|
"description": "LytJS Web 平台适配器 - 浏览器 DOM 的 RendererHost 实现",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.cjs",
|
|
@@ -24,15 +24,15 @@
|
|
|
24
24
|
"clean": "rm -rf dist"
|
|
25
25
|
},
|
|
26
26
|
"dependencies": {
|
|
27
|
-
"@lytjs/host-contract": "^6.
|
|
28
|
-
"@lytjs/common-dom": "^6.
|
|
29
|
-
"@lytjs/common-events": "^6.
|
|
30
|
-
"@lytjs/common-is": "^6.
|
|
31
|
-
"@lytjs/common-string": "^6.
|
|
32
|
-
"@lytjs/common-error": "^6.
|
|
33
|
-
"@lytjs/shared-types": "^6.
|
|
34
|
-
"@lytjs/vdom": "^6.
|
|
35
|
-
"@lytjs/reactivity": "^6.
|
|
27
|
+
"@lytjs/host-contract": "^6.7.0",
|
|
28
|
+
"@lytjs/common-dom": "^6.7.0",
|
|
29
|
+
"@lytjs/common-events": "^6.7.0",
|
|
30
|
+
"@lytjs/common-is": "^6.7.0",
|
|
31
|
+
"@lytjs/common-string": "^6.7.0",
|
|
32
|
+
"@lytjs/common-error": "^6.7.0",
|
|
33
|
+
"@lytjs/shared-types": "^6.7.0",
|
|
34
|
+
"@lytjs/vdom": "^6.7.0",
|
|
35
|
+
"@lytjs/reactivity": "^6.7.0"
|
|
36
36
|
},
|
|
37
37
|
"devDependencies": {
|
|
38
38
|
"tsup": "^8.3.0",
|