@wix/interact 1.68.0 → 1.70.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.
package/README.md CHANGED
@@ -217,10 +217,14 @@ remove(path: string): void
217
217
 
218
218
  ## Documentation
219
219
 
220
- - [Full API Documentation](https://wix-incubator.github.io/interact-ai/docs/api/README.md)
221
- - [Guides and Tutorials](https://wix-incubator.github.io/interact-ai/docs/guides/README.md)
222
- - [Examples and Patterns](https://wix-incubator.github.io/interact-ai/docs/examples/README.md)
223
- - [Integration Guides](https://wix-incubator.github.io/interact-ai/docs/integration/README.md)
220
+ - [Full API Documentation](https://wix-incubator.github.io/interact-ai/docs/api)
221
+ - [Guides and Tutorials](https://wix-incubator.github.io/interact-ai/docs/guides)
222
+ - [Examples and Patterns](https://wix-incubator.github.io/interact-ai/docs/examples)
223
+ - [Integration Guides](https://wix-incubator.github.io/interact-ai/docs/integration)
224
+
225
+ ## AI Support
226
+
227
+ - [Rules for Interaction Generation](https://wix-incubator.github.io/interact-ai/rules)
224
228
 
225
229
  ## Development
226
230
 
@@ -6,7 +6,8 @@ var _utilities = require("../handlers/utilities");
6
6
  jest.mock('@wix/motion', () => ({
7
7
  getWebAnimation: jest.fn().mockReturnValue({
8
8
  play: jest.fn(),
9
- cancel: jest.fn()
9
+ cancel: jest.fn(),
10
+ onFinish: jest.fn()
10
11
  }),
11
12
  getScrubScene: jest.fn().mockReturnValue({}),
12
13
  getEasing: jest.fn().mockImplementation(v => v)
@@ -1 +1 @@
1
- {"version":3,"names":["_interact","require","_utilities","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","remove","Interact","instances","length","elementCache","clear","it","create","expect","customElements","get","toBeDefined","addEventListenerSpy","spyOn","add","toHaveBeenCalledTimes","toHaveBeenCalledWith","any","Function","objectContaining","passive","HTMLElement","elementClick","divClick","pointerInstance","effectToAnimationOptions","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":[]}
1
+ {"version":3,"names":["_interact","require","_utilities","jest","mock","getWebAnimation","fn","mockReturnValue","play","cancel","onFinish","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","remove","Interact","instances","length","elementCache","clear","it","create","expect","customElements","get","toBeDefined","addEventListenerSpy","spyOn","add","toHaveBeenCalledTimes","toHaveBeenCalledWith","any","Function","objectContaining","passive","HTMLElement","elementClick","divClick","pointerInstance","effectToAnimationOptions","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 onFinish: 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":";;AAAA,IAAAA,SAAA,GAAAC,OAAA;AAOA,IAAAC,UAAA,GAAAD,OAAA;AAEA;AACAE,IAAI,CAACC,IAAI,CAAC,aAAa,EAAE,OAAO;EAC9BC,eAAe,EAAEF,IAAI,CAACG,EAAE,CAAC,CAAC,CAACC,eAAe,CAAC;IACzCC,IAAI,EAAEL,IAAI,CAACG,EAAE,CAAC,CAAC;IACfG,MAAM,EAAEN,IAAI,CAACG,EAAE,CAAC,CAAC;IACjBI,QAAQ,EAAEP,IAAI,CAACG,EAAE,CAAC;EACpB,CAAC,CAAC;EACFK,aAAa,EAAER,IAAI,CAACG,EAAE,CAAC,CAAC,CAACC,eAAe,CAAC,CAAC,CAAC,CAAC;EAC5CK,SAAS,EAAET,IAAI,CAACG,EAAE,CAAC,CAAC,CAACO,kBAAkB,CAAEC,CAAC,IAAKA,CAAC;AAClD,CAAC,CAAC,CAAC;;AAEH;AACAX,IAAI,CAACC,IAAI,CAAC,QAAQ,EAAE,OAAO;EACzBW,OAAO,EAAEZ,IAAI,CAACG,EAAE,CAAC,CAAC,CAACO,kBAAkB,CAAC,OAAO;IAC3CG,KAAK,EAAEb,IAAI,CAACG,EAAE,CAAC,CAAC;IAChBW,OAAO,EAAEd,IAAI,CAACG,EAAE,CAAC;EACnB,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC;;AAEH;AACAH,IAAI,CAACC,IAAI,CAAC,QAAQ,EAAE,OAAO;EACzBc,MAAM,EAAEf,IAAI,CAACG,EAAE,CAAC,CAAC,CAACO,kBAAkB,CAAC,OAAO;IAC1CG,KAAK,EAAEb,IAAI,CAACG,EAAE,CAAC,CAAC;IAChBa,GAAG,EAAEhB,IAAI,CAACG,EAAE,CAAC;EACf,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC;AAEHc,QAAQ,CAAC,UAAU,EAAE,MAAM;EACzB,IAAIC,OAA4B;EAChC,MAAMC,UAA0B,GAAG;IACjCC,YAAY,EAAE,CACZ;MACEC,OAAO,EAAE,WAAW;MACpBC,MAAM,EAAE,gBAAgB;MACxBC,MAAM,EAAE;QACNC,SAAS,EAAE;MACb,CAAC;MACDC,OAAO,EAAE,CACP;QACEC,MAAM,EAAE,gBAAgB;QACxBC,QAAQ,EAAE;MACZ,CAAC,EACD;QACED,MAAM,EAAE,aAAa;QACrBC,QAAQ,EAAE;MACZ,CAAC;IAEL,CAAC,EACD;MACEN,OAAO,EAAE,aAAa;MACtBC,MAAM,EAAE,YAAY;MACpBG,OAAO,EAAE,CACP;QACEC,MAAM,EAAE,YAAY;QACpBC,QAAQ,EAAE;MACZ,CAAC;IAEL,CAAC,EACD;MACEN,OAAO,EAAE,cAAc;MACvBC,MAAM,EAAE,qBAAqB;MAC7BC,MAAM,EAAE;QACNI,QAAQ,EAAE;MACZ,CAAC;MACDF,OAAO,EAAE,CACP;QACEC,MAAM,EAAE,qBAAqB;QAC7BC,QAAQ,EAAE;MACZ,CAAC;IAEL,CAAC,EACD;MACEN,OAAO,EAAE,aAAa;MACtBC,MAAM,EAAE,aAAa;MACrBC,MAAM,EAAE;QACNK,OAAO,EAAE;MACX,CAAC;MACDH,OAAO,EAAE,CACP;QACEC,MAAM,EAAE,aAAa;QACrBC,QAAQ,EAAE;MACZ,CAAC;IAEL,CAAC,EACD;MACEN,OAAO,EAAE,OAAO;MAChBC,MAAM,EAAE,aAAa;MACrBC,MAAM,EAAE;QACNM,IAAI,EAAE;MACR,CAAC;MACDJ,OAAO,EAAE,CACP;QACEC,MAAM,EAAE,aAAa;QACrBC,QAAQ,EAAE;MACZ,CAAC;IAEL,CAAC,EACD;MACEN,OAAO,EAAE,OAAO;MAChBC,MAAM,EAAE,aAAa;MACrBC,MAAM,EAAE;QACNO,MAAM,EAAE;MACV,CAAC;MACDL,OAAO,EAAE,CACP;QACEC,MAAM,EAAE,aAAa;QACrBC,QAAQ,EAAE;MACZ,CAAC;IAEL,CAAC,EACD;MACEN,OAAO,EAAE,OAAO;MAChBC,MAAM,EAAE,aAAa;MACrBC,MAAM,EAAE;QACNM,IAAI,EAAE;MACR,CAAC;MACDJ,OAAO,EAAE,CACP;QACEC,MAAM,EAAE,aAAa;QACrBC,QAAQ,EAAE;MACZ,CAAC,EACD;QACED,MAAM,EAAE,aAAa;QACrBC,QAAQ,EAAE,aAAa;QACvBI,WAAW,EAAE;UACXF,IAAI,EAAE,OAAO;UACbG,SAAS,EAAE,MAAM;UACjBC,KAAK,EAAE;QACT;MACF,CAAC;IAEL,CAAC,EACD;MACEZ,OAAO,EAAE,OAAO;MAChBC,MAAM,EAAE,aAAa;MACrBC,MAAM,EAAE;QACNO,MAAM,EAAE;MACV,CAAC;MACDL,OAAO,EAAE,CACP;QACEC,MAAM,EAAE,aAAa;QACrBC,QAAQ,EAAE;MACZ,CAAC;IAEL,CAAC,EACD;MACEN,OAAO,EAAE,cAAc;MACvBC,MAAM,EAAE,cAAc;MACtBG,OAAO,EAAE,CACP;QACEC,MAAM,EAAE,cAAc;QACtBC,QAAQ,EAAE;MACZ,CAAC;IAEL,CAAC,CACF;IACDF,OAAO,EAAE;MACP,aAAa,EAAE;QACbM,WAAW,EAAE;UACXF,IAAI,EAAE,OAAO;UACbG,SAAS,EAAE,OAAO;UAClBC,KAAK,EAAE;QACT,CAAgB;QAChBC,QAAQ,EAAE;MACZ,CAAC;MACD,yBAAyB,EAAE;QACzBR,MAAM,EAAE,aAAa;QACrBK,WAAW,EAAE;UACXF,IAAI,EAAE,OAAO;UACbG,SAAS,EAAE,OAAO;UAClBC,KAAK,EAAE;QACT,CAAgB;QAChBC,QAAQ,EAAE;MACZ,CAAC;MACD,kBAAkB,EAAE;QAClBH,WAAW,EAAE;UACXF,IAAI,EAAE,YAAY;UAClBM,QAAQ,EAAE;YAAEC,KAAK,EAAE,EAAE;YAAEP,IAAI,EAAE;UAAK,CAAC;UACnCQ,IAAI,EAAE,MAAM;UACZJ,KAAK,EAAE;QACT,CAAgB;QAChBK,kBAAkB,EAAE,GAAG;QACvBC,gBAAgB,EAAE,SAAS;QAC3BC,gBAAgB,EAAE;MACpB,CAAC;MACD,aAAa,EAAE;QACbT,WAAW,EAAE;UACXF,IAAI,EAAE,UAAU;UAChBI,KAAK,EAAE,MAAM;UACbD,SAAS,EAAE,QAAQ;UACnBS,cAAc,EAAE;QAClB,CAAgB;QAChBP,QAAQ,EAAE;MACZ,CAAC;MACD,kBAAkB,EAAE;QAClBH,WAAW,EAAE;UACXF,IAAI,EAAE,YAAY;UAClBa,KAAK,EAAE,IAAI;UACXC,OAAO,EAAE;QACX,CAAgB;QAChBC,UAAU,EAAE;UACVC,IAAI,EAAE,SAAS;UACfC,MAAM,EAAE;YAAEV,KAAK,EAAE,CAAC,EAAE;YAAEP,IAAI,EAAE;UAAa;QAC3C,CAAC;QACDkB,QAAQ,EAAE;UACRF,IAAI,EAAE,SAAS;UACfC,MAAM,EAAE;YAAEV,KAAK,EAAE,GAAG;YAAEP,IAAI,EAAE;UAAa;QAC3C;MACF,CAAC;MACD,uBAAuB,EAAE;QACvBmB,UAAU,EAAE;UACVd,QAAQ,EAAE,GAAG;UACbe,eAAe,EAAE,CAAC;YAAEJ,IAAI,EAAE,SAAS;YAAET,KAAK,EAAE;UAAI,CAAC;QACnD;MACF,CAAC;MACD,WAAW,EAAE;QACXL,WAAW,EAAE;UACXF,IAAI,EAAE,MAAM;UACZG,SAAS,EAAE,MAAM;UACjBC,KAAK,EAAE;QACT,CAAgB;QAChBC,QAAQ,EAAE;MACZ;IACF;EACF,CAAC;EAEDgB,UAAU,CAAC,MAAM;IACfhC,OAAO,GAAGiC,QAAQ,CAACC,aAAa,CAC9B,sBACF,CAAwB;IACxB,MAAMC,GAAG,GAAGF,QAAQ,CAACC,aAAa,CAAC,KAAK,CAAC;IACzClC,OAAO,CAACoC,MAAM,CAACD,GAAG,CAAC;;IAEnB;IACCE,MAAM,CAASC,cAAc,GAAG,MAAMA,cAAc,CAAC;MACpD;MACAC,WAAWA,CAACvC,OAAuB,EAAEwC,SAAgB,EAAEC,OAAY,EAAE;QACnE,OAAO;UAAEzC,OAAO;UAAEwC,SAAS;UAAEC;QAAQ,CAAC;MACxC;IACF,CAAC;;IAED;IACCJ,MAAM,CAASK,YAAY,GAAG,MAAMA,YAAY,CAAC;MAChDH,WAAWA,CAACE,OAAY,EAAE;QACxB,OAAO;UAAE,GAAGA;QAAQ,CAAC;MACvB;IACF,CAAC;;IAED;IACCJ,MAAM,CAASM,SAAS,GAAG,MAAMA,SAAS,CAAC;MAC1CJ,WAAWA,CAACK,MAAW,EAAEC,QAAa,EAAE;QACtC,OAAO;UAAED,MAAM;UAAEC,QAAQ;UAAE1D,IAAI,EAAEL,IAAI,CAACG,EAAE,CAAC;QAAE,CAAC;MAC9C;IACF,CAAC;;IAED;IACCoD,MAAM,CAASS,oBAAoB,GAAG,MAAMA,oBAAoB,CAAC;MAChEP,WAAWA,CAACQ,QAAa,EAAEN,OAAY,EAAE;QACvC,OAAO;UAAEM,QAAQ;UAAEN,OAAO;UAAEO,OAAO,EAAElE,IAAI,CAACG,EAAE,CAAC,CAAC;UAAEgE,SAAS,EAAEnE,IAAI,CAACG,EAAE,CAAC;QAAE,CAAC;MACxE;IACF,CAAC;;IAED;IACCoD,MAAM,CAASa,aAAa,GAAG,MAAMA,aAAa,CAAC;MAClDX,WAAWA,CAACY,CAAS,EAAE;QACrB,OAAO;UAAEC,OAAO,EAAEtE,IAAI,CAACG,EAAE,CAAC;QAAE,CAAC;MAC/B;IACF,CAAC;;IAED;IACA,IAAI,CAACgD,QAAQ,CAACoB,kBAAkB,EAAE;MAChCpB,QAAQ,CAACoB,kBAAkB,GAAG,EAAE;IAClC;;IAEA;IACAC,cAAc,CAAC,CAAC;EAClB,CAAC,CAAC;EAEF,SAASA,cAAcA,CAACC,eAAyB,GAAG,EAAE,EAAE;IACtD,MAAMC,SAAS,GAAG,IAAID,eAAe,CAACE,IAAI,CAAC,SAAS,CAAC,GAAG;IACxD,MAAMC,OAAO,GAAIC,KAAa,IAAK;MACjC,OAAO;QACLC,OAAO,EAAEJ,SAAS,KAAKG,KAAK;QAC5BE,KAAK,EAAEF,KAAK;QACZG,QAAQ,EAAE,IAAI;QACdC,gBAAgB,EAAEjF,IAAI,CAACG,EAAE,CAAC,CAAC;QAC3B+E,mBAAmB,EAAElF,IAAI,CAACG,EAAE,CAAC,CAAC;QAC9BgF,aAAa,EAAEnF,IAAI,CAACG,EAAE,CAAC;MACzB,CAAC;IACH,CAAC;IAEDiF,MAAM,CAACC,cAAc,CAAC9B,MAAM,EAAE,YAAY,EAAE;MAC1C+B,QAAQ,EAAE,IAAI;MACdlD,KAAK,EAAEpC,IAAI,CAACG,EAAE,CAAC,CAAC,CAACO,kBAAkB,CAACkE,OAAO;IAC7C,CAAC,CAAC;EACJ;EAEA,SAASW,yBAAyBA,CAChCC,UAA+B,GAAG,CAAC,CAAC,EACpCC,kBAA4B,GAAG,EAAE,EACjB;IAChBjB,cAAc,CAACiB,kBAAkB,CAAC;IAElC,OAAO;MACLD,UAAU,EAAE;QACVE,OAAO,EAAE;UACP7D,IAAI,EAAE,OAAO;UACb8D,SAAS,EAAE;QACb,CAAC;QACDC,MAAM,EAAE;UACN/D,IAAI,EAAE,OAAO;UACb8D,SAAS,EAAE;QACb,CAAC;QACDE,MAAM,EAAE;UACNhE,IAAI,EAAE,OAAO;UACb8D,SAAS,EAAE;QACb,CAAC;QACD,GAAGH;MACL,CAAC;MACDpE,YAAY,EAAE,CACZ;QACEC,OAAO,EAAE,OAAO;QAChBC,MAAM,EAAE,iBAAiB;QACzBG,OAAO,EAAE,CACP;UACEC,MAAM,EAAE,iBAAiB;UACzBC,QAAQ,EAAE;QACZ,CAAC,EACD;UACED,MAAM,EAAE,iBAAiB;UACzBC,QAAQ,EAAE,gBAAgB;UAC1B6D,UAAU,EAAE,CAAC,SAAS,CAAC;UACvBzD,WAAW,EAAE;YACXF,IAAI,EAAE,SAAS;YACfG,SAAS,EAAE,OAAO;YAClBC,KAAK,EAAE;UACT,CAAgB;UAChBC,QAAQ,EAAE;QACZ,CAAC,EACD;UACER,MAAM,EAAE,iBAAiB;UACzBC,QAAQ,EAAE,gBAAgB;UAC1B6D,UAAU,EAAE,CAAC,QAAQ,CAAC;UACtBzD,WAAW,EAAE;YACXF,IAAI,EAAE,UAAU;YAChBG,SAAS,EAAE,QAAQ;YACnBC,KAAK,EAAE;UACT,CAAgB;UAChBC,QAAQ,EAAE;QACZ,CAAC;MAEL,CAAC,CACF;MACDT,OAAO,EAAE;QACP,gBAAgB,EAAE;UAChBM,WAAW,EAAE;YACXF,IAAI,EAAE,QAAQ;YACdI,KAAK,EAAE;UACT,CAAgB;UAChBC,QAAQ,EAAE;QACZ;MACF;IACF,CAAC;EACH;EAEA4D,SAAS,CAAC,MAAM;IACd9F,IAAI,CAAC+F,aAAa,CAAC,CAAC;IAEpB,IAAAC,gBAAM,EAAC,gBAAgB,CAAC;IACxB,IAAAA,gBAAM,EAAC,YAAY,CAAC;IACpB,IAAAA,gBAAM,EAAC,qBAAqB,CAAC;IAC7B,IAAAA,gBAAM,EAAC,aAAa,CAAC;IACrB,IAAAA,gBAAM,EAAC,aAAa,CAAC;IACrB,IAAAA,gBAAM,EAAC,aAAa,CAAC;IACrB,IAAAA,gBAAM,EAAC,cAAc,CAAC;IACtB;IACA,IAAAA,gBAAM,EAAC,iBAAiB,CAAC;IACzB,IAAAA,gBAAM,EAAC,iBAAiB,CAAC;IACzB,IAAAA,gBAAM,EAAC,mBAAmB,CAAC;IAC3B,IAAAA,gBAAM,EAAC,mBAAmB,CAAC;IAC3B,IAAAA,gBAAM,EAAC,iBAAiB,CAAC;IACzB,IAAAA,gBAAM,EAAC,iBAAiB,CAAC;IACzB;IACAC,kBAAQ,CAACC,SAAS,CAACC,MAAM,GAAG,CAAC;IAC7BF,kBAAQ,CAACG,YAAY,CAACC,KAAK,CAAC,CAAC;EAC/B,CAAC,CAAC;EAEFpF,QAAQ,CAAC,eAAe,EAAE,MAAM;IAC9BqF,EAAE,CAAC,qCAAqC,EAAE,MAAM;MAC9CL,kBAAQ,CAACM,MAAM,CAAC,CAAC,CAAmB,CAAC;MACrCC,MAAM,CAACC,cAAc,CAACC,GAAG,CAAC,sBAAsB,CAAC,CAAC,CAACC,WAAW,CAAC,CAAC;IAClE,CAAC,CAAC;EACJ,CAAC,CAAC;EAEF1F,QAAQ,CAAC,iBAAiB,EAAE,MAAM;IAChCiC,UAAU,CAAC,MAAM;MACf+C,kBAAQ,CAACM,MAAM,CAACpF,UAAU,CAAC;IAC7B,CAAC,CAAC;IAEFF,QAAQ,CAAC,OAAO,EAAE,MAAM;MACtBqF,EAAE,CAAC,0DAA0D,EAAE,MAAM;QACnE,MAAM;UAAEpG;QAAgB,CAAC,GAAGJ,OAAO,CAAC,aAAa,CAAC;QAElDoB,OAAO,GAAGiC,QAAQ,CAACC,aAAa,CAC9B,sBACF,CAAwB;QACxB,MAAMC,GAAG,GAAGF,QAAQ,CAACC,aAAa,CAAC,KAAK,CAAC;QACzClC,OAAO,CAACoC,MAAM,CAACD,GAAG,CAAC;QAEnB,MAAMuD,mBAAmB,GAAG5G,IAAI,CAAC6G,KAAK,CAACxD,GAAG,EAAE,kBAAkB,CAAC;QAE/D,IAAAyD,aAAG,EAAC5F,OAAO,EAAE,aAAa,CAAC;QAE3BsF,MAAM,CAACI,mBAAmB,CAAC,CAACG,qBAAqB,CAAC,CAAC,CAAC;QACpDP,MAAM,CAACI,mBAAmB,CAAC,CAACI,oBAAoB,CAC9C,YAAY,EACZR,MAAM,CAACS,GAAG,CAACC,QAAQ,CAAC,EACpBV,MAAM,CAACW,gBAAgB,CAAC;UACtBC,OAAO,EAAE;QACX,CAAC,CACH,CAAC;QAEDZ,MAAM,CAACI,mBAAmB,CAAC,CAACI,oBAAoB,CAC9C,YAAY,EACZR,MAAM,CAACS,GAAG,CAACC,QAAQ,CAAC,EACpBV,MAAM,CAACW,gBAAgB,CAAC;UACtBC,OAAO,EAAE;QACX,CAAC,CACH,CAAC;QAEDZ,MAAM,CAACtG,eAAe,CAAC,CAAC6G,qBAAqB,CAAC,CAAC,CAAC;QAChDP,MAAM,CAACtG,eAAe,CAAC,CAAC8G,oBAAoB,CAC1C3D,GAAG,EACHmD,MAAM,CAACW,gBAAgB,CAAC;UACtBpF,WAAW,EAAEyE,MAAM,CAACW,gBAAgB,CAAC;YACnCtF,IAAI,EAAE,OAAO;YACbG,SAAS,EAAE,MAAM;YACjBC,KAAK,EAAE;UACT,CAAC;QACH,CAAC,CACH,CAAC;MACH,CAAC,CAAC;IACJ,CAAC,CAAC;IAEFhB,QAAQ,CAAC,OAAO,EAAE,MAAM;MACtBqF,EAAE,CAAC,sCAAsC,EAAE,MAAM;QAC/CpF,OAAO,GAAGiC,QAAQ,CAACC,aAAa,CAC9B,sBACF,CAAwB;QACxB,MAAMC,GAAG,GAAGF,QAAQ,CAACC,aAAa,CAAC,KAAK,CAAC;QACzClC,OAAO,CAACoC,MAAM,CAACD,GAAG,CAAC;QAEnB,MAAMuD,mBAAmB,GAAG5G,IAAI,CAAC6G,KAAK,CAACxD,GAAG,EAAE,kBAAkB,CAAC;QAE/D,IAAAyD,aAAG,EAAC5F,OAAO,EAAE,aAAa,CAAC;QAE3BsF,MAAM,CAACI,mBAAmB,CAAC,CAACG,qBAAqB,CAAC,CAAC,CAAC;QACpDP,MAAM,CAACI,mBAAmB,CAAC,CAACI,oBAAoB,CAC9C,OAAO,EACPR,MAAM,CAACS,GAAG,CAACC,QAAQ,CAAC,EACpBV,MAAM,CAACW,gBAAgB,CAAC;UACtBC,OAAO,EAAE;QACX,CAAC,CACH,CAAC;MACH,CAAC,CAAC;IACJ,CAAC,CAAC;IAEFnG,QAAQ,CAAC,WAAW,EAAE,MAAM;MAC1BqF,EAAE,CAAC,0CAA0C,EAAE,MAAM;QACnD,MAAM;UAAEpG;QAAgB,CAAC,GAAGJ,OAAO,CAAC,aAAa,CAAC;QAClDoB,OAAO,GAAGiC,QAAQ,CAACC,aAAa,CAC9B,sBACF,CAAwB;QACxB,MAAMC,GAAG,GAAGF,QAAQ,CAACC,aAAa,CAAC,KAAK,CAAC;QACzClC,OAAO,CAACoC,MAAM,CAACD,GAAG,CAAC;QAEnB,IAAAyD,aAAG,EAAC5F,OAAO,EAAE,gBAAgB,CAAC;QAE9BsF,MAAM,CAACtG,eAAe,CAAC,CAAC6G,qBAAqB,CAAC,CAAC,CAAC;QAChDP,MAAM,CAACtG,eAAe,CAAC,CAAC8G,oBAAoB,CAC1CR,MAAM,CAACS,GAAG,CAACI,WAAW,CAAC,EACvBb,MAAM,CAACS,GAAG,CAAC7B,MAAM,CACnB,CAAC;MACH,CAAC,CAAC;MAEFkB,EAAE,CAAC,6EAA6E,EAAE,MAAM;QACtF,MAAM;UAAEpG;QAAgB,CAAC,GAAGJ,OAAO,CAAC,aAAa,CAAC;QAClDoB,OAAO,GAAGiC,QAAQ,CAACC,aAAa,CAC9B,sBACF,CAAwB;QACxB,MAAMC,GAAG,GAAGF,QAAQ,CAACC,aAAa,CAAC,KAAK,CAAC;QACzClC,OAAO,CAACoC,MAAM,CAACD,GAAG,CAAC;QAEnB,MAAMiE,YAAY,GAAGnE,QAAQ,CAACC,aAAa,CACzC,sBACF,CAAwB;QACxB,MAAMmE,QAAQ,GAAGpE,QAAQ,CAACC,aAAa,CAAC,KAAK,CAAC;QAC9ClC,OAAO,CAACoC,MAAM,CAACiE,QAAQ,CAAC;QAExB,IAAAT,aAAG,EAACQ,YAAY,EAAE,aAAa,CAAC;QAChC,IAAAR,aAAG,EAAC5F,OAAO,EAAE,gBAAgB,CAAC;QAE9BsF,MAAM,CAACtG,eAAe,CAAC,CAAC6G,qBAAqB,CAAC,CAAC,CAAC;QAChDP,MAAM,CAACtG,eAAe,CAAC,CAAC8G,oBAAoB,CAC1CR,MAAM,CAACS,GAAG,CAACI,WAAW,CAAC,EACvBb,MAAM,CAACS,GAAG,CAAC7B,MAAM,CACnB,CAAC;MACH,CAAC,CAAC;IACJ,CAAC,CAAC;IAEFnE,QAAQ,CAAC,aAAa,EAAE,MAAM;MAC5BqF,EAAE,CAAC,4CAA4C,EAAE,MAAM;QACrD,MAAM;UAAEpG;QAAgB,CAAC,GAAGJ,OAAO,CAAC,aAAa,CAAC;QAClDoB,OAAO,GAAGiC,QAAQ,CAACC,aAAa,CAC9B,sBACF,CAAwB;QACxB,MAAMC,GAAG,GAAGF,QAAQ,CAACC,aAAa,CAAC,KAAK,CAAC;QACzClC,OAAO,CAACoC,MAAM,CAACD,GAAG,CAAC;QAEnB,IAAAyD,aAAG,EAAC5F,OAAO,EAAE,YAAY,CAAC;QAE1BsF,MAAM,CAACtG,eAAe,CAAC,CAAC6G,qBAAqB,CAAC,CAAC,CAAC;QAChDP,MAAM,CAACtG,eAAe,CAAC,CAAC8G,oBAAoB,CAC1CR,MAAM,CAACS,GAAG,CAACI,WAAW,CAAC,EACvBb,MAAM,CAACS,GAAG,CAAC7B,MAAM,CACnB,CAAC;MACH,CAAC,CAAC;IACJ,CAAC,CAAC;IAEFnE,QAAQ,CAAC,cAAc,EAAE,MAAM;MAC7BqF,EAAE,CAAC,6CAA6C,EAAE,MAAM;QACtD,MAAM;UAAEpG;QAAgB,CAAC,GAAGJ,OAAO,CAAC,aAAa,CAAC;QAClDoB,OAAO,GAAGiC,QAAQ,CAACC,aAAa,CAC9B,sBACF,CAAwB;QACxB,MAAMC,GAAG,GAAGF,QAAQ,CAACC,aAAa,CAAC,KAAK,CAAC;QACzClC,OAAO,CAACoC,MAAM,CAACD,GAAG,CAAC;QAEnB,IAAAyD,aAAG,EAAC5F,OAAO,EAAE,qBAAqB,CAAC;QAEnCsF,MAAM,CAACtG,eAAe,CAAC,CAAC6G,qBAAqB,CAAC,CAAC,CAAC;QAChDP,MAAM,CAACtG,eAAe,CAAC,CAAC8G,oBAAoB,CAC1CR,MAAM,CAACS,GAAG,CAACI,WAAW,CAAC,EACvBb,MAAM,CAACS,GAAG,CAAC7B,MAAM,CACnB,CAAC;MACH,CAAC,CAAC;IACJ,CAAC,CAAC;IAEFnE,QAAQ,CAAC,aAAa,EAAE,MAAM;MAC5BqF,EAAE,CAAC,4CAA4C,EAAE,MAAM;QACrD,MAAM;UAAE9F;QAAc,CAAC,GAAGV,OAAO,CAAC,aAAa,CAAC;QAChD,MAAM;UAAEc;QAAQ,CAAC,GAAGd,OAAO,CAAC,QAAQ,CAAC;QACrC,MAAM0H,eAAe,GAAG;UACtB3G,KAAK,EAAEb,IAAI,CAACG,EAAE,CAAC,CAAC;UAChBW,OAAO,EAAEd,IAAI,CAACG,EAAE,CAAC;QACnB,CAAC;QACDS,OAAO,CAACF,kBAAkB,CAAC,MAAM8G,eAAe,CAAC;QAEjDtG,OAAO,GAAGiC,QAAQ,CAACC,aAAa,CAC9B,sBACF,CAAwB;QACxB,MAAMC,GAAG,GAAGF,QAAQ,CAACC,aAAa,CAAC,KAAK,CAAC;QACzClC,OAAO,CAACoC,MAAM,CAACD,GAAG,CAAC;QAEnB,IAAAyD,aAAG,EAAC5F,OAAO,EAAE,aAAa,CAAC;QAE3BsF,MAAM,CAAChG,aAAa,CAAC,CAACuG,qBAAqB,CAAC,CAAC,CAAC;QAC9CP,MAAM,CAAChG,aAAa,CAAC,CAACwG,oBAAoB,CACxCR,MAAM,CAACS,GAAG,CAACI,WAAW,CAAC,EACvBb,MAAM,CAACW,gBAAgB,CACrB,IAAAM,mCAAwB,EACtBtG,UAAU,CAACM,OAAO,CAAC,kBAAkB,CACvC,CACF,CAAC,EACD+E,MAAM,CAACW,gBAAgB,CAAC;UACtB9F,OAAO,EAAE;QACX,CAAC,CACH,CAAC;QACDmF,MAAM,CAACgB,eAAe,CAAC3G,KAAK,CAAC,CAAC6G,gBAAgB,CAAC,CAAC;MAClD,CAAC,CAAC;IACJ,CAAC,CAAC;IAEFzG,QAAQ,CAAC,cAAc,EAAE,MAAM;MAC7BqF,EAAE,CAAC,8EAA8E,EAAE,MAAM;QACvF,MAAM;UAAEpG;QAAgB,CAAC,GAAGJ,OAAO,CAAC,aAAa,CAAC;QAElDoB,OAAO,GAAGiC,QAAQ,CAACC,aAAa,CAC9B,sBACF,CAAwB;QACxB,MAAMC,GAAG,GAAGF,QAAQ,CAACC,aAAa,CAAC,KAAK,CAAC;QACzClC,OAAO,CAACoC,MAAM,CAACD,GAAG,CAAC;QAEnB,IAAAyD,aAAG,EAAC5F,OAAO,EAAE,cAAc,CAAC;QAE5BsF,MAAM,CAACtG,eAAe,CAAC,CAAC6G,qBAAqB,CAAC,CAAC,CAAC;QAChDP,MAAM,CAACtG,eAAe,CAAC,CAAC8G,oBAAoB,CAC1CR,MAAM,CAACS,GAAG,CAACI,WAAW,CAAC,EACvBb,MAAM,CAACW,gBAAgB,CACrB,IAAAM,mCAAwB,EACtBtG,UAAU,CAACM,OAAO,CAAC,kBAAkB,CACvC,CACF,CAAC,EACD+E,MAAM,CAACW,gBAAgB,CAAC;UACtB9F,OAAO,EAAE;QACX,CAAC,CACH,CAAC;MACH,CAAC,CAAC;MAEFiF,EAAE,CAAC,kEAAkE,EAAE,MAAM;QAC3E;QACA,OAAQ/C,MAAM,CAASK,YAAY;QACnC,MAAM;UAAEpD;QAAc,CAAC,GAAGV,OAAO,CAAC,aAAa,CAAC;QAChD,MAAM;UAAEiB;QAAO,CAAC,GAAGjB,OAAO,CAAC,QAAQ,CAAC;QACpC,MAAM6H,cAAc,GAAG;UACrB9G,KAAK,EAAEb,IAAI,CAACG,EAAE,CAAC,CAAC;UAChBW,OAAO,EAAEd,IAAI,CAACG,EAAE,CAAC;QACnB,CAAC;QACDY,MAAM,CAACL,kBAAkB,CAAC,MAAMiH,cAAc,CAAC;QAE/CzG,OAAO,GAAGiC,QAAQ,CAACC,aAAa,CAC9B,sBACF,CAAwB;QACxB,MAAMC,GAAG,GAAGF,QAAQ,CAACC,aAAa,CAAC,KAAK,CAAC;QACzClC,OAAO,CAACoC,MAAM,CAACD,GAAG,CAAC;QAEnB,IAAAyD,aAAG,EAAC5F,OAAO,EAAE,cAAc,CAAC;QAE5BsF,MAAM,CAAChG,aAAa,CAAC,CAACuG,qBAAqB,CAAC,CAAC,CAAC;QAC9CP,MAAM,CAAChG,aAAa,CAAC,CAACwG,oBAAoB,CACxCR,MAAM,CAACS,GAAG,CAACI,WAAW,CAAC,EACvBb,MAAM,CAACW,gBAAgB,CACrB,IAAAM,mCAAwB,EACtBtG,UAAU,CAACM,OAAO,CAAC,kBAAkB,CACvC,CACF,CAAC,EACD+E,MAAM,CAACW,gBAAgB,CAAC;UACtB9F,OAAO,EAAE;QACX,CAAC,CACH,CAAC;QACDuG,UAAU,CAAC,MAAM;UACfpB,MAAM,CAACmB,cAAc,CAAC9G,KAAK,CAAC,CAAC6G,gBAAgB,CAAC,CAAC;QACjD,CAAC,EAAE,CAAC,CAAC;MACP,CAAC,CAAC;IACJ,CAAC,CAAC;EACJ,CAAC,CAAC;EAEFzG,QAAQ,CAAC,oBAAoB,EAAE,MAAM;IACnCiC,UAAU,CAAC,MAAM;MACf+C,kBAAQ,CAACM,MAAM,CAACpF,UAAU,CAAC;IAC7B,CAAC,CAAC;IAEFmF,EAAE,CAAC,+BAA+B,EAAE,MAAM;MACxCpF,OAAO,GAAGiC,QAAQ,CAACC,aAAa,CAC9B,sBACF,CAAwB;MACxB,MAAMC,GAAG,GAAGF,QAAQ,CAACC,aAAa,CAAC,KAAK,CAAC;MACzClC,OAAO,CAACoC,MAAM,CAACD,GAAG,CAAC;MAEnB,MAAMwE,sBAAsB,GAAG7H,IAAI,CAAC6G,KAAK,CAACxD,GAAG,EAAE,qBAAqB,CAAC;MAErE,IAAAyD,aAAG,EAAC5F,OAAO,EAAE,aAAa,CAAC;MAC3B,IAAA8E,gBAAM,EAAC,aAAa,CAAC;MAErBQ,MAAM,CAACqB,sBAAsB,CAAC,CAACd,qBAAqB,CAAC,CAAC,CAAC;MACvDP,MAAM,CAACqB,sBAAsB,CAAC,CAACb,oBAAoB,CACjD,OAAO,EACPR,MAAM,CAACS,GAAG,CAACC,QAAQ,CACrB,CAAC;IACH,CAAC,CAAC;IAEFZ,EAAE,CAAC,yCAAyC,EAAE,MAAM;MAClDE,MAAM,CAAC,MAAM,IAAAR,gBAAM,EAAC,kBAAkB,CAAC,CAAC,CAAC8B,GAAG,CAACC,OAAO,CAAC,CAAC;IACxD,CAAC,CAAC;IAEFzB,EAAE,CAAC,gCAAgC,EAAE,MAAM;MACzC,MAAM;QAAE1F;MAAQ,CAAC,GAAGd,OAAO,CAAC,QAAQ,CAAC;MACrC,MAAM0H,eAAe,GAAG;QACtB3G,KAAK,EAAEb,IAAI,CAACG,EAAE,CAAC,CAAC;QAChBW,OAAO,EAAEd,IAAI,CAACG,EAAE,CAAC;MACnB,CAAC;MACDS,OAAO,CAACF,kBAAkB,CAAC,MAAM8G,eAAe,CAAC;MAEjDtG,OAAO,GAAGiC,QAAQ,CAACC,aAAa,CAC9B,sBACF,CAAwB;MACxB,MAAMC,GAAG,GAAGF,QAAQ,CAACC,aAAa,CAAC,KAAK,CAAC;MACzClC,OAAO,CAACoC,MAAM,CAACD,GAAG,CAAC;MAEnB,IAAAyD,aAAG,EAAC5F,OAAO,EAAE,aAAa,CAAC;MAC3B,IAAA8E,gBAAM,EAAC,aAAa,CAAC;MAErBQ,MAAM,CAACgB,eAAe,CAAC1G,OAAO,CAAC,CAACiG,qBAAqB,CAAC,CAAC,CAAC;IAC1D,CAAC,CAAC;EACJ,CAAC,CAAC;EAEF9F,QAAQ,CAAC,wBAAwB,EAAE,MAAM;IACvCA,QAAQ,CAAC,0BAA0B,EAAE,MAAM;MACzCqF,EAAE,CAAC,yDAAyD,EAAE,MAAM;QAClE,MAAM;UAAEpG;QAAgB,CAAC,GAAGJ,OAAO,CAAC,aAAa,CAAC;QAClD,MAAMkI,MAAM,GAAGzC,yBAAyB,CAAC,CAAC,CAAC,EAAE,CAAC,mBAAmB,CAAC,CAAC;QAEnEU,kBAAQ,CAACM,MAAM,CAACyB,MAAM,CAAC;QAEvB,MAAMC,aAAa,GAAG9E,QAAQ,CAACC,aAAa,CAC1C,sBACF,CAAwB;QACxB,MAAM8E,SAAS,GAAG/E,QAAQ,CAACC,aAAa,CAAC,KAAK,CAAC;QAC/C6E,aAAa,CAAC3E,MAAM,CAAC4E,SAAS,CAAC;QAE/B,MAAMC,aAAa,GAAGhF,QAAQ,CAACC,aAAa,CAC1C,sBACF,CAAwB;QACxB,MAAMgF,SAAS,GAAGjF,QAAQ,CAACC,aAAa,CAAC,KAAK,CAAC;QAC/C+E,aAAa,CAAC7E,MAAM,CAAC8E,SAAS,CAAC;QAE/B,MAAMxB,mBAAmB,GAAG5G,IAAI,CAAC6G,KAAK,CAACqB,SAAS,EAAE,kBAAkB,CAAC;QAErE,IAAApB,aAAG,EAACmB,aAAa,EAAE,iBAAiB,CAAC;QACrC,IAAAnB,aAAG,EAACqB,aAAa,EAAE,iBAAiB,CAAC;QAErC3B,MAAM,CAACI,mBAAmB,CAAC,CAACG,qBAAqB,CAAC,CAAC,CAAC;QACpDP,MAAM,CAACI,mBAAmB,CAAC,CAACI,oBAAoB,CAC9C,OAAO,EACPR,MAAM,CAACS,GAAG,CAACC,QAAQ,CAAC,EACpBV,MAAM,CAACW,gBAAgB,CAAC;UACtBC,OAAO,EAAE;QACX,CAAC,CACH,CAAC;;QAED;QACAZ,MAAM,CAACtG,eAAe,CAAC,CAAC6G,qBAAqB,CAAC,CAAC,CAAC;QAChDP,MAAM,CAACtG,eAAe,CAAC,CAAC8G,oBAAoB,CAC1CmB,aAAa,CAACE,iBAAiB,EAC/B7B,MAAM,CAACW,gBAAgB,CAAC;UACtBpF,WAAW,EAAEyE,MAAM,CAACW,gBAAgB,CAAC;YACnCtF,IAAI,EAAE,SAAS;YACfG,SAAS,EAAE;UACb,CAAC;QACH,CAAC,CACH,CAAC;MACH,CAAC,CAAC;MAEFsE,EAAE,CAAC,sDAAsD,EAAE,MAAM;QAC/D,MAAM;UAAEpG;QAAgB,CAAC,GAAGJ,OAAO,CAAC,aAAa,CAAC;QAClD,MAAMkI,MAAM,GAAGzC,yBAAyB,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;;QAElDU,kBAAQ,CAACM,MAAM,CAACyB,MAAM,CAAC;QAEvB,MAAMC,aAAa,GAAG9E,QAAQ,CAACC,aAAa,CAC1C,sBACF,CAAwB;QACxB,MAAM8E,SAAS,GAAG/E,QAAQ,CAACC,aAAa,CAAC,KAAK,CAAC;QAC/C6E,aAAa,CAAC3E,MAAM,CAAC4E,SAAS,CAAC;QAE/B,MAAMC,aAAa,GAAGhF,QAAQ,CAACC,aAAa,CAC1C,sBACF,CAAwB;QACxB,MAAMgF,SAAS,GAAGjF,QAAQ,CAACC,aAAa,CAAC,KAAK,CAAC;QAC/C+E,aAAa,CAAC7E,MAAM,CAAC8E,SAAS,CAAC;QAE/B,IAAAtB,aAAG,EAACmB,aAAa,EAAE,iBAAiB,CAAC;QACrC,IAAAnB,aAAG,EAACqB,aAAa,EAAE,iBAAiB,CAAC;;QAErC;QACA3B,MAAM,CAACtG,eAAe,CAAC,CAAC6G,qBAAqB,CAAC,CAAC,CAAC;QAChDP,MAAM,CAACtG,eAAe,CAAC,CAAC8G,oBAAoB,CAC1CmB,aAAa,CAACE,iBAAiB,EAC/B7B,MAAM,CAACW,gBAAgB,CAAC;UACtBpF,WAAW,EAAEyE,MAAM,CAACW,gBAAgB,CAAC;YACnCtF,IAAI,EAAE,QAAQ;YACdI,KAAK,EAAE;UACT,CAAC;QACH,CAAC,CACH,CAAC;MACH,CAAC,CAAC;MAEFqE,EAAE,CAAC,0DAA0D,EAAE,MAAM;QACnE,MAAM;UAAEpG;QAAgB,CAAC,GAAGJ,OAAO,CAAC,aAAa,CAAC;QAClD,MAAMkI,MAAM,GAAGzC,yBAAyB,CAAC,CAAC,CAAC,EAAE,CAAC,kBAAkB,CAAC,CAAC;QAElEU,kBAAQ,CAACM,MAAM,CAACyB,MAAM,CAAC;QAEvB,MAAMC,aAAa,GAAG9E,QAAQ,CAACC,aAAa,CAC1C,sBACF,CAAwB;QACxB,MAAM8E,SAAS,GAAG/E,QAAQ,CAACC,aAAa,CAAC,KAAK,CAAC;QAC/C6E,aAAa,CAAC3E,MAAM,CAAC4E,SAAS,CAAC;QAE/B,MAAMC,aAAa,GAAGhF,QAAQ,CAACC,aAAa,CAC1C,sBACF,CAAwB;QACxB,MAAMgF,SAAS,GAAGjF,QAAQ,CAACC,aAAa,CAAC,KAAK,CAAC;QAC/C+E,aAAa,CAAC7E,MAAM,CAAC8E,SAAS,CAAC;QAE/B,IAAAtB,aAAG,EAACmB,aAAa,EAAE,iBAAiB,CAAC;QACrC,IAAAnB,aAAG,EAACqB,aAAa,EAAE,iBAAiB,CAAC;;QAErC;QACA3B,MAAM,CAACtG,eAAe,CAAC,CAAC6G,qBAAqB,CAAC,CAAC,CAAC;QAChDP,MAAM,CAACtG,eAAe,CAAC,CAAC8G,oBAAoB,CAC1CmB,aAAa,CAACE,iBAAiB,EAC/B7B,MAAM,CAACW,gBAAgB,CAAC;UACtBpF,WAAW,EAAEyE,MAAM,CAACW,gBAAgB,CAAC;YACnCtF,IAAI,EAAE,UAAU;YAChBG,SAAS,EAAE;UACb,CAAC;QACH,CAAC,CACH,CAAC;MACH,CAAC,CAAC;IACJ,CAAC,CAAC;IAEFf,QAAQ,CAAC,wBAAwB,EAAE,MAAM;MACvCqF,EAAE,CAAC,gDAAgD,EAAE,MAAM;QACzD,MAAM;UAAEpG;QAAgB,CAAC,GAAGJ,OAAO,CAAC,aAAa,CAAC;QAClD,MAAMkI,MAAM,GAAGzC,yBAAyB,CAAC,CAAC,CAAC,EAAE,CAAC,mBAAmB,CAAC,CAAC;QAEnEU,kBAAQ,CAACM,MAAM,CAACyB,MAAM,CAAC;QAEvB,MAAMC,aAAa,GAAG9E,QAAQ,CAACC,aAAa,CAC1C,sBACF,CAAwB;QACxB,MAAM8E,SAAS,GAAG/E,QAAQ,CAACC,aAAa,CAAC,KAAK,CAAC;QAC/C6E,aAAa,CAAC3E,MAAM,CAAC4E,SAAS,CAAC;QAE/B,MAAMC,aAAa,GAAGhF,QAAQ,CAACC,aAAa,CAC1C,sBACF,CAAwB;QACxB,MAAMgF,SAAS,GAAGjF,QAAQ,CAACC,aAAa,CAAC,KAAK,CAAC;QAC/C+E,aAAa,CAAC7E,MAAM,CAAC8E,SAAS,CAAC;;QAE/B;QACA,IAAAtB,aAAG,EAACmB,aAAa,EAAE,iBAAiB,CAAC;QACrC;QACA,IAAAnB,aAAG,EAACqB,aAAa,EAAE,iBAAiB,CAAC;QAErC3B,MAAM,CAACtG,eAAe,CAAC,CAAC6G,qBAAqB,CAAC,CAAC,CAAC;QAChDP,MAAM,CAACtG,eAAe,CAAC,CAAC8G,oBAAoB,CAC1CmB,aAAa,CAACE,iBAAiB,EAC/B7B,MAAM,CAACW,gBAAgB,CAAC;UACtBpF,WAAW,EAAEyE,MAAM,CAACW,gBAAgB,CAAC;YACnCtF,IAAI,EAAE;UACR,CAAC;QACH,CAAC,CACH,CAAC;MACH,CAAC,CAAC;MAEFyE,EAAE,CAAC,gDAAgD,EAAE,MAAM;QACzD,MAAM;UAAEpG;QAAgB,CAAC,GAAGJ,OAAO,CAAC,aAAa,CAAC;QAClD,MAAMkI,MAAM,GAAGzC,yBAAyB,CAAC,CAAC,CAAC,EAAE,CAAC,mBAAmB,CAAC,CAAC;QAEnEU,kBAAQ,CAACM,MAAM,CAACyB,MAAM,CAAC;QAEvB,MAAMC,aAAa,GAAG9E,QAAQ,CAACC,aAAa,CAC1C,sBACF,CAAwB;QACxB,MAAM8E,SAAS,GAAG/E,QAAQ,CAACC,aAAa,CAAC,KAAK,CAAC;QAC/C6E,aAAa,CAAC3E,MAAM,CAAC4E,SAAS,CAAC;QAE/B,MAAMC,aAAa,GAAGhF,QAAQ,CAACC,aAAa,CAC1C,sBACF,CAAwB;QACxB,MAAMgF,SAAS,GAAGjF,QAAQ,CAACC,aAAa,CAAC,KAAK,CAAC;QAC/C+E,aAAa,CAAC7E,MAAM,CAAC8E,SAAS,CAAC;;QAE/B;QACA,IAAAtB,aAAG,EAACqB,aAAa,EAAE,iBAAiB,CAAC;QACrC;QACA,IAAArB,aAAG,EAACmB,aAAa,EAAE,iBAAiB,CAAC;QAErCzB,MAAM,CAACtG,eAAe,CAAC,CAAC6G,qBAAqB,CAAC,CAAC,CAAC;QAChDP,MAAM,CAACtG,eAAe,CAAC,CAAC8G,oBAAoB,CAC1CmB,aAAa,CAACE,iBAAiB,EAC/B7B,MAAM,CAACW,gBAAgB,CAAC;UACtBpF,WAAW,EAAEyE,MAAM,CAACW,gBAAgB,CAAC;YACnCtF,IAAI,EAAE;UACR,CAAC;QACH,CAAC,CACH,CAAC;MACH,CAAC,CAAC;IACJ,CAAC,CAAC;IAEFZ,QAAQ,CAAC,6BAA6B,EAAE,MAAM;MAC5CqF,EAAE,CAAC,0DAA0D,EAAE,MAAM;QACnE,MAAM;UAAEpG;QAAgB,CAAC,GAAGJ,OAAO,CAAC,aAAa,CAAC;QAElD,MAAMwI,aAA6B,GAAG;UACpC9C,UAAU,EAAE;YACVE,OAAO,EAAE;cACP7D,IAAI,EAAE,OAAO;cACb8D,SAAS,EAAE;YACb,CAAC;YACDC,MAAM,EAAE;cACN/D,IAAI,EAAE,OAAO;cACb8D,SAAS,EAAE;YACb;UACF,CAAC;UACDvE,YAAY,EAAE,CACZ;YACEC,OAAO,EAAE,OAAO;YAChBC,MAAM,EAAE,iBAAiB;YACzBG,OAAO,EAAE,CACP;cACEC,MAAM,EAAE,mBAAmB;cAC3BC,QAAQ,EAAE,gBAAgB;cAC1B6D,UAAU,EAAE,CAAC,SAAS;YACxB,CAAC,EACD;cACE9D,MAAM,EAAE,mBAAmB;cAC3BC,QAAQ,EAAE,eAAe;cACzB6D,UAAU,EAAE,CAAC,QAAQ;YACvB,CAAC;UAEL,CAAC,CACF;UACD/D,OAAO,EAAE;YACP,gBAAgB,EAAE;cAChBM,WAAW,EAAE;gBACXF,IAAI,EAAE,SAAS;gBACfG,SAAS,EAAE,OAAO;gBAClBC,KAAK,EAAE;cACT,CAAgB;cAChBC,QAAQ,EAAE;YACZ,CAAC;YACD,eAAe,EAAE;cACfH,WAAW,EAAE;gBACXF,IAAI,EAAE,UAAU;gBAChBG,SAAS,EAAE,QAAQ;gBACnBC,KAAK,EAAE;cACT,CAAgB;cAChBC,QAAQ,EAAE;YACZ;UACF;QACF,CAAC;QAEDsC,cAAc,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC;QACvCyB,kBAAQ,CAACM,MAAM,CAAC+B,aAAa,CAAC;QAE9B,MAAML,aAAa,GAAG9E,QAAQ,CAACC,aAAa,CAC1C,sBACF,CAAwB;QACxB,MAAM8E,SAAS,GAAG/E,QAAQ,CAACC,aAAa,CAAC,KAAK,CAAC;QAC/C6E,aAAa,CAAC3E,MAAM,CAAC4E,SAAS,CAAC;QAE/B,MAAMK,cAAc,GAAGpF,QAAQ,CAACC,aAAa,CAC3C,sBACF,CAAwB;QACxB,MAAMoF,UAAU,GAAGrF,QAAQ,CAACC,aAAa,CAAC,KAAK,CAAC;QAChDmF,cAAc,CAACjF,MAAM,CAACkF,UAAU,CAAC;QAEjC,MAAMC,cAAc,GAAGtF,QAAQ,CAACC,aAAa,CAC3C,sBACF,CAAwB;QACxB,MAAMsF,UAAU,GAAGvF,QAAQ,CAACC,aAAa,CAAC,KAAK,CAAC;QAChDqF,cAAc,CAACnF,MAAM,CAACoF,UAAU,CAAC;QAEjC,IAAA5B,aAAG,EAACmB,aAAa,EAAE,iBAAiB,CAAC;QACrC,IAAAnB,aAAG,EAACyB,cAAc,EAAE,mBAAmB,CAAC;QACxC,IAAAzB,aAAG,EAAC2B,cAAc,EAAE,mBAAmB,CAAC;;QAExC;QACAjC,MAAM,CAACtG,eAAe,CAAC,CAAC6G,qBAAqB,CAAC,CAAC,CAAC;QAChDP,MAAM,CAACtG,eAAe,CAAC,CAAC8G,oBAAoB,CAC1CuB,cAAc,CAACF,iBAAiB,EAChC7B,MAAM,CAACW,gBAAgB,CAAC;UACtBpF,WAAW,EAAEyE,MAAM,CAACW,gBAAgB,CAAC;YACnCtF,IAAI,EAAE;UACR,CAAC;QACH,CAAC,CACH,CAAC;;QAED;QACA2E,MAAM,CAACtG,eAAe,CAAC,CAAC4H,GAAG,CAACd,oBAAoB,CAC9CyB,cAAc,CAACJ,iBAAiB,EAChC7B,MAAM,CAACW,gBAAgB,CAAC;UACtBpF,WAAW,EAAEyE,MAAM,CAACW,gBAAgB,CAAC;YACnCtF,IAAI,EAAE;UACR,CAAC;QACH,CAAC,CACH,CAAC;MACH,CAAC,CAAC;MAEFyE,EAAE,CAAC,gDAAgD,EAAE,MAAM;QACzD,MAAM;UAAEpG;QAAgB,CAAC,GAAGJ,OAAO,CAAC,aAAa,CAAC;QAElD,MAAM6I,oBAAoC,GAAG;UAC3CnD,UAAU,EAAE;YACVE,OAAO,EAAE;cACP7D,IAAI,EAAE,OAAO;cACb8D,SAAS,EAAE;YACb,CAAC;YACD,UAAU,EAAE;cACV9D,IAAI,EAAE,OAAO;cACb8D,SAAS,EAAE;YACb;UACF,CAAC;UACDvE,YAAY,EAAE,CACZ;YACEC,OAAO,EAAE,OAAO;YAChBC,MAAM,EAAE,iBAAiB;YACzBG,OAAO,EAAE,CACP;cACEC,MAAM,EAAE,iBAAiB;cACzBC,QAAQ,EAAE;YACZ,CAAC,EACD;cACED,MAAM,EAAE,iBAAiB;cACzBC,QAAQ,EAAE,gBAAgB;cAC1B6D,UAAU,EAAE,CAAC,SAAS,EAAE,UAAU;YACpC,CAAC;UAEL,CAAC,CACF;UACD/D,OAAO,EAAE;YACP,gBAAgB,EAAE;cAChBM,WAAW,EAAE;gBACXF,IAAI,EAAE,MAAM;gBACZG,SAAS,EAAE,MAAM;gBACjBC,KAAK,EAAE;cACT,CAAgB;cAChBC,QAAQ,EAAE;YACZ;UACF;QACF,CAAC;;QAED;QACAsC,cAAc,CAAC,CAAC,mBAAmB,EAAE,uBAAuB,CAAC,CAAC;QAC9DyB,kBAAQ,CAACM,MAAM,CAACoC,oBAAoB,CAAC;QAErC,MAAMV,aAAa,GAAG9E,QAAQ,CAACC,aAAa,CAC1C,sBACF,CAAwB;QACxB,MAAM8E,SAAS,GAAG/E,QAAQ,CAACC,aAAa,CAAC,KAAK,CAAC;QAC/C6E,aAAa,CAAC3E,MAAM,CAAC4E,SAAS,CAAC;QAE/B,MAAMC,aAAa,GAAGhF,QAAQ,CAACC,aAAa,CAC1C,sBACF,CAAwB;QACxB,MAAMgF,SAAS,GAAGjF,QAAQ,CAACC,aAAa,CAAC,KAAK,CAAC;QAC/C+E,aAAa,CAAC7E,MAAM,CAAC8E,SAAS,CAAC;QAE/B,IAAAtB,aAAG,EAACmB,aAAa,EAAE,iBAAiB,CAAC;QACrC,IAAAnB,aAAG,EAACqB,aAAa,EAAE,iBAAiB,CAAC;;QAErC;QACA3B,MAAM,CAACtG,eAAe,CAAC,CAAC6G,qBAAqB,CAAC,CAAC,CAAC;QAChDP,MAAM,CAACtG,eAAe,CAAC,CAAC8G,oBAAoB,CAC1CmB,aAAa,CAACE,iBAAiB,EAC/B7B,MAAM,CAACW,gBAAgB,CAAC;UACtBpF,WAAW,EAAEyE,MAAM,CAACW,gBAAgB,CAAC;YACnCtF,IAAI,EAAE;UACR,CAAC;QACH,CAAC,CACH,CAAC;MACH,CAAC,CAAC;IACJ,CAAC,CAAC;IAEFZ,QAAQ,CAAC,+BAA+B,EAAE,MAAM;MAC9CqF,EAAE,CAAC,6CAA6C,EAAE,MAAM;QACtD,MAAM;UAAEpG;QAAgB,CAAC,GAAGJ,OAAO,CAAC,aAAa,CAAC;QAElD,MAAM8I,0BAA0C,GAAG;UACjDpD,UAAU,EAAE;YACVE,OAAO,EAAE;cACP7D,IAAI,EAAE,OAAO;cACb8D,SAAS,EAAE;YACb;UACF,CAAC;UACDvE,YAAY,EAAE,CACZ;YACEC,OAAO,EAAE,OAAO;YAChBC,MAAM,EAAE,iBAAiB;YACzBG,OAAO,EAAE,CACP;cACEC,MAAM,EAAE,iBAAiB;cACzBC,QAAQ,EAAE;YACZ,CAAC,EACD;cACED,MAAM,EAAE,iBAAiB;cACzBC,QAAQ,EAAE,gBAAgB;cAC1B6D,UAAU,EAAE,CAAC,uBAAuB;YACtC,CAAC;UAEL,CAAC,CACF;UACD/D,OAAO,EAAE;YACP,gBAAgB,EAAE;cAChBM,WAAW,EAAE;gBACXF,IAAI,EAAE,QAAQ;gBACdI,KAAK,EAAE;cACT,CAAgB;cAChBC,QAAQ,EAAE;YACZ;UACF;QACF,CAAC;QAEDsC,cAAc,CAAC,CAAC,mBAAmB,CAAC,CAAC;QACrCyB,kBAAQ,CAACM,MAAM,CAACqC,0BAA0B,CAAC;QAE3C,MAAMX,aAAa,GAAG9E,QAAQ,CAACC,aAAa,CAC1C,sBACF,CAAwB;QACxB,MAAM8E,SAAS,GAAG/E,QAAQ,CAACC,aAAa,CAAC,KAAK,CAAC;QAC/C6E,aAAa,CAAC3E,MAAM,CAAC4E,SAAS,CAAC;QAE/B,MAAMC,aAAa,GAAGhF,QAAQ,CAACC,aAAa,CAC1C,sBACF,CAAwB;QACxB,MAAMgF,SAAS,GAAGjF,QAAQ,CAACC,aAAa,CAAC,KAAK,CAAC;QAC/C+E,aAAa,CAAC7E,MAAM,CAAC8E,SAAS,CAAC;QAE/B,IAAAtB,aAAG,EAACmB,aAAa,EAAE,iBAAiB,CAAC;QACrC,IAAAnB,aAAG,EAACqB,aAAa,EAAE,iBAAiB,CAAC;;QAErC;QACA3B,MAAM,CAACtG,eAAe,CAAC,CAAC6G,qBAAqB,CAAC,CAAC,CAAC;QAChDP,MAAM,CAACtG,eAAe,CAAC,CAAC8G,oBAAoB,CAC1CmB,aAAa,CAACE,iBAAiB,EAC/B7B,MAAM,CAACW,gBAAgB,CAAC;UACtBpF,WAAW,EAAEyE,MAAM,CAACW,gBAAgB,CAAC;YACnCtF,IAAI,EAAE;UACR,CAAC;QACH,CAAC,CACH,CAAC;MACH,CAAC,CAAC;MAEFyE,EAAE,CAAC,sCAAsC,EAAE,MAAM;QAC/C,MAAM;UAAEpG;QAAgB,CAAC,GAAGJ,OAAO,CAAC,aAAa,CAAC;QAElD,MAAM+I,yBAAyC,GAAG;UAChDrD,UAAU,EAAE,CAAC,CAAC;UACdpE,YAAY,EAAE,CACZ;YACEC,OAAO,EAAE,OAAO;YAChBC,MAAM,EAAE,iBAAiB;YACzBG,OAAO,EAAE,CACP;cACEC,MAAM,EAAE,iBAAiB;cACzBC,QAAQ,EAAE,uBAAuB;cACjC6D,UAAU,EAAE;YACd,CAAC;UAEL,CAAC,CACF;UACD/D,OAAO,EAAE;YACP,uBAAuB,EAAE;cACvBM,WAAW,EAAE;gBACXF,IAAI,EAAE,MAAM;gBACZG,SAAS,EAAE,WAAW;gBACtBC,KAAK,EAAE;cACT,CAAgB;cAChBC,QAAQ,EAAE;YACZ;UACF;QACF,CAAC;QAEDsC,cAAc,CAAC,EAAE,CAAC;QAClByB,kBAAQ,CAACM,MAAM,CAACsC,yBAAyB,CAAC;QAE1C,MAAMZ,aAAa,GAAG9E,QAAQ,CAACC,aAAa,CAC1C,sBACF,CAAwB;QACxB,MAAM8E,SAAS,GAAG/E,QAAQ,CAACC,aAAa,CAAC,KAAK,CAAC;QAC/C6E,aAAa,CAAC3E,MAAM,CAAC4E,SAAS,CAAC;QAE/B,MAAMC,aAAa,GAAGhF,QAAQ,CAACC,aAAa,CAC1C,sBACF,CAAwB;QACxB,MAAMgF,SAAS,GAAGjF,QAAQ,CAACC,aAAa,CAAC,KAAK,CAAC;QAC/C+E,aAAa,CAAC7E,MAAM,CAAC8E,SAAS,CAAC;QAE/B,IAAAtB,aAAG,EAACmB,aAAa,EAAE,iBAAiB,CAAC;QACrC,IAAAnB,aAAG,EAACqB,aAAa,EAAE,iBAAiB,CAAC;;QAErC;QACA3B,MAAM,CAACtG,eAAe,CAAC,CAAC6G,qBAAqB,CAAC,CAAC,CAAC;QAChDP,MAAM,CAACtG,eAAe,CAAC,CAAC8G,oBAAoB,CAC1CR,MAAM,CAACS,GAAG,CAACI,WAAW,CAAC,EACvBb,MAAM,CAACW,gBAAgB,CAAC;UACtBpF,WAAW,EAAEyE,MAAM,CAACW,gBAAgB,CAAC;YACnCtF,IAAI,EAAE;UACR,CAAC;QACH,CAAC,CACH,CAAC;MACH,CAAC,CAAC;IACJ,CAAC,CAAC;EACJ,CAAC,CAAC;AACJ,CAAC,CAAC","ignoreList":[]}
@@ -39,6 +39,12 @@ function getObserver(options) {
39
39
  function addViewEnterHandler(source, target, effect, options = {}) {
40
40
  const observer = getObserver(options);
41
41
  const animation = (0, _motion.getWebAnimation)(target, (0, _utilities.effectToAnimationOptions)(effect));
42
+ if (animation) {
43
+ animation.onFinish(() => {
44
+ const endEvent = new Event('animationend');
45
+ target.dispatchEvent(endEvent);
46
+ });
47
+ }
42
48
  const handler = () => {
43
49
  animation.play(() => {
44
50
  // hack this here until we solve initial state properly
@@ -1 +1 @@
1
- {"version":3,"names":["_motion","require","_utilities","observers","handlerMap","WeakMap","getObserver","options","key","JSON","stringify","observer","IntersectionObserver","entries","forEach","entry","isIntersecting","handlers","get","target","source","handler","type","unobserve","root","rootMargin","inset","threshold","addViewEnterHandler","effect","animation","getWebAnimation","effectToAnimationOptions","play","dataset","motionEnter","cleanup","cancel","handlerObj","addHandlerToMap","observe","removeViewEnterHandler","element","removeElementFromHandlerMap","_default","exports","default","add","remove"],"sources":["../../../src/handlers/viewEnter.ts"],"sourcesContent":["import type { AnimationGroup } from '@wix/motion';\nimport { getWebAnimation } from '@wix/motion';\nimport type { TimeEffect, HandlerObjectMap, ViewEnterParams } from '../types';\nimport {\n effectToAnimationOptions,\n addHandlerToMap,\n removeElementFromHandlerMap,\n} from './utilities';\n\nconst observers: Record<string, IntersectionObserver> = {};\nconst handlerMap = new WeakMap() as HandlerObjectMap;\n\nfunction getObserver(options: ViewEnterParams) {\n const key = JSON.stringify(options);\n\n if (observers[key]) {\n return observers[key];\n }\n\n const observer = new IntersectionObserver(\n (entries) => {\n entries.forEach((entry) => {\n if (entry.isIntersecting) {\n const handlers = handlerMap.get(entry.target as HTMLElement);\n\n handlers?.forEach(({ source, handler }) => {\n if (source === entry.target) {\n handler!();\n }\n });\n\n if (options.type === 'once') {\n observer.unobserve(entry.target);\n }\n }\n });\n },\n {\n root: null,\n rootMargin: options.inset\n ? `${options.inset} 0px ${options.inset}`\n : '0px',\n threshold: options.threshold,\n },\n );\n\n observers[key] = observer;\n\n return observer;\n}\n\nfunction addViewEnterHandler(\n source: HTMLElement,\n target: HTMLElement,\n effect: TimeEffect,\n options: ViewEnterParams = {},\n) {\n const observer = getObserver(options);\n const animation = getWebAnimation(\n target,\n effectToAnimationOptions(effect),\n ) as AnimationGroup;\n\n const handler = () => {\n animation.play(() => {\n // hack this here until we solve initial state properly\n target.dataset.motionEnter = 'done';\n });\n };\n const cleanup = () => {\n observer.unobserve(source);\n animation.cancel();\n };\n const handlerObj = { source, target, handler, cleanup };\n\n addHandlerToMap(handlerMap, source, handlerObj);\n addHandlerToMap(handlerMap, target, handlerObj);\n\n observer.observe(source);\n}\n\nfunction removeViewEnterHandler(element: HTMLElement) {\n removeElementFromHandlerMap(handlerMap, element);\n}\n\nexport default {\n add: addViewEnterHandler,\n remove: removeViewEnterHandler,\n};\n"],"mappings":";;;;AACA,IAAAA,OAAA,GAAAC,OAAA;AAEA,IAAAC,UAAA,GAAAD,OAAA;AAMA,MAAME,SAA+C,GAAG,CAAC,CAAC;AAC1D,MAAMC,UAAU,GAAG,IAAIC,OAAO,CAAC,CAAqB;AAEpD,SAASC,WAAWA,CAACC,OAAwB,EAAE;EAC7C,MAAMC,GAAG,GAAGC,IAAI,CAACC,SAAS,CAACH,OAAO,CAAC;EAEnC,IAAIJ,SAAS,CAACK,GAAG,CAAC,EAAE;IAClB,OAAOL,SAAS,CAACK,GAAG,CAAC;EACvB;EAEA,MAAMG,QAAQ,GAAG,IAAIC,oBAAoB,CACtCC,OAAO,IAAK;IACXA,OAAO,CAACC,OAAO,CAAEC,KAAK,IAAK;MACzB,IAAIA,KAAK,CAACC,cAAc,EAAE;QACxB,MAAMC,QAAQ,GAAGb,UAAU,CAACc,GAAG,CAACH,KAAK,CAACI,MAAqB,CAAC;QAE5DF,QAAQ,YAARA,QAAQ,CAAEH,OAAO,CAAC,CAAC;UAAEM,MAAM;UAAEC;QAAQ,CAAC,KAAK;UACzC,IAAID,MAAM,KAAKL,KAAK,CAACI,MAAM,EAAE;YAC3BE,OAAO,CAAE,CAAC;UACZ;QACF,CAAC,CAAC;QAEF,IAAId,OAAO,CAACe,IAAI,KAAK,MAAM,EAAE;UAC3BX,QAAQ,CAACY,SAAS,CAACR,KAAK,CAACI,MAAM,CAAC;QAClC;MACF;IACF,CAAC,CAAC;EACJ,CAAC,EACD;IACEK,IAAI,EAAE,IAAI;IACVC,UAAU,EAAElB,OAAO,CAACmB,KAAK,GACrB,GAAGnB,OAAO,CAACmB,KAAK,QAAQnB,OAAO,CAACmB,KAAK,EAAE,GACvC,KAAK;IACTC,SAAS,EAAEpB,OAAO,CAACoB;EACrB,CACF,CAAC;EAEDxB,SAAS,CAACK,GAAG,CAAC,GAAGG,QAAQ;EAEzB,OAAOA,QAAQ;AACjB;AAEA,SAASiB,mBAAmBA,CAC1BR,MAAmB,EACnBD,MAAmB,EACnBU,MAAkB,EAClBtB,OAAwB,GAAG,CAAC,CAAC,EAC7B;EACA,MAAMI,QAAQ,GAAGL,WAAW,CAACC,OAAO,CAAC;EACrC,MAAMuB,SAAS,GAAG,IAAAC,uBAAe,EAC/BZ,MAAM,EACN,IAAAa,mCAAwB,EAACH,MAAM,CACjC,CAAmB;EAEnB,MAAMR,OAAO,GAAGA,CAAA,KAAM;IACpBS,SAAS,CAACG,IAAI,CAAC,MAAM;MACnB;MACAd,MAAM,CAACe,OAAO,CAACC,WAAW,GAAG,MAAM;IACrC,CAAC,CAAC;EACJ,CAAC;EACD,MAAMC,OAAO,GAAGA,CAAA,KAAM;IACpBzB,QAAQ,CAACY,SAAS,CAACH,MAAM,CAAC;IAC1BU,SAAS,CAACO,MAAM,CAAC,CAAC;EACpB,CAAC;EACD,MAAMC,UAAU,GAAG;IAAElB,MAAM;IAAED,MAAM;IAAEE,OAAO;IAAEe;EAAQ,CAAC;EAEvD,IAAAG,0BAAe,EAACnC,UAAU,EAAEgB,MAAM,EAAEkB,UAAU,CAAC;EAC/C,IAAAC,0BAAe,EAACnC,UAAU,EAAEe,MAAM,EAAEmB,UAAU,CAAC;EAE/C3B,QAAQ,CAAC6B,OAAO,CAACpB,MAAM,CAAC;AAC1B;AAEA,SAASqB,sBAAsBA,CAACC,OAAoB,EAAE;EACpD,IAAAC,sCAA2B,EAACvC,UAAU,EAAEsC,OAAO,CAAC;AAClD;AAAC,IAAAE,QAAA,GAAAC,OAAA,CAAAC,OAAA,GAEc;EACbC,GAAG,EAAEnB,mBAAmB;EACxBoB,MAAM,EAAEP;AACV,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["_motion","require","_utilities","observers","handlerMap","WeakMap","getObserver","options","key","JSON","stringify","observer","IntersectionObserver","entries","forEach","entry","isIntersecting","handlers","get","target","source","handler","type","unobserve","root","rootMargin","inset","threshold","addViewEnterHandler","effect","animation","getWebAnimation","effectToAnimationOptions","onFinish","endEvent","Event","dispatchEvent","play","dataset","motionEnter","cleanup","cancel","handlerObj","addHandlerToMap","observe","removeViewEnterHandler","element","removeElementFromHandlerMap","_default","exports","default","add","remove"],"sources":["../../../src/handlers/viewEnter.ts"],"sourcesContent":["import type { AnimationGroup } from '@wix/motion';\nimport { getWebAnimation } from '@wix/motion';\nimport type { TimeEffect, HandlerObjectMap, ViewEnterParams } from '../types';\nimport {\n effectToAnimationOptions,\n addHandlerToMap,\n removeElementFromHandlerMap,\n} from './utilities';\n\nconst observers: Record<string, IntersectionObserver> = {};\nconst handlerMap = new WeakMap() as HandlerObjectMap;\n\nfunction getObserver(options: ViewEnterParams) {\n const key = JSON.stringify(options);\n\n if (observers[key]) {\n return observers[key];\n }\n\n const observer = new IntersectionObserver(\n (entries) => {\n entries.forEach((entry) => {\n if (entry.isIntersecting) {\n const handlers = handlerMap.get(entry.target as HTMLElement);\n\n handlers?.forEach(({ source, handler }) => {\n if (source === entry.target) {\n handler!();\n }\n });\n\n if (options.type === 'once') {\n observer.unobserve(entry.target);\n }\n }\n });\n },\n {\n root: null,\n rootMargin: options.inset\n ? `${options.inset} 0px ${options.inset}`\n : '0px',\n threshold: options.threshold,\n },\n );\n\n observers[key] = observer;\n\n return observer;\n}\n\nfunction addViewEnterHandler(\n source: HTMLElement,\n target: HTMLElement,\n effect: TimeEffect,\n options: ViewEnterParams = {},\n) {\n const observer = getObserver(options);\n const animation = getWebAnimation(\n target,\n effectToAnimationOptions(effect),\n ) as AnimationGroup;\n\n if (animation) {\n animation.onFinish(() => {\n const endEvent = new Event('animationend');\n target.dispatchEvent(endEvent);\n });\n }\n\n const handler = () => {\n animation.play(() => {\n // hack this here until we solve initial state properly\n target.dataset.motionEnter = 'done';\n });\n };\n const cleanup = () => {\n observer.unobserve(source);\n animation.cancel();\n };\n const handlerObj = { source, target, handler, cleanup };\n\n addHandlerToMap(handlerMap, source, handlerObj);\n addHandlerToMap(handlerMap, target, handlerObj);\n\n observer.observe(source);\n}\n\nfunction removeViewEnterHandler(element: HTMLElement) {\n removeElementFromHandlerMap(handlerMap, element);\n}\n\nexport default {\n add: addViewEnterHandler,\n remove: removeViewEnterHandler,\n};\n"],"mappings":"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","ignoreList":[]}
@@ -5,7 +5,8 @@ import { effectToAnimationOptions } from '../handlers/utilities';
5
5
  jest.mock('@wix/motion', () => ({
6
6
  getWebAnimation: jest.fn().mockReturnValue({
7
7
  play: jest.fn(),
8
- cancel: jest.fn()
8
+ cancel: jest.fn(),
9
+ onFinish: jest.fn()
9
10
  }),
10
11
  getScrubScene: jest.fn().mockReturnValue({}),
11
12
  getEasing: jest.fn().mockImplementation(v => v)
@@ -1 +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":[]}
1
+ {"version":3,"names":["Interact","add","remove","effectToAnimationOptions","jest","mock","getWebAnimation","fn","mockReturnValue","play","cancel","onFinish","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 onFinish: 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":[]}
@@ -39,6 +39,12 @@ function addViewEnterHandler(source, target, effect, options) {
39
39
  }
40
40
  const observer = getObserver(options);
41
41
  const animation = getWebAnimation(target, effectToAnimationOptions(effect));
42
+ if (animation) {
43
+ animation.onFinish(() => {
44
+ const endEvent = new Event('animationend');
45
+ target.dispatchEvent(endEvent);
46
+ });
47
+ }
42
48
  const handler = () => {
43
49
  animation.play(() => {
44
50
  // hack this here until we solve initial state properly
@@ -1 +1 @@
1
- {"version":3,"names":["getWebAnimation","effectToAnimationOptions","addHandlerToMap","removeElementFromHandlerMap","observers","handlerMap","WeakMap","getObserver","options","key","JSON","stringify","observer","IntersectionObserver","entries","forEach","entry","isIntersecting","handlers","get","target","_ref","source","handler","type","unobserve","root","rootMargin","inset","threshold","addViewEnterHandler","effect","animation","play","dataset","motionEnter","cleanup","cancel","handlerObj","observe","removeViewEnterHandler","element","add","remove"],"sources":["../../../src/handlers/viewEnter.ts"],"sourcesContent":["import type { AnimationGroup } from '@wix/motion';\nimport { getWebAnimation } from '@wix/motion';\nimport type { TimeEffect, HandlerObjectMap, ViewEnterParams } from '../types';\nimport {\n effectToAnimationOptions,\n addHandlerToMap,\n removeElementFromHandlerMap,\n} from './utilities';\n\nconst observers: Record<string, IntersectionObserver> = {};\nconst handlerMap = new WeakMap() as HandlerObjectMap;\n\nfunction getObserver(options: ViewEnterParams) {\n const key = JSON.stringify(options);\n\n if (observers[key]) {\n return observers[key];\n }\n\n const observer = new IntersectionObserver(\n (entries) => {\n entries.forEach((entry) => {\n if (entry.isIntersecting) {\n const handlers = handlerMap.get(entry.target as HTMLElement);\n\n handlers?.forEach(({ source, handler }) => {\n if (source === entry.target) {\n handler!();\n }\n });\n\n if (options.type === 'once') {\n observer.unobserve(entry.target);\n }\n }\n });\n },\n {\n root: null,\n rootMargin: options.inset\n ? `${options.inset} 0px ${options.inset}`\n : '0px',\n threshold: options.threshold,\n },\n );\n\n observers[key] = observer;\n\n return observer;\n}\n\nfunction addViewEnterHandler(\n source: HTMLElement,\n target: HTMLElement,\n effect: TimeEffect,\n options: ViewEnterParams = {},\n) {\n const observer = getObserver(options);\n const animation = getWebAnimation(\n target,\n effectToAnimationOptions(effect),\n ) as AnimationGroup;\n\n const handler = () => {\n animation.play(() => {\n // hack this here until we solve initial state properly\n target.dataset.motionEnter = 'done';\n });\n };\n const cleanup = () => {\n observer.unobserve(source);\n animation.cancel();\n };\n const handlerObj = { source, target, handler, cleanup };\n\n addHandlerToMap(handlerMap, source, handlerObj);\n addHandlerToMap(handlerMap, target, handlerObj);\n\n observer.observe(source);\n}\n\nfunction removeViewEnterHandler(element: HTMLElement) {\n removeElementFromHandlerMap(handlerMap, element);\n}\n\nexport default {\n add: addViewEnterHandler,\n remove: removeViewEnterHandler,\n};\n"],"mappings":"AACA,SAASA,eAAe,QAAQ,aAAa;AAE7C,SACEC,wBAAwB,EACxBC,eAAe,EACfC,2BAA2B,QACtB,aAAa;AAEpB,MAAMC,SAA+C,GAAG,CAAC,CAAC;AAC1D,MAAMC,UAAU,GAAG,IAAIC,OAAO,CAAC,CAAqB;AAEpD,SAASC,WAAWA,CAACC,OAAwB,EAAE;EAC7C,MAAMC,GAAG,GAAGC,IAAI,CAACC,SAAS,CAACH,OAAO,CAAC;EAEnC,IAAIJ,SAAS,CAACK,GAAG,CAAC,EAAE;IAClB,OAAOL,SAAS,CAACK,GAAG,CAAC;EACvB;EAEA,MAAMG,QAAQ,GAAG,IAAIC,oBAAoB,CACtCC,OAAO,IAAK;IACXA,OAAO,CAACC,OAAO,CAAEC,KAAK,IAAK;MACzB,IAAIA,KAAK,CAACC,cAAc,EAAE;QACxB,MAAMC,QAAQ,GAAGb,UAAU,CAACc,GAAG,CAACH,KAAK,CAACI,MAAqB,CAAC;QAE5DF,QAAQ,YAARA,QAAQ,CAAEH,OAAO,CAACM,IAAA,IAAyB;UAAA,IAAxB;YAAEC,MAAM;YAAEC;UAAQ,CAAC,GAAAF,IAAA;UACpC,IAAIC,MAAM,KAAKN,KAAK,CAACI,MAAM,EAAE;YAC3BG,OAAO,CAAE,CAAC;UACZ;QACF,CAAC,CAAC;QAEF,IAAIf,OAAO,CAACgB,IAAI,KAAK,MAAM,EAAE;UAC3BZ,QAAQ,CAACa,SAAS,CAACT,KAAK,CAACI,MAAM,CAAC;QAClC;MACF;IACF,CAAC,CAAC;EACJ,CAAC,EACD;IACEM,IAAI,EAAE,IAAI;IACVC,UAAU,EAAEnB,OAAO,CAACoB,KAAK,GACrB,GAAGpB,OAAO,CAACoB,KAAK,QAAQpB,OAAO,CAACoB,KAAK,EAAE,GACvC,KAAK;IACTC,SAAS,EAAErB,OAAO,CAACqB;EACrB,CACF,CAAC;EAEDzB,SAAS,CAACK,GAAG,CAAC,GAAGG,QAAQ;EAEzB,OAAOA,QAAQ;AACjB;AAEA,SAASkB,mBAAmBA,CAC1BR,MAAmB,EACnBF,MAAmB,EACnBW,MAAkB,EAClBvB,OAAwB,EACxB;EAAA,IADAA,OAAwB;IAAxBA,OAAwB,GAAG,CAAC,CAAC;EAAA;EAE7B,MAAMI,QAAQ,GAAGL,WAAW,CAACC,OAAO,CAAC;EACrC,MAAMwB,SAAS,GAAGhC,eAAe,CAC/BoB,MAAM,EACNnB,wBAAwB,CAAC8B,MAAM,CACjC,CAAmB;EAEnB,MAAMR,OAAO,GAAGA,CAAA,KAAM;IACpBS,SAAS,CAACC,IAAI,CAAC,MAAM;MACnB;MACAb,MAAM,CAACc,OAAO,CAACC,WAAW,GAAG,MAAM;IACrC,CAAC,CAAC;EACJ,CAAC;EACD,MAAMC,OAAO,GAAGA,CAAA,KAAM;IACpBxB,QAAQ,CAACa,SAAS,CAACH,MAAM,CAAC;IAC1BU,SAAS,CAACK,MAAM,CAAC,CAAC;EACpB,CAAC;EACD,MAAMC,UAAU,GAAG;IAAEhB,MAAM;IAAEF,MAAM;IAAEG,OAAO;IAAEa;EAAQ,CAAC;EAEvDlC,eAAe,CAACG,UAAU,EAAEiB,MAAM,EAAEgB,UAAU,CAAC;EAC/CpC,eAAe,CAACG,UAAU,EAAEe,MAAM,EAAEkB,UAAU,CAAC;EAE/C1B,QAAQ,CAAC2B,OAAO,CAACjB,MAAM,CAAC;AAC1B;AAEA,SAASkB,sBAAsBA,CAACC,OAAoB,EAAE;EACpDtC,2BAA2B,CAACE,UAAU,EAAEoC,OAAO,CAAC;AAClD;AAEA,eAAe;EACbC,GAAG,EAAEZ,mBAAmB;EACxBa,MAAM,EAAEH;AACV,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["getWebAnimation","effectToAnimationOptions","addHandlerToMap","removeElementFromHandlerMap","observers","handlerMap","WeakMap","getObserver","options","key","JSON","stringify","observer","IntersectionObserver","entries","forEach","entry","isIntersecting","handlers","get","target","_ref","source","handler","type","unobserve","root","rootMargin","inset","threshold","addViewEnterHandler","effect","animation","onFinish","endEvent","Event","dispatchEvent","play","dataset","motionEnter","cleanup","cancel","handlerObj","observe","removeViewEnterHandler","element","add","remove"],"sources":["../../../src/handlers/viewEnter.ts"],"sourcesContent":["import type { AnimationGroup } from '@wix/motion';\nimport { getWebAnimation } from '@wix/motion';\nimport type { TimeEffect, HandlerObjectMap, ViewEnterParams } from '../types';\nimport {\n effectToAnimationOptions,\n addHandlerToMap,\n removeElementFromHandlerMap,\n} from './utilities';\n\nconst observers: Record<string, IntersectionObserver> = {};\nconst handlerMap = new WeakMap() as HandlerObjectMap;\n\nfunction getObserver(options: ViewEnterParams) {\n const key = JSON.stringify(options);\n\n if (observers[key]) {\n return observers[key];\n }\n\n const observer = new IntersectionObserver(\n (entries) => {\n entries.forEach((entry) => {\n if (entry.isIntersecting) {\n const handlers = handlerMap.get(entry.target as HTMLElement);\n\n handlers?.forEach(({ source, handler }) => {\n if (source === entry.target) {\n handler!();\n }\n });\n\n if (options.type === 'once') {\n observer.unobserve(entry.target);\n }\n }\n });\n },\n {\n root: null,\n rootMargin: options.inset\n ? `${options.inset} 0px ${options.inset}`\n : '0px',\n threshold: options.threshold,\n },\n );\n\n observers[key] = observer;\n\n return observer;\n}\n\nfunction addViewEnterHandler(\n source: HTMLElement,\n target: HTMLElement,\n effect: TimeEffect,\n options: ViewEnterParams = {},\n) {\n const observer = getObserver(options);\n const animation = getWebAnimation(\n target,\n effectToAnimationOptions(effect),\n ) as AnimationGroup;\n\n if (animation) {\n animation.onFinish(() => {\n const endEvent = new Event('animationend');\n target.dispatchEvent(endEvent);\n });\n }\n\n const handler = () => {\n animation.play(() => {\n // hack this here until we solve initial state properly\n target.dataset.motionEnter = 'done';\n });\n };\n const cleanup = () => {\n observer.unobserve(source);\n animation.cancel();\n };\n const handlerObj = { source, target, handler, cleanup };\n\n addHandlerToMap(handlerMap, source, handlerObj);\n addHandlerToMap(handlerMap, target, handlerObj);\n\n observer.observe(source);\n}\n\nfunction removeViewEnterHandler(element: HTMLElement) {\n removeElementFromHandlerMap(handlerMap, element);\n}\n\nexport default {\n add: addViewEnterHandler,\n remove: removeViewEnterHandler,\n};\n"],"mappings":"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","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wix/interact",
3
- "version": "1.68.0",
3
+ "version": "1.70.0",
4
4
  "author": {
5
5
  "name": "wow!Team",
6
6
  "email": "wow-dev@wix.com"
@@ -31,16 +31,16 @@
31
31
  },
32
32
  "dependencies": {
33
33
  "@babel/runtime": "^7.26.0",
34
- "@wix/motion": "1.582.0",
34
+ "@wix/motion": "1.592.0",
35
35
  "fizban": "^0.7.0",
36
36
  "kuliso": "^0.4.13"
37
37
  },
38
38
  "devDependencies": {
39
39
  "@types/jest": "^27.5.2",
40
40
  "@types/node": "^16.18.123",
41
- "@wix/eslint-config-yoshi": "^6.157.0",
42
- "@wix/jest-yoshi-preset": "^6.157.0",
43
- "@wix/yoshi-flow-library": "^6.157.0",
41
+ "@wix/eslint-config-yoshi": "^6.158.0",
42
+ "@wix/jest-yoshi-preset": "^6.158.0",
43
+ "@wix/yoshi-flow-library": "^6.158.0",
44
44
  "ts-jest": "^29.2.5",
45
45
  "typescript": "~4.9.5"
46
46
  },
@@ -67,5 +67,5 @@
67
67
  "wallaby": {
68
68
  "autoDetect": true
69
69
  },
70
- "falconPackageHash": "7023779ce68315079d08c55c99003dd4063eea3736b422a73684107e"
70
+ "falconPackageHash": "3c8dcb90e4e1769fdd1412987d943c9842e69cd114489153030e1db6"
71
71
  }