compelem 0.20.0-b1 → 0.20.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/CompElem.d.ts +19 -46
- package/IComponent.d.ts +4 -19
- package/README.md +63 -41
- package/compelem.umd.js +4220 -0
- package/constants.d.ts +19 -7
- package/decorators/event.d.ts +1 -1
- package/events/event.d.ts +1 -1
- package/index.d.ts +2 -3
- package/index.js +4153 -2
- package/package.json +1 -1
- package/reactive.d.ts +3 -1
- package/render/CssTemplate.d.ts +3 -3
- package/render/render.d.ts +1 -8
package/CompElem.d.ts
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { IComponent } from "./IComponent";
|
|
2
|
-
import { CssTemplate } from "./render/CssTemplate";
|
|
3
2
|
import { Template } from "./render/Template";
|
|
4
3
|
import { DefaultProps, TmplFn, UpdatePoint } from "./types";
|
|
5
4
|
/**
|
|
@@ -12,24 +11,18 @@ export declare class CompElem<T = HTMLElement> extends HTMLElement implements IC
|
|
|
12
11
|
#private;
|
|
13
12
|
static __l_globalRule: HTMLStyleElement;
|
|
14
13
|
static defaults(options: DefaultProps): void;
|
|
14
|
+
__data_: Record<string, any>;
|
|
15
15
|
__updateTree: Array<UpdatePoint>;
|
|
16
|
-
|
|
17
|
-
|
|
16
|
+
_eventBindList: Array<[string, Function, Node, Function?]>;
|
|
17
|
+
_listerners: Record<string, Function>;
|
|
18
18
|
__docoEventMap: Map<string, Function>;
|
|
19
|
-
__updateCssDeps: Array<string>;
|
|
20
19
|
__updateSubViewDeps: Map<string, Set<UpdatePoint>>;
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
_watchKeys: string[];
|
|
25
|
-
_watchKeysDeep: string[];
|
|
20
|
+
_cssUpdateInNextTick: boolean;
|
|
21
|
+
_cssVarOldValueMap: Record<string, string | number>;
|
|
22
|
+
__cssSheets: Array<CSSStyleSheet>;
|
|
26
23
|
_watchUpdateSetInNextTick: Set<Function>;
|
|
27
24
|
_watchUpdateArgsInNextTick: Map<Function, Record<string, any>>;
|
|
28
|
-
_computedUpdateDeps: Map<string, Set<Function>>;
|
|
29
25
|
_computedUpdateSetInNextTick: Set<Function>;
|
|
30
|
-
_hasChangedPropOrStateMap: Map<string, Function>;
|
|
31
|
-
_hasSyncPropSet: Set<string>;
|
|
32
|
-
_hasShallowStateSet: Set<string>;
|
|
33
26
|
get [Symbol.toStringTag](): string;
|
|
34
27
|
get cid(): number;
|
|
35
28
|
get attrs(): Record<string, string>;
|
|
@@ -38,18 +31,21 @@ export declare class CompElem<T = HTMLElement> extends HTMLElement implements IC
|
|
|
38
31
|
get renderRoots(): HTMLElement[];
|
|
39
32
|
get parentComponent(): CompElem | undefined;
|
|
40
33
|
get wrapperComponent(): CompElem | undefined;
|
|
34
|
+
get slots(): Record<string, Array<Node>>;
|
|
41
35
|
get slotHooks(): Record<string, (...args: any[]) => Template>;
|
|
42
|
-
get
|
|
43
|
-
get
|
|
36
|
+
get cssSheets(): CSSStyleSheet[];
|
|
37
|
+
get globalCssSheet(): CSSStyleSheet;
|
|
44
38
|
get isMounted(): boolean;
|
|
45
|
-
|
|
39
|
+
__wrapperComponent: WeakRef<CompElem> | undefined;
|
|
46
40
|
/**
|
|
47
41
|
* 组件样式,CSSStyleSheet可动态变更
|
|
48
42
|
*/
|
|
49
|
-
static get
|
|
50
|
-
static get
|
|
51
|
-
static get
|
|
52
|
-
get
|
|
43
|
+
static get css(): Array<string | CSSStyleSheet>;
|
|
44
|
+
static get globalCss(): string | undefined;
|
|
45
|
+
static get hostCss(): string | CSSStyleSheet | undefined;
|
|
46
|
+
get cssVars(): Record<string, string | number | undefined>;
|
|
47
|
+
__inited: boolean;
|
|
48
|
+
__thisRef: WeakRef<any>;
|
|
53
49
|
constructor(...args: any[]);
|
|
54
50
|
insertStyleSheet(sheet: string | CSSStyleSheet): CSSStyleSheet | null;
|
|
55
51
|
/**
|
|
@@ -69,7 +65,6 @@ export declare class CompElem<T = HTMLElement> extends HTMLElement implements IC
|
|
|
69
65
|
render(): Template | null;
|
|
70
66
|
beforeMount(): void;
|
|
71
67
|
mounted(): void;
|
|
72
|
-
__onSlotChangeHook(e: Event): void;
|
|
73
68
|
slotChange(slot: HTMLSlotElement, name: string): void;
|
|
74
69
|
attributeChangedCallback(attributeName: string, oldValue: string | null, newValue: string | null): void;
|
|
75
70
|
/**
|
|
@@ -93,8 +88,6 @@ export declare class CompElem<T = HTMLElement> extends HTMLElement implements IC
|
|
|
93
88
|
* @returns
|
|
94
89
|
*/
|
|
95
90
|
_notify(ov: any, chain: string[], subNewValue?: any, subOldValue?: any): void;
|
|
96
|
-
_requestWatchUpdate(newValue: any, oldValue: any, fullPath: string): void;
|
|
97
|
-
_requestComputedUpdate(fullPath: string): void;
|
|
98
91
|
_updateProps(props: Record<string, any>): void;
|
|
99
92
|
_wrapperProp: Record<string, string>;
|
|
100
93
|
_initProps(props: Record<string, any>, attrs?: Record<string, any>): void;
|
|
@@ -106,35 +99,15 @@ export declare class CompElem<T = HTMLElement> extends HTMLElement implements IC
|
|
|
106
99
|
_updateSlot(name: string, propName?: string, value?: any): void;
|
|
107
100
|
_asyncDirectives: WeakMap<TmplFn, any>;
|
|
108
101
|
renderAsync(cbk: TmplFn, ...args: any[]): void;
|
|
109
|
-
__attrChanged(name: string, oldValue: string | null, newValue: string | null): void;
|
|
110
|
-
_regWrapper(wrapperComponent: CompElem): void;
|
|
111
102
|
_regSubViewDeps(props: string[], up: UpdatePoint): void;
|
|
112
103
|
_getPrivateData(): Record<string, any>;
|
|
113
104
|
/**
|
|
114
|
-
*
|
|
105
|
+
* 发出组件事件
|
|
115
106
|
* @param evName 事件名称
|
|
116
107
|
* @param args 自定义参数
|
|
117
108
|
*/
|
|
118
|
-
emit(evName: string, arg?: Record<string, any>,
|
|
119
|
-
|
|
120
|
-
bubbles?: boolean;
|
|
121
|
-
composed?: boolean;
|
|
122
|
-
}): void;
|
|
123
|
-
/**
|
|
124
|
-
* 在root上绑定事件
|
|
125
|
-
* @param evName
|
|
126
|
-
* @param hook
|
|
127
|
-
* @returns 函数钩子,用于卸载
|
|
128
|
-
*/
|
|
129
|
-
on(evName: string, hook: (e: Event) => void): any;
|
|
130
|
-
/**
|
|
131
|
-
* 从root上移除事件
|
|
132
|
-
* @param evName
|
|
133
|
-
* @param hook on函数返回的钩子,可选。为空时移除所有evName事件
|
|
134
|
-
*/
|
|
135
|
-
off(evName: string, hook?: (e: Event) => void): void;
|
|
136
|
-
addEvent(node: Node, evName: string, hook: (e: Event) => void): any;
|
|
137
|
-
removeEvent(node: Node, evName: string, hook?: (e: Event) => void): void;
|
|
109
|
+
emit(evName: string, arg?: Record<string, any>, event?: Event): void;
|
|
110
|
+
_addEvent(evName: string, hook: (e: Event) => void): void;
|
|
138
111
|
/**
|
|
139
112
|
* 下一帧执行
|
|
140
113
|
* @param cbk
|
package/IComponent.d.ts
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { CssTemplate } from "./render/CssTemplate";
|
|
2
1
|
import { Template } from "./render/Template";
|
|
3
2
|
/**
|
|
4
3
|
* 组件接口
|
|
@@ -16,10 +15,10 @@ export interface IComponent<T = HTMLElement> {
|
|
|
16
15
|
get wrapperComponent(): HTMLElement | undefined;
|
|
17
16
|
get slots(): Record<string, Array<Node>>;
|
|
18
17
|
get slotHooks(): Record<string, (...args: any[]) => Template>;
|
|
19
|
-
get
|
|
20
|
-
get
|
|
18
|
+
get cssSheets(): CSSStyleSheet[];
|
|
19
|
+
get globalCssSheet(): CSSStyleSheet;
|
|
21
20
|
get isMounted(): boolean;
|
|
22
|
-
get
|
|
21
|
+
get cssVars(): Record<string, string | number | undefined>;
|
|
23
22
|
propsReady(props: Record<string, any>): void;
|
|
24
23
|
render(): Template | null;
|
|
25
24
|
beforeMount(): void;
|
|
@@ -37,21 +36,7 @@ export interface IComponent<T = HTMLElement> {
|
|
|
37
36
|
* @param evName 事件名称
|
|
38
37
|
* @param args 自定义参数
|
|
39
38
|
*/
|
|
40
|
-
emit(evName: string, arg: Record<string, any>,
|
|
41
|
-
event?: Event;
|
|
42
|
-
bubbles?: boolean;
|
|
43
|
-
composed?: boolean;
|
|
44
|
-
}): void;
|
|
45
|
-
/**
|
|
46
|
-
* 在root上绑定事件
|
|
47
|
-
* @param evName
|
|
48
|
-
* @param hook
|
|
49
|
-
*/
|
|
50
|
-
on(evName: string, hook: (e: Event) => void): void;
|
|
51
|
-
/**
|
|
52
|
-
* 下一帧执行
|
|
53
|
-
* @param cbk
|
|
54
|
-
*/
|
|
39
|
+
emit(evName: string, arg: Record<string, any>, event?: Event): void;
|
|
55
40
|
nextTick(cbk: () => void): void;
|
|
56
41
|
/**
|
|
57
42
|
* 强制更新一次视图
|
package/README.md
CHANGED
|
@@ -37,21 +37,23 @@ export class PageTest extends CompElem {
|
|
|
37
37
|
|
|
38
38
|
//////////////////////////////////// styles
|
|
39
39
|
//静态样式
|
|
40
|
-
static get
|
|
40
|
+
static get css(): Array<string | CSSStyleSheet> {
|
|
41
41
|
return [`:host{
|
|
42
42
|
font-size:16px;
|
|
43
|
-
}
|
|
43
|
+
}
|
|
44
|
+
h2,p,i,h3{
|
|
45
|
+
...
|
|
46
|
+
background-image:var(--test-color);
|
|
47
|
+
filter:hue-rotate(var(--test-hue-rotate));
|
|
48
|
+
}
|
|
49
|
+
...`];
|
|
44
50
|
}
|
|
45
|
-
|
|
46
|
-
get
|
|
47
|
-
return
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
css`h2,p,i,h3{
|
|
52
|
-
filter:hue-rotate(${this.rotation}deg);
|
|
53
|
-
}`,
|
|
54
|
-
]
|
|
51
|
+
//动态样式变量
|
|
52
|
+
get cssVars() {
|
|
53
|
+
return {
|
|
54
|
+
testColor: this.color,
|
|
55
|
+
testHueRotate: `${this.rotation}deg`
|
|
56
|
+
}
|
|
55
57
|
}
|
|
56
58
|
|
|
57
59
|
@query('i[name="text"]')
|
|
@@ -84,7 +86,7 @@ export class PageTest extends CompElem {
|
|
|
84
86
|
<i>for building</i>
|
|
85
87
|
<h3>Web Components</h3>
|
|
86
88
|
<p>
|
|
87
|
-
<
|
|
89
|
+
<comp-element> <i name="text">...</i> </comp-element>
|
|
88
90
|
</p>
|
|
89
91
|
${this.arg}
|
|
90
92
|
</div>`
|
|
@@ -106,7 +108,7 @@ export class PageTest extends CompElem {
|
|
|
106
108
|
render(): Template{
|
|
107
109
|
return html`<div>Hello CompElem</div>`
|
|
108
110
|
}
|
|
109
|
-
//对于无需内部样式的组件(如容器类)可返回null
|
|
111
|
+
//对于无需内部样式的组件(如容器类)可返回null(或跳过定义该方法),此时不会创建Shadow DOM
|
|
110
112
|
render(){
|
|
111
113
|
return null
|
|
112
114
|
}
|
|
@@ -139,7 +141,7 @@ export class PageTest extends CompElem {
|
|
|
139
141
|
- ### 无视图
|
|
140
142
|
对于无体组件无需定义渲染函数,常用于layout、grid等结构控制相关组件。无视图组件仅支持global及host样式,如
|
|
141
143
|
```ts
|
|
142
|
-
static get
|
|
144
|
+
static get hostCss(): string {
|
|
143
145
|
return `
|
|
144
146
|
l-main{
|
|
145
147
|
display: block;
|
|
@@ -152,24 +154,25 @@ export class PageTest extends CompElem {
|
|
|
152
154
|
同样,无视图组件的renderRoot/renderRoots/...等属性都为空
|
|
153
155
|
|
|
154
156
|
- ### 样式
|
|
155
|
-
|
|
157
|
+
使用静态函数定义组件样式或全局样式(如弹框),对于包裹在上级组件内的伪类样式(如:hover)时,可通过hostCss进行指定
|
|
156
158
|
```ts
|
|
157
|
-
static get
|
|
159
|
+
static get css(): Array<string | CSSStyleSheet> {
|
|
158
160
|
return [];
|
|
159
161
|
}
|
|
160
|
-
static get
|
|
162
|
+
static get globalCss(): string {
|
|
161
163
|
return '';
|
|
162
164
|
}
|
|
163
|
-
static get
|
|
165
|
+
static get hostCss(): string {
|
|
164
166
|
return '';
|
|
165
167
|
}
|
|
166
168
|
```
|
|
167
|
-
|
|
169
|
+
对于需要响应组件状态变化并动态更新样式时可以通过css变量进行变更,该方法会自动追踪内部所有响应状态
|
|
168
170
|
```ts
|
|
169
|
-
get
|
|
170
|
-
return
|
|
171
|
-
|
|
172
|
-
|
|
171
|
+
get cssVars() {
|
|
172
|
+
return {
|
|
173
|
+
testColor: this.color,
|
|
174
|
+
testHueRotate: `${this.rotation}deg`
|
|
175
|
+
}
|
|
173
176
|
}
|
|
174
177
|
```
|
|
175
178
|
- ### 属性
|
|
@@ -221,7 +224,7 @@ export class PageTest extends CompElem {
|
|
|
221
224
|
}
|
|
222
225
|
```
|
|
223
226
|
|
|
224
|
-
|
|
227
|
+
对于同类属性共享处理逻辑的监视,可批量处理
|
|
225
228
|
|
|
226
229
|
```ts
|
|
227
230
|
@watch(['height', 'minHeight', 'maxHeight'], { immediate: true })
|
|
@@ -231,7 +234,7 @@ export class PageTest extends CompElem {
|
|
|
231
234
|
```
|
|
232
235
|
|
|
233
236
|
- ### 计算状态
|
|
234
|
-
计算状态会缓存 return
|
|
237
|
+
计算状态会缓存 return 结果,只有当内部使用的响应属性/状态发生变化时才会重新计算
|
|
235
238
|
使用`@computed`注解的 Getter,如
|
|
236
239
|
```ts
|
|
237
240
|
@computed
|
|
@@ -246,7 +249,7 @@ export class PageTest extends CompElem {
|
|
|
246
249
|
@query('l-icon')
|
|
247
250
|
iconEl: HTMLElement
|
|
248
251
|
//ref
|
|
249
|
-
refNode:
|
|
252
|
+
refNode: RefObject
|
|
250
253
|
```
|
|
251
254
|
ref可用于内部DOM被移出但仍需访问的场景,比如tooltip、toast、overlay等
|
|
252
255
|
```ts
|
|
@@ -263,18 +266,13 @@ export class PageTest extends CompElem {
|
|
|
263
266
|
- `readonly` shadowRoot 阴影DOM,可能为空
|
|
264
267
|
- `readonly` slots 插槽元素映射
|
|
265
268
|
- `readonly` slotHooks 动态插槽钩子映射
|
|
266
|
-
- `readonly`
|
|
267
|
-
- `readonly`
|
|
269
|
+
- `readonly` cssSheets 组件样式对象列表
|
|
270
|
+
- `readonly` globalCssSheet 通过静态getter创建的全局样式表对象,所有实例共享
|
|
268
271
|
- `readonly` attrs 组件特性
|
|
269
272
|
- `readonly` props 组件属性
|
|
270
273
|
- `readonly` isMounted 组件是否已挂载
|
|
271
274
|
- `readonly` isDestroyed 组件是否已销毁
|
|
272
|
-
-
|
|
273
|
-
- on(evName: string, hook: (e: Event) => void) 在root元素上绑定事件
|
|
274
|
-
- off(evName: string, hook?: (e: Event) => void) 在root元素上卸载事件
|
|
275
|
-
- addEvent(node: Node, evName: string, hook: (e: Event) => void) 在指定元素上绑定事件
|
|
276
|
-
- removeEvent(node: Node, evName: string, hook?: (e: Event) => void) 在指定元素上卸载事件
|
|
277
|
-
- emit(evName: string, arg: Record<string, any>, options?: {event?: Event;bubbles?: boolean;composed?: boolean;}) 抛出自定义事件
|
|
275
|
+
- emit(evName: string, arg: Record<string, any>, event?: Event) 抛出自定义事件
|
|
278
276
|
- nextTick(cbk: () => void) 下一帧执行函数
|
|
279
277
|
- forceUpdate() 强制更新一次视图
|
|
280
278
|
- insertStyleSheet(sheet: string | CSSStyleSheet): CSSStyleSheet 向组件ShadowDOM插入样式表
|
|
@@ -434,16 +432,28 @@ return html` <l-tooltip>
|
|
|
434
432
|
- @onced 定义一次性事件
|
|
435
433
|
- @throttled 定义节流函数
|
|
436
434
|
|
|
437
|
-
|
|
435
|
+
### 继承
|
|
438
436
|
部分指令可由子类继承不会覆盖,包括@state/@prop/@watch/@computed
|
|
439
437
|
|
|
440
438
|
## 事件
|
|
439
|
+
在CompElem中有三类不同事件,分别返回原生事件对象及自定义对象
|
|
441
440
|
|
|
442
|
-
|
|
441
|
+
1. 原生事件 —— `<div @click="..."` 在原生元素上可以监听原生事件,监听器回调参数返回原生事件对象
|
|
442
|
+
2. 扩展原生事件 —— `<div @resize="..."` 在原生元素/组件元素上都可以监听扩展原生事件,监听器回调参数返回自定义数据对象
|
|
443
|
+
3. 组件事件 —— `<l-select @change="..."` 在组件元素上默认仅可监听组件事件,监听器回调参数返回自定义数据对象
|
|
443
444
|
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
445
|
+
### 组件原生事件
|
|
446
|
+
如果想要在组件上监听原生事件如`click`等,需要使用`native`关键字
|
|
447
|
+
```html
|
|
448
|
+
<l-select @click.native="${...}"></l-select>
|
|
449
|
+
```
|
|
450
|
+
此时click事件监听器参数返回原生事件对象
|
|
451
|
+
|
|
452
|
+
### 跨框架事件监听
|
|
453
|
+
如果组件要用于非 `CompElem` 框架时,需要为组件添加 `emit-native`属性,这样框架会将组件事件转为`CustomEvent`
|
|
454
|
+
```html
|
|
455
|
+
<l-select @change="${...}" emit-native></l-select>
|
|
456
|
+
```
|
|
447
457
|
|
|
448
458
|
### 事件修饰符
|
|
449
459
|
通过`.`号可使用修饰符修饰事件如 `@scroll.throttle:100="${...}"`
|
|
@@ -465,4 +475,16 @@ return html` <l-tooltip>
|
|
|
465
475
|
可直接用于DOM元素的扩展事件(非组件事件),支持列表如下
|
|
466
476
|
- resize 元素尺寸变化时触发
|
|
467
477
|
- outside 鼠标点击元素外部时触发,可通过修饰符限制鼠标点击类型`outside.[mousedown/up/click/dblclick]`,默认click
|
|
468
|
-
- mutate 内容变化时触发。基于 Mutation Observer API
|
|
478
|
+
- mutate 内容变化时触发。基于 Mutation Observer API
|
|
479
|
+
|
|
480
|
+
### 无视图组件事件
|
|
481
|
+
当组件无内部视图或想要监听组件自身元素时,可使用`@event`装饰器
|
|
482
|
+
```ts
|
|
483
|
+
class CustomButton{
|
|
484
|
+
...
|
|
485
|
+
@event('click.native', (comp) => comp)
|
|
486
|
+
onClick() {
|
|
487
|
+
this.emit('click')
|
|
488
|
+
}
|
|
489
|
+
}
|
|
490
|
+
```
|