@whitesev/pops 2.0.7 → 2.0.8

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/dist/index.umd.js CHANGED
@@ -6,12 +6,6 @@
6
6
 
7
7
  const SymbolEvents = Symbol("events_" + (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1));
8
8
 
9
- const PopsCoreDefaultEnv = {
10
- document: document,
11
- window: window,
12
- globalThis: globalThis,
13
- self: self,
14
- };
15
9
  const PopsCoreEnv = {
16
10
  document: document,
17
11
  window: window,
@@ -19,12 +13,6 @@
19
13
  self: self,
20
14
  };
21
15
  const PopsCore = {
22
- init(option) {
23
- if (!option) {
24
- option = Object.assign({}, PopsCoreDefaultEnv);
25
- }
26
- Object.assign(PopsCoreEnv, option);
27
- },
28
16
  get document() {
29
17
  return PopsCoreEnv.document;
30
18
  },
@@ -44,21 +32,266 @@
44
32
  },
45
33
  };
46
34
 
47
- let t$1 = class t{constructor(){this.__map={};}beforeEach(t){this.__interceptor=t;}on(t,i){const s=Array.isArray(t)?t:[t];for(const t of s){this.__map[t]=this.__map[t]||[];const s=this.__map[t];s&&s.push(i);}return this}emit(t,i,s){void 0!==this.__interceptor?this.__interceptor(t,(()=>{this.__emit(t,i),s&&s();})):(this.__emit(t,i),s&&s());}__emit(t,i){const s=this.__map[t];if(Array.isArray(s)&&(null==s?void 0:s.length))for(const _ of s)_(i,t);this.event=i;}off(t,i){const s=this.__map[t];if(void 0!==s)if(void 0===i)delete this.__map[t];else {const t=s.findIndex((t=>t===i));s.splice(t,1);}}destroy(){this.__map={};}};
35
+ const createCache = (lastNumberWeakMap) => {
36
+ return (collection, nextNumber) => {
37
+ lastNumberWeakMap.set(collection, nextNumber);
38
+ return nextNumber;
39
+ };
40
+ };
41
+
42
+ /*
43
+ * The value of the constant Number.MAX_SAFE_INTEGER equals (2 ** 53 - 1) but it
44
+ * is fairly new.
45
+ */
46
+ const MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER === undefined ? 9007199254740991 : Number.MAX_SAFE_INTEGER;
47
+ const TWO_TO_THE_POWER_OF_TWENTY_NINE = 536870912;
48
+ const TWO_TO_THE_POWER_OF_THIRTY = TWO_TO_THE_POWER_OF_TWENTY_NINE * 2;
49
+ const createGenerateUniqueNumber = (cache, lastNumberWeakMap) => {
50
+ return (collection) => {
51
+ const lastNumber = lastNumberWeakMap.get(collection);
52
+ /*
53
+ * Let's try the cheapest algorithm first. It might fail to produce a new
54
+ * number, but it is so cheap that it is okay to take the risk. Just
55
+ * increase the last number by one or reset it to 0 if we reached the upper
56
+ * bound of SMIs (which stands for small integers). When the last number is
57
+ * unknown it is assumed that the collection contains zero based consecutive
58
+ * numbers.
59
+ */
60
+ let nextNumber = lastNumber === undefined ? collection.size : lastNumber < TWO_TO_THE_POWER_OF_THIRTY ? lastNumber + 1 : 0;
61
+ if (!collection.has(nextNumber)) {
62
+ return cache(collection, nextNumber);
63
+ }
64
+ /*
65
+ * If there are less than half of 2 ** 30 numbers stored in the collection,
66
+ * the chance to generate a new random number in the range from 0 to 2 ** 30
67
+ * is at least 50%. It's benifitial to use only SMIs because they perform
68
+ * much better in any environment based on V8.
69
+ */
70
+ if (collection.size < TWO_TO_THE_POWER_OF_TWENTY_NINE) {
71
+ while (collection.has(nextNumber)) {
72
+ nextNumber = Math.floor(Math.random() * TWO_TO_THE_POWER_OF_THIRTY);
73
+ }
74
+ return cache(collection, nextNumber);
75
+ }
76
+ // Quickly check if there is a theoretical chance to generate a new number.
77
+ if (collection.size > MAX_SAFE_INTEGER) {
78
+ throw new Error('Congratulations, you created a collection of unique numbers which uses all available integers!');
79
+ }
80
+ // Otherwise use the full scale of safely usable integers.
81
+ while (collection.has(nextNumber)) {
82
+ nextNumber = Math.floor(Math.random() * MAX_SAFE_INTEGER);
83
+ }
84
+ return cache(collection, nextNumber);
85
+ };
86
+ };
87
+
88
+ const LAST_NUMBER_WEAK_MAP = new WeakMap();
89
+ const cache = createCache(LAST_NUMBER_WEAK_MAP);
90
+ const generateUniqueNumber = createGenerateUniqueNumber(cache, LAST_NUMBER_WEAK_MAP);
91
+
92
+ const isMessagePort = (sender) => {
93
+ return typeof sender.start === 'function';
94
+ };
48
95
 
49
- const n$1="clientX",e$2="clientY",t=16,c$3="start",o$1="move",s$1="cancel",u$3="end",a$2="left",i$3="right",r$4="up",d$1="down",m$2={4:"start",5:"move",1:"end",3:"cancel"};function v$1(n){return m$2[n]}function b(n,e,t){const c={1:{0:{move:4},4:{move:5,end:1,cancel:3},5:{move:5,end:1,cancel:3}},0:{4:{move:2,end:1,cancel:3},5:{start:2,move:2,end:1,cancel:3}}}[Number(n)][e];return void 0!==c&&c[t]||0}function g$1(n){[1,3,2].includes(n.state)&&(n.state=0);}function h$3(n){return [5,1,3].includes(n)}function j(n){if(n.disabled)return n.state=0,!0}function O(n,e){return Object.assign(Object.assign(Object.assign({},n),e),{state:0,disabled:!1})}function p$3(n){return Math.round(100*n)/100}
96
+ const PORT_MAP = new WeakMap();
50
97
 
51
- function r$3(){let t,o,i,r,a=0;return function(u){if(t=o,void 0!==u){a=Number.MAX_SAFE_INTEGER>a?++a:1;const h=function(t,o){const{phase:i,points:r,changedPoints:a,nativeEvent:u}=t,h=r.length,p=c$3===i,g=u$3===i&&0===h||s$1===i,l=Date.now(),{x:d,y:m}=c$2(r)||c$2(a),{currentTarget:v}=u;return Object.assign(t,{id:o,x:d,y:m,timestamp:l,isStart:p,isEnd:g,pointLength:h,currentTarget:v,getOffset(t=v){const e=t.getBoundingClientRect();return {x:d-Math.round(e.left),y:m-Math.round(e.top)}}})}(u,a);o=h;const{isStart:p,pointLength:g}=h;return p&&(i=h,t=void 0,r=1<g?h:void 0),Object.assign(Object.assign({},h),{prevInput:t,startMultiInput:r,startInput:i})}}}function c$2(t){const{length:e}=t;if(0<e){if(1===e){const{clientX:e,clientY:n}=t[0];return {x:Math.round(e),y:Math.round(n)}}const n=t.reduce(((t,e)=>(t.x+=e[n$1],t.y+=e[e$2],t)),{x:0,y:0});return {x:Math.round(n.x/e),y:Math.round(n.y/e)}}}function a$1(t,e,n,s){const o={};for(const t in n)["target","currentTarget","type"].includes(t)||(o[t]=n[t]);let i;return document.createEvent?(i=document.createEvent("HTMLEvents"),i.initEvent(t,null==s?void 0:s.bubbles,null==s?void 0:s.cancelable)):i=new Event(t,s),Object.assign(i,o,{match:()=>n.targets&&0<n.targets.length&&n.targets.every((t=>i.currentTarget.contains(t)))}),e.dispatchEvent(i)}function u$2(t,e){const{preventDefault:n}=e;return s=n,"[object Function]"===Object.prototype.toString.call(s)?n(t):!!n;var s;}const h$2=["touchstart","touchmove","touchend","touchcancel","mousedown"],p$2=["mousemove","mouseup"];const g={domEvents:{bubbles:!0,cancelable:!0},preventDefault:t=>{if(t.target&&"tagName"in t.target){const{tagName:e}=t.target;return !/^(?:INPUT|TEXTAREA|BUTTON|SELECT)$/.test(e)}return !1}};let l$1 = class l extends t$1{constructor(t,e){super(),this.v="2.1.3",this.__computeFunctionList=[],this.__computeFunctionCreatorList=[],this.__pluginContexts=[],this.__isIgnoreMouse=!1,this.el=t,this.c={},this.__options=Object.assign(Object.assign({},g),e);const n=function(t){const e=r$3();return function(n){const s=[],o=[];Array.from(n.touches).forEach((({clientX:e,clientY:n,target:i})=>{(null==t?void 0:t.contains(i))&&(s.push(i),o.push({clientX:e,clientY:n,target:i}));}));const i=Array.from(n.changedTouches).map((({clientX:t,clientY:e,target:n})=>({clientX:t,clientY:e,target:n})));return e({phase:n.type.replace("touch",""),changedPoints:i,points:o,nativeEvent:n,target:n.target,targets:s})}}(this.el),s=function(){let t,e=!1,n=null;const s=r$3();return function(o){const{clientX:i,clientY:r,type:c,button:a,target:u}=o;let h,p=[{clientX:i,clientY:r,target:u}];if("mousedown"===c&&0===a)n=u,e=!0,h="start";else {if(!e)return;"mousemove"===c?h="move":"mouseup"===c&&(p=[],h="end",e=!1);}const g=t||[{clientX:i,clientY:r,target:u}];if(t=[{clientX:i,clientY:r,target:u}],void 0!==h)return s({phase:h,changedPoints:g,points:p,target:n,targets:[n],nativeEvent:o})}}();if(this.__inputCreatorMap={touchstart:n,touchmove:n,touchend:n,touchcancel:n,mousedown:s,mousemove:s,mouseup:s},this.on("at:after",(t=>{const{target:e,__type:n}=t,{domEvents:s}=this.__options;s&&void 0!==this.el&&e&&(a$1(n,e,t,s),a$1("at:after",e,t,s));})),void 0!==t){t.style.webkitTapHighlightColor="rgba(0,0,0,0)";let e=!1;try{const t={};Object.defineProperty(t,"passive",{get(){e=!0;}}),window.addEventListener("_",(()=>{}),t);}catch(t){}this.on("u",function(t,e,n){return h$2.forEach((s=>{t.addEventListener(s,e,n);})),p$2.forEach((t=>{window.addEventListener(t,e,n);})),()=>{h$2.forEach((n=>{t.removeEventListener(n,e);})),p$2.forEach((t=>{window.removeEventListener(t,e);}));}}(t,this.catchEvent.bind(this),!1===this.__options.preventDefault&&e?{passive:!0}:{passive:!1}));}}use(t,e){this.__pluginContexts.push(t(this,e));}catchEvent(t){const e=this.__inputCreatorMap[t.type](t);if(void 0!==e){const n=()=>t.stopPropagation(),s=()=>t.stopImmediatePropagation(),o=()=>t.preventDefault();if(u$2(t,this.__options))o();else if("touchstart"===t.type?this.__isIgnoreMouse=!0:"touchmove"===t.type&&(this.__isIgnoreMouse=!1),this.__isIgnoreMouse&&t.type.startsWith("mouse"))return void("mouseup"===t.type&&(this.__isIgnoreMouse=!1));this.emit("input",e),this.emit2(`at:${e.phase}`,e,{});const i={};this.__computeFunctionList.forEach((t=>{const n=t(e,i);if(void 0!==n)for(const t in n)i[t]=n[t];})),this.emit("computed",Object.assign(Object.assign(Object.assign({},e),i),{stopPropagation:n,stopImmediatePropagation:s,preventDefault:o}));}}compute(t,e){for(const e of t)this.__computeFunctionCreatorList.includes(e)||(this.__computeFunctionCreatorList.push(e),this.__computeFunctionList.push(e()));this.on("computed",e);}beforeEach(t){super.beforeEach(((e,n)=>{var s;(null===(s=this.c)||void 0===s?void 0:s.name)?t(e,n):n();}));}get(t){return this.__pluginContexts.find((e=>t===e.name))}set(t){this.__options=Object.assign(Object.assign({},this.__options),t);}emit2(t,e,n){this.c=n,this.emit(t,Object.assign(Object.assign({},e),{type:t}),(()=>{this.emit("at:after",Object.assign(Object.assign({},e),{name:t,__type:t}));}));}destroy(){this.emit("u"),super.destroy();}};
98
+ const extendBrokerImplementation = (partialBrokerImplementation) => ({
99
+ ...partialBrokerImplementation,
100
+ connect: ({ call }) => {
101
+ return async () => {
102
+ const { port1, port2 } = new MessageChannel();
103
+ const portId = await call('connect', { port: port1 }, [port1]);
104
+ PORT_MAP.set(port2, portId);
105
+ return port2;
106
+ };
107
+ },
108
+ disconnect: ({ call }) => {
109
+ return async (port) => {
110
+ const portId = PORT_MAP.get(port);
111
+ if (portId === undefined) {
112
+ throw new Error('The given port is not connected.');
113
+ }
114
+ await call('disconnect', { portId });
115
+ };
116
+ },
117
+ isSupported: ({ call }) => {
118
+ return () => call('isSupported');
119
+ }
120
+ });
121
+
122
+ const ONGOING_REQUESTS = new WeakMap();
123
+ const createOrGetOngoingRequests = (sender) => {
124
+ if (ONGOING_REQUESTS.has(sender)) {
125
+ // @todo TypeScript needs to be convinced that has() works as expected.
126
+ return ONGOING_REQUESTS.get(sender);
127
+ }
128
+ const ongoingRequests = new Map();
129
+ ONGOING_REQUESTS.set(sender, ongoingRequests);
130
+ return ongoingRequests;
131
+ };
132
+ const createBroker = (brokerImplementation) => {
133
+ const fullBrokerImplementation = extendBrokerImplementation(brokerImplementation);
134
+ return (sender) => {
135
+ const ongoingRequests = createOrGetOngoingRequests(sender);
136
+ sender.addEventListener('message', (({ data: message }) => {
137
+ const { id } = message;
138
+ if (id !== null && ongoingRequests.has(id)) {
139
+ const { reject, resolve } = ongoingRequests.get(id);
140
+ ongoingRequests.delete(id);
141
+ if (message.error === undefined) {
142
+ resolve(message.result);
143
+ }
144
+ else {
145
+ reject(new Error(message.error.message));
146
+ }
147
+ }
148
+ }));
149
+ if (isMessagePort(sender)) {
150
+ sender.start();
151
+ }
152
+ const call = (method, params = null, transferables = []) => {
153
+ return new Promise((resolve, reject) => {
154
+ const id = generateUniqueNumber(ongoingRequests);
155
+ ongoingRequests.set(id, { reject, resolve });
156
+ if (params === null) {
157
+ sender.postMessage({ id, method }, transferables);
158
+ }
159
+ else {
160
+ sender.postMessage({ id, method, params }, transferables);
161
+ }
162
+ });
163
+ };
164
+ const notify = (method, params, transferables = []) => {
165
+ sender.postMessage({ id: null, method, params }, transferables);
166
+ };
167
+ let functions = {};
168
+ for (const [key, handler] of Object.entries(fullBrokerImplementation)) {
169
+ functions = { ...functions, [key]: handler({ call, notify }) };
170
+ }
171
+ return { ...functions };
172
+ };
173
+ };
174
+
175
+ // Prefilling the Maps with a function indexed by zero is necessary to be compliant with the specification.
176
+ const scheduledIntervalsState = new Map([[0, null]]); // tslint:disable-line no-empty
177
+ const scheduledTimeoutsState = new Map([[0, null]]); // tslint:disable-line no-empty
178
+ const wrap = createBroker({
179
+ clearInterval: ({ call }) => {
180
+ return (timerId) => {
181
+ if (typeof scheduledIntervalsState.get(timerId) === 'symbol') {
182
+ scheduledIntervalsState.set(timerId, null);
183
+ call('clear', { timerId, timerType: 'interval' }).then(() => {
184
+ scheduledIntervalsState.delete(timerId);
185
+ });
186
+ }
187
+ };
188
+ },
189
+ clearTimeout: ({ call }) => {
190
+ return (timerId) => {
191
+ if (typeof scheduledTimeoutsState.get(timerId) === 'symbol') {
192
+ scheduledTimeoutsState.set(timerId, null);
193
+ call('clear', { timerId, timerType: 'timeout' }).then(() => {
194
+ scheduledTimeoutsState.delete(timerId);
195
+ });
196
+ }
197
+ };
198
+ },
199
+ setInterval: ({ call }) => {
200
+ return (func, delay = 0, ...args) => {
201
+ const symbol = Symbol();
202
+ const timerId = generateUniqueNumber(scheduledIntervalsState);
203
+ scheduledIntervalsState.set(timerId, symbol);
204
+ const schedule = () => call('set', {
205
+ delay,
206
+ now: performance.timeOrigin + performance.now(),
207
+ timerId,
208
+ timerType: 'interval'
209
+ }).then(() => {
210
+ const state = scheduledIntervalsState.get(timerId);
211
+ if (state === undefined) {
212
+ throw new Error('The timer is in an undefined state.');
213
+ }
214
+ if (state === symbol) {
215
+ func(...args);
216
+ // Doublecheck if the interval should still be rescheduled because it could have been cleared inside of func().
217
+ if (scheduledIntervalsState.get(timerId) === symbol) {
218
+ schedule();
219
+ }
220
+ }
221
+ });
222
+ schedule();
223
+ return timerId;
224
+ };
225
+ },
226
+ setTimeout: ({ call }) => {
227
+ return (func, delay = 0, ...args) => {
228
+ const symbol = Symbol();
229
+ const timerId = generateUniqueNumber(scheduledTimeoutsState);
230
+ scheduledTimeoutsState.set(timerId, symbol);
231
+ call('set', {
232
+ delay,
233
+ now: performance.timeOrigin + performance.now(),
234
+ timerId,
235
+ timerType: 'timeout'
236
+ }).then(() => {
237
+ const state = scheduledTimeoutsState.get(timerId);
238
+ if (state === undefined) {
239
+ throw new Error('The timer is in an undefined state.');
240
+ }
241
+ if (state === symbol) {
242
+ // A timeout can be savely deleted because it is only called once.
243
+ scheduledTimeoutsState.delete(timerId);
244
+ func(...args);
245
+ }
246
+ });
247
+ return timerId;
248
+ };
249
+ }
250
+ });
251
+ const load = (url) => {
252
+ const worker = new Worker(url);
253
+ return wrap(worker);
254
+ };
255
+
256
+ const createLoadOrReturnBroker = (loadBroker, worker) => {
257
+ let broker = null;
258
+ return () => {
259
+ if (broker !== null) {
260
+ return broker;
261
+ }
262
+ const blob = new Blob([worker], { type: 'application/javascript; charset=utf-8' });
263
+ const url = URL.createObjectURL(blob);
264
+ broker = loadBroker(url);
265
+ // Bug #1: Edge up until v18 didn't like the URL to be revoked directly.
266
+ setTimeout(() => URL.revokeObjectURL(url));
267
+ return broker;
268
+ };
269
+ };
270
+
271
+ // This is the minified and stringified code of the worker-timers-worker package.
272
+ const worker = `(()=>{var e={455:function(e,t){!function(e){"use strict";var t=function(e){return function(t){var r=e(t);return t.add(r),r}},r=function(e){return function(t,r){return e.set(t,r),r}},n=void 0===Number.MAX_SAFE_INTEGER?9007199254740991:Number.MAX_SAFE_INTEGER,o=536870912,s=2*o,a=function(e,t){return function(r){var a=t.get(r),i=void 0===a?r.size:a<s?a+1:0;if(!r.has(i))return e(r,i);if(r.size<o){for(;r.has(i);)i=Math.floor(Math.random()*s);return e(r,i)}if(r.size>n)throw new Error("Congratulations, you created a collection of unique numbers which uses all available integers!");for(;r.has(i);)i=Math.floor(Math.random()*n);return e(r,i)}},i=new WeakMap,u=r(i),c=a(u,i),d=t(c);e.addUniqueNumber=d,e.generateUniqueNumber=c}(t)}},t={};function r(n){var o=t[n];if(void 0!==o)return o.exports;var s=t[n]={exports:{}};return e[n].call(s.exports,s,s.exports,r),s.exports}(()=>{"use strict";const e=-32603,t=-32602,n=-32601,o=(e,t)=>Object.assign(new Error(e),{status:t}),s=t=>o('The handler of the method called "'.concat(t,'" returned an unexpected result.'),e),a=(t,r)=>async({data:{id:a,method:i,params:u}})=>{const c=r[i];try{if(void 0===c)throw(e=>o('The requested method called "'.concat(e,'" is not supported.'),n))(i);const r=void 0===u?c():c(u);if(void 0===r)throw(t=>o('The handler of the method called "'.concat(t,'" returned no required result.'),e))(i);const d=r instanceof Promise?await r:r;if(null===a){if(void 0!==d.result)throw s(i)}else{if(void 0===d.result)throw s(i);const{result:e,transferables:r=[]}=d;t.postMessage({id:a,result:e},r)}}catch(e){const{message:r,status:n=-32603}=e;t.postMessage({error:{code:n,message:r},id:a})}};var i=r(455);const u=new Map,c=(e,r,n)=>({...r,connect:({port:t})=>{t.start();const n=e(t,r),o=(0,i.generateUniqueNumber)(u);return u.set(o,(()=>{n(),t.close(),u.delete(o)})),{result:o}},disconnect:({portId:e})=>{const r=u.get(e);if(void 0===r)throw(e=>o('The specified parameter called "portId" with the given value "'.concat(e,'" does not identify a port connected to this worker.'),t))(e);return r(),{result:null}},isSupported:async()=>{if(await new Promise((e=>{const t=new ArrayBuffer(0),{port1:r,port2:n}=new MessageChannel;r.onmessage=({data:t})=>e(null!==t),n.postMessage(t,[t])}))){const e=n();return{result:e instanceof Promise?await e:e}}return{result:!1}}}),d=(e,t,r=()=>!0)=>{const n=c(d,t,r),o=a(e,n);return e.addEventListener("message",o),()=>e.removeEventListener("message",o)},l=e=>t=>{const r=e.get(t);if(void 0===r)return Promise.resolve(!1);const[n,o]=r;return clearTimeout(n),e.delete(t),o(!1),Promise.resolve(!0)},f=(e,t,r)=>(n,o,s)=>{const{expected:a,remainingDelay:i}=e(n,o);return new Promise((e=>{t.set(s,[setTimeout(r,i,a,t,e,s),e])}))},m=(e,t)=>{const r=performance.now(),n=e+t-r-performance.timeOrigin;return{expected:r+n,remainingDelay:n}},p=(e,t,r,n)=>{const o=e-performance.now();o>0?t.set(n,[setTimeout(p,o,e,t,r,n),r]):(t.delete(n),r(!0))},h=new Map,v=l(h),w=new Map,g=l(w),M=f(m,h,p),y=f(m,w,p);d(self,{clear:async({timerId:e,timerType:t})=>({result:await("interval"===t?v(e):g(e))}),set:async({delay:e,now:t,timerId:r,timerType:n})=>({result:await("interval"===n?M:y)(e,t,r)})})})()})();`; // tslint:disable-line:max-line-length
273
+
274
+ const loadOrReturnBroker = createLoadOrReturnBroker(load, worker);
275
+ const clearInterval = (timerId) => loadOrReturnBroker().clearInterval(timerId);
276
+ const clearTimeout$1 = (timerId) => loadOrReturnBroker().clearTimeout(timerId);
277
+ const setInterval = (...args) => loadOrReturnBroker().setInterval(...args);
278
+ const setTimeout$1 = (...args) => loadOrReturnBroker().setTimeout(...args);
279
+
280
+ let t$1 = class t{constructor(){this.__map={};}beforeEach(t){this.__interceptor=t;}on(t,i){const s=Array.isArray(t)?t:[t];for(const t of s){this.__map[t]=this.__map[t]||[];const s=this.__map[t];s&&s.push(i);}return this}emit(t,i,s){ void 0!==this.__interceptor?this.__interceptor(t,(()=>{this.__emit(t,i),s&&s();})):(this.__emit(t,i),s&&s());}__emit(t,i){const s=this.__map[t];if(Array.isArray(s)&&(null==s?void 0:s.length))for(const _ of s)_(i,t);this.event=i;}off(t,i){const s=this.__map[t];if(void 0!==s)if(void 0===i)delete this.__map[t];else {const t=s.findIndex((t=>t===i));s.splice(t,1);}}destroy(){this.__map={};}};
281
+
282
+ const n$1="clientX",e$2="clientY",t=16,c$3="start",o$1="move",s$1="cancel",u$3="end",a$2="left",i$3="right",r$4="up",d$1="down",m$2={4:"start",5:"move",1:"end",3:"cancel"};function v$1(n){return m$2[n]}function b(n,e,t){const c={1:{0:{move:4},4:{move:5,end:1,cancel:3},5:{move:5,end:1,cancel:3}},0:{4:{move:2,end:1,cancel:3},5:{start:2,move:2,end:1,cancel:3}}}[Number(n)][e];return void 0!==c&&c[t]||0}function g$1(n){[1,3,2].includes(n.state)&&(n.state=0);}function h$3(n){return [5,1,3].includes(n)}function j(n){if(n.disabled)return n.state=0,true}function O(n,e){return Object.assign(Object.assign(Object.assign({},n),e),{state:0,disabled:false})}function p$3(n){return Math.round(100*n)/100}
283
+
284
+ function r$3(){let t,o,i,r,a=0;return function(u){if(t=o,void 0!==u){a=Number.MAX_SAFE_INTEGER>a?++a:1;const h=function(t,o){const{phase:i,points:r,changedPoints:a,nativeEvent:u}=t,h=r.length,p=c$3===i,g=u$3===i&&0===h||s$1===i,l=Date.now(),{x:d,y:m}=c$2(r)||c$2(a),{currentTarget:v}=u;return Object.assign(t,{id:o,x:d,y:m,timestamp:l,isStart:p,isEnd:g,pointLength:h,currentTarget:v,getOffset(t=v){const e=t.getBoundingClientRect();return {x:d-Math.round(e.left),y:m-Math.round(e.top)}}})}(u,a);o=h;const{isStart:p,pointLength:g}=h;return p&&(i=h,t=void 0,r=1<g?h:void 0),Object.assign(Object.assign({},h),{prevInput:t,startMultiInput:r,startInput:i})}}}function c$2(t){const{length:e}=t;if(0<e){if(1===e){const{clientX:e,clientY:n}=t[0];return {x:Math.round(e),y:Math.round(n)}}const n=t.reduce(((t,e)=>(t.x+=e[n$1],t.y+=e[e$2],t)),{x:0,y:0});return {x:Math.round(n.x/e),y:Math.round(n.y/e)}}}function a$1(t,e,n,s){const o={};for(const t in n)["target","currentTarget","type"].includes(t)||(o[t]=n[t]);let i;return document.createEvent?(i=document.createEvent("HTMLEvents"),i.initEvent(t,null==s?void 0:s.bubbles,null==s?void 0:s.cancelable)):i=new Event(t,s),Object.assign(i,o,{match:()=>n.targets&&0<n.targets.length&&n.targets.every((t=>i.currentTarget.contains(t)))}),e.dispatchEvent(i)}function u$2(t,e){const{preventDefault:n}=e;return s=n,"[object Function]"===Object.prototype.toString.call(s)?n(t):!!n;var s;}const h$2=["touchstart","touchmove","touchend","touchcancel","mousedown"],p$2=["mousemove","mouseup"];const g={domEvents:{bubbles:true,cancelable:true},preventDefault:t=>{if(t.target&&"tagName"in t.target){const{tagName:e}=t.target;return !/^(?:INPUT|TEXTAREA|BUTTON|SELECT)$/.test(e)}return false}};let l$1 = class l extends t$1{constructor(t,e){super(),this.v="2.1.3",this.__computeFunctionList=[],this.__computeFunctionCreatorList=[],this.__pluginContexts=[],this.__isIgnoreMouse=false,this.el=t,this.c={},this.__options=Object.assign(Object.assign({},g),e);const n=function(t){const e=r$3();return function(n){const s=[],o=[];Array.from(n.touches).forEach((({clientX:e,clientY:n,target:i})=>{(null==t?void 0:t.contains(i))&&(s.push(i),o.push({clientX:e,clientY:n,target:i}));}));const i=Array.from(n.changedTouches).map((({clientX:t,clientY:e,target:n})=>({clientX:t,clientY:e,target:n})));return e({phase:n.type.replace("touch",""),changedPoints:i,points:o,nativeEvent:n,target:n.target,targets:s})}}(this.el),s=function(){let t,e=false,n=null;const s=r$3();return function(o){const{clientX:i,clientY:r,type:c,button:a,target:u}=o;let h,p=[{clientX:i,clientY:r,target:u}];if("mousedown"===c&&0===a)n=u,e=true,h="start";else {if(!e)return;"mousemove"===c?h="move":"mouseup"===c&&(p=[],h="end",e=false);}const g=t||[{clientX:i,clientY:r,target:u}];if(t=[{clientX:i,clientY:r,target:u}],void 0!==h)return s({phase:h,changedPoints:g,points:p,target:n,targets:[n],nativeEvent:o})}}();if(this.__inputCreatorMap={touchstart:n,touchmove:n,touchend:n,touchcancel:n,mousedown:s,mousemove:s,mouseup:s},this.on("at:after",(t=>{const{target:e,__type:n}=t,{domEvents:s}=this.__options;s&&void 0!==this.el&&e&&(a$1(n,e,t,s),a$1("at:after",e,t,s));})),void 0!==t){t.style.webkitTapHighlightColor="rgba(0,0,0,0)";let e=false;try{const t={};Object.defineProperty(t,"passive",{get(){e=!0;}}),window.addEventListener("_",(()=>{}),t);}catch(t){}this.on("u",function(t,e,n){return h$2.forEach((s=>{t.addEventListener(s,e,n);})),p$2.forEach((t=>{window.addEventListener(t,e,n);})),()=>{h$2.forEach((n=>{t.removeEventListener(n,e);})),p$2.forEach((t=>{window.removeEventListener(t,e);}));}}(t,this.catchEvent.bind(this),false===this.__options.preventDefault&&e?{passive:true}:{passive:false}));}}use(t,e){this.__pluginContexts.push(t(this,e));}catchEvent(t){const e=this.__inputCreatorMap[t.type](t);if(void 0!==e){const n=()=>t.stopPropagation(),s=()=>t.stopImmediatePropagation(),o=()=>t.preventDefault();if(u$2(t,this.__options))o();else if("touchstart"===t.type?this.__isIgnoreMouse=true:"touchmove"===t.type&&(this.__isIgnoreMouse=false),this.__isIgnoreMouse&&t.type.startsWith("mouse"))return void("mouseup"===t.type&&(this.__isIgnoreMouse=false));this.emit("input",e),this.emit2(`at:${e.phase}`,e,{});const i={};this.__computeFunctionList.forEach((t=>{const n=t(e,i);if(void 0!==n)for(const t in n)i[t]=n[t];})),this.emit("computed",Object.assign(Object.assign(Object.assign({},e),i),{stopPropagation:n,stopImmediatePropagation:s,preventDefault:o}));}}compute(t,e){for(const e of t)this.__computeFunctionCreatorList.includes(e)||(this.__computeFunctionCreatorList.push(e),this.__computeFunctionList.push(e()));this.on("computed",e);}beforeEach(t){super.beforeEach(((e,n)=>{var s;(null===(s=this.c)||void 0===s?void 0:s.name)?t(e,n):n();}));}get(t){return this.__pluginContexts.find((e=>t===e.name))}set(t){this.__options=Object.assign(Object.assign({},this.__options),t);}emit2(t,e,n){this.c=n,this.emit(t,Object.assign(Object.assign({},e),{type:t}),(()=>{this.emit("at:after",Object.assign(Object.assign({},e),{name:t,__type:t}));}));}destroy(){this.emit("u"),super.destroy();}};
52
285
 
53
286
  var x=r=>Math.sqrt(r.x*r.x+r.y*r.y),y=(r,a)=>r.x*a.x+r.y*a.y,e$1=(r,a)=>{var t=x(r)*x(a);if(0===t)return 0;var h=y(r,a)/t;return h>1&&(h=1),Math.acos(h)},n=(r,a)=>r.x*a.y-a.x*r.y,o=r=>r/Math.PI*180,s=(r,a)=>{var t=e$1(r,a);return n(r,a)>0&&(t*=-1),o(t)},u$1=(x,y)=>{if(0!==x||0!==y)return Math.abs(x)>=Math.abs(y)?0<x?i$3:a$2:0<y?d$1:r$4};
54
287
 
55
288
  function p$1(){let n=0,e=0;return function(o,r){const{prevVecotr:i,startVecotr:a,activeVecotr:c}=r;return c&&(e=Math.round(s(c,i)),n=Math.round(s(c,a))),{angle:n,deltaAngle:e}}}function d(){return function(t){const{prevInput:e}=t;let o$1=0,r=0,i=0;if(void 0!==e&&(o$1=t.x-e.x,r=t.y-e.y,0!==o$1||0!==r)){const t=Math.sqrt(Math.pow(o$1,2)+Math.pow(r,2));i=Math.round(o(Math.acos(Math.abs(o$1)/t)));}return {deltaX:o$1,deltaY:r,deltaXYAngle:i}}}function h$1(){let t,n=0,u=0,s=0,p=0,d=0;return function(h){const{phase:l,startInput:f}=h;return c$3===l?(n=0,u=0,s=0,p=0,d=0):o$1===l&&(n=Math.round(h.points[0][n$1]-f.points[0][n$1]),u=Math.round(h.points[0][e$2]-f.points[0][e$2]),s=Math.abs(n),p=Math.abs(u),d=Math.round(x({x:s,y:p})),t=u$1(n,u)),{displacementX:n,displacementY:u,distanceX:s,distanceY:p,distance:d,overallDirection:t}}}function l(){let t=1;return function(n,o){let r=1;const{prevVecotr:i,startVecotr:a,activeVecotr:c}=o;return c&&(r=p$3(x(c)/x(i)),t=p$3(x(c)/x(a))),{scale:t,deltaScale:r}}}function f(){let t$1,n,e=0,r=0,i=0,a=0;return function(c){if(void 0!==c){n=n||c.startInput;const u=c.timestamp-n.timestamp;if(t<u){const s=c.x-n.x,p=c.y-n.y;i=Math.round(s/u*100)/100,a=Math.round(p/u*100)/100,e=Math.abs(i),r=Math.abs(a),t$1=u$1(s,p),n=c;}}return {velocityX:e,velocityY:r,speedX:i,speedY:a,direction:t$1}}}function M(){let t=0;return function(n){const{phase:e}=n;return c$3===e&&(t=n.pointLength),{maxPointLength:t}}}function v(t){return {x:t.points[1][n$1]-t.points[0][n$1],y:t.points[1][e$2]-t.points[0][e$2]}}function m$1(){let t,n,e;return function(o){const{prevInput:r,startMultiInput:i}=o;return void 0!==i&&void 0!==r&&o.id!==i.id&&1<r.pointLength&&1<o.pointLength?(t=v(i),n=v(r),e=v(o)):e=void 0,{startVecotr:t,prevVecotr:n,activeVecotr:e}}}
56
289
 
57
- const m={name:"tap",pointLength:1,tapTimes:1,waitNextTapTime:300,maxDistance:2,maxDistanceFromPrevTap:9,maxPressTime:250};function r$2(r,s){const c=O(m,s);let p,u,x$1,T=0;function f(){T=0,p=void 0,u=void 0;}return r.compute([h$1,M],(t=>{if(j(c))return;const{phase:i,x:o,y:m}=t;u$3===i&&(c.state=0,!function(){const{startInput:e,pointLength:n,timestamp:a}=t,i=a-e.timestamp,{distance:o,maxPointLength:m}=t;return m===c.pointLength&&0===n&&c.maxDistance>=o&&c.maxPressTime>i}()?(f(),c.state=2):(clearTimeout(x$1),function(t,e){if(void 0!==p){const n=x({x:t.x-p.x,y:t.y-p.y});return p=t,e.maxDistanceFromPrevTap>=n}return p=t,!0}({x:o,y:m},c)&&function(t){const e=performance.now();if(void 0===u)return u=e,!0;{const n=e-u;return u=e,n<t}}(c.waitNextTapTime)?T++:T=1,0==T%c.tapTimes?(c.state=1,r.emit2(c.name,t,c),f()):x$1=setTimeout((()=>{c.state=2,f();}),c.waitNextTapTime)));})),c}
290
+ const m={name:"tap",pointLength:1,tapTimes:1,waitNextTapTime:300,maxDistance:2,maxDistanceFromPrevTap:9,maxPressTime:250};function r$2(r,s){const c=O(m,s);let p,u,x$1,T=0;function f(){T=0,p=void 0,u=void 0;}return r.compute([h$1,M],(t=>{if(j(c))return;const{phase:i,x:o,y:m}=t;u$3===i&&(c.state=0,!function(){const{startInput:e,pointLength:n,timestamp:a}=t,i=a-e.timestamp,{distance:o,maxPointLength:m}=t;return m===c.pointLength&&0===n&&c.maxDistance>=o&&c.maxPressTime>i}()?(f(),c.state=2):(clearTimeout(x$1),function(t,e){if(void 0!==p){const n=x({x:t.x-p.x,y:t.y-p.y});return p=t,e.maxDistanceFromPrevTap>=n}return p=t,true}({x:o,y:m},c)&&function(t){const e=performance.now();if(void 0===u)return u=e,true;{const n=e-u;return u=e,n<t}}(c.waitNextTapTime)?T++:T=1,0==T%c.tapTimes?(c.state=1,r.emit2(c.name,t,c),f()):x$1=setTimeout((()=>{c.state=2,f();}),c.waitNextTapTime)));})),c}
58
291
 
59
292
  const p={name:"pan",threshold:10,pointLength:1};function u(u,d$1){const f$1=O(p,d$1);return u.compute([f,h$1,d],(t=>{if(g$1(f$1),j(f$1))return;const c=function(){const{pointLength:e,distance:n}=t;return f$1.pointLength===e&&f$1.threshold<=n}();if(f$1.state=b(c,f$1.state,t.phase),c||h$3(f$1.state)){const{name:e}=f$1;u.emit2(e,t,f$1),u.emit2(e+v$1(f$1.state),t,f$1),![u$3,s$1].includes(t.phase)&&t.direction&&u.emit2(e+t.direction,t,f$1);}})),f$1}
60
293
 
61
- const c$1={name:"swipe",threshold:10,velocity:.3,pointLength:1};function a(a,r){const s=O(c$1,r);return a.compute([h$1,f,M],(t=>{if(s.state=0,!s.disabled&&function(){if(u$3!==t.phase)return !1;const{velocityX:o,velocityY:n,distance:i,maxPointLength:c}=t;return c===s.pointLength&&0===t.points.length&&s.threshold<i&&s.velocity<Math.max(o,n)}()){const{name:e}=s;s.state=1,a.emit2(e,t,s),a.emit2(e+t.direction,t,s);}})),s}
294
+ const c$1={name:"swipe",threshold:10,velocity:.3,pointLength:1};function a(a,r){const s=O(c$1,r);return a.compute([h$1,f,M],(t=>{if(s.state=0,!s.disabled&&function(){if(u$3!==t.phase)return false;const{velocityX:o,velocityY:n,distance:i,maxPointLength:c}=t;return c===s.pointLength&&0===t.points.length&&s.threshold<i&&s.velocity<Math.max(o,n)}()){const{name:e}=s;s.state=1,a.emit2(e,t,s),a.emit2(e+t.direction,t,s);}})),s}
62
295
 
63
296
  const r$1={name:"press",pointLength:1,maxDistance:9,minPressTime:251};function c(c,u){const p=O(r$1,u);let f=0;return c.compute([h$1],(t=>{if(j(p))return;const{phase:o,startInput:r,pointLength:u}=t;if(c$3===o&&p.pointLength===u)g$1(p),clearTimeout(f),f=setTimeout((()=>{p.state=1,c.emit2(p.name,t,p);}),p.minPressTime);else if(u$3===o&&1===p.state)c.emit2(`${p.name}${r$4}`,t,p);else if(1!==p.state){const e=t.timestamp-r.timestamp;(!function(){const{distance:e}=t;return e&&p.maxDistance>e}()||p.minPressTime>e&&[u$3,s$1].includes(o))&&(clearTimeout(f),p.state=2);}})),p}
64
297
 
@@ -280,7 +513,7 @@
280
513
  formatByteToSize(byteSize, addType = true) {
281
514
  byteSize = parseInt(byteSize.toString());
282
515
  if (isNaN(byteSize)) {
283
- throw new Error("Utils.formatByteToSize 参数 byteSize 格式不正确");
516
+ throw new TypeError("Utils.formatByteToSize 参数 byteSize 格式不正确");
284
517
  }
285
518
  let result = 0;
286
519
  let resultType = "KB";
@@ -313,6 +546,58 @@
313
546
  AnyTouch = () => {
314
547
  return i;
315
548
  };
549
+ /**
550
+ * 自动使用 Worker 执行 setTimeout
551
+ */
552
+ setTimeout(callback, timeout = 0) {
553
+ try {
554
+ return setTimeout$1(callback, timeout);
555
+ }
556
+ catch (error) {
557
+ return globalThis.setTimeout(callback, timeout);
558
+ }
559
+ }
560
+ /**
561
+ * 配合 .setTimeout 使用
562
+ */
563
+ clearTimeout(timeId) {
564
+ try {
565
+ if (timeId != null) {
566
+ clearTimeout$1(timeId);
567
+ }
568
+ }
569
+ catch (error) {
570
+ }
571
+ finally {
572
+ globalThis.clearTimeout(timeId);
573
+ }
574
+ }
575
+ /**
576
+ * 自动使用 Worker 执行 setInterval
577
+ */
578
+ setInterval(callback, timeout = 0) {
579
+ try {
580
+ return setInterval(callback, timeout);
581
+ }
582
+ catch (error) {
583
+ return globalThis.setInterval(callback, timeout);
584
+ }
585
+ }
586
+ /**
587
+ * 配合 .setInterval 使用
588
+ */
589
+ clearInterval(timeId) {
590
+ try {
591
+ if (timeId != null) {
592
+ clearInterval(timeId);
593
+ }
594
+ }
595
+ catch (error) {
596
+ }
597
+ finally {
598
+ globalThis.clearInterval(timeId);
599
+ }
600
+ }
316
601
  }
317
602
  const popsUtils = new PopsUtils();
318
603
 
@@ -686,7 +971,7 @@
686
971
  }
687
972
  if (checkDOMReadyState()) {
688
973
  /* 检查document状态 */
689
- setTimeout(callback);
974
+ popsUtils.setTimeout(callback, 0);
690
975
  }
691
976
  else {
692
977
  /* 添加监听 */
@@ -1913,7 +2198,7 @@
1913
2198
  let popsElement = animElement.querySelector(".pops[type-value]");
1914
2199
  if (popsType === "drawer") {
1915
2200
  let drawerConfig = config;
1916
- setTimeout(() => {
2201
+ popsUtils.setTimeout(() => {
1917
2202
  maskElement.style.setProperty("display", "none");
1918
2203
  if (["top", "bottom"].includes(drawerConfig.direction)) {
1919
2204
  popsElement.style.setProperty("height", "0");
@@ -1979,7 +2264,7 @@
1979
2264
  let popsElement = animElement.querySelector(".pops[type-value]");
1980
2265
  if (popsType === "drawer") {
1981
2266
  let drawerConfig = config;
1982
- setTimeout(() => {
2267
+ popsUtils.setTimeout(() => {
1983
2268
  popsDOMUtils.css(maskElement, "display", "");
1984
2269
  let direction = drawerConfig.direction;
1985
2270
  let size = drawerConfig.size.toString();
@@ -1993,7 +2278,7 @@
1993
2278
  console.error("未知direction:", direction);
1994
2279
  }
1995
2280
  resolve();
1996
- }, drawerConfig.openDelay);
2281
+ }, drawerConfig.openDelay ?? 0);
1997
2282
  }
1998
2283
  else {
1999
2284
  let findLayerIns = layerConfigList.find((layerConfigItem) => layerConfigItem.guid === guid);
@@ -2085,7 +2370,7 @@
2085
2370
  }
2086
2371
  }
2087
2372
  if (popsType === "drawer") {
2088
- setTimeout(() => {
2373
+ popsUtils.setTimeout(() => {
2089
2374
  transitionendEvent();
2090
2375
  }, drawerConfig.closeDelay);
2091
2376
  }
@@ -2302,10 +2587,10 @@
2302
2587
  */
2303
2588
  sortElementListByProperty(getBeforeValueFun, getAfterValueFun, sortByDesc = true) {
2304
2589
  if (typeof sortByDesc !== "boolean") {
2305
- throw "参数 sortByDesc 必须为boolean类型";
2590
+ throw new TypeError("参数 sortByDesc 必须为boolean类型");
2306
2591
  }
2307
2592
  if (getBeforeValueFun == null || getAfterValueFun == null) {
2308
- throw "获取前面的值或后面的值的方法不能为空";
2593
+ throw new Error("获取前面的值或后面的值的方法不能为空");
2309
2594
  }
2310
2595
  return function (after_obj, before_obj) {
2311
2596
  var beforeValue = getBeforeValueFun(before_obj); /* 前 */
@@ -3902,7 +4187,7 @@
3902
4187
  config = popsUtils.assign(config, GlobalConfig.getGlobalConfig());
3903
4188
  config = popsUtils.assign(config, details);
3904
4189
  if (config.url == null) {
3905
- throw "config.url不能为空";
4190
+ throw new Error("config.url不能为空");
3906
4191
  }
3907
4192
  config = PopsHandler.handleOnly(PopsType, config);
3908
4193
  const { $shadowContainer, $shadowRoot } = PopsHandler.handlerShadow(config);
@@ -4360,8 +4645,8 @@
4360
4645
  config.beforeAppendToPageCallBack($shadowRoot, $shadowContainer);
4361
4646
  }
4362
4647
  popsDOMUtils.appendBody($shadowContainer);
4363
- setTimeout(() => {
4364
- setTimeout(() => {
4648
+ popsUtils.setTimeout(() => {
4649
+ popsUtils.setTimeout(() => {
4365
4650
  $pops.style.setProperty("transform", "");
4366
4651
  }, config.openDelay);
4367
4652
  }, 50);
@@ -5082,12 +5367,12 @@
5082
5367
  let downloadIframeLinkElement = document.createElement("iframe");
5083
5368
  downloadIframeLinkElement.src = downloadInfo.url;
5084
5369
  downloadIframeLinkElement.onload = function () {
5085
- setTimeout(() => {
5370
+ popsUtils.setTimeout(() => {
5086
5371
  downloadIframeLinkElement.remove();
5087
5372
  }, 1000);
5088
5373
  };
5089
5374
  $shadowRoot.appendChild(downloadIframeLinkElement);
5090
- setTimeout(() => {
5375
+ popsUtils.setTimeout(() => {
5091
5376
  downloadIframeLinkElement.remove();
5092
5377
  }, 3 * 60 * 1000);
5093
5378
  }
@@ -6329,11 +6614,11 @@
6329
6614
  let isSuccess = false;
6330
6615
  let oldTotalWidth = this.$data.totalWidth;
6331
6616
  let timer = void 0;
6332
- let interval = setInterval(() => {
6617
+ let interval = popsUtils.setInterval(() => {
6333
6618
  if (isSuccess) {
6334
6619
  this.$interval.isCheck = false;
6335
- clearTimeout(timer);
6336
- clearInterval(interval);
6620
+ popsUtils.clearTimeout(timer);
6621
+ popsUtils.clearInterval(interval);
6337
6622
  }
6338
6623
  else {
6339
6624
  this.initTotalWidth();
@@ -6353,8 +6638,8 @@
6353
6638
  }
6354
6639
  }, checkStepTime);
6355
6640
  /* 最长检测时间是10s */
6356
- timer = setTimeout(() => {
6357
- clearInterval(interval);
6641
+ timer = popsUtils.setTimeout(() => {
6642
+ popsUtils.clearInterval(interval);
6358
6643
  }, maxTime);
6359
6644
  },
6360
6645
  /**
@@ -6722,16 +7007,16 @@
6722
7007
  return;
6723
7008
  }
6724
7009
  this.$data.isCheckingStopDragMove = true;
6725
- let interval = setInterval(() => {
7010
+ let interval = popsUtils.setInterval(() => {
6726
7011
  if (!this.$data.isMove) {
6727
7012
  this.$data.isCheckingStopDragMove = false;
6728
7013
  this.closeToolTip();
6729
- clearInterval(interval);
7014
+ popsUtils.clearInterval(interval);
6730
7015
  }
6731
7016
  }, 200);
6732
- setTimeout(() => {
7017
+ popsUtils.setTimeout(() => {
6733
7018
  this.$data.isCheckingStopDragMove = false;
6734
- clearInterval(interval);
7019
+ popsUtils.clearInterval(interval);
6735
7020
  }, 2000);
6736
7021
  },
6737
7022
  /**
@@ -8609,7 +8894,7 @@
8609
8894
  config = popsUtils.assign(config, details);
8610
8895
  config = PopsHandler.handleOnly(PopsType, config);
8611
8896
  if (config.target == null) {
8612
- throw "config.target 不能为空";
8897
+ throw new Error("config.target 不能为空");
8613
8898
  }
8614
8899
  if (details.data) {
8615
8900
  // @ts-ignore
@@ -9095,7 +9380,7 @@
9095
9380
  config = popsUtils.assign(config, GlobalConfig.getGlobalConfig());
9096
9381
  config = popsUtils.assign(config, details);
9097
9382
  if (config.target == null) {
9098
- throw new TypeError("config.target 不能为空");
9383
+ throw new Error("config.target 不能为空");
9099
9384
  }
9100
9385
  /* 做下兼容处理 */
9101
9386
  if (config.inputTarget == null) {
@@ -9366,7 +9651,7 @@
9366
9651
  popsDOMUtils.on([config.inputTarget], ["focus", "click", "input"], void 0, SearchSuggestion.showEvent, option);
9367
9652
  }
9368
9653
  else {
9369
- throw new TypeError("未知followPosition:" + config.followPosition);
9654
+ throw new Error("未知followPosition:" + config.followPosition);
9370
9655
  }
9371
9656
  },
9372
9657
  /**
@@ -9777,11 +10062,12 @@
9777
10062
  }
9778
10063
  /**
9779
10064
  * 计算 提示框的位置
10065
+ * @param event 触发的事件
9780
10066
  * @param targetElement 目标元素
9781
10067
  * @param arrowDistance 箭头和目标元素的距离
9782
10068
  * @param otherDistance 其它位置的偏移
9783
10069
  */
9784
- calcToolTipPosition(targetElement, arrowDistance, otherDistance) {
10070
+ calcToolTipPosition(targetElement, arrowDistance, otherDistance, event) {
9785
10071
  let offsetInfo = popsDOMUtils.offset(targetElement, !this.$data.config.isFixed);
9786
10072
  // 目标 宽
9787
10073
  let targetElement_width = offsetInfo.width;
@@ -9799,6 +10085,31 @@
9799
10085
  let targetElement_X_center_pos = targetElement_left + targetElement_width / 2 - toolTipElement_width / 2;
9800
10086
  /* 目标元素的Y轴的中间位置 */
9801
10087
  let targetElement_Y_center_pos = targetElement_top + targetElement_height / 2 - toolTipElement_height / 2;
10088
+ let mouseX = 0;
10089
+ let mouseY = 0;
10090
+ if (event != null) {
10091
+ if (event instanceof MouseEvent || event instanceof PointerEvent) {
10092
+ mouseX = event.pageX;
10093
+ mouseY = event.y;
10094
+ }
10095
+ else if (event instanceof TouchEvent) {
10096
+ let touchEvent = event.touches[0];
10097
+ mouseX = touchEvent.pageX;
10098
+ mouseY = touchEvent.pageY;
10099
+ }
10100
+ else {
10101
+ // @ts-ignore
10102
+ if (typeof event.clientX === "number") {
10103
+ // @ts-ignore
10104
+ mouseX = event.clientX;
10105
+ }
10106
+ // @ts-ignore
10107
+ if (typeof event.clientY === "number") {
10108
+ // @ts-ignore
10109
+ mouseY = event.clientY;
10110
+ }
10111
+ }
10112
+ }
9802
10113
  return {
9803
10114
  TOP: {
9804
10115
  left: targetElement_X_center_pos - otherDistance,
@@ -9824,13 +10135,19 @@
9824
10135
  arrow: "right",
9825
10136
  motion: "fadeInLeft",
9826
10137
  },
10138
+ FOLLOW: {
10139
+ left: mouseX + otherDistance,
10140
+ top: mouseY + otherDistance,
10141
+ arrow: "follow",
10142
+ motion: "",
10143
+ },
9827
10144
  };
9828
10145
  }
9829
10146
  /**
9830
10147
  * 动态修改tooltip的位置
9831
10148
  */
9832
- changePosition() {
9833
- let positionInfo = this.calcToolTipPosition(this.$data.config.target, this.$data.config.arrowDistance, this.$data.config.otherDistance);
10149
+ changePosition(event) {
10150
+ let positionInfo = this.calcToolTipPosition(this.$data.config.target, this.$data.config.arrowDistance, this.$data.config.otherDistance, event);
9834
10151
  let positionKey = this.$data.config.position.toUpperCase();
9835
10152
  let positionDetail = positionInfo[positionKey];
9836
10153
  if (positionDetail) {
@@ -9890,13 +10207,13 @@
9890
10207
  if (typeof timeId === "number") {
9891
10208
  // 只清除一个
9892
10209
  if (timeId == currentTimeId) {
9893
- clearTimeout(timeId);
10210
+ popsUtils.clearTimeout(timeId);
9894
10211
  timeIdList.splice(index, 1);
9895
10212
  break;
9896
10213
  }
9897
10214
  }
9898
10215
  else {
9899
- clearTimeout(currentTimeId);
10216
+ popsUtils.clearTimeout(currentTimeId);
9900
10217
  timeIdList.splice(index, 1);
9901
10218
  index--;
9902
10219
  }
@@ -9930,7 +10247,7 @@
9930
10247
  // 更新内容
9931
10248
  this.changeContent();
9932
10249
  // 更新tip的位置
9933
- this.changePosition();
10250
+ this.changePosition(event);
9934
10251
  if (typeof this.$data.config.showAfterCallBack === "function") {
9935
10252
  this.$data.config.showAfterCallBack(this.$el.$toolTip);
9936
10253
  }
@@ -9975,16 +10292,24 @@
9975
10292
  this.$data.config.delayCloseTime <= 0)) {
9976
10293
  this.$data.config.delayCloseTime = 100;
9977
10294
  }
9978
- let timeId = setTimeout(() => {
10295
+ let timeId = popsUtils.setTimeout(() => {
9979
10296
  // 设置属性触发关闭动画
9980
10297
  this.clearCloseTimeoutId(eventType, timeId);
9981
10298
  if (this.$el.$toolTip == null) {
9982
10299
  // 已清除了
9983
10300
  return;
9984
10301
  }
9985
- this.$el.$toolTip.setAttribute("data-motion", this.$el.$toolTip
9986
- .getAttribute("data-motion")
9987
- .replace("fadeIn", "fadeOut"));
10302
+ let motion = this.$el.$toolTip.getAttribute("data-motion");
10303
+ if (motion == null || motion.trim() === "") {
10304
+ // 没有动画
10305
+ this.toolTipAnimationFinishEvent();
10306
+ }
10307
+ else {
10308
+ // 修改data-motion触发动画关闭
10309
+ this.$el.$toolTip.setAttribute("data-motion", this.$el.$toolTip
10310
+ .getAttribute("data-motion")
10311
+ .replace("fadeIn", "fadeOut"));
10312
+ }
9988
10313
  }, this.$data.config.delayCloseTime);
9989
10314
  this.addCloseTimeoutId(eventType, timeId);
9990
10315
  if (typeof this.$data.config.closeAfterCallBack === "function") {
@@ -10098,7 +10423,7 @@
10098
10423
  config = popsUtils.assign(config, GlobalConfig.getGlobalConfig());
10099
10424
  config = popsUtils.assign(config, details);
10100
10425
  if (!(config.target instanceof HTMLElement)) {
10101
- throw "config.target 必须是HTMLElement类型";
10426
+ throw new TypeError("config.target 必须是HTMLElement类型");
10102
10427
  }
10103
10428
  config = PopsHandler.handleOnly(PopsType, config);
10104
10429
  const { $shadowContainer, $shadowRoot } = PopsHandler.handlerShadow(config);
@@ -10131,7 +10456,7 @@
10131
10456
  /** 配置 */
10132
10457
  config = {
10133
10458
  /** 版本号 */
10134
- version: "2025.5.25",
10459
+ version: "2025.5.26",
10135
10460
  cssText: {
10136
10461
  /** 主CSS */
10137
10462
  index: indexCSS,
@@ -10240,7 +10565,7 @@
10240
10565
  popsDOMUtils.appendHead(animationStyle);
10241
10566
  this.config.animation = null;
10242
10567
  this.config.animation = PopsInstanceUtils.getKeyFrames(animationStyle.sheet);
10243
- setTimeout(() => {
10568
+ popsUtils.setTimeout(() => {
10244
10569
  animationStyle.remove();
10245
10570
  }, 50);
10246
10571
  }