@nokecy/designer-shared 0.0.0-stage → 2.0.0-beta.11
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/LICENSE +21 -0
- package/LICENSE.md +21 -0
- package/PROVENANCE.json +35 -0
- package/README.md +9 -2
- package/esm/animation.d.ts +2 -0
- package/esm/animation.js +34 -0
- package/esm/animation.js.map +1 -0
- package/esm/array.d.ts +37 -0
- package/esm/array.js +112 -0
- package/esm/array.js.map +1 -0
- package/esm/clone.d.ts +4 -0
- package/esm/clone.js +106 -0
- package/esm/clone.js.map +1 -0
- package/esm/compose.d.ts +1 -0
- package/esm/compose.js +8 -0
- package/esm/compose.js.map +1 -0
- package/esm/coordinate.d.ts +106 -0
- package/esm/coordinate.js +485 -0
- package/esm/coordinate.js.map +1 -0
- package/esm/element.d.ts +6 -0
- package/esm/element.js +138 -0
- package/esm/element.js.map +1 -0
- package/esm/event.d.ts +81 -0
- package/esm/event.js +214 -0
- package/esm/event.js.map +1 -0
- package/esm/globalThisPolyfill.d.ts +1 -0
- package/esm/globalThisPolyfill.js +23 -0
- package/esm/globalThisPolyfill.js.map +1 -0
- package/esm/index.d.ts +17 -0
- package/esm/index.js +18 -0
- package/esm/index.js.map +1 -0
- package/esm/instanceof.d.ts +1 -0
- package/esm/instanceof.js +12 -0
- package/esm/instanceof.js.map +1 -0
- package/esm/keycode.d.ts +147 -0
- package/esm/keycode.js +151 -0
- package/esm/keycode.js.map +1 -0
- package/esm/lru.d.ts +73 -0
- package/esm/lru.js +294 -0
- package/esm/lru.js.map +1 -0
- package/esm/observer.d.ts +9 -0
- package/esm/observer.js +30 -0
- package/esm/observer.js.map +1 -0
- package/esm/request-idle.d.ts +10 -0
- package/esm/request-idle.js +9 -0
- package/esm/request-idle.js.map +1 -0
- package/esm/scroller.d.ts +10 -0
- package/esm/scroller.js +83 -0
- package/esm/scroller.js.map +1 -0
- package/esm/subscribable.d.ts +14 -0
- package/esm/subscribable.js +49 -0
- package/esm/subscribable.js.map +1 -0
- package/esm/types.d.ts +13 -0
- package/esm/types.js +22 -0
- package/esm/types.js.map +1 -0
- package/esm/uid.d.ts +1 -0
- package/esm/uid.js +10 -0
- package/esm/uid.js.map +1 -0
- package/lib/animation.d.ts +2 -0
- package/lib/animation.js +39 -0
- package/lib/animation.js.map +1 -0
- package/lib/array.d.ts +37 -0
- package/lib/array.js +126 -0
- package/lib/array.js.map +1 -0
- package/lib/clone.d.ts +4 -0
- package/lib/clone.js +111 -0
- package/lib/clone.js.map +1 -0
- package/lib/compose.d.ts +1 -0
- package/lib/compose.js +12 -0
- package/lib/compose.js.map +1 -0
- package/lib/coordinate.d.ts +106 -0
- package/lib/coordinate.js +514 -0
- package/lib/coordinate.js.map +1 -0
- package/lib/element.d.ts +6 -0
- package/lib/element.js +146 -0
- package/lib/element.js.map +1 -0
- package/lib/event.d.ts +81 -0
- package/lib/event.js +219 -0
- package/lib/event.js.map +1 -0
- package/lib/globalThisPolyfill.d.ts +1 -0
- package/lib/globalThisPolyfill.js +26 -0
- package/lib/globalThisPolyfill.js.map +1 -0
- package/lib/index.d.ts +17 -0
- package/lib/index.js +34 -0
- package/lib/index.js.map +1 -0
- package/lib/instanceof.d.ts +1 -0
- package/lib/instanceof.js +16 -0
- package/lib/instanceof.js.map +1 -0
- package/lib/keycode.d.ts +147 -0
- package/lib/keycode.js +155 -0
- package/lib/keycode.js.map +1 -0
- package/lib/lru.d.ts +73 -0
- package/lib/lru.js +298 -0
- package/lib/lru.js.map +1 -0
- package/lib/observer.d.ts +9 -0
- package/lib/observer.js +34 -0
- package/lib/observer.js.map +1 -0
- package/lib/request-idle.d.ts +10 -0
- package/lib/request-idle.js +14 -0
- package/lib/request-idle.js.map +1 -0
- package/lib/scroller.d.ts +10 -0
- package/lib/scroller.js +89 -0
- package/lib/scroller.js.map +1 -0
- package/lib/subscribable.d.ts +14 -0
- package/lib/subscribable.js +53 -0
- package/lib/subscribable.js.map +1 -0
- package/lib/types.d.ts +13 -0
- package/lib/types.js +30 -0
- package/lib/types.js.map +1 -0
- package/lib/uid.d.ts +1 -0
- package/lib/uid.js +13 -0
- package/lib/uid.js.map +1 -0
- package/package.json +46 -4
- package/src/animation.ts +38 -0
- package/src/array.ts +301 -0
- package/src/clone.ts +105 -0
- package/src/compose.ts +7 -0
- package/src/coordinate.ts +640 -0
- package/src/element.ts +144 -0
- package/src/event.ts +395 -0
- package/src/globalThisPolyfill.ts +19 -0
- package/src/index.ts +17 -0
- package/src/instanceof.ts +10 -0
- package/src/keycode.ts +150 -0
- package/src/lru.ts +322 -0
- package/src/observer.ts +38 -0
- package/src/request-idle.ts +22 -0
- package/src/scroller.ts +113 -0
- package/src/subscribable.ts +60 -0
- package/src/types.ts +27 -0
- package/src/uid.ts +10 -0
package/lib/element.js
ADDED
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.calcElementScale = exports.calcElementRotate = exports.calcElementTranslate = exports.calcElementLayout = exports.calcElementOuterWidth = void 0;
|
|
4
|
+
const coordinate_1 = require("./coordinate");
|
|
5
|
+
const InlineLayoutTagNames = new Set([
|
|
6
|
+
'A',
|
|
7
|
+
'ABBR',
|
|
8
|
+
'ACRONYM',
|
|
9
|
+
'AUDIO',
|
|
10
|
+
'B',
|
|
11
|
+
'BDI',
|
|
12
|
+
'BDO',
|
|
13
|
+
'BIG',
|
|
14
|
+
'BR',
|
|
15
|
+
'BUTTON',
|
|
16
|
+
'CANVAS',
|
|
17
|
+
'CITE',
|
|
18
|
+
'CODE',
|
|
19
|
+
'DATA',
|
|
20
|
+
'DATALIST',
|
|
21
|
+
'DEL',
|
|
22
|
+
'DFN',
|
|
23
|
+
'EM',
|
|
24
|
+
'EMBED',
|
|
25
|
+
'I',
|
|
26
|
+
'IFRAME',
|
|
27
|
+
'IMG',
|
|
28
|
+
'INS',
|
|
29
|
+
'KBD',
|
|
30
|
+
'LABEL',
|
|
31
|
+
'MAP',
|
|
32
|
+
'MARK',
|
|
33
|
+
'METER',
|
|
34
|
+
'NOSCRIPT',
|
|
35
|
+
'OBJECT',
|
|
36
|
+
'OUTPUT',
|
|
37
|
+
'PICTURE',
|
|
38
|
+
'PROGRESS',
|
|
39
|
+
'Q',
|
|
40
|
+
'RUBY',
|
|
41
|
+
'S',
|
|
42
|
+
'SAMP',
|
|
43
|
+
'SELECT',
|
|
44
|
+
'SLOT',
|
|
45
|
+
'SMALL',
|
|
46
|
+
'STRONG',
|
|
47
|
+
'SUB',
|
|
48
|
+
'SUP',
|
|
49
|
+
'SVG',
|
|
50
|
+
'TEMPLATE',
|
|
51
|
+
'TEXTAREA',
|
|
52
|
+
'TIME',
|
|
53
|
+
'U',
|
|
54
|
+
'TT',
|
|
55
|
+
'VAR',
|
|
56
|
+
'VIDEO',
|
|
57
|
+
'WBR',
|
|
58
|
+
'INPUT',
|
|
59
|
+
'SPAN',
|
|
60
|
+
]);
|
|
61
|
+
const calcElementOuterWidth = (innerWidth, style) => {
|
|
62
|
+
return (innerWidth +
|
|
63
|
+
parseFloat(style.marginLeft) +
|
|
64
|
+
parseFloat(style.marginRight) +
|
|
65
|
+
parseFloat(style.paddingLeft) +
|
|
66
|
+
parseFloat(style.paddingRight) +
|
|
67
|
+
parseFloat(style.borderLeftWidth) +
|
|
68
|
+
parseFloat(style.borderRightWidth));
|
|
69
|
+
};
|
|
70
|
+
exports.calcElementOuterWidth = calcElementOuterWidth;
|
|
71
|
+
const calcElementLayout = (element) => {
|
|
72
|
+
if (!element)
|
|
73
|
+
return 'vertical';
|
|
74
|
+
const parent = element.parentElement;
|
|
75
|
+
if (!parent)
|
|
76
|
+
return 'vertical';
|
|
77
|
+
const tagName = element.tagName;
|
|
78
|
+
const parentTagName = parent.tagName;
|
|
79
|
+
const style = getComputedStyle(element);
|
|
80
|
+
const parentStyle = getComputedStyle(parent);
|
|
81
|
+
const isNotFullWidth = () => {
|
|
82
|
+
const innerWidth = element.getBoundingClientRect().width;
|
|
83
|
+
const outerWidth = (0, exports.calcElementOuterWidth)(innerWidth, style);
|
|
84
|
+
const parentInnerWidth = parent.getBoundingClientRect().width;
|
|
85
|
+
return outerWidth.toFixed(0) < parentInnerWidth.toFixed(0);
|
|
86
|
+
};
|
|
87
|
+
if (tagName === 'TH' || tagName === 'TD') {
|
|
88
|
+
if (parentTagName === 'TR')
|
|
89
|
+
return 'horizontal';
|
|
90
|
+
}
|
|
91
|
+
if (parentStyle.display === 'flex' && parentStyle.flexDirection === 'row')
|
|
92
|
+
return 'horizontal';
|
|
93
|
+
if (parentStyle.display === 'grid') {
|
|
94
|
+
if (isNotFullWidth()) {
|
|
95
|
+
return 'horizontal';
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
if (InlineLayoutTagNames.has(tagName)) {
|
|
99
|
+
if (style.display === 'block') {
|
|
100
|
+
if (style.float === 'left' || style.float === 'right') {
|
|
101
|
+
if (isNotFullWidth()) {
|
|
102
|
+
return 'horizontal';
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
return 'vertical';
|
|
106
|
+
}
|
|
107
|
+
return 'horizontal';
|
|
108
|
+
}
|
|
109
|
+
};
|
|
110
|
+
exports.calcElementLayout = calcElementLayout;
|
|
111
|
+
const calcElementTranslate = (element) => {
|
|
112
|
+
var _a, _b, _c;
|
|
113
|
+
const transform = (_a = element === null || element === void 0 ? void 0 : element.style) === null || _a === void 0 ? void 0 : _a.transform;
|
|
114
|
+
if (transform) {
|
|
115
|
+
const [x, y] = (_c = (_b = transform
|
|
116
|
+
.match(/translate(?:3d)?\(\s*([-\d.]+)[a-z]+?[\s,]+([-\d.]+)[a-z]+?(?:[\s,]+([-\d.]+))?[a-z]+?\s*\)/)) === null || _b === void 0 ? void 0 : _b.slice(1, 3)) !== null && _c !== void 0 ? _c : [0, 0];
|
|
117
|
+
return new coordinate_1.Point(Number(x), Number(y));
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
return new coordinate_1.Point(Number(element.offsetLeft), Number(element.offsetTop));
|
|
121
|
+
}
|
|
122
|
+
};
|
|
123
|
+
exports.calcElementTranslate = calcElementTranslate;
|
|
124
|
+
const calcElementRotate = (element) => {
|
|
125
|
+
var _a, _b, _c;
|
|
126
|
+
const transform = (_a = element === null || element === void 0 ? void 0 : element.style) === null || _a === void 0 ? void 0 : _a.transform;
|
|
127
|
+
if (transform) {
|
|
128
|
+
return Number((_c = (_b = transform.match(/rotate\(\s*([-\d.]+)/)) === null || _b === void 0 ? void 0 : _b[1]) !== null && _c !== void 0 ? _c : 0);
|
|
129
|
+
}
|
|
130
|
+
else {
|
|
131
|
+
return 0;
|
|
132
|
+
}
|
|
133
|
+
};
|
|
134
|
+
exports.calcElementRotate = calcElementRotate;
|
|
135
|
+
const calcElementScale = (element) => {
|
|
136
|
+
var _a, _b, _c;
|
|
137
|
+
const transform = (_a = element === null || element === void 0 ? void 0 : element.style) === null || _a === void 0 ? void 0 : _a.transform;
|
|
138
|
+
if (transform) {
|
|
139
|
+
return Number((_c = (_b = transform.match(/scale\(\s*([-\d.]+)/)) === null || _b === void 0 ? void 0 : _b[1]) !== null && _c !== void 0 ? _c : 0);
|
|
140
|
+
}
|
|
141
|
+
else {
|
|
142
|
+
return 0;
|
|
143
|
+
}
|
|
144
|
+
};
|
|
145
|
+
exports.calcElementScale = calcElementScale;
|
|
146
|
+
//# sourceMappingURL=element.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"element.js","sourceRoot":"","sources":["../src/element.ts"],"names":[],"mappings":"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","sourcesContent":["import { Point } from './coordinate'\n\nconst InlineLayoutTagNames = new Set([\n 'A',\n 'ABBR',\n 'ACRONYM',\n 'AUDIO',\n 'B',\n 'BDI',\n 'BDO',\n 'BIG',\n 'BR',\n 'BUTTON',\n 'CANVAS',\n 'CITE',\n 'CODE',\n 'DATA',\n 'DATALIST',\n 'DEL',\n 'DFN',\n 'EM',\n 'EMBED',\n 'I',\n 'IFRAME',\n 'IMG',\n 'INS',\n 'KBD',\n 'LABEL',\n 'MAP',\n 'MARK',\n 'METER',\n 'NOSCRIPT',\n 'OBJECT',\n 'OUTPUT',\n 'PICTURE',\n 'PROGRESS',\n 'Q',\n 'RUBY',\n 'S',\n 'SAMP',\n 'SELECT',\n 'SLOT',\n 'SMALL',\n 'STRONG',\n 'SUB',\n 'SUP',\n 'SVG',\n 'TEMPLATE',\n 'TEXTAREA',\n 'TIME',\n 'U',\n 'TT',\n 'VAR',\n 'VIDEO',\n 'WBR',\n 'INPUT',\n 'SPAN',\n])\n\nexport const calcElementOuterWidth = (\n innerWidth: number,\n style: CSSStyleDeclaration\n) => {\n return (\n innerWidth +\n parseFloat(style.marginLeft) +\n parseFloat(style.marginRight) +\n parseFloat(style.paddingLeft) +\n parseFloat(style.paddingRight) +\n parseFloat(style.borderLeftWidth) +\n parseFloat(style.borderRightWidth)\n )\n}\n\nexport const calcElementLayout = (element: Element) => {\n if (!element) return 'vertical'\n const parent = element.parentElement\n if (!parent) return 'vertical'\n const tagName = element.tagName\n const parentTagName = parent.tagName\n const style = getComputedStyle(element)\n const parentStyle = getComputedStyle(parent)\n\n const isNotFullWidth = () => {\n const innerWidth = element.getBoundingClientRect().width\n const outerWidth = calcElementOuterWidth(innerWidth, style)\n const parentInnerWidth = parent.getBoundingClientRect().width\n return outerWidth.toFixed(0) < parentInnerWidth.toFixed(0)\n }\n if (tagName === 'TH' || tagName === 'TD') {\n if (parentTagName === 'TR') return 'horizontal'\n }\n if (parentStyle.display === 'flex' && parentStyle.flexDirection === 'row')\n return 'horizontal'\n if (parentStyle.display === 'grid') {\n if (isNotFullWidth()) {\n return 'horizontal'\n }\n }\n if (InlineLayoutTagNames.has(tagName)) {\n if (style.display === 'block') {\n if (style.float === 'left' || style.float === 'right') {\n if (isNotFullWidth()) {\n return 'horizontal'\n }\n }\n return 'vertical'\n }\n return 'horizontal'\n }\n}\n\nexport const calcElementTranslate = (element: HTMLElement) => {\n const transform = element?.style?.transform\n if (transform) {\n const [x, y] = transform\n .match(\n /translate(?:3d)?\\(\\s*([-\\d.]+)[a-z]+?[\\s,]+([-\\d.]+)[a-z]+?(?:[\\s,]+([-\\d.]+))?[a-z]+?\\s*\\)/\n )\n ?.slice(1, 3) ?? [0, 0]\n\n return new Point(Number(x), Number(y))\n } else {\n return new Point(Number(element.offsetLeft), Number(element.offsetTop))\n }\n}\n\nexport const calcElementRotate = (element: HTMLElement) => {\n const transform = element?.style?.transform\n if (transform) {\n return Number(transform.match(/rotate\\(\\s*([-\\d.]+)/)?.[1] ?? 0)\n } else {\n return 0\n }\n}\n\nexport const calcElementScale = (element: HTMLElement) => {\n const transform = element?.style?.transform\n if (transform) {\n return Number(transform.match(/scale\\(\\s*([-\\d.]+)/)?.[1] ?? 0)\n } else {\n return 0\n }\n}\n"]}
|
package/lib/event.d.ts
ADDED
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { Subscribable, ISubscriber } from './subscribable';
|
|
2
|
+
export type EventOptions = boolean | (AddEventListenerOptions & EventListenerOptions & {
|
|
3
|
+
mode?: 'onlyOne' | 'onlyParent' | 'onlyChild';
|
|
4
|
+
});
|
|
5
|
+
export type EventContainer = Window | HTMLElement | HTMLDocument;
|
|
6
|
+
export type EventDriverContainer = HTMLElement | HTMLDocument;
|
|
7
|
+
export interface IEventEffect<T> {
|
|
8
|
+
(engine: T): void;
|
|
9
|
+
}
|
|
10
|
+
export interface IEventDriver {
|
|
11
|
+
container: EventDriverContainer;
|
|
12
|
+
contentWindow: Window;
|
|
13
|
+
attach(container: EventDriverContainer): void;
|
|
14
|
+
detach(container: EventDriverContainer): void;
|
|
15
|
+
dispatch<T extends ICustomEvent<any> = any>(event: T): void | boolean;
|
|
16
|
+
subscribe<T extends ICustomEvent<any> = any>(subscriber: ISubscriber<T>): void;
|
|
17
|
+
addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventOptions): void;
|
|
18
|
+
addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventOptions): void;
|
|
19
|
+
addEventListener(type: any, listener: any, options: any): void;
|
|
20
|
+
removeEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventOptions): void;
|
|
21
|
+
removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventOptions): void;
|
|
22
|
+
removeEventListener(type: any, listener: any, options?: any): void;
|
|
23
|
+
batchAddEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventOptions): void;
|
|
24
|
+
batchAddEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventOptions): void;
|
|
25
|
+
batchAddEventListener(type: any, listener: any, options?: any): void;
|
|
26
|
+
batchRemoveEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventOptions): void;
|
|
27
|
+
batchRemoveEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventOptions): void;
|
|
28
|
+
batchRemoveEventListener(type: any, listener: any, options: any): void;
|
|
29
|
+
}
|
|
30
|
+
export interface IEventDriverClass<T> {
|
|
31
|
+
new (engine: T, context?: any): IEventDriver;
|
|
32
|
+
}
|
|
33
|
+
export interface ICustomEvent<EventData = any, EventContext = any> {
|
|
34
|
+
type: string;
|
|
35
|
+
data?: EventData;
|
|
36
|
+
context?: EventContext;
|
|
37
|
+
}
|
|
38
|
+
export interface CustomEventClass {
|
|
39
|
+
new (...args: any[]): any;
|
|
40
|
+
}
|
|
41
|
+
export interface IEventProps<T = Event> {
|
|
42
|
+
drivers?: IEventDriverClass<T>[];
|
|
43
|
+
effects?: IEventEffect<T>[];
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* 事件驱动器基类
|
|
47
|
+
*/
|
|
48
|
+
export declare class EventDriver<Engine extends Event = Event, Context = any> implements IEventDriver {
|
|
49
|
+
engine: Engine;
|
|
50
|
+
container: EventDriverContainer;
|
|
51
|
+
contentWindow: Window;
|
|
52
|
+
context?: Context;
|
|
53
|
+
constructor(engine: Engine, context?: Context);
|
|
54
|
+
dispatch<T extends ICustomEvent<any> = any>(event: T): boolean;
|
|
55
|
+
subscribe<T extends ICustomEvent<any> = any>(subscriber: ISubscriber<T>): ReturnType<Subscribable['subscribe']>;
|
|
56
|
+
subscribeTo<T extends CustomEventClass>(type: T, subscriber: ISubscriber<InstanceType<T>>): ReturnType<Subscribable['subscribe']>;
|
|
57
|
+
subscribeWith<T extends ICustomEvent = ICustomEvent>(type: string | string[], subscriber: ISubscriber<T>): ReturnType<Subscribable['subscribe']>;
|
|
58
|
+
attach(): void;
|
|
59
|
+
detach(): void;
|
|
60
|
+
eventTarget(type: string): Window | EventDriverContainer;
|
|
61
|
+
addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventOptions): void;
|
|
62
|
+
addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventOptions): void;
|
|
63
|
+
removeEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventOptions): void;
|
|
64
|
+
removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventOptions): void;
|
|
65
|
+
batchAddEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventOptions): void;
|
|
66
|
+
batchAddEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventOptions): void;
|
|
67
|
+
batchRemoveEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventOptions): void;
|
|
68
|
+
batchRemoveEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventOptions): void;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* 事件引擎
|
|
72
|
+
*/
|
|
73
|
+
export declare class Event extends Subscribable<ICustomEvent<any>> {
|
|
74
|
+
private drivers;
|
|
75
|
+
private containers;
|
|
76
|
+
constructor(props: IEventProps);
|
|
77
|
+
subscribeTo<T extends CustomEventClass>(type: T, subscriber: ISubscriber<InstanceType<T>>): ReturnType<Subscribable['subscribe']>;
|
|
78
|
+
subscribeWith<T extends ICustomEvent = ICustomEvent>(type: string | string[], subscriber: ISubscriber<T>): ReturnType<Subscribable['subscribe']>;
|
|
79
|
+
attachEvents(container: EventContainer, contentWindow?: Window, context?: any): any;
|
|
80
|
+
detachEvents(container?: EventContainer): any;
|
|
81
|
+
}
|
package/lib/event.js
ADDED
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Event = exports.EventDriver = void 0;
|
|
4
|
+
const types_1 = require("./types");
|
|
5
|
+
const subscribable_1 = require("./subscribable");
|
|
6
|
+
const globalThisPolyfill_1 = require("./globalThisPolyfill");
|
|
7
|
+
const ATTACHED_SYMBOL = Symbol('ATTACHED_SYMBOL');
|
|
8
|
+
const EVENTS_SYMBOL = Symbol('__EVENTS_SYMBOL__');
|
|
9
|
+
const EVENTS_ONCE_SYMBOL = Symbol('EVENTS_ONCE_SYMBOL');
|
|
10
|
+
const EVENTS_BATCH_SYMBOL = Symbol('EVENTS_BATCH_SYMBOL');
|
|
11
|
+
const DRIVER_INSTANCES_SYMBOL = Symbol('DRIVER_INSTANCES_SYMBOL');
|
|
12
|
+
const isOnlyMode = (mode) => mode === 'onlyOne' || mode === 'onlyChild' || mode === 'onlyParent';
|
|
13
|
+
/**
|
|
14
|
+
* 事件驱动器基类
|
|
15
|
+
*/
|
|
16
|
+
class EventDriver {
|
|
17
|
+
constructor(engine, context) {
|
|
18
|
+
this.container = document;
|
|
19
|
+
this.contentWindow = globalThisPolyfill_1.globalThisPolyfill;
|
|
20
|
+
this.engine = engine;
|
|
21
|
+
this.context = context;
|
|
22
|
+
}
|
|
23
|
+
dispatch(event) {
|
|
24
|
+
return this.engine.dispatch(event, this.context);
|
|
25
|
+
}
|
|
26
|
+
subscribe(subscriber) {
|
|
27
|
+
return this.engine.subscribe(subscriber);
|
|
28
|
+
}
|
|
29
|
+
subscribeTo(type, subscriber) {
|
|
30
|
+
return this.engine.subscribeTo(type, subscriber);
|
|
31
|
+
}
|
|
32
|
+
subscribeWith(type, subscriber) {
|
|
33
|
+
return this.engine.subscribeWith(type, subscriber);
|
|
34
|
+
}
|
|
35
|
+
attach() {
|
|
36
|
+
console.error('attach must implement.');
|
|
37
|
+
}
|
|
38
|
+
detach() {
|
|
39
|
+
console.error('attach must implement.');
|
|
40
|
+
}
|
|
41
|
+
eventTarget(type) {
|
|
42
|
+
var _a;
|
|
43
|
+
if (type === 'resize' || type === 'scroll') {
|
|
44
|
+
if (this.container === ((_a = this.contentWindow) === null || _a === void 0 ? void 0 : _a.document)) {
|
|
45
|
+
return this.contentWindow;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
return this.container;
|
|
49
|
+
}
|
|
50
|
+
addEventListener(type, listener, options) {
|
|
51
|
+
var _a, _b, _c, _d;
|
|
52
|
+
const target = this.eventTarget(type);
|
|
53
|
+
if (isOnlyMode(options === null || options === void 0 ? void 0 : options.mode)) {
|
|
54
|
+
target[EVENTS_ONCE_SYMBOL] = target[EVENTS_ONCE_SYMBOL] || {};
|
|
55
|
+
const constructor = this['constructor'];
|
|
56
|
+
constructor[EVENTS_ONCE_SYMBOL] = constructor[EVENTS_ONCE_SYMBOL] || {};
|
|
57
|
+
const handler = target[EVENTS_ONCE_SYMBOL][type];
|
|
58
|
+
const container = constructor[EVENTS_ONCE_SYMBOL][type];
|
|
59
|
+
if (!handler) {
|
|
60
|
+
if (container) {
|
|
61
|
+
if (options.mode === 'onlyChild') {
|
|
62
|
+
if (container.contains(target)) {
|
|
63
|
+
container.removeEventListener(type, container[EVENTS_ONCE_SYMBOL][type], options);
|
|
64
|
+
delete container[EVENTS_ONCE_SYMBOL][type];
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
else if (options.mode === 'onlyParent') {
|
|
68
|
+
if (container.contains(target))
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
target.addEventListener(type, listener, options);
|
|
73
|
+
target[EVENTS_ONCE_SYMBOL][type] = listener;
|
|
74
|
+
constructor[EVENTS_ONCE_SYMBOL][type] = target;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
target[EVENTS_SYMBOL] = target[EVENTS_SYMBOL] || {};
|
|
79
|
+
target[EVENTS_SYMBOL][type] = target[EVENTS_SYMBOL][type] || new Map();
|
|
80
|
+
if (!((_b = (_a = target[EVENTS_SYMBOL][type]) === null || _a === void 0 ? void 0 : _a.get) === null || _b === void 0 ? void 0 : _b.call(_a, listener))) {
|
|
81
|
+
target.addEventListener(type, listener, options);
|
|
82
|
+
(_d = (_c = target[EVENTS_SYMBOL][type]) === null || _c === void 0 ? void 0 : _c.set) === null || _d === void 0 ? void 0 : _d.call(_c, listener, true);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
removeEventListener(type, listener, options) {
|
|
87
|
+
var _a, _b;
|
|
88
|
+
const target = this.eventTarget(type);
|
|
89
|
+
if (isOnlyMode(options === null || options === void 0 ? void 0 : options.mode)) {
|
|
90
|
+
const constructor = this['constructor'];
|
|
91
|
+
constructor[EVENTS_ONCE_SYMBOL] = constructor[EVENTS_ONCE_SYMBOL] || {};
|
|
92
|
+
target[EVENTS_ONCE_SYMBOL] = target[EVENTS_ONCE_SYMBOL] || {};
|
|
93
|
+
delete constructor[EVENTS_ONCE_SYMBOL][type];
|
|
94
|
+
delete target[EVENTS_ONCE_SYMBOL][type];
|
|
95
|
+
target.removeEventListener(type, listener, options);
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
target[EVENTS_SYMBOL] = target[EVENTS_SYMBOL] || {};
|
|
99
|
+
target[EVENTS_SYMBOL][type] = target[EVENTS_SYMBOL][type] || new Map();
|
|
100
|
+
(_b = (_a = target[EVENTS_SYMBOL][type]) === null || _a === void 0 ? void 0 : _a.delete) === null || _b === void 0 ? void 0 : _b.call(_a, listener);
|
|
101
|
+
target.removeEventListener(type, listener, options);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
batchAddEventListener(type, listener, options) {
|
|
105
|
+
this.engine[DRIVER_INSTANCES_SYMBOL] =
|
|
106
|
+
this.engine[DRIVER_INSTANCES_SYMBOL] || [];
|
|
107
|
+
if (!this.engine[DRIVER_INSTANCES_SYMBOL].includes(this)) {
|
|
108
|
+
this.engine[DRIVER_INSTANCES_SYMBOL].push(this);
|
|
109
|
+
}
|
|
110
|
+
this.engine[DRIVER_INSTANCES_SYMBOL].forEach((driver) => {
|
|
111
|
+
const target = driver.eventTarget(type);
|
|
112
|
+
target[EVENTS_BATCH_SYMBOL] = target[EVENTS_BATCH_SYMBOL] || {};
|
|
113
|
+
if (!target[EVENTS_BATCH_SYMBOL][type]) {
|
|
114
|
+
target.addEventListener(type, listener, options);
|
|
115
|
+
target[EVENTS_BATCH_SYMBOL][type] = listener;
|
|
116
|
+
}
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
batchRemoveEventListener(type, listener, options) {
|
|
120
|
+
this.engine[DRIVER_INSTANCES_SYMBOL] =
|
|
121
|
+
this.engine[DRIVER_INSTANCES_SYMBOL] || [];
|
|
122
|
+
this.engine[DRIVER_INSTANCES_SYMBOL].forEach((driver) => {
|
|
123
|
+
const target = driver.eventTarget(type);
|
|
124
|
+
target[EVENTS_BATCH_SYMBOL] = target[EVENTS_BATCH_SYMBOL] || {};
|
|
125
|
+
target.removeEventListener(type, listener, options);
|
|
126
|
+
delete target[EVENTS_BATCH_SYMBOL][type];
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
exports.EventDriver = EventDriver;
|
|
131
|
+
/**
|
|
132
|
+
* 事件引擎
|
|
133
|
+
*/
|
|
134
|
+
class Event extends subscribable_1.Subscribable {
|
|
135
|
+
constructor(props) {
|
|
136
|
+
super();
|
|
137
|
+
this.drivers = [];
|
|
138
|
+
this.containers = [];
|
|
139
|
+
if ((0, types_1.isArr)(props === null || props === void 0 ? void 0 : props.effects)) {
|
|
140
|
+
props.effects.forEach((plugin) => {
|
|
141
|
+
plugin(this);
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
if ((0, types_1.isArr)(props === null || props === void 0 ? void 0 : props.drivers)) {
|
|
145
|
+
this.drivers = props.drivers;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
subscribeTo(type, subscriber) {
|
|
149
|
+
return this.subscribe((event) => {
|
|
150
|
+
if (type && event instanceof type) {
|
|
151
|
+
return subscriber(event);
|
|
152
|
+
}
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
subscribeWith(type, subscriber) {
|
|
156
|
+
return this.subscribe((event) => {
|
|
157
|
+
if ((0, types_1.isArr)(type)) {
|
|
158
|
+
if (type.includes(event === null || event === void 0 ? void 0 : event.type)) {
|
|
159
|
+
return subscriber(event);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
else {
|
|
163
|
+
if (type && (event === null || event === void 0 ? void 0 : event.type) === type) {
|
|
164
|
+
return subscriber(event);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
attachEvents(container, contentWindow = globalThisPolyfill_1.globalThisPolyfill, context) {
|
|
170
|
+
if (!container)
|
|
171
|
+
return;
|
|
172
|
+
if ((0, types_1.isWindow)(container)) {
|
|
173
|
+
return this.attachEvents(container.document, container, context);
|
|
174
|
+
}
|
|
175
|
+
if (container[ATTACHED_SYMBOL])
|
|
176
|
+
return;
|
|
177
|
+
container[ATTACHED_SYMBOL] = this.drivers.map((EventDriver) => {
|
|
178
|
+
const driver = new EventDriver(this, context);
|
|
179
|
+
driver.contentWindow = contentWindow;
|
|
180
|
+
driver.container = container;
|
|
181
|
+
driver.attach(container);
|
|
182
|
+
return driver;
|
|
183
|
+
});
|
|
184
|
+
if (!this.containers.includes(container)) {
|
|
185
|
+
this.containers.push(container);
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
detachEvents(container) {
|
|
189
|
+
if (!container) {
|
|
190
|
+
this.containers.forEach((container) => {
|
|
191
|
+
this.detachEvents(container);
|
|
192
|
+
});
|
|
193
|
+
return;
|
|
194
|
+
}
|
|
195
|
+
if ((0, types_1.isWindow)(container)) {
|
|
196
|
+
return this.detachEvents(container.document);
|
|
197
|
+
}
|
|
198
|
+
if (!container[ATTACHED_SYMBOL])
|
|
199
|
+
return;
|
|
200
|
+
container[ATTACHED_SYMBOL].forEach((driver) => {
|
|
201
|
+
driver.detach(container);
|
|
202
|
+
});
|
|
203
|
+
this[DRIVER_INSTANCES_SYMBOL] = this[DRIVER_INSTANCES_SYMBOL] || [];
|
|
204
|
+
this[DRIVER_INSTANCES_SYMBOL] = this[DRIVER_INSTANCES_SYMBOL].reduce((drivers, driver) => {
|
|
205
|
+
if (driver.container === container) {
|
|
206
|
+
driver.detach(container);
|
|
207
|
+
return drivers;
|
|
208
|
+
}
|
|
209
|
+
return drivers.concat(driver);
|
|
210
|
+
}, []);
|
|
211
|
+
this.containers = this.containers.filter((item) => item !== container);
|
|
212
|
+
delete container[ATTACHED_SYMBOL];
|
|
213
|
+
delete container[EVENTS_SYMBOL];
|
|
214
|
+
delete container[EVENTS_ONCE_SYMBOL];
|
|
215
|
+
delete container[EVENTS_BATCH_SYMBOL];
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
exports.Event = Event;
|
|
219
|
+
//# sourceMappingURL=event.js.map
|
package/lib/event.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event.js","sourceRoot":"","sources":["../src/event.ts"],"names":[],"mappings":"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","sourcesContent":["import { isArr, isWindow } from './types'\nimport { Subscribable, ISubscriber } from './subscribable'\nimport { globalThisPolyfill } from './globalThisPolyfill'\n\nconst ATTACHED_SYMBOL = Symbol('ATTACHED_SYMBOL')\nconst EVENTS_SYMBOL = Symbol('__EVENTS_SYMBOL__')\nconst EVENTS_ONCE_SYMBOL = Symbol('EVENTS_ONCE_SYMBOL')\nconst EVENTS_BATCH_SYMBOL = Symbol('EVENTS_BATCH_SYMBOL')\nconst DRIVER_INSTANCES_SYMBOL = Symbol('DRIVER_INSTANCES_SYMBOL')\n\nexport type EventOptions =\n | boolean\n | (AddEventListenerOptions &\n EventListenerOptions & {\n mode?: 'onlyOne' | 'onlyParent' | 'onlyChild'\n })\n\nexport type EventContainer = Window | HTMLElement | HTMLDocument\n\nexport type EventDriverContainer = HTMLElement | HTMLDocument\n\nexport interface IEventEffect<T> {\n (engine: T): void\n}\n\nexport interface IEventDriver {\n container: EventDriverContainer\n contentWindow: Window\n attach(container: EventDriverContainer): void\n detach(container: EventDriverContainer): void\n dispatch<T extends ICustomEvent<any> = any>(event: T): void | boolean\n subscribe<T extends ICustomEvent<any> = any>(subscriber: ISubscriber<T>): void\n addEventListener<K extends keyof HTMLElementEventMap>(\n type: K,\n listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any,\n options?: boolean | EventOptions\n ): void\n addEventListener(\n type: string,\n listener: EventListenerOrEventListenerObject,\n options?: boolean | EventOptions\n ): void\n addEventListener(type: any, listener: any, options: any): void\n removeEventListener<K extends keyof HTMLElementEventMap>(\n type: K,\n listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any,\n options?: boolean | EventOptions\n ): void\n removeEventListener(\n type: string,\n listener: EventListenerOrEventListenerObject,\n options?: boolean | EventOptions\n ): void\n removeEventListener(type: any, listener: any, options?: any): void\n batchAddEventListener<K extends keyof HTMLElementEventMap>(\n type: K,\n listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any,\n options?: boolean | EventOptions\n ): void\n batchAddEventListener(\n type: string,\n listener: EventListenerOrEventListenerObject,\n options?: boolean | EventOptions\n ): void\n batchAddEventListener(type: any, listener: any, options?: any): void\n batchRemoveEventListener<K extends keyof HTMLElementEventMap>(\n type: K,\n listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any,\n options?: boolean | EventOptions\n ): void\n batchRemoveEventListener(\n type: string,\n listener: EventListenerOrEventListenerObject,\n options?: boolean | EventOptions\n ): void\n batchRemoveEventListener(type: any, listener: any, options: any): void\n}\n\nexport interface IEventDriverClass<T> {\n new (engine: T, context?: any): IEventDriver\n}\n\nexport interface ICustomEvent<EventData = any, EventContext = any> {\n type: string\n data?: EventData\n context?: EventContext\n}\n\nexport interface CustomEventClass {\n new (...args: any[]): any\n}\n\nexport interface IEventProps<T = Event> {\n drivers?: IEventDriverClass<T>[]\n effects?: IEventEffect<T>[]\n}\n\nconst isOnlyMode = (mode: string) =>\n mode === 'onlyOne' || mode === 'onlyChild' || mode === 'onlyParent'\n/**\n * 事件驱动器基类\n */\nexport class EventDriver<Engine extends Event = Event, Context = any>\n implements IEventDriver\n{\n engine: Engine\n\n container: EventDriverContainer = document\n\n contentWindow: Window = globalThisPolyfill\n\n context?: Context\n\n constructor(engine: Engine, context?: Context) {\n this.engine = engine\n this.context = context\n }\n\n dispatch<T extends ICustomEvent<any> = any>(event: T) {\n return this.engine.dispatch(event, this.context)\n }\n\n subscribe<T extends ICustomEvent<any> = any>(subscriber: ISubscriber<T>): ReturnType<Subscribable['subscribe']> {\n return this.engine.subscribe(subscriber)\n }\n\n subscribeTo<T extends CustomEventClass>(\n type: T,\n subscriber: ISubscriber<InstanceType<T>>\n ): ReturnType<Subscribable['subscribe']> {\n return this.engine.subscribeTo(type, subscriber)\n }\n\n subscribeWith<T extends ICustomEvent = ICustomEvent>(\n type: string | string[],\n subscriber: ISubscriber<T>\n ): ReturnType<Subscribable['subscribe']> {\n return this.engine.subscribeWith(type, subscriber)\n }\n\n attach() {\n console.error('attach must implement.')\n }\n\n detach() {\n console.error('attach must implement.')\n }\n\n eventTarget(type: string) {\n if (type === 'resize' || type === 'scroll') {\n if (this.container === this.contentWindow?.document) {\n return this.contentWindow\n }\n }\n return this.container\n }\n\n addEventListener<K extends keyof HTMLElementEventMap>(\n type: K,\n listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any,\n options?: boolean | EventOptions\n ): void\n addEventListener(\n type: string,\n listener: EventListenerOrEventListenerObject,\n options?: boolean | EventOptions\n ): void\n addEventListener(\n type: string,\n listener: EventListenerOrEventListenerObject,\n options?: any\n ) {\n const target = this.eventTarget(type)\n if (isOnlyMode(options?.mode)) {\n target[EVENTS_ONCE_SYMBOL] = target[EVENTS_ONCE_SYMBOL] || {}\n const constructor = this['constructor']\n constructor[EVENTS_ONCE_SYMBOL] = constructor[EVENTS_ONCE_SYMBOL] || {}\n const handler = target[EVENTS_ONCE_SYMBOL][type]\n const container = constructor[EVENTS_ONCE_SYMBOL][type]\n if (!handler) {\n if (container) {\n if (options.mode === 'onlyChild') {\n if (container.contains(target)) {\n container.removeEventListener(\n type,\n container[EVENTS_ONCE_SYMBOL][type],\n options\n )\n delete container[EVENTS_ONCE_SYMBOL][type]\n }\n } else if (options.mode === 'onlyParent') {\n if (container.contains(target)) return\n }\n }\n target.addEventListener(type, listener, options)\n target[EVENTS_ONCE_SYMBOL][type] = listener\n constructor[EVENTS_ONCE_SYMBOL][type] = target\n }\n } else {\n target[EVENTS_SYMBOL] = target[EVENTS_SYMBOL] || {}\n target[EVENTS_SYMBOL][type] = target[EVENTS_SYMBOL][type] || new Map()\n if (!target[EVENTS_SYMBOL][type]?.get?.(listener)) {\n target.addEventListener(type, listener, options)\n target[EVENTS_SYMBOL][type]?.set?.(listener, true)\n }\n }\n }\n\n removeEventListener<K extends keyof HTMLElementEventMap>(\n type: K,\n listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any,\n options?: boolean | EventOptions\n ): void\n removeEventListener(\n type: string,\n listener: EventListenerOrEventListenerObject,\n options?: boolean | EventOptions\n ): void\n removeEventListener(\n type: string,\n listener: EventListenerOrEventListenerObject,\n options?: any\n ) {\n const target = this.eventTarget(type)\n if (isOnlyMode(options?.mode)) {\n const constructor = this['constructor']\n constructor[EVENTS_ONCE_SYMBOL] = constructor[EVENTS_ONCE_SYMBOL] || {}\n target[EVENTS_ONCE_SYMBOL] = target[EVENTS_ONCE_SYMBOL] || {}\n delete constructor[EVENTS_ONCE_SYMBOL][type]\n delete target[EVENTS_ONCE_SYMBOL][type]\n target.removeEventListener(type, listener, options)\n } else {\n target[EVENTS_SYMBOL] = target[EVENTS_SYMBOL] || {}\n target[EVENTS_SYMBOL][type] = target[EVENTS_SYMBOL][type] || new Map()\n target[EVENTS_SYMBOL][type]?.delete?.(listener)\n target.removeEventListener(type, listener, options)\n }\n }\n\n batchAddEventListener<K extends keyof HTMLElementEventMap>(\n type: K,\n listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any,\n options?: boolean | EventOptions\n ): void\n batchAddEventListener(\n type: string,\n listener: EventListenerOrEventListenerObject,\n options?: boolean | EventOptions\n ): void\n batchAddEventListener(\n type: string,\n listener: EventListenerOrEventListenerObject,\n options?: any\n ) {\n this.engine[DRIVER_INSTANCES_SYMBOL] =\n this.engine[DRIVER_INSTANCES_SYMBOL] || []\n if (!this.engine[DRIVER_INSTANCES_SYMBOL].includes(this)) {\n this.engine[DRIVER_INSTANCES_SYMBOL].push(this)\n }\n this.engine[DRIVER_INSTANCES_SYMBOL].forEach((driver) => {\n const target = driver.eventTarget(type)\n target[EVENTS_BATCH_SYMBOL] = target[EVENTS_BATCH_SYMBOL] || {}\n if (!target[EVENTS_BATCH_SYMBOL][type]) {\n target.addEventListener(type, listener, options)\n target[EVENTS_BATCH_SYMBOL][type] = listener\n }\n })\n }\n\n batchRemoveEventListener<K extends keyof HTMLElementEventMap>(\n type: K,\n listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any,\n options?: boolean | EventOptions\n ): void\n batchRemoveEventListener(\n type: string,\n listener: EventListenerOrEventListenerObject,\n options?: boolean | EventOptions\n ): void\n batchRemoveEventListener(\n type: string,\n listener: EventListenerOrEventListenerObject,\n options?: any\n ) {\n this.engine[DRIVER_INSTANCES_SYMBOL] =\n this.engine[DRIVER_INSTANCES_SYMBOL] || []\n this.engine[DRIVER_INSTANCES_SYMBOL].forEach((driver) => {\n const target = driver.eventTarget(type)\n target[EVENTS_BATCH_SYMBOL] = target[EVENTS_BATCH_SYMBOL] || {}\n target.removeEventListener(type, listener, options)\n delete target[EVENTS_BATCH_SYMBOL][type]\n })\n }\n}\n/**\n * 事件引擎\n */\nexport class Event extends Subscribable<ICustomEvent<any>> {\n private drivers: IEventDriverClass<any>[] = []\n private containers: EventContainer[] = []\n constructor(props: IEventProps) {\n super()\n if (isArr(props?.effects)) {\n props.effects.forEach((plugin) => {\n plugin(this)\n })\n }\n if (isArr(props?.drivers)) {\n this.drivers = props.drivers\n }\n }\n\n subscribeTo<T extends CustomEventClass>(\n type: T,\n subscriber: ISubscriber<InstanceType<T>>\n ): ReturnType<Subscribable['subscribe']> {\n return this.subscribe((event) => {\n if (type && event instanceof type) {\n return subscriber(event)\n }\n })\n }\n\n subscribeWith<T extends ICustomEvent = ICustomEvent>(\n type: string | string[],\n subscriber: ISubscriber<T>\n ): ReturnType<Subscribable['subscribe']> {\n return this.subscribe((event) => {\n if (isArr(type)) {\n if (type.includes(event?.type)) {\n return subscriber(event)\n }\n } else {\n if (type && event?.type === type) {\n return subscriber(event)\n }\n }\n })\n }\n\n attachEvents(\n container: EventContainer,\n contentWindow: Window = globalThisPolyfill,\n context?: any\n ) {\n if (!container) return\n if (isWindow(container)) {\n return this.attachEvents(container.document, container, context)\n }\n if (container[ATTACHED_SYMBOL]) return\n container[ATTACHED_SYMBOL] = this.drivers.map((EventDriver) => {\n const driver = new EventDriver(this, context)\n driver.contentWindow = contentWindow\n driver.container = container\n driver.attach(container)\n return driver\n })\n if (!this.containers.includes(container)) {\n this.containers.push(container)\n }\n }\n\n detachEvents(container?: EventContainer) {\n if (!container) {\n this.containers.forEach((container) => {\n this.detachEvents(container)\n })\n return\n }\n if (isWindow(container)) {\n return this.detachEvents(container.document)\n }\n if (!container[ATTACHED_SYMBOL]) return\n container[ATTACHED_SYMBOL].forEach((driver) => {\n driver.detach(container)\n })\n\n this[DRIVER_INSTANCES_SYMBOL] = this[DRIVER_INSTANCES_SYMBOL] || []\n this[DRIVER_INSTANCES_SYMBOL] = this[DRIVER_INSTANCES_SYMBOL].reduce(\n (drivers, driver) => {\n if (driver.container === container) {\n driver.detach(container)\n return drivers\n }\n return drivers.concat(driver)\n },\n []\n )\n this.containers = this.containers.filter((item) => item !== container)\n delete container[ATTACHED_SYMBOL]\n delete container[EVENTS_SYMBOL]\n delete container[EVENTS_ONCE_SYMBOL]\n delete container[EVENTS_BATCH_SYMBOL]\n }\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const globalThisPolyfill: Window;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.globalThisPolyfill = void 0;
|
|
4
|
+
function getGlobalThis() {
|
|
5
|
+
try {
|
|
6
|
+
if (typeof self !== 'undefined') {
|
|
7
|
+
return self;
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
catch (e) { }
|
|
11
|
+
try {
|
|
12
|
+
if (typeof exports.globalThisPolyfill !== 'undefined') {
|
|
13
|
+
return exports.globalThisPolyfill;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
catch (e) { }
|
|
17
|
+
try {
|
|
18
|
+
if (typeof global !== 'undefined') {
|
|
19
|
+
return global;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
catch (e) { }
|
|
23
|
+
return Function('return this')();
|
|
24
|
+
}
|
|
25
|
+
exports.globalThisPolyfill = getGlobalThis();
|
|
26
|
+
//# sourceMappingURL=globalThisPolyfill.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"globalThisPolyfill.js","sourceRoot":"","sources":["../src/globalThisPolyfill.ts"],"names":[],"mappings":";;;AAAA,SAAS,aAAa;IACpB,IAAI,CAAC;QACH,IAAI,OAAO,IAAI,KAAK,WAAW,EAAE,CAAC;YAChC,OAAO,IAAI,CAAA;QACb,CAAC;IACH,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC,CAAA,CAAC;IACd,IAAI,CAAC;QACH,IAAI,OAAO,0BAAkB,KAAK,WAAW,EAAE,CAAC;YAC9C,OAAO,0BAAkB,CAAA;QAC3B,CAAC;IACH,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC,CAAA,CAAC;IACd,IAAI,CAAC;QACH,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;YAClC,OAAO,MAAM,CAAA;QACf,CAAC;IACH,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC,CAAA,CAAC;IACd,OAAO,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAA;AAClC,CAAC;AACY,QAAA,kBAAkB,GAAW,aAAa,EAAE,CAAA","sourcesContent":["function getGlobalThis() {\n try {\n if (typeof self !== 'undefined') {\n return self\n }\n } catch (e) {}\n try {\n if (typeof globalThisPolyfill !== 'undefined') {\n return globalThisPolyfill\n }\n } catch (e) {}\n try {\n if (typeof global !== 'undefined') {\n return global\n }\n } catch (e) {}\n return Function('return this')()\n}\nexport const globalThisPolyfill: Window = getGlobalThis()\n"]}
|
package/lib/index.d.ts
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export * from './event';
|
|
2
|
+
export * from './scroller';
|
|
3
|
+
export * from './subscribable';
|
|
4
|
+
export * from './coordinate';
|
|
5
|
+
export * from './types';
|
|
6
|
+
export * from './uid';
|
|
7
|
+
export * from './clone';
|
|
8
|
+
export * from './instanceof';
|
|
9
|
+
export * from './lru';
|
|
10
|
+
export * from './compose';
|
|
11
|
+
export * from './array';
|
|
12
|
+
export * from './keycode';
|
|
13
|
+
export * from './animation';
|
|
14
|
+
export * from './request-idle';
|
|
15
|
+
export * from './element';
|
|
16
|
+
export * from './globalThisPolyfill';
|
|
17
|
+
export * from './observer';
|
package/lib/index.js
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./event"), exports);
|
|
18
|
+
__exportStar(require("./scroller"), exports);
|
|
19
|
+
__exportStar(require("./subscribable"), exports);
|
|
20
|
+
__exportStar(require("./coordinate"), exports);
|
|
21
|
+
__exportStar(require("./types"), exports);
|
|
22
|
+
__exportStar(require("./uid"), exports);
|
|
23
|
+
__exportStar(require("./clone"), exports);
|
|
24
|
+
__exportStar(require("./instanceof"), exports);
|
|
25
|
+
__exportStar(require("./lru"), exports);
|
|
26
|
+
__exportStar(require("./compose"), exports);
|
|
27
|
+
__exportStar(require("./array"), exports);
|
|
28
|
+
__exportStar(require("./keycode"), exports);
|
|
29
|
+
__exportStar(require("./animation"), exports);
|
|
30
|
+
__exportStar(require("./request-idle"), exports);
|
|
31
|
+
__exportStar(require("./element"), exports);
|
|
32
|
+
__exportStar(require("./globalThisPolyfill"), exports);
|
|
33
|
+
__exportStar(require("./observer"), exports);
|
|
34
|
+
//# sourceMappingURL=index.js.map
|
package/lib/index.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,0CAAuB;AACvB,6CAA0B;AAC1B,iDAA8B;AAC9B,+CAA4B;AAC5B,0CAAuB;AACvB,wCAAqB;AACrB,0CAAuB;AACvB,+CAA4B;AAC5B,wCAAqB;AACrB,4CAAyB;AACzB,0CAAuB;AACvB,4CAAyB;AACzB,8CAA2B;AAC3B,iDAA8B;AAC9B,4CAAyB;AACzB,uDAAoC;AACpC,6CAA0B","sourcesContent":["export * from './event'\nexport * from './scroller'\nexport * from './subscribable'\nexport * from './coordinate'\nexport * from './types'\nexport * from './uid'\nexport * from './clone'\nexport * from './instanceof'\nexport * from './lru'\nexport * from './compose'\nexport * from './array'\nexport * from './keycode'\nexport * from './animation'\nexport * from './request-idle'\nexport * from './element'\nexport * from './globalThisPolyfill'\nexport * from './observer'\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const instOf: (value: any, cls: any) => boolean;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.instOf = void 0;
|
|
4
|
+
const types_1 = require("./types");
|
|
5
|
+
const globalThisPolyfill_1 = require("./globalThisPolyfill");
|
|
6
|
+
const instOf = (value, cls) => {
|
|
7
|
+
if ((0, types_1.isFn)(cls))
|
|
8
|
+
return value instanceof cls;
|
|
9
|
+
if ((0, types_1.isStr)(cls))
|
|
10
|
+
return globalThisPolyfill_1.globalThisPolyfill[cls]
|
|
11
|
+
? value instanceof globalThisPolyfill_1.globalThisPolyfill[cls]
|
|
12
|
+
: false;
|
|
13
|
+
return false;
|
|
14
|
+
};
|
|
15
|
+
exports.instOf = instOf;
|
|
16
|
+
//# sourceMappingURL=instanceof.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"instanceof.js","sourceRoot":"","sources":["../src/instanceof.ts"],"names":[],"mappings":";;;AAAA,mCAAqC;AACrC,6DAAyD;AAClD,MAAM,MAAM,GAAG,CAAC,KAAU,EAAE,GAAQ,EAAE,EAAE;IAC7C,IAAI,IAAA,YAAI,EAAC,GAAG,CAAC;QAAE,OAAO,KAAK,YAAY,GAAG,CAAA;IAC1C,IAAI,IAAA,aAAK,EAAC,GAAG,CAAC;QACZ,OAAO,uCAAkB,CAAC,GAAG,CAAC;YAC5B,CAAC,CAAC,KAAK,YAAY,uCAAkB,CAAC,GAAG,CAAC;YAC1C,CAAC,CAAC,KAAK,CAAA;IACX,OAAO,KAAK,CAAA;AACd,CAAC,CAAA;AAPY,QAAA,MAAM,UAOlB","sourcesContent":["import { isStr, isFn } from './types'\nimport { globalThisPolyfill } from './globalThisPolyfill'\nexport const instOf = (value: any, cls: any) => {\n if (isFn(cls)) return value instanceof cls\n if (isStr(cls))\n return globalThisPolyfill[cls]\n ? value instanceof globalThisPolyfill[cls]\n : false\n return false\n}\n"]}
|