pervert-monkey 1.0.6 → 1.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.
Files changed (54) hide show
  1. package/README.md +20 -0
  2. package/dist/core/pervertmonkey.core.es.d.ts +17 -4
  3. package/dist/core/pervertmonkey.core.es.js +277 -257
  4. package/dist/core/pervertmonkey.core.es.js.map +1 -1
  5. package/dist/core/pervertmonkey.core.umd.js +277 -257
  6. package/dist/core/pervertmonkey.core.umd.js.map +1 -1
  7. package/dist/userscripts/3hentai.user.js +1 -1
  8. package/dist/userscripts/camgirlfinder.user.js +1 -1
  9. package/dist/userscripts/camwhores.user.js +5 -5
  10. package/dist/userscripts/e-hentai.user.js +1 -1
  11. package/dist/userscripts/ebalka.user.js +5 -5
  12. package/dist/userscripts/eporner.user.js +3 -3
  13. package/dist/userscripts/erome.user.js +4 -4
  14. package/dist/userscripts/eroprofile.user.js +2 -2
  15. package/dist/userscripts/javhdporn.user.js +2 -2
  16. package/dist/userscripts/missav.user.js +3 -3
  17. package/dist/userscripts/motherless.user.js +3 -3
  18. package/dist/userscripts/namethatporn.user.js +2 -2
  19. package/dist/userscripts/nhentai.user.js +3 -3
  20. package/dist/userscripts/pornhub.user.js +2 -2
  21. package/dist/userscripts/spankbang.user.js +4 -4
  22. package/dist/userscripts/thisvid.user.js +35 -1284
  23. package/dist/userscripts/xhamster.user.js +4 -4
  24. package/dist/userscripts/xvideos.user.js +4 -4
  25. package/package.json +3 -4
  26. package/src/core/data-control/data-manager.ts +1 -2
  27. package/src/core/infinite-scroll/index.ts +1 -3
  28. package/src/core/jabroni-config/default-scheme.ts +1 -0
  29. package/src/core/jabroni-config/index.ts +2 -0
  30. package/src/core/rules/index.ts +5 -6
  31. package/src/userscripts/index.ts +1 -1
  32. package/src/userscripts/meta.json +1 -5
  33. package/src/userscripts/scripts/3hentai.ts +0 -1
  34. package/src/userscripts/scripts/camgirlfinder.ts +0 -1
  35. package/src/userscripts/scripts/camwhores.ts +4 -5
  36. package/src/userscripts/scripts/e-hentai.ts +0 -1
  37. package/src/userscripts/scripts/ebalka.ts +4 -5
  38. package/src/userscripts/scripts/eporner.ts +3 -4
  39. package/src/userscripts/scripts/erome.ts +3 -4
  40. package/src/userscripts/scripts/eroprofile.ts +1 -2
  41. package/src/userscripts/scripts/javhdporn.ts +1 -2
  42. package/src/userscripts/scripts/missav.ts +2 -3
  43. package/src/userscripts/scripts/motherless.ts +3 -4
  44. package/src/userscripts/scripts/namethatporn.ts +1 -2
  45. package/src/userscripts/scripts/nhentai.ts +2 -3
  46. package/src/userscripts/scripts/pornhub.ts +1 -2
  47. package/src/userscripts/scripts/spankbang.ts +4 -5
  48. package/src/userscripts/scripts/thisvid.ts +715 -0
  49. package/src/userscripts/scripts/xhamster.ts +4 -5
  50. package/src/userscripts/scripts/xvideos.ts +4 -8
  51. package/src/utils/events/index.ts +1 -1
  52. package/src/utils/events/on-hover.ts +42 -0
  53. package/src/utils/index.ts +3 -1
  54. package/src/utils/events/on-pointer-over-and-leave.ts +0 -35
@@ -1,7 +1,7 @@
1
1
  // ==UserScript==
2
2
  // @name Xhamster Improved
3
3
  // @namespace pervertmonkey
4
- // @version 5.0.0
4
+ // @version 5.0.1
5
5
  // @author violent-orangutan
6
6
  // @description Infinite scroll [optional], Filter by Title and Duration
7
7
  // @license MIT
@@ -10,10 +10,10 @@
10
10
  // @homepageURL https://github.com/smartacephale/sleazy-fork
11
11
  // @source github:smartacephale/sleazy-fork
12
12
  // @supportURL https://github.com/smartacephale/sleazy-fork/issues
13
- // @match https://*.xhamster.*/*
14
13
  // @match https://*.xhamster.com/*
14
+ // @match https://*.xhamster.*/*
15
15
  // @exclude https://*.xhamster.com/embed*
16
- // @require https://cdn.jsdelivr.net/npm/pervert-monkey@latest/dist/core/pervertmonkey.core.umd.js
16
+ // @require https://cdn.jsdelivr.net/npm/pervert-monkey@1.0.8/dist/core/pervertmonkey.core.umd.js
17
17
  // @require data:application/javascript,var core = window.pervertmonkey.core || pervertmonkey.core; var utils = core;
18
18
  // @grant GM_addStyle
19
19
  // @grant unsafeWindow
@@ -128,7 +128,7 @@
128
128
  );
129
129
  return () => utils.exterminateVideo(video);
130
130
  }
131
- utils.onPointerOverAndLeave(
131
+ utils.OnHover.create(
132
132
  document.body,
133
133
  (e) => e.classList.contains("thumb-image-container__image"),
134
134
  (e) => {
@@ -1,7 +1,7 @@
1
1
  // ==UserScript==
2
2
  // @name XVideos Improved
3
3
  // @namespace pervertmonkey
4
- // @version 4.0.0
4
+ // @version 4.0.1
5
5
  // @author violent-orangutan
6
6
  // @description Infinite scroll [optional], Filter by Title and Duration
7
7
  // @license MIT
@@ -11,7 +11,7 @@
11
11
  // @source github:smartacephale/sleazy-fork
12
12
  // @supportURL https://github.com/smartacephale/sleazy-fork/issues
13
13
  // @match https://*.xvideos.com/*
14
- // @require https://cdn.jsdelivr.net/npm/pervert-monkey@latest/dist/core/pervertmonkey.core.umd.js
14
+ // @require https://cdn.jsdelivr.net/npm/pervert-monkey@1.0.8/dist/core/pervertmonkey.core.umd.js
15
15
  // @require data:application/javascript,var core = window.pervertmonkey.core || pervertmonkey.core; var utils = core;
16
16
  // @grant GM_addStyle
17
17
  // @grant unsafeWindow
@@ -70,9 +70,9 @@
70
70
  };
71
71
  }
72
72
  function getVideoURL(src) {
73
- return src.replace(/thumbs169l{1,}/, "videopreview").replace(/\/\w+\.\d+\.\w+/, "_169.mp4").replace(/(-\d+)_169\.mp4/, (_, b) => `_169${b}.mp4`);
73
+ return src.replace(/\w+\.\w+$/, () => "preview.mp4");
74
74
  }
75
- utils.onPointerOverAndLeave(
75
+ utils.OnHover.create(
76
76
  container,
77
77
  (target) => target.tagName === "IMG" && target.id.includes("pic_"),
78
78
  (target) => {
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "pervert-monkey",
3
3
  "description": "daddy told us not to be ashamed of our userscripts",
4
- "version": "1.0.6",
4
+ "version": "1.0.8",
5
5
  "license": "MIT",
6
6
  "keywords": [
7
7
  "userscript",
@@ -36,11 +36,11 @@
36
36
  "scripts": {
37
37
  "dev": "vite",
38
38
  "build": "tsc && vite build",
39
- "build:userscripts": "node vite.build.ts"
39
+ "build:userscripts": "node vite.build.userscripts.ts"
40
40
  },
41
41
  "devDependencies": {
42
42
  "@types/node": "^25.2.3",
43
- "jabroni-outfit": "^2.1.1",
43
+ "jabroni-outfit": "^2.1.2",
44
44
  "typescript": "^5.9.3",
45
45
  "vite": "^6.4.1",
46
46
  "vite-plugin-dts": "^4.0.3"
@@ -48,7 +48,6 @@
48
48
  "dependencies": {
49
49
  "ix": "^7.0.0",
50
50
  "lskdb": "^1.0.2",
51
- "pervert-monkey": "^1.0.1",
52
51
  "urlpattern-polyfill": "^10.1.0",
53
52
  "vite-plugin-monkey": "^7.1.9"
54
53
  }
@@ -1,6 +1,5 @@
1
1
  import type { StoreState } from 'jabroni-outfit';
2
- import { checkHomogenity } from '../../utils/dom';
3
- import { LazyImgLoader } from '../../utils/observers';
2
+ import { checkHomogenity, LazyImgLoader } from '../../utils';
4
3
  import type { RulesGlobal } from '../rules';
5
4
  import { DataFilter } from './data-filter';
6
5
 
@@ -1,6 +1,4 @@
1
- import { wait } from '../../utils/async';
2
- import { fetchHtml } from '../../utils/fetch';
3
- import { Observer } from '../../utils/observers';
1
+ import { fetchHtml, Observer, wait } from '../../utils';
4
2
  import type { PaginationStrategy } from '../pagination-parsing/pagination-strategies';
5
3
  import type { RulesGlobal } from '../rules';
6
4
 
@@ -61,6 +61,7 @@ export const DefaultScheme = [
61
61
  },
62
62
  {
63
63
  title: 'Advanced',
64
+ collapsed: true,
64
65
  content: [
65
66
  {
66
67
  infiniteScrollEnabled: true,
@@ -0,0 +1,2 @@
1
+ export * from './default-scheme'
2
+ export * from './default-store'
@@ -4,15 +4,14 @@ import {
4
4
  querySelectorLast,
5
5
  querySelectorText,
6
6
  removeClassesAndDataAttributes,
7
+ sanitizeStr,
8
+ timeToSeconds,
7
9
  waitForElementToDisappear,
8
- } from '../../utils/dom';
9
- import { timeToSeconds } from '../../utils/parsers';
10
- import { sanitizeStr } from '../../utils/strings';
10
+ } from '../../utils';
11
11
  import { DataManager } from '../data-control';
12
12
  import type { DataSelectorFn } from '../data-control/data-filter';
13
13
  import { InfiniteScroller, type OffsetGenerator } from '../infinite-scroll/';
14
- import { DefaultScheme, type SchemeOptions } from '../jabroni-config/default-scheme';
15
- import { StoreStateDefault } from '../jabroni-config/default-store';
14
+ import { DefaultScheme, type SchemeOptions, StoreStateDefault } from '../jabroni-config';
16
15
  import { getPaginationStrategy } from '../pagination-parsing';
17
16
  import type { PaginationStrategy } from '../pagination-parsing/pagination-strategies';
18
17
 
@@ -244,7 +243,7 @@ export class RulesGlobal {
244
243
  this.schemeOptions as Parameters<typeof setupScheme>[0],
245
244
  DefaultScheme,
246
245
  );
247
- this.gui = new JabronioGUI(scheme, this.store);
246
+ this.gui = new JabronioGUI(scheme, this.store, 'PervertMonkey');
248
247
  return this.gui;
249
248
  }
250
249
 
@@ -1 +1 @@
1
- import './scripts/3hentai';
1
+ import './scripts/pornhub';
@@ -7,9 +7,5 @@
7
7
  "homepage": "https://github.com/smartacephale/sleazy-fork",
8
8
  "homepageURL": "https://github.com/smartacephale/sleazy-fork",
9
9
  "source": "github:smartacephale/sleazy-fork",
10
- "supportURL": "https://github.com/smartacephale/sleazy-fork/issues",
11
- "require": [
12
- "https://cdn.jsdelivr.net/npm/pervert-monkey@latest/dist/core/pervertmonkey.core.umd.js",
13
- "data:application/javascript,var core = window.pervertmonkey.core || pervertmonkey.core; var utils = core;"
14
- ]
10
+ "supportURL": "https://github.com/smartacephale/sleazy-fork/issues"
15
11
  }
@@ -6,7 +6,6 @@ export const meta: MonkeyUserScript = {
6
6
  version: '1.0.0',
7
7
  description: 'Infinite scroll [optional], Filter by Title',
8
8
  match: 'https://*.3hentai.net/*',
9
- icon: 'https://www.google.com/s2/favicons?sz=64&domain=3hentai.net',
10
9
  };
11
10
 
12
11
  const rules = new RulesGlobal({
@@ -7,7 +7,6 @@ export const meta: MonkeyUserScript = {
7
7
  'Adds model links for CamWhores, webcamrecordings, recu.me, camvideos, privat-zapisi',
8
8
  match: ['https://camgirlfinder.net/*'],
9
9
  grant: 'none',
10
- icon: 'https://www.google.com/s2/favicons?sz=64&domain=camgirlfinder.net',
11
10
  };
12
11
 
13
12
  interface Website {
@@ -7,7 +7,7 @@ import {
7
7
  downloader,
8
8
  fetchHtml,
9
9
  objectToFormData,
10
- onPointerOverAndLeave,
10
+ OnHover,
11
11
  parseHtml,
12
12
  querySelectorLastNumber,
13
13
  querySelectorText,
@@ -17,12 +17,11 @@ import {
17
17
 
18
18
  export const meta: MonkeyUserScript = {
19
19
  name: 'CamWhores PervertMonkey',
20
- version: '3.0.3',
20
+ version: '3.0.4',
21
21
  description:
22
22
  'Infinite scroll [optional]. Filter by Title, Duration and Private/Public. Mass friend request button. Download button',
23
- match: ['https://*.camwhores.*/*', 'https://*.camwhores.tv'],
23
+ match: ['https://*.camwhores.tv', 'https://*.camwhores.*/*'],
24
24
  exclude: 'https://*.camwhores.tv/*mode=async*',
25
- icon: 'https://www.google.com/s2/favicons?sz=64&domain=3hentai.net',
26
25
  };
27
26
 
28
27
  const $ = (unsafeWindow as any).$;
@@ -102,7 +101,7 @@ function animatePreview(container: HTMLElement) {
102
101
  return src.replace(/(\d)(?=\.jpg$)/, (_, n) => `${circularShift(parseInt(n), count)}`);
103
102
  }
104
103
 
105
- onPointerOverAndLeave(
104
+ OnHover.create(
106
105
  container,
107
106
  (target) =>
108
107
  target.tagName === 'IMG' &&
@@ -7,7 +7,6 @@ export const meta: MonkeyUserScript = {
7
7
  version: '1.0.0',
8
8
  description: 'Infinite scroll [optional], Filter by Title',
9
9
  match: ['https://*.e-hentai.org/*'],
10
- icon: 'https://www.google.com/s2/favicons?sz=64&domain=e-hentai.org',
11
10
  };
12
11
 
13
12
  const rules = new RulesGlobal({
@@ -1,19 +1,18 @@
1
1
  import type { MonkeyUserScript } from 'vite-plugin-monkey';
2
2
  import { RulesGlobal } from '../../core';
3
- import { exterminateVideo, onPointerOverAndLeave, parseHtml } from '../../utils';
3
+ import { exterminateVideo, OnHover, parseHtml } from '../../utils';
4
4
 
5
5
  export const meta: MonkeyUserScript = {
6
6
  name: 'Ebalka PervertMonkey',
7
- version: '3.0.0',
7
+ version: '3.0.1',
8
8
  description: 'Infinite scroll [optional], Filter by Title and Duration',
9
9
  match: [
10
- 'https://a.ebalka.love/*',
11
10
  'https://b.ebalka.zip/*',
11
+ 'https://a.ebalka.love/*',
12
12
  'https://*ebalka.*.*/*',
13
13
  'https://*.ebalk*.*/*',
14
14
  'https://*.fuckingbear*.*/*',
15
15
  ],
16
- icon: 'https://www.google.com/s2/favicons?sz=64&domain=ebalka.nl',
17
16
  };
18
17
 
19
18
  const rules = new RulesGlobal({
@@ -45,7 +44,7 @@ function animatePreview(container: HTMLElement) {
45
44
  };
46
45
  }
47
46
 
48
- onPointerOverAndLeave(
47
+ OnHover.create(
49
48
  container,
50
49
  (target) => target.tagName === 'IMG',
51
50
  (target) => {
@@ -1,14 +1,13 @@
1
1
  import type { MonkeyUserScript } from 'vite-plugin-monkey';
2
2
  import { unsafeWindow } from '$';
3
3
  import { RulesGlobal } from '../../core';
4
- import { onPointerOverAndLeave } from '../../utils';
4
+ import { OnHover } from '../../utils';
5
5
 
6
6
  export const meta: MonkeyUserScript = {
7
7
  name: 'Eporner PervertMonkey',
8
- version: '2.0.1',
8
+ version: '2.0.2',
9
9
  description: 'Infinite scroll [optional], Filter by Title, Duration and HD',
10
10
  match: ['https://*.eporner.com/*', 'https://*.eporner.*/*'],
11
- icon: 'https://www.google.com/s2/favicons?sz=64&domain=eporner.com',
12
11
  };
13
12
 
14
13
  const show_video_prev = (unsafeWindow as any).show_video_prev;
@@ -77,7 +76,7 @@ const rules = new RulesGlobal({
77
76
  });
78
77
 
79
78
  function animatePreview(doc: HTMLElement) {
80
- onPointerOverAndLeave(
79
+ OnHover.create(
81
80
  doc,
82
81
  (e) => e instanceof HTMLImageElement,
83
82
  (e) => {
@@ -4,10 +4,9 @@ import { RulesGlobal } from '../../core';
4
4
 
5
5
  export const meta: MonkeyUserScript = {
6
6
  name: 'Erome PervertMonkey',
7
- version: '5.0.0',
7
+ version: '5.0.1',
8
8
  description: 'Infinite scroll [optional], Filter by Title and Video/Photo albums',
9
9
  match: ['*://*.erome.com/*'],
10
- icon: 'https://www.google.com/s2/favicons?sz=64&domain=erome.com',
11
10
  };
12
11
 
13
12
  const $ = (unsafeWindow as any).$;
@@ -44,11 +43,11 @@ const rules = new RulesGlobal({
44
43
  title: 'Filter Albums',
45
44
  content: [
46
45
  {
47
- filterVideoAlbums: true,
46
+ filterVideoAlbums: false,
48
47
  label: 'video albums',
49
48
  },
50
49
  {
51
- filterPhotoAlbums: true,
50
+ filterPhotoAlbums: false,
52
51
  label: 'photo albums',
53
52
  },
54
53
  ],
@@ -3,10 +3,9 @@ import { RulesGlobal } from '../../core';
3
3
 
4
4
  export const meta: MonkeyUserScript = {
5
5
  name: 'Eroprofile PervertMonkey',
6
- version: '2.0.0',
6
+ version: '2.0.1',
7
7
  description: 'Infinite scroll [optional], Filter by Title and Duration',
8
8
  match: ['https://*.eroprofile.com/*'],
9
- icon: 'https://www.google.com/s2/favicons?sz=64&domain=eroprofile.com',
10
9
  };
11
10
 
12
11
  document.querySelector('.videoGrid')?.after(document.querySelector('.clB') as HTMLElement);
@@ -3,13 +3,12 @@ import { RulesGlobal } from '../../core';
3
3
 
4
4
  export const meta: MonkeyUserScript = {
5
5
  name: 'Javhdporn PervertMonkey',
6
- version: '3.0.0',
6
+ version: '3.0.1',
7
7
  description: 'Infinite scroll [optional], Filter by Title and Duration',
8
8
  match: [
9
9
  "https://*.javhdporn.net/*",
10
10
  "https://*.javhdporn.*/*"
11
11
  ],
12
- icon: 'https://www.google.com/s2/favicons?sz=64&domain=javhdporn.net',
13
12
  };
14
13
 
15
14
  const rules = new RulesGlobal({
@@ -3,16 +3,15 @@ import { RulesGlobal } from '../../core';
3
3
 
4
4
  export const meta: MonkeyUserScript = {
5
5
  name: 'Missav PervertMonkey',
6
- version: '3.0.0',
6
+ version: '3.0.1',
7
7
  description: 'Infinite scroll [optional], Filter by Title and Duration',
8
8
  match: [
9
- 'https://*.missav.*/*',
10
9
  'https://*.missav123.com/*',
10
+ 'https://*.missav.*/*',
11
11
  'https://*.missav.ws/*',
12
12
  'https://*.missav.to/*',
13
13
  'https://*.missav.live/*',
14
14
  ],
15
- icon: 'https://www.google.com/s2/favicons?sz=64&domain=missav123.com',
16
15
  };
17
16
 
18
17
  const rules = new RulesGlobal({
@@ -1,14 +1,13 @@
1
1
  import type { MonkeyUserScript } from 'vite-plugin-monkey';
2
2
  import { GM_addStyle, unsafeWindow } from '$';
3
3
  import { RulesGlobal } from '../../core';
4
- import { fetchWith, onPointerOverAndLeave, replaceElementTag, Tick } from '../../utils';
4
+ import { fetchWith, OnHover, replaceElementTag, Tick } from '../../utils';
5
5
 
6
6
  export const meta: MonkeyUserScript = {
7
7
  name: 'Motherless PervertMonkey',
8
- version: '5.0.0',
8
+ version: '5.0.1',
9
9
  description: 'Infinite scroll [optional], Filter by Title and Duration',
10
10
  match: ['https://motherless.com/*'],
11
- icon: 'https://www.google.com/s2/favicons?sz=64&domain=motherless.com',
12
11
  };
13
12
 
14
13
  (unsafeWindow as any).__is_premium = true;
@@ -92,7 +91,7 @@ function animatePreview(_: HTMLElement) {
92
91
  return { onOverCallback, leaveTarget: container };
93
92
  }
94
93
 
95
- onPointerOverAndLeave(
94
+ OnHover.create(
96
95
  document.body,
97
96
  (e) => {
98
97
  const container = e.closest('.desktop-thumb.video') as HTMLElement;
@@ -4,10 +4,9 @@ import { RulesGlobal } from '../../core';
4
4
 
5
5
  export const meta: MonkeyUserScript = {
6
6
  name: 'NameThatPorn PervertMonkey',
7
- version: '3.0.0',
7
+ version: '3.0.1',
8
8
  description: 'Infinite scroll [optional], Filter by Title and Un/Solved',
9
9
  match: ['https://namethatporn.com/*'],
10
- icon: 'https://www.google.com/s2/favicons?sz=64&domain=namethatporn.com',
11
10
  };
12
11
 
13
12
  const rules = new RulesGlobal({
@@ -4,10 +4,9 @@ import { parseHtml } from '../../utils';
4
4
 
5
5
  export const meta: MonkeyUserScript = {
6
6
  name: 'NHentai PervertMonkey',
7
- version: '4.0.0',
7
+ version: '4.0.1',
8
8
  description: 'Infinite scroll [optional], Filter by Title',
9
- match: ['https://*.nhentai.*/*', 'https://*.nhentai.net/*'],
10
- icon: 'https://www.google.com/s2/favicons?sz=64&domain=nhentai.net',
9
+ match: ['https://*.nhentai.net/*', 'https://*.nhentai.*/*'],
11
10
  };
12
11
 
13
12
  const IS_TITLE_PAGE = /^\/g\/\d+/.test(location.pathname);
@@ -3,12 +3,11 @@ import { RulesGlobal } from '../../core';
3
3
 
4
4
  export const meta: MonkeyUserScript = {
5
5
  name: 'PornHub PervertMonkey',
6
- version: '4.0.0',
6
+ version: '4.0.1',
7
7
  description:
8
8
  'Infinite scroll [optional]. Filter by Title and Duration',
9
9
  match: ['https://*.pornhub.com/*'],
10
10
  exclude: 'https://*.pornhub.com/embed/*',
11
- icon: 'https://www.google.com/s2/favicons?sz=64&domain=pornhub.com',
12
11
  };
13
12
 
14
13
  const rules = new RulesGlobal({
@@ -1,13 +1,12 @@
1
1
  import type { MonkeyUserScript } from 'vite-plugin-monkey';
2
2
  import { RulesGlobal } from '../../core';
3
- import { exterminateVideo, onPointerOverAndLeave, parseHtml } from '../../utils';
3
+ import { exterminateVideo, OnHover, parseHtml } from '../../utils';
4
4
 
5
5
  export const meta: MonkeyUserScript = {
6
6
  name: 'SpankBang.com PervertMonkey',
7
- version: '4.0.0',
7
+ version: '4.0.1',
8
8
  description: 'Infinite scroll [optional]. Filter by Title and Duration',
9
- match: ['https://*.spankbang.*/*', 'https://*.spankbang.com/*'],
10
- icon: 'https://www.google.com/s2/favicons?sz=64&domain=spankbang.com',
9
+ match: ['https://*.spankbang.com/*', 'https://*.spankbang.*/*'],
11
10
  };
12
11
 
13
12
  const rules = new RulesGlobal({
@@ -47,7 +46,7 @@ function animatePreview(container: HTMLElement) {
47
46
  };
48
47
  }
49
48
 
50
- onPointerOverAndLeave(
49
+ OnHover.create(
51
50
  container,
52
51
  (e) => e.tagName === 'IMG',
53
52
  (e) => {