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

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/esm/element.js ADDED
@@ -0,0 +1,138 @@
1
+ import { Point } from './coordinate';
2
+ const InlineLayoutTagNames = new Set([
3
+ 'A',
4
+ 'ABBR',
5
+ 'ACRONYM',
6
+ 'AUDIO',
7
+ 'B',
8
+ 'BDI',
9
+ 'BDO',
10
+ 'BIG',
11
+ 'BR',
12
+ 'BUTTON',
13
+ 'CANVAS',
14
+ 'CITE',
15
+ 'CODE',
16
+ 'DATA',
17
+ 'DATALIST',
18
+ 'DEL',
19
+ 'DFN',
20
+ 'EM',
21
+ 'EMBED',
22
+ 'I',
23
+ 'IFRAME',
24
+ 'IMG',
25
+ 'INS',
26
+ 'KBD',
27
+ 'LABEL',
28
+ 'MAP',
29
+ 'MARK',
30
+ 'METER',
31
+ 'NOSCRIPT',
32
+ 'OBJECT',
33
+ 'OUTPUT',
34
+ 'PICTURE',
35
+ 'PROGRESS',
36
+ 'Q',
37
+ 'RUBY',
38
+ 'S',
39
+ 'SAMP',
40
+ 'SELECT',
41
+ 'SLOT',
42
+ 'SMALL',
43
+ 'STRONG',
44
+ 'SUB',
45
+ 'SUP',
46
+ 'SVG',
47
+ 'TEMPLATE',
48
+ 'TEXTAREA',
49
+ 'TIME',
50
+ 'U',
51
+ 'TT',
52
+ 'VAR',
53
+ 'VIDEO',
54
+ 'WBR',
55
+ 'INPUT',
56
+ 'SPAN',
57
+ ]);
58
+ export const calcElementOuterWidth = (innerWidth, style) => {
59
+ return (innerWidth +
60
+ parseFloat(style.marginLeft) +
61
+ parseFloat(style.marginRight) +
62
+ parseFloat(style.paddingLeft) +
63
+ parseFloat(style.paddingRight) +
64
+ parseFloat(style.borderLeftWidth) +
65
+ parseFloat(style.borderRightWidth));
66
+ };
67
+ export const calcElementLayout = (element) => {
68
+ if (!element)
69
+ return 'vertical';
70
+ const parent = element.parentElement;
71
+ if (!parent)
72
+ return 'vertical';
73
+ const tagName = element.tagName;
74
+ const parentTagName = parent.tagName;
75
+ const style = getComputedStyle(element);
76
+ const parentStyle = getComputedStyle(parent);
77
+ const isNotFullWidth = () => {
78
+ const innerWidth = element.getBoundingClientRect().width;
79
+ const outerWidth = calcElementOuterWidth(innerWidth, style);
80
+ const parentInnerWidth = parent.getBoundingClientRect().width;
81
+ return outerWidth.toFixed(0) < parentInnerWidth.toFixed(0);
82
+ };
83
+ if (tagName === 'TH' || tagName === 'TD') {
84
+ if (parentTagName === 'TR')
85
+ return 'horizontal';
86
+ }
87
+ if (parentStyle.display === 'flex' && parentStyle.flexDirection === 'row')
88
+ return 'horizontal';
89
+ if (parentStyle.display === 'grid') {
90
+ if (isNotFullWidth()) {
91
+ return 'horizontal';
92
+ }
93
+ }
94
+ if (InlineLayoutTagNames.has(tagName)) {
95
+ if (style.display === 'block') {
96
+ if (style.float === 'left' || style.float === 'right') {
97
+ if (isNotFullWidth()) {
98
+ return 'horizontal';
99
+ }
100
+ }
101
+ return 'vertical';
102
+ }
103
+ return 'horizontal';
104
+ }
105
+ };
106
+ export const calcElementTranslate = (element) => {
107
+ var _a, _b, _c;
108
+ const transform = (_a = element === null || element === void 0 ? void 0 : element.style) === null || _a === void 0 ? void 0 : _a.transform;
109
+ if (transform) {
110
+ const [x, y] = (_c = (_b = transform
111
+ .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];
112
+ return new Point(Number(x), Number(y));
113
+ }
114
+ else {
115
+ return new Point(Number(element.offsetLeft), Number(element.offsetTop));
116
+ }
117
+ };
118
+ export const calcElementRotate = (element) => {
119
+ var _a, _b, _c;
120
+ const transform = (_a = element === null || element === void 0 ? void 0 : element.style) === null || _a === void 0 ? void 0 : _a.transform;
121
+ if (transform) {
122
+ return Number((_c = (_b = transform.match(/rotate\(\s*([-\d.]+)/)) === null || _b === void 0 ? void 0 : _b[1]) !== null && _c !== void 0 ? _c : 0);
123
+ }
124
+ else {
125
+ return 0;
126
+ }
127
+ };
128
+ export const calcElementScale = (element) => {
129
+ var _a, _b, _c;
130
+ const transform = (_a = element === null || element === void 0 ? void 0 : element.style) === null || _a === void 0 ? void 0 : _a.transform;
131
+ if (transform) {
132
+ return Number((_c = (_b = transform.match(/scale\(\s*([-\d.]+)/)) === null || _b === void 0 ? void 0 : _b[1]) !== null && _c !== void 0 ? _c : 0);
133
+ }
134
+ else {
135
+ return 0;
136
+ }
137
+ };
138
+ //# 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/esm/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/esm/event.js ADDED
@@ -0,0 +1,214 @@
1
+ import { isArr, isWindow } from './types';
2
+ import { Subscribable } from './subscribable';
3
+ import { globalThisPolyfill } from './globalThisPolyfill';
4
+ const ATTACHED_SYMBOL = Symbol('ATTACHED_SYMBOL');
5
+ const EVENTS_SYMBOL = Symbol('__EVENTS_SYMBOL__');
6
+ const EVENTS_ONCE_SYMBOL = Symbol('EVENTS_ONCE_SYMBOL');
7
+ const EVENTS_BATCH_SYMBOL = Symbol('EVENTS_BATCH_SYMBOL');
8
+ const DRIVER_INSTANCES_SYMBOL = Symbol('DRIVER_INSTANCES_SYMBOL');
9
+ const isOnlyMode = (mode) => mode === 'onlyOne' || mode === 'onlyChild' || mode === 'onlyParent';
10
+ /**
11
+ * 事件驱动器基类
12
+ */
13
+ export class EventDriver {
14
+ constructor(engine, context) {
15
+ this.container = document;
16
+ this.contentWindow = globalThisPolyfill;
17
+ this.engine = engine;
18
+ this.context = context;
19
+ }
20
+ dispatch(event) {
21
+ return this.engine.dispatch(event, this.context);
22
+ }
23
+ subscribe(subscriber) {
24
+ return this.engine.subscribe(subscriber);
25
+ }
26
+ subscribeTo(type, subscriber) {
27
+ return this.engine.subscribeTo(type, subscriber);
28
+ }
29
+ subscribeWith(type, subscriber) {
30
+ return this.engine.subscribeWith(type, subscriber);
31
+ }
32
+ attach() {
33
+ console.error('attach must implement.');
34
+ }
35
+ detach() {
36
+ console.error('attach must implement.');
37
+ }
38
+ eventTarget(type) {
39
+ var _a;
40
+ if (type === 'resize' || type === 'scroll') {
41
+ if (this.container === ((_a = this.contentWindow) === null || _a === void 0 ? void 0 : _a.document)) {
42
+ return this.contentWindow;
43
+ }
44
+ }
45
+ return this.container;
46
+ }
47
+ addEventListener(type, listener, options) {
48
+ var _a, _b, _c, _d;
49
+ const target = this.eventTarget(type);
50
+ if (isOnlyMode(options === null || options === void 0 ? void 0 : options.mode)) {
51
+ target[EVENTS_ONCE_SYMBOL] = target[EVENTS_ONCE_SYMBOL] || {};
52
+ const constructor = this['constructor'];
53
+ constructor[EVENTS_ONCE_SYMBOL] = constructor[EVENTS_ONCE_SYMBOL] || {};
54
+ const handler = target[EVENTS_ONCE_SYMBOL][type];
55
+ const container = constructor[EVENTS_ONCE_SYMBOL][type];
56
+ if (!handler) {
57
+ if (container) {
58
+ if (options.mode === 'onlyChild') {
59
+ if (container.contains(target)) {
60
+ container.removeEventListener(type, container[EVENTS_ONCE_SYMBOL][type], options);
61
+ delete container[EVENTS_ONCE_SYMBOL][type];
62
+ }
63
+ }
64
+ else if (options.mode === 'onlyParent') {
65
+ if (container.contains(target))
66
+ return;
67
+ }
68
+ }
69
+ target.addEventListener(type, listener, options);
70
+ target[EVENTS_ONCE_SYMBOL][type] = listener;
71
+ constructor[EVENTS_ONCE_SYMBOL][type] = target;
72
+ }
73
+ }
74
+ else {
75
+ target[EVENTS_SYMBOL] = target[EVENTS_SYMBOL] || {};
76
+ target[EVENTS_SYMBOL][type] = target[EVENTS_SYMBOL][type] || new Map();
77
+ 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))) {
78
+ target.addEventListener(type, listener, options);
79
+ (_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);
80
+ }
81
+ }
82
+ }
83
+ removeEventListener(type, listener, options) {
84
+ var _a, _b;
85
+ const target = this.eventTarget(type);
86
+ if (isOnlyMode(options === null || options === void 0 ? void 0 : options.mode)) {
87
+ const constructor = this['constructor'];
88
+ constructor[EVENTS_ONCE_SYMBOL] = constructor[EVENTS_ONCE_SYMBOL] || {};
89
+ target[EVENTS_ONCE_SYMBOL] = target[EVENTS_ONCE_SYMBOL] || {};
90
+ delete constructor[EVENTS_ONCE_SYMBOL][type];
91
+ delete target[EVENTS_ONCE_SYMBOL][type];
92
+ target.removeEventListener(type, listener, options);
93
+ }
94
+ else {
95
+ target[EVENTS_SYMBOL] = target[EVENTS_SYMBOL] || {};
96
+ target[EVENTS_SYMBOL][type] = target[EVENTS_SYMBOL][type] || new Map();
97
+ (_b = (_a = target[EVENTS_SYMBOL][type]) === null || _a === void 0 ? void 0 : _a.delete) === null || _b === void 0 ? void 0 : _b.call(_a, listener);
98
+ target.removeEventListener(type, listener, options);
99
+ }
100
+ }
101
+ batchAddEventListener(type, listener, options) {
102
+ this.engine[DRIVER_INSTANCES_SYMBOL] =
103
+ this.engine[DRIVER_INSTANCES_SYMBOL] || [];
104
+ if (!this.engine[DRIVER_INSTANCES_SYMBOL].includes(this)) {
105
+ this.engine[DRIVER_INSTANCES_SYMBOL].push(this);
106
+ }
107
+ this.engine[DRIVER_INSTANCES_SYMBOL].forEach((driver) => {
108
+ const target = driver.eventTarget(type);
109
+ target[EVENTS_BATCH_SYMBOL] = target[EVENTS_BATCH_SYMBOL] || {};
110
+ if (!target[EVENTS_BATCH_SYMBOL][type]) {
111
+ target.addEventListener(type, listener, options);
112
+ target[EVENTS_BATCH_SYMBOL][type] = listener;
113
+ }
114
+ });
115
+ }
116
+ batchRemoveEventListener(type, listener, options) {
117
+ this.engine[DRIVER_INSTANCES_SYMBOL] =
118
+ this.engine[DRIVER_INSTANCES_SYMBOL] || [];
119
+ this.engine[DRIVER_INSTANCES_SYMBOL].forEach((driver) => {
120
+ const target = driver.eventTarget(type);
121
+ target[EVENTS_BATCH_SYMBOL] = target[EVENTS_BATCH_SYMBOL] || {};
122
+ target.removeEventListener(type, listener, options);
123
+ delete target[EVENTS_BATCH_SYMBOL][type];
124
+ });
125
+ }
126
+ }
127
+ /**
128
+ * 事件引擎
129
+ */
130
+ export class Event extends Subscribable {
131
+ constructor(props) {
132
+ super();
133
+ this.drivers = [];
134
+ this.containers = [];
135
+ if (isArr(props === null || props === void 0 ? void 0 : props.effects)) {
136
+ props.effects.forEach((plugin) => {
137
+ plugin(this);
138
+ });
139
+ }
140
+ if (isArr(props === null || props === void 0 ? void 0 : props.drivers)) {
141
+ this.drivers = props.drivers;
142
+ }
143
+ }
144
+ subscribeTo(type, subscriber) {
145
+ return this.subscribe((event) => {
146
+ if (type && event instanceof type) {
147
+ return subscriber(event);
148
+ }
149
+ });
150
+ }
151
+ subscribeWith(type, subscriber) {
152
+ return this.subscribe((event) => {
153
+ if (isArr(type)) {
154
+ if (type.includes(event === null || event === void 0 ? void 0 : event.type)) {
155
+ return subscriber(event);
156
+ }
157
+ }
158
+ else {
159
+ if (type && (event === null || event === void 0 ? void 0 : event.type) === type) {
160
+ return subscriber(event);
161
+ }
162
+ }
163
+ });
164
+ }
165
+ attachEvents(container, contentWindow = globalThisPolyfill, context) {
166
+ if (!container)
167
+ return;
168
+ if (isWindow(container)) {
169
+ return this.attachEvents(container.document, container, context);
170
+ }
171
+ if (container[ATTACHED_SYMBOL])
172
+ return;
173
+ container[ATTACHED_SYMBOL] = this.drivers.map((EventDriver) => {
174
+ const driver = new EventDriver(this, context);
175
+ driver.contentWindow = contentWindow;
176
+ driver.container = container;
177
+ driver.attach(container);
178
+ return driver;
179
+ });
180
+ if (!this.containers.includes(container)) {
181
+ this.containers.push(container);
182
+ }
183
+ }
184
+ detachEvents(container) {
185
+ if (!container) {
186
+ this.containers.forEach((container) => {
187
+ this.detachEvents(container);
188
+ });
189
+ return;
190
+ }
191
+ if (isWindow(container)) {
192
+ return this.detachEvents(container.document);
193
+ }
194
+ if (!container[ATTACHED_SYMBOL])
195
+ return;
196
+ container[ATTACHED_SYMBOL].forEach((driver) => {
197
+ driver.detach(container);
198
+ });
199
+ this[DRIVER_INSTANCES_SYMBOL] = this[DRIVER_INSTANCES_SYMBOL] || [];
200
+ this[DRIVER_INSTANCES_SYMBOL] = this[DRIVER_INSTANCES_SYMBOL].reduce((drivers, driver) => {
201
+ if (driver.container === container) {
202
+ driver.detach(container);
203
+ return drivers;
204
+ }
205
+ return drivers.concat(driver);
206
+ }, []);
207
+ this.containers = this.containers.filter((item) => item !== container);
208
+ delete container[ATTACHED_SYMBOL];
209
+ delete container[EVENTS_SYMBOL];
210
+ delete container[EVENTS_ONCE_SYMBOL];
211
+ delete container[EVENTS_BATCH_SYMBOL];
212
+ }
213
+ }
214
+ //# 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,23 @@
1
+ function getGlobalThis() {
2
+ try {
3
+ if (typeof self !== 'undefined') {
4
+ return self;
5
+ }
6
+ }
7
+ catch (e) { }
8
+ try {
9
+ if (typeof globalThisPolyfill !== 'undefined') {
10
+ return globalThisPolyfill;
11
+ }
12
+ }
13
+ catch (e) { }
14
+ try {
15
+ if (typeof global !== 'undefined') {
16
+ return global;
17
+ }
18
+ }
19
+ catch (e) { }
20
+ return Function('return this')();
21
+ }
22
+ export const globalThisPolyfill = getGlobalThis();
23
+ //# 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,kBAAkB,KAAK,WAAW,EAAE,CAAC;YAC9C,OAAO,kBAAkB,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;AACD,MAAM,CAAC,MAAM,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/esm/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/esm/index.js ADDED
@@ -0,0 +1,18 @@
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';
18
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAA;AACvB,cAAc,YAAY,CAAA;AAC1B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,cAAc,CAAA;AAC5B,cAAc,SAAS,CAAA;AACvB,cAAc,OAAO,CAAA;AACrB,cAAc,SAAS,CAAA;AACvB,cAAc,cAAc,CAAA;AAC5B,cAAc,OAAO,CAAA;AACrB,cAAc,WAAW,CAAA;AACzB,cAAc,SAAS,CAAA;AACvB,cAAc,WAAW,CAAA;AACzB,cAAc,aAAa,CAAA;AAC3B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,WAAW,CAAA;AACzB,cAAc,sBAAsB,CAAA;AACpC,cAAc,YAAY,CAAA","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,12 @@
1
+ import { isStr, isFn } from './types';
2
+ import { globalThisPolyfill } from './globalThisPolyfill';
3
+ export const instOf = (value, cls) => {
4
+ if (isFn(cls))
5
+ return value instanceof cls;
6
+ if (isStr(cls))
7
+ return globalThisPolyfill[cls]
8
+ ? value instanceof globalThisPolyfill[cls]
9
+ : false;
10
+ return false;
11
+ };
12
+ //# sourceMappingURL=instanceof.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"instanceof.js","sourceRoot":"","sources":["../src/instanceof.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,SAAS,CAAA;AACrC,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AACzD,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,KAAU,EAAE,GAAQ,EAAE,EAAE;IAC7C,IAAI,IAAI,CAAC,GAAG,CAAC;QAAE,OAAO,KAAK,YAAY,GAAG,CAAA;IAC1C,IAAI,KAAK,CAAC,GAAG,CAAC;QACZ,OAAO,kBAAkB,CAAC,GAAG,CAAC;YAC5B,CAAC,CAAC,KAAK,YAAY,kBAAkB,CAAC,GAAG,CAAC;YAC1C,CAAC,CAAC,KAAK,CAAA;IACX,OAAO,KAAK,CAAA;AACd,CAAC,CAAA","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"]}