@wix/interact 1.66.0

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 (80) hide show
  1. package/README.md +258 -0
  2. package/dist/cjs/WixInteractElement.js +103 -0
  3. package/dist/cjs/WixInteractElement.js.map +1 -0
  4. package/dist/cjs/__tests__/interact.spec.js +944 -0
  5. package/dist/cjs/__tests__/interact.spec.js.map +1 -0
  6. package/dist/cjs/external-types.d.js +2 -0
  7. package/dist/cjs/external-types.d.js.map +1 -0
  8. package/dist/cjs/handlers/animationEnd.js +33 -0
  9. package/dist/cjs/handlers/animationEnd.js.map +1 -0
  10. package/dist/cjs/handlers/click.js +82 -0
  11. package/dist/cjs/handlers/click.js.map +1 -0
  12. package/dist/cjs/handlers/hover.js +103 -0
  13. package/dist/cjs/handlers/hover.js.map +1 -0
  14. package/dist/cjs/handlers/index.js +21 -0
  15. package/dist/cjs/handlers/index.js.map +1 -0
  16. package/dist/cjs/handlers/pointerMove.js +40 -0
  17. package/dist/cjs/handlers/pointerMove.js.map +1 -0
  18. package/dist/cjs/handlers/utilities.js +51 -0
  19. package/dist/cjs/handlers/utilities.js.map +1 -0
  20. package/dist/cjs/handlers/viewEnter.js +69 -0
  21. package/dist/cjs/handlers/viewEnter.js.map +1 -0
  22. package/dist/cjs/handlers/viewProgress.js +56 -0
  23. package/dist/cjs/handlers/viewProgress.js.map +1 -0
  24. package/dist/cjs/index.js +21 -0
  25. package/dist/cjs/index.js.map +1 -0
  26. package/dist/cjs/interact.js +310 -0
  27. package/dist/cjs/interact.js.map +1 -0
  28. package/dist/cjs/test-types.d.js +2 -0
  29. package/dist/cjs/test-types.d.js.map +1 -0
  30. package/dist/cjs/types.js +2 -0
  31. package/dist/cjs/types.js.map +1 -0
  32. package/dist/cjs/utils.js +66 -0
  33. package/dist/cjs/utils.js.map +1 -0
  34. package/dist/esm/WixInteractElement.js +97 -0
  35. package/dist/esm/WixInteractElement.js.map +1 -0
  36. package/dist/esm/__tests__/interact.spec.js +952 -0
  37. package/dist/esm/__tests__/interact.spec.js.map +1 -0
  38. package/dist/esm/external-types.d.js +2 -0
  39. package/dist/esm/external-types.d.js.map +1 -0
  40. package/dist/esm/handlers/animationEnd.js +29 -0
  41. package/dist/esm/handlers/animationEnd.js.map +1 -0
  42. package/dist/esm/handlers/click.js +82 -0
  43. package/dist/esm/handlers/click.js.map +1 -0
  44. package/dist/esm/handlers/hover.js +103 -0
  45. package/dist/esm/handlers/hover.js.map +1 -0
  46. package/dist/esm/handlers/index.js +16 -0
  47. package/dist/esm/handlers/index.js.map +1 -0
  48. package/dist/esm/handlers/pointerMove.js +39 -0
  49. package/dist/esm/handlers/pointerMove.js.map +1 -0
  50. package/dist/esm/handlers/utilities.js +45 -0
  51. package/dist/esm/handlers/utilities.js.map +1 -0
  52. package/dist/esm/handlers/viewEnter.js +69 -0
  53. package/dist/esm/handlers/viewEnter.js.map +1 -0
  54. package/dist/esm/handlers/viewProgress.js +52 -0
  55. package/dist/esm/handlers/viewProgress.js.map +1 -0
  56. package/dist/esm/index.js +3 -0
  57. package/dist/esm/index.js.map +1 -0
  58. package/dist/esm/interact.js +303 -0
  59. package/dist/esm/interact.js.map +1 -0
  60. package/dist/esm/test-types.d.js +2 -0
  61. package/dist/esm/test-types.d.js.map +1 -0
  62. package/dist/esm/types.js +2 -0
  63. package/dist/esm/types.js.map +1 -0
  64. package/dist/esm/utils.js +61 -0
  65. package/dist/esm/utils.js.map +1 -0
  66. package/dist/types/WixInteractElement.d.ts +324 -0
  67. package/dist/types/__tests__/interact.spec.d.ts +1 -0
  68. package/dist/types/handlers/animationEnd.d.ts +8 -0
  69. package/dist/types/handlers/click.d.ts +8 -0
  70. package/dist/types/handlers/hover.d.ts +8 -0
  71. package/dist/types/handlers/index.d.ts +3 -0
  72. package/dist/types/handlers/pointerMove.d.ts +8 -0
  73. package/dist/types/handlers/utilities.d.ts +4 -0
  74. package/dist/types/handlers/viewEnter.d.ts +8 -0
  75. package/dist/types/handlers/viewProgress.d.ts +8 -0
  76. package/dist/types/index.d.ts +2 -0
  77. package/dist/types/interact.d.ts +25 -0
  78. package/dist/types/types.d.ts +173 -0
  79. package/dist/types/utils.d.ts +4 -0
  80. package/package.json +71 -0
@@ -0,0 +1 @@
1
+ {"version":3,"names":["Interact","add","remove","effectToAnimationOptions","jest","mock","getWebAnimation","fn","mockReturnValue","play","cancel","getScrubScene","getEasing","mockImplementation","v","Pointer","start","destroy","Scroll","end","describe","element","mockConfig","interactions","trigger","source","params","threshold","effects","target","effectId","hitArea","type","method","namedEffect","direction","power","duration","distance","value","axis","transitionDuration","transitionEasing","centeredToTarget","distanceFactor","range","opacity","rangeStart","name","offset","rangeEnd","transition","styleProperties","beforeEach","document","createElement","div","append","window","KeyframeEffect","constructor","keyframes","options","ViewTimeline","Animation","effect","timeline","IntersectionObserver","callback","observe","unobserve","CSSStyleSheet","_","replace","adoptedStyleSheets","mockMatchMedia","matchingQueries","queryRule","join","mockMQL","query","matches","media","onchange","addEventListener","removeEventListener","dispatchEvent","Object","defineProperty","writable","createCascadingTestConfig","conditions","matchingConditions","desktop","predicate","mobile","tablet","afterEach","clearAllMocks","instances","length","elementCache","clear","it","create","expect","customElements","get","toBeDefined","require","addEventListenerSpy","spyOn","toHaveBeenCalledTimes","toHaveBeenCalledWith","any","Function","objectContaining","passive","HTMLElement","elementClick","divClick","pointerInstance","toHaveBeenCalled","scrollInstance","setTimeout","removeEventListenerSpy","not","toThrow","config","sourceElement","sourceDiv","targetElement","targetDiv","firstElementChild","complexConfig","target1Element","target1Div","target2Element","target2Div","multiConditionConfig","configWithMissingCondition","configWithEmptyConditions"],"sources":["../../../src/__tests__/interact.spec.ts"],"sourcesContent":["import { Interact, add, remove } from '../interact';\nimport type {\n InteractConfig,\n ScrubEffect,\n IWixInteractElement,\n} from '../types';\nimport type { NamedEffect } from '@wix/motion';\nimport { effectToAnimationOptions } from '../handlers/utilities';\n\n// Mock @wix/motion module\njest.mock('@wix/motion', () => ({\n getWebAnimation: jest.fn().mockReturnValue({\n play: jest.fn(),\n cancel: jest.fn(),\n }),\n getScrubScene: jest.fn().mockReturnValue({}),\n getEasing: jest.fn().mockImplementation((v) => v),\n}));\n\n// Mock kuliso module\njest.mock('kuliso', () => ({\n Pointer: jest.fn().mockImplementation(() => ({\n start: jest.fn(),\n destroy: jest.fn(),\n })),\n}));\n\n// Mock fizban module\njest.mock('fizban', () => ({\n Scroll: jest.fn().mockImplementation(() => ({\n start: jest.fn(),\n end: jest.fn(),\n })),\n}));\n\ndescribe('interact', () => {\n let element: IWixInteractElement;\n const mockConfig: InteractConfig = {\n interactions: [\n {\n trigger: 'viewEnter',\n source: '#logo-entrance',\n params: {\n threshold: 0.2,\n },\n effects: [\n {\n target: '#logo-entrance',\n effectId: 'logo-arc-in',\n },\n {\n target: '#logo-click',\n effectId: 'logo-bounce',\n },\n ],\n },\n {\n trigger: 'pageVisible',\n source: '#logo-loop',\n effects: [\n {\n target: '#logo-loop',\n effectId: 'logo-poke',\n },\n ],\n },\n {\n trigger: 'animationEnd',\n source: '#logo-animation-end',\n params: {\n effectId: 'logo-arc-in',\n },\n effects: [\n {\n target: '#logo-animation-end',\n effectId: 'logo-poke',\n },\n ],\n },\n {\n trigger: 'pointerMove',\n source: '#logo-mouse',\n params: {\n hitArea: 'root',\n },\n effects: [\n {\n target: '#logo-mouse',\n effectId: 'logo-track-mouse',\n },\n ],\n },\n {\n trigger: 'click',\n source: '#logo-click',\n params: {\n type: 'alternate',\n },\n effects: [\n {\n target: '#logo-click',\n effectId: 'logo-bounce',\n },\n ],\n },\n {\n trigger: 'click',\n source: '#logo-click',\n params: {\n method: 'toggle',\n },\n effects: [\n {\n target: '#logo-click',\n effectId: 'logo-transition-hover',\n },\n ],\n },\n {\n trigger: 'hover',\n source: '#logo-hover',\n params: {\n type: 'alternate',\n },\n effects: [\n {\n target: '#logo-hover',\n effectId: 'logo-arc-in',\n },\n {\n target: '#logo-hover',\n effectId: 'logo-arc-in',\n namedEffect: {\n type: 'ArcIn',\n direction: 'left',\n power: 'hard',\n } as NamedEffect,\n },\n ],\n },\n {\n trigger: 'hover',\n source: '#logo-hover',\n params: {\n method: 'toggle',\n },\n effects: [\n {\n target: '#logo-hover',\n effectId: 'logo-transition-hover',\n },\n ],\n },\n {\n trigger: 'viewProgress',\n source: '#logo-scroll',\n effects: [\n {\n target: '#logo-scroll',\n effectId: 'logo-fade-scroll',\n },\n ],\n },\n ],\n effects: {\n 'logo-arc-in': {\n namedEffect: {\n type: 'ArcIn',\n direction: 'right',\n power: 'medium',\n } as NamedEffect,\n duration: 1200,\n },\n 'logo-arc-in-with-target': {\n target: '#logo-hover',\n namedEffect: {\n type: 'ArcIn',\n direction: 'right',\n power: 'medium',\n } as NamedEffect,\n duration: 1200,\n },\n 'logo-track-mouse': {\n namedEffect: {\n type: 'TrackMouse',\n distance: { value: 20, type: 'px' },\n axis: 'both',\n power: 'medium',\n } as NamedEffect,\n transitionDuration: 300,\n transitionEasing: 'easeOut',\n centeredToTarget: true,\n },\n 'logo-bounce': {\n namedEffect: {\n type: 'BounceIn',\n power: 'hard',\n direction: 'center',\n distanceFactor: 1.2,\n } as NamedEffect,\n duration: 500,\n },\n 'logo-fade-scroll': {\n namedEffect: {\n type: 'FadeScroll',\n range: 'in',\n opacity: 0,\n } as NamedEffect,\n rangeStart: {\n name: 'contain',\n offset: { value: -10, type: 'percentage' },\n },\n rangeEnd: {\n name: 'contain',\n offset: { value: 110, type: 'percentage' },\n },\n },\n 'logo-transition-hover': {\n transition: {\n duration: 300,\n styleProperties: [{ name: 'opacity', value: '0' }],\n },\n },\n 'logo-poke': {\n namedEffect: {\n type: 'Poke',\n direction: 'left',\n power: 'medium',\n } as NamedEffect,\n duration: 500,\n },\n },\n };\n\n beforeEach(() => {\n element = document.createElement(\n 'wix-interact-element',\n ) as IWixInteractElement;\n const div = document.createElement('div');\n element.append(div);\n\n // Mock Web Animations API\n (window as any).KeyframeEffect = class KeyframeEffect {\n // eslint-disable-next-line @typescript-eslint/no-shadow\n constructor(element: Element | null, keyframes: any[], options: any) {\n return { element, keyframes, options };\n }\n };\n\n // Mock ViewTimeline\n (window as any).ViewTimeline = class ViewTimeline {\n constructor(options: any) {\n return { ...options };\n }\n };\n\n // Mock Animation\n (window as any).Animation = class Animation {\n constructor(effect: any, timeline: any) {\n return { effect, timeline, play: jest.fn() };\n }\n };\n\n // Mock IntersectionObserver\n (window as any).IntersectionObserver = class IntersectionObserver {\n constructor(callback: any, options: any) {\n return { callback, options, observe: jest.fn(), unobserve: jest.fn() };\n }\n };\n\n // Mock CSSStyleSheet\n (window as any).CSSStyleSheet = class CSSStyleSheet {\n constructor(_: string) {\n return { replace: jest.fn() };\n }\n };\n\n // Mock adoptedStyleSheets\n if (!document.adoptedStyleSheets) {\n document.adoptedStyleSheets = [];\n }\n\n // Mock matchMedia for condition testing\n mockMatchMedia();\n });\n\n function mockMatchMedia(matchingQueries: string[] = []) {\n const queryRule = `(${matchingQueries.join(') and (')})`;\n const mockMQL = (query: string) => {\n return {\n matches: queryRule === query,\n media: query,\n onchange: null,\n addEventListener: jest.fn(),\n removeEventListener: jest.fn(),\n dispatchEvent: jest.fn(),\n };\n };\n\n Object.defineProperty(window, 'matchMedia', {\n writable: true,\n value: jest.fn().mockImplementation(mockMQL),\n });\n }\n\n function createCascadingTestConfig(\n conditions: Record<string, any> = {},\n matchingConditions: string[] = [],\n ): InteractConfig {\n mockMatchMedia(matchingConditions);\n\n return {\n conditions: {\n desktop: {\n type: 'media',\n predicate: 'min-width: 1024px',\n },\n mobile: {\n type: 'media',\n predicate: 'max-width: 767px',\n },\n tablet: {\n type: 'media',\n predicate: '(min-width: 768px) and (max-width: 1023px)',\n },\n ...conditions,\n },\n interactions: [\n {\n trigger: 'click',\n source: '#cascade-source',\n effects: [\n {\n target: '#cascade-target',\n effectId: 'default-effect',\n },\n {\n target: '#cascade-target',\n effectId: 'default-effect',\n conditions: ['desktop'],\n namedEffect: {\n type: 'SlideIn',\n direction: 'right',\n power: 'medium',\n } as NamedEffect,\n duration: 800,\n },\n {\n target: '#cascade-target',\n effectId: 'default-effect',\n conditions: ['mobile'],\n namedEffect: {\n type: 'BounceIn',\n direction: 'center',\n power: 'hard',\n } as NamedEffect,\n duration: 600,\n },\n ],\n },\n ],\n effects: {\n 'default-effect': {\n namedEffect: {\n type: 'FadeIn',\n power: 'medium',\n } as NamedEffect,\n duration: 500,\n },\n },\n };\n }\n\n afterEach(() => {\n jest.clearAllMocks();\n\n remove('#logo-entrance');\n remove('#logo-loop');\n remove('#logo-animation-end');\n remove('#logo-mouse');\n remove('#logo-click');\n remove('#logo-hover');\n remove('#logo-scroll');\n // Clean up cascading test elements\n remove('#cascade-source');\n remove('#cascade-target');\n remove('#cascade-target-1');\n remove('#cascade-target-2');\n remove('#multi-source-1');\n remove('#multi-source-2');\n // Clear Interact instances to ensure test isolation\n Interact.instances.length = 0;\n Interact.elementCache.clear();\n });\n\n describe('init Interact', () => {\n it('should initialize with valid config', () => {\n Interact.create({} as InteractConfig);\n expect(customElements.get('wix-interact-element')).toBeDefined();\n });\n });\n\n describe('add interaction', () => {\n beforeEach(() => {\n Interact.create(mockConfig);\n });\n\n describe('hover', () => {\n it('should add handler for hover trigger with alternate type', () => {\n const { getWebAnimation } = require('@wix/motion');\n\n element = document.createElement(\n 'wix-interact-element',\n ) as IWixInteractElement;\n const div = document.createElement('div');\n element.append(div);\n\n const addEventListenerSpy = jest.spyOn(div, 'addEventListener');\n\n add(element, '#logo-hover');\n\n expect(addEventListenerSpy).toHaveBeenCalledTimes(4);\n expect(addEventListenerSpy).toHaveBeenCalledWith(\n 'mouseenter',\n expect.any(Function),\n expect.objectContaining({\n passive: true,\n }),\n );\n\n expect(addEventListenerSpy).toHaveBeenCalledWith(\n 'mouseleave',\n expect.any(Function),\n expect.objectContaining({\n passive: true,\n }),\n );\n\n expect(getWebAnimation).toHaveBeenCalledTimes(1);\n expect(getWebAnimation).toHaveBeenCalledWith(\n div,\n expect.objectContaining({\n namedEffect: expect.objectContaining({\n type: 'ArcIn',\n direction: 'left',\n power: 'hard',\n }),\n }),\n );\n });\n });\n\n describe('click', () => {\n it('should add handler for click trigger', () => {\n element = document.createElement(\n 'wix-interact-element',\n ) as IWixInteractElement;\n const div = document.createElement('div');\n element.append(div);\n\n const addEventListenerSpy = jest.spyOn(div, 'addEventListener');\n\n add(element, '#logo-click');\n\n expect(addEventListenerSpy).toHaveBeenCalledTimes(2);\n expect(addEventListenerSpy).toHaveBeenCalledWith(\n 'click',\n expect.any(Function),\n expect.objectContaining({\n passive: true,\n }),\n );\n });\n });\n\n describe('viewEnter', () => {\n it('should add handler for viewEnter trigger', () => {\n const { getWebAnimation } = require('@wix/motion');\n element = document.createElement(\n 'wix-interact-element',\n ) as IWixInteractElement;\n const div = document.createElement('div');\n element.append(div);\n\n add(element, '#logo-entrance');\n\n expect(getWebAnimation).toHaveBeenCalledTimes(1);\n expect(getWebAnimation).toHaveBeenCalledWith(\n expect.any(HTMLElement),\n expect.any(Object),\n );\n });\n\n it('should add handler for viewEnter trigger when target is added before source', () => {\n const { getWebAnimation } = require('@wix/motion');\n element = document.createElement(\n 'wix-interact-element',\n ) as IWixInteractElement;\n const div = document.createElement('div');\n element.append(div);\n\n const elementClick = document.createElement(\n 'wix-interact-element',\n ) as IWixInteractElement;\n const divClick = document.createElement('div');\n element.append(divClick);\n\n add(elementClick, '#logo-click');\n add(element, '#logo-entrance');\n\n expect(getWebAnimation).toHaveBeenCalledTimes(1);\n expect(getWebAnimation).toHaveBeenCalledWith(\n expect.any(HTMLElement),\n expect.any(Object),\n );\n });\n });\n\n describe('pageVisible', () => {\n it('should add handler for pageVisible trigger', () => {\n const { getWebAnimation } = require('@wix/motion');\n element = document.createElement(\n 'wix-interact-element',\n ) as IWixInteractElement;\n const div = document.createElement('div');\n element.append(div);\n\n add(element, '#logo-loop');\n\n expect(getWebAnimation).toHaveBeenCalledTimes(1);\n expect(getWebAnimation).toHaveBeenCalledWith(\n expect.any(HTMLElement),\n expect.any(Object),\n );\n });\n });\n\n describe('animationEnd', () => {\n it('should add handler for animationEnd trigger', () => {\n const { getWebAnimation } = require('@wix/motion');\n element = document.createElement(\n 'wix-interact-element',\n ) as IWixInteractElement;\n const div = document.createElement('div');\n element.append(div);\n\n add(element, '#logo-animation-end');\n\n expect(getWebAnimation).toHaveBeenCalledTimes(1);\n expect(getWebAnimation).toHaveBeenCalledWith(\n expect.any(HTMLElement),\n expect.any(Object),\n );\n });\n });\n\n describe('pointerMove', () => {\n it('should add handler for pointerMove trigger', () => {\n const { getScrubScene } = require('@wix/motion');\n const { Pointer } = require('kuliso');\n const pointerInstance = {\n start: jest.fn(),\n destroy: jest.fn(),\n };\n Pointer.mockImplementation(() => pointerInstance);\n\n element = document.createElement(\n 'wix-interact-element',\n ) as IWixInteractElement;\n const div = document.createElement('div');\n element.append(div);\n\n add(element, '#logo-mouse');\n\n expect(getScrubScene).toHaveBeenCalledTimes(1);\n expect(getScrubScene).toHaveBeenCalledWith(\n expect.any(HTMLElement),\n expect.objectContaining(\n effectToAnimationOptions(\n mockConfig.effects['logo-track-mouse'] as ScrubEffect,\n ),\n ),\n expect.objectContaining({\n trigger: 'pointer-move',\n }),\n );\n expect(pointerInstance.start).toHaveBeenCalled();\n });\n });\n\n describe('viewProgress', () => {\n it('should add handler for viewProgress trigger with native ViewTimeline support', () => {\n const { getWebAnimation } = require('@wix/motion');\n\n element = document.createElement(\n 'wix-interact-element',\n ) as IWixInteractElement;\n const div = document.createElement('div');\n element.append(div);\n\n add(element, '#logo-scroll');\n\n expect(getWebAnimation).toHaveBeenCalledTimes(1);\n expect(getWebAnimation).toHaveBeenCalledWith(\n expect.any(HTMLElement),\n expect.objectContaining(\n effectToAnimationOptions(\n mockConfig.effects['logo-fade-scroll'] as ScrubEffect,\n ),\n ),\n expect.objectContaining({\n trigger: 'view-progress',\n }),\n );\n });\n\n it('should add handler for viewProgress trigger with fizban polyfill', () => {\n // Remove ViewTimeline support\n delete (window as any).ViewTimeline;\n const { getScrubScene } = require('@wix/motion');\n const { Scroll } = require('fizban');\n const scrollInstance = {\n start: jest.fn(),\n destroy: jest.fn(),\n };\n Scroll.mockImplementation(() => scrollInstance);\n\n element = document.createElement(\n 'wix-interact-element',\n ) as IWixInteractElement;\n const div = document.createElement('div');\n element.append(div);\n\n add(element, '#logo-scroll');\n\n expect(getScrubScene).toHaveBeenCalledTimes(1);\n expect(getScrubScene).toHaveBeenCalledWith(\n expect.any(HTMLElement),\n expect.objectContaining(\n effectToAnimationOptions(\n mockConfig.effects['logo-fade-scroll'] as ScrubEffect,\n ),\n ),\n expect.objectContaining({\n trigger: 'view-progress',\n }),\n );\n setTimeout(() => {\n expect(scrollInstance.start).toHaveBeenCalled();\n }, 0);\n });\n });\n });\n\n describe('remove interaction', () => {\n beforeEach(() => {\n Interact.create(mockConfig);\n });\n\n it('should remove event listeners', () => {\n element = document.createElement(\n 'wix-interact-element',\n ) as IWixInteractElement;\n const div = document.createElement('div');\n element.append(div);\n\n const removeEventListenerSpy = jest.spyOn(div, 'removeEventListener');\n\n add(element, '#logo-click');\n remove('#logo-click');\n\n expect(removeEventListenerSpy).toHaveBeenCalledTimes(2);\n expect(removeEventListenerSpy).toHaveBeenCalledWith(\n 'click',\n expect.any(Function),\n );\n });\n\n it('should do nothing if key does not exist', () => {\n expect(() => remove('non-existent-key')).not.toThrow();\n });\n\n it('should cleanup pointer effects', () => {\n const { Pointer } = require('kuliso');\n const pointerInstance = {\n start: jest.fn(),\n destroy: jest.fn(),\n };\n Pointer.mockImplementation(() => pointerInstance);\n\n element = document.createElement(\n 'wix-interact-element',\n ) as IWixInteractElement;\n const div = document.createElement('div');\n element.append(div);\n\n add(element, '#logo-mouse');\n remove('#logo-mouse');\n\n expect(pointerInstance.destroy).toHaveBeenCalledTimes(1);\n });\n });\n\n describe('effect cascading logic', () => {\n describe('basic cascading behavior', () => {\n it('should apply only first matching effect for same target', () => {\n const { getWebAnimation } = require('@wix/motion');\n const config = createCascadingTestConfig({}, ['min-width: 1024px']);\n\n Interact.create(config);\n\n const sourceElement = document.createElement(\n 'wix-interact-element',\n ) as IWixInteractElement;\n const sourceDiv = document.createElement('div');\n sourceElement.append(sourceDiv);\n\n const targetElement = document.createElement(\n 'wix-interact-element',\n ) as IWixInteractElement;\n const targetDiv = document.createElement('div');\n targetElement.append(targetDiv);\n\n const addEventListenerSpy = jest.spyOn(sourceDiv, 'addEventListener');\n\n add(sourceElement, '#cascade-source');\n add(targetElement, '#cascade-target');\n\n expect(addEventListenerSpy).toHaveBeenCalledTimes(1);\n expect(addEventListenerSpy).toHaveBeenCalledWith(\n 'click',\n expect.any(Function),\n expect.objectContaining({\n passive: true,\n }),\n );\n\n // Should create animation with desktop effect (first matching condition)\n expect(getWebAnimation).toHaveBeenCalledTimes(1);\n expect(getWebAnimation).toHaveBeenCalledWith(\n targetElement.firstElementChild,\n expect.objectContaining({\n namedEffect: expect.objectContaining({\n type: 'SlideIn',\n direction: 'right',\n }),\n }),\n );\n });\n\n it('should apply default effect when no conditions match', () => {\n const { getWebAnimation } = require('@wix/motion');\n const config = createCascadingTestConfig({}, []); // No matching conditions\n\n Interact.create(config);\n\n const sourceElement = document.createElement(\n 'wix-interact-element',\n ) as IWixInteractElement;\n const sourceDiv = document.createElement('div');\n sourceElement.append(sourceDiv);\n\n const targetElement = document.createElement(\n 'wix-interact-element',\n ) as IWixInteractElement;\n const targetDiv = document.createElement('div');\n targetElement.append(targetDiv);\n\n add(sourceElement, '#cascade-source');\n add(targetElement, '#cascade-target');\n\n // Should create animation with default effect\n expect(getWebAnimation).toHaveBeenCalledTimes(1);\n expect(getWebAnimation).toHaveBeenCalledWith(\n targetElement.firstElementChild,\n expect.objectContaining({\n namedEffect: expect.objectContaining({\n type: 'FadeIn',\n power: 'medium',\n }),\n }),\n );\n });\n\n it('should apply mobile effect when mobile condition matches', () => {\n const { getWebAnimation } = require('@wix/motion');\n const config = createCascadingTestConfig({}, ['max-width: 767px']);\n\n Interact.create(config);\n\n const sourceElement = document.createElement(\n 'wix-interact-element',\n ) as IWixInteractElement;\n const sourceDiv = document.createElement('div');\n sourceElement.append(sourceDiv);\n\n const targetElement = document.createElement(\n 'wix-interact-element',\n ) as IWixInteractElement;\n const targetDiv = document.createElement('div');\n targetElement.append(targetDiv);\n\n add(sourceElement, '#cascade-source');\n add(targetElement, '#cascade-target');\n\n // Should create animation with mobile effect\n expect(getWebAnimation).toHaveBeenCalledTimes(1);\n expect(getWebAnimation).toHaveBeenCalledWith(\n targetElement.firstElementChild,\n expect.objectContaining({\n namedEffect: expect.objectContaining({\n type: 'BounceIn',\n direction: 'center',\n }),\n }),\n );\n });\n });\n\n describe('element addition order', () => {\n it('should work when source is added before target', () => {\n const { getWebAnimation } = require('@wix/motion');\n const config = createCascadingTestConfig({}, ['min-width: 1024px']);\n\n Interact.create(config);\n\n const sourceElement = document.createElement(\n 'wix-interact-element',\n ) as IWixInteractElement;\n const sourceDiv = document.createElement('div');\n sourceElement.append(sourceDiv);\n\n const targetElement = document.createElement(\n 'wix-interact-element',\n ) as IWixInteractElement;\n const targetDiv = document.createElement('div');\n targetElement.append(targetDiv);\n\n // Add source first\n add(sourceElement, '#cascade-source');\n // Add target second\n add(targetElement, '#cascade-target');\n\n expect(getWebAnimation).toHaveBeenCalledTimes(1);\n expect(getWebAnimation).toHaveBeenCalledWith(\n targetElement.firstElementChild,\n expect.objectContaining({\n namedEffect: expect.objectContaining({\n type: 'SlideIn',\n }),\n }),\n );\n });\n\n it('should work when target is added before source', () => {\n const { getWebAnimation } = require('@wix/motion');\n const config = createCascadingTestConfig({}, ['min-width: 1024px']);\n\n Interact.create(config);\n\n const sourceElement = document.createElement(\n 'wix-interact-element',\n ) as IWixInteractElement;\n const sourceDiv = document.createElement('div');\n sourceElement.append(sourceDiv);\n\n const targetElement = document.createElement(\n 'wix-interact-element',\n ) as IWixInteractElement;\n const targetDiv = document.createElement('div');\n targetElement.append(targetDiv);\n\n // Add target first\n add(targetElement, '#cascade-target');\n // Add source second\n add(sourceElement, '#cascade-source');\n\n expect(getWebAnimation).toHaveBeenCalledTimes(1);\n expect(getWebAnimation).toHaveBeenCalledWith(\n targetElement.firstElementChild,\n expect.objectContaining({\n namedEffect: expect.objectContaining({\n type: 'SlideIn',\n }),\n }),\n );\n });\n });\n\n describe('complex cascading scenarios', () => {\n it('should handle multiple targets with different conditions', () => {\n const { getWebAnimation } = require('@wix/motion');\n\n const complexConfig: InteractConfig = {\n conditions: {\n desktop: {\n type: 'media',\n predicate: 'min-width: 1024px',\n },\n mobile: {\n type: 'media',\n predicate: 'max-width: 767px',\n },\n },\n interactions: [\n {\n trigger: 'click',\n source: '#multi-source-1',\n effects: [\n {\n target: '#cascade-target-1',\n effectId: 'desktop-effect',\n conditions: ['desktop'],\n },\n {\n target: '#cascade-target-2',\n effectId: 'mobile-effect',\n conditions: ['mobile'],\n },\n ],\n },\n ],\n effects: {\n 'desktop-effect': {\n namedEffect: {\n type: 'SlideIn',\n direction: 'right',\n power: 'medium',\n } as NamedEffect,\n duration: 800,\n },\n 'mobile-effect': {\n namedEffect: {\n type: 'BounceIn',\n direction: 'center',\n power: 'hard',\n } as NamedEffect,\n duration: 600,\n },\n },\n };\n\n mockMatchMedia(['min-width: 1024px']); // Only desktop matches\n Interact.create(complexConfig);\n\n const sourceElement = document.createElement(\n 'wix-interact-element',\n ) as IWixInteractElement;\n const sourceDiv = document.createElement('div');\n sourceElement.append(sourceDiv);\n\n const target1Element = document.createElement(\n 'wix-interact-element',\n ) as IWixInteractElement;\n const target1Div = document.createElement('div');\n target1Element.append(target1Div);\n\n const target2Element = document.createElement(\n 'wix-interact-element',\n ) as IWixInteractElement;\n const target2Div = document.createElement('div');\n target2Element.append(target2Div);\n\n add(sourceElement, '#multi-source-1');\n add(target1Element, '#cascade-target-1');\n add(target2Element, '#cascade-target-2');\n\n // Only desktop effect should be applied (mobile condition doesn't match)\n expect(getWebAnimation).toHaveBeenCalledTimes(1);\n expect(getWebAnimation).toHaveBeenCalledWith(\n target1Element.firstElementChild,\n expect.objectContaining({\n namedEffect: expect.objectContaining({\n type: 'SlideIn',\n }),\n }),\n );\n\n // Should not be called for mobile effect since condition doesn't match\n expect(getWebAnimation).not.toHaveBeenCalledWith(\n target2Element.firstElementChild,\n expect.objectContaining({\n namedEffect: expect.objectContaining({\n type: 'BounceIn',\n }),\n }),\n );\n });\n\n it('should handle effects with multiple conditions', () => {\n const { getWebAnimation } = require('@wix/motion');\n\n const multiConditionConfig: InteractConfig = {\n conditions: {\n desktop: {\n type: 'media',\n predicate: 'min-width: 1024px',\n },\n 'high-res': {\n type: 'media',\n predicate: 'min-resolution: 2dppx',\n },\n },\n interactions: [\n {\n trigger: 'click',\n source: '#cascade-source',\n effects: [\n {\n target: '#cascade-target',\n effectId: 'premium-effect',\n },\n {\n target: '#cascade-target',\n effectId: 'premium-effect',\n conditions: ['desktop', 'high-res'],\n },\n ],\n },\n ],\n effects: {\n 'premium-effect': {\n namedEffect: {\n type: 'Poke',\n direction: 'left',\n power: 'hard',\n } as NamedEffect,\n duration: 1000,\n },\n },\n };\n\n // Both conditions match\n mockMatchMedia(['min-width: 1024px', 'min-resolution: 2dppx']);\n Interact.create(multiConditionConfig);\n\n const sourceElement = document.createElement(\n 'wix-interact-element',\n ) as IWixInteractElement;\n const sourceDiv = document.createElement('div');\n sourceElement.append(sourceDiv);\n\n const targetElement = document.createElement(\n 'wix-interact-element',\n ) as IWixInteractElement;\n const targetDiv = document.createElement('div');\n targetElement.append(targetDiv);\n\n add(sourceElement, '#cascade-source');\n add(targetElement, '#cascade-target');\n\n // Premium effect should be applied since both conditions match\n expect(getWebAnimation).toHaveBeenCalledTimes(1);\n expect(getWebAnimation).toHaveBeenCalledWith(\n targetElement.firstElementChild,\n expect.objectContaining({\n namedEffect: expect.objectContaining({\n type: 'Poke',\n }),\n }),\n );\n });\n });\n\n describe('condition matching edge cases', () => {\n it('should handle missing conditions gracefully', () => {\n const { getWebAnimation } = require('@wix/motion');\n\n const configWithMissingCondition: InteractConfig = {\n conditions: {\n desktop: {\n type: 'media',\n predicate: 'min-width: 1024px',\n },\n },\n interactions: [\n {\n trigger: 'click',\n source: '#cascade-source',\n effects: [\n {\n target: '#cascade-target',\n effectId: 'default-effect',\n },\n {\n target: '#cascade-target',\n effectId: 'default-effect',\n conditions: ['nonexistent-condition'],\n },\n ],\n },\n ],\n effects: {\n 'default-effect': {\n namedEffect: {\n type: 'FadeIn',\n power: 'medium',\n } as NamedEffect,\n duration: 500,\n },\n },\n };\n\n mockMatchMedia(['min-width: 1024px']);\n Interact.create(configWithMissingCondition);\n\n const sourceElement = document.createElement(\n 'wix-interact-element',\n ) as IWixInteractElement;\n const sourceDiv = document.createElement('div');\n sourceElement.append(sourceDiv);\n\n const targetElement = document.createElement(\n 'wix-interact-element',\n ) as IWixInteractElement;\n const targetDiv = document.createElement('div');\n targetElement.append(targetDiv);\n\n add(sourceElement, '#cascade-source');\n add(targetElement, '#cascade-target');\n\n // Should fall back to default effect since condition doesn't exist\n expect(getWebAnimation).toHaveBeenCalledTimes(1);\n expect(getWebAnimation).toHaveBeenCalledWith(\n targetElement.firstElementChild,\n expect.objectContaining({\n namedEffect: expect.objectContaining({\n type: 'FadeIn',\n }),\n }),\n );\n });\n\n it('should handle empty conditions array', () => {\n const { getWebAnimation } = require('@wix/motion');\n\n const configWithEmptyConditions: InteractConfig = {\n conditions: {},\n interactions: [\n {\n trigger: 'click',\n source: '#cascade-source',\n effects: [\n {\n target: '#cascade-target',\n effectId: 'always-applied-effect',\n conditions: [],\n },\n ],\n },\n ],\n effects: {\n 'always-applied-effect': {\n namedEffect: {\n type: 'Spin',\n direction: 'clockwise',\n power: 'medium',\n } as NamedEffect,\n duration: 1000,\n },\n },\n };\n\n mockMatchMedia([]);\n Interact.create(configWithEmptyConditions);\n\n const sourceElement = document.createElement(\n 'wix-interact-element',\n ) as IWixInteractElement;\n const sourceDiv = document.createElement('div');\n sourceElement.append(sourceDiv);\n\n const targetElement = document.createElement(\n 'wix-interact-element',\n ) as IWixInteractElement;\n const targetDiv = document.createElement('div');\n targetElement.append(targetDiv);\n\n add(sourceElement, '#cascade-source');\n add(targetElement, '#cascade-target');\n\n // Effect should be applied since empty conditions array should always match\n expect(getWebAnimation).toHaveBeenCalledTimes(1);\n expect(getWebAnimation).toHaveBeenCalledWith(\n expect.any(HTMLElement),\n expect.objectContaining({\n namedEffect: expect.objectContaining({\n type: 'Spin',\n }),\n }),\n );\n });\n });\n });\n});\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ /// <reference types="@wix/yoshi-flow-library/types" />
2
+ //# sourceMappingURL=external-types.d.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sources":["../../src/external-types.d.ts"],"sourcesContent":["/// <reference types=\"@wix/yoshi-flow-library/types\" />\n"],"mappings":"AAAA","ignoreList":[]}
@@ -0,0 +1,29 @@
1
+ import { getWebAnimation } from '@wix/motion';
2
+ import { effectToAnimationOptions, addHandlerToMap, removeElementFromHandlerMap } from './utilities';
3
+ const handlerMap = new WeakMap();
4
+ function addAnimationEndHandler(source, target, effect, __) {
5
+ const animation = getWebAnimation(target, effectToAnimationOptions(effect));
6
+ const handler = () => {
7
+ animation.play();
8
+ };
9
+ const cleanup = () => {
10
+ animation.cancel();
11
+ source.removeEventListener('animationend', handler);
12
+ };
13
+ const handlerObj = {
14
+ source,
15
+ target,
16
+ cleanup
17
+ };
18
+ addHandlerToMap(handlerMap, source, handlerObj);
19
+ addHandlerToMap(handlerMap, target, handlerObj);
20
+ source.addEventListener('animationend', handler);
21
+ }
22
+ function removeAnimationEndHandler(element) {
23
+ removeElementFromHandlerMap(handlerMap, element);
24
+ }
25
+ export default {
26
+ add: addAnimationEndHandler,
27
+ remove: removeAnimationEndHandler
28
+ };
29
+ //# sourceMappingURL=animationEnd.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["getWebAnimation","effectToAnimationOptions","addHandlerToMap","removeElementFromHandlerMap","handlerMap","WeakMap","addAnimationEndHandler","source","target","effect","__","animation","handler","play","cleanup","cancel","removeEventListener","handlerObj","addEventListener","removeAnimationEndHandler","element","add","remove"],"sources":["../../../src/handlers/animationEnd.ts"],"sourcesContent":["import type { AnimationGroup } from '@wix/motion';\nimport { getWebAnimation } from '@wix/motion';\nimport type {\n AnimationEndParams,\n TimeEffect,\n HandlerObjectMap,\n} from '../types';\nimport {\n effectToAnimationOptions,\n addHandlerToMap,\n removeElementFromHandlerMap,\n} from './utilities';\n\nconst handlerMap = new WeakMap() as HandlerObjectMap;\n\nfunction addAnimationEndHandler(\n source: HTMLElement,\n target: HTMLElement,\n effect: TimeEffect,\n __: AnimationEndParams,\n): void {\n const animation = getWebAnimation(\n target,\n effectToAnimationOptions(effect),\n ) as AnimationGroup;\n\n const handler = () => {\n animation.play();\n };\n const cleanup = () => {\n animation.cancel();\n source.removeEventListener('animationend', handler);\n };\n\n const handlerObj = { source, target, cleanup };\n addHandlerToMap(handlerMap, source, handlerObj);\n addHandlerToMap(handlerMap, target, handlerObj);\n\n source.addEventListener('animationend', handler);\n}\n\nfunction removeAnimationEndHandler(element: HTMLElement): void {\n removeElementFromHandlerMap(handlerMap, element);\n}\n\nexport default {\n add: addAnimationEndHandler,\n remove: removeAnimationEndHandler,\n};\n"],"mappings":"AACA,SAASA,eAAe,QAAQ,aAAa;AAM7C,SACEC,wBAAwB,EACxBC,eAAe,EACfC,2BAA2B,QACtB,aAAa;AAEpB,MAAMC,UAAU,GAAG,IAAIC,OAAO,CAAC,CAAqB;AAEpD,SAASC,sBAAsBA,CAC7BC,MAAmB,EACnBC,MAAmB,EACnBC,MAAkB,EAClBC,EAAsB,EAChB;EACN,MAAMC,SAAS,GAAGX,eAAe,CAC/BQ,MAAM,EACNP,wBAAwB,CAACQ,MAAM,CACjC,CAAmB;EAEnB,MAAMG,OAAO,GAAGA,CAAA,KAAM;IACpBD,SAAS,CAACE,IAAI,CAAC,CAAC;EAClB,CAAC;EACD,MAAMC,OAAO,GAAGA,CAAA,KAAM;IACpBH,SAAS,CAACI,MAAM,CAAC,CAAC;IAClBR,MAAM,CAACS,mBAAmB,CAAC,cAAc,EAAEJ,OAAO,CAAC;EACrD,CAAC;EAED,MAAMK,UAAU,GAAG;IAAEV,MAAM;IAAEC,MAAM;IAAEM;EAAQ,CAAC;EAC9CZ,eAAe,CAACE,UAAU,EAAEG,MAAM,EAAEU,UAAU,CAAC;EAC/Cf,eAAe,CAACE,UAAU,EAAEI,MAAM,EAAES,UAAU,CAAC;EAE/CV,MAAM,CAACW,gBAAgB,CAAC,cAAc,EAAEN,OAAO,CAAC;AAClD;AAEA,SAASO,yBAAyBA,CAACC,OAAoB,EAAQ;EAC7DjB,2BAA2B,CAACC,UAAU,EAAEgB,OAAO,CAAC;AAClD;AAEA,eAAe;EACbC,GAAG,EAAEf,sBAAsB;EAC3BgB,MAAM,EAAEH;AACV,CAAC","ignoreList":[]}
@@ -0,0 +1,82 @@
1
+ import { getWebAnimation } from '@wix/motion';
2
+ import { effectToAnimationOptions, addHandlerToMap, removeElementFromHandlerMap } from './utilities';
3
+ const handlerMap = new WeakMap();
4
+ function createTimeEffectHandler(element, effect, options) {
5
+ const animation = getWebAnimation(element, effectToAnimationOptions(effect));
6
+ let initialPlay = true;
7
+ const type = options.type || 'alternate';
8
+ return __ => {
9
+ if (type === 'alternate') {
10
+ if (initialPlay) {
11
+ initialPlay = false;
12
+ animation.play();
13
+ } else {
14
+ animation.reverse();
15
+ }
16
+ } else if (type === 'state') {
17
+ if (initialPlay) {
18
+ initialPlay = false;
19
+ animation.play();
20
+ } else {
21
+ if (animation.playState === 'running') {
22
+ animation.pause();
23
+ } else if (animation.playState !== 'finished') {
24
+ // 'idle' OR 'paused'
25
+ animation.play();
26
+ }
27
+ }
28
+ } else {
29
+ // type === 'repeat'
30
+ // type === 'once'
31
+ animation.progress(0);
32
+ animation.play();
33
+ }
34
+ };
35
+ }
36
+ function createTransitionHandler(element, _ref, options) {
37
+ let {
38
+ effectId
39
+ } = _ref;
40
+ return __ => {
41
+ const wixInteractElement = element.parentElement;
42
+ if (!wixInteractElement) {
43
+ return;
44
+ }
45
+ wixInteractElement.toggleEffect(effectId, options.method || 'toggle');
46
+ };
47
+ }
48
+ function addClickHandler(source, target, effect, options) {
49
+ if (options === void 0) {
50
+ options = {};
51
+ }
52
+ let handler;
53
+ let once = false;
54
+ if (effect.transition || effect.transitionProperties) {
55
+ handler = createTransitionHandler(target, effect, options);
56
+ } else {
57
+ handler = createTimeEffectHandler(target, effect, options);
58
+ once = options.type === 'once';
59
+ }
60
+ const cleanup = () => {
61
+ source.removeEventListener('click', handler);
62
+ };
63
+ const handlerObj = {
64
+ source,
65
+ target,
66
+ cleanup
67
+ };
68
+ addHandlerToMap(handlerMap, source, handlerObj);
69
+ addHandlerToMap(handlerMap, target, handlerObj);
70
+ source.addEventListener('click', handler, {
71
+ passive: true,
72
+ once
73
+ });
74
+ }
75
+ function removeClickHandler(element) {
76
+ removeElementFromHandlerMap(handlerMap, element);
77
+ }
78
+ export default {
79
+ add: addClickHandler,
80
+ remove: removeClickHandler
81
+ };
82
+ //# sourceMappingURL=click.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["getWebAnimation","effectToAnimationOptions","addHandlerToMap","removeElementFromHandlerMap","handlerMap","WeakMap","createTimeEffectHandler","element","effect","options","animation","initialPlay","type","__","play","reverse","playState","pause","progress","createTransitionHandler","_ref","effectId","wixInteractElement","parentElement","toggleEffect","method","addClickHandler","source","target","handler","once","transition","transitionProperties","cleanup","removeEventListener","handlerObj","addEventListener","passive","removeClickHandler","add","remove"],"sources":["../../../src/handlers/click.ts"],"sourcesContent":["import { getWebAnimation } from '@wix/motion';\nimport type { AnimationGroup } from '@wix/motion';\nimport type {\n TimeEffect,\n TransitionEffect,\n StateParams,\n HandlerObjectMap,\n IWixInteractElement,\n PointerTriggerParams,\n} from '../types';\nimport {\n effectToAnimationOptions,\n addHandlerToMap,\n removeElementFromHandlerMap,\n} from './utilities';\n\nconst handlerMap = new WeakMap() as HandlerObjectMap;\n\nfunction createTimeEffectHandler(\n element: HTMLElement,\n effect: TimeEffect,\n options: PointerTriggerParams,\n) {\n const animation = getWebAnimation(\n element,\n effectToAnimationOptions(effect),\n ) as AnimationGroup;\n let initialPlay = true;\n const type = options.type || 'alternate';\n\n return (__: MouseEvent) => {\n if (type === 'alternate') {\n if (initialPlay) {\n initialPlay = false;\n animation.play();\n } else {\n animation.reverse();\n }\n } else if (type === 'state') {\n if (initialPlay) {\n initialPlay = false;\n animation.play();\n } else {\n if (animation.playState === 'running') {\n animation.pause();\n } else if (animation.playState !== 'finished') {\n // 'idle' OR 'paused'\n animation.play();\n }\n }\n } else {\n // type === 'repeat'\n // type === 'once'\n animation.progress(0);\n animation.play();\n }\n };\n}\n\nfunction createTransitionHandler(\n element: HTMLElement,\n { effectId }: TransitionEffect & { effectId: string },\n options: StateParams,\n) {\n return (__: MouseEvent) => {\n const wixInteractElement = element.parentElement as IWixInteractElement;\n if (!wixInteractElement) {\n return;\n }\n\n wixInteractElement.toggleEffect(effectId, options.method || 'toggle');\n };\n}\n\nfunction addClickHandler(\n source: HTMLElement,\n target: HTMLElement,\n effect: TimeEffect | TransitionEffect,\n options: StateParams | PointerTriggerParams = {} as StateParams,\n) {\n let handler: (event: MouseEvent) => void;\n let once = false;\n\n if (\n (effect as TransitionEffect).transition ||\n (effect as TransitionEffect).transitionProperties\n ) {\n handler = createTransitionHandler(\n target,\n effect as TransitionEffect & { effectId: string },\n options as StateParams,\n );\n } else {\n handler = createTimeEffectHandler(\n target,\n effect as TimeEffect,\n options as PointerTriggerParams,\n );\n once = (options as PointerTriggerParams).type === 'once';\n }\n\n const cleanup = () => {\n source.removeEventListener('click', handler);\n };\n\n const handlerObj = { source, target, cleanup };\n\n addHandlerToMap(handlerMap, source, handlerObj);\n addHandlerToMap(handlerMap, target, handlerObj);\n\n source.addEventListener('click', handler, { passive: true, once });\n}\n\nfunction removeClickHandler(element: HTMLElement) {\n removeElementFromHandlerMap(handlerMap, element);\n}\n\nexport default {\n add: addClickHandler,\n remove: removeClickHandler,\n};\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,103 @@
1
+ import { getWebAnimation } from '@wix/motion';
2
+ import { effectToAnimationOptions, addHandlerToMap, removeElementFromHandlerMap } from './utilities';
3
+ const handlerMap = new WeakMap();
4
+ function createTimeEffectHandler(element, effect, options) {
5
+ const animation = getWebAnimation(element, effectToAnimationOptions(effect));
6
+ const type = options.type || 'alternate';
7
+ let initialPlay = true;
8
+ return event => {
9
+ if (event.type === 'mouseenter') {
10
+ if (type === 'alternate') {
11
+ if (initialPlay) {
12
+ initialPlay = false;
13
+ animation.play();
14
+ } else {
15
+ animation.reverse();
16
+ }
17
+ } else if (type === 'state') {
18
+ if (animation.playState !== 'finished') {
19
+ // 'idle' OR 'paused'
20
+ animation.play();
21
+ }
22
+ } else {
23
+ // type === 'repeat'
24
+ // type === 'once'
25
+ animation.progress(0);
26
+ animation.play();
27
+ }
28
+ } else if (event.type === 'mouseleave') {
29
+ if (type === 'alternate') {
30
+ animation.reverse();
31
+ } else if (type === 'repeat') {
32
+ animation.cancel();
33
+ } else if (type === 'state') {
34
+ if (animation.playState === 'running') {
35
+ animation.pause();
36
+ }
37
+ }
38
+ }
39
+ };
40
+ }
41
+ function createTransitionHandler(element, _ref, options) {
42
+ let {
43
+ effectId
44
+ } = _ref;
45
+ const method = options.method || 'toggle';
46
+ const isToggle = method === 'toggle';
47
+ return event => {
48
+ const wixInteractElement = element.parentElement;
49
+ if (!wixInteractElement) {
50
+ return;
51
+ }
52
+ if (event.type === 'mouseenter') {
53
+ const method_ = isToggle ? 'add' : method;
54
+ wixInteractElement.toggleEffect(effectId, method_);
55
+ } else if (event.type === 'mouseleave' && isToggle) {
56
+ wixInteractElement.toggleEffect(effectId, 'remove');
57
+ }
58
+ };
59
+ }
60
+ function addHoverHandler(source, target, effect, options) {
61
+ if (options === void 0) {
62
+ options = {};
63
+ }
64
+ let handler;
65
+ let isStateTrigger = false;
66
+ let once = false;
67
+ if (effect.transition || effect.transitionProperties) {
68
+ handler = createTransitionHandler(target, effect, options);
69
+ isStateTrigger = true;
70
+ } else {
71
+ handler = createTimeEffectHandler(target, effect, options);
72
+ once = options.type === 'once';
73
+ }
74
+ const cleanup = () => {
75
+ source.removeEventListener('mouseenter', handler);
76
+ source.removeEventListener('mouseleave', handler);
77
+ };
78
+ const handlerObj = {
79
+ source,
80
+ target,
81
+ cleanup
82
+ };
83
+ addHandlerToMap(handlerMap, source, handlerObj);
84
+ addHandlerToMap(handlerMap, target, handlerObj);
85
+ source.addEventListener('mouseenter', handler, {
86
+ passive: true,
87
+ once
88
+ });
89
+ const addLeave = isStateTrigger ? (options.method || 'toggle') === 'toggle' : options.type !== 'once';
90
+ if (addLeave) {
91
+ source.addEventListener('mouseleave', handler, {
92
+ passive: true
93
+ });
94
+ }
95
+ }
96
+ function removeHoverHandler(element) {
97
+ removeElementFromHandlerMap(handlerMap, element);
98
+ }
99
+ export default {
100
+ add: addHoverHandler,
101
+ remove: removeHoverHandler
102
+ };
103
+ //# sourceMappingURL=hover.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["getWebAnimation","effectToAnimationOptions","addHandlerToMap","removeElementFromHandlerMap","handlerMap","WeakMap","createTimeEffectHandler","element","effect","options","animation","type","initialPlay","event","play","reverse","playState","progress","cancel","pause","createTransitionHandler","_ref","effectId","method","isToggle","wixInteractElement","parentElement","method_","toggleEffect","addHoverHandler","source","target","handler","isStateTrigger","once","transition","transitionProperties","cleanup","removeEventListener","handlerObj","addEventListener","passive","addLeave","removeHoverHandler","add","remove"],"sources":["../../../src/handlers/hover.ts"],"sourcesContent":["import type { AnimationGroup } from '@wix/motion';\nimport { getWebAnimation } from '@wix/motion';\nimport type {\n TimeEffect,\n TransitionEffect,\n StateParams,\n HandlerObjectMap,\n IWixInteractElement,\n PointerTriggerParams,\n} from '../types';\nimport {\n effectToAnimationOptions,\n addHandlerToMap,\n removeElementFromHandlerMap,\n} from './utilities';\n\nconst handlerMap = new WeakMap() as HandlerObjectMap;\n\nfunction createTimeEffectHandler(\n element: HTMLElement,\n effect: TimeEffect,\n options: PointerTriggerParams,\n) {\n const animation = getWebAnimation(\n element,\n effectToAnimationOptions(effect),\n ) as AnimationGroup;\n const type = options.type || 'alternate';\n let initialPlay = true;\n\n return (event: MouseEvent) => {\n if (event.type === 'mouseenter') {\n if (type === 'alternate') {\n if (initialPlay) {\n initialPlay = false;\n animation.play();\n } else {\n animation.reverse();\n }\n } else if (type === 'state') {\n if (animation.playState !== 'finished') {\n // 'idle' OR 'paused'\n animation.play();\n }\n } else {\n // type === 'repeat'\n // type === 'once'\n animation.progress(0);\n animation.play();\n }\n } else if (event.type === 'mouseleave') {\n if (type === 'alternate') {\n animation.reverse();\n } else if (type === 'repeat') {\n animation.cancel();\n } else if (type === 'state') {\n if (animation.playState === 'running') {\n animation.pause();\n }\n }\n }\n };\n}\n\nfunction createTransitionHandler(\n element: HTMLElement,\n { effectId }: TransitionEffect & { effectId: string },\n options: StateParams,\n) {\n const method = options.method || 'toggle';\n const isToggle = method === 'toggle';\n\n return (event: MouseEvent) => {\n const wixInteractElement = element.parentElement as IWixInteractElement;\n if (!wixInteractElement) {\n return;\n }\n\n if (event.type === 'mouseenter') {\n const method_ = isToggle ? 'add' : method;\n wixInteractElement.toggleEffect(effectId, method_);\n } else if (event.type === 'mouseleave' && isToggle) {\n wixInteractElement.toggleEffect(effectId, 'remove');\n }\n };\n}\n\nfunction addHoverHandler(\n source: HTMLElement,\n target: HTMLElement,\n effect: TransitionEffect | TimeEffect,\n options: StateParams | PointerTriggerParams = {},\n) {\n let handler: (event: MouseEvent) => void;\n let isStateTrigger = false;\n let once = false;\n\n if (\n (effect as TransitionEffect).transition ||\n (effect as TransitionEffect).transitionProperties\n ) {\n handler = createTransitionHandler(\n target,\n effect as TransitionEffect & { effectId: string },\n options as StateParams,\n );\n isStateTrigger = true;\n } else {\n handler = createTimeEffectHandler(\n target,\n effect as TimeEffect,\n options as PointerTriggerParams,\n );\n once = (options as PointerTriggerParams).type === 'once';\n }\n\n const cleanup = () => {\n source.removeEventListener('mouseenter', handler);\n source.removeEventListener('mouseleave', handler);\n };\n\n const handlerObj = { source, target, cleanup };\n\n addHandlerToMap(handlerMap, source, handlerObj);\n addHandlerToMap(handlerMap, target, handlerObj);\n\n source.addEventListener('mouseenter', handler, { passive: true, once });\n\n const addLeave = isStateTrigger\n ? ((options as StateParams).method || 'toggle') === 'toggle'\n : (options as PointerTriggerParams).type !== 'once';\n if (addLeave) {\n source.addEventListener('mouseleave', handler, { passive: true });\n }\n}\n\nfunction removeHoverHandler(element: HTMLElement) {\n removeElementFromHandlerMap(handlerMap, element);\n}\n\nexport default {\n add: addHoverHandler,\n remove: removeHoverHandler,\n};\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,16 @@
1
+ import viewEnterHandler from './viewEnter';
2
+ import viewProgressHandler from './viewProgress';
3
+ import hoverHandler from './hover';
4
+ import clickHandler from './click';
5
+ import pointerMoveHandler from './pointerMove';
6
+ import animationEndHandler from './animationEnd';
7
+ export default {
8
+ viewEnter: viewEnterHandler,
9
+ hover: hoverHandler,
10
+ click: clickHandler,
11
+ pageVisible: viewEnterHandler,
12
+ animationEnd: animationEndHandler,
13
+ viewProgress: viewProgressHandler,
14
+ pointerMove: pointerMoveHandler
15
+ };
16
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["viewEnterHandler","viewProgressHandler","hoverHandler","clickHandler","pointerMoveHandler","animationEndHandler","viewEnter","hover","click","pageVisible","animationEnd","viewProgress","pointerMove"],"sources":["../../../src/handlers/index.ts"],"sourcesContent":["import type { TriggerHandlerMap, TriggerType } from '../types';\nimport viewEnterHandler from './viewEnter';\nimport viewProgressHandler from './viewProgress';\nimport hoverHandler from './hover';\nimport clickHandler from './click';\nimport pointerMoveHandler from './pointerMove';\nimport animationEndHandler from './animationEnd';\n\nexport default {\n viewEnter: viewEnterHandler,\n hover: hoverHandler,\n click: clickHandler,\n pageVisible: viewEnterHandler,\n animationEnd: animationEndHandler,\n viewProgress: viewProgressHandler,\n pointerMove: pointerMoveHandler,\n} as TriggerHandlerMap<TriggerType>;\n"],"mappings":"AACA,OAAOA,gBAAgB,MAAM,aAAa;AAC1C,OAAOC,mBAAmB,MAAM,gBAAgB;AAChD,OAAOC,YAAY,MAAM,SAAS;AAClC,OAAOC,YAAY,MAAM,SAAS;AAClC,OAAOC,kBAAkB,MAAM,eAAe;AAC9C,OAAOC,mBAAmB,MAAM,gBAAgB;AAEhD,eAAe;EACbC,SAAS,EAAEN,gBAAgB;EAC3BO,KAAK,EAAEL,YAAY;EACnBM,KAAK,EAAEL,YAAY;EACnBM,WAAW,EAAET,gBAAgB;EAC7BU,YAAY,EAAEL,mBAAmB;EACjCM,YAAY,EAAEV,mBAAmB;EACjCW,WAAW,EAAER;AACf,CAAC","ignoreList":[]}
@@ -0,0 +1,39 @@
1
+ import { getScrubScene } from '@wix/motion';
2
+ import { Pointer } from 'kuliso';
3
+ import { effectToAnimationOptions, addHandlerToMap, removeElementFromHandlerMap } from './utilities';
4
+ const pointerManagerMap = new WeakMap();
5
+ function addPointerMoveHandler(source, target, effect, options) {
6
+ if (options === void 0) {
7
+ options = {};
8
+ }
9
+ const triggerParams = {
10
+ trigger: 'pointer-move',
11
+ element: source
12
+ };
13
+ const scene = getScrubScene(target, effectToAnimationOptions(effect), triggerParams);
14
+ if (scene) {
15
+ const pointer = new Pointer({
16
+ root: options.hitArea === 'root' ? document.documentElement : source,
17
+ scenes: Array.isArray(scene) ? scene : [scene]
18
+ });
19
+ const cleanup = () => {
20
+ pointer.destroy();
21
+ };
22
+ const handlerObj = {
23
+ source,
24
+ target,
25
+ cleanup
26
+ };
27
+ addHandlerToMap(pointerManagerMap, source, handlerObj);
28
+ addHandlerToMap(pointerManagerMap, target, handlerObj);
29
+ pointer.start();
30
+ }
31
+ }
32
+ function removePointerMoveHandler(element) {
33
+ removeElementFromHandlerMap(pointerManagerMap, element);
34
+ }
35
+ export default {
36
+ add: addPointerMoveHandler,
37
+ remove: removePointerMoveHandler
38
+ };
39
+ //# sourceMappingURL=pointerMove.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["getScrubScene","Pointer","effectToAnimationOptions","addHandlerToMap","removeElementFromHandlerMap","pointerManagerMap","WeakMap","addPointerMoveHandler","source","target","effect","options","triggerParams","trigger","element","scene","pointer","root","hitArea","document","documentElement","scenes","Array","isArray","cleanup","destroy","handlerObj","start","removePointerMoveHandler","add","remove"],"sources":["../../../src/handlers/pointerMove.ts"],"sourcesContent":["import { getScrubScene } from '@wix/motion';\nimport { Pointer } from 'kuliso';\nimport type {\n PointerMoveParams,\n ScrubEffect,\n HandlerObjectMap,\n} from '../types';\nimport {\n effectToAnimationOptions,\n addHandlerToMap,\n removeElementFromHandlerMap,\n} from './utilities';\n\nconst pointerManagerMap = new WeakMap() as HandlerObjectMap;\n\nfunction addPointerMoveHandler(\n source: HTMLElement,\n target: HTMLElement,\n effect: ScrubEffect,\n options: PointerMoveParams = {},\n) {\n const triggerParams = {\n trigger: 'pointer-move' as const,\n element: source,\n };\n\n const scene = getScrubScene(\n target,\n effectToAnimationOptions(effect),\n triggerParams,\n );\n\n if (scene) {\n const pointer = new Pointer({\n root: options.hitArea === 'root' ? document.documentElement : source,\n scenes: Array.isArray(scene) ? scene : [scene],\n });\n const cleanup = () => {\n pointer.destroy();\n };\n\n const handlerObj = { source, target, cleanup };\n\n addHandlerToMap(pointerManagerMap, source, handlerObj);\n addHandlerToMap(pointerManagerMap, target, handlerObj);\n\n pointer.start();\n }\n}\n\nfunction removePointerMoveHandler(element: HTMLElement) {\n removeElementFromHandlerMap(pointerManagerMap, element);\n}\n\nexport default {\n add: addPointerMoveHandler,\n remove: removePointerMoveHandler,\n};\n"],"mappings":"AAAA,SAASA,aAAa,QAAQ,aAAa;AAC3C,SAASC,OAAO,QAAQ,QAAQ;AAMhC,SACEC,wBAAwB,EACxBC,eAAe,EACfC,2BAA2B,QACtB,aAAa;AAEpB,MAAMC,iBAAiB,GAAG,IAAIC,OAAO,CAAC,CAAqB;AAE3D,SAASC,qBAAqBA,CAC5BC,MAAmB,EACnBC,MAAmB,EACnBC,MAAmB,EACnBC,OAA0B,EAC1B;EAAA,IADAA,OAA0B;IAA1BA,OAA0B,GAAG,CAAC,CAAC;EAAA;EAE/B,MAAMC,aAAa,GAAG;IACpBC,OAAO,EAAE,cAAuB;IAChCC,OAAO,EAAEN;EACX,CAAC;EAED,MAAMO,KAAK,GAAGf,aAAa,CACzBS,MAAM,EACNP,wBAAwB,CAACQ,MAAM,CAAC,EAChCE,aACF,CAAC;EAED,IAAIG,KAAK,EAAE;IACT,MAAMC,OAAO,GAAG,IAAIf,OAAO,CAAC;MAC1BgB,IAAI,EAAEN,OAAO,CAACO,OAAO,KAAK,MAAM,GAAGC,QAAQ,CAACC,eAAe,GAAGZ,MAAM;MACpEa,MAAM,EAAEC,KAAK,CAACC,OAAO,CAACR,KAAK,CAAC,GAAGA,KAAK,GAAG,CAACA,KAAK;IAC/C,CAAC,CAAC;IACF,MAAMS,OAAO,GAAGA,CAAA,KAAM;MACpBR,OAAO,CAACS,OAAO,CAAC,CAAC;IACnB,CAAC;IAED,MAAMC,UAAU,GAAG;MAAElB,MAAM;MAAEC,MAAM;MAAEe;IAAQ,CAAC;IAE9CrB,eAAe,CAACE,iBAAiB,EAAEG,MAAM,EAAEkB,UAAU,CAAC;IACtDvB,eAAe,CAACE,iBAAiB,EAAEI,MAAM,EAAEiB,UAAU,CAAC;IAEtDV,OAAO,CAACW,KAAK,CAAC,CAAC;EACjB;AACF;AAEA,SAASC,wBAAwBA,CAACd,OAAoB,EAAE;EACtDV,2BAA2B,CAACC,iBAAiB,EAAES,OAAO,CAAC;AACzD;AAEA,eAAe;EACbe,GAAG,EAAEtB,qBAAqB;EAC1BuB,MAAM,EAAEF;AACV,CAAC","ignoreList":[]}
@@ -0,0 +1,45 @@
1
+ export function effectToAnimationOptions(effect) {
2
+ if (effect.duration) {
3
+ return {
4
+ type: 'TimeAnimationOptions',
5
+ id: '',
6
+ ...effect
7
+ };
8
+ }
9
+ const {
10
+ rangeStart,
11
+ rangeEnd,
12
+ ...rest
13
+ } = effect;
14
+ return {
15
+ type: 'ScrubAnimationOptions',
16
+ id: '',
17
+ startOffset: rangeStart,
18
+ endOffset: rangeEnd,
19
+ ...rest
20
+ };
21
+ }
22
+ export function addHandlerToMap(handlersMap, element, handlerObj) {
23
+ let handlers = handlersMap.get(element);
24
+ if (!handlers) {
25
+ handlers = new Set();
26
+ handlersMap.set(element, handlers);
27
+ }
28
+ handlers.add(handlerObj);
29
+ }
30
+ export function removeElementFromHandlerMap(handlerMap, element) {
31
+ const handlers = handlerMap.get(element);
32
+ handlers == null || handlers.forEach(handlerObj => {
33
+ const {
34
+ source,
35
+ target,
36
+ cleanup
37
+ } = handlerObj;
38
+ cleanup();
39
+ const otherKey = source === element ? target : source;
40
+ const otherHandlers = handlerMap.get(otherKey);
41
+ otherHandlers == null || otherHandlers.delete(handlerObj);
42
+ });
43
+ handlerMap.delete(element);
44
+ }
45
+ //# sourceMappingURL=utilities.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["effectToAnimationOptions","effect","duration","type","id","rangeStart","rangeEnd","rest","startOffset","endOffset","addHandlerToMap","handlersMap","element","handlerObj","handlers","get","Set","set","add","removeElementFromHandlerMap","handlerMap","forEach","source","target","cleanup","otherKey","otherHandlers","delete"],"sources":["../../../src/handlers/utilities.ts"],"sourcesContent":["import type {\n TimeEffect,\n ScrubEffect,\n HandlerObject,\n HandlerObjectMap,\n AnimationOptions,\n} from '../types';\n\nexport function effectToAnimationOptions(effect: TimeEffect | ScrubEffect) {\n if ((effect as TimeEffect).duration) {\n return {\n type: 'TimeAnimationOptions',\n id: '',\n ...effect,\n } as AnimationOptions<'time'>;\n }\n\n const { rangeStart, rangeEnd, ...rest } = effect as ScrubEffect;\n return {\n type: 'ScrubAnimationOptions',\n id: '',\n startOffset: rangeStart,\n endOffset: rangeEnd,\n ...rest,\n } as AnimationOptions<'scrub'>;\n}\n\nexport function addHandlerToMap(\n handlersMap: HandlerObjectMap,\n element: HTMLElement,\n handlerObj: HandlerObject,\n) {\n let handlers = handlersMap.get(element);\n\n if (!handlers) {\n handlers = new Set();\n handlersMap.set(element, handlers);\n }\n\n handlers.add(handlerObj);\n}\n\nexport function removeElementFromHandlerMap(\n handlerMap: HandlerObjectMap,\n element: HTMLElement,\n) {\n const handlers = handlerMap.get(element);\n\n handlers?.forEach((handlerObj) => {\n const { source, target, cleanup } = handlerObj;\n cleanup();\n\n const otherKey = source === element ? target : source;\n const otherHandlers = handlerMap.get(otherKey);\n otherHandlers?.delete(handlerObj);\n });\n\n handlerMap.delete(element);\n}\n"],"mappings":"AAQA,OAAO,SAASA,wBAAwBA,CAACC,MAAgC,EAAE;EACzE,IAAKA,MAAM,CAAgBC,QAAQ,EAAE;IACnC,OAAO;MACLC,IAAI,EAAE,sBAAsB;MAC5BC,EAAE,EAAE,EAAE;MACN,GAAGH;IACL,CAAC;EACH;EAEA,MAAM;IAAEI,UAAU;IAAEC,QAAQ;IAAE,GAAGC;EAAK,CAAC,GAAGN,MAAqB;EAC/D,OAAO;IACLE,IAAI,EAAE,uBAAuB;IAC7BC,EAAE,EAAE,EAAE;IACNI,WAAW,EAAEH,UAAU;IACvBI,SAAS,EAAEH,QAAQ;IACnB,GAAGC;EACL,CAAC;AACH;AAEA,OAAO,SAASG,eAAeA,CAC7BC,WAA6B,EAC7BC,OAAoB,EACpBC,UAAyB,EACzB;EACA,IAAIC,QAAQ,GAAGH,WAAW,CAACI,GAAG,CAACH,OAAO,CAAC;EAEvC,IAAI,CAACE,QAAQ,EAAE;IACbA,QAAQ,GAAG,IAAIE,GAAG,CAAC,CAAC;IACpBL,WAAW,CAACM,GAAG,CAACL,OAAO,EAAEE,QAAQ,CAAC;EACpC;EAEAA,QAAQ,CAACI,GAAG,CAACL,UAAU,CAAC;AAC1B;AAEA,OAAO,SAASM,2BAA2BA,CACzCC,UAA4B,EAC5BR,OAAoB,EACpB;EACA,MAAME,QAAQ,GAAGM,UAAU,CAACL,GAAG,CAACH,OAAO,CAAC;EAExCE,QAAQ,YAARA,QAAQ,CAAEO,OAAO,CAAER,UAAU,IAAK;IAChC,MAAM;MAAES,MAAM;MAAEC,MAAM;MAAEC;IAAQ,CAAC,GAAGX,UAAU;IAC9CW,OAAO,CAAC,CAAC;IAET,MAAMC,QAAQ,GAAGH,MAAM,KAAKV,OAAO,GAAGW,MAAM,GAAGD,MAAM;IACrD,MAAMI,aAAa,GAAGN,UAAU,CAACL,GAAG,CAACU,QAAQ,CAAC;IAC9CC,aAAa,YAAbA,aAAa,CAAEC,MAAM,CAACd,UAAU,CAAC;EACnC,CAAC,CAAC;EAEFO,UAAU,CAACO,MAAM,CAACf,OAAO,CAAC;AAC5B","ignoreList":[]}
@@ -0,0 +1,69 @@
1
+ import { getWebAnimation } from '@wix/motion';
2
+ import { effectToAnimationOptions, addHandlerToMap, removeElementFromHandlerMap } from './utilities';
3
+ const observers = {};
4
+ const handlerMap = new WeakMap();
5
+ function getObserver(options) {
6
+ const key = JSON.stringify(options);
7
+ if (observers[key]) {
8
+ return observers[key];
9
+ }
10
+ const observer = new IntersectionObserver(entries => {
11
+ entries.forEach(entry => {
12
+ if (entry.isIntersecting) {
13
+ const handlers = handlerMap.get(entry.target);
14
+ handlers == null || handlers.forEach(_ref => {
15
+ let {
16
+ source,
17
+ handler
18
+ } = _ref;
19
+ if (source === entry.target) {
20
+ handler();
21
+ }
22
+ });
23
+ if (options.type === 'once') {
24
+ observer.unobserve(entry.target);
25
+ }
26
+ }
27
+ });
28
+ }, {
29
+ root: null,
30
+ rootMargin: options.inset ? `${options.inset} 0px ${options.inset}` : '0px',
31
+ threshold: options.threshold
32
+ });
33
+ observers[key] = observer;
34
+ return observer;
35
+ }
36
+ function addViewEnterHandler(source, target, effect, options) {
37
+ if (options === void 0) {
38
+ options = {};
39
+ }
40
+ const observer = getObserver(options);
41
+ const animation = getWebAnimation(target, effectToAnimationOptions(effect));
42
+ const handler = () => {
43
+ animation.play(() => {
44
+ // hack this here until we solve initial state properly
45
+ target.dataset.motionEnter = 'done';
46
+ });
47
+ };
48
+ const cleanup = () => {
49
+ observer.unobserve(source);
50
+ animation.cancel();
51
+ };
52
+ const handlerObj = {
53
+ source,
54
+ target,
55
+ handler,
56
+ cleanup
57
+ };
58
+ addHandlerToMap(handlerMap, source, handlerObj);
59
+ addHandlerToMap(handlerMap, target, handlerObj);
60
+ observer.observe(source);
61
+ }
62
+ function removeViewEnterHandler(element) {
63
+ removeElementFromHandlerMap(handlerMap, element);
64
+ }
65
+ export default {
66
+ add: addViewEnterHandler,
67
+ remove: removeViewEnterHandler
68
+ };
69
+ //# sourceMappingURL=viewEnter.js.map