@nokecy/designer-shared 0.0.0-stage → 2.0.0-beta.12

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 (131) hide show
  1. package/LICENSE +21 -0
  2. package/LICENSE.md +21 -0
  3. package/PROVENANCE.json +35 -0
  4. package/README.md +9 -2
  5. package/esm/animation.d.ts +2 -0
  6. package/esm/animation.js +34 -0
  7. package/esm/animation.js.map +1 -0
  8. package/esm/array.d.ts +37 -0
  9. package/esm/array.js +112 -0
  10. package/esm/array.js.map +1 -0
  11. package/esm/clone.d.ts +4 -0
  12. package/esm/clone.js +106 -0
  13. package/esm/clone.js.map +1 -0
  14. package/esm/compose.d.ts +1 -0
  15. package/esm/compose.js +8 -0
  16. package/esm/compose.js.map +1 -0
  17. package/esm/coordinate.d.ts +106 -0
  18. package/esm/coordinate.js +485 -0
  19. package/esm/coordinate.js.map +1 -0
  20. package/esm/element.d.ts +6 -0
  21. package/esm/element.js +138 -0
  22. package/esm/element.js.map +1 -0
  23. package/esm/event.d.ts +81 -0
  24. package/esm/event.js +214 -0
  25. package/esm/event.js.map +1 -0
  26. package/esm/globalThisPolyfill.d.ts +1 -0
  27. package/esm/globalThisPolyfill.js +23 -0
  28. package/esm/globalThisPolyfill.js.map +1 -0
  29. package/esm/index.d.ts +17 -0
  30. package/esm/index.js +18 -0
  31. package/esm/index.js.map +1 -0
  32. package/esm/instanceof.d.ts +1 -0
  33. package/esm/instanceof.js +12 -0
  34. package/esm/instanceof.js.map +1 -0
  35. package/esm/keycode.d.ts +147 -0
  36. package/esm/keycode.js +151 -0
  37. package/esm/keycode.js.map +1 -0
  38. package/esm/lru.d.ts +73 -0
  39. package/esm/lru.js +294 -0
  40. package/esm/lru.js.map +1 -0
  41. package/esm/observer.d.ts +9 -0
  42. package/esm/observer.js +30 -0
  43. package/esm/observer.js.map +1 -0
  44. package/esm/request-idle.d.ts +10 -0
  45. package/esm/request-idle.js +9 -0
  46. package/esm/request-idle.js.map +1 -0
  47. package/esm/scroller.d.ts +10 -0
  48. package/esm/scroller.js +83 -0
  49. package/esm/scroller.js.map +1 -0
  50. package/esm/subscribable.d.ts +14 -0
  51. package/esm/subscribable.js +49 -0
  52. package/esm/subscribable.js.map +1 -0
  53. package/esm/types.d.ts +13 -0
  54. package/esm/types.js +22 -0
  55. package/esm/types.js.map +1 -0
  56. package/esm/uid.d.ts +1 -0
  57. package/esm/uid.js +10 -0
  58. package/esm/uid.js.map +1 -0
  59. package/lib/animation.d.ts +2 -0
  60. package/lib/animation.js +39 -0
  61. package/lib/animation.js.map +1 -0
  62. package/lib/array.d.ts +37 -0
  63. package/lib/array.js +126 -0
  64. package/lib/array.js.map +1 -0
  65. package/lib/clone.d.ts +4 -0
  66. package/lib/clone.js +111 -0
  67. package/lib/clone.js.map +1 -0
  68. package/lib/compose.d.ts +1 -0
  69. package/lib/compose.js +12 -0
  70. package/lib/compose.js.map +1 -0
  71. package/lib/coordinate.d.ts +106 -0
  72. package/lib/coordinate.js +514 -0
  73. package/lib/coordinate.js.map +1 -0
  74. package/lib/element.d.ts +6 -0
  75. package/lib/element.js +146 -0
  76. package/lib/element.js.map +1 -0
  77. package/lib/event.d.ts +81 -0
  78. package/lib/event.js +219 -0
  79. package/lib/event.js.map +1 -0
  80. package/lib/globalThisPolyfill.d.ts +1 -0
  81. package/lib/globalThisPolyfill.js +26 -0
  82. package/lib/globalThisPolyfill.js.map +1 -0
  83. package/lib/index.d.ts +17 -0
  84. package/lib/index.js +34 -0
  85. package/lib/index.js.map +1 -0
  86. package/lib/instanceof.d.ts +1 -0
  87. package/lib/instanceof.js +16 -0
  88. package/lib/instanceof.js.map +1 -0
  89. package/lib/keycode.d.ts +147 -0
  90. package/lib/keycode.js +155 -0
  91. package/lib/keycode.js.map +1 -0
  92. package/lib/lru.d.ts +73 -0
  93. package/lib/lru.js +298 -0
  94. package/lib/lru.js.map +1 -0
  95. package/lib/observer.d.ts +9 -0
  96. package/lib/observer.js +34 -0
  97. package/lib/observer.js.map +1 -0
  98. package/lib/request-idle.d.ts +10 -0
  99. package/lib/request-idle.js +14 -0
  100. package/lib/request-idle.js.map +1 -0
  101. package/lib/scroller.d.ts +10 -0
  102. package/lib/scroller.js +89 -0
  103. package/lib/scroller.js.map +1 -0
  104. package/lib/subscribable.d.ts +14 -0
  105. package/lib/subscribable.js +53 -0
  106. package/lib/subscribable.js.map +1 -0
  107. package/lib/types.d.ts +13 -0
  108. package/lib/types.js +30 -0
  109. package/lib/types.js.map +1 -0
  110. package/lib/uid.d.ts +1 -0
  111. package/lib/uid.js +13 -0
  112. package/lib/uid.js.map +1 -0
  113. package/package.json +46 -4
  114. package/src/animation.ts +38 -0
  115. package/src/array.ts +301 -0
  116. package/src/clone.ts +105 -0
  117. package/src/compose.ts +7 -0
  118. package/src/coordinate.ts +640 -0
  119. package/src/element.ts +144 -0
  120. package/src/event.ts +395 -0
  121. package/src/globalThisPolyfill.ts +19 -0
  122. package/src/index.ts +17 -0
  123. package/src/instanceof.ts +10 -0
  124. package/src/keycode.ts +150 -0
  125. package/src/lru.ts +322 -0
  126. package/src/observer.ts +38 -0
  127. package/src/request-idle.ts +22 -0
  128. package/src/scroller.ts +113 -0
  129. package/src/subscribable.ts +60 -0
  130. package/src/types.ts +27 -0
  131. 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
@@ -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
@@ -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"]}